LoROM !CollectedItems = $7ED86E !TotalItems = #$64 ;============================================================================================================================; ;//=====[THIS IS SCYZER'S ITEM COLLECTION CODE, IT IS REQUIRED] org $84889F JSL COLLECTTANK ;//=====[Free space ($10 bytes)] org $84FFF0 ;//[027FF0] COLLECTTANK: PHA LDA !CollectedItems INC A STA !CollectedItems PLA JSL $80818E RTL ;============================================================================================================================; ;//[data copy/data clear menu] org $81961E LDX #$0264 ;//[time amount] placement 1 org $819636 NOP : NOP : NOP : NOP : NOP : NOP ;//["SAMUS A"] org $81964E LDX #$0364 ;//[time amount] placement 2 org $819666 NOP : NOP : NOP : NOP : NOP : NOP ;//["SAMUS B"] org $81967E LDX #$0464 ;//[time amount] placement 3 org $819696 NOP : NOP : NOP : NOP : NOP : NOP ;//["SAMUS C"] org $819630 LDX #$0220 ;//["TIME"] placement on data copy/clear menus, save 1 JSR ItemDisplayA ;//(this is so 'items' shows up like 'time' when there is no data) ;//JMP $B3E2 org $819660 LDX #$0320 ;//["TIME"] placement on data copy/clear menus, save 2 JSR ItemDisplayB ;//(this is so 'items' shows up like 'time' when there is no data) ;//JMP $B3E2 org $819690 LDX #$0420 ;//["TIME"] placement on data copy/clear menus, save 3 JSR ItemDisplayC ;//(this is so 'items' shows up like 'time' when there is no data) ;//JMP $B3E2 org $81960F LDX #$020C ;//[energy amount] placement on data copy/clear menus, save 1 org $81963F LDX #$030C ;//[energy amount] placement on data copy/clear menus, save 2 org $81966F LDX #$040C ;//[energy amount] placement on data copy/clear menus, save 3 ;//[DATA MODE DISPLAY] org $8198ED LDY #Areyousure ;//["ARE YOU SURE?"] LDX #$0514 ;//x position ;============================================================================================================================; ;//=====[THIS SECTION IS FOR THE ENERGY CACHE DISPLAY] org $81A08F ADC #$003C ;//position of "NO DATA" TAX LDY #$B4AC ;//["NO DATA"] JMP $B3E2 ;//[something for drawing on title screen] STX $1A ;//don't touch this JSR ENERGYSHIFT JSR $B3E2 ;//[something for drawing on title screen] org $81A0A8 JSR FREEFILE JSR DRAWISHFILE JMP $A0C5 org $81A0C5 JSR MAXFILE JSR DUMBFILE JMP $A133 org $81A133 JMP $A149 ;//rts (tons of unused code b4 for file difficulties) ;============================================================================================================================; ;//["SAMUS A"] org $819F13 NOP : NOP : NOP : NOP : NOP : NOP ;//["SAMUS A"] org $819F25 LDX #$0150 ;//energy x position org $819F31 LDX #$01A8 ;//time x position (affects difficulty) org $819F3D LDY #$B4A0 ;//["TIME"] LDX #$0164 ;//xpos JSR ItemMainA ;//["SAMUS B"] org $819F46 NOP : NOP : NOP : NOP : NOP : NOP ;//["SAMUS B"] org $819F5B LDX #$0290 ;//energy x position org $819F67 LDX #$02E8 ;//time x position (affects difficulty) org $819F73 LDY #$B4A0 ;//["TIME"] LDX #$02A4 ;//xpos JSR ItemMainB ;//["SAMUS C"] org $819F7C NOP : NOP : NOP : NOP : NOP : NOP ;//["SAMUS C"] org $819F91 LDX #$03D0 ;//energy x position org $819F9D LDX #$0428 ;//time x position (affects difficulty) org $819FA9 LDY #$B4A0 ;//["TIME"] LDX #$03E4 ;//xpos JSR ItemMainC org $819FDE LDY #Returntotitle ;//nice play ;============================================================================================================================; ;//=====[data select game timer digit positions] org $81A171 STA $7E35FA,x org $81A17F STA $7E35F8,x org $81A1AF STA $7E3600,x ;//=====[MAIN HIJACK POINT] org $81A1BD JSR NewTime : NOP ;// ;//=====[FREE SPACE ($383 bytes)] org $81FB60 ;//optimal free space if not adding anything (up to special thanks to genji) ;//=====[THIS SECTION IS FOR THE -ITEMS- TO DISPLAY WHETHER THERE IS DATA OR NOT] ;//[starts with a jsr to draw routine for the last x/y register values] ItemTiles: dw $21F3,$21F4,$21F5,$21F6,$FFFF ItemDisplayA: ;//JMP $B3E2 JSR $B3E2 : LDY #ItemTiles : LDX #$0230 : JSR $B3E2 : RTS ItemDisplayB: JSR $B3E2 : LDY #ItemTiles : LDX #$0330 : JSR $B3E2 : RTS ItemDisplayC: JSR $B3E2 : LDY #ItemTiles : LDX #$0430 : JSR $B3E2 : RTS ItemMainA: JSR $B3E2 : LDY #ItemTiles : LDX #$0174 : JSR $B3E2 : RTS ItemMainB: JSR $B3E2 : LDY #ItemTiles : LDX #$02B4 : JSR $B3E2 : RTS ItemMainC: JSR $B3E2 : LDY #ItemTiles : LDX #$03F4 : JSR $B3E2 : RTS ;//=====[THIS SECTION IS FOR THE NEW GAME TIMER] NewTime: ;//(hours,minutes,seconds) STA $7E35FE,x ;//vanilla PHX ;//do not modify x through this LDA $1A CLC : ADC #$0004 : TAX LDA $09DC : STA $4204 SEP #$20 LDA #$0A : STA $4206 PHA : PLA : PHA : PLA REP #$20 LDX $1A : LDA $4216 CLC : ADC #$2060 ORA $0F96 : STA $7E3606,x LDA $4214 CLC : ADC #$2060 ORA $0F96 : STA $7E3604,x LDA #$008C : ORA $0F96 STA $7E35FC,x : STA $7E3602,x ;//':' for game timer PLX ;//okay now we're safe ;//=====[THIS SECTION IS FOR THE COLLECTION OF ITEM ICONS] BeamIcons: LDA $09A8 ;// ChargeIcon: BIT #$1000 : BEQ WaveIcon : PHA : LDA #$19E7 : ORA $0F96 : STA $7E3626,x : PLA WaveIcon: BIT #$0001 : BEQ IceIcon : PHA : LDA #$19E8 : ORA $0F96 : STA $7E3628,x : PLA IceIcon: BIT #$0002 : BEQ SpazerIcon : PHA : LDA #$19E9 : ORA $0F96 : STA $7E362A,x : PLA SpazerIcon: BIT #$0004 : BEQ PlasmaIcon : PHA : LDA #$19EA : ORA $0F96 : STA $7E362C,x : PLA PlasmaIcon: BIT #$0008 : BEQ EquipIcons : PHA : LDA #$19EB : ORA $0F96 : STA $7E362E,x : PLA EquipIcons: LDA $09A4 ;// VariaIcon: BIT #$0001 : BEQ GravityIcon : PHA : LDA #$19EC : ORA $0F96 : STA $7E3632,x : PLA GravityIcon: BIT #$0020 : BEQ MorphIcon : PHA : LDA #$19ED : ORA $0F96 : STA $7E3634,x : PLA MorphIcon: BIT #$0004 : BEQ BombIcon : PHA : LDA #$19EE : ORA $0F96 : STA $7E3638,x : PLA BombIcon: BIT #$1000 : BEQ SpringIcon : PHA : LDA #$19EF : ORA $0F96 : STA $7E363A,x : PLA SpringIcon: BIT #$0002 : BEQ ScrewIcon : PHA : LDA #$19FF : ORA $0F96 : STA $7E363C,x : PLA ScrewIcon: BIT #$0008 : BEQ HijumpIcon : PHA : LDA #$19FE : ORA $0F96 : STA $7E363E,x : PLA HijumpIcon: BIT #$0100 : BEQ SpaceIcon : PHA : LDA #$19FD : ORA $0F96 : STA $7E3642,x : PLA SpaceIcon: BIT #$0200 : BEQ SpeedIcon : PHA : LDA #$19FC : ORA $0F96 : STA $7E3644,x : PLA SpeedIcon: BIT #$2000 : BEQ GrappleIcon : PHA : LDA #$19FB : ORA $0F96 : STA $7E3646,x : PLA GrappleIcon: BIT #$4000 : BEQ XrayIcon : PHA : LDA #$19FA : ORA $0F96 : STA $7E3650,x : PLA XrayIcon: BIT #$8000 : BEQ MissileIcon : PHA : LDA #$19F9 : ORA $0F96 : STA $7E3652,x : PLA MissileIcon: LDA $09C8 : BEQ SupermissileIcon : PHA : LDA #$19F0 : ORA $0F96 : STA $7E364A,x : PLA SupermissileIcon: LDA $09CA : BEQ PowerbombIcon : PHA : LDA #$19F1 : ORA $0F96 : STA $7E364C,x : PLA PowerbombIcon: LDA $09D0 : BEQ ItemPercent : PHA : LDA #$19F2 : ORA $0F96 : STA $7E364E,x : PLA ;//=====[THIS SECTION IS FOR THE ITEM PERCENTAGE MATH] ;//[commented lines can be uncommented for a decimal display] DigitizeMe: dw $2060,$2061,$2062,$2063,$2064,$2065,$2066,$2067,$2068,$2069 ;//digits table @ 070000 ItemPercent: LDA #DigitizeMe : STA $00 SEP #$20 LDA !CollectedItems ;Load number of collected items in the game STA $4202 LDA #$64 ;Load #100 decimal STA $4203 PHA : PLA : PHA : PLA REP #$20 LDA $4216 ;Load number of (collected items * 100) STA $4204 ;Store to devisor A SEP #$20 LDA !TotalItems ;Load total number of game items STA $4206 ;Store to devisor B PHA : PLA : PHA : PLA REP #$20 LDA $4214 ;Load ((collected items * 100)/Total items) ie Item percent STA $4204 LDA $4216 : STA $18 ;Load remainder SEP #$20 LDA #$0A STA $4206 PHA : PLA : PHA : PLA ;Calculate percentage / 10 REP #$20 LDA $4214 ;Load tenths of percentage / 10 (eg, if 78, load 7, if 53, load 5) STA $4204 ;Store value to devisor A LDA $4216 ;Load remainder of percentage / 10 (eg, if 78, load 8, if 53, load 3) STA $12 ;//xx0.x% SEP #$20 LDA #$0A STA $4206 PHA : PLA : PHA : PLA ;//Divide percentage by 10 again REP #$20 LDA $4214 ;//If 100%, this will be 1 STA $14 ;//0xx.x% LDA $4216 ;//Load remainder, which will be 0 if 100% achieved STA $16 ;//x0x.x% SEP #$20 LDA $18 : STA $4204 LDA #$0A : STA $4206 PHA : PLA : PHA : PLA ;//Divide remainder by 10 REP #$20 LDA $4216 : STA $18 ;//xxx.0% LDA $14 : JSR DigiDraw LDA $16 : JSR DigiDraw LDA $12 : JSR DigiDraw INX : INX LDA $18 : JSR DigiDraw LDA #$0088 : ORA $0F96 : STA $7E3606,x ;//decimal icon (ORA $0F96 is so it greys out properly) LDA #$01F7 : ORA $0F96 : STA $7E360A,x ;//percent icon JSR $A14E ;//vanilla [game time title screen] RTS ;//return DigiDraw: ASL A : TAY : LDA [$00],y ORA $0F96 : STA $7E360A,x INX : INX RTS ;//=====[THIS SECTION IS FOR THE ENERGY CACHE DISPLAY] NEWENERGY: dw $209D,$209E,$209F,$20CC,$2099,$FFFF ENERGYSHIFT: ;//[this nightmare (don't touch)] ;INX : INX : INX : INX LDY #NEWENERGY RTS FREEFILE: LDA $09C2 BRA $03 MAXFILE: LDA $09C4 MATHFILE: STA $4204 ;//math SEP #$20 ;//set A 16-bit LDA #$64 ;//load 100 STA $4206 ;//math JSR RESETMATH ;//rep & rts LDA $4216 ;//math PHA ;//push A LDA $4214 ;//math STA $4204 ;//math JSR ONESMATH ;//divide quotient of samus health by 10 JSR RESETMATH ;//rep & rts LDA $4214 ;//math STA $08 ;//store in $08 LDA $4216 ;//math STA $10 ;//store in $10 PLA ;//pull A STA $4204 ;//math JSR ONESMATH ;//divide quotient of samus health by 10 JSR RESETMATH ;//rep & rts LDA $4214 ;//math STA $12 ;//store in $12 LDA $4216 ;//math STA $14 ;//store in $14 RTS ;//return RESETMATH: REP #$20 RTS ;//return ONESMATH: SEP #$20 LDA #$0A STA $4206 RTS ;//return DUMBFILE: PHX LDA #$2098 ;// ORA $0F96 STA $7E3634,x ;//position of '/' PLX INX : INX ;// DRAWISHFILE: LDA $08 JSR NUMBERSGAME LDA $10 JSR NUMBERSGAME LDA $12 JSR NUMBERSGAME LDA $14 NUMBERSGAME: CLC ADC #$2060 ORA $0F96 STA $7E3634,x INX : INX RTS ;//return ;//["ARE YOU SURE?"] Areyousure: dw $206A,$207B,$206E,$200F,$2082,$2078,$207E,$200F,$207C,$207E,$207B,$206E,$2085,$FFFF ;//["RETURN TO TITLE"] Returntotitle: dw $207B,$206E,$207D,$207E,$207B,$2077,$200F,$207D,$2078,$200F,$207D,$2072,$207D,$2075,$206E,$FFFF db $EA ;//to know where the data ends ;============================================================================================================================; ;//=====[samus helmet animation] ;//[x/y position values do not have to count by two, you can literally place anywhere on screen] org $82CAE9 ;//[(x-pos +$42 vanilla)] ;//[FRAME_00] dw $0004 ;//# of animations per frame to process db $BA ;//xposition db $C3 db $F4 ;//yposition db $D1 ;//tile db $3E db $BA ;//xposition db $C3 db $FC ;//yposition db $E1 ;//tile db $3E db $B2 ;//xposition db $C3 db $FC ;//yposition db $E0 ;//tile db $3E db $B2 ;//xposition db $C3 db $F4 ;//yposition db $D0 ;//tile db $3E ;//[FRAME_01] dw $0004 ;//# of animations per frame to process db $B2 ;//xposition db $C3 db $FC db $E3 db $3E db $B2 ;//xposition db $C3 db $F4 db $D3 db $3E db $BA ;//xposition db $C3 db $F4 db $D4 db $3E db $BA ;//xposition db $C3 db $FC db $E4 db $3E ;//[FRAME_02] dw $0004 ;//# of animations per frame to process db $BA ;//xposition db $C3 db $F4 db $D7 db $3E db $B2 ;//xposition db $C3 db $F4 db $D6 db $3E db $B2 ;//xposition db $C3 db $FC db $E6 db $3E db $BA ;//xposition db $C3 db $FC db $E7 db $3E ;//[samus visor animation] org $82CB2B ;//[FRAME_00] dw $0006 ;//# of animations per frame to process db $BE ;//xposition of right half of visor (be careful this was $00 vanilla) db $00 db $FE db $DA db $3E db $B6 ;//xposition of left half of visor db $01 db $FE db $D9 db $3E db $BA ;//xposition db $C3 db $F4 db $D7 db $3E db $B2 ;//xposition db $C3 db $F4 db $D6 db $3E db $B2 ;//xposition db $C3 db $FC db $E6 db $3E db $BA ;//xposition db $C3 db $FC db $E7 db $3E ;//[FRAME_01] dw $0006 ;//# of animations per frame to process db $BE ;//xposition of right half of visor (be careful this was $00 vanilla) db $00 db $FE db $DC db $3E db $B6 ;//xposition of left half of visor db $01 db $FE db $DB db $3E db $BA ;//xposition db $C3 db $F4 db $D7 db $3E db $B2 ;//xposition db $C3 db $F4 db $D6 db $3E db $B2 ;//xposition db $C3 db $FC db $E6 db $3E db $BA ;//xposition db $C3 db $FC db $E7 db $3E ;//[FRAME_02] dw $0006 ;//# of animations per frame to process db $BE ;//xposition of right half of visor (be careful this was $00 vanilla) db $00 db $FE db $DE db $3E db $B6 ;//xposition of left half of visor db $01 db $FE db $DD db $3E db $BA ;//xposition db $C3 db $F4 db $D7 db $3E db $B2 ;//xposition db $C3 db $F4 db $D6 db $3E db $B2 ;//xposition db $C3 db $FC db $E6 db $3E db $BA ;//xposition db $C3 db $FC db $E7 db $3E ;//[FRAME_03] dw $0006 ;//# of animations per frame to process db $BE ;//xposition of right half of visor (be careful this was $00 vanilla) db $00 db $FE db $EA db $3E db $B6 ;//xposition of left half of visor db $01 db $FE db $E9 db $3E db $BA ;//xposition db $C3 db $F4 db $D7 db $3E db $B2 ;//xposition db $C3 db $F4 db $D6 db $3E db $B2 ;//xposition db $C3 db $FC db $E6 db $3E db $BA ;//xposition db $C3 db $FC db $E7 db $3E ;//[FRAME_04] dw $0006 ;//# of animations per frame to process db $BE ;//xposition of right half of visor (be careful this was $00 vanilla) db $00 db $FE db $EC db $3E db $B6 ;//xposition of left half of visor db $01 db $FE db $EB db $3E db $BA ;//xposition db $C3 db $F4 db $D7 db $3E db $B2 ;//xposition db $C3 db $F4 db $D6 db $3E db $B2 ;//xposition db $C3 db $FC db $E6 db $3E db $BA ;//xposition db $C3 db $FC db $E7 db $3E ;============================================================================================================================; ;//=====[THIS SECTION IS FOR THE FILE SELECT TILES] org $81B436 ;//["A"] dw $200A,$FFFE dw $201A,$FFFF dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//free space now org $81B456 ;//["B"] dw $200B,$FFFE dw $201B,$FFFF dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//free space now org $81B476 ;//["C"] dw $200C,$FFFE dw $201C,$FFFF dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//free space now org $81B496 ;//["ENERGY" (now free space)] dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF org $81B4AC ;//["NO DATA"] dw $200F,$2077,$2078,$200F,$206D,$206A,$207D,$206A,$200F,$FFFF dw $FFFF,$FFFF ;//vanilla had more blank tiles for this org $81B4C4 ;//["COPY DATA"] dw $206C,$2078,$2079,$2082,$200F,$206D,$206A,$207D,$206A,$FFFF org $81B4D8 ;//["CLEAR DATA"] dw $206C,$2075,$206E,$206A,$207B,$200F,$206D,$206A,$207D,$206A,$FFFF org $81B602 ;//["IS THIS OK?"] dw $FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF ;//free space now ;============================================================================================================================;