lorom ;MESSAGE BOX DISASSEMBLY BY KEJARDON AND BLACK FALCON ;if you want to modify and apply this disassembly, save this as a .asm file ;furthermore, in order to use the macros at the bottom, you need the following ASCII lookup tables in the same directory: ; http://metroidconstruction.com/smmm/Messageboxtext_blue.txt ; http://metroidconstruction.com/smmm/Messageboxtext_green.txt ; http://metroidconstruction.com/smmm/Messageboxtext_yellow.txt ; and http://metroidconstruction.com/smmm/Messageboxtext_purple.txt (default) named after the color they change the text into ;xkas will look up (hence lookup table) the values for each letter you type (the text in quotes, also below) ;this will allow you to simply type the text you want, and it is correctly displayed later ingame ;Still incomplete: various messages are missing org $858000 { ; MESSAGE BOX START BIGMSGBORDER: DW $000E, $000E, $000E, $284E, $284E, $284E, $284E, $284E, $284E, $280F, $280F, $280F, $280F, $280F, $280F, $280F DW $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $284E, $284E, $000E, $000E, $000E SMALLMSGBORDER: DW $000E, $000E, $000E, $000E, $000E, $000E, $284E, $284E, $284E, $284E, $284E, $284E, $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E, $284E, $284E, $284E, $284E, $284E, $000E, $000E, $000E, $000E, $000E, $000E, $000E MESSAGEBOXES: PHP : PHB : PHX : PHY : PHK : PLB STA $1C1F JSL $82BE17 ; $13E17 IN ROM. Plays 'sounds' (80:9049, 90CB, 914D), actually stops all sounds. JSR BACKUPLAYER3 JSR CLEARLAYER3 ; $281F3 IN ROM. Layer 3 clearing above and below message box JSR LOADSETUPS ; $28241 IN ROM. Two subroutines depending on $1C1F. I'm guessing tiles and length, in that order. JSR FRAMEDELAY ; $28574 IN ROM. Adds a 2 frame delay, if I understand this right. JSR OPENMESSAGEBOX ; $2844C IN ROM. 'Opens' the message box. This takes up several frames, during which nothing else runs. LDA $1C1F : CMP #$001C : BEQ SAVEDIALOGUE JSR MSGBOXRUNCODE ; $2846D IN ROM. Code for while message box is open. Nothing else happens during this. (Wait for X time than any button usually, or wait for A or left/right/select on save) JSR CLOSEMESSAGEBOX ; $28589 IN ROM. 'Closes' the message box. Takes several frames, nothing else happens. JSR CLEARLAYER3 ; $281F3 IN ROM. Layer 3 clearing, again JSR RESTORELAYER3 ; $2861A IN ROM. Layer 3 message box cleanup. JSL $82BE2F ; $13E2F IN ROM. Resume speed boost and charge beam sounds, if necessary, and a few other sounds I'm unsure of. JSR FRAMEDELAY ; $28574 IN ROM. Another 2 frame pause. JSR $80FA ; $280FA IN ROM. If map station, go to pause screen. Else if 1C (ship save?) or 17 (save station save), LDA $05F9 (selected option) DONEWITHMSGBOX: PLY : PLX : PLB : PLP ; all done, so gtfo RTL SAVEDIALOGUE: JSR MSGBOXRUNCODE ; $2846D IN ROM. Code for while message box is open. Nothing else happens during this. (Wait for X time than any button usually, or wait for A or left/right/select on save) JSR CLOSEMESSAGEBOX ; $28589 IN ROM. 'Closes' the message box. Takes several frames, nothing else happens. LDA $05F9 : CMP #$0002 : BEQ NOSAVE LDA #$0018 : STA $1C1F ; index for 'SAVE COMPLETED.' message box, which is funny because at this time there's nothing saved yet JSR CLEARLAYER3 ; $281F3 IN ROM. Layer 3 clearing, again JSR SAVESOUNDDELAY ; $28119 IN ROM JSR LOADSETUPS ; $28241 IN ROM JSR FRAMEDELAY ; $28574 IN ROM. Adds a 2 frame delay JSR OPENMESSAGEBOX ; $2844C IN ROM. 'Opens' the message box. "SAVE COMPLETED." in this case. JSR MSGBOXRUNCODE ; $2846D IN ROM. Code for while message box is open. Nothing else happens during this. JSR CLOSEMESSAGEBOX ; $28589 IN ROM. 'Closes' the message box. Takes several frames, nothing else happens. NOSAVE: JSR CLEARLAYER3 ; $281F3 IN ROM. Layer 3 clearing, again JSR RESTORELAYER3 ; $2861A IN ROM. Layer 3 message box cleanup. JSL MSGBOXRUNCODE ; $13E2F IN ROM. Resume speed boost and charge beam sounds, if necessary, and a few other sounds I'm unsure of. JSR FRAMEDELAY ; $28574 IN ROM. Adds a 2 frame delay JSR OPTIONS ; $280FA IN ROM. If map station, go to pause screen. Else if 1C (ship save?) or 17 (save station save), LDA $05F9 (selected option) BRA DONEWITHMSGBOX } print "8580FA ",pc OPTIONS: { ; $8580FA REP #$30 LDA $1C1F : CMP #$0014 : BNE + LDA #$000C : STA $0998 RTS + CMP #$001C : BEQ + CMP #$0017 : BNE ++ + LDA $05F9 ++ RTS } print "858119 ",pc SAVESOUNDDELAY: { ; 858119 ship save, plays sound of save capsule REP #$30 LDA #$002E : JSL $809049 LDA #$00A0 ;delay - PHA JSL $808F0C JSL $8289EF JSR WAITVBLANK PLA : DEC A : BNE - RTS } print "858136 ",pc WAITVBLANK: { ; 858136 very often called, loops until IRQ happens, DMA and HDMA cannot be set up outside of vblank PHP SEP #$20 LDA $05B8 - CMP $05B8 : BEQ - PLP : RTS } print "858143 ",pc BACKUPLAYER3: { ; 858143 puts existing layer 3 from VRAM into RAM space ;The main data area is the VRAM, a 64 KB memory space that can be accessed with registers $2115, $2116, $2118, and $2139. ; This area is used for storing all the tiles used in your game, as well as the tile maps. REP #$20 STZ $05F9 JSR WAITVBLANK SEP #$20 : STZ $420C ;disable H-DMA Channel: abcdefgh a = Channel 7 .. h = Channel 0: 1 = Enable 0 = Disable LDA #$19 : STA $2121 ;Address for CG-RAM Write LDA #$B1 : STA $2122 ;Data for CG-RAM Write, if I understand correctly, this writes 2 colors to the colormap LDA #$0B : STA $2122 ;these overwrite the liquid palette to regular greenish and red LDA #$1F : STA $2122 LDA #$00 : STA $2122 LDA $85 : STA $7E33EA ;HDMA channels to turn on? Not sure for what, looks like for Layer 3 blending for something. LDA $5B : STA $7E33EB ;Value for $2109 during interrupt 0006 (VRAM Address of tiles and size for BG3) LDA #$58 : STA $5B LDA #$17 : STA $6A ;Value for $212C (when?) Background and Object Enable (Main Screen) 000abcde a = Object b = BG 4 c = BG 3 d = BG 2 e = BG 1 STZ $70 ;Value for $2130 during interrupt 0006 (Which windows to add/subtract from) STZ $73 ;Value for $2131 during interrupt 0006 (Which layers to modify, and whether to add or to subtract) LDA #$20 : STA $2132 ;Fixed Color Data abcddddd a = Blue b = Green c = Red ddddd = Color Data LDA #$40 : STA $2132 ; LDA #$80 : STA $2132 ;black LDA $2111 ;needs to be read before it can be written to (weird hardware quirks) STZ $2111 : STZ $2111 ;clear BG3 scrolling horizontally LDA $2112 ;and vertically STZ $2112 : STZ $2112 ;twice each because the register is actually 16 bits wide REP #$30 LDX #$0080 : LDA #$0000 - STA $7E3000,x : DEX : DEX : BPL - ;clear RAM used for hdma lookup (opening message boxes, holds scroll values for individual lines) JSR WAITVBLANK ;wait for vblank REP #$20 LDA #$5880 : STA $2116 ;VRAM address in word address (B100 in byte address) for READ!!! LDA $2139 ;Read Data from VRAM, must be read first to enable it ;0x43X0 Parameters for DMA Transfer ab0cdeee a = Direction b = Type c = Inc/Dec d = Auto/Fixed e = Word Size Select LDA #%11100110000001 : STA $4310 ; ;transfer settings are: 10000001 ;direction: read out VRAM to store it into RAM! so I guess, backup current BG3? like FX and stuff? ;b = 0 >> data is directly transferred ;0 ;c = 0 >> address counts down ;d = 0 >> switch to next address ;eee = 001 >> 2 registers write once (2 bytes: p, p+1), effectively, one word gets transferred ; 43x2 rwl++++ A1TxL - DMA Source Address for Channel x low byte (x=0-7) ; 43x3 rwh++++ A1TxH - DMA Source Address for Channel x high byte (x=0-7) ; 43x4 rwb++++ A1Bx - DMA Source Address for Channel x bank byte (x=0-7) ;Adress bus byte B: 39 >> 2139 >> source address of VRAM ; bbbbbbbb hhhhhhhh llllllll LDA #$4100 : STA $4312 ;target Adress A = 4100 in words >> 8200 in bytes >> Layer 3 graphics. (2 bit. Lotta available space scattered around.) LDA #$007E : STA $4314 ;address bank LDA #$0700 : STA $4315 ;how many bytes to transfer STZ $4317 : STZ $4319 ;Data Bank (H-DMA) = 00, A2 Table Address (High Byte) = 00 SEP #$20 LDA #$80 : STA $2115 ;VRAM Address Increment Value, 1 => increment after writing $2119/reading $213a LDA #$02 : STA $420B ;Regular DMA Channel Enable, channel 2, ;to sum this transfer up: E00 bytes are transferred from layer 3 VRAM address B100-BF00 to 7E4100-7E4F00 JSL $808F0C JSL $8289EF RTS } print "8581F3 ",pc CLEARLAYER3: { ; 8581F3 clears out layer 3 by loading blank byte into section of VRAM REP #$30 LDX #$06FE : LDA.w CLEARTILE ;word to clear RAM with (blank tile?) - STA $7E3800,x : DEX : DEX : BPL - ;clear HDMA lookup table? JSR WAITVBLANK LDA #$5880 : STA $2116 ;B100 in word address LDA #$1801 : STA $4310 ;direction RAM >> VRAM, 2118 >> Data for VRAM Write (Low Byte) LDA #$3800 : STA $4312 LDA #$007E : STA $4314 LDA #$0700 : STA $4315 STZ $4317 : STZ $4319 ;Data Bank (H-DMA) = 00, A2 Table Address (High Byte) = 00 SEP #$20 LDA #$80 : STA $2115 ;VRAM Address Increment Value, 1 => increment after writing $2119/reading $213a LDA #$02 : STA $420B ;Regular DMA Channel Enable, channel 2, JSL $808F0C ;these routines allow sounds to be played JSL $8289EF ;send sound to SPC unit RTS CLEARTILE: DW $000E } print "858241 ",pc LOADTILEMAPS: { ; 858241 tiles and lengths REP #$30 LDA $1C1F : DEC A : ASL A : STA $34 ;message box index ASL A : CLC : ADC $34 : TAX PHX ;index times 3, meaning setups are 6 bytes in size per message box JSR (SETUPS+2,x) ;type PLX JSR (SETUPS,x) ;input button RTS } print "858258 ",pc BIGMESSAGE: { ; 858258 Loads tilemaps + above and below border for big message boxes REP #$20 LDX #$0000 - LDA.w BIGMSGBORDER,x : STA $7E3200,x : INX : INX : CPX #$0040 : BNE - LDY #$0000 JSR LOADTILEMAPS LDA #$0020 : STA $16 LDY #$0000 - LDA.w BIGMSGBORDER,y : STA $7E3200,x : INY : INY : INX : INX : DEC $16 : BNE - RTS } print "858289 ",pc SMALLMESSAGE: { ; 858289 Loads tilemaps + above and below border for small message boxes LDY #$0000 : LDX #$0000 - LDA.w SMALLMSGBORDER,x : STA $7E3200,x : INX : INX : CPX #$0040 : BNE - JSR LOADTILEMAPS LDA #$0020 : STA $16 LDY #$0000 - LDA.w SMALLMSGBORDER,y : STA $7E3200,x : INY : INY : INX : INX : DEC $16 : BNE - RTS } print "8582B8 ",pc LOADSETUPS: { ; 8582B8 ;determines pointer to tilemaps and loads them accordingly JSR WAITVBLANK JSL $808F0C : JSL $8289EF REP #$30 LDA #$0070 : STA $05A6 LDA #$007C : STA $05A4 STZ $05A2 LDX #$0000 : LDA #$0000 - STA $7E3000,x : INX : INX : CPX #$00E0 : BNE - LDA $1C1F : DEC A : ASL A : STA $34 : ASL A : CLC : ADC $34 TAX LDA $869F,x : STA $00 LDA $86A5,x : SEC : SBC $00 : STA $09 LSR A : STA $16 LDA $09 : CLC : ADC #$0080 : STA $09 LDX #$0040 : LDY #$0000 - LDA ($00),y : STA $7E3200,x : INX : INX : INY : INY : DEC $16 : BNE - RTS } print "85831E ",pc DMATRANSFER: { ; 85831E JSR SCROLLHDMASETUP JSR WAITVBLANK REP #$20 LDA #$5800 : CLC : ADC $34 : STA $34 : STA $2116 LDA #$1801 : STA $4310 LDA #$3200 : STA $4312 LDA #$007E : STA $4314 LDA $09 : STA $4315 STZ $4317 STZ $4319 SEP #$20 LDA #$80 : STA $2115 LDA #$02 : STA $420B JSL $808F0C JSL $8289EF RTS } print "858363 ",pc SCROLLHDMASETUP: { ; 858363 SEP #$20 LDA #$FF : STA $7E3380 ;tilemaps?! not sure what these do atm LDA #$00 : STA $7E3381 LDA #$30 : STA $7E3382 LDA #$E1 : STA $7E3383 LDA #$FE : STA $7E3384 LDA #$30 : STA $7E3385 LDA #$00 : STA $7E3386 LDA.b #%01000010 : STA $4360 ; #$42 Parameters for DMA Transfer ab0cdeee a = Direction b = Type c = Inc/Dec d = Auto/Fixed e = Word Size Select LDA #$12 : STA $4361 ;B address >> 2112 >> Y scroll of BG3 LDA #$80 : STA $4362 : STA $4365 LDA #$33 : STA $4363 : STA $4366 LDA #$7E : STA $4364 : STA $4367 STZ $4368 : STZ $4369 : STZ $436A JSR WRITELOOKUPTABLE ;opens message box SEP #$20 LDA #$40 : STA $420C ;enable channel 6 RTS } print "8583C5 ",pc SHOT: { ; 8583C5 BUTTON CHECK REP #$30 : LDA $09B2 : BRA $05 DASH: REP #$30 : LDA $09B6 ;8583CC LDY #$0000 : BIT #$0080 : BNE + ;depending on what button configuration is used LDY #$0002 : BIT #$8000 : BNE + ;it takes the respective letter to display LDY #$0004 : BIT #$0040 : BNE + ;the right button LDY #$0006 : BIT #$4000 : BNE + LDY #$0008 : BIT #$2000 : BNE + LDY #$000A : BIT #$0020 : BNE + LDY #$000C : BIT #$0010 : BNE + LDY #$000E + LDA $1C1F : DEC A : ASL A : TAX ;MSG box type LDA.w BUTTONPOSITIONS,x : TAX ;button positions LDA.w BUTTONTABLE,y : STA $7E3200,x LDA #$01A0 : STA $34 ;position of msg box JSR DMATRANSFER RTS BUTTONTABLE: DW $28E0, $3CE1, $2CF7, $38F8, $38D0, $38EB, $38F1, $284E } print "858436 ",pc SMALLEMPTY: { ; 858436 REP #$30 LDA #$01C0 : STA $34 JSR DMATRANSFER RTS } print "858441 ",pc SAVE: { ; 858441 REP #$30 LDA #$01A0 : STA $34 JSR DMATRANSFER RTS } print "85844C ",pc OPENMESSAGEBOX: { ; 85844C wait until message box is open REP #$30 STZ $05A2 - JSR WRITELOOKUPTABLE ;open message box LDA $05A2 : CLC : ADC #$0200 : STA $05A2 : CMP #$1800 : BMI - ;wait until the message box is open LDA #$1800 : STA $05A2 JSR WRITELOOKUPTABLE RTS } print "85846D ",pc MSGBOXRUNCODE: { ; 85846D individual code that runs while the message box is open, allows user input, plays sounds, etc. SEP #$20 LDA $1C1F : CMP #$17 : BEQ + ;save station save CMP #$1C : BEQ + ;ship save LDX #$000A : LDA $1C1F : CMP #$14 : BEQ ++ CMP #$15 : BEQ ++ CMP #$16 : BEQ ++ CMP #$18 : BEQ ++ LDX #$0168 ;delay for message box ++ : - : JSR WAITVBLANK : PHX : JSL $808F0C : JSL $8289EF : PLX : DEX : BNE - - LDA $4212 : BIT #$01 : BNE - ;wait for joypad input LDA $4218 : BNE + ;A, X, L, R LDA $4219 : BEQ - ;d-pad start, select, B, Y RTS ;simply returns if + REP #$30 : STZ $05F9 -- SEP #$30 : LDX #$02 - JSR WAITVBLANK : PHX : JSL $808F0C : JSL $8289EF : PLX : DEX : BNE - ;of course, because there isn't a routine that adds a 2 frame delay already, right? JSL $809459 ;handle button inputs, needed to refresh 8F and 8B REP #$30 LDA $8F : BEQ -- : BIT #$0080 : BNE + ;button input, check A button BIT #$8000 : BNE ++ ;B Button BIT #$2300 : BEQ -- ;start, left and right JSR TOGGLEYESNO REP #$30 : LDA #$0037 : JSL $809049 : REP #$30 : BRA -- ;damn make sure the 16 bit mode is really enabled! because reasons! - RTS + LDA $05F9 : BNE - : BRA - ;if the value is not equal, branch, else.. uh.. branch... gud jahb! ++ LDA #$0002 : STA $05F9 : BRA - } print "858507 ",pc TOGGLEYESNO: { ; 858507 LDA $05F9 : EOR #$0002 : STA $05F9 ;toggle value between 0 and 2 LDY #$0040 : CMP #$0002 : BNE + LDY #$0080 + LDX #$0100 : LDA #$0020 : STA $34 - LDA $9581,y : STA $7E3200,x : INX : INX : INY : INY : DEC $34 : BNE - ;depending on value, load tilemap for YES / NO JSR WAITVBLANK REP #$20 LDA #$59A0 : STA $34 ;load value into 34 LDA $34 : STA $2116 ;so that you can store it here again >_> LDA #$1801 : STA $4310 ;transfer gfx into VRAM LDA #$3200 : STA $4312 LDA #$007E : STA $4314 LDA #$0180 : STA $4315 STZ $4317 : STZ $4319 ;this is no hdma transfer, so clear those SEP #$20 : LDA #$80 : STA $2115 : LDA #$02 : STA $420B JSL $808F0C : JSL $8289EF RTS } print "858574 ",pc FRAMEDELAY: { ;858574 SEP #$30 : LDX #$02 - JSR WAITVBLANK : PHX : JSL $808F0C : JSL $8289EF : PLX : DEX : BNE - RTS } print "858589 ",pc CLOSEMESSAGEBOX: { ;858589 REP #$30 - JSR WRITELOOKUPTABLE : LDA $05A2 : SEC : SBC #$0200 : STA $05A2 : BPL - ;wait until the message box is open RTS } print "85859B ",pc WRITELOOKUPTABLE: { ;85859B Writes values for BG3 scroll PHP JSR WAITVBLANK REP #$30 JSL $808F0C JSL $8289EF ;sound effects LDA #$7B00 : SEC : SBC $05A2 : XBA : AND #$00FF : STA $05A8 LDA #$0063 : STA $05AA LDA #$7C00 : CLC : ADC $05A2 : XBA : AND #$00FF : STA $05A4 LDA #$0094 : STA $05A6 LDX #$00F6 : LDY #$00F8 : LDA #$001E : STA $14 - LDA $05AA : SEC : SBC $05A8 : STA $7E3000,x DEC $05AA : DEC $05A8 : DEX DEX : PHX : TYX LDA $05A6 : SEC : SBC $05A4 : STA $7E3000,x PLX INC $05A6 : INC $05A4 INY : INY : DEC $14 : BNE - TYX : LDA #$0000 - STA $7E3000,x : INX : INX : CPX #$01E0 : BMI - PLP RTS } print "85861A ",pc RESTORELAYER3: { ;85861A REP #$20 : JSR WAITVBLANK : REP #$20 LDA #$5880 : STA $2116 LDA #$1801 : STA $4310 LDA #$4100 : STA $4312 LDA #$007E : STA $4314 LDA #$0700 : STA $4315 STZ $4317 : STZ $4319 SEP #$20 LDA #$80 : STA $2115 LDA #$02 : STA $420B JSR WAITVBLANK SEP #$20 LDA $7E33EA : STA $85 : STA $420C LDA $7E33EB : STA $5B LDA $69 : STA $6A ;restore window settings LDA $6E : STA $70 LDA $71 : STA $73 LDA #$19 : STA $2121 ;restore liquid palette LDA $7EC032 : STA $2122 LDA $7EC033 : STA $2122 LDA $7EC034 : STA $2122 LDA $7EC035 : STA $2122 JSL $8884B9 : JSL $8289EF RTS } print "85869B ",pc SETUPS: { ;85869B ;start of message box setup table ; BUTTONS, TYPE, TILEMAP LOCATION DW SMALLEMPTY, SMALLMESSAGE, $877F ;01 energy tank DW SHOT, BIGMESSAGE, $87BF ;02 normal missile DW SHOT, BIGMESSAGE, $88BF ;03 super missile DW SHOT, BIGMESSAGE, $89BF ;04 powerbomb DW SHOT, BIGMESSAGE, $8ABF ;05 grapple beam DW DASH, BIGMESSAGE, $8BBF ;06 X-ray DW SMALLEMPTY, SMALLMESSAGE, $8CBF ;07 Varia Suit DW SMALLEMPTY, SMALLMESSAGE, $8CFF ;08 Spring Ball DW SMALLEMPTY, SMALLMESSAGE, $8D3F ;09 Morphing Ball DW SMALLEMPTY, SMALLMESSAGE, $8D7F ;0A Screw attack DW SMALLEMPTY, SMALLMESSAGE, $8DBF ;0B Hi-Jump Boots DW SMALLEMPTY, SMALLMESSAGE, $8DFF ;0C Space Jump DW DASH, BIGMESSAGE, $8E3F ;0D Speed Booster DW SMALLEMPTY, SMALLMESSAGE, $8F3F ;0E Charge Beam DW SMALLEMPTY, SMALLMESSAGE, $8F7F ;0F Ice Beam DW SMALLEMPTY, SMALLMESSAGE, $8FBF ;10 Wave Beam DW SMALLEMPTY, SMALLMESSAGE, $8FFF ;11 Spazer DW SMALLEMPTY, SMALLMESSAGE, $903F ;12 Plaasma Beam DW SHOT, BIGMESSAGE, $907F ;13 Bombs DW SMALLEMPTY, SMALLMESSAGE, $917F ;14 Map Data Access Completed. DW SMALLEMPTY, SMALLMESSAGE, $923F ;15 Energy Recharge Completed. DW SMALLEMPTY, SMALLMESSAGE, $92FF ;16 Missile Reload Completed. DW SAVE, SMALLMESSAGE, $93BF ;17 Would you like to Save? YES no normal save station DW SMALLEMPTY, SMALLMESSAGE, $94BF ;18 Save Completed. DW SMALLEMPTY, SMALLMESSAGE, $94FF ;19 Reserve Tank DW SMALLEMPTY, SMALLMESSAGE, $953F ;1A Gravity Suit DW SMALLEMPTY, SMALLMESSAGE, $957F ;1B YES no DW SAVE, SMALLMESSAGE, $93BF ;1C Would you like to Save? YES no ship save station DW SMALLEMPTY, SMALLMESSAGE, $94BF ;1D Save Completed. } ;858749 BUTTONPOSITIONS: { ;where the buttons are placed in the message box DW $0000, $012A, $012A, $012C DW $012C, $012C, $0000, $0000 DW $0000, $0000, $0000, $0000 DW $0120, $0000, $0000, $0000 DW $0000, $0000, $012A, $0000 DW $0000, $0000, $0000, $0000 DW $0000, $0000, $0000 } ;============================= START OF TILEMAPS =============================== ; TABLE MACROS { macro purple() table Messageboxtext_purple.txt endmacro macro green() table Messageboxtext_green.txt endmacro macro blue() table Messageboxtext_blue.txt endmacro macro yellow() table Messageboxtext_yellow.txt endmacro } ;Copied tables may not be 100% correct due to N++ having trouble using copy/paste multiple times within a recorded macro >_> ENERGYTANK: { %purple() ;text color, other options: %blue %green or %yellow DW "______####ENERGY#TANK#####______" } MISSILE: { %purple() ;text color, other options: %blue %green or %yellow DW "___##########MISSILE#########___" DW "___##########################___" DW $000E, $000E, $000E, $284E : DW $284E, $284E, $284E, $284E ;icon and 'press button to shoot' DW $284E, $304B, $3049, $704B : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $000E, $000E, $000E DW $000E, $000E, $000E, $284E : DW $284E, $28B9, $28BA, $28BB DW $284E, $304C, $304A, $704C : DW $284E, $28C8, $284E, $28B0 DW $28B1, $28B2, $28C0, $28C1 : DW $28D1, $28E0, $28D3, $28B5 DW $28B6, $28B7, $28CB, $284E : DW $284E, $000E, $000E, $000E } SUPERMISSILE: { %purple() ;text color, other options: %blue %green or %yellow DW "___######SUPER#MISSILE#######___" DW "___##########################___" DW $000E, $000E, $000E, $284E : DW $284E, $284E, $284E, $284E ;icon and 'press button to shoot' DW $284E, $284E, $3034, $7034 : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $000E, $000E, $000E DW $000E, $000E, $000E, $284E : DW $284E, $284E, $28B9, $28BA DW $28BB, $284E, $3035, $7035 : DW $284E, $28C8, $284E, $28B0 DW $28B1, $28B2, $28C0, $28C1 : DW $28D1, $3CE1, $28D3, $28B5 DW $28B6, $28B7, $28CB, $284E : DW $284E, $000E, $000E, $000E } POWERBOMB: { %purple() ;text color, other options: %blue %green or %yellow DW "___########POWER#BOMB########___" DW "___##########################___" DW $000E, $000E, $000E, $284E : DW $284E, $284E, $284E, $284E ;icon and 'press button to shoot' DW $3036, $7036, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $000E, $000E, $000E DW $000E, $000E, $000E, $284E : DW $28B9, $28BA, $28BB, $284E DW $3037, $7037, $284E, $28C8 : DW $284E, $28C5, $28C5, $28C7 DW $284E, $28BE, $28BF, $28C0 : DW $28C1, $28D1, $38F1, $28D3 DW $28B5, $28B6, $28B7, $28CB : DW $284E, $000E, $000E, $000E } GRAPPLEBEAM: { %purple() ;text color, other options: %blue %green or %yellow DW "___######GRAPPLING#BEAM######___" DW "___##########################___" DW $000E, $000E, $000E, $284E : DW $284E, $284E, $284E, $284E ;icon and 'press button to shoot' DW $3038, $7038, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $000E, $000E, $000E DW $000E, $000E, $000E, $284E : DW $28B9, $28BA, $28BB, $284E DW $3039, $7039, $284E, $28B0 : DW $28B1, $28B2, $284E, $28C8 DW $284E, $28B3, $28B4, $28B4 : DW $28C1, $28D1, $38F8, $28D3 DW $28B5, $28B6, $28B7, $28CB : DW $284E, $000E, $000E, $000E } XRAY: { %purple() ;text color, other options: %blue %green or %yellow DW "___########X-RAY#SCOPE#######___" DW "___##########################___" DW $000E, $000E, $000E, $284E : DW $284E, $284E, $284E, $284E ;icon and 'press button to use' DW $303A, $703A, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $284E, $284E, $284E DW $284E, $284E, $284E, $284E : DW $284E, $000E, $000E, $000E DW $000E, $000E, $000E, $284E : DW $28B9, $28BA, $28BB, $284E DW $303B, $703B, $284E, $28B0 : DW $28B1, $28B2, $284E, $284E DW $284E, $28B3, $28B4, $28C0 : DW $28C1, $28D1, $2CF7, $28D3 DW $28B5, $28B6, $28B7, $28CB : DW $284E, $000E, $000E, $000E } VARIASUIT: { %purple() ;text color, other options: %blue %green or %yellow DW "______#####VARIA#SUIT#####______" } SPRINGBALL: { %purple() ;text color, other options: %blue %green or %yellow DW "______####SPRING#BALL#####______" } MORPHINGBALL: { %purple() ;text color, other options: %blue %green or %yellow DW "______###MORPHING#BALL####______" }