铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 32|回复: 0

[DOS] 50指令翻译

[复制链接]
 楼主| 发表于 2025-6-15 18:27 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
需配合KA以前编写的“kdef转lua脚本的工具”。该工具可以将原版的指令转为lua脚本,一般来说可以有利于阅读理解,如果框架中有完整指令脚本支持,也能直接执行。但其中的50指令部分只是简单转换了,仍旧难以理解。

新增加的工具可以将这部分50指令转为正常的程序格式,制作者也可以自己修改源码和配置,应该能转成可以直接执行的格式。

源码在:https://github.com/scarsty/kys-t ... %99%A8/abcd/trans50

一个转换范例:

转换前的指令:
  1. if CheckRoleSexual(256) == true then goto label0 end;
  2. ::label2::
  3.     instruct_50e(8, 0, 7236, 400, 0, 0, 0);
  4.     instruct_50e(34, 0, 15, 60, 285, 25, 0);
  5.     instruct_50e(33, 0, 400, 20, 65, 26211, 0);
  6.     instruct_50e(0, 1, 7237, 0, 0, 0, 0);
  7. ::label1::
  8.     instruct_50e(3, 0, 2, 1005, 1002, 100, 0);
  9.     instruct_50e(3, 0, 0, 1005, 1005, 2000, 0);
  10.     instruct_50e(32, 0, 1005, 4, 0, 0, 0);
  11.     instruct_50e(8, 1, 1, 400, 0, 0, 0);
  12.     instruct_50e(3, 0, 0, 1, 1, 1, 0);
  13.     instruct_50e(3, 0, 0, 1002, 1002, 1, 0);
  14.     instruct_50e(4, 0, 0, 1002, 4, 0, 0);
  15.     if CheckRoleSexual(256) == true then goto label1 end;
  16.         instruct_50e(34, 0, 80, 95, 150, 83, 0);
  17.         instruct_50e(39, 0, 4, 1100, 100, 85, 100);
  18.         instruct_50e(4, 0, 2, 100, 0, 0, 0);
  19.         if CheckRoleSexual(256) == true then goto label2 end;
复制代码



转换后的指令:
  1. ::label2::
  2. x[400] = "你為什么會選擇進入這個世界?";        --instruct_50e(8, 0, 7236, 400, 0, 0, 0);
  3. DrawRect(15, 60, 285, 25);        --instruct_50e(34, 0, 15, 60, 285, 25, 0);
  4. DrawString(x[400], 20, 65, 26211);        --instruct_50e(33, 0, 400, 20, 65, 26211, 0);
  5. x[1] = 7237;        --instruct_50e(0, 1, 7237, 0, 0, 0, 0);
  6. ::label1::
  7. x[1005] = x[1002] * 100;        --instruct_50e(3, 0, 2, 1005, 1002, 100, 0);
  8. x[1005] = x[1005] + 2000;        --instruct_50e(3, 0, 0, 1005, 1005, 2000, 0);
  9. temp = x[1005];        --instruct_50e(32, 0, 1005, 4, 0, 0, 0);
  10. x[temp] = talk(x[1]);        --instruct_50e(8, 1, 1, 400, 0, 0, 0);
  11. x[1] = x[1] + 1;        --instruct_50e(3, 0, 0, 1, 1, 1, 0);
  12. x[1002] = x[1002] + 1;        --instruct_50e(3, 0, 0, 1002, 1002, 1, 0);
  13. if x[1002] < 4 then jump_flag = false; else jump_flag = true; end;        --instruct_50e(4, 0, 0, 1002, 4, 0, 0);
  14. if jump_flag == true then goto label1 end;
  15. DrawRect(80, 95, 150, 83);        --instruct_50e(34, 0, 80, 95, 150, 83, 0);
  16. strs = {};
  17. for i=1, 4 do
  18. strs[i] = x[x[1100] + i - 1];
  19. end
  20. x[100] = menu(strs, #strs, 85, 100);        --instruct_50e(39, 0, 4, 1100, 100, 85, 100);
  21. if x[100] == 0 then jump_flag = false; else jump_flag = true; end;        --instruct_50e(4, 0, 2, 100, 0, 0, 0);
  22. if jump_flag == true then goto label2 end;
复制代码


可以看出是执行了一个选菜单。

需注意转换结果中没有考虑x的变量空间连续。本垃圾分析这个连续的条件很少被用到,如遇到也可以手动修改。


【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2025-6-16 06:53

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表