Talk:Episode 58 - The Ruin of Roib
Known bugs and how to fix them
The v3.0 beta still contains some bugs, including a nasty one in which any level containing the Super Duper enemy is prone to crashing.
To fix that particular bug, and possibly some others, open the ROIB.PAT file in a text editor and copy+paste the following text (written by K1n9 Duk3) into the line just before the very last line with the "%end" command. Then save the resulting file.
<patch title="ROIB bugfix">
- BUGFIXES - BUGFIXES - BUGFIXES - BUGFIXES - BUGFIXES - BUGFIXES - BUGFIXES #
- fix bad jump address in KeenContact - contacting object type 17 (foot)
- is not supposed to end the level in this mod?
%patch $CCBC $158w
- fix bad jump address after spawning ground-based Roich in ScanInfoPlane
%patch $EAD0 $032Bw
- fix bad jump address after spawning the boss(?) in ScanInfoPlane
%patch $EB58 $02A3w
- fix bad jump table entries for ScanInfoPlane (info values 80-82)
%patch $EF23 $50Dw $50Dw $50Dw
- fix offset for calling the function to spawn speech bubble #4
%patch $F767 $1080086Erl
- restore messed up SD_PlaySound call in Dopefish/boss contact function
%patch $12408 $9A $187409F1rl
- convert far call in PlatformThink into a near jump (the old call jumps into the
- middle of another function, corrupting registers SI and DI on return)
%patch $117C7 $E9 $FD9Aw $90 $90
- fix bad function address for Slop's contact function in the initial state
%patch $3103A $2EE7421Frl
- turn bad function address into NULL pointer (the state SHOULD be unused anyway)
%patch $31B3A 0l
- turn crashed superduper's obclass into 'stunned object' when loading a game
%patch $6060 $83 $3F $13 # cmp [bx], 13h $75 $08 # jnz skip $C7 $07 $0021w # mov [bx], 21h $EB $EA # jmp clear_temp3 $90 $90 # nop nop
- This overwrites the code that would clear the sprite pointers for the platform
- thrusters, but they don't exist in Roib, so it's safe to overwrite that code.
- Note that this doesn't fix the bug. It just allows you to load "corrupted"
- saves and continue playing from that point.
- make superduper change its obclass to 'stunned object' when it hits the ground
- new (near) subroutine to change state and obclass (si is obj, ax is new state)
%patch $11ED7 #seg012:04B7 $50 # push ax $56 # push si $9A $09DC120Arl # call ChangeState $83 $C4 $04 # add sp, 4 $C7 $04 $0021w # mov [si], 21h $C3 # retn
- call new subroutine to change to crashed superduper state
%patch $12002 $E8 $FED2w # call SetStunnedState $90 $90 $90 $90 # nop nop nop nop $90 $90 $90 # nop nop nop %patch $1206A $E8 $FE6Aw # call SetStunnedState $90 $90 $90 $90 # nop nop nop nop $90 $90 $90 # nop nop nop
- restore some of the error messages
- RF_PlaceSprite: No free spots in spritearray!
%patch $2EF8F "RF_PlaceSprite: No free spots in spritearray!" 0 %patch $17C1B $011Fw
- RF_PlaceSprite: Placed an uncached sprite:
%patch $2EFBD "RF_PlaceSprite: Placed an uncached sprite:" 0 %patch $17C88 $014Dw</patch>