今日SB500老师在群里翻出了当年的帖子,定睛一看,居然是07年的。时间过得很快,一下子十年就过去了,颇有感触。那就发一下当年的存货,并致敬一下当年吧。该50指令写于2008年7月13日,按照时间轴上看,当时scarscc的pascal版本正在起草阶段,主流引擎仍然是DOS。KG手上存有一些现在我们说的“黑科技”,能够通过工具把“状态”选项改成执行某个事件。于是当时就有一个想法,重构状态界面。当然,这件事情在各种复刻引擎发布后变得不太难了,而在DOS版中,通过50指令在小小的320x200上写下那么多字现在看来还是很厉害的。
详细用法已经查无此证,现在只记得几点:1.1098是真正的状态界面,1099是进行状态调色的function。
2.1098中的四个input似乎只用到了第一个,就是人物编号,现在的写法就是funtion_1098(user_id)。
图1是该sub在执行后的效果图,该效果图使用了原版杨过30级的数据。从图上来看,基本囊括了人物的属性,也有一些比较创新的点例如随着能力的增加改变属性颜色,装备图片显示等。同样不足也很明显,配色略显稚嫩,当年我18,压根不知道啥叫配色。也没有啥未来要改进的工作了,一切瞎整。
图1 杨过效果图
对近十年来参与金庸MOD研究的同行致敬!
- ;Kdefnum=1098
- 0 ; 0(0)::空语句(清屏)
- 50 0 29 20 0 0 0 0 ; 50(32):变量赋值 [X29]=20
- 50 0 30 1200 0 0 0 0 ; 50(32):变量赋值 [X30]=1200
- 50 0 51 41 0 0 0 0 ; 50(32):变量赋值 [X51]=41
- 50 0 50 18 0 0 0 0 ; 50(32):变量赋值 [X50]=18
- 50 0 63 124 0 0 0 0 ; 50(32):变量赋值 [X63]=124
- 50 0 64 144 0 0 0 0 ; 50(32):变量赋值 [X64]=144
- 50 0 66 13 0 0 0 0 ; 50(32):变量赋值 [X66]=13
- 50 0 67 5 0 0 0 0 ; 50(32):变量赋值 [X67]=5
- 50 34 0 0 0 320 200 0 ; 50(32):处理背景 位置(0,0) Width=320 Height=200
- 50 8 0 3161 100 0 0 0 ; 50(32):读对话到字符串 Str[X100]=talk(3161)
- 50 8 0 3173 1200 0 0 0 ; 50(32):读对话到字符串 Str[X1200]=talk(3173)
- 50 8 0 3175 1300 0 0 0 ; 50(32):读对话到字符串 Str[X1300]=talk(3175)
- 50 8 0 3176 1400 0 0 0 ; 50(32):读对话到字符串 Str[X1400]=talk(3176)
- 50 8 0 3179 1500 0 0 0 ; 50(32):读对话到字符串 Str[X1500]=talk(3179)
- 50 8 0 3180 1600 0 0 0 ; 50(32):读对话到字符串 Str[X1600]=talk(3180)
- 50 8 0 3181 1700 0 0 0 ; 50(32):读对话到字符串 Str[X1700]=talk(3181)
- 50 8 0 3182 1800 0 0 0 ; 50(32):读对话到字符串 Str[X1800]=talk(3182)
- 50 8 0 3183 1900 0 0 0 ; 50(32):读对话到字符串 Str[X1900]=talk(3183)
- 50 8 0 3188 2000 0 0 0 ; 50(32):读对话到字符串 Str[X2000]=talk(3188)
- 50 8 0 3189 2100 0 0 0 ; 50(32):读对话到字符串 Str[X2100]=talk(3189)
- 50 8 0 3190 2200 0 0 0 ; 50(32):读对话到字符串 Str[X2200]=talk(3190)
- 50 8 0 3191 2210 0 0 0 ; 50(32):读对话到字符串 Str[X2210]=talk(3191)
- 50 8 0 3141 2220 0 0 0 ; 50(32):读对话到字符串 Str[X2220]=talk(3141)
- 50 8 0 3142 2230 0 0 0 ; 50(32):读对话到字符串 Str[X2230]=talk(3142)
- 50 8 0 3140 2240 0 0 0 ; 50(32):读对话到字符串 Str[X2240]=talk(3140)
- 50 8 0 3143 2250 0 0 0 ; 50(32):读对话到字符串 Str[X2250]=talk(3143)
- 50 8 0 3144 2260 0 0 0 ; 50(32):读对话到字符串 Str[X2260]=talk(3144)
- 50 8 0 3145 2290 0 0 0 ; 50(32):读对话到字符串 Str[X2290]=talk(3145)
- 50 8 0 3146 2310 0 0 0 ; 50(32):读对话到字符串 Str[X2310]=talk(3146)
- 50 6 20 26739 28261 28007 28265 103 ; 50(32):定义变量名 [X20]:shengming
- 50 6 21 25966 27753 105 0 0 ; 50(32):定义变量名 [X21]:neili
- 50 6 22 28519 26478 26986 26988 0 ; 50(32):定义变量名 [X22]:gongjili
- 50 6 23 24934 26478 30073 0 0 ; 50(32):定义变量名 [X23]:fangyu
- 50 6 24 30065 28257 0 0 0 ; 50(32):定义变量名 [X24]:quan
- 50 6 25 26746 28257 103 0 0 ; 50(32):定义变量名 [X25]:zhang
- 50 6 26 26986 28257 0 0 0 ; 50(32):定义变量名 [X26]:jian
- 50 6 27 24932 111 0 0 0 ; 50(32):定义变量名 [X27]:dao
- 50 6 28 26993 26478 0 0 0 ; 50(32):定义变量名 [X28]:qing
- 50 3 0 0 10 28928 0 0 ; 50(32):四则运算 [X10]=[X28928]+0
- 50 3 0 0 11 28929 0 0 ; 50(32):四则运算 [X11]=[X28929]+0
- 50 3 0 0 12 28930 0 0 ; 50(32):四则运算 [X12]=[X28930]+0
- 50 3 0 0 13 28931 0 0 ; 50(32):四则运算 [X13]=[X28931]+0
- 50 27 1 0 10 1100 0 0 ; 50(32):取属性名称 Str1100=人物[X10]
- 50 17 1 0 10 34 20 0 ; 50(32):读取属性 [shengming]=人物[X10]属性偏移34
- 50 17 1 0 10 82 21 0 ; 50(32):读取属性 [neili]=人物[X10]属性偏移82
- 50 17 1 0 10 86 22 0 ; 50(32):读取属性 [gongjili]=人物[X10]属性偏移86
- 50 17 1 0 10 88 28 0 ; 50(32):读取属性 [qing]=人物[X10]属性偏移88
- 50 17 1 0 10 90 23 0 ; 50(32):读取属性 [fangyu]=人物[X10]属性偏移90
- 50 17 1 0 10 100 24 0 ; 50(32):读取属性 [quan]=人物[X10]属性偏移100
- 50 17 1 0 10 102 25 0 ; 50(32):读取属性 [zhang]=人物[X10]属性偏移102
- 50 17 1 0 10 104 26 0 ; 50(32):读取属性 [jian]=人物[X10]属性偏移104
- 50 17 1 0 10 106 27 0 ; 50(32):读取属性 [dao]=人物[X10]属性偏移106
- 50 17 1 0 10 110 31 0 ; 50(32):读取属性 [X31]=人物[X10]属性偏移110
- 50 17 1 0 10 112 32 0 ; 50(32):读取属性 [X32]=人物[X10]属性偏移112
- 50 17 1 0 10 120 33 0 ; 50(32):读取属性 [X33]=人物[X10]属性偏移120
- 50 17 1 0 10 32 34 0 ; 50(32):读取属性 [X34]=人物[X10]属性偏移32
- 50 17 1 0 10 2 39 0 ; 50(32):读取属性 [X39]=人物[X10]属性偏移2
- 50 17 1 0 10 36 40 0 ; 50(32):读取属性 [X40]=人物[X10]属性偏移36
- 50 17 1 0 10 84 41 0 ; 50(32):读取属性 [X41]=人物[X10]属性偏移84
- 50 17 1 0 10 46 45 0 ; 50(32):读取属性 [X45]=人物[X10]属性偏移46
- 50 17 1 0 10 48 46 0 ; 50(32):读取属性 [X46]=人物[X10]属性偏移48
- 50 17 1 0 10 122 47 0 ; 50(32):读取属性 [X47]=人物[X10]属性偏移122
- 50 3 0 0 64 64 2 0 ; 50(32):四则运算 [X64]=[X64]+2
- 50 3 0 0 67 67 15 0 ; 50(32):四则运算 [X67]=[X67]+15
- 50 3 0 0 63 63 2 0 ; 50(32):四则运算 [X63]=[X63]+2
- ;:Label1
- 50 17 3 0 10 63 60 0 ; 50(32):读取属性 [X60]=人物[X10]属性偏移[X63]
- 50 4 0 2 60 0 0 0 ; 50(32):变量判断 If[X60]=0 then JMP=0 else JMP=1
- 36 256 140 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label0
- 50 27 1 3 60 2330 0 0 ; 50(32):取属性名称 Str2330=武功[X60]
- 50 10 2330 61 0 0 0 0 ; 50(32):取字符串长度 [X61]=Len(Str[X2330] )
- 50 17 3 0 10 64 62 0 ; 50(32):读取属性 [X62]=人物[X10]属性偏移[X64]
- 50 3 0 3 62 62 100 0 ; 50(32):四则运算 [X62]=[X62]/100
- 50 3 0 0 62 62 1 0 ; 50(32):四则运算 [X62]=[X62]+1
- 50 9 1 970 100 62 0 0 ; 50(32):Sprintf Str[X970]=CStr([X62]) FORMAT=Str[X100]
- 50 10 970 65 0 0 0 0 ; 50(32):取字符串长度 [X65]=Len(Str[X970] )
- 50 3 1 0 65 61 65 0 ; 50(32):四则运算 [X65]=[X61]+[X65]
- 50 3 1 1 65 66 65 0 ; 50(32):四则运算 [X65]=[X66]-[X65]
- 50 12 1 980 65 0 0 0 ; 50(32):空格字符串 Str[X980]=[X65]个空格
- 50 11 2330 2330 980 0 0 0 ; 50(32):字符串合并 Str[X2330]=Str[X2330]+Str[X980]
- 50 11 2330 2330 970 0 0 0 ; 50(32):字符串合并 Str[X2330]=Str[X2330]+Str[X970]
- 50 33 2 2330 210 67 1797 0 ; 50(32):显示字符串 显示字符串2330 (210,[X67])Color1797
- 50 3 0 0 67 67 15 0 ; 50(32):四则运算 [X67]=[X67]+15
- 50 3 0 0 64 64 2 0 ; 50(32):四则运算 [X64]=[X64]+2
- 50 3 0 0 63 63 2 0 ; 50(32):四则运算 [X63]=[X63]+2
- 50 4 0 0 64 165 0 0 ; 50(32):变量判断 If[X64]<165 then JMP=0 else JMP=1
- 36 256 -160 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label1
- ;:Label0
- 50 4 0 4 34 0 0 0 ; 50(32):变量判断 If[X34]>=0 then JMP=0 else JMP=1
- 36 256 8 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label2
- 50 3 0 0 34 34 32767 0 ; 50(32):四则运算 [X34]=[X34]+32767
- ;:Label2
- 50 9 1 200 100 20 0 0 ; 50(32):Sprintf Str[X200]=CStr([shengming]) FORMAT=Str[X100]
- 50 9 1 300 100 21 0 0 ; 50(32):Sprintf Str[X300]=CStr([neili]) FORMAT=Str[X100]
- 50 9 1 400 100 22 0 0 ; 50(32):Sprintf Str[X400]=CStr([gongjili]) FORMAT=Str[X100]
- 50 9 1 1000 100 28 0 0 ; 50(32):Sprintf Str[X1000]=CStr([qing]) FORMAT=Str[X100]
- 50 9 1 500 100 23 0 0 ; 50(32):Sprintf Str[X500]=CStr([fangyu]) FORMAT=Str[X100]
- 50 9 1 600 100 24 0 0 ; 50(32):Sprintf Str[X600]=CStr([quan]) FORMAT=Str[X100]
- 50 9 1 700 100 25 0 0 ; 50(32):Sprintf Str[X700]=CStr([zhang]) FORMAT=Str[X100]
- 50 9 1 800 100 26 0 0 ; 50(32):Sprintf Str[X800]=CStr([jian]) FORMAT=Str[X100]
- 50 9 1 900 100 27 0 0 ; 50(32):Sprintf Str[X900]=CStr([dao]) FORMAT=Str[X100]
- 50 9 1 910 100 31 0 0 ; 50(32):Sprintf Str[X910]=CStr([X31]) FORMAT=Str[X100]
- 50 9 1 920 100 32 0 0 ; 50(32):Sprintf Str[X920]=CStr([X32]) FORMAT=Str[X100]
- 50 9 1 930 100 33 0 0 ; 50(32):Sprintf Str[X930]=CStr([X33]) FORMAT=Str[X100]
- 50 9 1 940 100 34 0 0 ; 50(32):Sprintf Str[X940]=CStr([X34]) FORMAT=Str[X100]
- 50 9 1 950 100 40 0 0 ; 50(32):Sprintf Str[X950]=CStr([X40]) FORMAT=Str[X100]
- 50 9 1 960 100 41 0 0 ; 50(32):Sprintf Str[X960]=CStr([X41]) FORMAT=Str[X100]
- 50 33 0 1100 2 5 18241 0 ; 50(32):显示字符串 显示字符串1100 (2,5)Color18241
- ;:Label3
- 50 32 0 30 3 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数3=[X30]
- 50 33 2 1100 2 29 -26989 0 ; 50(32):显示字符串 显示字符串1100 (2,[X29])Color-26989
- 50 3 0 0 29 29 15 0 ; 50(32):四则运算 [X29]=[X29]+15
- 50 3 0 0 30 30 100 0 ; 50(32):四则运算 [X30]=[X30]+100
- 50 4 0 0 29 171 0 0 ; 50(32):变量判断 If[X29]<171 then JMP=0 else JMP=1
- 36 256 -44 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label3
- 50 43 2 1099 22 400 35 20 ; 50(32):调用其它事件 Call Sub1099([gongjili],[X400],[X35],[shengming])
- 50 43 2 1099 23 500 35 35 ; 50(32):调用其它事件 Call Sub1099([fangyu],[X500],[X35],[X35])
- 50 43 2 1099 28 1000 35 50 ; 50(32):调用其它事件 Call Sub1099([qing],[X1000],[X35],[X50])
- 50 43 2 1099 24 600 35 65 ; 50(32):调用其它事件 Call Sub1099([quan],[X600],[X35],[X65])
- 50 43 2 1099 25 700 35 80 ; 50(32):调用其它事件 Call Sub1099([zhang],[X700],[X35],[X80])
- 50 43 2 1099 26 800 35 95 ; 50(32):调用其它事件 Call Sub1099([jian],[X800],[X35],[X95])
- 50 43 2 1099 27 900 35 110 ; 50(32):调用其它事件 Call Sub1099([dao],[X900],[X35],[X110])
- 50 43 2 1099 31 910 35 125 ; 50(32):调用其它事件 Call Sub1099([X31],[X910],[X35],[X125])
- 50 43 2 1099 32 920 35 140 ; 50(32):调用其它事件 Call Sub1099([X32],[X920],[X35],[X140])
- 50 43 2 1099 33 930 35 155 ; 50(32):调用其它事件 Call Sub1099([X33],[X930],[X35],[X155])
- 50 33 0 940 5 183 -1 0 ; 50(32):显示字符串 显示字符串940 (5,183)Color-1
- 50 11 2220 2220 950 0 0 0 ; 50(32):字符串合并 Str[X2220]=Str[X2220]+Str[X950]
- 50 11 2220 2220 2240 0 0 0 ; 50(32):字符串合并 Str[X2220]=Str[X2220]+Str[X2240]
- 50 11 2220 2220 200 0 0 0 ; 50(32):字符串合并 Str[X2220]=Str[X2220]+Str[X200]
- 50 33 0 2220 75 65 1797 0 ; 50(32):显示字符串 显示字符串2220 (75,65)Color1797
- 50 11 2230 2230 960 0 0 0 ; 50(32):字符串合并 Str[X2230]=Str[X2230]+Str[X960]
- 50 11 2230 2230 2240 0 0 0 ; 50(32):字符串合并 Str[X2230]=Str[X2230]+Str[X2240]
- 50 11 2230 2230 300 0 0 0 ; 50(32):字符串合并 Str[X2230]=Str[X2230]+Str[X300]
- 50 33 0 2230 75 80 1797 0 ; 50(32):显示字符串 显示字符串2230 (75,80)Color1797
- 50 27 1 1 45 2270 0 0 ; 50(32):取属性名称 Str2270=物品[X45]
- 50 27 1 1 46 2280 0 0 ; 50(32):取属性名称 Str2280=物品[X46]
- 50 11 2250 2250 2270 0 0 0 ; 50(32):字符串合并 Str[X2250]=Str[X2250]+Str[X2270]
- 50 11 2260 2260 2280 0 0 0 ; 50(32):字符串合并 Str[X2260]=Str[X2260]+Str[X2280]
- 50 33 0 2250 75 95 14387 0 ; 50(32):显示字符串 显示字符串2250 (75,95)Color14387
- 50 33 0 2260 75 110 18499 0 ; 50(32):显示字符串 显示字符串2260 (75,110)Color18499
- 50 4 0 2 45 -1 0 0 ; 50(32):变量判断 If[X45]=-1 then JMP=0 else JMP=1
- 36 256 24 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label4
- 50 3 0 2 45 45 2 0 ; 50(32):四则运算 [X45]=[X45]*2
- 50 3 0 0 45 45 7002 0 ; 50(32):四则运算 [X45]=[X45]+7002
- 50 41 4 0 75 5 45 0 ; 50(32):显示图片 场景图片[X45] 位置(75,5)
- ;:Label4
- 50 4 0 2 46 -1 0 0 ; 50(32):变量判断 If[X46]=-1 then JMP=0 else JMP=1
- 36 256 24 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label5
- 50 3 0 2 46 46 2 0 ; 50(32):四则运算 [X46]=[X46]*2
- 50 3 0 0 46 46 7002 0 ; 50(32):四则运算 [X46]=[X46]+7002
- 50 41 4 0 140 25 46 0 ; 50(32):显示图片 场景图片[X46] 位置(140,25)
- ;:Label5
- 50 41 4 1 100 63 39 0 ; 50(32):显示图片 头像图片[X39] 位置(100,63)
- 50 27 1 1 47 2280 0 0 ; 50(32):取属性名称 Str2280=物品[X47]
- 50 11 2290 2290 2280 0 0 0 ; 50(32):字符串合并 Str[X2290]=Str[X2290]+Str[X2280]
- 50 33 0 2290 75 125 5395 0 ; 50(32):显示字符串 显示字符串2290 (75,125)Color5395
- 50 33 0 2310 210 5 1797 0 ; 50(32):显示字符串 显示字符串2310 (210,5)Color1797
- 50 35 30 0 0 0 0 0 ; 50(32):读取键盘 [X30]=键值
- -1 ; -1(FFFF):事件结束
- -------------------------------------------------------------------------------------------
- ;Kdefnum=1099
- 50 3 0 0 10 28928 0 0 ; 50(32):四则运算 [X10]=[X28928]+0
- 50 3 0 0 10 28928 0 0 ; 50(32):四则运算 [X10]=[X28928]+0
- 50 3 0 0 11 28929 0 0 ; 50(32):四则运算 [X11]=[X28929]+0
- 50 3 0 0 12 28930 0 0 ; 50(32):四则运算 [X12]=[X28930]+0
- 50 3 0 0 13 28931 0 0 ; 50(32):四则运算 [X13]=[X28931]+0
- 50 4 0 5 10 75 0 0 ; 50(32):变量判断 If[X10]>75 then JMP=0 else JMP=1
- 36 256 17 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label0
- 50 32 0 11 3 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数3=[X11]
- 50 33 3 11 12 13 -1 0 ; 50(32):显示字符串 显示字符串11 ([X12],[X13])Color-1
- -1 ; -1(FFFF):事件结束
- ;:Label0
- 50 4 0 5 10 79 0 0 ; 50(32):变量判断 If[X10]>79 then JMP=0 else JMP=1
- 36 256 17 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label1
- 50 32 0 11 3 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数3=[X11]
- 50 33 3 11 12 13 14641 0 ; 50(32):显示字符串 显示字符串11 ([X12],[X13])Color14641
- -1 ; -1(FFFF):事件结束
- ;:Label1
- 50 4 0 4 10 90 0 0 ; 50(32):变量判断 If[X10]>=90 then JMP=0 else JMP=1
- 36 256 17 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label2
- 50 32 0 11 3 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数3=[X11]
- 50 33 3 11 12 13 1797 0 ; 50(32):显示字符串 显示字符串11 ([X12],[X13])Color1797
- -1 ; -1(FFFF):事件结束
- ;:Label2
- 50 4 0 4 10 95 0 0 ; 50(32):变量判断 If[X10]>=95 then JMP=0 else JMP=1
- 36 256 17 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label3
- 50 32 0 11 3 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数3=[X11]
- 50 33 3 11 12 13 8739 0 ; 50(32):显示字符串 显示字符串11 ([X12],[X13])Color8739
- -1 ; -1(FFFF):事件结束
- ;:Label3
- 50 32 0 11 3 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数3=[X11]
- 50 33 3 11 12 13 5142 0 ; 50(32):显示字符串 显示字符串11 ([X12],[X13])Color5142
- -1 ; -1(FFFF):事件结束
复制代码
|