Gibt es Software zur Einsicht der Daten in diesen Objekten / anderen temporär beschriebenen Datenbereichen? Das bisschen Diagnose-Code was ich geschrieben habe, welches Register-Inhalte ausspuckt hilft bei dynamisch erstellten Querverweisen nur absolut garnicht. (Immerhin hat das Diagnose-Ding beim Mappen der SkillData geholfen...)
Ansonsten hier noch Krimskrams datenflussaufwärts der [Attack]Funktion (alle Adressen gelten für RPG_RT 2k v1.07 ):
472BB4 <> WriteBattleMessage
474A34 <> BattleActionInput
474A57 call ?? is EnemyBattler able to do stuff?
474A5F jz //jump to do enemy turn
474A6B call sub_47D004 //do heroes turn(?)
474B00 call sub_480270 //call GetEnemy
474B23 call sub_481F4C //NOP-> AutoBattle even when choosing stuff //GetPlayerInput?
474B2E call sub_481F9C //NOP-> AutoBattle //SetPlayerAction?
474B35 jz ?? Bedingungen für non-jump unbekannt
474B61 call sub_47F854 ?? EndEnemyTurn?
474B76 jnz //[EB]jmp -> no DoBattleAction
474B9C call sub_47F854 ?? call EndEnemyTurn(?)
474BD9 call sub_474FA4 //call DoBattleAction
474BE4 call sub_475904 //call DoAutoBattle (set PlayerAction)
474BEF call sub_476218 //call DoEnemyTransformation(?)
474BFA call sub_4762B4 //call DoItemAction
474C14 call sub_469E84 //call SetSwitch //on EnemyAction: Switch ON
474FA4 <>DoBattleAction
474FF4 case 0x0 (Attack)
474FF8 call sub_47510C //call DoAttack
475002 case 0x1 (DoubleAttack) //EnemyAction only
475006 call sub_47510C //call DoAttack
475010 case 0x2 (Defend)
475017 call //get UserName XYZ ('XYZ defends')
475025 //set VocabString Ptr
475028 call sub_403D54 //get VocabString
475035 call sub_472BB4 //WriteBattleMessage ('XYZ defends')
475050 case 0x3 (ObserveBattle) //EnemyAction only
475057 call //get EnemyName
475065 //set VocabString Ptr
475068 call sub_403D54 //get VocabString
475075 call sub_472BB4 //WriteBattleMessage
47508D case 0x4 (ChargeUp) //EnemyAction only
475094 call //get EnemyName
4750A2 //set VocabString Ptr
4750A5 call sub_403D54 //get VocabString
4750B2 call sub_472BB4 //WriteBattleMessage
4750CE case 0x5 (Self-Destruct) //EnemyAction only
4750D2 call sub_4756E0 //Do Self-Destuct
4750D9 case 0x6 (Escape) //EnemyAction only
4750DD call sub_475868 //RemoveEnemyBattler(?)
4750E2 default (EndTurn)
47510C <> DoAttack
475130 call sub_474EB8 //NOP -> no attacks / no DMG+Hit calculation
475137 jz //[E9]jmp -> no attacks
475162 call sub_472BB4 //WriteBattleMessage ('XYZ attacks')
4751BE call sub_480394 //play enemy's attack sound
4751FB call sub_484588 //call GetAnimationFile
475204 jle //[EB]jmp -> don't play BattleAnimation
47520F jz //NOP -> don't play BattleAnimation
475221 call sub_480394 ?? handle sound + animations ?
475234 call sub_480394 //NOP -> don't play BattleAnimation
4752CF call sub_472EEC ?? delay after a hit
475343 call sub_4753E8 ?? call NormalAttack
47535A call sub_47CE60 //DoEnemyAttack? GetEnemyTarget?
475365 call sub_4753E8 //call NormalAttack //on EnemyAction: Attack
475391 call sub_480270 //call GetEnemy
4753A9 //set Target(?)
4753B3 call sub_480270 //call GetEnemy //get Target(?)
4753BE call sub_4753E8 //call NormalAttack
4753E8 <>NormalAttack
4753FA jz //[EB]jmp -> jump over 'call sub_475440'
-> normal attacks (phys.DMG) won't be calculated
475402 call sub_475440 //1st Damage
475410 jnz //[EB]jmp -> immer 2x phys.DMG
475415 cmp //Is AttackTwice_Flag true?
475419 jnz jump if 2xAtk_Flag false
475429 cmp ?? jump if true -> no 2x phys.DMG
475435 call sub_475440 //2nd Damage
475440 <>Hit% Crit% DMG%
475470 call //get Hit%(?)
475477 call //get HeroHit%/Agi(?)
4754A9 call //get EnemyHit%/Agi(?)
47550A jnz //NOP -> Enemy never misses
475535 jbe //[EB]jmp -> Attacks never miss //NOP -> always miss
~jump if Evade% was rolled lower than Hit%
47553B call sub_4765C7 //call WriteMissMessage
475585 call //roll Crit%
4755A6 cmp //do CritDMG ?
4755AB jz //jump if 'no CritDMG'
4755B1 call //add CritDMG to normal DMG
4755B9 jz //jump if 'no CritDMG' (?)
4755CD call sub_472BB4 //WriteBattleMessage (CritMessage)
4755E6 call sub_472BB4 //WriteBattleMessage (CritMessage)
475607 call sub_482344 //DMG_Variance(?)
475613 jz //NOP -> DMG higher (high variance)
475621 jz //NOP -> DMG higher (medium variance)
475641 call //NOP -> DMG higher (low variance)
47564F call sub_402B40 //apply DMG_Variance
47566D call sub_476888 //call Attack
4756E0 <>Do Self-Destruct
475868 <>RemoveEnemyBattler(?)
475904 <>DoAutoBattle
Und hier noch etwas Patchrelevanz:
475BD4 <>DoNormalSkills
475BFA cmp [esi+C], 0 ??
475BFE jz ->jump if false -> no DMG/Effect when jumping
475C04 //EDI is bound to Battlers (though different each battle)
mov eax, [edi+10h]
mov edx, [eax+8]
-> edx contains the Skill_ID of the used skill
475C0A mov eax, DS: off_49AAF4 (49AAF4 = SkillParamPtr?)
475C11 call sub_46390C //call GetSkill?
475C22 call sub_48248C //call GetSkillParameters?
475C2E mov eax, [ebx+**]
** (SkillData)
00 ? 00 46 32 D4
04 = Skill_ID
08 = Skill_Name(?)
0C ?
10 ?
14 ?
18 ?
1C ?
20 = MP Cost
24 = Target Range //0=Enemy | 1=Enemies | 2=User | 3=Ally | 4=Party
28 = 1 (?)
2C = BattleAnimation_ID
30 ?
34 = 256 (?)
38 = Atk Influence
3C = Int Influence
40 = Variance
44 = Effect Rating
48 = Success Rate
4C = Affected Parameters (A) (flags can be combined)
//00 00 00 00 = no HP/MP/Atk/Def flags
.. .. .. 01 = HP
.. .. 01 .. = MP
.. 01 .. .. = Atk
01 .. .. .. = Def
50 = Affected Parameters (B) (flags can be combined)
//00 00 00 00 = no Int/Agi/Absorb/IgnoreDef flags
.. .. .. 01 = Int
.. .. 01 .. = Agi
.. 01 .. .. = Absorb
01 .. .. .. = IgnoreDef
54 = highest checked Condition_ID
58 ? checked Conditions(?)
5C = highest checked Attribute_ID
60 ? checked Attributes(?)
64 = Resist_Flag //0|1 = false|true
475C53+ //calculate success(?)
475CD8 jnz //NOP -> skills never miss
475CE5 call sub_4029C4 //roll success(?)
475CF9 jnb //[E9]jmp -> loads DMG/Effect incorrectly
475D08 jz //[E9]jmp -> no DoSkillAction
475D91 call sub_476888 //call Attack //do SkillDMG //NOP -> game crashes
475E67+ //decrease parameters(?)