“根号三工作笔记”的版本间的差异
Chinodaisuki(讨论 | 贡献) 小 |
Chinodaisuki(讨论 | 贡献) 小 |
||
(未显示同一用户的54个中间版本) | |||
第1行: | 第1行: | ||
< | <source lang="js" line> | ||
var | var mhp = 0; | ||
var ut = 0; | |||
foreach(ptr, epd : EUDLoopPlayerUnit(getcurpl()) ) | |||
{ | |||
ut = wread(ptr + 0x64); | |||
mhp = dwread_epd(EPD(0x65FD00)+9808/4 + ut); | |||
dwwrite(ptr + 0x8, mhp); | |||
} | |||
</source> | |||
====== =========================================== ====== | |||
eps代码对于import的变量: | |||
// module.eps: | |||
var x; | |||
const arr = EUDArray(10); | |||
// main.eps: | |||
import module as m; m.x++; // 错误! | |||
SetVariables(m.x, 1, list(Add)); // 正确! | |||
m.arr[0]++; // 正确! | |||
SetVariables(m.arr[0], 1, list(Add)); // 错误! | |||
====== =========================================== ====== | |||
SCMD设置单位x的血量设为某个临界值以上就会导致:地图预置单位x在游戏中血量为残血。 | |||
这个临界值为2^24/100,即167772.16,即小于等于167772 + (40/256)就正常,大于等于167772 + (41/256)就残血 | |||
原因是SCMD默认enable UNIT+14的bit 1 (HP is valid FLAG),就会导致星际认为这个单位的血量是100%,在游戏开始后放置该单位使用的是CreateUnitWithProperties(..., hitpoints=100)而不是CreateUnit(...),导致在计算血量时overflow。 | |||
解决办法: | |||
(1) 使用Starforge编辑器。SF编辑器不会默认enable那个flag | |||
(2) 使用scmd保存完地图之后手动修改chk的UNIT section,把相关的flag都disable掉 | |||
注:eudplib的fixUnitData函数干的就是这件事情。所以任何地图经过euddraft编译后都不会有这个bug | |||
<nowiki>===========================================</nowiki> | |||
start location虽然属于单位,并在地图文件chk中出现在UNIX单位列表中,但是在游戏开始后只是用来摆放每个人的起始基地(如使用),但其本身不会被加载进CUnit链表占用单位数 | |||
<nowiki>===========================================</nowiki> | |||
<source lang="lua"> | |||
SetSwitch(1,1) | |||
</source> |
2022年9月26日 (一) 15:59的最新版本
var mhp = 0; var ut = 0; foreach(ptr, epd : EUDLoopPlayerUnit(getcurpl()) ) { ut = wread(ptr + 0x64); mhp = dwread_epd(EPD(0x65FD00)+9808/4 + ut); dwwrite(ptr + 0x8, mhp); }
===========================================
eps代码对于import的变量:
// module.eps:
var x;
const arr = EUDArray(10);
// main.eps:
import module as m; m.x++; // 错误!
SetVariables(m.x, 1, list(Add)); // 正确!
m.arr[0]++; // 正确!
SetVariables(m.arr[0], 1, list(Add)); // 错误!
===========================================
SCMD设置单位x的血量设为某个临界值以上就会导致:地图预置单位x在游戏中血量为残血。
这个临界值为2^24/100,即167772.16,即小于等于167772 + (40/256)就正常,大于等于167772 + (41/256)就残血
原因是SCMD默认enable UNIT+14的bit 1 (HP is valid FLAG),就会导致星际认为这个单位的血量是100%,在游戏开始后放置该单位使用的是CreateUnitWithProperties(..., hitpoints=100)而不是CreateUnit(...),导致在计算血量时overflow。
解决办法:
(1) 使用Starforge编辑器。SF编辑器不会默认enable那个flag
(2) 使用scmd保存完地图之后手动修改chk的UNIT section,把相关的flag都disable掉
注:eudplib的fixUnitData函数干的就是这件事情。所以任何地图经过euddraft编译后都不会有这个bug
===========================================
start location虽然属于单位,并在地图文件chk中出现在UNIX单位列表中,但是在游戏开始后只是用来摆放每个人的起始基地(如使用),但其本身不会被加载进CUnit链表占用单位数
===========================================
SetSwitch(1,1)