It was slightly more complex in Red Zone yes
For instance, the main draw table consisted of blocks like: a routine (reloc needed), plus parameters that depended of the routine and which could be word, long or pointer... I had to use a python script to decode all that crap and generate proper tables.
Code:
lb_fa94:
dc.l lb_e1f8 ;0fa94
dc.w $0002 ;0fa98
dc.w $0004 ;0fa9a
dc.w $0006 ;0fa9c
dc.w $0008 ;0fa9e
dc.w $ffff ;0faa0
lb_faa2:
dc.l lb_dde0 ;0faa2
dc.w $0006 ;0faa6
dc.w $20ca ;0faa8
dc.w $0004 ;0faaa
dc.w $0002 ;0faac
dc.w $0008 ;0faae
dc.w $0006 ;0fab0
dc.w $ffff ;0fab2
dc.l $ffffffff ;0fab4
lb_fab8:
dc.l lb_d458 ;0fab8
dc.w $012c ;0fabc
lb_fabe:
dc.l lb_e496 ;0fabe
lb_fac2:
dc.l lb_4d64a ;0fac2
lb_fac6:
dc.l lb_4d64c ;0fac6
lb_faca:
dc.l lb_4d64e ;0faca
dc.w $0000 ;0face
Note: the table is 32k in size!!! good luck doing that by hand.
Plus the coders were really inconsistent in their coding, using either movea.l #address,another_address or lea address,A0 (depending on the mood?). LEAs are translated to labels, but moveas could very well be data...
The trick was to use winuae and read/write watchpoint on the whole program (previous location) and work from there to be sure not to miss anything.
It's not over yet, but looking good.