diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 20:11:10 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 20:11:10 +0300 |
| commit | bd225b318ed0247ceddaa3fddbf19106aca0fde4 (patch) | |
| tree | 4c36188eb06e6e80bb5e16320ee0598200e78196 /docs | |
| parent | de715c0dfdfb69257802369d96b9c39be81094e3 (diff) | |
| download | fparkan-bd225b318ed0247ceddaa3fddbf19106aca0fde4.tar.xz fparkan-bd225b318ed0247ceddaa3fddbf19106aca0fde4.zip | |
feat(script): model handler two scheduler
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/appendices/script-vm.md | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/docs/appendices/script-vm.md b/docs/appendices/script-vm.md index 8df602e..51da106 100644 --- a/docs/appendices/script-vm.md +++ b/docs/appendices/script-vm.md @@ -97,10 +97,20 @@ record fields `+0x0c` и `+0x14`, затем вызывает его refresh pat `<base>_Continue`, сохраняет их IDs в indexed state и materializes новый internal record. В этой ветке не видно прямого World3D/Behavior call, поэтому это доказанная scheduler/event-record boundary, а не команда движения, атаки -или строительства. Semantic names семи slots, key equality и consumer нового -record остаются открытыми; до dynamic capture Rust возвращает явный +или строительства. Semantic names семи slots и consumer нового record остаются +открытыми; до dynamic capture Rust возвращает явный unsupported result, а не «примерный» game command. +Следующий static pass закрывает equality/update policy. Identity ровно равна +`(slot0 word, slot4 IEEE-754 bits, slot5 IEEE-754 bits)`, поэтому `-0.0` и +`+0.0` различаются. Новый 100-byte record получает slot1 в поле `+0x14`, +slot2 одновременно в `+0x24/+0x28`, slot3 в `+0x2c` и slot6 в `+0x0c`. При +совпавшем key refresh случается только когда slot1 сравнивается unequal +(включая NaN); он заменяет `+0x14` и `+0x0c`, затем прибавляет сохранённый +`+0x28` к `+0x24` с x86 wrapping arithmetic. `fparkan-script` отражает эту +изолированную часть как `Handler2RecordScheduler`; он не выполняет bytecode, +не назначает игровых имён и не делает event lookup за original VM. + На границе mission runtime выбранный TMA clan `first_resource` теперь материализуется как отдельный `MissionScriptBundle`: loader нормализует `<base>.scr`, декодирует его тем же bounded reader-ом и публикует immutable |
