;;; General ;;; { Tatori, Maridia mama turtle. Sleeps until you disturb a baby, then spins side-to-side and offers Samus a ride if she lands on her Mini-tatori, Maridia baby turtle. Crawls around, also has a side-to-side spinning mode Enemy ID: $CF3F: Tatori $CF7F: Mini-tatori Bank: $A2 Enemy projectiles: None ; Tatori Parameter 0: Unused Parameter 1: Unused Parameter 2: Unused ; Mini-tatori Parameter 0: Unused Parameter 1: Initial X velocity. Unit px/frame Parameter 2: Unused Mini-tatori need not be included in the room's enemy set Mini-tatori properties must have process instructions bit set Tatori must be slot 0 and followed by 4 mini-tatori Tatori's height in its enemy header is ignored } ;;; Behaviour ;;; { Mini-tatori start crawling, moving by [enemy X velocity] every 20 frames If crawling reaches 30h px from spawn X position, turns around and resets X velocity to ±1 px/frame Doesn't turn around if meets a wall (will keep crawling into it forever) or cliff (walks on the air) Crawls over tatori if tatori is asleep If Samus lands on mini-tatori, it hides in its shell carrying Samus for up to 4Ah frames If in this time Samus has left for 4 frames and lands back on the enemy's shell, it goes into a spinning attack and won't react to being landed on for 20 frames In the 4Ah frame window, if Samus left for 4 frames within the first 14 frames, it starts crawling again If Samus remains on the enemy for the 4Ah frame duration, it will leave its shell and starts crawling again If mini-tatori moves into Samus or is shot by Samus, tatori wakes up When tatori wakes up, it leaves its shell for a bit, enters its shell again, starts spinning and rises for 10h frames up to first hover level At the first hover level, tatori will move side to side bouncing off walls until Samus lands on it If Samus lands on tatori at the first hover level, it will start rising to the peak level After 30 frames of tatori reaching the peak level, or as soon as Samus leaves, it starts falling until it collides with a block, then it leaves it shell again } ;;; WRAM ;;; { ; Tatori { $0FA8: Function { $8DD8: Initial $8E09: RTL $8E0A: Asleep $8EE0: Leave shell $8F3F: Enter shell $8F8D: Rise to hover $8FEB: Hovering $9083: Rising to peak $90CC: Hovering at peak $90E1: Falling } $0FB0: X velocity $0FB2: Asleep flag $7E:7800: Function timer $7E:7802: X subacceleration $7E:7804: X acceleration $7E:7806: X subvelocity $7E:7808: Y velocity $7E:780E: Y subvelocity } ; Mini-tatori { $0FA8: Function { $9142: Crawling - not carrying Samus $916E: Hiding - carrying Samus $9198: Hiding - not carrying Samus $91F8: Spinning - unstoppable $9239: Spinning - stoppable $925E: Crawling - carrying Samus } $0FAA: Tatori index $0FAC: Spawn X position $0FAE: Spawn top boundary $0FB0: X velocity. Unit px/frame $7E:7800: Unstoppable spinning trigger timer $7E:7808: Y velocity $7E:780A: Not carrying Samus reaction timer } } ;;; Enemy population ;;; { ________________________________________ Enemy ID | __________________________________ X position | | _____________________________ Y position | | | _______________________ Initialisation parameter | | | | _________________ Properties. 8000h = solid enemy, 2000h = process instructions, 800h = process whilst off-screen | | | | | ____________ Extra properties | | | | | | ______ Parameter 1 | | | | | | | _ Parameter 2 | | | | | | | | ; Debug CF3F, 0100,0100, 0000, A800,0000, 0000,0000 ; Tatori CF7F, 00D8,0100, 0000, A800,0000, FFFF,0000 ; Mini-tatori CF7F, 0100,0100, 0000, A800,0000, FFFF,0000 ; Mini-tatori CF7F, 0110,0100, 0000, A800,0000, 0001,0000 ; Mini-tatori CF7F, 0140,0100, 0000, A800,0000, 0001,0000 ; Mini-tatori ; Room $D055. Tatori room CF3F, 01D8,03CD, 0000, A800,0000, 0000,0000 ; Tatori CF7F, 01B0,03CD, 0000, A800,0000, FFFF,0000 ; Mini-tatori CF7F, 01D8,03CD, 0000, A800,0000, FFFF,0000 ; Mini-tatori CF7F, 01E8,03CD, 0000, A800,0000, 0001,0000 ; Mini-tatori CF7F, 0218,03CD, 0000, A800,0000, 0001,0000 ; Mini-tatori } ;;; Enemy headers ;;; { __________ Tatori | ___ Mini-tatori | | 0C00 0C00 ; 0: Tile data size 8B60 8B60 ; 2: Palette 4E20 4E20 ; 4: Health 00C8 0000 ; 6: Damage 0014 0008 ; 8: Width 0010 0005 ; Ah: Height A2 A2 ; Ch: Bank 00 00 ; Dh: Hurt AI time 0000 0000 ; Eh: Cry 0000 0000 ; 10h: Boss ID 8D6C 8D9D ; 12h: Initialisation AI 0005 0001 ; 14h: Number of parts 8DD2 912E ; 18h: Main AI 800F 800F ; 1Ah: Grapple AI 804C 804C ; 1Ch: Hurt AI 8041 8041 ; 1Eh: Frozen AI 0000 0000 ; 20h: Time is frozen AI 0004 0000 ; 22h: Death animation 0000 0000 ; 28h: Power bomb reaction 0000 0000 ; 2Ah: Sidehopper variant index 9281 929F ; 30h: Enemy touch 802D 930F ; 32h: Enemy shot ACD400 ACD400 ; 36h: Tile data 05 05 ; 39h: Layer F3BC F3BC ; 3Ah: Drop chances ($B4) EEC6 EEC6 ; 3Ch: Vulnerabilities ($B4) DF11 0000 ; 3Eh: Enemy name ($B4) } ;;; Enemy vulnerabilities ;;; { ; Indestructible } ;;; Enemy drop chances ;;; { 50 ; 31.4% 50 ; 31.4% 50 ; 31.4% 05 ; 2.0% 05 ; 2.0% 05 ; 2.0% }