Draygon Morphball stuff Draygon's main tilemap at 7E:2000 Samus grabbed routine at A5:8EA9... Will probably only remove grapple check Change Samus's pose at 90:E23B... will include morphball check and other stuff. Or I might make an entirely new routine... Draygon's main AI is in $0FA8. #$88B1: Coming diagonal down right 8951: Going diagonal up right 89B3: Left swoop setup 8A00 Coming diagonal down left 8A90 Going diagonal up left 8B52 Going right before spewing gunk 8BAE Spewing gunk, going right 8C33 Wandering right after spewing gunk 8C8E: Left gunk setup 8CD4 Going left before spewing gunk 8D30 Spewing gunk, going left 8DB2 Wandering left after spewing gunk 8E19 Going to grab Samus, either direction 8F1E, just grabbed Samus, either direction If #$8FD6, grabbing Samus, either direction If #$90D4, tells its tail to hit Samus, either direction If #$9124, repeatedly hits Samus, either direction 9154 Abandoned chase for Samus, either direction I'll probably want to just change 8FD6's routine LDA $0A64 ;Grapple check BIT #$0001 BEQ BRANCH_ALPHA PHX ;Samus is grappling, Draygon does nothing. LDX $0F78 LDA $A0000D, X AND #$00FF CLC ADC #$0008 STA $0F9C PLX LDA $0F8A ORA #$0002 STA $0F8A RTS BRANCH_ALPHA LDA $05E5 ;Check RNG AND #$00FF ;1/100 BNE BRANCH_BETA LDA #$0040 STA $7E7818 LDA #$90D4 ;Spike Samus STA $0FA8 RTS BRANCH_BETA LDA $7E780A ;Current circle radius STA $0E32 LDA $7E7810 ;Current phase JSL $A0B0B2 ;Cosine, I think CLC ADC $7E780C ;Current X STA $0F7A ;Current X + circle offset LDA $7E780A ;Current circle radius LSR A LSR A STA $0E32 LDA $7E7810 ;Current phase JSL $A0B0C6 ;Sine, I think CLC ADC $7E780E ;Current Y STA $0F7E ;Current Y + circle offset LDA $0FA4, X ;Sorta custom use. Unknown right now, but evidently used as a counter AND #$0007 BNE BRANCH_GAMMA LDA $0F7A SEC SBC #$0020 STA $12 LDA $7E8000 BEQ BRANCH_DELTA LDA $0F7A CLC ADC #$0020 STA $12 BRANCH_DELTA LDA $0F7E SEC SBC #$0010 STA $14 LDA #$003D STA $16 STZ $18 JSL $B4BC26 ;Creates his air bubbles BRANCH_GAMMA LDA $7E7812 CLC ADC #$2000 STA $7E7812 LDA $7E780A ;So every frame, circle radius increases by 1/8th a pixel ADC #$0000 STA $7E780A CMP #$00A0 BPL BRANCH_EPSILON LDA $7E7816 SEC SBC #$0001 ;Acceleration of phase = -1? STA $7E7816 ;Rate of phase? AND #$FF00 XBA CLC ADC $7E7810 AND #$00FF STA $7E7810 ;Phase LDA $7E7814 SEC SBC #$4000 STA $7E7814 LDA $7E780E SBC #$0000 STA $7E780E ;And every frame, move base Y up by 1/4th a pixel CMP #$0040 BMI BRANCH_EPSILON JSR $94A9 ;Circle radius or Y has reached max, spike Samus repeatedly RTS BRANCH_EPSILON LDA #$9105 STA $0FA8 RTS Okay. Plan: Change pointer to A5:8EA9 to new routine to check Morph ball. If fail, goto normal, else lock Samus's transitions/movement. In that new routine, move Samus gradually to Draygon's mouth... preferably synchronized with Draygon's claws, if I can figure an easy way to control them. Once inside Draygon's mouth, switch to another routine: Constant damage to Samus, Samus is invisible, instant-detonate bombs and damage... And some general wandering movement. If necessary, add something for when Draygon dies to allow Samus to move again. Check movement types 4, 8, 11-13 A5:NewGrabAI ;F9E0 LDA $0A1F AND #$00FF CMP #$0004 BEQ Morphed CMP #$0008 BEQ Morphed CMP #$0011 BMI NotMorphed CMP #$0014 BMI Morphed NotMorphed: JMP $8EAC Morphed: LDY #$F966 ;Right Claw Grab LDA $7E8000 BEQ BRANCH_ALPHA LDY #$F960 ;Left Claw Grab BRANCH_ALPHA: STY $1052 LDA #$0001 STA $1054 DEC STA $7E780A LDA #$E912 ;Disable Transitions STA $0A60 LDA $0A1E AND #$00FF ORA #$1A00 STA $0A1E ;Will this work? XD LDA #$FA34 STA $0FA8 RTS AD1F0A29FF00C90400F010C90800F00BC911003005C91400300160A066F9AF00807EF003A060F98C5210A901008D54103A8F0A787EA912E98D600AAD1E0A29FF0009001A8D1E0AA92EFA8DA80F601E8F8DA80F60A9108F8DA80F60 AD1F0A29FF00C90400F012C90800F00DC911003005C9140030034CAC8EA066F9AF00807EF003A060F98C5210A901008D54103A8F0A787EA912E98D600AAD1E0A29FF0009001A8D1E0AA934FA8DA80F608DA80F60 A5:MOVESAMUSAI ;FA34 LDA $0F7A SEC SBC #$0100 JSL $A0B067 ; $103067 IN ROM CMP #$0002 BPL MOVE LDA $0F7E SEC SBC #$0180 JSL $A0B067 ; $103067 IN ROM CMP #$0002 BMI SKIPMOVE MOVE: JSR $8F65 ;Use normal code to move Draygon SKIPMOVE: LDA $7E780A ;Always less than #$00FF TAX SEP #$20 LDA $7E8000 DEC EOR $FFFF,X ;XOFFSET REP #$20 ;Top byte will always be 00 thanks to 7E780A BPL ADDX ORA #$FF00 ADDX: ADC $0F7A STA $0AF6 LDA $FFFF,X ;YOFFSET. Actually 1 less than pointer to table. AND #$FF00 XBA BPL ADDY ORA #$FF00 ADDY: ADC $0F7E STA $0AFA LDA $7E780A BNE SKIPDRAW LDY #$F988 ;RIGHTCLAWSJUGGLE LDX #$F9C2 ;RIGHTMOUTHANIMATE LDA $7E8000 BEQ DRAWCLAWS LDY #$F96C ;LEFTCLAWSJUGGLE LDX #$F9A4 ;LEFTMOUTHANIMATE DRAWCLAWS: STY $1052 LDA #$0001 STA $1054 STX $0F92 STA $0F94 SKIPDRAW: LDA $7E780A INC STA $7E780A CMP #$0025 ;Time it takes to swallow Samus. I'm guessing about a second. BMI END LDA $0A1C ASL ASL ASL TAX LDA $91B629,X STA $0A1E ;Again, will this work? XD LDA $0617 ORA #$0001 STA $0617 LDA #$FB01 ;WANDERAI STA $0FA8 LDA #$0000 STA $7E780A ;Will be timer STA $7E780C ;Will be X speed (100 = 1 pixel per frame) STA $7E780E ;Will be Y speed (100 = 1 pixel per frame) STA $7E7814 ;Will be X accel. (100 = 1 pixel per frame) STA $7E7816 ;Will be Y accel. (100 = 1 pixel per frame) LDX #$0022 LDA #$8E50 DELETEGUNK: CMP $1997,X BNE DONTDELETE STZ $1997,X DONTDELETE: DEX DEX BPL DELETEGUNK END: RTS AD7A0F38E900012267B0A0C902001010AD7E0F38E980012267B0A0C90200300320658FAF0A787EAAE220AF00807E3A5DFFFFC22010030900FF6D7A0F8DF60ABDFFFF2900FFEB10030900FF6D7E0F8DFA0AAF0A787ED021A088F9A2C2F9AF00807EF006A06CF9A2A4F98C5210A901008D54108E920F8D940FAF0A787E1A8F0A787EC925003046AD1C0A0A0A0AAABF29B6918D1E0AAD17060901008D1706A901FB8DA80FA900008F0A787E8F0C787E8F0E787E8F14787E8F16787EA22200A9508EDD9719D0039E9719CACA10F460 A5:WANDERAI ;FB01 INC $0A50 INC $0A50 INC $0A50 LDX #$0008 Loop: LDA $0C86,X CMP #$0006 BPL Detonate DEX DEX BPL Loop BRA EndLoop Detonate: LDA #$0006 STA $0C86,X LDA $0C22,X AND #$0F00 CMP #$0300 BEQ PowerBomb LDA $0F8C SEC SBC #$00C8 STA $0F8C JSL $A5960D EndLoop: LDA $0F8C BEQ PowerBomb BPL Alive PowerBomb: STZ $0F8C JSL $A5960D DEC $0617 LDA #$E913 STA $0A60 JSL $A59618 ;Kill Draygon STZ $0A66 RTS Alive: ;Insert wandering here LDA $7E780A BNE OldMovement JSL $808111 AND #$007F ADC #$0011 STA $7E780A JSL $808111 AND #$007F SBC #$003F STA $7E7814 JSL $808111 AND #$007F SBC #$003F STA $7E7816 OldMovement: PHB PEA $7E00 PLB PLB LDA $0F7A CMP #$0080 BMI NearLeft CMP #$0180 BPL NearRight LDA #$0000 BRA AddX NearRight: SBC #$0180 EOR #$3FFF BRA AddX NearLeft: LDA #$0081 SBC $0F7A AddX: ASL ASL ADC $7814 CLC ADC $780C BPL SkipXNegative CMP #$FD80 BPL StoreXSpeed LDA #$FD80 BRA StoreXSpeed SkipXNegative: CMP #$0280 BMI StoreXSpeed LDA #$0280 StoreXSpeed: STA $780C AND #$00FF XBA CLC ADC $0F7C STA $0F7C LDA $780C AND #$FF00 XBA BPL MoveX ORA #$FF00 MoveX: ADC $0F7A STA $0F7A LDA $0F7E CMP #$0100 BMI NearTop CMP #$0180 BPL NearBottom LDA #$0000 BRA AddY NearBottom: SBC #$0180 EOR #$3FFF BRA AddY NearTop: LDA #$0101 SBC $0F7E AddY: ASL ASL ADC $7816 CLC ADC $780E BPL SkipYNegative CMP #$FD80 BPL StoreYSpeed LDA #$FD80 BRA StoreYSpeed SkipYNegative: CMP #$0280 BMI StoreYSpeed LDA #$0280 StoreYSpeed: STA $780E AND #$00FF XBA CLC ADC $0F80 STA $0F80 LDA $780E AND #$FF00 XBA BPL MoveY ORA #$FF00 MoveY: ADC $0F7E STA $0F7E EndWander: DEC $780A PLB LDA $0F7A STA $0AF6 LDA $0F7E STA $0AFA RTS EE500AEE500AEE500AA20800BD860CC906001006CACA10F4801FA906009D860CBD220C29000FC90003F015AD8C0F38E9C8008D8C0F220D96A5AD8C0FF00210159C8C0F220D96A5CE1706A913E98D600A221896A560AF0A787ED02A22118180297F006911008F0A787E22118180297F00E93F008F14787E22118180297F00E93F008F16787E8BF4007EABABAD7A0FC980003012C980011005A90000800EE9800149FF3F8006A98100ED7A0F0A0A6D1478186D0C78100AC980FD100DA980FD8008C980023003A980028D0C7829FF00EB186D7C0F8D7C0FAD0C782900FFEB10030900FF6D7A0F8D7A0FAD7E0FC900013012C980011005A90000800EE9800149FF3F8006A90101ED7E0F0A0A6D1678186D0E78100AC980FD100DA980FD8008C980023003A980028D0E7829FF00EB186D800F8D800FAD0E782900FFEB10030900FF6D7E0F8D7E0FCE0A78ABAD7A0F8DF60AAD7E0F8DFA0A60 EE500AEE500AEE500AA20800BD860CC906001006CACA10F4801FA906009D860CBD220C29000FC90003F015AD8C0F38E9C8008D8C0F220D96A5AD8C0FF00210189C8C0F220D96A5CE1706A913E98D600A221896A59C660A60AF0A787ED02A22118180297F006911008F0A787E22118180297F00E93F008F14787E22118180297F00E93F008F16787E8BF4007EABABAD7A0FC980003012C980011005A90000800EE9800149FF3F8006A98100ED7A0F0A0A6D1478186D0C78100AC980FD100DA980FD8008C980023003A980028D0C7829FF00EB186D7C0F8D7C0FAD0C782900FFEB10030900FF6D7A0F8D7A0FAD7E0FC900013012C980011005A90000800EE9800149FF3F8006A90101ED7E0F0A0A6D1678186D0E78100AC980FD100DA980FD8008C980023003A980028D0E7829FF00EB186D800F8D800FAD0E782900FFEB10030900FF6D7E0F8D7E0FCE0A78ABAD7A0F8DF60AAD7E0F8DFA0A60 A5:8EA9 JMP $F9E0 LDY #$9845 LDA $7E8000 BEQ BRANCH_ALPHA LDY #$9C38 BRANCH_ALPHA: STY $1052 LDA #$0001 STA $1054 LDY #$0000 LDA $7E8000 BEQ BRANCH_GAMMA LDY #$0001 BRANCH_GAMMA: TYA JSL $90E23B ; $8623B IN ROM LDA #$0100 STA $7E780C ;X position LDA #$0180 STA $7E780E ;Y position LDA #$0000 STA $7E780A ;Circle Radius STA $7E7812 ;Unknown LDA #$00C0 STA $7E7810 ;Phase LDA #$0800 STA $7E7816 ;Phase speed? LDA #$8F1E STA $0FA8 RTS BRANCH_BETA: LDA #$8F10 STA $0FA8 RTS 20E0F9A04598AF00807EF003A0389C8C5210A901008D5410A00000AF00807EF003A0010098223BE290A900018F0C787EA980018F0E787EA900008F0A787E8F12787EA9C0008F10787EA900088F16787EA91E8F8DA80F60A9108F8DA80F60 9BDA and 97E7 9BE6 and 97F3 mark good starting points for claw movement. (into 1012) 5 frames per animation frame Let's make actual instructions for animations... Facing right, first enemy, mouth animation loop: A66B, A675, A67F, A689, A67F, A675, A66B, then 2F 81 Facing left, first enemy, mouth animation loop: A343, A34D, A357, A361, A357, A34D, A343, then 2F 81 Claw juggling, facing right, into enemy 4: A61B, A625, A62F, A639, A607, A611, then ED 80 E2 9B Claw juggling, facing left, into enemy 4: A2F3, A2FD, A307, A311, A2DF, A2E9, then ED 80 EF 97 Let's start this all at the end of the bank: A5:F960 A5:LEFTCLAWSGRABBED ;F960 01 00 1B A6 2F 81 A5:RIGHTCLAWSGRABBED ;F966 01 00 F3 A2 2F 81 A5:LEFTCLAWSJUGGLE ;F96C 03 00 1B A6 06 00 25 A6 06 00 2F A6 06 00 39 A6 06 00 07 A6 06 00 11 A6 ED 80 E2 9B A5:RIGHTCLAWSJUGGLE ;F988 03 00 F3 A2 06 00 FD A2 06 00 07 A3 06 00 11 A3 06 00 DF A2 06 00 E9 A2 ED 80 EF 97 A5:LEFTMOUTHANIMATE ;F9A4 18 00 6B A6 05 00 75 A6 05 00 7F A6 05 00 89 A6 05 00 7F A6 05 00 75 A6 05 00 6B A6 2F 81 A5:RIGHTMOUTHANIMATE ;F9C2 18 00 43 A3 05 00 4D A3 05 00 57 A3 05 00 61 A3 05 00 57 A3 05 00 4D A3 05 00 43 A3 2F 81 One other thing I want to change: A5:94C2 to 20. Makes it look more like Draygon is grabbing Samus. Hacking 90:85F4 to make an invisibility option 90:85EC LDA $0617 BIT #$0001 BNE Invisible ;#$53 LDA $18AA BNE Visible LDA $18A8 BEQ Visible LDA $05B6 BIT #$0001 BNE Invisible ;#$41 Visible: Invisible: AD1706890100D053ADAA18D00DADA818F008ADB605890100D041 Summation A5:94C2 20 A5:8EA9 20E0F9A04598AF00807EF003A0389C8C5210A901008D5410A00000AF00807EF003A0010098223BE290A900018F0C787EA980018F0E787EA900008F0A787E8F12787EA9C0008F10787EA900088F16787EA91E8F8DA80F60A9108F8DA80F60 A5:F960 01001BA62F810100F3A22F8103001BA6060025A606002FA6060039A6060007A6060011A6ED80E29B0300F3A20600FDA2060007A3060011A30600DFA20600E9A2ED80EF9718006BA6050075A605007FA6050089A605007FA6050075A605006BA62F81180043A305004DA3050057A3050061A3050057A305004DA3050043A32F81 A5:F9E0 AD1F0A29FF00C90400F012C90800F00DC911003005C9130030034CAC8EA066F9AF00807EF003A060F98C5210A901008D54103A8F0A787EA912E98D600AAD1E0A29FF0009001A8D1E0AA934FA8DA80F608DA80F60 A5:FA34 AD7A0F38E900012267B0A0C902001010AD7E0F38E980012267B0A0C90200300320658FAF0A787EAAE220AF00807E3A5D5AFCC22010030900FF6D7A0F8DF60ABD71FC2900FFEB10030900FF6D7E0F8DFA0AAF0A787ED021A088F9A2C2F9AF00807EF006A06CF9A2A4F98C5210A901008D54108E920F8D940FAF0A787E1A8F0A787EC925003046AD1C0A0A0A0AAABF29B6918D1E0AAD17060901008D1706A901FB8DA80FA900008F0A787E8F0C787E8F0E787E8F14787E8F16787EA22200A9508EDD9719D0039E9719CACA10F460 A5:FB01 EE500AEE500AEE500AA20800BD860CC906001006CACA10F4801FA906009D860CBD220C29000FC90003F015AD8C0F38E9C8008D8C0F220D96A5AD8C0FF00210189C8C0F220D96A5CE1706A913E98D600A221896A59C660A60AF0A787ED02A22118180297F006911008F0A787E22118180297F00E93F008F14787E22118180297F00E93F008F16787E8BF4007EABABAD7A0FC980003012C980011005A90000800EE9800149FF3F8006A98100ED7A0F0A0A6D1478186D0C78100AC980FD100DA980FD8008C980023003A980028D0C7829FF00EB186D7C0F8D7C0FAD0C782900FFEB10030900FF6D7A0F8D7A0FAD7E0FC900013012C980011005A90000800EE9800149FF3F8006A90101ED7E0F0A0A6D1678186D0E78100AC980FD100DA980FD8008C980023003A980028D0E7829FF00EB186D800F8D800FAD0E782900FFEB10030900FF6D7E0F8D7E0FCE0A78ABAD7A0F8DF60AAD7E0F8DFA0A60 A5:FC5A FAFCFDFF0001020405060708090A0B0C0D0E0F1012131517191A1A1A1A1A1A1A1A1A1A1A A5:FC72 252525252525252525252525252322201F1E1D1C181512100F0D080400FDFAF7F4F1EFEC 90:85EC AD1706890100D053ADAA18D00DADA818F008ADB605890100D041