shithub: pokecrystal

Download patch

ref: b423e3b90bb85ef7e5cf501d832db707c9b1fde3
parent: 1ecbfc49f402c777c365f3c48bea5f21ad4e4c48
author: Remy Oukaour <remy.oukaour@gmail.com>
date: Fri Dec 22 17:50:28 EST 2017

Split more code from home.asm into home/ files

--- a/home.asm
+++ b/home.asm
@@ -46,9 +46,9 @@
 InexplicablyEmptyFunction:: ; 2d43
 ; Inexplicably empty.
 ; Seen in PredefPointers.
-	rept 16
+rept 16
 	nop
-	endr
+endr
 	ret
 ; 2d54
 
@@ -771,296 +771,8 @@
 
 INCLUDE "home/pokedex_flags.asm"
 
-NamesPointers:: ; 33ab
-	dba PokemonNames
-	dba MoveNames
-	dbw 0, 0
-	dba ItemNames
-	dbw 0, PartyMonOT
-	dbw 0, OTPartyMonOT
-	dba TrainerClassNames
-	dbw $4, $4b52 ; within PackMenuGFX
-; 33c3
+INCLUDE "home/names.asm"
 
-GetName:: ; 33c3
-; Return name CurSpecies from name list wNamedObjectTypeBuffer in StringBuffer1.
-
-	ld a, [hROMBank]
-	push af
-	push hl
-	push bc
-	push de
-
-	ld a, [wNamedObjectTypeBuffer]
-	cp PKMN_NAME
-	jr nz, .NotPokeName
-
-	ld a, [CurSpecies]
-	ld [wd265], a
-	call GetPokemonName
-	ld hl, PKMN_NAME_LENGTH
-	add hl, de
-	ld e, l
-	ld d, h
-	jr .done
-
-.NotPokeName:
-	ld a, [wNamedObjectTypeBuffer]
-	dec a
-	ld e, a
-	ld d, 0
-	ld hl, NamesPointers
-	add hl, de
-	add hl, de
-	add hl, de
-	ld a, [hli]
-	rst Bankswitch
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-
-	ld a, [CurSpecies]
-	dec a
-	call GetNthString
-
-	ld de, StringBuffer1
-	ld bc, ITEM_NAME_LENGTH
-	call CopyBytes
-
-.done
-	ld a, e
-	ld [wUnusedD102], a
-	ld a, d
-	ld [wUnusedD102 + 1], a
-
-	pop de
-	pop bc
-	pop hl
-	pop af
-	rst Bankswitch
-	ret
-; 3411
-
-GetNthString:: ; 3411
-; Return the address of the
-; ath string starting from hl.
-
-	and a
-	ret z
-
-	push bc
-	ld b, a
-	ld c, "@"
-.readChar
-	ld a, [hli]
-	cp c
-	jr nz, .readChar
-	dec b
-	jr nz, .readChar
-	pop bc
-	ret
-; 3420
-
-GetBasePokemonName:: ; 3420
-; Discards gender (Nidoran).
-
-	push hl
-	call GetPokemonName
-
-	ld hl, StringBuffer1
-.loop
-	ld a, [hl]
-	cp "@"
-	jr z, .quit
-	cp "♂"
-	jr z, .end
-	cp "♀"
-	jr z, .end
-	inc hl
-	jr .loop
-.end
-	ld [hl], "@"
-.quit
-	pop hl
-	ret
-
-; 343b
-
-GetPokemonName:: ; 343b
-; Get Pokemon name wd265.
-
-	ld a, [hROMBank]
-	push af
-	push hl
-	ld a, BANK(PokemonNames)
-	rst Bankswitch
-
-; Each name is ten characters
-	ld a, [wd265]
-	dec a
-	ld d, 0
-	ld e, a
-	ld h, 0
-	ld l, a
-	add hl, hl ; hl = hl * 4
-	add hl, hl ; hl = hl * 4
-	add hl, de ; hl = (hl*4) + de
-	add hl, hl ; hl = (5*hl) + (5*hl)
-	ld de, PokemonNames
-	add hl, de
-
-; Terminator
-	ld de, StringBuffer1
-	push de
-	ld bc, PKMN_NAME_LENGTH - 1
-	call CopyBytes
-	ld hl, StringBuffer1 + PKMN_NAME_LENGTH - 1
-	ld [hl], "@"
-	pop de
-
-	pop hl
-	pop af
-	rst Bankswitch
-	ret
-; 3468
-
-GetItemName:: ; 3468
-; Get item name wd265.
-
-	push hl
-	push bc
-	ld a, [wd265]
-
-	cp TM01
-	jr nc, .TM
-
-	ld [CurSpecies], a
-	ld a, ITEM_NAME
-	ld [wNamedObjectTypeBuffer], a
-	call GetName
-	jr .Copied
-.TM:
-	call GetTMHMName
-.Copied:
-	ld de, StringBuffer1
-	pop bc
-	pop hl
-	ret
-; 3487
-
-GetTMHMName:: ; 3487
-; Get TM/HM name by item id wd265.
-
-	push hl
-	push de
-	push bc
-	ld a, [wd265]
-	push af
-
-; TM/HM prefix
-	cp HM01
-	push af
-	jr c, .TM
-
-	ld hl, .HMText
-	ld bc, .HMTextEnd - .HMText
-	jr .asm_34a1
-
-.TM:
-	ld hl, .TMText
-	ld bc, .TMTextEnd - .TMText
-
-.asm_34a1
-	ld de, StringBuffer1
-	call CopyBytes
-
-; TM/HM number
-	push de
-	ld a, [wd265]
-	ld c, a
-	callab GetTMHMNumber
-	pop de
-
-; HM numbers start from 51, not 1
-	pop af
-	ld a, c
-	jr c, .asm_34b9
-	sub NUM_TMS
-.asm_34b9
-
-; Divide and mod by 10 to get the top and bottom digits respectively
-	ld b, "0"
-.mod10
-	sub 10
-	jr c, .asm_34c2
-	inc b
-	jr .mod10
-.asm_34c2
-	add 10
-
-	push af
-	ld a, b
-	ld [de], a
-	inc de
-	pop af
-
-	ld b, "0"
-	add b
-	ld [de], a
-
-; End the string
-	inc de
-	ld a, "@"
-	ld [de], a
-
-	pop af
-	ld [wd265], a
-	pop bc
-	pop de
-	pop hl
-	ret
-
-.TMText:
-	db "TM"
-.TMTextEnd:
-	db "@"
-
-.HMText:
-	db "HM"
-.HMTextEnd:
-	db "@"
-; 34df
-
-IsHM:: ; 34df
-	cp HM01
-	jr c, .NotHM
-	scf
-	ret
-.NotHM:
-	and a
-	ret
-; 34e7
-
-
-INCLUDE "home/hm_moves.asm"
-
-
-GetMoveName:: ; 34f8
-	push hl
-
-	ld a, MOVE_NAME
-	ld [wNamedObjectTypeBuffer], a
-
-	ld a, [wNamedObjectIndexBuffer] ; move id
-	ld [CurSpecies], a
-
-	call GetName
-	ld de, StringBuffer1
-
-	pop hl
-	ret
-; 350c
-
 ScrollingMenu:: ; 350c
 	call CopyMenuData2
 	ld a, [hROMBank]
@@ -1271,270 +983,7 @@
 	ret
 ; 3600
 
-CheckTrainerBattle2:: ; 3600
-
-	ld a, [hROMBank]
-	push af
-
-	call SwitchToMapScriptHeaderBank
-	call CheckTrainerBattle
-
-	pop bc
-	ld a, b
-	rst Bankswitch
-	ret
-; 360d
-
-CheckTrainerBattle:: ; 360d
-; Check if any trainer on the map sees the player and wants to battle.
-
-; Skip the player object.
-	ld a, 1
-	ld de, MapObjects + OBJECT_LENGTH
-
-.loop
-
-; Start a battle if the object:
-
-	push af
-	push de
-
-; Has a sprite
-	ld hl, MAPOBJECT_SPRITE
-	add hl, de
-	ld a, [hl]
-	and a
-	jr z, .next
-
-; Is a trainer
-	ld hl, MAPOBJECT_COLOR
-	add hl, de
-	ld a, [hl]
-	and $f
-	cp $2
-	jr nz, .next
-
-; Is visible on the map
-	ld hl, MAPOBJECT_OBJECT_STRUCT_ID
-	add hl, de
-	ld a, [hl]
-	cp -1
-	jr z, .next
-
-; Is facing the player...
-	call GetObjectStruct
-	call FacingPlayerDistance_bc
-	jr nc, .next
-
-; ...within their sight range
-	ld hl, MAPOBJECT_RANGE
-	add hl, de
-	ld a, [hl]
-	cp b
-	jr c, .next
-
-; And hasn't already been beaten
-	push bc
-	push de
-	ld hl, MAPOBJECT_SCRIPT_POINTER
-	add hl, de
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld b, CHECK_FLAG
-	call EventFlagAction
-	ld a, c
-	pop de
-	pop bc
-	and a
-	jr z, .startbattle
-
-.next
-	pop de
-	ld hl, OBJECT_LENGTH
-	add hl, de
-	ld d, h
-	ld e, l
-
-	pop af
-	inc a
-	cp NUM_OBJECTS
-	jr nz, .loop
-	xor a
-	ret
-
-.startbattle
-	pop de
-	pop af
-	ld [hLastTalked], a
-	ld a, b
-	ld [EngineBuffer2], a
-	ld a, c
-	ld [EngineBuffer3], a
-	jr LoadTrainer_continue
-; 3674
-
-TalkToTrainer:: ; 3674
-	ld a, 1
-	ld [EngineBuffer2], a
-	ld a, -1
-	ld [EngineBuffer3], a
-
-LoadTrainer_continue:: ; 367e
-	call GetMapScriptHeaderBank
-	ld [EngineBuffer1], a
-
-	ld a, [hLastTalked]
-	call GetMapObject
-
-	ld hl, MAPOBJECT_SCRIPT_POINTER
-	add hl, bc
-	ld a, [EngineBuffer1]
-	call GetFarHalfword
-	ld de, wTempTrainerHeader
-	ld bc, wTempTrainerHeaderEnd - wTempTrainerHeader
-	ld a, [EngineBuffer1]
-	call FarCopyBytes
-	xor a
-	ld [wRunningTrainerBattleScript], a
-	scf
-	ret
-; 36a5
-
-FacingPlayerDistance_bc:: ; 36a5
-
-	push de
-	call FacingPlayerDistance
-	ld b, d
-	ld c, e
-	pop de
-	ret
-; 36ad
-
-FacingPlayerDistance:: ; 36ad
-; Return carry if the sprite at bc is facing the player,
-; and its distance in d.
-
-	ld hl, OBJECT_NEXT_MAP_X ; x
-	add hl, bc
-	ld d, [hl]
-
-	ld hl, OBJECT_NEXT_MAP_Y ; y
-	add hl, bc
-	ld e, [hl]
-
-	ld a, [PlayerStandingMapX]
-	cp d
-	jr z, .CheckY
-
-	ld a, [PlayerStandingMapY]
-	cp e
-	jr z, .CheckX
-
-	and a
-	ret
-
-.CheckY:
-	ld a, [PlayerStandingMapY]
-	sub e
-	jr z, .NotFacing
-	jr nc, .Above
-
-; Below
-	cpl
-	inc a
-	ld d, a
-	ld e, OW_UP
-	jr .CheckFacing
-
-.Above:
-	ld d, a
-	ld e, OW_DOWN
-	jr .CheckFacing
-
-.CheckX:
-	ld a, [PlayerStandingMapX]
-	sub d
-	jr z, .NotFacing
-	jr nc, .Left
-
-; Right
-	cpl
-	inc a
-	ld d, a
-	ld e, OW_LEFT
-	jr .CheckFacing
-
-.Left:
-	ld d, a
-	ld e, OW_RIGHT
-
-.CheckFacing:
-	call GetSpriteDirection
-	cp e
-	jr nz, .NotFacing
-	scf
-	ret
-
-.NotFacing:
-	and a
-	ret
-; 36f5
-
-CheckTrainerFlag:: ; 36f5
-	push bc
-	ld hl, OBJECT_MAP_OBJECT_INDEX
-	add hl, bc
-	ld a, [hl]
-	call GetMapObject
-	ld hl, MAPOBJECT_SCRIPT_POINTER
-	add hl, bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	call GetMapScriptHeaderBank
-	call GetFarHalfword
-	ld d, h
-	ld e, l
-	push de
-	ld b, CHECK_FLAG
-	call EventFlagAction
-	pop de
-	ld a, c
-	and a
-	pop bc
-	ret
-; 3718
-
-PrintWinLossText:: ; 3718
-	ld a, [BattleType]
-	cp BATTLETYPE_CANLOSE
-	jr .canlose ; ??????????
-
-; unreferenced
-	ld hl, wWinTextPointer
-	jr .ok
-
-.canlose
-	ld a, [wBattleResult]
-	ld hl, wWinTextPointer
-	and $f
-	jr z, .ok
-	ld hl, wLossTextPointer
-
-.ok
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	call GetMapScriptHeaderBank
-	call FarPrintText
-	call WaitBGMap
-	call WaitPressAorB_BlinkCursor
-	ret
-; 3741
+INCLUDE "home/trainers.asm"
 
 IsAPokemon:: ; 3741
 ; Return carry if species a is not a Pokemon.
--- /dev/null
+++ b/home/names.asm
@@ -1,0 +1,287 @@
+NamesPointers:: ; 33ab
+	dba PokemonNames
+	dba MoveNames
+	dbw 0, 0
+	dba ItemNames
+	dbw 0, PartyMonOT
+	dbw 0, OTPartyMonOT
+	dba TrainerClassNames
+	dbw $4, $4b52 ; within PackMenuGFX
+; 33c3
+
+GetName:: ; 33c3
+; Return name CurSpecies from name list wNamedObjectTypeBuffer in StringBuffer1.
+
+	ld a, [hROMBank]
+	push af
+	push hl
+	push bc
+	push de
+
+	ld a, [wNamedObjectTypeBuffer]
+	cp PKMN_NAME
+	jr nz, .NotPokeName
+
+	ld a, [CurSpecies]
+	ld [wd265], a
+	call GetPokemonName
+	ld hl, PKMN_NAME_LENGTH
+	add hl, de
+	ld e, l
+	ld d, h
+	jr .done
+
+.NotPokeName:
+	ld a, [wNamedObjectTypeBuffer]
+	dec a
+	ld e, a
+	ld d, 0
+	ld hl, NamesPointers
+	add hl, de
+	add hl, de
+	add hl, de
+	ld a, [hli]
+	rst Bankswitch
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+
+	ld a, [CurSpecies]
+	dec a
+	call GetNthString
+
+	ld de, StringBuffer1
+	ld bc, ITEM_NAME_LENGTH
+	call CopyBytes
+
+.done
+	ld a, e
+	ld [wUnusedD102], a
+	ld a, d
+	ld [wUnusedD102 + 1], a
+
+	pop de
+	pop bc
+	pop hl
+	pop af
+	rst Bankswitch
+	ret
+; 3411
+
+GetNthString:: ; 3411
+; Return the address of the
+; ath string starting from hl.
+
+	and a
+	ret z
+
+	push bc
+	ld b, a
+	ld c, "@"
+.readChar
+	ld a, [hli]
+	cp c
+	jr nz, .readChar
+	dec b
+	jr nz, .readChar
+	pop bc
+	ret
+; 3420
+
+GetBasePokemonName:: ; 3420
+; Discards gender (Nidoran).
+
+	push hl
+	call GetPokemonName
+
+	ld hl, StringBuffer1
+.loop
+	ld a, [hl]
+	cp "@"
+	jr z, .quit
+	cp "♂"
+	jr z, .end
+	cp "♀"
+	jr z, .end
+	inc hl
+	jr .loop
+.end
+	ld [hl], "@"
+.quit
+	pop hl
+	ret
+
+; 343b
+
+GetPokemonName:: ; 343b
+; Get Pokemon name wd265.
+
+	ld a, [hROMBank]
+	push af
+	push hl
+	ld a, BANK(PokemonNames)
+	rst Bankswitch
+
+; Each name is ten characters
+	ld a, [wd265]
+	dec a
+	ld d, 0
+	ld e, a
+	ld h, 0
+	ld l, a
+	add hl, hl ; hl = hl * 4
+	add hl, hl ; hl = hl * 4
+	add hl, de ; hl = (hl*4) + de
+	add hl, hl ; hl = (5*hl) + (5*hl)
+	ld de, PokemonNames
+	add hl, de
+
+; Terminator
+	ld de, StringBuffer1
+	push de
+	ld bc, PKMN_NAME_LENGTH - 1
+	call CopyBytes
+	ld hl, StringBuffer1 + PKMN_NAME_LENGTH - 1
+	ld [hl], "@"
+	pop de
+
+	pop hl
+	pop af
+	rst Bankswitch
+	ret
+; 3468
+
+GetItemName:: ; 3468
+; Get item name wd265.
+
+	push hl
+	push bc
+	ld a, [wd265]
+
+	cp TM01
+	jr nc, .TM
+
+	ld [CurSpecies], a
+	ld a, ITEM_NAME
+	ld [wNamedObjectTypeBuffer], a
+	call GetName
+	jr .Copied
+.TM:
+	call GetTMHMName
+.Copied:
+	ld de, StringBuffer1
+	pop bc
+	pop hl
+	ret
+; 3487
+
+GetTMHMName:: ; 3487
+; Get TM/HM name by item id wd265.
+
+	push hl
+	push de
+	push bc
+	ld a, [wd265]
+	push af
+
+; TM/HM prefix
+	cp HM01
+	push af
+	jr c, .TM
+
+	ld hl, .HMText
+	ld bc, .HMTextEnd - .HMText
+	jr .asm_34a1
+
+.TM:
+	ld hl, .TMText
+	ld bc, .TMTextEnd - .TMText
+
+.asm_34a1
+	ld de, StringBuffer1
+	call CopyBytes
+
+; TM/HM number
+	push de
+	ld a, [wd265]
+	ld c, a
+	callab GetTMHMNumber
+	pop de
+
+; HM numbers start from 51, not 1
+	pop af
+	ld a, c
+	jr c, .asm_34b9
+	sub NUM_TMS
+.asm_34b9
+
+; Divide and mod by 10 to get the top and bottom digits respectively
+	ld b, "0"
+.mod10
+	sub 10
+	jr c, .asm_34c2
+	inc b
+	jr .mod10
+.asm_34c2
+	add 10
+
+	push af
+	ld a, b
+	ld [de], a
+	inc de
+	pop af
+
+	ld b, "0"
+	add b
+	ld [de], a
+
+; End the string
+	inc de
+	ld a, "@"
+	ld [de], a
+
+	pop af
+	ld [wd265], a
+	pop bc
+	pop de
+	pop hl
+	ret
+
+.TMText:
+	db "TM"
+.TMTextEnd:
+	db "@"
+
+.HMText:
+	db "HM"
+.HMTextEnd:
+	db "@"
+; 34df
+
+IsHM:: ; 34df
+	cp HM01
+	jr c, .NotHM
+	scf
+	ret
+.NotHM:
+	and a
+	ret
+; 34e7
+
+INCLUDE "home/hm_moves.asm"
+
+GetMoveName:: ; 34f8
+	push hl
+
+	ld a, MOVE_NAME
+	ld [wNamedObjectTypeBuffer], a
+
+	ld a, [wNamedObjectIndexBuffer] ; move id
+	ld [CurSpecies], a
+
+	call GetName
+	ld de, StringBuffer1
+
+	pop hl
+	ret
+; 350c
--- /dev/null
+++ b/home/trainers.asm
@@ -1,0 +1,263 @@
+CheckTrainerBattle2:: ; 3600
+	ld a, [hROMBank]
+	push af
+
+	call SwitchToMapScriptHeaderBank
+	call CheckTrainerBattle
+
+	pop bc
+	ld a, b
+	rst Bankswitch
+	ret
+; 360d
+
+CheckTrainerBattle:: ; 360d
+; Check if any trainer on the map sees the player and wants to battle.
+
+; Skip the player object.
+	ld a, 1
+	ld de, MapObjects + OBJECT_LENGTH
+
+.loop
+
+; Start a battle if the object:
+
+	push af
+	push de
+
+; Has a sprite
+	ld hl, MAPOBJECT_SPRITE
+	add hl, de
+	ld a, [hl]
+	and a
+	jr z, .next
+
+; Is a trainer
+	ld hl, MAPOBJECT_COLOR
+	add hl, de
+	ld a, [hl]
+	and $f
+	cp $2
+	jr nz, .next
+
+; Is visible on the map
+	ld hl, MAPOBJECT_OBJECT_STRUCT_ID
+	add hl, de
+	ld a, [hl]
+	cp -1
+	jr z, .next
+
+; Is facing the player...
+	call GetObjectStruct
+	call FacingPlayerDistance_bc
+	jr nc, .next
+
+; ...within their sight range
+	ld hl, MAPOBJECT_RANGE
+	add hl, de
+	ld a, [hl]
+	cp b
+	jr c, .next
+
+; And hasn't already been beaten
+	push bc
+	push de
+	ld hl, MAPOBJECT_SCRIPT_POINTER
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld b, CHECK_FLAG
+	call EventFlagAction
+	ld a, c
+	pop de
+	pop bc
+	and a
+	jr z, .startbattle
+
+.next
+	pop de
+	ld hl, OBJECT_LENGTH
+	add hl, de
+	ld d, h
+	ld e, l
+
+	pop af
+	inc a
+	cp NUM_OBJECTS
+	jr nz, .loop
+	xor a
+	ret
+
+.startbattle
+	pop de
+	pop af
+	ld [hLastTalked], a
+	ld a, b
+	ld [EngineBuffer2], a
+	ld a, c
+	ld [EngineBuffer3], a
+	jr LoadTrainer_continue
+; 3674
+
+TalkToTrainer:: ; 3674
+	ld a, 1
+	ld [EngineBuffer2], a
+	ld a, -1
+	ld [EngineBuffer3], a
+
+LoadTrainer_continue:: ; 367e
+	call GetMapScriptHeaderBank
+	ld [EngineBuffer1], a
+
+	ld a, [hLastTalked]
+	call GetMapObject
+
+	ld hl, MAPOBJECT_SCRIPT_POINTER
+	add hl, bc
+	ld a, [EngineBuffer1]
+	call GetFarHalfword
+	ld de, wTempTrainerHeader
+	ld bc, wTempTrainerHeaderEnd - wTempTrainerHeader
+	ld a, [EngineBuffer1]
+	call FarCopyBytes
+	xor a
+	ld [wRunningTrainerBattleScript], a
+	scf
+	ret
+; 36a5
+
+FacingPlayerDistance_bc:: ; 36a5
+
+	push de
+	call FacingPlayerDistance
+	ld b, d
+	ld c, e
+	pop de
+	ret
+; 36ad
+
+FacingPlayerDistance:: ; 36ad
+; Return carry if the sprite at bc is facing the player,
+; and its distance in d.
+
+	ld hl, OBJECT_NEXT_MAP_X ; x
+	add hl, bc
+	ld d, [hl]
+
+	ld hl, OBJECT_NEXT_MAP_Y ; y
+	add hl, bc
+	ld e, [hl]
+
+	ld a, [PlayerStandingMapX]
+	cp d
+	jr z, .CheckY
+
+	ld a, [PlayerStandingMapY]
+	cp e
+	jr z, .CheckX
+
+	and a
+	ret
+
+.CheckY:
+	ld a, [PlayerStandingMapY]
+	sub e
+	jr z, .NotFacing
+	jr nc, .Above
+
+; Below
+	cpl
+	inc a
+	ld d, a
+	ld e, OW_UP
+	jr .CheckFacing
+
+.Above:
+	ld d, a
+	ld e, OW_DOWN
+	jr .CheckFacing
+
+.CheckX:
+	ld a, [PlayerStandingMapX]
+	sub d
+	jr z, .NotFacing
+	jr nc, .Left
+
+; Right
+	cpl
+	inc a
+	ld d, a
+	ld e, OW_LEFT
+	jr .CheckFacing
+
+.Left:
+	ld d, a
+	ld e, OW_RIGHT
+
+.CheckFacing:
+	call GetSpriteDirection
+	cp e
+	jr nz, .NotFacing
+	scf
+	ret
+
+.NotFacing:
+	and a
+	ret
+; 36f5
+
+CheckTrainerFlag:: ; 36f5
+	push bc
+	ld hl, OBJECT_MAP_OBJECT_INDEX
+	add hl, bc
+	ld a, [hl]
+	call GetMapObject
+	ld hl, MAPOBJECT_SCRIPT_POINTER
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	call GetMapScriptHeaderBank
+	call GetFarHalfword
+	ld d, h
+	ld e, l
+	push de
+	ld b, CHECK_FLAG
+	call EventFlagAction
+	pop de
+	ld a, c
+	and a
+	pop bc
+	ret
+; 3718
+
+PrintWinLossText:: ; 3718
+	ld a, [BattleType]
+	cp BATTLETYPE_CANLOSE
+	jr .canlose ; ??????????
+
+; unreferenced
+	ld hl, wWinTextPointer
+	jr .ok
+
+.canlose
+	ld a, [wBattleResult]
+	ld hl, wWinTextPointer
+	and $f
+	jr z, .ok
+	ld hl, wLossTextPointer
+
+.ok
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	call GetMapScriptHeaderBank
+	call FarPrintText
+	call WaitBGMap
+	call WaitPressAorB_BlinkCursor
+	ret
+; 3741