summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/empty_sram.asm19
-rwxr-xr-xengine/healmachineanim.asm265
-rw-r--r--engine/init_hof_credits.asm79
-rw-r--r--engine/init_list.asm54
-rwxr-xr-xengine/link.asm11
-rwxr-xr-xengine/mystery_gift.asm (renamed from engine/mysterygift.asm)0
-rwxr-xr-xengine/mystery_gift_2.asm (renamed from engine/mysterygift2.asm)0
-rw-r--r--engine/pack_f.asm20
-rw-r--r--engine/place_graphics.asm56
-rw-r--r--engine/pokegear_2.asm25
-rw-r--r--engine/printhoursmins.asm64
-rw-r--r--engine/save.asm40
-rwxr-xr-xengine/select_menu.asm (renamed from engine/selectmenu.asm)0
-rwxr-xr-xengine/start_menu.asm (renamed from engine/startmenu.asm)0
-rw-r--r--engine/switch_party_mons.asm145
-rw-r--r--engine/tempmon.asm127
16 files changed, 620 insertions, 285 deletions
diff --git a/engine/empty_sram.asm b/engine/empty_sram.asm
new file mode 100644
index 000000000..aa4b28e0d
--- /dev/null
+++ b/engine/empty_sram.asm
@@ -0,0 +1,19 @@
+EmptyAllSRAMBanks: ; 4cf1f
+ ld a, $0
+ call .EmptyBank
+ ld a, $1
+ call .EmptyBank
+ ld a, $2
+ call .EmptyBank
+ ld a, $3
+ call .EmptyBank
+ ret
+
+.EmptyBank: ; 4cf34
+ call GetSRAMBank
+ ld hl, SRAM_Begin
+ ld bc, SRAM_End - SRAM_Begin
+ xor a
+ call ByteFill
+ call CloseSRAM
+ ret
diff --git a/engine/healmachineanim.asm b/engine/healmachineanim.asm
deleted file mode 100755
index 4f543c0b3..000000000
--- a/engine/healmachineanim.asm
+++ /dev/null
@@ -1,265 +0,0 @@
-HealMachineAnim: ; 12324
- ; If you have no Pokemon, don't change the buffer. This can lead to some glitchy effects if you have no Pokemon.
- ld a, [PartyCount]
- and a
- ret z
- ; The location of the healing machine relative to the player is stored in ScriptVar.
- ; 0: Up and left (Pokemon Center)
- ; 1: Left (Elm's Lab)
- ; 2: Up (Hall of Fame)
- ld a, [ScriptVar]
- ld [Buffer1], a
- ld a, [rOBP1]
- ld [Buffer2], a
- call .DoJumptableFunctions
- ld a, [Buffer2]
- call DmgToCgbObjPal1
- ret
-; 1233e
-
-.DoJumptableFunctions: ; 1233e
- xor a
- ld [Buffer3], a
-.jumpable_loop
- ld a, [Buffer1]
- ld e, a
- ld d, 0
- ld hl, .Pointers
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [Buffer3]
- ld e, a
- inc a
- ld [Buffer3], a
- add hl, de
- ld a, [hl]
- cp 5
- jr z, .finish
- ld hl, .Jumptable
- rst JumpTable
- jr .jumpable_loop
-
-.finish
- ret
-; 12365
-
-.Pointers: ; 12365
- dw .Pokecenter
- dw .ElmLab
- dw .HallOfFame
-; 1236b
-
-.Pokecenter: ; 1236b
- db 0, 1, 3, 5
-.ElmLab: ; 1236f
- db 0, 1, 3, 5
-.HallOfFame: ; 12373
- db 0, 2, 4, 5
-; 12377
-
-.Jumptable: ; 12377
- dw .LoadGFX
- dw .PC_LoadBallsOntoMachine
- dw .HOF_LoadBallsOntoMachine
- dw .PlayHealMusic
- dw .HOF_PlaySFX
- dw .dummy_5 ; never encountered
-; 12383
-
-.LoadGFX: ; 12383
- call .LoadPalettes
- ld de, .HealMachineGFX
- ld hl, VTiles0 tile $7c
- lb bc, BANK(.HealMachineGFX), $2
- call Request2bpp
- ret
-; 12393
-
-.PC_LoadBallsOntoMachine: ; 12393
- ld hl, Sprites + $80
- ld de, .PC_ElmsLab_OAM
- call .PlaceHealingMachineTile
- call .PlaceHealingMachineTile
- jr .LoadBallsOntoMachine
-
-.HOF_LoadBallsOntoMachine: ; 123a1
- ld hl, Sprites + $80
- ld de, .HOF_OAM
-
-.LoadBallsOntoMachine: ; 123a7
- ld a, [PartyCount]
- ld b, a
-.party_loop
- call .PlaceHealingMachineTile
- push de
- ld de, SFX_SECOND_PART_OF_ITEMFINDER
- call PlaySFX
- pop de
- ld c, 30
- call DelayFrames
- dec b
- jr nz, .party_loop
- ret
-; 123bf
-
-.PlayHealMusic: ; 123bf
- ld de, MUSIC_HEAL
- call PlayMusic
- jp .FlashPalettes8Times
-; 123c8
-
-.HOF_PlaySFX: ; 123c8
- ld de, SFX_GAME_FREAK_LOGO_GS
- call PlaySFX
- call .FlashPalettes8Times
- call WaitSFX
- ld de, SFX_BOOT_PC
- call PlaySFX
- ret
-; 123db
-
-.dummy_5 ; 123db
- ret
-; 123dc
-
-.PC_ElmsLab_OAM: ; 123dc
- dsprite 4, 0, 4, 2, $7c, $16
- dsprite 4, 0, 4, 6, $7c, $16
- dsprite 4, 6, 4, 0, $7d, $16
- dsprite 4, 6, 5, 0, $7d, $36 ; xflip
- dsprite 5, 3, 4, 0, $7d, $16
- dsprite 5, 3, 5, 0, $7d, $36 ; xflip
- dsprite 6, 0, 4, 0, $7d, $16
- dsprite 6, 0, 5, 0, $7d, $36 ; xflip
-; 123fc
-
-.HealMachineGFX: ; 123fc
-INCBIN "gfx/overworld/heal_machine.2bpp"
-; 1241c
-
-.HOF_OAM: ; 1241c
- dsprite 7, 4, 10, 1, $7d, $16
- dsprite 7, 4, 10, 6, $7d, $16
- dsprite 7, 3, 9, 5, $7d, $16
- dsprite 7, 3, 11, 2, $7d, $16
- dsprite 7, 1, 9, 1, $7d, $16
- dsprite 7, 1, 11, 5, $7d, $16
-; 12434
-
-.LoadPalettes: ; 12434
- call IsCGB
- jr nz, .cgb
- ld a, %11100000
- ld [rOBP1], a
- ret
-
-.cgb
- ld hl, .palettes
- ld de, OBPals + 8 * 6
- ld bc, 8
- ld a, $5
- call FarCopyWRAM
- ld a, $1
- ld [hCGBPalUpdate], a
- ret
-; 12451
-
-.palettes ; 12451
- RGB 31, 31, 31
- RGB 31, 19, 10
- RGB 31, 07, 01
- RGB 00, 00, 00
-; 12459
-
-.FlashPalettes8Times: ; 12459
- ld c, $8
-.palette_loop
- push bc
- call .FlashPalettes
- ld c, 10
- call DelayFrames
- pop bc
- dec c
- jr nz, .palette_loop
- ret
-; 12469
-
-.FlashPalettes: ; 12469
- call IsCGB
- jr nz, .go
- ld a, [rOBP1]
- xor %00101000
- ld [rOBP1], a
- ret
-
-.go
- ld a, [rSVBK]
- push af
- ld a, $5
- ld [rSVBK], a
-
- ld hl, OBPals + 8 * 6
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- push de
- ld c, $3
-.palette_loop_2
- ld a, [hli]
- ld e, a
- ld a, [hld]
- ld d, a
- dec hl
- ld a, d
- ld [hld], a
- ld a, e
- ld [hli], a
- inc hl
- inc hl
- inc hl
- dec c
- jr nz, .palette_loop_2
- pop de
- dec hl
- ld a, d
- ld [hld], a
- ld a, e
- ld [hl], a
-
- pop af
- ld [rSVBK], a
- ld a, $1
- ld [hCGBPalUpdate], a
- ret
-; 124a3
-
-.PlaceHealingMachineTile: ; 124a3
- push bc
- ld a, [Buffer1]
- bcpixel 2, 4
- cp $1 ; ElmsLab
- jr z, .okay
- bcpixel 0, 0
-
-.okay
- ld a, [de]
- add c
- inc de
- ld [hli], a
- ld a, [de]
- add b
- inc de
- ld [hli], a
- ld a, [de]
- inc de
- ld [hli], a
- ld a, [de]
- inc de
- ld [hli], a
- pop bc
- ret
-; 124c1
diff --git a/engine/init_hof_credits.asm b/engine/init_hof_credits.asm
new file mode 100644
index 000000000..0f55a10ab
--- /dev/null
+++ b/engine/init_hof_credits.asm
@@ -0,0 +1,79 @@
+InitDisplayForHallOfFame: ; 4e881
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ call DisableLCD
+ call LoadStandardFont
+ call LoadFontsBattleExtra
+ hlbgcoord 0, 0
+ ld bc, VBGMap1 - VBGMap0
+ ld a, " "
+ call ByteFill
+ hlcoord 0, 0, AttrMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ xor a
+ ld [hSCY], a
+ ld [hSCX], a
+ call EnableLCD
+ ld hl, .SavingRecordDontTurnOff
+ call PrintText
+ call WaitBGMap2
+ call SetPalettes
+ ret
+
+.SavingRecordDontTurnOff: ; 0x4e8bd
+ ; SAVING RECORD… DON'T TURN OFF!
+ text_jump UnknownText_0x1bd39e
+ db "@"
+
+InitDisplayForRedCredits: ; 4e8c2
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ call DisableLCD
+ call LoadStandardFont
+ call LoadFontsBattleExtra
+ hlbgcoord 0, 0
+ ld bc, VBGMap1 - VBGMap0
+ ld a, " "
+ call ByteFill
+ hlcoord 0, 0, AttrMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ ld hl, UnknBGPals
+ ld c, 4 tiles
+.load_white_palettes
+ ld a, (palred 31 + palgreen 31 + palblue 31) % $100
+ ld [hli], a
+ ld a, (palred 31 + palgreen 31 + palblue 31) / $100
+ ld [hli], a
+ dec c
+ jr nz, .load_white_palettes
+ xor a
+ ld [hSCY], a
+ ld [hSCX], a
+ call EnableLCD
+ call WaitBGMap2
+ call SetPalettes
+ ret
+
+ResetDisplayBetweenHallOfFameMons: ; 4e906
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ ld hl, wDecompressScratch
+ ld bc, wScratchAttrMap - wDecompressScratch
+ ld a, " "
+ call ByteFill
+ hlbgcoord 0, 0
+ ld de, wDecompressScratch
+ ld b, 0
+ ld c, 4 tiles
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
diff --git a/engine/init_list.asm b/engine/init_list.asm
new file mode 100644
index 000000000..e2b7235ab
--- /dev/null
+++ b/engine/init_list.asm
@@ -0,0 +1,54 @@
+InitList: ; 50db9
+ ld a, [wInitListType]
+
+ cp INIT_ENEMYOT_LIST
+ jr nz, .check_party_ot_name
+ ld hl, OTPartyCount
+ ld de, OTPartyMonOT
+ ld a, ENEMY_OT_NAME
+ jr .done
+
+.check_party_ot_name
+ cp INIT_PLAYEROT_LIST
+ jr nz, .check_mon_name
+ ld hl, PartyCount
+ ld de, PartyMonOT
+ ld a, PARTY_OT_NAME
+ jr .done
+
+.check_mon_name
+ cp INIT_MON_LIST
+ jr nz, .check_item_name
+ ld hl, CurMart
+ ld de, PokemonNames
+ ld a, PKMN_NAME
+ jr .done
+
+.check_item_name
+ cp INIT_BAG_ITEM_LIST
+ jr nz, .check_ob_item_name
+ ld hl, NumItems
+ ld de, ItemNames
+ ld a, ITEM_NAME
+ jr .done
+
+.check_ob_item_name
+ ld hl, CurMart
+ ld de, ItemNames
+ ld a, ITEM_NAME
+.done
+ ld [wNamedObjectTypeBuffer], a
+ ld a, l
+ ld [wListPointer], a
+ ld a, h
+ ld [wListPointer + 1], a
+ ld a, e
+ ld [wUnusedD102], a
+ ld a, d
+ ld [wUnusedD102 + 1], a
+ ld bc, ItemAttributes
+ ld a, c
+ ld [wItemAttributesPtr], a
+ ld a, b
+ ld [wItemAttributesPtr + 1], a
+ ret
diff --git a/engine/link.asm b/engine/link.asm
index 7f71f4880..619d5bae3 100755
--- a/engine/link.asm
+++ b/engine/link.asm
@@ -2581,3 +2581,14 @@ UnusedGen1LinkCommsBorderGFX: ; 29f54
; unreferenced
INCBIN "gfx/trade/unused_gen_1_border_tiles.2bpp"
; 29fe4
+
+Function29fe4: ; unreferenced
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ ld d, $0
+ ld b, CHECK_FLAG
+ predef FlagPredef
+ call CloseSRAM
+ ld a, c
+ and a
+ ret
diff --git a/engine/mysterygift.asm b/engine/mystery_gift.asm
index 8204ab332..8204ab332 100755
--- a/engine/mysterygift.asm
+++ b/engine/mystery_gift.asm
diff --git a/engine/mysterygift2.asm b/engine/mystery_gift_2.asm
index dc0baf39c..dc0baf39c 100755
--- a/engine/mysterygift2.asm
+++ b/engine/mystery_gift_2.asm
diff --git a/engine/pack_f.asm b/engine/pack_f.asm
new file mode 100644
index 000000000..f71e43db8
--- /dev/null
+++ b/engine/pack_f.asm
@@ -0,0 +1,20 @@
+DrawKrisPackGFX: ; 48e81
+ ld hl, PackFGFXPointers
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ ld hl, VTiles2 tile $50
+ lb bc, BANK(PackFGFX), 15
+ call Request2bpp
+ ret
+
+PackFGFXPointers: ; 48e93
+ dw PackFGFX + (15 tiles) * 1
+ dw PackFGFX + (15 tiles) * 3
+ dw PackFGFX + (15 tiles) * 0
+ dw PackFGFX + (15 tiles) * 2
+
+PackFGFX: ; 48e9b
+INCBIN "gfx/pack/pack_f.2bpp"
diff --git a/engine/place_graphics.asm b/engine/place_graphics.asm
new file mode 100644
index 000000000..d72364776
--- /dev/null
+++ b/engine/place_graphics.asm
@@ -0,0 +1,56 @@
+PlaceGraphic: ; 2ef6e
+; Fill wBoxAlignment-aligned box width b height c
+; with iterating tile starting from hGraphicStartTile at hl.
+; Predef $13
+
+ ld de, SCREEN_WIDTH
+
+ ld a, [wBoxAlignment]
+ and a
+ jr nz, .right
+
+ ld a, [hGraphicStartTile]
+.x1
+ push bc
+ push hl
+
+.y1
+ ld [hl], a
+ add hl, de
+ inc a
+ dec c
+ jr nz, .y1
+
+ pop hl
+ inc hl
+ pop bc
+ dec b
+ jr nz, .x1
+ ret
+
+.right
+; Right-aligned.
+ push bc
+ ld b, 0
+ dec c
+ add hl, bc
+ pop bc
+
+ ld a, [hGraphicStartTile]
+.x2
+ push bc
+ push hl
+
+.y2
+ ld [hl], a
+ add hl, de
+ inc a
+ dec c
+ jr nz, .y2
+
+ pop hl
+ dec hl
+ pop bc
+ dec b
+ jr nz, .x2
+ ret
diff --git a/engine/pokegear_2.asm b/engine/pokegear_2.asm
new file mode 100644
index 000000000..a5cceecfd
--- /dev/null
+++ b/engine/pokegear_2.asm
@@ -0,0 +1,25 @@
+TownMap_ConvertLineBreakCharacters: ; 1de2c5
+ ld hl, StringBuffer1
+.loop
+ ld a, [hl]
+ cp "@"
+ jr z, .end
+ cp "%"
+ jr z, .line_break
+ cp "¯"
+ jr z, .line_break
+ inc hl
+ jr .loop
+
+.line_break
+ ld [hl], "<LNBRK>"
+
+.end
+ ld de, StringBuffer1
+ hlcoord 9, 0
+ call PlaceString
+ ret
+
+
+PokegearGFX: ; 1de2e4
+INCBIN "gfx/pokegear/pokegear.2bpp.lz"
diff --git a/engine/printhoursmins.asm b/engine/printhoursmins.asm
new file mode 100644
index 000000000..711ff89b6
--- /dev/null
+++ b/engine/printhoursmins.asm
@@ -0,0 +1,64 @@
+Function1dd6a9: ; 1dd6a9
+; XXX
+ ld a, b
+ ld b, c
+ ld c, a
+ push bc
+ push de
+ ld hl, sp+$2
+ ld d, h
+ ld e, l
+ pop hl
+ lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+ call PrintNum
+ pop bc
+ ret
+
+PrintHoursMins ; 1dd6bb (77:56bb)
+; Hours in b, minutes in c
+ ld a, b
+ cp 12
+ push af
+ jr c, .AM
+ jr z, .PM
+ sub 12
+ jr .PM
+.AM:
+ or a
+ jr nz, .PM
+ ld a, 12
+.PM:
+ ld b, a
+; Crazy stuff happening with the stack
+ push bc
+ ld hl, sp+$1
+ push de
+ push hl
+ pop de
+ pop hl
+ ld [hl], " "
+ lb bc, 1, 2
+ call PrintNum
+ ld [hl], ":"
+ inc hl
+ ld d, h
+ ld e, l
+ ld hl, sp+$0
+ push de
+ push hl
+ pop de
+ pop hl
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ pop bc
+ ld de, String_AM
+ pop af
+ jr c, .place_am_pm
+ ld de, String_PM
+.place_am_pm
+ inc hl
+ call PlaceString
+ ret
+
+String_AM: db "AM@" ; 1dd6fc
+String_PM: db "PM@" ; 1dd6ff
diff --git a/engine/save.asm b/engine/save.asm
index 74b0626c8..65339e0bb 100644
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -500,12 +500,12 @@ HallOfFame_InitSaveIfNeeded: ; 14da0
; 14da9
ValidateSave: ; 14da9
- ld a, BANK(s1_a008)
+ ld a, BANK(sCheckValue1) ; BANK(sCheckValue2)
call GetSRAMBank
- ld a, 99
- ld [s1_a008], a
- ld a, " "
- ld [s1_ad0f], a
+ ld a, SAVE_CHECK_VALUE_1
+ ld [sCheckValue1], a
+ ld a, SAVE_CHECK_VALUE_2
+ ld [sCheckValue2], a
jp CloseSRAM
; 14dbb
@@ -568,12 +568,12 @@ SaveChecksum: ; 14e13
; 14e2d
ValidateBackupSave: ; 14e2d
- ld a, BANK(s0_b208)
+ ld a, BANK(sBackupCheckValue1) ; BANK(sBackupCheckValue2)
call GetSRAMBank
- ld a, 99
- ld [s0_b208], a
- ld a, " "
- ld [s0_bf0f], a
+ ld a, SAVE_CHECK_VALUE_1
+ ld [sBackupCheckValue1], a
+ ld a, SAVE_CHECK_VALUE_2
+ ld [sBackupCheckValue2], a
call CloseSRAM
ret
; 14e40
@@ -731,13 +731,13 @@ INCLUDE "data/default_options.asm"
CheckPrimarySaveFile: ; 14f84
- ld a, BANK(s1_a008)
+ ld a, BANK(sCheckValue1) ; BANK(sCheckValue2)
call GetSRAMBank
- ld a, [s1_a008]
- cp 99
+ ld a, [sCheckValue1]
+ cp SAVE_CHECK_VALUE_1
jr nz, .nope
- ld a, [s1_ad0f]
- cp " "
+ ld a, [sCheckValue2]
+ cp SAVE_CHECK_VALUE_2
jr nz, .nope
ld hl, sOptions
ld de, Options
@@ -753,13 +753,13 @@ CheckPrimarySaveFile: ; 14f84
; 14faf
CheckBackupSaveFile: ; 14faf
- ld a, BANK(s0_b208)
+ ld a, BANK(sBackupCheckValue1) ; BANK(sBackupCheckValue2)
call GetSRAMBank
- ld a, [s0_b208]
- cp 99
+ ld a, [sBackupCheckValue1]
+ cp SAVE_CHECK_VALUE_1
jr nz, .nope
- ld a, [s0_bf0f]
- cp " "
+ ld a, [sBackupCheckValue2]
+ cp SAVE_CHECK_VALUE_2
jr nz, .nope
ld hl, sBackupOptions
ld de, Options
diff --git a/engine/selectmenu.asm b/engine/select_menu.asm
index 5d3b5ff0a..5d3b5ff0a 100755
--- a/engine/selectmenu.asm
+++ b/engine/select_menu.asm
diff --git a/engine/startmenu.asm b/engine/start_menu.asm
index 871da86be..871da86be 100755
--- a/engine/startmenu.asm
+++ b/engine/start_menu.asm
diff --git a/engine/switch_party_mons.asm b/engine/switch_party_mons.asm
new file mode 100644
index 000000000..cde9c82b2
--- /dev/null
+++ b/engine/switch_party_mons.asm
@@ -0,0 +1,145 @@
+_SwitchPartyMons:
+ ld a, [wd0e3]
+ dec a
+ ld [Buffer3], a
+ ld b, a
+ ld a, [wMenuCursorY]
+ dec a
+ ld [Buffer2], a
+ cp b
+ jr z, .skip
+ call .SwapMonAndMail
+ ld a, [Buffer3]
+ call .ClearSprite
+ ld a, [Buffer2]
+ call .ClearSprite
+.skip
+ ret
+
+.ClearSprite: ; 50f34 (14:4f34)
+ push af
+ hlcoord 0, 1
+ ld bc, 2 * SCREEN_WIDTH
+ call AddNTimes
+ ld bc, 2 * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ pop af
+ ld hl, Sprites
+ ld bc, $10
+ call AddNTimes
+ ld de, $4
+ ld c, $4
+.gfx_loop
+ ld [hl], $a0
+ add hl, de
+ dec c
+ jr nz, .gfx_loop
+ ld de, SFX_SWITCH_POKEMON
+ call WaitPlaySFX
+ ret
+
+.SwapMonAndMail: ; 50f62 (14:4f62)
+ push hl
+ push de
+ push bc
+ ld bc, PartySpecies
+ ld a, [Buffer2]
+ ld l, a
+ ld h, $0
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld a, [Buffer3]
+ ld l, a
+ ld h, $0
+ add hl, bc
+ ld a, [hl]
+ push af
+ ld a, [de]
+ ld [hl], a
+ pop af
+ ld [de], a
+ ld a, [Buffer2]
+ ld hl, PartyMon1Species
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ push hl
+ ld de, wd002
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ ld a, [Buffer3]
+ ld hl, PartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ pop de
+ push hl
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ pop de
+ ld hl, wd002
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ ld a, [Buffer2]
+ ld hl, PartyMonOT
+ call SkipNames
+ push hl
+ call .CopyNameTowd002
+ ld a, [Buffer3]
+ ld hl, PartyMonOT
+ call SkipNames
+ pop de
+ push hl
+ call .CopyName
+ pop de
+ ld hl, wd002
+ call .CopyName
+ ld hl, PartyMonNicknames
+ ld a, [Buffer2]
+ call SkipNames
+ push hl
+ call .CopyNameTowd002
+ ld hl, PartyMonNicknames
+ ld a, [Buffer3]
+ call SkipNames
+ pop de
+ push hl
+ call .CopyName
+ pop de
+ ld hl, wd002
+ call .CopyName
+ ld hl, sPartyMail
+ ld a, [Buffer2]
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ push hl
+ ld de, wd002
+ ld bc, MAIL_STRUCT_LENGTH
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ call CopyBytes
+ ld hl, sPartyMail
+ ld a, [Buffer3]
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ pop de
+ push hl
+ ld bc, MAIL_STRUCT_LENGTH
+ call CopyBytes
+ pop de
+ ld hl, wd002
+ ld bc, MAIL_STRUCT_LENGTH
+ call CopyBytes
+ call CloseSRAM
+ pop bc
+ pop de
+ pop hl
+ ret
+
+.CopyNameTowd002: ; 51036 (14:5036)
+ ld de, wd002
+
+.CopyName: ; 51039 (14:5039)
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
diff --git a/engine/tempmon.asm b/engine/tempmon.asm
new file mode 100644
index 000000000..332cb0c6c
--- /dev/null
+++ b/engine/tempmon.asm
@@ -0,0 +1,127 @@
+CopyPkmnToTempMon: ; 5084a
+; gets the BaseData of a Pkmn
+; and copys the PkmnStructure to TempMon
+
+ ld a, [CurPartyMon]
+ ld e, a
+ call GetPkmnSpecies
+ ld a, [CurPartySpecies]
+ ld [CurSpecies], a
+ call GetBaseData
+
+ ld a, [MonType]
+ ld hl, PartyMon1Species
+ ld bc, PARTYMON_STRUCT_LENGTH
+ and a
+ jr z, .copywholestruct
+ ld hl, OTPartyMon1Species
+ ld bc, PARTYMON_STRUCT_LENGTH
+ cp OTPARTYMON
+ jr z, .copywholestruct
+ ld bc, BOXMON_STRUCT_LENGTH
+ callab CopyBoxmonToTempMon
+ jr .done
+
+.copywholestruct
+ ld a, [CurPartyMon]
+ call AddNTimes
+ ld de, TempMon
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+
+.done
+ ret
+
+CalcwBufferMonStats: ; 5088b
+ ld bc, wBufferMon
+ jr _TempMonStatsCalculation
+
+CalcTempmonStats: ; 50890
+ ld bc, TempMon
+_TempMonStatsCalculation: ; 50893
+ ld hl, MON_LEVEL
+ add hl, bc
+ ld a, [hl]
+ ld [CurPartyLevel], a
+ ld hl, MON_MAXHP
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld hl, MON_STAT_EXP - 1
+ add hl, bc
+ push bc
+ ld b, $1
+ predef CalcPkmnStats
+ pop bc
+ ld hl, MON_HP
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr nz, .not_egg
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ jr .zero_status
+
+.not_egg
+ push bc
+ ld hl, MON_MAXHP
+ add hl, bc
+ ld bc, 2
+ call CopyBytes
+ pop bc
+
+.zero_status
+ ld hl, MON_STATUS
+ add hl, bc
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ret
+
+GetPkmnSpecies: ; 508d5
+; [MonType] has the type of the Pkmn
+; e = Nr. of Pkmn (i.e. [CurPartyMon])
+
+ ld a, [MonType]
+ and a ; PARTYMON
+ jr z, .partymon
+ cp OTPARTYMON
+ jr z, .otpartymon
+ cp BOXMON
+ jr z, .boxmon
+ cp TEMPMON
+ jr z, .breedmon
+ ; WILDMON
+
+.partymon
+ ld hl, PartySpecies
+ jr .done
+
+.otpartymon
+ ld hl, OTPartySpecies
+ jr .done
+
+.boxmon
+ ld a, BANK(sBoxSpecies)
+ call GetSRAMBank
+ ld hl, sBoxSpecies
+ call .done
+ call CloseSRAM
+ ret
+
+.breedmon
+ ld a, [wBreedMon1Species]
+ jr .done2
+
+.done
+ ld d, 0
+ add hl, de
+ ld a, [hl]
+
+.done2
+ ld [CurPartySpecies], a
+ ret