~ Return of Heracles ~

 You are here:  Home»  Return of Heracles»  Reverse Engineering»  Side Notes

Side Notes

1. Hit Probability

A part of the Hit Probability code is bugged:

```73C1 LDY #Character.vigor
73C3 LDA (pTarget),Y
73C5 AND #00111111b
73C7 CMP #3
73C9 BCS \$73D1              ; if (targetVigor <= 2) {
73CB LDA #10                ;   AddAtoProbToHit (10);
73D0 LDY #Character.field_F ;
73D2 LDA (pTarget),Y        ; A = target.field_F
73D4 TAX                    , X = target.field_F
73D5 AND #00000100b         ; A = target.State (bit #3 of field_F)
[...]
73DE TXA                    ; A = target.field_F
73DF AND #00000011b         ; A = target.Stance (bit #1 and #2 of field_F)
```

At address \$73C9, if the target Vigor Value is >= 3, the code branch to \$73D1 (instead of \$73D0). In this case, the executed code is:

```73C9 BCS \$73D1
73D1 ASO \$C4B1              ; A = ? ((\$C4B1) << 1) || A
73D4 TAX                    ; X = ?
73D5 AND #00000100b         ; A = ? target.State (bit #3 of field_F)
[...]
73DE TXA                    ; A = X
73DF AND #00000011b         ; A = ? target.Stance (bit #1 and #2 of field_F)
```

Program never hangs, but the result is unpredictable for the State and the Stance value (It seems the memory address \$C4B1 always holds the value 6).

2. Dropping Armor

The possibility to Drop the Armor is implemented in the game, but disabled. I don't know if it's intentional, but to enable this functionality, the address \$A4C1 must be pocked with the value \$8A (replace TAX with TXA).

3. Stance

I don't know if this is a bug, but I'm surprised of the values for the To Be Hit modifier between Stop (-1) and Defend (0). I think it should be inversed, because like this, it's better to move and Stop than to Defend at all…

2. TODO

• Hacks
• Finalize some parts.
• Artificial Intelligence of non player characters.
visitors since 05/01/2006. Sitemap