News:

Don't forget to visit the main site! There's lots of helpful docs, patches, and more!

Main Menu

Nettori AI Disassembly

Started by interdpth, February 15, 2018, 07:52:36 PM

Previous topic - Next topic

interdpth

Welcome to the Nettori AI.

AI offset is 0x8044FD4
Function offsets:
0x8043D1C SpawnNettoriCoreX
0x8043E70 MainNettori
0x8043F24 NetoriSetToShoot
0x8043F60 NettoriSpawnFlora
0x8043BC4 ChangeNettoriPalette
0x8043C5C UpdateNettoriDamage

enum NettoriPoses
{
DEAD = 0,
IDLE = 2,
SHOOT = 69
HANDLEFLORA=70.
}

The AI is pretty simple,

Spawn Nettori, Handle Nettori Animations and the like, Shoot at samus, Handle Flora stuff, and Spawn Corex on death. There is also a helper AI that controls extra parts of the room, like Nettoris head, and flora stuff at 0x8045038 I called it NettoriRoomHelper

NettoriAI:                             
                PUSH    {LR}
            //Load current pose into R0...
                LDR     R0, =CurrentEnemyData
                ADDS    R0, #0x24
                LDRB    R0, [R0]
            //Figure out what action to take based on pose...
                CMP     R0, #2
                BEQ     RunNettori
                CMP     R0, #2
                BGT     TryToKillSamus
                CMP     R0, #0
                BEQ     SpawnCoreX
                B       UpdatePaletteByDamage

             
off_8044FEC:   .long CurrentEnemyData   

            
TryToKillSamus:                           
                CMP     R0, #0x45
                BEQ     ShootAtSamus
                CMP     R0, #0x46
                BEQ     UpdateFlora
                B       UpdatePaletteByDamage


SpawnCoreX:                         
                BL      SpawnNettoriCoreX
                B       UpdatePaletteByDamage

RunNettori :                         
                BL      MainNettori
                B       UpdatePaletteByDamage


ShootAtSamus:                           
                BL      NetoriSetToShoot

UpdateFlora:                           
                BL      NettoriSpawnFlora

UpdatePaletteByDamage:                         
                                     
                LDR     R1, =CurrentEnemyData
                LDR     R0, =EnemyHealthStatStuff
                MOVS    R2, #0x498
                ADDS    R0, R0, R2
                LDRH    R0, [R0]
                LDRH    R1, [R1,#(CurrentEnemyData.CurEnemy_health - CurrentEnemyData)]
                LSRS    R0, R0, #1
                CMP     R1, R0
                BCC     DoDamage
                BL      ChangeNettoriPalette
                B       EndFunc

off_8045028:     .long CurrentEnemyData   
off_804502C:     .long EnemyHealthStatStuff


DoDamage:                               
                BL      UpdateNettoriDamage

EndFunc:                               
                POP     {R0}
                BX      R0

OneOf99

Nice disassembly, I have a quick question. Would it be possible to move this to ZM if some of the pointers are changed and the x-parasite code gets re pointed to a death?