diff options
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | constants.asm | 36 | ||||
| -rw-r--r-- | extras/analyze_incbins.py | 14 | ||||
| -rw-r--r-- | extras/insert_texts.py | 2 | ||||
| -rw-r--r-- | extras/make_map_size_constants.py | 4 | ||||
| -rw-r--r-- | extras/replace_dimensions.py | 2 | ||||
| -rw-r--r-- | extras/romvisualizer.py | 6 | ||||
| -rw-r--r-- | main.asm (renamed from common.asm) | 1415 | ||||
| -rw-r--r-- | pokeblue.asm | 2 | ||||
| -rw-r--r-- | pokered.asm | 2 | 
10 files changed, 1251 insertions, 238 deletions
| @@ -8,10 +8,10 @@ TEXTFILES =	text/oakspeech.tx text/pokedex.tx text/mapRedsHouse1F.tx \  all: pokered.gbc -pokered.o: pokered.asm common.tx constants.asm ${TEXTFILES} +pokered.o: pokered.asm main.tx constants.asm ${TEXTFILES}  	rgbasm -o pokered.o pokered.asm -pokeblue.o: pokeblue.asm common.tx constants.asm ${TEXTFILES} +pokeblue.o: pokeblue.asm main.tx constants.asm ${TEXTFILES}  	rgbasm -o pokeblue.o pokeblue.asm  redrle: extras/redrle.c @@ -30,6 +30,6 @@ pokeblue.gbc: pokeblue.o  	rgbfix -jsv -k 01 -l 0x33 -m 0x13 -p 0 -r 03 -t "POKEMON BLUE" $@  clean: -	rm -f common.tx pokered.o pokered.gbc pokeblue.o pokeblue.gbc redrle ${TEXTFILES} +	rm -f main.tx pokered.o pokered.gbc pokeblue.o pokeblue.gbc redrle ${TEXTFILES}  more: pokered.gbc pokeblue.gbc diff --git a/constants.asm b/constants.asm index 4f1df3d0..8fab2fb9 100644 --- a/constants.asm +++ b/constants.asm @@ -89,9 +89,36 @@ TX_RAM: MACRO  ; wram locations +; coordinates of the position of the cursor for the top menu item (id 0) +W_TOPMENUITEMY EQU $CC24 +W_TOPMENUITEMX EQU $CC25 + +; the id of the currently selected menu item +; the top item has id 0, the one below that has id 1, etc. +W_CURMENUITEMID EQU $CC26 + +; the tile that was behind the menu cursor's current location +W_TILEBEHINDCURSOR EQU $CC27 + +W_MAXMENUITEMID EQU $CC28 ; id of the bottom menu item + +W_MENUWATCHEDKEYS EQU $CC29 ; bit mask of keys that the menu will respond to + +W_OLDMENUITEMID EQU $CC2A ; id of previously selected menu item + +; how many times should HandleMenuInput poll the joypad state before it returns? +W_MENUJOYPADPOLLCOUNT EQU $CC34 +  W_PLAYERMOVELISTINDEX EQU $CC2E  W_PLAYERMONNUMBER EQU $CC2F +; the address of the menu cursor's current location within C3A0-C507 +W_MENUCURSORLOCATION EQU $CC30 ; 2 bytes + +; set to 1 if you can go from the bottom to the top or top to bottom of a menu +; set to 0 if you can't go past the top or bottom of the menu +W_MENUWRAPPINGENABLED EQU $CC4A +  ; current HP of player and enemy substitutes  W_PLAYERSUBSITUTEHP EQU $CCD7  W_ENEMYSUBSITUTEHP EQU $CCD8 @@ -699,6 +726,10 @@ W_BOXITEM50QTY    EQU $D59E  W_SAFARITIMER1 EQU $D70D ; use 01 for maximum  W_SAFARITIMER2 EQU $D70E ; use F4 for maximum +; counters for blinking down arrow +H_DOWNARROWBLINKCNT1 EQU $FF8B +H_DOWNARROWBLINKCNT2 EQU $FF8C +  ; Note: the following multiplication and division addresses are used for multiple purposes  ; and so they overlap with each other @@ -717,10 +748,15 @@ H_RAND2 EQU $FFD4  H_WHOSETURN EQU $FFF3 ; 0 on player’s turn, 1 on enemy’s turn  ; hardware registers, from the pandocs http://nocash.emubase.de/pandocs.htm +rJOYP EQU $FF00  rDIV EQU $FF04 +rLCDC EQU $FF40  rBGP EQU $FF47  rOBP0 EQU $FF48  rOBP1 EQU $FF49 +rWX EQU $FF4A +rWY EQU $FF4B +rIE EQU $FFFF  ; pokemon name constants diff --git a/extras/analyze_incbins.py b/extras/analyze_incbins.py index ef5405ef..3f0f9093 100644 --- a/extras/analyze_incbins.py +++ b/extras/analyze_incbins.py @@ -27,7 +27,7 @@ def offset_to_pointer(offset):      if type(offset) == str: offset = int(offset, base)      return int(offset) % 0x4000 + 0x4000 -def load_asm(filename="../common.asm"): +def load_asm(filename="../main.asm"):      "loads the asm source code into memory"      global asm      asm = open(filename, "r").read().split("\n") @@ -86,7 +86,7 @@ def process_incbins():  def find_incbin_to_replace_for(address):      """returns a line number for which incbin to edit -    if you were to insert bytes into common.asm""" +    if you were to insert bytes into main.asm"""      if type(address) == str: address = int(address, 16)      for incbin_key in processed_incbins.keys(): @@ -155,7 +155,7 @@ def generate_diff_insert(line_number, newline):      newfile_fh.close()      try: -        diffcontent = subprocess.check_output("diff -u ../common.asm " + newfile_filename, shell=True) +        diffcontent = subprocess.check_output("diff -u ../main.asm " + newfile_filename, shell=True)      except AttributeError, exc:          raise exc      except Exception, exc: @@ -195,7 +195,7 @@ def insert_map_header_asm(map_id):      fh.close()      #apply the patch -    os.system("patch ../common.asm temp.patch") +    os.system("patch ../main.asm temp.patch")      #remove the patch      os.system("rm temp.patch") @@ -230,8 +230,8 @@ def apply_diff(diff, try_fixing=True):      fh.close()      #apply the patch -    os.system("cp ../common.asm ../common1.asm") -    os.system("patch ../common.asm temp.patch") +    os.system("cp ../main.asm ../main1.asm") +    os.system("patch ../main.asm temp.patch")      #remove the patch      os.system("rm temp.patch") @@ -242,7 +242,7 @@ def apply_diff(diff, try_fixing=True):          return True      except Exception, exc:          if try_fixing: -            os.system("mv ../common1.asm ../common.asm") +            os.system("mv ../main1.asm ../main.asm")          return False  def index(seq, f): diff --git a/extras/insert_texts.py b/extras/insert_texts.py index 30163b4d..c3133bf8 100644 --- a/extras/insert_texts.py +++ b/extras/insert_texts.py @@ -610,7 +610,7 @@ def scan_for_map_scripts_pointer():  def scan_rom_for_tx_fars_and_insert():      """calls analyze_texts.scan_rom_for_tx_fars() -    looks through INCBIN'd addresses from common.asm, +    looks through INCBIN'd addresses from main.asm,      finds TX_FARs that aren't included yet.      """      x = 0 diff --git a/extras/make_map_size_constants.py b/extras/make_map_size_constants.py index c40a4514..c4b13da7 100644 --- a/extras/make_map_size_constants.py +++ b/extras/make_map_size_constants.py @@ -23,8 +23,8 @@ def get_map_size_constants(do_sed=False):          output += constant_name + "_WIDTH  EQU $%.2x\n" % (width)          output += "\n" -        sed_lines += "sed -i 's/" + base_name + "Height/" + constant_name + "_HEIGHT" + "/g' common.asm" + "\n" -        sed_lines += "sed -i 's/" + base_name + "Width/" + constant_name + "_WIDTH" + "/g' common.asm" + "\n" +        sed_lines += "sed -i 's/" + base_name + "Height/" + constant_name + "_HEIGHT" + "/g' main.asm" + "\n" +        sed_lines += "sed -i 's/" + base_name + "Width/" + constant_name + "_WIDTH" + "/g' main.asm" + "\n"      if do_sed:          return sed_lines diff --git a/extras/replace_dimensions.py b/extras/replace_dimensions.py index 9d4df895..cdd72906 100644 --- a/extras/replace_dimensions.py +++ b/extras/replace_dimensions.py @@ -39,7 +39,7 @@ asm = None  asm_lines = None  def load_asm():      global asm, asm_lines -    asm = open("../common.asm", "r").read() +    asm = open("../main.asm", "r").read()      asm_lines = asm.split("\n")  def get_xy_movement_of_connection_strip(map_id, connection_id): diff --git a/extras/romvisualizer.py b/extras/romvisualizer.py index 7e80f786..b3fd7cd5 100644 --- a/extras/romvisualizer.py +++ b/extras/romvisualizer.py @@ -6,12 +6,12 @@ import os  changeset_numbers = range(266, 635)  def take_snapshot_image(changeset_number): -    "turn common.asm into an image at a certain version" +    "turn main.asm into an image at a certain version" -    print "reverting common.asm to r" + str(changeset_number) +    print "reverting main.asm to r" + str(changeset_number)      #revert the file -    os.system("hg revert ../common.asm -r" + str(changeset_number)) +    os.system("hg revert ../main.asm -r" + str(changeset_number))      print "generating the image.." @@ -108,8 +108,79 @@ jp Start  Section "start",HOME[$150]  Start: ; 0x150 +	cp $11 ; value that indicates Gameboy Color +	jr z,.gbcDetected\@ +	xor a +	jr .storeValue\@ +.gbcDetected\@ +	ld a,$00 +.storeValue\@ +	ld [$cf1a],a ; same value ($00) either way +	jp InitGame + +; this function directly reads the joypad I/O register +; it reads many times in order to give the joypad a chance to stabilize +; it saves a result in [$fff8] in the following format +; (set bit indicates pressed button) +; bit 0 - A button +; bit 1 - B button +; bit 2 - Select button +; bit 3 - Start button +; bit 4 - Right +; bit 5 - Left +; bit 6 - Up +; bit 7 - Down +ReadJoypadRegister: ; 15F +	ld a,%00100000 ; select direction keys +	ld c,$00 +	ld [rJOYP],a +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	cpl ; complement the result so that a set bit indicates a pressed key +	and a,%00001111 +	swap a ; put direction keys in upper nibble +	ld b,a +	ld a,%00010000 ; select button keys +	ld [rJOYP],a +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	ld a,[rJOYP] +	cpl ; complement the result so that a set bit indicates a pressed key +	and a,%00001111 +	or b ; put button keys in lower nibble +	ld [$fff8],a ; save joypad state +	ld a,%00110000 ; unselect all keys +	ld [rJOYP],a +	ret + +; function to update the joypad state variables +; output: +; [$ffb2] = keys released since last time +; [$ffb3] = keys pressed since last time +; [$ffb4] = currently pressed keys +GetJoypadState: ; 19A +	ld a, [$ffb8] +	push af +	ld a,$3 +	ld [$ffb8],a +	ld [$2000],a +	call $4000 +	pop af +	ld [$ff00+$b8],a +	ld [$2000],a +	ret -INCBIN "baserom.gbc",$150,$1AE - $150  ; see also MapHeaderBanks  MapHeaderPointers: ; $01AE  	dw PalletTown_h @@ -419,7 +490,7 @@ OverworldLoopLessDelay: ; 402  	ld a,[$d736]  	bit 6,a ; jumping down a ledge?  	call nz, HandleMidJump -	ld a,[$cfc5] ; walking animation counter +	ld a,[W_WALKCOUNTER]  	and a  	jp nz,.moveAhead\@ ; if the player sprite has not yet completed the walking animation  	call GetJoypadStateOverworld ; get joypad state (which is possibly simulated) @@ -622,7 +693,7 @@ OverworldLoopLessDelay: ; 402  	jp c,OverworldLoop  .noCollision\@  	ld a,$08 -	ld [$cfc5],a ; walking animation counter +	ld [W_WALKCOUNTER],a  	jr .moveAhead2\@  .moveAhead\@  	ld a,[$d736] @@ -645,7 +716,7 @@ OverworldLoopLessDelay: ; 402  	call BikeSpeedup ; if riding a bike and not jumping a ledge  .normalPlayerSpriteAdvancement\@  	call AdvancePlayerSprite -	ld a,[$cfc5] ; walking animation counter +	ld a,[W_WALKCOUNTER]  	and a  	jp nz,CheckMapConnections ; it seems like this check will never succeed (the other place where CheckMapConnections is run works)  ; walking animation finished @@ -799,7 +870,7 @@ CheckWarpsNoCollisionLoop: ; 6CC  	jr nz,WarpFound1  	push de  	push bc -	call $019a ; update joypad state +	call GetJoypadState  	pop bc  	pop de  	ld a,[$ffb4] ; current joypad state @@ -1823,7 +1894,7 @@ AdvancePlayerSprite: ; D27  	ld b,a  	ld a,[$c105] ; delta X  	ld c,a -	ld hl,$cfc5 ; walking animation counter +	ld hl,W_WALKCOUNTER ; walking animation counter  	dec [hl]  	jr nz,.afterUpdateMapCoords\@  ; if it's the end of the animation, update the player's map coordinates @@ -1834,7 +1905,7 @@ AdvancePlayerSprite: ; D27  	add c  	ld [W_XCOORD],a  .afterUpdateMapCoords\@ -	ld a,[$cfc5] ; walking animation counter +	ld a,[W_WALKCOUNTER] ; walking animation counter  	cp a,$07  	jp nz,.scrollBackgroundAndSprites\@  ; if this is the first iteration of the animation @@ -2205,7 +2276,7 @@ GetJoypadStateOverworld: ; F4D  	ld [$c103],a  	ld [$c105],a  	call RunMapScript -	call $019a ; update joypad state +	call GetJoypadState  	ld a,[$d733]  	bit 3,a ; check if a trainer wants a challenge  	jr nz,.notForcedDownwards\@ @@ -2698,7 +2769,7 @@ LoadMapData: ; 1241  	ld [$d526],a  	ld [$ffaf],a  	ld [$ffae],a -	ld [$cfc5],a +	ld [W_WALKCOUNTER],a  	ld [$d119],a  	ld [$d11a],a  	ld [$d3a8],a @@ -3456,7 +3527,7 @@ TextCommand09: ; 1BFF  ; (no arguments)  TextCommand0A: ; 1C1D  	push bc -	call $019a ; update joypad state +	call GetJoypadState  	ld a,[$ffb4]  	and a,%00000011 ; A and B buttons  	jr nz,.skipDelay\@ @@ -3533,7 +3604,7 @@ TextCommand0C: ; 1C78  	ld a,$75 ; ellipsis  	ld [hli],a  	push de -	call $019a ; update joypad state +	call GetJoypadState  	pop de  	ld a,[$ffb4] ; joypad state  	and a,%00000011 ; is A or B button pressed? @@ -3617,7 +3688,128 @@ GetRowColAddressBgMap: ; 1CDD  	ld h,a  	ret -INCBIN "baserom.gbc",$1CF0,$20AF - $1CF0 +; clears a VRAM background map with blank space tiles +; INPUT: h - high byte of background tile map address in VRAM +ClearBgMap: ; 1CF0 +	ld a,$7f ; blank space +	jr .next\@ +	ld a,l ; XXX does anything call this? +.next\@ +	ld de,$400 ; size of VRAM background map +	ld l,e +.loop\@ +	ld [hli],a +	dec e +	jr nz,.loop\@ +	dec d +	jr nz,.loop\@ +	ret + +INCBIN "baserom.gbc",$1D01,$1F54 - $1D01 + +; initialization code +; explanation for %11100011 (value stored in rLCDC) +; * LCD enabled +; * Window tile map at $9C00 +; * Window display enabled +; * BG and window tile data at $8800 +; * BG tile map at $9800 +; * 8x8 OBJ size +; * OBJ display enabled +; * BG display enabled +InitGame: ; 1F54 +	di +; zero I/O registers +	xor a +	ld [$ff0f],a +	ld [$ffff],a +	ld [$ff43],a +	ld [$ff42],a +	ld [$ff01],a +	ld [$ff02],a +	ld [$ff4b],a +	ld [$ff4a],a +	ld [$ff06],a +	ld [$ff07],a +	ld [$ff47],a +	ld [$ff48],a +	ld [$ff49],a +	ld a,%10000000 ; enable LCD +	ld [rLCDC],a +	call DisableLCD ; why enable then disable? +	ld sp,$dfff ; initialize stack pointer +	ld hl,$c000 ; start of WRAM +	ld bc,$2000 ; size of WRAM +.zeroWramLoop\@ +	ld [hl],0 +	inc hl +	dec bc +	ld a,b +	or c +	jr nz,.zeroWramLoop\@ +	call ZeroVram +	ld hl,$ff80 +	ld bc,$007f +	call $36e0 ; zero HRAM +	call CleanLCD_OAM ; this is unnecessary since it was already cleared above +	ld a,$01 +	ld [$ffb8],a +	ld [$2000],a +	call $4bed ; copy DMA code to HRAM +	xor a +	ld [$ffd7],a +	ld [$ff41],a +	ld [$ffae],a +	ld [$ffaf],a +	ld [$ff0f],a +	ld a,%00001101 ; enable V-blank, timer, and serial interrupts +	ld [rIE],a +	ld a,$90 ; put the window off the screen +	ld [$ffb0],a +	ld [rWX],a +	ld a,$07 +	ld [rWY],a +	ld a,$ff +	ld [$ffaa],a +	ld h,$98 +	call ClearBgMap ; fill $9800-$9BFF (BG tile map) with $7F tiles +	ld h,$9c +	call ClearBgMap ; fill $9C00-$9FFF (Window tile map) with $7F tiles +	ld a,%11100011 +	ld [rLCDC],a ; enabled LCD +	ld a,$10 +	ld [$ff8a],a +	call $200e +	ei +	ld a,$40 +	call Predef ; SGB border +	ld a,$1f +	ld [$c0ef],a +	ld [$c0f0],a +	ld a,$9c +	ld [$ffbd],a +	xor a +	ld [$ffbc],a +	dec a +	ld [$cfcb],a +	ld a,$32 +	call Predef ; display the copyrights, GameFreak logo, and battle animation +	call DisableLCD +	call ZeroVram +	call $3ddc +	call CleanLCD_OAM +	ld a,%11100011 +	ld [rLCDC],a ; enable LCD +	jp $42b7 + +; zeroes all VRAM +ZeroVram: ; 2004 +	ld hl,$8000 +	ld bc,$2000 +	xor a +	jp $36e0 + +INCBIN "baserom.gbc",$200E,$20AF - $200E  DelayFrame: ; 20AF  ; delay for one frame @@ -4101,7 +4293,7 @@ DisplayTextID: ; 2920  	call $3865 ; wait for a button press after displaying all the text  ; loop to hold the dialogue box open as long as the player keeps holding down the A button  .holdBoxOpen\@ -	call $019a ; update joypad state +	call GetJoypadState  	ld a,[$ffb4]  	bit 0,a ; is the A button being pressed?  	jr nz,.holdBoxOpen\@ @@ -4573,7 +4765,63 @@ GetName: ; 376B  	ld [$2000],a  	ret -INCBIN "baserom.gbc",$37df,$3927 - $37df +INCBIN "baserom.gbc",$37df,$3831 - $37df + +; this function is used when lower button sensitivity is wanted (e.g. menus) +; OUTPUT: [$ffb5] = pressed buttons in usual format +; there are two flags that control its functionality, [$ffb6] and [$ffb7] +; there are esentially three modes of operation +; 1. Get newly pressed buttons only +;    ([$ffb7] == 0, [$ffb6] == any) +;    Just copies [$ffb3] to [$ffb5]. +; 2. Get currently pressed buttons at low sample rate with delay +;    ([$ffb7] == 0, [$ffb6] != 0) +;    If the user holds down buttons for more than half a second, +;    report buttons as being pressed up to 12 times per second thereafter. +;    If the user holds down buttons for less than half a second, +;    report only one button press. +; 3. Same as 2, but report no buttons as pressed if A or B is held down. +;    ([$ffb7] == 0, [$ffb6] == 0) +GetJoypadStateLowSensitivity: ; 3831 +	call GetJoypadState +	ld a,[$ffb7] ; flag +	and a ; get all currently pressed buttons or only newly pressed buttons? +	ld a,[$ffb3] ; newly pressed buttons +	jr z,.storeButtonState\@ +	ld a,[$ffb4] ; all currently pressed buttons +.storeButtonState\@ +	ld [$ffb5],a +	ld a,[$ffb3] ; newly pressed buttons +	and a ; have any buttons been newly pressed since last check? +	jr z,.noNewlyPressedButtons\@ +.newlyPressedButtons\@ +	ld a,30 ; half a second delay +	ld [$ffd5],a ; frame counter +	ret +.noNewlyPressedButtons\@ +	ld a,[$ffd5] ; frame counter +	and a ; is the delay over? +	jr z,.delayOver\@ +.delayNotOver\@ +	xor a +	ld [$ffb5],a ; report no buttons as pressed +	ret +.delayOver\@ +; if [$ffb6] = 0 and A or B is pressed, report no buttons as pressed +	ld a,[$ffb4] +	and a,%00000011 ; A and B buttons +	jr z,.setShortDelay\@ +	ld a,[$ffb6] ; flag +	and a +	jr nz,.setShortDelay\@ +	xor a +	ld [$ffb5],a              +.setShortDelay\@ +	ld a,5 ; 1/12 of a second delay +	ld [$ffd5],a ; frame counter +	ret + +INCBIN "baserom.gbc",$3865,$3927 - $3865  AddPokemonToParty: ; 0x3927  	push hl @@ -4599,7 +4847,338 @@ AddNTimes: ; 3A87  	jr nz,.loop\@  	ret -INCBIN "baserom.gbc",$3A8E,$3C49 - $3A8E +; Compare strings, c bytes in length, at de and hl. +; Often used to compare big endian numbers in battle calculations. +StringCmp: ; 3A8E +	ld a,[de] +	cp [hl] +	ret nz +	inc de +	inc hl +	dec c +	jr nz,StringCmp +	ret + +; INPUT: +; a = oam block index (each block is 4 oam entries) +; b = Y coordinate of upper left corner of sprite +; c = X coordinate of upper left corner of sprite +; de = base address of 4 tile number and attribute pairs +WriteOAMBlock: ; 3A97 +	ld h,$c3 +	swap a ; multiply by 16 +	ld l,a +	call .writeOneEntry\@ ; upper left +	push bc +	ld a,8 +	add c +	ld c,a +	call .writeOneEntry\@ ; upper right +	pop bc +	ld a,8 +	add b +	ld b,a +	call .writeOneEntry\@ ; lower left +	ld a,8 +	add c +	ld c,a +	                      ; lower right +.writeOneEntry\@ +	ld [hl],b ; Y coordinate +	inc hl +	ld [hl],c ; X coordinate +	inc hl +	ld a,[de] ; tile number +	inc de +	ld [hli],a +	ld a,[de] ; attribute +	inc de +	ld [hli],a +	ret + +HandleMenuInput: ; 3ABE +	xor a +	ld [$d09b],a + +HandleMenuInputPokemonSelection: ; 3AC2 +	ld a,[H_DOWNARROWBLINKCNT1] +	push af +	ld a,[H_DOWNARROWBLINKCNT2] +	push af ; save existing values on stack +	xor a +	ld [H_DOWNARROWBLINKCNT1],a ; blinking down arrow timing value 1 +	ld a,$06 +	ld [H_DOWNARROWBLINKCNT2],a ; blinking down arrow timing value 2 +.loop1\@ +	xor a +	ld [$d08b],a ; counter for pokemon shaking animation +	call PlaceMenuCursor +	call Delay3 +.loop2\@ +	push hl +	ld a,[$d09b] +	and a ; is it a pokemon selection menu? +	jr z,.getJoypadState\@ +	ld b,$1c +	ld hl,$56ff ; shake mini sprite of selected pokemon +	call Bankswitch +.getJoypadState\@ +	pop hl +	call GetJoypadStateLowSensitivity +	ld a,[$ffb5] +	and a ; was a key pressed? +	jr nz,.keyPressed\@ +	push hl +	FuncCoord 18,11 ; coordinates of blinking down arrow in some menus +	ld hl,Coord +	call $3c04 ; blink down arrow (if any) +	pop hl +	ld a,[W_MENUJOYPADPOLLCOUNT] +	dec a +	jr z,.giveUpWaiting\@ +	jr .loop2\@ +.giveUpWaiting\@ +; if a key wasn't pressed within the specified number of checks +	pop af +	ld [H_DOWNARROWBLINKCNT2],a +	pop af +	ld [H_DOWNARROWBLINKCNT1],a ; restore previous values +	xor a +	ld [W_MENUWRAPPINGENABLED],a ; disable menu wrapping +	ret +.keyPressed\@ +	xor a +	ld [$cc4b],a +	ld a,[$ffb5] +	ld b,a +	bit 6,a ; pressed Up key? +	jr z,.checkIfDownPressed\@ +.upPressed\@ +	ld a,[W_CURMENUITEMID] ; selected menu item +	and a ; already at the top of the menu? +	jr z,.alreadyAtTop\@ +.notAtTop\@ +	dec a +	ld [W_CURMENUITEMID],a ; move selected menu item up one space +	jr .checkOtherKeys\@ +.alreadyAtTop\@ +	ld a,[W_MENUWRAPPINGENABLED] +	and a ; is wrapping around enabled? +	jr z,.noWrappingAround\@ +	ld a,[W_MAXMENUITEMID] +	ld [W_CURMENUITEMID],a ; wrap to the bottom of the menu +	jr .checkOtherKeys\@ +.checkIfDownPressed\@ +	bit 7,a +	jr z,.checkOtherKeys\@ +.downPressed\@ +	ld a,[W_CURMENUITEMID] +	inc a +	ld c,a +	ld a,[W_MAXMENUITEMID] +	cp c +	jr nc,.notAtBottom\@ +.alreadyAtBottom\@ +	ld a,[W_MENUWRAPPINGENABLED] +	and a ; is wrapping around enabled? +	jr z,.noWrappingAround\@ +	ld c,$00 ; wrap from bottom to top +.notAtBottom\@ +	ld a,c +	ld [W_CURMENUITEMID],a +.checkOtherKeys\@ +	ld a,[W_MENUWATCHEDKEYS] +	and b ; does the menu care about any of the pressed keys? +	jp z,.loop1\@ +.checkIfAButtonOrBButtonPressed\@ +	ld a,[$ffb5] +	and a,%00000011 ; pressed A button or B button? +	jr z,.skipPlayingSound\@ +.AButtonOrBButtonPressed\@ +	push hl +	ld hl,$cd60 +	bit 5,[hl] +	pop hl +	jr nz,.skipPlayingSound\@ +	ld a,$90 +	call $23b1 ; play sound +.skipPlayingSound\@ +	pop af +	ld [H_DOWNARROWBLINKCNT2],a +	pop af +	ld [H_DOWNARROWBLINKCNT1],a ; restore previous values +	xor a +	ld [W_MENUWRAPPINGENABLED],a ; disable menu wrapping +	ld a,[$ffb5] +	ret +.noWrappingAround\@ +	ld a,[$cc37] +	and a ; should we return if the user tried to go past the top or bottom? +	jr z,.checkOtherKeys\@ +	jr .checkIfAButtonOrBButtonPressed\@ + +PlaceMenuCursor: ; 3B7C +	ld a,[W_TOPMENUITEMY] +	and a ; is the y coordinate 0? +	jr z,.adjustForXCoord\@ +	ld hl,$c3a0 +	ld bc,20 ; screen width +.topMenuItemLoop\@ +	add hl,bc +	dec a +	jr nz,.topMenuItemLoop\@ +.adjustForXCoord\@ +	ld a,[W_TOPMENUITEMX] +	ld b,$00 +	ld c,a +	add hl,bc +	push hl +	ld a,[W_OLDMENUITEMID] +	and a ; was the previous menu id 0? +	jr z,.checkForArrow1\@ +	push af +	ld a,[$fff6] +	bit 1,a ; is the menu double spaced? +	jr z,.doubleSpaced1\@ +	ld bc,20 +	jr .getOldMenuItemScreenPosition\@ +.doubleSpaced1\@ +	ld bc,40 +.getOldMenuItemScreenPosition\@ +	pop af +.oldMenuItemLoop\@ +	add hl,bc +	dec a +	jr nz,.oldMenuItemLoop\@ +.checkForArrow1\@ +	ld a,[hl] +	cp a,$ed ; was an arrow next to the previously selected menu item? +	jr nz,.skipClearingArrow\@ +.clearArrow\@ +	ld a,[W_TILEBEHINDCURSOR] +	ld [hl],a +.skipClearingArrow\@ +	pop hl +	ld a,[W_CURMENUITEMID] +	and a +	jr z,.checkForArrow2\@ +	push af +	ld a,[$fff6] +	bit 1,a ; is the menu double spaced? +	jr z,.doubleSpaced2\@ +	ld bc,20 +	jr .getCurrentMenuItemScreenPosition\@ +.doubleSpaced2\@ +	ld bc,40 +.getCurrentMenuItemScreenPosition\@ +	pop af +.currentMenuItemLoop\@ +	add hl,bc +	dec a +	jr nz,.currentMenuItemLoop\@ +.checkForArrow2\@ +	ld a,[hl] +	cp a,$ed ; has the right arrow already been placed? +	jr z,.skipSavingTile\@ ; if so, don't lose the saved tile +	ld [W_TILEBEHINDCURSOR],a ; save tile before overwriting with right arrow +.skipSavingTile\@ +	ld a,$ed ; place right arrow +	ld [hl],a +	ld a,l +	ld [W_MENUCURSORLOCATION],a +	ld a,h +	ld [W_MENUCURSORLOCATION + 1],a +	ld a,[W_CURMENUITEMID] +	ld [W_OLDMENUITEMID],a +	ret + +; Used when swapping positions of items in a list menu. +; The item that the user selects first is marked with an outline of a right arrow +; to distinguish it from the arrow being used to select the second item. +PlaceUnfilledArrowMenuCursor: ; 3BEC +	ld b,a +	ld a,[W_MENUCURSORLOCATION] +	ld l,a +	ld a,[W_MENUCURSORLOCATION + 1] +	ld h,a +	ld [hl],$ec ; outline of right arrow +	ld a,b +	ret + +; Replaces the menu cursor with a blank space. +EraseMenuCursor: ; 3BF9 +	ld a,[W_MENUCURSORLOCATION] +	ld l,a +	ld a,[W_MENUCURSORLOCATION + 1] +	ld h,a +	ld [hl],$7f ; blank space +	ret + +; This toggles a blinking down arrow at hl on and off after a delay has passed. +; This is often called even when no blinking is occurring. +; The reason is that most functions that call this initialize H_DOWNARROWBLINKCNT1 to 0. +; The effect is that if the tile at hl is initialized with a down arrow, +; this function will toggle that down arrow on and off, but if the tile isn't +; initliazed with a down arrow, this function does nothing. +; That allows this to be called without worrying about if a down arrow should +; be blinking. +HandleDownArrowBlinkTiming: ; 3C04 +	ld a,[hl] +	ld b,a +	ld a,$ee ; down arrow +	cp b +	jr nz,.downArrowOff\@ +.downArrowOn\@ +	ld a,[H_DOWNARROWBLINKCNT1] +	dec a +	ld [H_DOWNARROWBLINKCNT1],a +	ret nz +	ld a,[H_DOWNARROWBLINKCNT2] +	dec a +	ld [H_DOWNARROWBLINKCNT2],a +	ret nz +	ld a,$7f ; blank space +	ld [hl],a +	ld a,$ff +	ld [H_DOWNARROWBLINKCNT1],a +	ld a,$06 +	ld [H_DOWNARROWBLINKCNT2],a +	ret +.downArrowOff\@ +	ld a,[H_DOWNARROWBLINKCNT1] +	and a +	ret z +	dec a +	ld [H_DOWNARROWBLINKCNT1],a +	ret nz +	dec a +	ld [H_DOWNARROWBLINKCNT1],a +	ld a,[H_DOWNARROWBLINKCNT2] +	dec a +	ld [H_DOWNARROWBLINKCNT2],a +	ret nz +	ld a,$06 +	ld [H_DOWNARROWBLINKCNT2],a +	ld a,$ee ; down arrow +	ld [hl],a +	ret + +; The following code either enables or disables the automatic drawing of +; text boxes by DisplayTextID. Both functions cause DisplayTextID to wait +; for a button press after displaying text (unless [$cc47] is set). + +EnableAutoTextBoxDrawing: ; 3C3C +	xor a +	jr AutoTextBoxDrawingCommon + +DisableAutoTextBoxDrawing: ; 3C3F +	ld a,$01 + +AutoTextBoxDrawingCommon: ; 3C41 +	ld [$cf0c],a ; control text box drawing +	xor a +	ld [$cc3c],a ; make DisplayTextID wait for button press +	ret  PrintText: ; 3C49  ; given a pointer in hl, print the text there @@ -5208,7 +5787,7 @@ MainMenu: ; 0x5af2  	ld [$FFB3],a  	ld [$FFB2],a  	ld [$FFB4],a -	call $19A +	call GetJoypadState  	ld a,[$FFB4]  	bit 0,a  	jr nz,.next5\@ @@ -5226,7 +5805,7 @@ MainMenu: ; 0x5af2  	and a  	jp z,$5D5F  	ld a,[W_CURMAP] ; map ID -	cp a,$76 ; Hall of Fame +	cp a,HALL_OF_FAME  	jp nz,$5D5F  	xor a  	ld [$D71A],a @@ -13871,15 +14450,15 @@ CeruleanCityText2: ; 0x1967c  	ld bc, $e401  	call GiveItem  	jr c, .asm_8bbbd ; 0x196b9 $8 -	ld hl, UnnamedText_196e9 +	ld hl, TM28NoRoomText  	call PrintText  	jr .asm_e4e6f ; 0x196c1 $13  .asm_8bbbd ; 0x196c3  	ld a, $1  	ld [$cc3c], a -	ld hl, UnnamedText_196de +	ld hl, ReceivedTM28Text  	call PrintText -	ld b, $1d +	ld b, BANK(Unnamed_ASM_74872)  	ld hl, Unnamed_ASM_74872  	call Bankswitch  .asm_e4e6f ; 0x196d6 @@ -13891,15 +14470,15 @@ UnnamedText_196d9: ; 0x196d9  	db $50  ; 0x196d9 + 5 bytes -UnnamedText_196de: ; 0x196de -	TX_FAR ReceivedTM28Text ; 0xa4f82 +ReceivedTM28Text: ; 0x196de +	TX_FAR _ReceivedTM28Text ; 0xa4f82  	db $0B -	TX_FAR UnnamedText_a4f96 ; 0xa4f96 +	TX_FAR _ReceivedTM28Text2 ; 0xa4f96  	db $0D, $50  ; 0x196e9 -UnnamedText_196e9: ; 0x196e9 -	TX_FAR _UnnamedText_196e9 +TM28NoRoomText: ; 0x196e9 +	TX_FAR _TM28NoRoomText  	db $50  ; 0x196e9 + 5 bytes @@ -14045,12 +14624,13 @@ VermilionCityScript: ; 0x197a1  	pop hl  	bit 5, [hl]  	res 5, [hl] -	call nz, $57c0 +	call nz, VermilionCityScript_Unknown197c0  	ld hl, VermilionCityScripts  	ld a, [$d62a]  	jp $3d97  ; 0x197c0 +VermilionCityScript_Unknown197c0: ; 0x197c0  INCBIN "baserom.gbc",$197c0,$197dc - $197c0  VermilionCityScripts: ; 0x197dc @@ -14147,11 +14727,11 @@ VermilionCityText3: ; 0x198b1  	call $34bf  	jr nc, .asm_57b73 ; 0x198c6  .asm_07af3 ; 0x198c8 -	ld hl, UnnamedText_19904 +	ld hl, SSAnneWelcomeText4  	call PrintText  	jr .asm_79bd1 ; 0x198ce  .asm_57b73 ; 0x198d0 -	ld hl, UnnamedText_19909 +	ld hl, SSAnneWelcomeText9  	call PrintText  	ld b, $3f  	ld a, $1c @@ -14159,45 +14739,45 @@ VermilionCityText3: ; 0x198b1  	ld a, b  	and a  	jr nz, .asm_0419b ; 0x198df -	ld hl, UnnamedText_19913 +	ld hl, SSAnneNoTicketText  	call PrintText  	jr .asm_79bd1 ; 0x198e7  .asm_0419b ; 0x198e9 -	ld hl, UnnamedText_1990e +	ld hl, SSAnneFlashedTicketText  	call PrintText  	ld a, $4  	ld [$d62a], a  	jr .asm_79bd1 ; 0x198f4  .asm_3e0e9 ; 0x198f6 -	ld hl, UnnamedText_19918 +	ld hl, SSAnneNotHereText  	call PrintText  .asm_79bd1 ; 0x198fc  	jp TextScriptEnd  INCBIN "baserom.gbc",$198ff,$19904 - $198ff -UnnamedText_19904: ; 0x19904 -	TX_FAR _UnnamedText_19904 +SSAnneWelcomeText4: ; 0x19904 +	TX_FAR _SSAnneWelcomeText4  	db $50  ; 0x19904 + 5 bytes -UnnamedText_19909: ; 0x19909 -	TX_FAR _UnnamedText_19909 +SSAnneWelcomeText9: ; 0x19909 +	TX_FAR _SSAnneWelcomeText9  	db $50  ; 0x19909 + 5 bytes -UnnamedText_1990e: ; 0x1990e -	TX_FAR _UnnamedText_1990e +SSAnneFlashedTicketText: ; 0x1990e +	TX_FAR _SSAnneFlashedTicketText  	db $50  ; 0x1990e + 5 bytes -UnnamedText_19913: ; 0x19913 -	TX_FAR _UnnamedText_19913 +SSAnneNoTicketText: ; 0x19913 +	TX_FAR _SSAnneNoTicketText  	db $50  ; 0x19913 + 5 bytes -UnnamedText_19918: ; 0x19918 -	TX_FAR _UnnamedText_19918 +SSAnneNotHereText: ; 0x19918 +	TX_FAR _SSAnneNotHereText  	db $50  ; 0x19918 + 5 bytes @@ -14276,43 +14856,43 @@ CeladonCityText5: ; 0x1999e  	ld a, [$d777]  	bit 0, a  	jr nz, .asm_7053f ; 0x199a4 -	ld hl, UnnamedText_199d2 +	ld hl, TM41PreText  	call PrintText  	ld bc, (TM_41 << 8) | 1  	call GiveItem  	jr c, .asm_890ec ; 0x199b2 -	ld hl, UnnamedText_199e2 +	ld hl, TM41NoRoomText  	call PrintText  	jr .asm_c765a ; 0x199ba  .asm_890ec ; 0x199bc -	ld hl, UnnamedText_199d7 +	ld hl, ReceivedTM41Text  	call PrintText  	ld hl, $d777  	set 0, [hl]  	jr .asm_c765a ; 0x199c7  .asm_7053f ; 0x199c9 -	ld hl, UnnamedText_199dd +	ld hl, TM41ExplanationText  	call PrintText  .asm_c765a ; 0x199cf  	jp TextScriptEnd -UnnamedText_199d2: ; 0x199d2 -	TX_FAR _UnnamedText_199d2 +TM41PreText: ; 0x199d2 +	TX_FAR _TM41PreText  	db $50  ; 0x199d2 + 5 bytes -UnnamedText_199d7: ; 0x199d7 -	TX_FAR _UnnamedText_199d7 ; 0xa5b5a +ReceivedTM41Text: ; 0x199d7 +	TX_FAR _ReceivedTM41Text ; 0xa5b5a  	db $0B, $50  ; 0x199d7 + 6 bytes = 0x199dd -UnnamedText_199dd: ; 0x199dd -	TX_FAR _UnnamedText_199dd +TM41ExplanationText: ; 0x199dd +	TX_FAR _TM41ExplanationText  	db $50  ; 0x199dd + 5 bytes -UnnamedText_199e2: ; 0x199e2 -	TX_FAR _UnnamedText_199e2 +TM41NoRoomText: ; 0x199e2 +	TX_FAR _TM41NoRoomText  	db $50  ; 0x199e2 + 5 bytes @@ -14422,66 +15002,66 @@ FuchsiaCityText18: ; 0x19a8b  FuchsiaCityText19: ; 0x19a90  	db $08 ; asm -	ld hl, UnnamedText_19a9f +	ld hl, FuchsiaCityChanseyText  	call PrintText  	ld a, $28  	call $349b  	jp TextScriptEnd -UnnamedText_19a9f: ; 0x19a9f -	TX_FAR _UnnamedText_19a9f +FuchsiaCityChanseyText: ; 0x19a9f +	TX_FAR _FuchsiaCityChanseyText  	db $50  ; 0x19a9f + 5 bytes  FuchsiaCityText20: ; 0x19aa4  	db $08 ; asm -	ld hl, UnnamedText_19ab3 +	ld hl, FuchsiaCityVoltorbText  	call PrintText  	ld a, $6  	call $349b  	jp TextScriptEnd -UnnamedText_19ab3: ; 0x19ab3 -	TX_FAR _UnnamedText_19ab3 +FuchsiaCityVoltorbText: ; 0x19ab3 +	TX_FAR _FuchsiaCityVoltorbText  	db $50  ; 0x19ab3 + 5 bytes  FuchsiaCityText21: ; 0x19ab8  	db $08 ; asm -	ld hl, UnnamedText_19ac7 +	ld hl, FuchsiaCityKangaskhanText  	call PrintText  	ld a, $2  	call $349b  	jp TextScriptEnd -UnnamedText_19ac7: ; 0x19ac7 -	TX_FAR _UnnamedText_19ac7 +FuchsiaCityKangaskhanText: ; 0x19ac7 +	TX_FAR _FuchsiaCityKangaskhanText  	db $50  ; 0x19ac7 + 5 bytes  FuchsiaCityText22: ; 0x19acc  	db $08 ; asm -	ld hl, UnnamedText_19adb +	ld hl, FuchsiaCitySlowpokeText  	call PrintText  	ld a, $25  	call $349b  	jp TextScriptEnd -UnnamedText_19adb: ; 0x19adb -	TX_FAR _UnnamedText_19adb +FuchsiaCitySlowpokeText: ; 0x19adb +	TX_FAR _FuchsiaCitySlowpokeText  	db $50  ; 0x19adb + 5 bytes  FuchsiaCityText23: ; 0x19ae0  	db $08 ; asm -	ld hl, UnnamedText_19aef +	ld hl, FuchsiaCityLaprasText  	call PrintText  	ld a, $13  	call $349b  	jp TextScriptEnd -UnnamedText_19aef: ; 0x19aef -	TX_FAR _UnnamedText_19aef +FuchsiaCityLaprasText: ; 0x19aef +	TX_FAR _FuchsiaCityLaprasText  	db $50  ; 0x19aef + 5 bytes @@ -14496,12 +15076,12 @@ FuchsiaCityText24: ; 0x19af4  	call PrintText  	jr .asm_4343f ; 0x19b06  .asm_3b4e8 ; 0x19b08 -	ld hl, UnnamedText_19b20 +	ld hl, FuchsiaCityOmanyteText  	call PrintText  	ld a, $62  	jr .asm_81556 ; 0x19b10  .asm_667d5 ; 0x19b12 -	ld hl, UnnamedText_19b25 +	ld hl, FuchsiaCityKabutoText  	call PrintText  	ld a, $5a  .asm_81556 ; 0x19b1a @@ -14509,13 +15089,13 @@ FuchsiaCityText24: ; 0x19af4  .asm_4343f ; 0x19b1d  	jp TextScriptEnd -UnnamedText_19b20: ; 0x19b20 -	TX_FAR _UnnamedText_19b20 +FuchsiaCityOmanyteText: ; 0x19b20 +	TX_FAR _FuchsiaCityOmanyteText  	db $50  ; 0x19b20 + 5 bytes -UnnamedText_19b25: ; 0x19b25 -	TX_FAR _UnnamedText_19b25 +FuchsiaCityKabutoText: ; 0x19b25 +	TX_FAR _FuchsiaCityKabutoText  	db $50  ; 0x19b25 + 5 bytes @@ -14768,9 +15348,9 @@ SilphCo4_h: ; 0x19cff to 0x19d0b (12 bytes) (bank=6) (id=209)  	dw SilphCo4Object ; objects  SilphCo4Script: ; 0x19d0b -	call $5d21 +	call SilphCo4Script_Unknown19d21  	call $3c3c -	ld hl, $5dae +	ld hl, SilphCo4TrainerHeaders  	ld de, $5d9a  	ld a, [$d645]  	call $3160 @@ -14778,6 +15358,7 @@ SilphCo4Script: ; 0x19d0b  	ret  ; 0x19d21 +SilphCo4Script_Unknown19d21: ; 0x19d21  INCBIN "baserom.gbc",$19d21,$7f  SilphCo4Texts: ; 0x19da0 @@ -14942,7 +15523,7 @@ SilphCo5_h: ; 0x19f2b to 0x19f37 (12 bytes) (bank=6) (id=210)  SilphCo5Script: ; 0x19f37  	call Unnamed_19f4d  	call $3c3c -	ld hl, $5fd2 +	ld hl, SilphCo5TrainerHeaders  	ld de, $5fb6  	ld a, [$d646]  	call $3160 @@ -15162,7 +15743,7 @@ SilphCo6_h: ; 0x1a19d to 0x1a1a9 (12 bytes) (bank=6) (id=211)  SilphCo6Script: ; 0x1a1a9  	call Unnamed_1a1bf  	call $3c3c -	ld hl, $620a +	ld hl, SilphCo6TrainerHeaders  	ld de, $61f0  	ld a, [$d647]  	call $3160 @@ -15176,6 +15757,7 @@ INCBIN "baserom.gbc",$1a1bf,$37  SilphCo6Texts: ; 0x1a1f6  	dw SilphCo6Text1, SilphCo6Text2, SilphCo6Text3, SilphCo6Text4, SilphCo6Text5, SilphCo6Text6, SilphCo6Text7, SilphCo6Text8, SilphCo6Text9, SilphCo6Text10 +SilphCo6TrainerHeaders:  TrainerHeader_1a20a: ; 0x1a20a  	db $6 ; flag's bit  	db ($2 << 4) ; trainer's view range @@ -17123,13 +17705,14 @@ ViridianMart_h: ; 0x1d462 to 0x1d46e (12 bytes) (bank=7) (id=42)  	dw ViridianMartObject ; objects  ViridianMartScript: ; 0x1d46e -	call $547d +	call ViridianMartScript_Unknown1d47d  	call $3c3c  	ld hl, $5495  	ld a, [$d60d]  	jp $3d97  ; 0x1d47d +ViridianMartScript_Unknown1d47d: ; 0x1d47d  INCBIN "baserom.gbc",$1d47d,$1e  ViridianMartScript0: ; 0x1d49b @@ -18890,13 +19473,14 @@ PowerPlant_h: ; 0x1e2ba to 0x1e2c6 (12 bytes) (bank=7) (id=83)  PowerPlantScript: ; 0x1e2c6  	call $3c3c  	ld hl, $62fb -	ld de, $62d9 +	ld de, PowerPlantScript_Unknown1e2d9  	ld a, [$d663]  	call $3160  	ld [$d663], a  	ret  ; 0x1e2d9 +PowerPlantScript_Unknown1e2d9: ; 0x1e2d9  INCBIN "baserom.gbc",$1e2d9,$6  PowerPlantTexts: ; 0x1e2df @@ -18955,13 +19539,15 @@ PowerPlantText9: ; 0x1e3a4  	db $8 ; asm  	ld hl, $635b  	jr asm_234cc ; 0x1e3a8 $be -	rla ; probably a TX_FAR -	ld [$ff00+c], a -	ld b, l -	inc hl -	ld d, b -	rla -	ld [$2345], a +; 0x1e3aa + +UnnamedText_1e3aa: ; 0x1e3aa +	TX_FAR _UnnamedText_1e3aa ; 0x8c5e2 +	db $50 +; 0x1e3af + +UnnamedText_1e3af: ; 0x1e3af +	TX_FAR _UnnamedText_1e3af ; 0x8c5ea  	db $8  	ld a, $4b  	call $13d0 @@ -28351,7 +28937,7 @@ Mansion1_h: ; 0x442a3 to 0x442af (12 bytes) (bank=11) (id=165)  Mansion1Script:  	call Mansion1Subscript1  	call $3c3c -	ld hl, $4334 +	ld hl, Mansion1TrainerHeaders  	ld de, $4326  	ld a, [$d63a]  	call $3160 @@ -28389,8 +28975,9 @@ Mansion1Subscript1: ; 0x442c5  INCBIN "baserom.gbc",$44304,$4432c - $44304  Mansion1Texts: ; 0x4432c -INCBIN "baserom.gbc",$4432c,$44334 - $4432c +	dw Mansion1Text1, Mansion1Text2, Mansion1Text3, Mansion1Text4 +Mansion1TrainerHeaders:  TrainerHeader_44334: ; 0x44334  	db $1 ; flag's bit  	db ($3 << 4) ; trainer's view range @@ -28424,9 +29011,9 @@ UnnamedText_44355: ; 0x44355  	db $50  ; 0x44355 + 5 bytes -UnnamedText_4435a: ; 0x4435a +Mansion1Text4: ; 0x4435a  	db $8 -	ld hl, $4395 +	ld hl, UnnamedText_44395  	call PrintText  	call $35ec  	ld a, [$cc26] @@ -28436,7 +29023,7 @@ UnnamedText_4435a: ; 0x4435a  	ld [$cc3c], a  	ld hl, $d126  	set 5, [hl] -	ld hl, $439a +	ld hl, UnnamedText_4439a  	call PrintText  	ld a, $ad  	call $23b1 @@ -28447,7 +29034,7 @@ UnnamedText_4435a: ; 0x4435a  	res 0, [hl]  	jr .asm_44392 ; 0x4438a $6  .asm_4438c -	ld hl, $439f +	ld hl, UnnamedText_4439f  	call PrintText  .asm_44392  	jp TextScriptEnd @@ -28728,7 +29315,7 @@ SeafoamIslands1Script: ; 0x447e9  	bit 7, [hl]  	res 7, [hl]  	jr z, .asm_4483b ; 0x447f8 $41 -	ld hl, $4846 +	ld hl, SeafoamIslands1Script_Unknown44846  	call $34e4  	ret nc  	ld hl, $d7e8 @@ -28759,10 +29346,11 @@ SeafoamIslands1Script: ; 0x447e9  .asm_4483b  	ld a, $9f  	ld [$d71d], a -	ld hl, $4846 +	ld hl, SeafoamIslands1Script_Unknown44846  	jp $6981  ; 0x44846 +SeafoamIslands1Script_Unknown44846: ; 0x44846  INCBIN "baserom.gbc",$44846,$5  SeafoamIslands1Texts: ; 0x4484b @@ -28847,9 +29435,9 @@ VictoryRoad3_h: ; 0x44974 to 0x44980 (12 bytes) (bank=11) (id=198)  	dw VictoryRoad3Object ; objects  VictoryRoad3Script: ; 0x44980 -	call $4996 +	call VictoryRoad3Script_Unknown44996  	call $3c3c -	ld hl, $4a38 +	ld hl, VictoryRoad3TrainerHeaders  	ld de, $49b1  	ld a, [$d640]  	call $3160 @@ -28857,6 +29445,7 @@ VictoryRoad3Script: ; 0x44980  	ret  ; 0x44996 +VictoryRoad3Script_Unknown44996: ; 0x44996  INCBIN "baserom.gbc",$44996,$8e  VictoryRoad3Texts: ; 0x44a24 @@ -29032,7 +29621,7 @@ RocketHideout1_h: ; 0x44bbe to 0x44bca (12 bytes) (bank=11) (id=199)  RocketHideout1Script: ; 0x44bca  	call Unknown_44be0  	call $3c3c -	ld hl, $4c22 +	ld hl, RocketHideout1TrainerHeaders  	ld de, $4c0e  	ld a, [$d631]  	call $3160 @@ -29253,14 +29842,15 @@ RocketHideout2_h: ; 0x44e1b to 0x44e27 (12 bytes) (bank=11) (id=200)  RocketHideout2Script: ; 0x44e27  	call $3c3c -	ld hl, $50d1 -	ld de, $4e3a +	ld hl, RocketHideout2TrainerHeaders +	ld de, RocketHideout2_Unknown44e3a  	ld a, [$d632]  	call $3160  	ld [$d632], a  	ret  ; 0x44e3a +RocketHideout2_Unknown44e3a: ; 0x44ea  INCBIN "baserom.gbc",$44e3a,$28d  RocketHideout2Texts: ; 0x450c7 @@ -29339,14 +29929,15 @@ RocketHideout3_h: ; 0x45219 to 0x45225 (12 bytes) (bank=11) (id=201)  RocketHideout3Script: ; 0x45225  	call $3c3c -	ld hl, $5302 -	ld de, $5238 +	ld hl, RocketHideout3TrainerHeaders +	ld de, RocketHideout3Script_Unknown45238  	ld a, [$d633]  	call $3160  	ld [$d633], a  	ret  ; 0x45238 +RocketHideout3Script_Unknown45238: ; 0x45238  INCBIN "baserom.gbc",$45238,$c2  RocketHideout3Texts: ; 0x452fa @@ -29661,7 +30252,7 @@ RocketHideoutElevatorScript: ; 0x45710  	bit 5, [hl]  	res 5, [hl]  	push hl -	call nz, $572c +	call nz, RocketHideoutElevatorScript_Unknown4572c  	pop hl  	bit 7, [hl]  	res 7, [hl] @@ -29673,6 +30264,7 @@ RocketHideoutElevatorScript: ; 0x45710  	ret  ; 0x4572c +RocketHideoutElevatorScript_Unknown4572c: ; 0x4572c  INCBIN "baserom.gbc",$4572c,$3f  RocketHideoutElevatorTexts: ; 0x4576b @@ -29730,7 +30322,7 @@ SilphCoElevatorScript: ; 0x457c0  	bit 5, [hl]  	res 5, [hl]  	push hl -	call nz, $57dc +	call nz, SilphCoElevatorScript_Unknown457dc  	pop hl  	bit 7, [hl]  	res 7, [hl] @@ -29742,6 +30334,7 @@ SilphCoElevatorScript: ; 0x457c0  	ret  ; 0x457dc +SilphCoElevatorScript_Unknown457dc: ; 0x457dc  INCBIN "baserom.gbc",$457dc,$57  SilphCoElevatorTexts: ; 0x45833 @@ -30196,14 +30789,15 @@ UnknownDungeon3_h: ; 0x45ee4 to 0x45ef0 (12 bytes) (bank=11) (id=227)  UnknownDungeon3Script: ; 0x45ef0  	call $3c3c -	ld hl, $5f0f -	ld de, $5f03 +	ld hl, UnknownDungeon3TrainerHeaders +	ld de, UnknownDungeon3Script_Unknown45f03  	ld a, [$d650]  	call $3160  	ld [$d650], a  	ret  ; 0x45f03 +UnknownDungeon3Script_Unknown45f03: ; 0x45f03  INCBIN "baserom.gbc",$45f03,$6  UnknownDungeon3Texts: ; 0x45f09 @@ -30266,14 +30860,15 @@ RockTunnel2_h: ; 0x45fdf to 0x45feb (12 bytes) (bank=11) (id=232)  RockTunnel2Script: ; 0x45feb  	call $3c3c -	ld hl, $6014 -	ld de, $5ffe +	ld hl, RockTunnel2TrainerHeaders +	ld de, RockTunnel2Script_Unknown45ffe  	ld a, [$d620]  	call $3160  	ld [$d620], a  	ret  ; 0x45ffe +RockTunnel2Script_Unknown45ffe: ; 0x45ffe  INCBIN "baserom.gbc",$45ffe,$6  RockTunnel2Texts: ; 0x46004 @@ -30574,7 +31169,7 @@ SeafoamIslands2Script: ; 0x46315  	bit 7, [hl]  	res 7, [hl]  	jr z, .asm_46362 ; 0x4631f $41 -	ld hl, $636d +	ld hl, SeafoamIslands2Script_Unknown4636d  	call $34e4  	ret nc  	ld hl, $d87f @@ -30605,10 +31200,11 @@ SeafoamIslands2Script: ; 0x46315  .asm_46362  	ld a, $a0  	ld [$d71d], a -	ld hl, $636d +	ld hl, SeafoamIslands2Script_Unknown4636d  	jp $6981  ; 0x4636d +SeafoamIslands2Script_Unknown4636d: ; 0x4636d  INCBIN "baserom.gbc",$4636d,$5  SeafoamIslands2Texts: ; 0x46372 @@ -30658,7 +31254,7 @@ SeafoamIslands3Script: ; 0x46451  	bit 7, [hl]  	res 7, [hl]  	jr z, .asm_4649e ; 0x4645b $41 -	ld hl, $64a9 +	ld hl, SeafoamIslands3Script_Unknown464a9  	call $34e4  	ret nc  	ld hl, $d880 @@ -30689,10 +31285,11 @@ SeafoamIslands3Script: ; 0x46451  .asm_4649e  	ld a, $a1  	ld [$d71d], a -	ld hl, $64a9 +	ld hl, SeafoamIslands3Script_Unknown464a9  	jp $6981  ; 0x464a9 +SeafoamIslands3Script_Unknown464a9: ; 0x464a9  INCBIN "baserom.gbc",$464a9,$5  SeafoamIslands3Texts: ; 0x464ae @@ -30742,7 +31339,7 @@ SeafoamIslands4Script: ; 0x4658d  	bit 7, [hl]  	res 7, [hl]  	jr z, .asm_465dc ; 0x46597 $43 -	ld hl, $65f6 +	ld hl, SeafoamIslands4Script_Unknown465f6  	call $34e4  	ret nc  	ld hl, $d881 @@ -30774,7 +31371,7 @@ SeafoamIslands4Script: ; 0x4658d  .asm_465dc  	ld a, $a2  	ld [$d71d], a -	ld hl, $65f6 +	ld hl, SeafoamIslands4Script_Unknown465f6  	call $6981  	ld a, [$d732]  	bit 4, a @@ -30785,6 +31382,7 @@ SeafoamIslands4Script: ; 0x4658d  	jp $3d97  ; 0x465f6 +SeafoamIslands4Script_Unknown465f6: ; 0x465f6  INCBIN "baserom.gbc",$465f6,$465fb - $465f6  SeafoamIslands4Scripts: ; 0x465fb @@ -30804,7 +31402,7 @@ SeafoamIslands4Script0: ; 0x46603  	cp $f  	ret nz  	ld hl, $ccd3 -	ld de, $6632 +	ld de, SeafoamIslands4Script0_Unknown46632  	call $350c  	dec a  	ld [$cd38], a @@ -30816,6 +31414,7 @@ SeafoamIslands4Script0: ; 0x46603  	ret  ; 0x46632 +SeafoamIslands4Script0_Unknown46632: ; 0x46632  INCBIN "baserom.gbc",$46632,$46639 - $46632  SeafoamIslands4Script1: ; 0x46639 @@ -31077,7 +31676,8 @@ Route7Script: ; 0x48152  	jp $3c3c  ; 0x48155 -INCBIN "baserom.gbc",$48155,$2 +; XXX +db $57, $41  Route7Text1: ; 0x48157  	TX_FAR _Route7Text1 @@ -31486,7 +32086,7 @@ CeladonMartElevatorScript: ; 0x48600  	bit 5, [hl]  	res 5, [hl]  	push hl -	call nz, $461c +	call nz, CeladonMartElevatorScript_Unknown4861c  	pop hl  	bit 7, [hl]  	res 7, [hl] @@ -31498,6 +32098,7 @@ CeladonMartElevatorScript: ; 0x48600  	ret  ; 0x4861c +CeladonMartElevatorScript_Unknown4861c: ; 0x4861c  INCBIN "baserom.gbc",$4861c,$40  CeladonMartElevatorTexts: ; 0x4865c @@ -31857,9 +32458,9 @@ CeladonGymScript: ; 0x4890a  	ld hl, $d126  	bit 6, [hl]  	res 6, [hl] -	call nz, $4927 +	call nz, CeladonGymScript_Unknown48927  	call $3c3c -	ld hl, $49bc +	ld hl, CeladonGymTrainerHeaders  	ld de, $494e  	ld a, [$d5ff]  	call $3160 @@ -31867,6 +32468,7 @@ CeladonGymScript: ; 0x4890a  	ret  ; 0x48927 +CeladonGymScript_Unknown48927: ; 0x48927  INCBIN "baserom.gbc",$48927,$7f  CeladonGymTexts: ; 0x489a6 @@ -36741,13 +37343,13 @@ VictoryRoad2Script: ; 0x5179d  	ld hl, $d126  	bit 6, [hl]  	res 6, [hl] -	call nz, $57c4 +	call nz, VictoryRoad2Script_Unknown517c4  	ld hl, $d126  	bit 5, [hl]  	res 5, [hl]  	call nz, $57c9  	call $3c3c -	ld hl, $5835 +	ld hl, VictoryRoad2TrainerHeaders  	ld de, $57eb  	ld a, [$d63f]  	call $3160 @@ -36755,11 +37357,13 @@ VictoryRoad2Script: ; 0x5179d  	ret  ; 0x517c4 +VictoryRoad2Script_Unknown517c4: ; 0x517c4  INCBIN "baserom.gbc",$517c4,$57  VictoryRoad2Texts: ; 0x5181b  	dw VictoryRoad2Text1, VictoryRoad2Text2, VictoryRoad2Text3, VictoryRoad2Text4, VictoryRoad2Text5, VictoryRoad2Text6, VictoryRoad2Text7, VictoryRoad2Text8, VictoryRoad2Text9, VictoryRoad2Text10, VictoryRoad2Text11, VictoryRoad2Text12, VictoryRoad2Text13 +VictoryRoad2TrainerHeaders:  TrainerHeader_51835: ; 0x51835  	db $1 ; flag's bit  	db ($4 << 4) ; trainer's view range @@ -37043,9 +37647,9 @@ SilphCo7_h: ; 0x51b55 to 0x51b61 (12 bytes) (id=212)  	dw SilphCo7Object ; objects  SilphCo7Script: ; 0x51b61 -	call $5b77 +	call SilphCo7Script_Unknown51b77  	call $3c3c -	ld hl, $5d5d +	ld hl, SilphCo7TrainerHeaders  	ld de, $5c17  	ld a, [$d648]  	call $3160 @@ -37053,11 +37657,13 @@ SilphCo7Script: ; 0x51b61  	ret  ; 0x51b77 +SilphCo7Script_Unknown51b77: ; 0x5177  INCBIN "baserom.gbc",$51b77,$1c8  SilphCo7Texts: ; 0x51d3f  	dw SilphCo7Text1, SilphCo7Text2, SilphCo7Text3, SilphCo7Text4, SilphCo7Text5, SilphCo7Text6, SilphCo7Text7, SilphCo7Text8, SilphCo7Text9, SilphCo7Text10, SilphCo7Text11, SilphCo7Text12, SilphCo7Text13, SilphCo7Text14, SilphCo7Text15 +SilphCo7TrainerHeaders:  TrainerHeader_51d5d: ; 0x51d5d  	db $5 ; flag's bit  	db ($2 << 4) ; trainer's view range @@ -37386,9 +37992,9 @@ Mansion2_h: ; 0x51fcc to 0x51fd8 (12 bytes) (id=214)  	dw Mansion2Object ; objects  Mansion2Script: -	call $5fee +	call Mansion2Script_Unknown51fee  	call $3c3c -	ld hl, $6057 +	ld hl, Mansion2TrainerHeaders  	ld de, $6047  	ld a, [$d63c]  	call $3160 @@ -37396,6 +38002,7 @@ Mansion2Script:  	ret  ; 0x51fee +Mansion2Script_Unknown51fee: ; 0x51fee  INCBIN "baserom.gbc",$51fee,$5204d - $51fee  Mansion2Texts: ; 0x5204d @@ -39122,7 +39729,7 @@ Route5Text1: ; 0x556b7  Route9Script: ; 0x556bc  	call $3c3c -	ld hl, $56eb +	ld hl, Route9TrainerHeaders  	ld de, Unknown_556cf  	ld a, [$d604]  	call $3160 @@ -39418,19 +40025,21 @@ Route9Text11: ; 0x55819  Route13Script: ; 0x5581e  	call $3c3c -	ld hl, $5851 -	ld de, $5831 +	ld hl, Route13TrainerHeaders +	ld de, Route13Script_Unknown55831  	ld a, [$d61a]  	call $3160  	ld [$d61a], a  	ret  ; 0x55831 +Route13Script_Unknown55831: ; 0x55831  INCBIN "baserom.gbc",$55831,$6  Route13Texts: ; 0x55837  	dw Route13Text1, Route13Text2, Route13Text3, Route13Text4, Route13Text5, Route13Text6, Route13Text7, Route13Text8, Route13Text9, Route13Text10, Route13Text11, Route13Text12, Route13Text13 +Route13TrainerHeaders:  TrainerHeader_55851: ; 0x55851  	db $1 ; flag's bit  	db ($2 << 4) ; trainer's view range @@ -43016,7 +43625,7 @@ Route10Text10: ; 0x59447  Route11Script: ; 0x5944c  	call $3c3c -	ld hl, $547b +	ld hl, Route11TrainerHeaders  	ld de, Route11_Unknown5945f  	ld a, [$d623]  	call $3160 @@ -44494,7 +45103,7 @@ SilphCo2_h: ; 0x59ce5 to 0x59cf1 (12 bytes) (id=207)  	dw SilphCo2Object ; objects  SilphCo2Script: ; 0x59cf1 -	call $5d07 +	call SilphCo2_Unknown59d07  	call $3c3c  	ld hl, SilphCo2TrainerHeaders  	ld de, $5d80 @@ -44504,6 +45113,7 @@ SilphCo2Script: ; 0x59cf1  	ret  ; 0x59d07 +SilphCo2_Unknown59d07: ; 0x59d07  INCBIN "baserom.gbc",$59d07,$7f  SilphCo2Texts: ; 0x59d86 @@ -45683,7 +46293,7 @@ PewterGymScript: ; 0x5c387  	ld hl, $d126  	bit 6, [hl]  	res 6, [hl] -	call nz, $43a4 +	call nz, PewterGymScript_Unknown5c3a4  	call $3c3c  	ld hl, PewterGymTrainerHeaders  	ld de, $43ca @@ -45693,6 +46303,7 @@ PewterGymScript: ; 0x5c387  	ret  ; 0x5c3a4 +PewterGymScript_Unknown5c3a4: ; 0x5c3a4  INCBIN "baserom.gbc",$5c3a4,$91  PewterGymTexts: ; 0x5c435 @@ -46133,7 +46744,7 @@ CeruleanGymText5: ; 0x5c7c8  ; 0x5c7c8 + 5 bytes  CeruleanGymText6: ; 0x5c7cd -ReceivedTM11Text: ; 05c7cd +ReceivedTM11Text: ; 0x5c7cd  	TX_FAR _ReceivedTM11Text ; 0x98b7d  	db $0B, $50  ; 0x5c7cd + 6 bytes = 0x5c7d3 @@ -46865,7 +47476,7 @@ FightingDojo_h: ; 0x5cd51 to 0x5cd5d (12 bytes) (id=177)  FightingDojoScript: ; 0x5cd5d  	call $3c3c -	ld hl, FightingDojoTrainerHeader1 +	ld hl, FightingDojoTrainerHeaders  	ld de, $4d7b  	ld a, [$d642]  	call $3160 @@ -50384,10 +50995,11 @@ SSAnne7_h: ; 0x61889 to 0x61895 (12 bytes) (id=101)  	dw SSAnne7Object ; objects  SSAnne7Script: ; 0x61895 -	call $589b +	call SSAnne7Script_Unknown6189b  	jp $3c3c  ; 0x6189b +SSAnne7Script_Unknown6189b: ; 0x6189b  INCBIN "baserom.gbc",$6189b,$c  SSAnne7Texts: ; 0x618a7 @@ -50507,42 +51119,84 @@ SSAnne8_h: ; 0x6196a to 0x61976 (12 bytes) (id=102)  SSAnne8Script: ; 0x61976  	call $3c3c -	ld hl, $59a5 -	ld de, $5989 +	ld hl, SSAnne8TrainerHeaders +	ld de, SSAnne8Script_Unknown61989  	ld a, [$d608]  	call $3160  	ld [$d608], a  	ret  ; 0x61989 +SSAnne8Script_Unknown61989: ; 0x61989  INCBIN "baserom.gbc",$61989,$6  SSAnne8Texts: ; 0x6198f  	dw SSAnne8Text1, SSAnne8Text2, SSAnne8Text3, SSAnne8Text4, SSAnne8Text5, SSAnne8Text6, SSAnne8Text7, SSAnne8Text8, SSAnne8Text9, SSAnne8Text10, SSAnne8Text11 -INCBIN "baserom.gbc",$619a5,$31 +SSAnne8TrainerHeaders: +SSAnne8TrainerHeader1: ; 0x619a5 +	db $1 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d805 ; flag's byte +	dw UnnamedText_61a0b ; 0x5a0b TextBeforeBattle +	dw UnnamedText_61a15 ; 0x5a15 TextAfterBattle +	dw UnnamedText_61a10 ; 0x5a10 TextEndBattle +	dw UnnamedText_61a10 ; 0x5a10 TextEndBattle +; 0x619b1 + +TrainerHeader_619b1: ; 0x619b1 +	db $2 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d805 ; flag's byte +	dw UnnamedText_61a1a ; 0x5a1a TextBeforeBattle +	dw UnnamedText_5a24 ; 0x5a24 TextAfterBattle +	dw UnnamedText_61a1f ; 0x5a1f TextEndBattle +	dw UnnamedText_61a1f ; 0x5a1f TextEndBattle +; 0x619bd + +TrainerHeader_619bd: ; 0x619bd +	db $3 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d805 ; flag's byte +	dw UnnamedText_61a29 ; 0x5a29 TextBeforeBattle +	dw UnnamedText_61a33 ; 0x5a33 TextAfterBattle +	dw UnnamedText_61a2e ; 0x5a2e TextEndBattle +	dw UnnamedText_61a2e ; 0x5a2e TextEndBattle +; 0x619c9 + +TrainerHeader_619c9: ; 0x619c9 +	db $4 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d805 ; flag's byte +	dw UnnamedText_61a38 ; 0x5a38 TextBeforeBattle +	dw UnnamedText_61a42 ; 0x5a42 TextAfterBattle +	dw UnnamedText_61a3d ; 0x5a3d TextEndBattle +	dw UnnamedText_61a3d ; 0x5a3d TextEndBattle +; 0x619d5 + +db $ff  SSAnne8Text1: ; 0x619d6  	db $08 ; asm -	ld hl, $59a5 +	ld hl, SSAnne8TrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne8Text2: ; 0x619e0  	db $08 ; asm -	ld hl, $59b1 +	ld hl, TrainerHeader_619b1  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne8Text3: ; 0x619ea  	db $08 ; asm -	ld hl, $59bd +	ld hl, TrainerHeader_619bd  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne8Text4: ; 0x619f4  	db $08 ; asm -	ld hl, $59c9 +	ld hl, TrainerHeader_619c9  	call LoadTrainerHeader  	jp TextScriptEnd @@ -50683,42 +51337,85 @@ SSAnne9Script: ; 0x61b4b  	ld [$cf0c], a  	xor a  	ld [$cc3c], a -	ld hl, $5b84 -	ld de, $5b64 +	ld hl, SSAnne9TrainerHeaders +	ld de, SSAnne9Script_Unknown61b64  	ld a, [$d609]  	call $3160  	ld [$d609], a  	ret  ; 0x61b64 +SSAnne9Script_Unknown61b64: ; 0x61b64  INCBIN "baserom.gbc",$61b64,$6  SSAnne9Texts: ; 0x61b6a  	dw SSAnne9Text1, SSAnne9Text2, SSAnne9Text3, SSAnne9Text4, SSAnne9Text5, SSAnne9Text6, SSAnne9Text7, SSAnne9Text8, SSAnne9Text9, SSAnne9Text10, SSAnne9Text11, SSAnne9Text12, SSAnne9Text13 -INCBIN "baserom.gbc",$61b84,$31 +SSAnne9TrainerHeaders: +SSAnne9TrainerHeader1: ; 0x61b84 +	db $1 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d807 ; flag's byte +	dw UnnamedText_61c51 ; 0x5c51 TextBeforeBattle +	dw UnnamedText_61c5b ; 0x5c5b TextAfterBattle +	dw UnnamedText_61c56 ; 0x5c56 TextEndBattle +	dw UnnamedText_61c56 ; 0x5c56 TextEndBattle +; 0x61b90 + +TrainerHeader_61b90: ; 0x61b90 +	db $2 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d807 ; flag's byte +	dw UnnamedText_61c60 ; 0x5c60 TextBeforeBattle +	dw UnnamedText_61c6a ; 0x5c6a TextAfterBattle +	dw UnnamedText_61c65 ; 0x5c65 TextEndBattle +	dw UnnamedText_61c65 ; 0x5c65 TextEndBattle +; 0x61b9c + +TrainerHeader_61b9c: ; 0x61b9c +	db $3 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d807 ; flag's byte +	dw UnnamedText_61c6f ; 0x5c6f TextBeforeBattle +	dw UnnamedText_61c79 ; 0x5c79 TextAfterBattle +	dw UnnamedText_61c74 ; 0x5c74 TextEndBattle +	dw UnnamedText_61c74 ; 0x5c74 TextEndBattle +; 0x61ba8 + +TrainerHeader_61ba8: ; 0x61ba8 +	db $4 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d807 ; flag's byte +	dw UnnamedText_61c7e ; 0x5c7e TextBeforeBattle +	dw UnnamedText_61c88 ; 0x5c88 TextAfterBattle +	dw UnnamedText_61c83 ; 0x5c83 TextEndBattle +	dw UnnamedText_61c83 ; 0x5c83 TextEndBattle +; 0x61bb4 + + +db $ff  SSAnne9Text1: ; 0x61bb5  	db $08 ; asm -	ld hl, $5b84 +	ld hl, SSAnne9TrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne9Text2: ; 0x61bbf  	db $08 ; asm -	ld hl, $5b90 +	ld hl, TrainerHeader_61b90  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne9Text3: ; 0x61bc9  	db $08 ; asm -	ld hl, $5b9c +	ld hl, TrainerHeader_61b9c  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne9Text4: ; 0x61bd3  	db $08 ; asm -	ld hl, $5ba8 +	ld hl, TrainerHeader_61ba8  	call LoadTrainerHeader  	jp TextScriptEnd @@ -50921,54 +51618,116 @@ SSAnne10_h: ; 0x61d49 to 0x61d55 (12 bytes) (id=104)  SSAnne10Script: ; 0x61d55  	call $3c3c -	ld hl, $5d84 -	ld de, $5d68 +	ld hl, SSAnne10TrainerHeaders +	ld de, SSAnne10Script_Unknown61d68  	ld a, [$d629]  	call $3160  	ld [$d629], a  	ret  ; 0x61d68 +SSAnne10Script_Unknown61d68: ; 0x61d68  INCBIN "baserom.gbc",$61d68,$6  SSAnne10Texts: ; 0x61d6e  	dw SSAnne10Text1, SSAnne10Text2, SSAnne10Text3, SSAnne10Text4, SSAnne10Text5, SSAnne10Text6, SSAnne10Text7, SSAnne10Text8, SSAnne10Text9, SSAnne10Text10, SSAnne10Text11 -INCBIN "baserom.gbc",$61d84,$49 +SSAnne10TrainerHeaders: +SSAnne10TrainerHeader1: ; 0x61d84 +	db $1 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d809 ; flag's byte +	dw UnnamedText_61e16 ; 0x5e16 TextBeforeBattle +	dw UnnamedText_61e20 ; 0x5e20 TextAfterBattle +	dw UnnamedText_61e1b ; 0x5e1b TextEndBattle +	dw UnnamedText_61e1b ; 0x5e1b TextEndBattle +; 0x61d90 + +TrainerHeader_61d90: ; 0x61d90 +	db $2 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d809 ; flag's byte +	dw UnnamedText_61e25 ; 0x5e25 TextBeforeBattle +	dw UnnamedText_61e2f ; 0x5e2f TextAfterBattle +	dw UnnamedText_61e2a ; 0x5e2a TextEndBattle +	dw UnnamedText_61e2a ; 0x5e2a TextEndBattle +; 0x61d9c + +TrainerHeader_61d9c: ; 0x61d9c +	db $3 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d809 ; flag's byte +	dw UnnamedText_61e34 ; 0x5e34 TextBeforeBattle +	dw UnnamedText_61e3e ; 0x5e3e TextAfterBattle +	dw UnnamedText_61e39 ; 0x5e39 TextEndBattle +	dw UnnamedText_61e39 ; 0x5e39 TextEndBattle +; 0x61da8 + +TrainerHeader_61da8: ; 0x61da8 +	db $4 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d809 ; flag's byte +	dw UnnamedText_61e43 ; 0x5e43 TextBeforeBattle +	dw UnnamedText_61e4d ; 0x5e4d TextAfterBattle +	dw UnnamedText_61e48 ; 0x5e48 TextEndBattle +	dw UnnamedText_61e48 ; 0x5e48 TextEndBattle +; 0x61db4 + +TrainerHeader_61db4: ; 0x61db4 +	db $5 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d809 ; flag's byte +	dw UnnamedText_61e52 ; 0x5e52 TextBeforeBattle +	dw UnnamedText_61e5c ; 0x5e5c TextAfterBattle +	dw UnnamedText_61e57 ; 0x5e57 TextEndBattle +	dw UnnamedText_61e57 ; 0x5e57 TextEndBattle +; 0x61dc0 + +TrainerHeader_61dc0: ; 0x61dc0 +	db $6 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d809 ; flag's byte +	dw UnnamedText_61e61 ; 0x5e61 TextBeforeBattle +	dw UnnamedText_61e6b ; 0x5e6b TextAfterBattle +	dw UnnamedText_61e66 ; 0x5e66 TextEndBattle +	dw UnnamedText_61e66 ; 0x5e66 TextEndBattle +; 0x61dcc + +db $ff  SSAnne10Text1: ; 0x61dcd  	db $08 ; asm -	ld hl, $5d84 +	ld hl, SSAnne10TrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne10Text2: ; 0x61dd7  	db $08 ; asm -	ld hl, $5d90 +	ld hl, TrainerHeader_61d90  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne10Text3: ; 0x61de1  	db $08 ; asm -	ld hl, $5d9c +	ld hl, TrainerHeader_61d9c  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne10Text4: ; 0x61deb  	db $08 ; asm -	ld hl, $5da8 +	ld hl, TrainerHeader_61da8  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne10Text5: ; 0x61df5  	db $08 ; asm -	ld hl, $5db4 +	ld hl, TrainerHeader_61db4  	call LoadTrainerHeader  	jp TextScriptEnd  SSAnne10Text6: ; 0x61dff  	db $08 ; asm -	ld hl, $5dc0 +	ld hl, TrainerHeader_61dc0  	call LoadTrainerHeader  	jp TextScriptEnd @@ -51128,8 +51887,7 @@ UndergroundPathNSScript: ; 0x61f26  ; 0x61f29  UndergroundPathNSTexts: - -INCBIN "baserom.gbc",$61f29,$1 +	db $50  UndergroundPathNSObject: ; 0x61f2a (size=20)  	db $1 ; border tile @@ -51218,9 +51976,9 @@ SilphCo11_h: ; 0x620ee to 0x620fa (12 bytes) (id=235)  	dw SilphCo11Object ; objects  SilphCo11Script: ; 0x620fa -	call $6110 +	call SilphCo11Script_Unknown62110  	call $3c3c -	ld hl, $62c3 +	ld hl, SilphCo11TrainerHeaders  	ld de, $61cf  	ld a, [$d659]  	call $3160 @@ -51228,12 +51986,34 @@ SilphCo11Script: ; 0x620fa  	ret  ; 0x62110 +SilphCo11Script_Unknown62110: ; 0x62110  INCBIN "baserom.gbc",$62110,$1a7  SilphCo11Texts: ; 0x622b7  	dw SilphCo11Text1, SilphCo11Text2, SilphCo11Text3, SilphCo11Text4, SilphCo11Text5, SilphCo11Text6 -INCBIN "baserom.gbc",$622c3,$19 +SilphCo11TrainerHeaders: +SilphCo11TrainerHeader1: ; 0x622c3 +	db $4 ; flag's bit +	db ($4 << 4) ; trainer's view range +	dw $d837 ; flag's byte +	dw UnnamedText_62344 ; 0x6344 TextBeforeBattle +	dw UnnamedText_6234e ; 0x634e TextAfterBattle +	dw UnnamedText_62349 ; 0x6349 TextEndBattle +	dw UnnamedText_62349 ; 0x6349 TextEndBattle +; 0x622cf + +TrainerHeader_622cf: ; 0x622cf +	db $5 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d837 ; flag's byte +	dw UnnamedText_6235d ; 0x635d TextBeforeBattle +	dw UnnamedText_62367 ; 0x6367 TextAfterBattle +	dw UnnamedText_62362 ; 0x6362 TextEndBattle +	dw UnnamedText_62362 ; 0x6362 TextEndBattle +; 0x622db + +db $ff  SilphCo11Text1: ; 0x622dc  	db $08 ; asm @@ -51300,7 +52080,7 @@ SilphCo11Text6: ; 0x62335  SilphCo11Text4: ; 0x6233a  	db $08 ; asm -	ld hl, $62c3 +	ld hl, SilphCo11TrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd @@ -51321,7 +52101,7 @@ UnnamedText_6234e: ; 0x6234e  SilphCo11Text5: ; 0x62353  	db $08 ; asm -	ld hl, $62cf +	ld hl, TrainerHeader_622cf  	call LoadTrainerHeader  	jp TextScriptEnd @@ -51340,7 +52120,14 @@ UnnamedText_62367: ; 0x62367  	db $50  ; 0x62367 + 5 bytes -INCBIN "baserom.gbc",$6236c,$6237b - $6236c +UnknownText_6236c: ; 0x6236c +	db $8 +	ld hl, UnnamedText_6237b +	call PrintText +	ld a, $aa +	call $349b +	jp TextScriptEnd +; 0x6237b  UnnamedText_6237b: ; 0x6237b  	TX_FAR _UnnamedText_6237b @@ -51453,7 +52240,17 @@ UnnamedText_624df: ; 0x624df  	db $50  ; 0x624df + 5 bytes -INCBIN "baserom.gbc",$624e4,$624f8 - $624e4 +UnnamedText_624e4: ; 0x624e4 +	db $8 +	ld a, [$d838] +	bit 7, a +	ld hl, UnnamedText_624fd +	jr nz, .asm_624f2 ; 0x624ed $3 +	ld hl, UnnamedText_624f8 +.asm_624f2 +	call PrintText +	jp TextScriptEnd +; 0x624f8  UnnamedText_624f8: ; 0x624f8  	TX_FAR _UnnamedText_624f8 @@ -52882,7 +53679,7 @@ ViridianGymScript: ; 0x748a3  	ld de, Gym8LeaderName  	call $317f  	call $3c3c -	ld hl, $4a08 +	ld hl, ViridianGymTrainerHeaders  	ld de, $48e1  	ld a, [$d5fb]  	call $3160 @@ -52900,7 +53697,88 @@ INCBIN "baserom.gbc",$748D6,$116  ViridianGymTexts: ; 0x749ec  	dw ViridianGymText1, ViridianGymText2, ViridianGymText3, ViridianGymText4, ViridianGymText5, ViridianGymText6, ViridianGymText7, ViridianGymText8, ViridianGymText9, ViridianGymText10, ViridianGymText11, ViridianGymText12, ViridianGymText13, ViridianGymText14 -INCBIN "baserom.gbc",$74a08,$61 +ViridianGymTrainerHeaders: +ViridianGymTrainerHeader1: ; 0x74a08 +	db $2 ; flag's bit +	db ($4 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74afd ; 0x4afd TextBeforeBattle +	dw UnnamedText_74b07 ; 0x4b07 TextAfterBattle +	dw UnnamedText_74b02 ; 0x4b02 TextEndBattle +	dw UnnamedText_74b02 ; 0x4b02 TextEndBattle +; 0x74a14 + +TrainerHeader_74a14: ; 0x74a14 +	db $3 ; flag's bit +	db ($4 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74b16 ; 0x4b16 TextBeforeBattle +	dw UnnamedText_74b20 ; 0x4b20 TextAfterBattle +	dw UnnamedText_74b1b ; 0x4b1b TextEndBattle +	dw UnnamedText_74b1b ; 0x4b1b TextEndBattle +; 0x74a20 + +TrainerHeader_74a20: ; 0x74a20 +	db $4 ; flag's bit +	db ($4 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74b2f ; 0x4b2f TextBeforeBattle +	dw UnnamedText_74b39 ; 0x4b39 TextAfterBattle +	dw UnnamedText_74b34 ; 0x4b34 TextEndBattle +	dw UnnamedText_74b34 ; 0x4b34 TextEndBattle +; 0x74a2c + +TrainerHeader_74a2c: ; 0x74a2c +	db $5 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74b48 ; 0x4b48 TextBeforeBattle +	dw UnnamedText_74b52 ; 0x4b52 TextAfterBattle +	dw UnnamedText_74b4d ; 0x4b4d TextEndBattle +	dw UnnamedText_74b4d ; 0x4b4d TextEndBattle +; 0x74a38 + +TrainerHeader_74a38: ; 0x74a38 +	db $6 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74b61 ; 0x4b61 TextBeforeBattle +	dw UnnamedText_74b6b ; 0x4b6b TextAfterBattle +	dw UnnamedText_74b66 ; 0x4b66 TextEndBattle +	dw UnnamedText_74b66 ; 0x4b66 TextEndBattle +; 0x74a44 + +TrainerHeader_74a44: ; 0x74a44 +	db $7 ; flag's bit +	db ($4 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74b7a ; 0x4b7a TextBeforeBattle +	dw UnnamedText_74b84 ; 0x4b84 TextAfterBattle +	dw UnnamedText_74b7f ; 0x4b7f TextEndBattle +	dw UnnamedText_74b7f ; 0x4b7f TextEndBattle +; 0x74a50 + +TrainerHeader_74a50: ; 0x74a50 +	db $8 ; flag's bit +	db ($3 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74b93 ; 0x4b93 TextBeforeBattle +	dw UnnamedText_74b9d ; 0x4b9d TextAfterBattle +	dw UnnamedText_74b98 ; 0x4b98 TextEndBattle +	dw UnnamedText_74b98 ; 0x4b98 TextEndBattle +; 0x74a5c + +TrainerHeader_74a5c: ; 0x74a5c +	db $9 ; flag's bit +	db ($4 << 4) ; trainer's view range +	dw $d751 ; flag's byte +	dw UnnamedText_74bac ; 0x4bac TextBeforeBattle +	dw UnnamedText_74bb6 ; 0x4bb6 TextAfterBattle +	dw UnnamedText_74bb1 ; 0x4bb1 TextEndBattle +	dw UnnamedText_74bb1 ; 0x4bb1 TextEndBattle +; 0x74a68 + +db $ff  ViridianGymText1: ; 0x74a69  	db $08 ; asm @@ -52981,7 +53859,7 @@ ViridianGymText14: ; 0x74aee  ViridianGymText2: ; 0x74af3  	db $08 ; asm -	ld hl, $4a08 +	ld hl, ViridianGymTrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd @@ -53002,7 +53880,7 @@ UnnamedText_74b07: ; 0x74b07  ViridianGymText3: ; 0x74b0c  	db $08 ; asm -	ld hl, $4a14 +	ld hl, TrainerHeader_74a14  	call LoadTrainerHeader  	jp TextScriptEnd @@ -53023,7 +53901,7 @@ UnnamedText_74b20: ; 0x74b20  ViridianGymText4: ; 0x74b25  	db $08 ; asm -	ld hl, $4a20 +	ld hl, TrainerHeader_74a20  	call LoadTrainerHeader  	jp TextScriptEnd @@ -53044,7 +53922,7 @@ UnnamedText_74b39: ; 0x74b39  ViridianGymText5: ; 0x74b3e  	db $08 ; asm -	ld hl, $4a2c +	ld hl, TrainerHeader_74a2c  	call LoadTrainerHeader  	jp TextScriptEnd @@ -53065,7 +53943,7 @@ UnnamedText_74b52: ; 0x74b52  ViridianGymText6: ; 0x74b57  	db $08 ; asm -	ld hl, $4a38 +	ld hl, TrainerHeader_74a38  	call LoadTrainerHeader  	jp TextScriptEnd @@ -53086,7 +53964,7 @@ UnnamedText_74b6b: ; 0x74b6b  ViridianGymText7: ; 0x74b70  	db $08 ; asm -	ld hl, $4a44 +	ld hl, TrainerHeader_74a44  	call LoadTrainerHeader  	jp TextScriptEnd @@ -53107,7 +53985,7 @@ UnnamedText_74b84: ; 0x74b84  ViridianGymText8: ; 0x74b89  	db $08 ; asm -	ld hl, $4a50 +	ld hl, TrainerHeader_74a50  	call LoadTrainerHeader  	jp TextScriptEnd @@ -53128,7 +54006,7 @@ UnnamedText_74b9d: ; 0x74b9d  ViridianGymText9: ; 0x74ba2  	db $08 ; asm -	ld hl, $4a5c +	ld hl, TrainerHeader_74a5c  	call LoadTrainerHeader  	jp TextScriptEnd @@ -54094,9 +54972,9 @@ FuchsiaGym_h: ; 0x75431 to 0x7543d (12 bytes) (id=157)  	dw FuchsiaGymObject ; objects  FuchsiaGymScript: ; 0x7543d -	call $5453 +	call FuchsiaGymScript_Unknown75453  	call $3c3c -	ld hl, $54eb +	ld hl, FuchsiaGymTrainerHeaders  	ld de, $5482  	ld a, [$d65b]  	call $3160 @@ -54104,6 +54982,7 @@ FuchsiaGymScript: ; 0x7543d  	ret  ; 0x75453 +FuchsiaGymScript_Unknown75453: ; 0x75453  INCBIN "baserom.gbc",$75453,$12  Gym5CityName: ; 0x75465 @@ -54116,7 +54995,68 @@ INCBIN "baserom.gbc",$75477,$5E  FuchsiaGymTexts: ; 0x754d5  	dw FuchsiaGymText1, FuchsiaGymText2, FuchsiaGymText3, FuchsiaGymText4, FuchsiaGymText5, FuchsiaGymText6, FuchsiaGymText7, FuchsiaGymText8, FuchsiaGymText9, FuchsiaGymText10, FuchsiaGymText11 -INCBIN "baserom.gbc",$754eb,$49 +FuchsiaGymTrainerHeaders: +FuchsiaGymTrainerHeader1: ; 0x754eb +	db $2 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d792 ; flag's byte +	dw UnnamedText_755ae ; 0x55ae TextBeforeBattle +	dw UnnamedText_755b8 ; 0x55b8 TextAfterBattle +	dw UnnamedText_755b3 ; 0x55b3 TextEndBattle +	dw UnnamedText_755b3 ; 0x55b3 TextEndBattle +; 0x754f7 + +TrainerHeader_754f7: ; 0x754f7 +	db $3 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d792 ; flag's byte +	dw UnnamedText_755c7 ; 0x55c7 TextBeforeBattle +	dw UnnamedText_755d1 ; 0x55d1 TextAfterBattle +	dw UnnamedText_755cc ; 0x55cc TextEndBattle +	dw UnnamedText_755cc ; 0x55cc TextEndBattle +; 0x75503 + +TrainerHeader_75503: ; 0x75503 +	db $4 ; flag's bit +	db ($4 << 4) ; trainer's view range +	dw $d792 ; flag's byte +	dw UnnamedText_755e0 ; 0x55e0 TextBeforeBattle +	dw UnnamedText_755ea ; 0x55ea TextAfterBattle +	dw UnnamedText_755e5 ; 0x55e5 TextEndBattle +	dw UnnamedText_755e5 ; 0x55e5 TextEndBattle +; 0x7550f + +TrainerHeader_7550f: ; 0x7550f +	db $5 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d792 ; flag's byte +	dw UnnamedText_755f9 ; 0x55f9 TextBeforeBattle +	dw UnnamedText_75603 ; 0x5603 TextAfterBattle +	dw UnnamedText_755fe ; 0x55fe TextEndBattle +	dw UnnamedText_755fe ; 0x55fe TextEndBattle +; 0x7551b + +TrainerHeader_7551b: ; 0x7551b +	db $6 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d792 ; flag's byte +	dw UnnamedText_75612 ; 0x5612 TextBeforeBattle +	dw UnnamedText_7561c ; 0x561c TextAfterBattle +	dw UnnamedText_75617 ; 0x5617 TextEndBattle +	dw UnnamedText_75617 ; 0x5617 TextEndBattle +; 0x75527 + +TrainerHeader_75527: ; 0x75527 +	db $7 ; flag's bit +	db ($2 << 4) ; trainer's view range +	dw $d792 ; flag's byte +	dw UnnamedText_7562b ; 0x562b TextBeforeBattle +	dw UnnamedText_75635 ; 0x5635 TextAfterBattle +	dw UnnamedText_75630 ; 0x5630 TextEndBattle +	dw UnnamedText_75630 ; 0x5630 TextEndBattle +; 0x75533 + +db $ff  FuchsiaGymText1: ; 0x75534  	db $08 ; asm @@ -54190,7 +55130,7 @@ FuchsiaGymText11: ; 0x7559f  FuchsiaGymText2: ; 0x755a4  	db $08 ; asm -	ld hl, $54eb +	ld hl, FuchsiaGymTrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd @@ -54211,7 +55151,7 @@ UnnamedText_755b8: ; 0x755b8  FuchsiaGymText3: ; 0x755bd  	db $08 ; asm -	ld hl, $54f7 +	ld hl, TrainerHeader_754f7  	call LoadTrainerHeader  	jp TextScriptEnd @@ -54232,7 +55172,7 @@ UnnamedText_755d1: ; 0x755d1  FuchsiaGymText4: ; 0x755d6  	db $08 ; asm -	ld hl, $5503 +	ld hl, TrainerHeader_75503  	call LoadTrainerHeader  	jp TextScriptEnd @@ -54253,7 +55193,7 @@ UnnamedText_755ea: ; 0x755ea  FuchsiaGymText5: ; 0x755ef  	db $08 ; asm -	ld hl, $550f +	ld hl, TrainerHeader_7550f  	call LoadTrainerHeader  	jp TextScriptEnd @@ -54274,7 +55214,7 @@ UnnamedText_75603: ; 0x75603  FuchsiaGymText6: ; 0x75608  	db $08 ; asm -	ld hl, $551b +	ld hl, TrainerHeader_7551b  	call LoadTrainerHeader  	jp TextScriptEnd @@ -54295,7 +55235,7 @@ UnnamedText_7561c: ; 0x7561c  FuchsiaGymText7: ; 0x75621  	db $08 ; asm -	ld hl, $5527 +	ld hl, TrainerHeader_75527  	call LoadTrainerHeader  	jp TextScriptEnd @@ -54419,13 +55359,14 @@ CinnabarGym_h: ; 0x7573e to 0x7574a (12 bytes) (id=166)  	dw CinnabarGymObject ; objects  CinnabarGymScript: ; 0x7574a -	call $5759 +	call CinnabarGymScript_Unknown75759  	call $3c3c  	ld hl, CinnabarGymScripts  	ld a, [$d65e]  	jp $3d97  ; 0x75759 +CinnabarGymScript_Unknown75759: ; 0x75759  INCBIN "baserom.gbc",$75759,$7577B - $75759  Gym7CityName: ; 0x7577B @@ -55555,9 +56496,9 @@ Lorelei_h: ; 0x7616f to 0x7617b (12 bytes) (id=245)  	dw LoreleiObject ; objects  LoreleiScript: ; 0x7617b -	call $6191 +	call LoreleiScript_Unknown76191  	call $3c3c -	ld hl, $6255 +	ld hl, LoreleiTrainerHeaders  	ld de, $61bb  	ld a, [$d64d]  	call $3160 @@ -55565,16 +56506,28 @@ LoreleiScript: ; 0x7617b  	ret  ; 0x76191 +LoreleiScript_Unknown76191: ; 0x76191  INCBIN "baserom.gbc",$76191,$c0  LoreleiTexts: ; 0x76251  	dw LoreleiText1, LoreleiText2 -INCBIN "baserom.gbc",$76255,$d +LoreleiTrainerHeaders: +LoreleiTrainerHeader1: ; 0x76255 +	db $1 ; flag's bit +	db ($0 << 4) ; trainer's view range +	dw $d863 ; flag's byte +	dw UnnamedText_7626c ; 0x626c TextBeforeBattle +	dw UnnamedText_76276 ; 0x6276 TextAfterBattle +	dw UnnamedText_76271 ; 0x6271 TextEndBattle +	dw UnnamedText_76271 ; 0x6271 TextEndBattle +; 0x76261 + +db $ff  LoreleiText1: ; 0x76262  	db $08 ; asm -	ld hl, $6255 +	ld hl, LoreleiTrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd @@ -55630,9 +56583,9 @@ Bruno_h: ; 0x762ca to 0x762d6 (12 bytes) (id=246)  	dw BrunoObject ; objects  BrunoScript: ; 0x762d6 -	call $62ec +	call BrunoScript_Unknown762ec  	call $3c3c -	ld hl, $63ac +	ld hl, BrunoTrainerHeaders  	ld de, $6312  	ld a, [$d64e]  	call $3160 @@ -55640,16 +56593,28 @@ BrunoScript: ; 0x762d6  	ret  ; 0x762ec +BrunoScript_Unknown762ec: ; 0x762ec  INCBIN "baserom.gbc",$762ec,$bc  BrunoTexts: ; 0x763a8  	dw BrunoText1, BrunoText2 -INCBIN "baserom.gbc",$763ac,$d +BrunoTrainerHeaders: +BrunoTrainerHeader1: ; 0x763ac +	db $1 ; flag's bit +	db ($0 << 4) ; trainer's view range +	dw $d864 ; flag's byte +	dw UnnamedText_763c3 ; 0x63c3 TextBeforeBattle +	dw UnnamedText_763cd ; 0x63cd TextAfterBattle +	dw UnnamedText_763c8 ; 0x63c8 TextEndBattle +	dw UnnamedText_763c8 ; 0x63c8 TextEndBattle +; 0x763b8 + +db $ff  BrunoText1: ; 0x763b9  	db $08 ; asm -	ld hl, $63ac +	ld hl, BrunoTrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd @@ -55705,9 +56670,9 @@ Agatha_h: ; 0x76421 to 0x7642d (12 bytes) (id=247)  	dw AgathaObject ; objects  AgathaScript: ; 0x7642d -	call $6443 +	call AgathaScript_Unknown76443  	call $3c3c -	ld hl, $6509 +	ld hl, AgathaTrainerHeaders  	ld de, $6469  	ld a, [$d64f]  	call $3160 @@ -55715,16 +56680,28 @@ AgathaScript: ; 0x7642d  	ret  ; 0x76443 +AgathaScript_Unknown76443: ; 0x76443  INCBIN "baserom.gbc",$76443,$c2  AgathaTexts: ; 0x76505  	dw AgathaText1, AgathaText2 -INCBIN "baserom.gbc",$76509,$d +AgathaTrainerHeaders: +AgathaTrainerHeader1: ; 0x76509 +	db $1 ; flag's bit +	db ($0 << 4) ; trainer's view range +	dw $d865 ; flag's byte +	dw UnnamedText_76520 ; 0x6520 TextBeforeBattle +	dw UnnamedText_7652a ; 0x652a TextAfterBattle +	dw UnnamedText_76525 ; 0x6525 TextEndBattle +	dw UnnamedText_76525 ; 0x6525 TextEndBattle +; 0x76515 + +db $ff  AgathaText1: ; 0x76516  	db $08 ; asm -	ld hl, $6509 +	ld hl, AgathaTrainerHeader1  	call LoadTrainerHeader  	jp TextScriptEnd @@ -61600,11 +62577,11 @@ _RockTunnel1Text8: ; 0x8c5b7  	db "CERULEAN CITY -", $55  	db "LAVENDER TOWN", $57 -UnknownText_8c5e2: ; 0x8c5e2 +_UnnamedText_1e3aa: ; 0x8c5e2  	db $0, "Bzzzt!", $57  ; 0x8c5e2 + 8 bytes -UnknownText_8c5ea: ; 0x8c5ea +_UnnamedText_1e3af: ; 0x8c5ea  	db $0, "Gyaoo!@@"  ; 0x8c5ea + 9 bytes @@ -70691,18 +71668,18 @@ _UnnamedText_196d9: ; 0xa4f27  	db "you believe me?", $57  ; 0xa4f27 + 91 bytes -ReceivedTM28Text: ; 0xa4f82 +_ReceivedTM28Text: ; 0xa4f82  	db $0, $52, " recovered", $4f  	db "TM28!@@"  ; 0xa4f96 -UnnamedText_a4f96: ; 0xa4f96 +_ReceivedTM28Text2: ; 0xa4f96  	db $0, $51  	db "I better get", $4f  	db "moving! Bye!@@"  ; 0xa4fb3 -_UnnamedText_196e9: ; 0xa4fb3 +_TM28NoRoomText: ; 0xa4fb3  	db $0, "Make room for", $4f  	db "this!", $51  	db "I can't run until", $4f @@ -70910,26 +71887,26 @@ _UnnamedText_198ac: ; 0xa56e2  	db "about a year.", $57  ; 0xa56e2 + 59 bytes -_UnnamedText_19904: ; 0xa571d +_SSAnneWelcomeText4: ; 0xa571d  	db $0, "Welcome to S.S.", $4f  	db "ANNE!", $57  ; 0xa571d + 23 bytes -_UnnamedText_19909: ; 0xa5734 +_SSAnneWelcomeText9: ; 0xa5734  	db $0, "Welcome to S.S.", $4f  	db "ANNE!", $51  	db "Excuse me, do you", $4f  	db "have a ticket?", $58  ; 0xa5734 + 56 bytes -_UnnamedText_1990e: ; 0xa576c +_SSAnneFlashedTicketText: ; 0xa576c  	db $0, $52, " flashed", $4f  	db "the S.S.TICKET!", $51  	db "Great! Welcome to", $4f  	db "S.S.ANNE!", $57  ; 0xa576c + 55 bytes -_UnnamedText_19913: ; 0xa57a3 +_SSAnneNoTicketText: ; 0xa57a3  	db $0, $52, " doesn't", $4f  	db "have the needed", $55  	db "S.S.TICKET.", $51 @@ -70938,7 +71915,7 @@ _UnnamedText_19913: ; 0xa57a3  	db "to get aboard.", $57  ; 0xa57a3 + 78 bytes -_UnnamedText_19918: ; 0xa57f1 +_SSAnneNotHereText: ; 0xa57f1  	db $0, "The ship set sail.", $57  ; 0xa57f1 + 20 bytes @@ -71020,7 +71997,7 @@ _CeladonCityText4: ; 0xa5aa6  	db "have cashed in my", $55  	db "coins for prizes!", $57 -_UnnamedText_199d2: ; 0xa5afd +_TM41PreText: ; 0xa5afd  	db $0, "Hello, there!", $51  	db "I've seen you,", $4f  	db "but I never had a", $55 @@ -71029,14 +72006,14 @@ _UnnamedText_199d2: ; 0xa5afd  	db "dropping by!", $58  ; 0xa5afd + 93 bytes -_UnnamedText_199d7: ; 0xa5b5a +_ReceivedTM41Text: ; 0xa5b5a  	db $0, $52, " received", $4f  	db "@"  	TX_RAM $cf4b  	db $0, "!@@"  ; 0xa5b6e -_UnnamedText_199dd: ; 0xa5b6e +_TM41ExplanationText: ; 0xa5b6e  	db $0, "TM41 teaches", $4f  	db "SOFTBOILED!", $51  	db "Only one #MON", $4f @@ -71045,7 +72022,7 @@ _UnnamedText_199dd: ; 0xa5b6e  	db "CHANSEY!", $57  ; 0xa5b6e + 74 bytes -_UnnamedText_199e2: ; 0xa5bb8 +_TM41NoRoomText: ; 0xa5bb8  	db $0, "Oh, your pack is", $4f  	db "full of items!", $57  ; 0xa5bb8 + 33 bytes @@ -71173,19 +72150,19 @@ _FuchsiaCityText18: ; 0xa6011  	db "The Poisonous", $4f  	db "Ninja Master", $57 -_UnnamedText_19a9f: ; 0xa6050 +_FuchsiaCityChanseyText: ; 0xa6050  	db $0, "Name: CHANSEY", $51  	db "Catching one is", $4f  	db "all up to chance.", $58  ; 0xa6050 + 49 bytes -_UnnamedText_19ab3: ; 0xa6081 +_FuchsiaCityVoltorbText: ; 0xa6081  	db $0, "Name: VOLTORB", $51  	db "The very image of", $4f  	db "a # BALL.", $58  ; 0xa6081 + 43 bytes -_UnnamedText_19ac7: ; 0xa60ac +_FuchsiaCityKangaskhanText: ; 0xa60ac  	db $0, "Name: KANGASKHAN", $51  	db "A maternal #MON", $4f  	db "that raises its", $55 @@ -71193,26 +72170,26 @@ _UnnamedText_19ac7: ; 0xa60ac  	db "on its belly.", $58  ; 0xa60ac + 81 bytes -_UnnamedText_19adb: ; 0xa60fd +_FuchsiaCitySlowpokeText: ; 0xa60fd  	db $0, "Name: SLOWPOKE", $51  	db "Friendly and very", $4f  	db "slow moving.", $58  ; 0xa60fd + 47 bytes -_UnnamedText_19aef: ; 0xa612c +_FuchsiaCityLaprasText: ; 0xa612c  	db $0, "Name: LAPRAS", $51  	db "A.K.A. the king", $4f  	db "of the seas.", $58  ; 0xa612c + 43 bytes -_UnnamedText_19b20: ; 0xa6157 +_FuchsiaCityOmanyteText: ; 0xa6157  	db $0, "Name: OMANYTE", $51  	db "A #MON that", $4f  	db "was resurrected", $55  	db "from a fossil.", $58  ; 0xa6157 + 58 bytes -_UnnamedText_19b25: ; 0xa6191 +_FuchsiaCityKabutoText: ; 0xa6191  	db $0, "Name: KABUTO", $51  	db "A #MON that", $4f  	db "was resurrected", $55 diff --git a/pokeblue.asm b/pokeblue.asm index 8e241791..78f8cd48 100644 --- a/pokeblue.asm +++ b/pokeblue.asm @@ -1,3 +1,3 @@  _RED EQU 0  _BLUE EQU 1 -INCLUDE "common.tx" +INCLUDE "main.tx" diff --git a/pokered.asm b/pokered.asm index 0fb863a4..a6e1f6c8 100644 --- a/pokered.asm +++ b/pokered.asm @@ -1,3 +1,3 @@  _RED EQU 1  _BLUE EQU 0 -INCLUDE "common.tx" +INCLUDE "main.tx" | 
