shithub: pokecrystal

Download patch

ref: cc0d5d4c8bb9721f8ab0354d87c8f6d848dbe23b
parent: c432709715df83f5cd063fd5b14684389e037e15
parent: 0d4c2776d927e5d3162d9a4430fc82f35bf50be5
author: yenatch <[email protected]>
date: Wed Sep 9 12:02:55 EDT 2015

Merge pull request #312 from JimB16/master

Added comments and changed labels (mainly for BattleTower)

--- a/battle/ai/items.asm
+++ b/battle/ai/items.asm
@@ -1,4 +1,4 @@
-Function38000: ; 38000
+AI_SwitchOrTryItem: ; 38000
 	and a
 
 	ld a, [IsInBattle]
@@ -21,7 +21,7 @@
 	jr nz, DontSwitch
 
 	ld hl, TrainerClassAttributes + 5
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle] ; Load always the first TrainerClass for BattleTower-Trainers
 	and a
 	jr nz, .ok
 	ld a, [TrainerClass]
@@ -73,6 +73,7 @@
 	ld a, [wc717]
 	and $f
 	inc a
+	; In register 'a' is the number (1-6) of the Pkmn to switch to
 	ld [wc718], a
 	jp AI_TrySwitch
 ; 38083
@@ -148,7 +149,7 @@
 ; 380ff
 
 
-Function380ff: ; 380ff
+CheckSubstatusCantRun: ; 380ff
 	ld a, [EnemySubStatus5]
 	bit SUBSTATUS_CANT_RUN, a
 	ret
@@ -156,7 +157,8 @@
 
 
 AI_TryItem: ; 38105
-	ld a, [wcfc0]
+	; items are not allowed in the BattleTower
+	ld a, [InBattleTowerBattle]
 	and a
 	ret nz
 
@@ -565,7 +567,7 @@
 	call AIUsedItemSound
 	call AI_HealStatus
 	ld a, FULL_HEAL
-	jp Function38568
+	jp PrintText_UsedItemOn_AND_AIUpdateHUD
 
 Function383ae: ; 383ae (e:43ae)
 	ld a, MAX_POTION
@@ -658,7 +660,7 @@
 .asm_38436
 
 Function38436: ; 38436
-	call Function38571
+	call PrintText_UsedItemOn
 	hlcoord 2, 2
 	xor a
 	ld [wd10a], a
@@ -715,7 +717,7 @@
 	call CopyBytes
 	pop af
 	jr c, .asm_384a3
-	ld hl, UnknownText_0x384d0
+	ld hl, TextJump_EnemyWithdrew
 	call PrintText
 .asm_384a3
 	ld a, $1
@@ -735,8 +737,8 @@
 	ret
 ; 384d0
 
-UnknownText_0x384d0: ; 384d0
-	text_jump UnknownText_0x1bcf9c
+TextJump_EnemyWithdrew: ; 384d0
+	text_jump Text_EnemyWithdrew
 	db "@"
 ; 384d5
 
@@ -744,7 +746,7 @@
 	call AIUsedItemSound
 	call AI_HealStatus
 	ld a, FULL_HEAL_RED
-	jp Function38568
+	jp PrintText_UsedItemOn_AND_AIUpdateHUD
 ; 384e0
 
 AI_HealStatus: ; 384e0
@@ -765,7 +767,7 @@
 	ld hl, EnemySubStatus4
 	set SUBSTATUS_X_ACCURACY, [hl]
 	ld a, X_ACCURACY
-	jp Function38568
+	jp PrintText_UsedItemOn_AND_AIUpdateHUD
 ; 38504
 
 Function38504: ; 38504
@@ -773,7 +775,7 @@
 	ld hl, EnemySubStatus4
 	set SUBSTATUS_MIST, [hl]
 	ld a, GUARD_SPEC
-	jp Function38568
+	jp PrintText_UsedItemOn_AND_AIUpdateHUD
 ; 38511
 
 Function38511: ; 38511
@@ -781,7 +783,7 @@
 	ld hl, EnemySubStatus4
 	set SUBSTATUS_FOCUS_ENERGY, [hl]
 	ld a, DIRE_HIT
-	jp Function38568
+	jp PrintText_UsedItemOn_AND_AIUpdateHUD
 ; 3851e
 
 Function3851e: ; 3851e
@@ -832,10 +834,14 @@
 	ld b, SP_ATTACK
 	ld a, X_SPECIAL
 
+
+; Parameter
+; a = ITEM_CONSTANT
+; b = BATTLE_CONSTANT (ATTACK, DEFENSE, SPEED, SP_ATTACK, SP_DEFENSE, ACCURACY, EVASION)
 Function38557:
 	ld [wd1f1], a
 	push bc
-	call Function38571
+	call PrintText_UsedItemOn
 	pop bc
 	callba Function361ef
 	jp AIUpdateHUD
@@ -842,13 +848,15 @@
 ; 38568
 
 
-Function38568: ; 38568
+; Parameter
+; a = ITEM_CONSTANT
+PrintText_UsedItemOn_AND_AIUpdateHUD: ; 38568
 	ld [wd1f1], a
-	call Function38571
+	call PrintText_UsedItemOn
 	jp AIUpdateHUD
 ; 38571
 
-Function38571: ; 38571
+PrintText_UsedItemOn: ; 38571
 	ld a, [wd1f1]
 	ld [wd265], a
 	call GetItemName
@@ -856,11 +864,11 @@
 	ld de, wd050
 	ld bc, ITEM_NAME_LENGTH
 	call CopyBytes
-	ld hl, UnknownText_0x3858c
+	ld hl, TextJump_EnemyUsedOn
 	jp PrintText
 ; 3858c
 
-UnknownText_0x3858c: ; 3858c
-	text_jump UnknownText_0x1bcfaf
+TextJump_EnemyUsedOn: ; 3858c
+	text_jump Text_EnemyUsedOn
 	db "@"
 ; 38591
--- a/battle/core.asm
+++ b/battle/core.asm
@@ -63,7 +63,7 @@
 	xor a
 	ld [CurPartyMon], a
 .asm_3c06b
-	call Function3d887
+	call CheckIfPartyHasPkmnToBattleWith
 	jr nz, .asm_3c076
 	ld hl, CurPartyMon
 	inc [hl]
@@ -71,7 +71,7 @@
 
 .asm_3c076
 	ld a, [CurBattleMon]
-	ld [wc71a], a
+	ld [LastPlayerMon], a
 	ld a, [CurPartyMon]
 	ld [CurBattleMon], a
 	inc a
@@ -89,7 +89,7 @@
 	call Function3d57a
 	call Function3da0d
 	call ResetPlayerStatLevels
-	call Function3f26d
+	call SendOutPkmnText
 	call NewBattleMonStatus
 	call BreakAttraction
 	call Function3db5f
@@ -121,7 +121,7 @@
 
 
 
-Function3c0e5: ; 3c0e5
+WildFled_EnemyFled_LinkBattleCanceled: ; 3c0e5
 	call Function30b4
 	ld a, [wd0ee]
 	and $c0
@@ -129,19 +129,22 @@
 	ld [wd0ee], a
 	ld a, [InLinkBattle]
 	and a
-	ld hl, BattleText_0x807bd
+	ld hl, BattleText_WildFled
 	jr z, .asm_3c115
+
 	ld a, [wd0ee]
 	and $c0
 	ld [wd0ee], a
-	ld hl, BattleText_0x807cf
+	ld hl, BattleText_EnemyFled
 	call Function3d2e0
 	jr nc, .asm_3c115
+
 	ld hl, wcd2a
 	bit 4, [hl]
 	jr nz, .asm_3c118
-	ld hl, BattleText_0x81863
 
+	ld hl, BattleText_LinkErrorBattleCanceled
+
 .asm_3c115
 	call StdBattleTextBox
 
@@ -160,6 +163,7 @@
 	ret
 ; 3c12f
 
+
 Function3c12f: ; 3c12f
 .loop
 	call Function3c1bf
@@ -296,9 +300,9 @@
 .asm_3c21e
 	call Function3c8eb
 	call Function3c93c
-	call Function3ca8f
-	call Function3cafb
-	call Function3cb36
+	call HanleDefrost
+	call HandleSafeguard
+	call HandleScreens
 	call Function3de97
 	call Function3dcf9
 	call UpdateBattleMonInParty
@@ -446,7 +450,7 @@
 	ret
 
 .asm_3c30f
-	call Function3c0e5
+	call WildFled_EnemyFled_LinkBattleCanceled
 	scf
 	ret
 ; 3c314
@@ -935,11 +939,11 @@
 Function3c5fe: ; 3c5fe
 	call Function309d
 	call Function3c543
-	jp c, Function3c0e5
+	jp c, WildFled_EnemyFled_LinkBattleCanceled
 	call SetEnemyTurn
 	ld a, $1
 	ld [wc70f], a
-	callab Function38000
+	callab AI_SwitchOrTryItem
 	jr c, .asm_3c62f
 	call Function3c6de
 	call Function3d2e0
@@ -980,7 +984,7 @@
 	xor a
 	ld [wc70f], a
 	call SetEnemyTurn
-	callab Function38000
+	callab AI_SwitchOrTryItem
 	push af
 	call Function3c6cf
 	pop bc
@@ -1004,7 +1008,7 @@
 	jr c, .asm_3c6be
 	call Function309d
 	call Function3c543
-	jp c, Function3c0e5
+	jp c, WildFled_EnemyFled_LinkBattleCanceled
 	call Function3c6de
 	call Function3d2e0
 	ret c
@@ -1528,7 +1532,7 @@
 	call SwitchTurnCore
 	call Function3ddc8
 	call SwitchTurnCore
-	ld hl, BattleText_0x80899
+	ld hl, BattleText_UserRecoveredPPUsing
 	jp StdBattleTextBox
 ; 3ca26
 
@@ -1590,7 +1594,7 @@
 	jp UpdateEnemyMonInParty
 ; 3ca8f
 
-Function3ca8f: ; 3ca8f
+HanleDefrost: ; 3ca8f
 	ld a, [$ffcb]
 	cp $1
 	jr z, .asm_3ca9a
@@ -1648,7 +1652,7 @@
 	jp StdBattleTextBox
 ; 3cafb
 
-Function3cafb: ; 3cafb
+HandleSafeguard: ; 3cafb
 	ld a, [$ffcb]
 	cp $1
 	jr z, .asm_3cb06
@@ -1682,12 +1686,11 @@
 
 .asm_3cb2e
 	ld [hBattleTurn], a
-	ld hl, BattleText_0x808d2
+	ld hl, BattleText_SafeguardFaded
 	jp StdBattleTextBox
-; 3cb36
 
 
-Function3cb36: ; 3cb36
+HandleScreens: ; 3cb36
 	ld a, [$ffcb]
 	cp 1
 	jr z, .Both
@@ -1739,7 +1742,7 @@
 	res SCREENS_LIGHT_SCREEN, [hl]
 	push hl
 	push de
-	ld hl, BattleText_0x808e7
+	ld hl, BattleText_PkmnnLightScreenFell
 	call StdBattleTextBox
 	pop de
 	pop hl
@@ -1850,13 +1853,13 @@
 ; 3cc2d
 
 .WeatherMessages
-	dw BattleText_0x8091f
-	dw BattleText_0x80938
-	dw BattleText_0x80951
+	dw BattleText_RainContinuesToFall
+	dw BattleText_TheSunlightIsStrong
+	dw BattleText_TheSandstormRages
 .WeatherEndedMessages
-	dw BattleText_0x80967
-	dw BattleText_0x8097a
-	dw BattleText_0x8098f
+	dw BattleText_TheRainStopped
+	dw BattleText_TheSunlightFaded
+	dw BattleText_TheSandstormSubsided
 ; 3cc39
 
 Function3cc39: ; 3cc39
@@ -2143,12 +2146,12 @@
 .asm_3cda4
 	call Function3d227
 	call Function3d2e0
-	jp c, Function3c0e5
+	jp c, WildFled_EnemyFled_LinkBattleCanceled
 
 	ld a, $1
 	ld [wd0ec], a
 	call Function3cf4a
-	jp z, Function3c0e5
+	jp z, WildFled_EnemyFled_LinkBattleCanceled
 	jr Function3cdca
 
 .asm_3cdba
@@ -2155,7 +2158,7 @@
 	ld a, $1
 	ld [wd0ec], a
 	call Function3cf4a
-	jp z, Function3c0e5
+	jp z, WildFled_EnemyFled_LinkBattleCanceled
 	xor a
 	ld [wd0ec], a
 	ret
@@ -2356,7 +2359,7 @@
 	hlcoord 9, 7
 	lb bc, 5, 11
 	call ClearBox
-	ld hl, BattleText_0x80a75
+	ld hl, BattleText_PkmnFainted
 	jp StdBattleTextBox
 ; 3cf14
 
@@ -2370,7 +2373,7 @@
 	hlcoord 1, 0
 	lb bc, 4, 10
 	call ClearBox
-	ld hl, BattleText_0x809a8
+	ld hl, BattleText_EnemyPkmnFainted
 	jp StdBattleTextBox
 ; 3cf35
 
@@ -2454,7 +2457,7 @@
 	ld a, b
 	call z, Function3d0ea
 	callab Battle_GetTrainerName
-	ld hl, BattleText_0x809da
+	ld hl, BattleText_EnemyWasDefeated
 	call StdBattleTextBox
 	call IsMobileBattle
 	jr z, .asm_3cff5
@@ -2461,9 +2464,11 @@
 	ld a, [InLinkBattle]
 	and a
 	ret nz
-	ld a, [wcfc0]
+
+	ld a, [InBattleTowerBattle]
 	bit 0, a
 	jr nz, .asm_3d006
+
 	call Function3ebd8
 	ld c, $28
 	call DelayFrames
@@ -2784,7 +2789,7 @@
 .asm_3d190
 	call Function3d227
 	call Function3d2e0
-	jp c, Function3c0e5
+	jp c, WildFled_EnemyFled_LinkBattleCanceled
 	ld a, c
 	and a
 	ret nz
@@ -2791,7 +2796,7 @@
 	ld a, $1
 	ld [wd0ec], a
 	call Function3cf4a
-	jp z, Function3c0e5
+	jp z, WildFled_EnemyFled_LinkBattleCanceled
 	jp Function3cdca
 ; 3d1aa
 
@@ -2840,7 +2845,7 @@
 	and a
 	dec a
 	ret nz
-	ld hl, BattleText_0x80a83
+	ld hl, BattleText_UseNextMon
 	call StdBattleTextBox
 .asm_3d20a
 	lb bc, 1, 7
@@ -2897,7 +2902,7 @@
 .asm_3d26c
 	call ClearSprites
 	ld a, [CurBattleMon]
-	ld [wc71a], a
+	ld [LastPlayerMon], a
 	ld a, [CurPartyMon]
 	ld [CurBattleMon], a
 	call Function3d581
@@ -2909,7 +2914,7 @@
 	call WriteBackup
 	call ClearSGB
 	call Function32f9
-	call Function3f26d
+	call SendOutPkmnText
 	call NewBattleMonStatus
 	call BreakAttraction
 	call Function3db5f
@@ -2925,13 +2930,13 @@
 
 Function3d2b3: ; 3d2b3
 	ld a, [CurBattleMon]
-	ld [wc71a], a
+	ld [LastPlayerMon], a
 	ld a, [CurPartyMon]
 	ld [CurBattleMon], a
 	call Function3d581
 	call Function3da0d
 	call ResetPlayerStatLevels
-	call Function3f26d
+	call SendOutPkmnText
 	call NewBattleMonStatus
 	call BreakAttraction
 	call Function3db5f
@@ -2945,10 +2950,13 @@
 Function3d2e0: ; 3d2e0
 	ld a, [InLinkBattle]
 	cp $4
-	jr nz, .asm_3d2ef
+	jr nz, .asm_3d2ef ; It's not a mobile battle
+
 	ld a, [wcd2b]
 	and a
 	jr z, .asm_3d2ef
+
+; We have a mobile battle and something else happened
 	scf
 	ret
 
@@ -3000,7 +3008,7 @@
 	call Function3d313
 	call Function3d329
 	ret c
-	call Function3d887
+	call CheckIfPartyHasPkmnToBattleWith
 	jr z, .loop
 	xor a
 	ret
@@ -3067,7 +3075,7 @@
 	ld a, 1
 	ld [BattleEnded], a
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	bit 0, a
 	jr nz, .asm_3d3bd
 
@@ -3280,7 +3288,7 @@
 	call Function3d7a0
 	call NewEnemyMonStatus
 	call ResetEnemyStatLevels
-	call Function3d7c7
+	call Function_SetEnemyPkmnAndSendOutAnimation
 	call BreakAttraction
 	call Function3d57a
 	ret
@@ -3299,8 +3307,8 @@
 	call Function3d74b
 	push af
 	call Function3d7a0
-	call Function3d7b8
-	call Function3d7c7
+	call Function_BattleTextEnemySentOut
+	call Function_SetEnemyPkmnAndSendOutAnimation
 	pop af
 	ret c
 	xor a
@@ -3323,8 +3331,8 @@
 	ld a, 1
 	ld [wEnemyIsSwitching], a
 	call Function3d7a0
-	call Function3d7b8
-	jp Function3d7c7
+	call Function_BattleTextEnemySentOut
+	jp Function_SetEnemyPkmnAndSendOutAnimation
 ; 3d533
 
 Function3d533: ; 3d533
@@ -3648,7 +3656,7 @@
 	ld a, [CurPartyMon]
 	push af
 	callab Battle_GetTrainerName
-	ld hl, BattleText_0x80aca
+	ld hl, BattleText_EnemyIsAboutToUseWillPlayerChangePkmn
 	call StdBattleTextBox
 	lb bc, 1, 7
 	call PlaceYesNoBox
@@ -3659,7 +3667,7 @@
 	call PickSwitchMonInBattle
 	jr c, .asm_3d791
 	ld a, [CurBattleMon]
-	ld [wc71a], a
+	ld [LastPlayerMon], a
 	ld a, [CurPartyMon]
 	ld [CurBattleMon], a
 	call ClearPalettes
@@ -3697,14 +3705,14 @@
 	jp Function3ee27
 ; 3d7b8
 
-Function3d7b8: ; 3d7b8
+Function_BattleTextEnemySentOut: ; 3d7b8
 	callab Battle_GetTrainerName
-	ld hl, BattleText_0x80af8
+	ld hl, BattleText_EnemySentOut
 	call StdBattleTextBox
 	jp WaitBGMap
 ; 3d7c7
 
-Function3d7c7: ; 3d7c7
+Function_SetEnemyPkmnAndSendOutAnimation: ; 3d7c7
 	ld a, [TempEnemyMonSpecies]
 	ld [CurPartySpecies], a
 	ld [CurSpecies], a
@@ -3806,7 +3814,7 @@
 ; 3d887
 
 
-Function3d887: ; 3d887
+CheckIfPartyHasPkmnToBattleWith: ; 3d887
 	ld a, [CurPartyMon]
 	ld hl, PartyMon1HP
 	call GetPartyLocation
@@ -3813,6 +3821,7 @@
 	ld a, [hli]
 	or [hl]
 	ret nz
+
 	ld a, [wd264]
 	and a
 	jr nz, .asm_3d8b1
@@ -3823,10 +3832,11 @@
 	add hl, bc
 	ld a, [hl]
 	cp EGG
-	ld hl, BattleText_0x80b26
+	ld hl, BattleText_AnEGGCantBattle
 	jr z, .asm_3d8ae
-	ld hl, BattleText_0x80b0b
 
+	ld hl, BattleText_TheresNoWillToBattle
+
 .asm_3d8ae
 	call StdBattleTextBox
 
@@ -3890,29 +3900,30 @@
 	inc a
 	ld [wd267], a
 	ld a, [hli]
-	ld [$ffb5], a
+	ld [hStringCmpString2 + 0], a
 	ld a, [hl]
-	ld [$ffb6], a
+	ld [hStringCmpString2 + 1], a
 	ld a, [de]
 	inc de
-	ld [$ffb1], a
+	ld [hStringCmpString1 + 0], a
 	ld a, [de]
-	ld [$ffb2], a
+	ld [hStringCmpString1 + 1], a
 	call Function30b4
-	ld de, $ffb5
-	ld hl, $ffb1
+	ld de, hStringCmpString2
+	ld hl, hStringCmpString1
 	ld c, $2
 	call StringCmp
 	jr nc, .asm_3d9a2
+
 	xor a
 	ld [hMultiplicand], a
 	ld a, $20
 	ld [hMultiplier], a
 	call Multiply
-	ld a, [$ffb5]
-	ld [hProduct], a
-	ld a, [$ffb6]
-	ld [hMultiplicand], a
+	ld a, [hProduct + 2]
+	ld [hDividend + 0], a
+	ld a, [hProduct + 3]
+	ld [hDividend + 1], a
 	ld a, [$ffb1]
 	ld b, a
 	ld a, [$ffb2]
@@ -3922,10 +3933,10 @@
 	rr a
 	and a
 	jr z, .asm_3d9a2
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	ld b, $2
 	call Divide
-	ld a, [$ffb5]
+	ld a, [hQuotient + 1]
 	and a
 	jr nz, .asm_3d9a2
 	ld a, [wd267]
@@ -3934,7 +3945,7 @@
 	dec c
 	jr z, .asm_3d97a
 	ld b, $1e
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	add b
 	ld [$ffb6], a
 	jr c, .asm_3d9a2
@@ -3948,15 +3959,15 @@
 	jr nc, .asm_3d9a2
 	ld a, $1
 	ld [wd0ec], a
-	ld hl, BattleText_0x80b3b
+	ld hl, BattleText_CantEscape2
 	jr .asm_3d995
 
 .asm_3d98d
-	ld hl, BattleText_0x80ba0
+	ld hl, BattleText_CantEscape
 	jr .asm_3d995
 
 .asm_3d992
-	ld hl, BattleText_0x80b49
+	ld hl, BattleText_TheresNoEscapeFromTrainerBattle
 
 .asm_3d995
 	call StdBattleTextBox
@@ -4001,7 +4012,7 @@
 	call WaitPlaySFX
 	pop de
 	call WaitSFX
-	ld hl, BattleText_0x80b77
+	ld hl, BattleText_GotAwaySafely
 	call StdBattleTextBox
 	call WaitSFX
 	call Function309d
@@ -4013,7 +4024,7 @@
 	ld hl, wcd2a
 	bit 4, [hl]
 	jr nz, .asm_3da05
-	ld hl, BattleText_0x81863
+	ld hl, BattleText_LinkErrorBattleCanceled
 	call StdBattleTextBox
 
 .asm_3da05
@@ -4172,7 +4183,7 @@
 Function3db32: ; 3db32
 	call ClearSprites
 	ld a, [CurBattleMon]
-	ld [wc71a], a
+	ld [LastPlayerMon], a
 	ld a, [CurPartyMon]
 	ld [CurBattleMon], a
 	call Function3d581
@@ -4341,7 +4352,7 @@
 	and a
 	jr z, .asm_3dc7e
 	ld hl, DoEnemyTurn
-	ld a, [wc71a]
+	ld a, [LastPlayerMon]
 	ld [CurBattleMon], a
 .asm_3dc7e
 	ld a, BANK(DoPlayerTurn)
@@ -4359,7 +4370,7 @@
 	and a
 	jr z, .asm_3dcc0
 
-	ld a, [wc71a]
+	ld a, [LastPlayerMon]
 	call UpdateBattleMon
 	ld hl, BattleMonHP
 	ld a, [hli]
@@ -4376,7 +4387,7 @@
 	ld b, $0
 	predef FlagPredef
 	call Function3d43b
-	ld hl, BattleText_0x80a75
+	ld hl, BattleText_PkmnFainted
 	jr .asm_3dcdf
 
 .asm_3dcc0
@@ -4392,7 +4403,7 @@
 	call PlaySFX
 	call WaitSFX
 	call Function3d432
-	ld hl, BattleText_0x809a8
+	ld hl, BattleText_EnemyPkmnFainted
 
 .asm_3dcdf
 	call StdBattleTextBox
@@ -5003,17 +5014,18 @@
 
 	ld hl, EnemyMonHP
 	ld a, [hli]
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, [hld]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	or [hl]
 	jr nz, .asm_3e0d1
+
 	ld c, a
 	ld e, a
 	ld d, HP_BAR_LENGTH
 	jp .asm_3e11a
-.asm_3e0d1
 
+.asm_3e0d1
 	xor a
 	ld [hMultiplicand], a
 	ld a, HP_BAR_LENGTH_PX
@@ -5032,11 +5044,11 @@
 	rr a
 	srl b
 	rr a
-	ld [hMultiplier], a
-	ld a, [$ffb5]
+	ld [hDivisor], a
+	ld a, [hProduct + 2]
 	ld b, a
 	srl b
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	rr a
 	srl b
 	rr a
@@ -5046,13 +5058,13 @@
 
 .asm_3e105
 	ld a, [$ffb5]
-	ld [hProduct], a
+	ld [hDividend + 0], a
 	ld a, [$ffb6]
-	ld [hMultiplicand], a
+	ld [hDividend + 1], a
 	ld a, $2
 	ld b, a
 	call Divide
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld e, a
 	ld a, HP_BAR_LENGTH
 	ld d, a
@@ -5160,7 +5172,7 @@
 	ld hl, wcd2a
 	bit 4, [hl]
 	jr nz, .error
-	ld hl, BattleText_0x81863
+	ld hl, BattleText_LinkErrorBattleCanceled
 	call StdBattleTextBox
 	ld c, 60
 	call DelayFrames
@@ -5174,7 +5186,7 @@
 	and a
 	jp nz, ItemsCantBeUsed
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	jp nz, ItemsCantBeUsed
 
@@ -5388,10 +5400,10 @@
 	jp Function3e299
 
 .asm_3e381
-	call Function3d887
+	call CheckIfPartyHasPkmnToBattleWith
 	jp z, Function3e299
 	ld a, [CurBattleMon]
-	ld [wc71a], a
+	ld [LastPlayerMon], a
 	ld a, $2
 	ld [wd0ec], a
 	call ClearPalettes
@@ -5437,7 +5449,7 @@
 	jp c, .asm_3e3ca
 	cp $f
 	jr nz, .asm_3e3e9
-	call Function3c0e5
+	call WildFled_EnemyFled_LinkBattleCanceled
 	ret
 
 .asm_3e3e9
@@ -5486,7 +5498,7 @@
 	call Function3d581
 	call Function3da0d
 	call ResetPlayerStatLevels
-	call Function3f26d
+	call SendOutPkmnText
 	call NewBattleMonStatus
 	call BreakAttraction
 	call Function3db5f
@@ -6213,7 +6225,8 @@
 	and a
 	jp nz, Function3dabd
 
-	ld a, [wcfc0] ; ????
+; and also not in a BattleTower-Battle
+	ld a, [InBattleTowerBattle] ; ????
 	bit 0, a
 	jp nz, Function3dabd
 
@@ -7027,25 +7040,25 @@
 	ld b, 0
 	add hl, bc
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld a, [de]
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	inc de
 	ld a, [de]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, [hli]
 	ld [hMultiplier], a
 	call Multiply
 	ld a, [hl]
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
 	pop hl
 
 ; Cap at 999.
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	sub 999 % $100
-	ld a, [$ffb5]
+	ld a, [hQuotient + 1]
 	sbc 999 / $100
 	jp c, .asm_3ed1e
 
@@ -7106,7 +7119,7 @@
 	and a
 	ret nz
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	ret nz
 
@@ -7327,9 +7340,11 @@
 	ld a, [InLinkBattle]
 	and a
 	ret nz
-	ld a, [wcfc0]
+
+	ld a, [InBattleTowerBattle]
 	bit 0, a
 	ret nz
+
 	call Function3f0d4
 	xor a
 	ld [CurPartyMon], a
@@ -7407,15 +7422,15 @@
 	dec c
 	jr nz, .asm_3ee7c
 	xor a
-	ld [hMultiplicand], a
-	ld [$ffb5], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	ld a, [EnemyMonBaseExp]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, [EnemyMonLevel]
 	ld [hMultiplier], a
 	call Multiply
 	ld a, $7
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
 	pop bc
@@ -7957,36 +7972,37 @@
 	ld a, $1
 	ld [hBGMapMode], a
 	ret
-; 3f26d
 
 
 
-Function3f26d: ; 3f26d
-; SendOutMonText?
-
+SendOutPkmnText: ; 3f26d
 	ld a, [InLinkBattle]
 	and a
 	jr z, .asm_3f27c
-	ld hl, UnknownText_0x3f2d1
-	ld a, [wd264]
+
+	ld hl, JumpText_GoPkmn ; If we're in a LinkBattle print just "Go <PlayerMon>"
+
+	ld a, [wd264] ; besides this variable is set. which stands for ???
 	and a
 	jr nz, .asm_3f2ce
 
 .asm_3f27c
+; Depending on the HP of the enemy Pkmn, the game prints a different text
 	ld hl, EnemyMonHP
 	ld a, [hli]
 	or [hl]
-	ld hl, UnknownText_0x3f2d1
+	ld hl, JumpText_GoPkmn
 	jr z, .asm_3f2ce
+
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld hl, EnemyMonHP
 	ld a, [hli]
 	ld [wc6ea], a
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, [hl]
 	ld [wc6eb], a
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, $19
 	ld [hMultiplier], a
 	call Multiply
@@ -7999,19 +8015,19 @@
 	rr b
 	ld a, b
 	ld b, $4
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	call Divide
-	ld a, [$ffb6]
-	ld hl, UnknownText_0x3f2d1
+	ld a, [hQuotient + 2]
+	ld hl, JumpText_GoPkmn
 	cp $46
 	jr nc, .asm_3f2ce
-	ld hl, UnknownText_0x3f2d8
+	ld hl, JumpText_DoItPkmn
 	cp $28
 	jr nc, .asm_3f2ce
-	ld hl, UnknownText_0x3f2df
+	ld hl, JumpText_GoForItPkmn
 	cp $a
 	jr nc, .asm_3f2ce
-	ld hl, UnknownText_0x3f2e6
+	ld hl, JumpText_YourFoesWeakGetmPkmn
 
 .asm_3f2ce
 	jp BattleTextBox
@@ -8018,36 +8034,36 @@
 ; 3f2d1
 
 
-UnknownText_0x3f2d1: ; 3f2d1
-	text_jump UnknownText_0x1c02df
+JumpText_GoPkmn: ; 3f2d1
+	text_jump Text_GoPkmn
 	start_asm
-	jr Function3f2eb
+	jr Function_TextJump_BattleMonNick01
 ; 3f2d6
 
-UnknownText_0x3f2d8: ; 3f2d8
-	text_jump UnknownText_0x1c02e6
+JumpText_DoItPkmn: ; 3f2d8
+	text_jump Text_DoItPkmn
 	start_asm
-	jr Function3f2eb
+	jr Function_TextJump_BattleMonNick01
 ; 3f2dd
 
-UnknownText_0x3f2df: ; 3f2df
-	text_jump UnknownText_0x1c02f0
+JumpText_GoForItPkmn: ; 3f2df
+	text_jump Text_GoForItPkmn
 	start_asm
-	jr Function3f2eb
+	jr Function_TextJump_BattleMonNick01
 ; 3f2e4
 
-UnknownText_0x3f2e6: ; 3f2e6
-	text_jump UnknownText_0x1c02fe
+JumpText_YourFoesWeakGetmPkmn: ; 3f2e6
+	text_jump Text_YourFoesWeakGetmPkmn
 	start_asm
 ; 3f2eb
 
-Function3f2eb: ; 3f2eb
-	ld hl, UnknownText_0x3f2ef
+Function_TextJump_BattleMonNick01: ; 3f2eb
+	ld hl, TextJump_BattleMonNick01
 	ret
 ; 3f2ef
 
-UnknownText_0x3f2ef: ; 3f2ef
-	text_jump UnknownText_0x1c0317
+TextJump_BattleMonNick01: ; 3f2ef
+	text_jump Text_BattleMonNick01
 	db "@"
 ; 3f2f4
 
@@ -8071,12 +8087,12 @@
 	dec hl
 	ld a, [de]
 	sub b
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	dec de
 	ld b, [hl]
 	ld a, [de]
 	sbc b
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, $19
 	ld [hMultiplier], a
 	call Multiply
@@ -8089,11 +8105,11 @@
 	rr b
 	ld a, b
 	ld b, $4
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	call Divide
 	pop bc
 	pop de
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld hl, UnknownText_0x3f348
 	and a
 	ret z
@@ -8256,10 +8272,10 @@
 
 .asm_3f40c
 	ld a, c
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld b, a
 	ld a, $40
 	sub b
@@ -8713,7 +8729,7 @@
 	call Function3d0be
 	ld hl, BattleText_0x80730
 	call StdBattleTextBox
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	bit 0, a
 	ret z
 	call ClearTileMap
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -700,7 +700,7 @@
 	and a
 	ret nz
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	ret nz
 
@@ -1458,37 +1458,37 @@
 	ld [AttackMissed], a
 	xor a
 .asm_34775
-	ld [$ffb7], a
+	ld [hMultiplier], a
 	add b
 	ld [TypeModifier], a
 
 	xor a
-	ld [$ffb4], a
+	ld [hMultiplicand + 0], a
 
 	ld hl, CurDamage
 	ld a, [hli]
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, [hld]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 
 	call Multiply
 
-	ld a, [$ffb4]
+	ld a, [hProduct + 1]
 	ld b, a
-	ld a, [$ffb5]
+	ld a, [hProduct + 2]
 	or b
 	ld b, a
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	or b
 	jr z, .asm_347ab
 
 	ld a, $a
-	ld [$ffb7], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
-	ld a, [$ffb5]
+	ld a, [hQuotient + 1]
 	ld b, a
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	or b
 	jr nz, .asm_347ab
 
@@ -1572,11 +1572,11 @@
 	jr .asm_347e7
 .asm_3480b
 	xor a
-	ld [$ffb3], a
-	ld [$ffb4], a
-	ld [$ffb5], a
+	ld [hDividend + 0], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	ld a, [hli]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, [wd265]
 	ld [hMultiplier], a
 	call Multiply
@@ -1586,7 +1586,7 @@
 	ld b, 4
 	call Divide
 	pop bc
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld [wd265], a
 	jr .asm_347e7
 
@@ -2305,12 +2305,12 @@
 .go
 ; Start with the maximum damage.
 	xor a
-	ld [$ffb4], a
+	ld [hMultiplicand + 0], a
 	dec hl
 	ld a, [hli]
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, [hl]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 
 ; Multiply by 85-100%...
 .loop
@@ -2319,20 +2319,20 @@
 	cp $d9 ; 85%
 	jr c, .loop
 
-	ld [$ffb7], a
+	ld [hMultiplier], a
 	call Multiply
 
 ; ...divide by 100%...
 	ld a, $ff ; 100%
-	ld [$ffb7], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
 
 ; ...to get .85-1.00x damage.
-	ld a, [$ffb5]
+	ld a, [hQuotient + 1]
 	ld hl, CurDamage
 	ld [hli], a
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld [hl], a
 	ret
 ; 34d32
@@ -2594,10 +2594,10 @@
 	sub c
 	ld c, a
 	xor a
-	ld [$ffb4], a
-	ld [$ffb5], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	ld a, [hl]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	push hl
 	ld d, $2
 
@@ -2611,15 +2611,15 @@
 	add hl, bc
 	pop bc
 	ld a, [hli]
-	ld [$ffb7], a
+	ld [hMultiplier], a
 	call Multiply
 	ld a, [hl]
-	ld [$ffb7], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld b, a
-	ld a, [$ffb5]
+	ld a, [hQuotient + 1]
 	or b
 	jr nz, .asm_34ea2
 	ld [$ffb5], a
@@ -3841,7 +3841,7 @@
 	and a
 	jr nz, .asm_35532
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	jr nz, .asm_35532
 
@@ -4344,18 +4344,18 @@
 .asm_3579d
 	xor a
 	ld [$ffb3], a
-	ld [$ffb4], a
+	ld [hMultiplicand + 0], a
 	ld a, [hli]
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, [hli]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, $30
-	ld [$ffb7], a
+	ld [hMultiplier], a
 	call Multiply
 	ld a, [hli]
 	ld b, a
 	ld a, [hl]
-	ld [$ffb7], a
+	ld [hDivisor], a
 	ld a, b
 	and a
 	jr z, .asm_357d6
@@ -4365,22 +4365,22 @@
 	rr a
 	srl b
 	rr a
-	ld [$ffb7], a
-	ld a, [$ffb5]
+	ld [hDivisor], a
+	ld a, [hProduct + 2]
 	ld b, a
 	srl b
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	rr a
 	srl b
 	rr a
-	ld [$ffb6], a
+	ld [hDividend + 3], a
 	ld a, b
-	ld [$ffb5], a
+	ld [hDividend + 2], a
 
 .asm_357d6
 	ld b, $4
 	call Divide
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld b, a
 	ld hl, .FlailPower
 
@@ -5544,7 +5544,7 @@
 
 	call AnimateCurrentMove
 	ld b, $7
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	jr z, .asm_35ea4
 	ld b, $3
@@ -5587,7 +5587,7 @@
 	and a
 	jr nz, .asm_35eec
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	jr nz, .asm_35eec
 
@@ -5676,18 +5676,23 @@
 	call GetBattleVar
 	and a
 	jr nz, .asm_35fb8
+
 	ld a, [hBattleTurn]
 	and a
 	jr z, .asm_35f89
+
 	ld a, [InLinkBattle]
 	and a
 	jr nz, .asm_35f89
-	ld a, [wcfc0]
+
+	ld a, [InBattleTowerBattle]
 	and a
 	jr nz, .asm_35f89
+
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_LOCK_ON, a
 	jr nz, .asm_35f89
+
 	call BattleRandom
 	cp $40
 	jr c, .asm_35fb8
@@ -6323,11 +6328,12 @@
 	ld a, [hBattleTurn]
 	and a
 	jr z, .DidntMiss
+
 	ld a, [InLinkBattle]
 	and a
 	jr nz, .DidntMiss
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	jr nz, .DidntMiss
 
@@ -6868,7 +6874,7 @@
 endr
 
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld a, [de]
 	ld [hMultiplicand + 1], a
 	inc de
@@ -8168,18 +8174,23 @@
 	ld a, [hBattleTurn]
 	and a
 	jr z, .asm_36e0e
+
 	ld a, [InLinkBattle]
 	and a
 	jr nz, .asm_36e0e
-	ld a, [wcfc0]
+
+	ld a, [InBattleTowerBattle]
 	and a
 	jr nz, .asm_36e0e
+
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_LOCK_ON, a
 	jr nz, .asm_36e0e
+
 	call BattleRandom
 	cp $40
 	jr c, .asm_36e52
+
 .asm_36e0e
 	ld a, BATTLE_VARS_STATUS_OPP
 	call GetBattleVarAddr
@@ -9459,7 +9470,7 @@
 	ld hl, EnemyMonHappiness
 .ok
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld [hMultiplicand + 1], a
 	ld a, [hl]
 	ld [hMultiplicand + 2], a
@@ -9584,18 +9595,18 @@
 .asm_3791a
 	ld a, $ff
 	sub [hl]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	xor a
-	ld [$ffb4], a
-	ld [$ffb5], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	ld a, 10
-	ld [$ffb7], a
+	ld [hMultiplier], a
 	call Multiply
 	ld a, 25
-	ld [$ffb7], a
+	ld [hDivisor], a
 	ld b, 4
 	call Divide
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld d, a
 	pop bc
 	ret
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -108,3 +108,8 @@
 	const MOM_ITEM
 	const MOM_DOLL
 
+BATTLETOWER_PKMNSTRUCTLENGTH EQU $30
+BATTLETOWER_NROFPKMNS EQU 3
+BATTLETOWER_TRAINERDATALENGTH EQU $24
+BATTLETOWER_NROFTRAINERS EQU 7
+
--- a/data/battle_tower.asm
+++ b/data/battle_tower.asm
@@ -1,24 +1,31 @@
-Function1f8000: ; 1f8000
+Function_LoadOpponentTrainerAndPokemons: ; 1f8000
 	ld a, [rSVBK]
 	push af
 	ld a, $3
 	ld [rSVBK], a
+	
+	; Fill BT_OTrainer with zeros
 	xor a
-	ld hl, w3_d100
-	ld bc, $00e0
+	ld hl, BT_OTrainer
+	ld bc, BT_OTrainerEnd - BT_OTrainer
 	call ByteFill
+	
+	; Write $ff into the Item-Slots
 	ld a, $ff
-	ld [w3_d100 + $0c], a
-	ld [w3_d100 + $47], a
-	ld [w3_d100 + $82], a
-	ld de, w3_d100
+	ld [BT_OTPkmn1Item], a
+	ld [BT_OTPkmn2Item], a
+	ld [BT_OTPkmn3Item], a
+	
+	; Set BT_OTTrainer as start address to write the following data to
+	ld de, BT_OTrainer
+
 	ld a, [hRandomAdd]
 	ld b, a
-.asm_1f8022
+.asm_1f8022 ; loop to find a random trainer
 	call Random
 	ld a, [hRandomAdd]
 	add b
-	ld b, a
+	ld b, a ; b contains the nr of the trainer
 IF DEF(CRYSTAL11)
 	and $7f
 	cp $46
@@ -28,38 +35,46 @@
 ENDC
 	jr nc, .asm_1f8022
 	ld b, a
-	ld a, BANK(sbe46)
+
+	ld a, BANK(sNrOfBeatenBattleTowerTrainers)
 	call GetSRAMBank
-	ld c, $7
-	ld hl, sbe48
+
+	ld c, BATTLETOWER_NROFTRAINERS
+	ld hl, sBTTrainers
 .asm_1f803a
 	ld a, [hli]
 	cp b
 	jr z, .asm_1f8022
 	dec c
-	jr nz, .asm_1f803a
-	ld hl, sbe48
-	ld a, [sbe46]
+	jr nz, .asm_1f803a ; c <= 7  initialise all 7 trainers?
+
+	ld hl, sBTTrainers
+	ld a, [sNrOfBeatenBattleTowerTrainers]
 	ld c, a
 	ld a, b
 	ld b, 0
 	add hl, bc
 	ld [hl], a
+
 	call CloseSRAM
+
 	push af
+; Copy name (10 bytes) and class (1 byte) of trainer
 	ld hl, BattleTowerTrainers
 	ld bc, 11
 	call AddNTimes
 	ld bc, 11
 	call CopyBytes
-	call Function1f8081
+
+	call Function_LoadRandomBattleTowerPkmn
 	pop af
-	ld hl, Unknown_1f0000
-	ld bc, $0024
+
+	ld hl, BattleTowerTrainerData
+	ld bc, BATTLETOWER_TRAINERDATALENGTH
 	call AddNTimes
-	ld bc, $0024
+	ld bc, BATTLETOWER_TRAINERDATALENGTH
 .asm_1f8070
-	ld a, BANK(Unknown_1f0000)
+	ld a, BANK(BattleTowerTrainerData)
 	call GetFarByte
 	ld [de], a
 	inc hl
@@ -68,20 +83,24 @@
 	ld a, b
 	or c
 	jr nz, .asm_1f8070
+
 	pop af
 	ld [rSVBK], a
+
 	ret
-; 1f8081
 
-Function1f8081: ; 1f8081
-	ld c, $3
+
+Function_LoadRandomBattleTowerPkmn: ; 1f8081
+	ld c, BATTLETOWER_NROFPKMNS
 .loop
 	push bc
-	ld a, BANK(sbe51)
+	ld a, BANK(sBTPkmnPrevTrainer1)
 	call GetSRAMBank
 
-.asm_1f8089
-	ld a, [$d800]
+.FindARandomBattleTowerPkmn
+	; From Which LevelGroup are the Pkmn loaded
+	; a = 1..10
+	ld a, [wBTChoiceOfLvlGroup] ; [$d800]
 	dec a
 	ld hl, BattleTowerMons
 	ld bc, BattleTowerMons2 - BattleTowerMons1
@@ -97,60 +116,65 @@
 	and $1f
 	cp (BattleTowerMons2 - BattleTowerMons1) / ($3b)
 	jr nc, .asm_1f8099
+	; in register 'a' is the chosen Pkmn of the LevelGroup
 
-	ld bc, $3b
+	; Check if Pkmn was already loaded before
+	; Check current and the 2 previous teams
+	; includes check if item is double at the current team
+	ld bc, BATTLETOWER_PKMNSTRUCTLENGTH + $b
 	call AddNTimes
 	ld a, [hli]
 	ld b, a
 	ld a, [hld]
 	ld c, a
-	ld a, [w3_d100 + $0b]
+	ld a, [BT_OTPkmn1]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [w3_d100 + $0c]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn1Item]
 	cp c
-	jr z, .asm_1f8089
-	ld a, [w3_d100 + $46]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn2]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [w3_d100 + $47]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn2Item]
 	cp c
-	jr z, .asm_1f8089
-	ld a, [w3_d100 + $81]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn3]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [w3_d100 + $82]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn3Item]
 	cp c
-	jr z, .asm_1f8089
-	ld a, [sbe51]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevTrainer1]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [sbe52]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevTrainer2]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [sbe53]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevTrainer3]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [sbe54]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevPrevTrainer1]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [sbe55]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevPrevTrainer2]
 	cp b
-	jr z, .asm_1f8089
-	ld a, [sbe56]
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevPrevTrainer3]
 	cp b
-	jr z, .asm_1f8089
+	jr z, .FindARandomBattleTowerPkmn
 
-	ld bc, $3b
+	ld bc, BATTLETOWER_PKMNSTRUCTLENGTH + $b
 	call CopyBytes
+
 	ld a, [wd265]
 	push af
 	push de
-	ld hl, -$3b
+	ld hl, - (BATTLETOWER_PKMNSTRUCTLENGTH + $b)
 	add hl, de
 	ld a, [hl]
 	ld [wd265], a
-	ld bc, $0030
+	ld bc, BATTLETOWER_PKMNSTRUCTLENGTH
 	add hl, bc
 	push hl
 	call GetPokemonName
@@ -159,6 +183,7 @@
 	pop de
 	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
+
 	pop de
 	pop af
 	ld [wd265], a
@@ -166,18 +191,18 @@
 	dec c
 	jp nz, .loop
 
-	ld a, [sbe51]
-	ld [sbe54], a
-	ld a, [sbe52]
-	ld [sbe55], a
-	ld a, [sbe53]
-	ld [sbe56], a
-	ld a, [w3_d100 + $0b]
-	ld [sbe51], a
-	ld a, [w3_d100 + $46]
-	ld [sbe52], a
-	ld a, [w3_d100 + $81]
-	ld [sbe53], a
+	ld a, [sBTPkmnPrevTrainer1]
+	ld [sBTPkmnPrevPrevTrainer1], a
+	ld a, [sBTPkmnPrevTrainer2]
+	ld [sBTPkmnPrevPrevTrainer2], a
+	ld a, [sBTPkmnPrevTrainer3]
+	ld [sBTPkmnPrevPrevTrainer3], a
+	ld a, [BT_OTPkmn1]
+	ld [sBTPkmnPrevTrainer1], a
+	ld a, [BT_OTPkmn2]
+	ld [sBTPkmnPrevTrainer2], a
+	ld a, [BT_OTPkmn3]
+	ld [sBTPkmnPrevTrainer3], a
 	call CloseSRAM
 	ret
 ; 1f814e
--- a/engine/predef.asm
+++ b/engine/predef.asm
@@ -39,7 +39,7 @@
 	add_predef Functiond88c
 	add_predef Functionda96
 	add_predef Functiondb3f ; $8
-	add_predef Functionde6e
+	add_predef SentPkmnIntoBox
 	add_predef GiveEgg
 	add_predef Functionc6e0
 	add_predef Functione167
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -142,9 +142,9 @@
 	add_special Function170215
 	add_special Function1704e1
 	add_special Function17021d
-	add_special Function170b44
+	add_special Function_LoadOpponentTrainerAndPokemonsWithOTSprite
 	add_special Function11ba38
-	add_special Function170bd3
+	add_special SpecialCheckForBattleTowerRules
 	add_special Function117656
 	add_special Reset
 	add_special Function1011f1
@@ -156,7 +156,7 @@
 	add_special Function11c1ab
 	add_special Function170687
 	add_special Special_DisplayUnownWords
-	add_special Function17d224
+	add_special Special_Menu_ChallengeExplanationCancel
 	add_special Function17d2b6
 	add_special Function17d2ce
 	add_special Function17f53d
--- a/hram.asm
+++ b/hram.asm
@@ -31,13 +31,16 @@
 
 hPastLeadingZeroes EQU $ffb3
 
-hDividend          EQU $ffb3
-hDivisor           EQU $ffb7
-hQuotient          EQU $ffb4
+hStringCmpString1  EQU $ffb1
+hStringCmpString2  EQU $ffb5
 
-hMultiplicand      EQU $ffb4
-hMultiplier        EQU $ffb7
-hProduct           EQU $ffb3
+hDividend          EQU $ffb3 ; length in b register, before 'call Divide' (max 4 bytes)
+hDivisor           EQU $ffb7 ; 1 byte long
+hQuotient          EQU $ffb4 ; result (3 bytes long)
+
+hMultiplicand      EQU $ffb4 ; 3 bytes long
+hMultiplier        EQU $ffb7 ; 1 byte long
+hProduct           EQU $ffb3 ; result (4 bytes long)
 
 hMathBuffer        EQU $ffb8
 
--- a/items/item_effects.asm
+++ b/items/item_effects.asm
@@ -273,7 +273,7 @@
 	jp z, .asm_e98e
 
 	ld a, b
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 
 	ld hl, EnemyMonHP
 	ld b, [hl]
@@ -318,9 +318,9 @@
 	sub c
 	ld [hMultiplier], a
 	xor a
-	ld [hProduct], a
-	ld [hMultiplicand], a
-	ld [$ffb5], a
+	ld [hDividend + 0], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	call Multiply
 	pop bc
 
@@ -329,7 +329,7 @@
 	ld b, $4
 	call Divide
 
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	and a
 	jr nz, .statuscheck
 	ld a, 1
@@ -618,7 +618,7 @@
 .asm_eb3c
 	call ClearSprites
 
-	predef Functionde6e
+	predef SentPkmnIntoBox
 
 	callba Function4db83
 
--- a/main.asm
+++ b/main.asm
@@ -2938,7 +2938,7 @@
 
 ; Caught data.
 	ld b, 0
-	callba Function4dba3
+	callba SetPkmnCaughtData
 
 ; Holding a Berry.
 	ld bc, PartyMon2 - PartyMon1
@@ -4464,11 +4464,11 @@
 	jr z, .zero
 	push hl
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld a, b
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, c
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, $30
 	ld [hMultiplier], a
 	call Multiply
@@ -4479,23 +4479,23 @@
 	rr e
 	srl d
 	rr e
-	ld a, [$ffb5]
+	ld a, [hProduct + 2]
 	ld b, a
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	srl b
 	rr a
 	srl b
 	rr a
-	ld [$ffb6], a
+	ld [hDividend + 3], a
 	ld a, b
-	ld [$ffb5], a
+	ld [hDividend + 2], a
 
 .divide
 	ld a, e
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld e, a
 	pop hl
 	and a
@@ -8340,7 +8340,7 @@
 ; db3f
 
 Functiondb3f: ; db3f
-	ld a, $1
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld a, [wd10b]
 	and a
@@ -8799,11 +8799,12 @@
 	call AddNTimes
 	ld bc, sBoxMon1End - sBoxMon1
 	jp CopyBytes
-; de6e
 
 
-Functionde6e: ; de6e
-	ld a, 1 ; BANK(sBoxCount)
+SentPkmnIntoBox: ; de6e
+; Sents the Pkmn into one of Bills Boxes
+; the data comes mainly from 'EnemyMon:'
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld de, sBoxCount
 	ld a, [de]
@@ -8811,6 +8812,7 @@
 	jp nc, Functiondf42
 	inc a
 	ld [de], a
+
 	ld a, [CurPartySpecies]
 	ld [CurSpecies], a
 	ld c, a
@@ -8823,23 +8825,29 @@
 	ld [de], a
 	inc a
 	jr nz, .asm_de85
+
 	call GetBaseData
 	call ShiftBoxMon
+
 	ld hl, PlayerName
 	ld de, sBoxMonOT
 	ld bc, NAME_LENGTH
 	call CopyBytes
+
 	ld a, [CurPartySpecies]
 	ld [wd265], a
 	call GetPokemonName
+
 	ld de, sBoxMonNicknames
 	ld hl, StringBuffer1
 	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
+
 	ld hl, EnemyMon
 	ld de, sBoxMon1
 	ld bc, 1 + 1 + NUM_MOVES ; species + item + moves
 	call CopyBytes
+
 	ld hl, PlayerID
 	ld a, [hli]
 	ld [de], a
@@ -8861,6 +8869,7 @@
 	ld a, [$ffb6]
 	ld [de], a
 	inc de
+
 	xor a
 	ld b, $a
 .asm_dee5
@@ -8868,6 +8877,7 @@
 	inc de
 	dec b
 	jr nz, .asm_dee5
+
 	ld hl, EnemyMonDVs
 	ld b, 2 + NUM_MOVES ; DVs and PP ; EnemyMonHappiness - EnemyMonDVs
 .asm_deef
@@ -8876,6 +8886,7 @@
 	inc de
 	dec b
 	jr nz, .asm_deef
+
 	ld a, BASE_HAPPINESS
 	ld [de], a
 	inc de
@@ -8909,6 +8920,7 @@
 	call CopyBytes
 	ld b, 0
 	call Functiondcb6
+
 	call CloseSRAM
 	scf
 	ret
@@ -9067,7 +9079,7 @@
 	and a
 	jr z, .asm_e04a
 
-	ld a, 1 ; BANK(sBoxCount)
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld hl, sBoxCount
 
@@ -9378,22 +9390,22 @@
 	inc d
 
 .asm_e20f
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, d
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld a, [CurPartyLevel]
 	ld [hMultiplier], a
 	call Multiply
-	ld a, [hMultiplicand]
-	ld [hProduct], a
-	ld a, [$ffb5]
-	ld [hMultiplicand], a
-	ld a, [$ffb6]
-	ld [$ffb5], a
+	ld a, [hProduct + 1]
+	ld [hDividend + 0], a
+	ld a, [hProduct + 2]
+	ld [hDividend + 1], a
+	ld a, [hProduct + 3]
+	ld [hDividend + 2], a
 	ld a, $64
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	ld a, $3
 	ld b, a
 	call Divide
@@ -9403,11 +9415,11 @@
 	jr nz, .asm_e24e
 	ld a, [CurPartyLevel]
 	ld b, a
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	add b
 	ld [$ffb6], a
 	jr nc, .asm_e24c
-	ld a, [$ffb5]
+	ld a, [hQuotient + 1]
 	inc a
 	ld [$ffb5], a
 
@@ -9482,7 +9494,7 @@
 	ld a, [CurPartySpecies]
 	ld [TempEnemyMonSpecies], a
 	callab LoadEnemyMon
-	call Functionde6e
+	call SentPkmnIntoBox
 	jp nc, Functione3d4
 	ld a, $2
 	ld [MonType], a
@@ -9562,11 +9574,11 @@
 	ld [hli], a
 	ld [hl], $e9
 	pop bc
-	callba Function4dba3
+	callba SetPkmnCaughtData
 	jr .asm_e3b2
 
 .asm_e35e
-	ld a, $1
+	ld a, BANK(sBoxMonOT)
 	call GetSRAMBank
 	ld de, sBoxMonOT
 .asm_e366
@@ -9604,7 +9616,7 @@
 	callba Function4db49
 
 .asm_e3a6
-	callba Function4db3b
+	callba GiveANickname_YesNo
 	pop de
 	jr c, .asm_e3b2
 	call Functione3de
@@ -9615,9 +9627,9 @@
 	ld a, b
 	and a
 	ret z
-	ld hl, UnknownText_0xe3d9
+	ld hl, TextJump_WasSentToBillsPC
 	call PrintText
-	ld a, $1
+	ld a, BANK(sBoxMonNicknames)
 	call GetSRAMBank
 	ld hl, wd050
 	ld de, sBoxMonNicknames
@@ -9635,9 +9647,9 @@
 	ret
 ; e3d9
 
-UnknownText_0xe3d9: ; 0xe3d9
+TextJump_WasSentToBillsPC: ; 0xe3d9
 	; was sent to BILL's PC.
-	text_jump UnknownText_0x1c0feb
+	text_jump Text_WasSentToBillsPC
 	db "@"
 ; 0xe3de
 
@@ -9945,7 +9957,7 @@
 	call AddNTimes
 	ld de, TempMonSpecies
 	ld bc, $0020
-	ld a, $1
+	ld a, BANK(sBoxMon1Species)
 	call GetSRAMBank
 	call CopyBytes
 	call CloseSRAM
@@ -9969,7 +9981,7 @@
 	jr .asm_e5f6
 
 .asm_e5f1
-	ld a, $1
+	ld a, BANK(sBoxCount)
 	ld hl, sBoxCount
 
 .asm_e5f6
@@ -25865,11 +25877,11 @@
 
 Function250a9: ; 250a9
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld a, [Buffer1]
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, [Buffer2]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, [wd10c]
 	ld [hMultiplier], a
 	push hl
@@ -35563,7 +35575,7 @@
 
 
 ReadTrainerParty: ; 39771
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	bit 0, a
 	ret nz
 
@@ -35873,7 +35885,7 @@
 ; 3991b
 
 Function3991b: ; 3991b (e:591b)
-	ld hl, $ffb3
+	ld hl, hMultiplicand - 1
 	xor a
 rept 3
 	ld [hli], a
@@ -35886,15 +35898,15 @@
 	ld hl, wc686
 	xor a
 	ld [hli], a
-	ld a, [$ffb5]
+	ld a, [hProduct + 2]
 	ld [hli], a
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	ld [hl], a
 	ret
 
 
 Battle_GetTrainerName:: ; 39939
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	bit 0, a
 	ld hl, wd26b
 	jp nz, CopyTrainerName
@@ -36806,7 +36818,9 @@
 .ApplyLayers
 	ld hl, TrainerClassAttributes + 3
 
-	ld a, [wcfc0]
+	; If we have a battle in BattleTower just load the Attributes of the first TrainerClass (Falkner)
+	; so we have always the same AI, regardless of the loaded cass of trainer
+	ld a, [InBattleTowerBattle]
 	bit 0, a
 	jr nz, .asm_4412f
 
@@ -39624,8 +39638,8 @@
 	add c
 	ld [hld], a
 	xor a
-	ld [hQuotient], a ; $ff00+$b4 (aliases: hMultiplicand)
-	ld [$ffb5], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	ld a, [hl]
 	srl a
 	srl a
@@ -39637,13 +39651,13 @@
 	ld a, [hli]
 	and $f
 	add b
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, 100
-	ld [hDivisor], a ; $ff00+$b7 (aliases: hMultiplier)
+	ld [hMultiplier], a
 	call Multiply
-	ld a, [$ffb5]
+	ld a, [hProduct + 2]
 	ld b, a
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	ld c, a
 	ld e, [hl]
 	add e
@@ -39658,10 +39672,10 @@
 
 Function48d94: ; 48d94 (12:4d94)
 	xor a
-	ld [$ffb3], a
+	ld [hDividend + 0], a
 	ld [hQuotient], a ; $ff00+$b4 (aliases: hMultiplicand)
 	ld a, [hli]
-	ld [$ffb3], a
+	ld [hDividend + 0], a
 	ld a, [hl]
 	ld [hQuotient], a ; $ff00+$b4 (aliases: hMultiplicand)
 	ld a, 100
@@ -39677,7 +39691,7 @@
 	sla b
 	or b
 	ld [hld], a
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld c, 10
 	call SimpleDivide
 	sla b
@@ -42221,7 +42235,7 @@
 	jr nz, .partymon
 
 	; Run CheckOwnMon on each Pokémon in the PC.
-	ld a, 1
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld a, [sBoxCount]
 	and a
@@ -42443,7 +42457,7 @@
 	call Function4a91e
 	dec d
 	jr nz, .asm_4a851
-	ld a, 1
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld a, [sBoxCount]
 	and a
@@ -44546,7 +44560,7 @@
 	pop bc
 	dec d
 	jr nz, .asm_4d88d
-	ld a, $1
+	ld a, BANK(sBoxMon1ID)
 	call GetSRAMBank
 	ld a, [sBoxCount]
 	and a
@@ -44804,7 +44818,7 @@
 	ld de, wd050
 	ld bc, $000b
 	call CopyBytes
-	call Function4db3b
+	call GiveANickname_YesNo
 	jr c, .asm_4da66
 	ld a, [PartyCount]
 	dec a
@@ -44847,7 +44861,7 @@
 ; 4daa3
 
 Function4daa3: ; 4daa3
-	ld a, $1
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld hl, sBoxCount
 	ld a, [hl]
@@ -44868,7 +44882,7 @@
 	ld a, [CurPartySpecies]
 	ld [wd265], a
 	call GetPokemonName
-	call Function4db3b
+	call GiveANickname_YesNo
 	ld hl, StringBuffer1
 	jr c, .asm_4daf7
 	ld a, BOXMON
@@ -44878,7 +44892,7 @@
 	ld hl, wd050
 
 .asm_4daf7
-	ld a, $1
+	ld a, BANK(sBoxMonNicknames)
 	call GetSRAMBank
 	ld de, sBoxMonNicknames
 	ld bc, PKMN_NAME_LENGTH
@@ -44886,13 +44900,13 @@
 	call CloseSRAM
 
 .asm_4db08
-	ld a, $1
+	ld a, BANK(sBoxMon1Level)
 	call GetSRAMBank
 	ld a, [sBoxMon1Level]
 	ld [CurPartyLevel], a
 	call CloseSRAM
 	call Function4db83
-	ld a, $1
+	ld a, BANK(sBoxMon1CaughtLocation)
 	call GetSRAMBank
 	ld hl, sBoxMon1CaughtLocation
 	ld a, [hl]
@@ -44915,13 +44929,13 @@
 ; 4db3b
 
 
-Function4db3b: ; 4db3b
-	ld hl, UnknownText_0x4db44
+GiveANickname_YesNo: ; 4db3b
+	ld hl, TextJump_GiveANickname
 	call PrintText
 	jp YesNoBox
 ; 4db44
 
-UnknownText_0x4db44: ; 0x4db44
+TextJump_GiveANickname: ; 0x4db44
 	; Give a nickname to the @  you received?
 	text_jump UnknownText_0x1c12fc
 	db "@"
@@ -44968,7 +44982,7 @@
 ; 4db83
 
 Function4db83: ; 4db83
-	ld a, $1
+	ld a, BANK(sBoxMon1CaughtLevel)
 	call GetSRAMBank
 	ld hl, sBoxMon1CaughtLevel
 	call Function4db53
@@ -44978,7 +44992,7 @@
 
 Function4db92: ; 4db92
 	push bc
-	ld a, $1
+	ld a, BANK(sBoxMon1CaughtLevel)
 	call GetSRAMBank
 	ld hl, sBoxMon1CaughtLevel
 	pop bc
@@ -44987,7 +45001,7 @@
 	ret
 ; 4dba3
 
-Function4dba3: ; 4dba3
+SetPkmnCaughtData: ; 4dba3
 	ld a, [PartyCount]
 	dec a
 	ld hl, PartyMon1CaughtLevel
@@ -48623,7 +48637,7 @@
 	jr .done
 
 .boxmon
-	ld a, 1 ; BANK(sBoxSpecies)
+	ld a, BANK(sBoxSpecies)
 	call GetSRAMBank
 	ld hl, sBoxSpecies
 	call .done
@@ -49375,11 +49389,11 @@
 	ld b, $4
 	call Divide
 
-	ld a, [hMultiplicand]
+	ld a, [hMultiplicand + 0]
 	push af
-	ld a, [$ffb5]
+	ld a, [hMultiplicand + 1]
 	push af
-	ld a, [$ffb6]
+	ld a, [hMultiplicand + 2]
 	push af
 
 	call Function50eed
@@ -49388,33 +49402,33 @@
 	ld [hMultiplier], a
 	call Multiply
 
-	ld a, [hMultiplicand]
+	ld a, [hProduct + 1]
 	push af
-	ld a, [$ffb5]
+	ld a, [hProduct + 2]
 	push af
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	push af
 	ld a, [hli]
 	push af
 
 	xor a
-	ld [hMultiplicand], a
-	ld [$ffb5], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	ld a, d
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld a, [hli]
 	ld [hMultiplier], a
 	call Multiply
 
 	ld b, [hl]
-	ld a, [$ffb6]
+	ld a, [hProduct + 3]
 	sub b
 	ld [$ffb6], a
 	ld b, $0
-	ld a, [$ffb5]
+	ld a, [hProduct + 2]
 	sbc b
 	ld [$ffb5], a
-	ld a, [hMultiplicand]
+	ld a, [hProduct + 1]
 	sbc b
 	ld [hMultiplicand], a
 
@@ -49468,10 +49482,10 @@
 
 Function50eed: ; 50eed
 	xor a
-	ld [hMultiplicand], a
-	ld [$ffb5], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
 	ld a, d
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 	ld [hMultiplier], a
 	jp Multiply
 ; 50efa
@@ -50156,7 +50170,7 @@
 ; 51322
 
 Function51322: ; 51322
-	ld a, $1
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld hl, sBoxCount
 	call Function513cb
@@ -51399,7 +51413,7 @@
 
 Function80715: ; 80715
 ; Remaining slots in the current box.
-	ld a, 1 ; BANK(sBoxCount)
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld hl, sBoxCount
 	ld a, MONS_PER_BOX
@@ -60873,12 +60887,12 @@
 	db "@"
 ; 0x8b201
 
-Function8b201: ; 8b201
+CheckForBattleTowerRules: ; 8b201
 	ld hl, StringBuffer2
 	ld [hl], "3"
 	inc hl
 	ld [hl], "@"
-	ld de, Unknown_8b215
+	ld de, CheckForBattleTowerRules_FunctionsText
 	call Function8b25b
 	ret z
 	call Function8b231
@@ -60886,29 +60900,29 @@
 	ret
 ; 8b215
 
-Unknown_8b215: ; 8b215
+CheckForBattleTowerRules_FunctionsText: ; 8b215
 	db 4
-	dw Unknown_8b21a
-	dw Unknown_8b222
+	dw CheckForBattleTowerRules_Functions
+	dw CheckForBattleTowerRules_Text
 
-Unknown_8b21a: ; 8b21a
-	dw Function8b2da
+CheckForBattleTowerRules_Functions: ; 8b21a
+	dw Function_PartyCountEq3
 	dw Function8b2e2
 	dw Function8b32a
-	dw Function8b331
+	dw Function_HasPartyAnEgg
 ; 8b222
 
-Unknown_8b222: ; 8b222
-	dw UnknownText_0x8b22c
-	dw UnknownText_0x8b247
-	dw UnknownText_0x8b24c
-	dw UnknownText_0x8b251
-	dw UnknownText_0x8b256
+CheckForBattleTowerRules_Text: ; 8b222
+	dw JumpText_ExcuseMeYoureNotReady
+	dw JumbText_OnlyThreePkmnMayBeEntered
+	dw JumpText_ThePkmnMustAllBeDifferentKinds
+	dw JumpText_ThePkmnMustNotHoldTheSameItems
+	dw JumpText_YouCantTakeAnEgg
 ; 8b22c
 
-UnknownText_0x8b22c: ; 0x8b22c
+JumpText_ExcuseMeYoureNotReady: ; 0x8b22c
 	; Excuse me. You're not ready.
-	text_jump UnknownText_0x1c5944
+	text_jump Text_ExcuseMeYoureNotReady
 	db "@"
 ; 0x8b231
 
@@ -60936,27 +60950,27 @@
 	db "@"
 ; 0x8b247
 
-UnknownText_0x8b247: ; 0x8b247
+JumbText_OnlyThreePkmnMayBeEntered: ; 0x8b247
 	; Only three #MON may be entered.
-	text_jump UnknownText_0x1c59c3
+	text_jump Text_OnlyThreePkmnMayBeEntered
 	db "@"
 ; 0x8b24c
 
-UnknownText_0x8b24c: ; 0x8b24c
+JumpText_ThePkmnMustAllBeDifferentKinds: ; 0x8b24c
 	; The @  #MON must all be different kinds.
-	text_jump UnknownText_0x1c59e5
+	text_jump Text_ThePkmnMustAllBeDifferentKinds
 	db "@"
 ; 0x8b251
 
-UnknownText_0x8b251: ; 0x8b251
+JumpText_ThePkmnMustNotHoldTheSameItems: ; 0x8b251
 	; The @  #MON must not hold the same items.
-	text_jump UnknownText_0x1c5a13
+	text_jump Text_ThePkmnMustNotHoldTheSameItems
 	db "@"
 ; 0x8b256
 
-UnknownText_0x8b256: ; 0x8b256
+JumpText_YouCantTakeAnEgg: ; 0x8b256
 	; You can't take an EGG!
-	text_jump UnknownText_0x1c5a42
+	text_jump Text_YouCantTakeAnEgg
 	db "@"
 ; 0x8b25b
 
@@ -61085,7 +61099,7 @@
 	ret
 ; 8b2da
 
-Function8b2da: ; 8b2da
+Function_PartyCountEq3: ; 8b2da
 	ld a, [PartyCount]
 	cp 3
 	ret z
@@ -61169,7 +61183,7 @@
 	ret
 ; 8b331
 
-Function8b331: ; 8b331
+Function_HasPartyAnEgg: ; 8b331
 	ld hl, PartyCount
 	ld a, [hli]
 	ld c, a
@@ -87382,12 +87396,12 @@
 
 .ApplyModifier
 	xor a
-	ld [hMultiplicand], a
+	ld [hMultiplicand + 0], a
 	ld hl, CurDamage
 	ld a, [hli]
-	ld [$ffb5], a
+	ld [hMultiplicand + 1], a
 	ld a, [hl]
-	ld [$ffb6], a
+	ld [hMultiplicand + 2], a
 
 	inc de
 	ld a, [de]
@@ -87396,18 +87410,18 @@
 	call Multiply
 
 	ld a, 10
-	ld [hMultiplier], a
+	ld [hDivisor], a
 	ld b, $4
 	call Divide
 
-	ld a, [hMultiplicand]
+	ld a, [hQuotient + 0]
 	and a
 	ld bc, $ffff
 	jr nz, .Update
 
-	ld a, [$ffb5]
+	ld a, [hQuotient + 1]
 	ld b, a
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld c, a
 	or b
 	jr nz, .Update
@@ -87441,7 +87455,7 @@
 	and a
 	ret nz
 
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	and a
 	ret nz
 
@@ -87759,7 +87773,7 @@
 	jr c, .asm_fcd1c
 	ld b, 1
 .asm_fcd1c
-	callba Function4dba3
+	callba SetPkmnCaughtData
 
 	ld e, TRADE_NICK
 	call GetTradeAttribute
@@ -93532,7 +93546,8 @@
 
 SECTION "bank7C", ROMX, BANK[$7C]
 
-Unknown_1f0000::
+BattleTowerTrainerData:: ; What exactly it is, I don't know
+; Size is 70 (Nr of Trainers in BattleTower) * 0x24 (Nr of Bytes that are copied)
 INCBIN "unknown/1f0000.bin"
 
 
--- a/maps/BattleTower1F.asm
+++ b/maps/BattleTower1F.asm
@@ -41,10 +41,10 @@
 
 MapBattleTower1FSignpost0Script:
 	loadfont
-	writetext UnknownText_0x9ed3c
+	writetext Text_ReadBattleTowerRules
 	yesorno
 	iffalse UnknownScript_0x9e3e0
-	writetext UnknownText_0x9ed72
+	writetext Text_BattleTowerRules
 	closetext
 UnknownScript_0x9e3e0:
 	loadmovesprites
@@ -55,41 +55,41 @@
 	special Function170687
 	if_equal $3, BattleTowerBattleRoomScript_0x9f4e4
 	loadfont
-	writetext UnknownText_0x9e5ab
+	writetext Text_BattleTowerWelcomesYou
 	keeptextopen
 	writebyte $0
 	special Function170687
-	if_not_equal $0, UnknownScript_0x9e3fc
-	jump UnknownScript_0x9e49e
+	if_not_equal $0, Script_Menu_ChallengeExplanationCancel
+	jump Script_BattleTowerIntroductionYesNo
 
-UnknownScript_0x9e3fc:
-	writetext UnknownText_0x9e5ea
+Script_Menu_ChallengeExplanationCancel: ; 0x9e3fc
+	writetext Text_WantToGoIntoABattleRoom
 	writebyte $1
-	special Function17d224
-	if_equal $1, UnknownScript_0x9e40f
-	if_equal $2, UnknownScript_0x9e4a5
+	special Special_Menu_ChallengeExplanationCancel
+	if_equal $1, Script_ChoseChallenge
+	if_equal $2, Script_BattleTowerExplanation
 	jump UnknownScript_0x9e4b0
 
-UnknownScript_0x9e40f:
+Script_ChoseChallenge: ; 0x9e40f
 	writebyte $1a
 	special Function170687
-	special Function170bd3
-	if_not_equal $0, UnknownScript_0x9e4bb
-	writetext UnknownText_0x9ef1f
+	special SpecialCheckForBattleTowerRules
+	if_not_equal $0, Script_CloseText
+	writetext Text_SaveBeforeEnteringBattleRoom
 	yesorno
-	iffalse UnknownScript_0x9e3fc
+	iffalse Script_Menu_ChallengeExplanationCancel
 	dotrigger $0
 	special Special_TryQuickSave
-	iffalse UnknownScript_0x9e3fc
+	iffalse Script_Menu_ChallengeExplanationCancel
 	dotrigger $1
 	writebyte $1
 	special Function170687
 	special Function1700b0
-	if_equal $a, UnknownScript_0x9e3fc
+	if_equal $a, Script_Menu_ChallengeExplanationCancel
 	if_not_equal $0, UnknownScript_0x9e550
 	writebyte $11
 	special Function170687
-	writetext UnknownText_0x9e60a
+	writetext Text_RightThisWayToYourBattleRoom
 	closetext
 	loadmovesprites
 	writebyte $1e
@@ -116,39 +116,39 @@
 	warpcheck
 	end
 
-UnknownScript_0x9e47a:
+Script_GivePlayerHisPrize: ; 0x9e47a
 	writebyte $1c
 	special Function170687
 	writebyte $1b
 	special Function170687
-	if_equal $12, UnknownScript_0x9e498
+	if_equal $12, Script_YourPackIsStuffedFull
 	itemtotext $0, $1
 	giveitem $ff, $5
-	writetext UnknownText_0x9eb7e
+	writetext Text_PlayerGotFive
 	writebyte $1d
 	special Function170687
 	loadmovesprites
 	end
 
-UnknownScript_0x9e498:
-	writetext UnknownText_0x9eb94
+Script_YourPackIsStuffedFull: ; 0x9e498
+	writetext Text_YourPackIsStuffedFull
 	closetext
 	loadmovesprites
 	end
 
-UnknownScript_0x9e49e:
-	writetext UnknownText_0x9ec3d
+Script_BattleTowerIntroductionYesNo: ; 0x9e49e
+	writetext Text_WouldYouLikeToHearAboutTheBattleTower
 	yesorno
 	iffalse UnknownScript_0x9e4a8
-UnknownScript_0x9e4a5:
-	writetext UnknownText_0x9e886
+Script_BattleTowerExplanation: ; 0x9e4a5
+	writetext Text_BattleTowerIntroduction_2
 UnknownScript_0x9e4a8:
 	writebyte $1
 	special Function170687
-	jump UnknownScript_0x9e3fc
+	jump Script_Menu_ChallengeExplanationCancel
 
 UnknownScript_0x9e4b0:
-	writetext UnknownText_0x9ec09
+	writetext Text_WeHopeToServeYouAgain
 	closetext
 	loadmovesprites
 	end
@@ -158,7 +158,7 @@
 	loadmovesprites
 	end
 
-UnknownScript_0x9e4bb:
+Script_CloseText: ; 0x9e4bb
 	closetext
 	loadmovesprites
 	end
@@ -165,19 +165,19 @@
 
 
 UnknownScript_0x9e4be:
-	writetext UnknownText_0x9ef1f
+	writetext Text_SaveBeforeEnteringBattleRoom
 	yesorno
-	iffalse UnknownScript_0x9e3fc
+	iffalse Script_Menu_ChallengeExplanationCancel
 	special Special_TryQuickSave
-	iffalse UnknownScript_0x9e3fc
+	iffalse Script_Menu_ChallengeExplanationCancel
 	writebyte $1
 	special Function170687
 	special Function1700ba
-	if_equal $a, UnknownScript_0x9e3fc
+	if_equal $a, Script_Menu_ChallengeExplanationCancel
 	if_not_equal $0, UnknownScript_0x9e550
-	writetext UnknownText_0x9e9eb
+	writetext Text_ReceivedAListOfLeadersOnTheHonorRoll
 	spriteface $2, LEFT
-	writetext UnknownText_0x9ea1b
+	writetext Text_PleaseConfirmOnThisMonitor
 	closetext
 	spriteface $2, DOWN
 	loadmovesprites
@@ -186,12 +186,12 @@
 UnknownScript_0x9e4ea:
 	writebyte $18
 	special Function170687
-	if_not_equal $0, UnknownScript_0x9e542
+	if_not_equal $0, Script_APkmnLevelExceeds
 	writebyte $19
 	special Function170687
-	if_not_equal $0, UnknownScript_0x9e549
-	special Function170bd3
-	if_not_equal $0, UnknownScript_0x9e4bb
+	if_not_equal $0, Script_MayNotEnterABattleRoomUnderL70
+	special SpecialCheckForBattleTowerRules
+	if_not_equal $0, Script_CloseText
 	writebyte $5
 	special Function170687
 	if_equal $0, UnknownScript_0x9e512
@@ -202,19 +202,19 @@
 	writetext UnknownText_0x9ec6d
 UnknownScript_0x9e515:
 	yesorno
-	iffalse UnknownScript_0x9e3fc
+	iffalse Script_Menu_ChallengeExplanationCancel
 	writetext UnknownText_0x9ef79
 	yesorno
-	iffalse UnknownScript_0x9e3fc
+	iffalse Script_Menu_ChallengeExplanationCancel
 	dotrigger $0
 	special Special_TryQuickSave
-	iffalse UnknownScript_0x9e3fc
+	iffalse Script_Menu_ChallengeExplanationCancel
 	dotrigger $1
 	writebyte $6
 	special Function170687
 	writebyte $12
 	special Function170687
-	writetext UnknownText_0x9e60a
+	writetext Text_RightThisWayToYourBattleRoom
 	closetext
 	jump UnknownScript_0x9e44e
 
@@ -223,15 +223,15 @@
 	closetext
 	jump UnknownScript_0x9e4b0
 
-UnknownScript_0x9e542:
-	writetext UnknownText_0x9f1e5
+Script_APkmnLevelExceeds: ; 0x9e542
+	writetext Text_APkmnLevelExceeds
 	closetext
-	jump UnknownScript_0x9e3fc
+	jump Script_Menu_ChallengeExplanationCancel
 
-UnknownScript_0x9e549:
-	writetext UnknownText_0x9f217
+Script_MayNotEnterABattleRoomUnderL70: ; 0x9e549
+	writetext Text_MayNotEnterABattleRoomUnderL70
 	closetext
-	jump UnknownScript_0x9e3fc
+	jump Script_Menu_ChallengeExplanationCancel
 
 UnknownScript_0x9e550:
 	special Function17f53d
@@ -247,7 +247,7 @@
 YoungsterScript_0x9e55d:
 	faceplayer
 	loadfont
-	writetext UnknownText_0x9f264
+	writetext Text_BattleTowerYoungster
 	closetext
 	loadmovesprites
 	spriteface $3, RIGHT
@@ -254,13 +254,13 @@
 	end
 
 CooltrainerFScript_0x9e568:
-	jumptextfaceplayer UnknownText_0x9f2a4
+	jumptextfaceplayer Text_BattleTowerCooltrainerF
 
 BugCatcherScript_0x9e56b:
-	jumptextfaceplayer UnknownText_0x9f35b
+	jumptextfaceplayer Text_BattleTowerBugCatcher
 
 GrannyScript_0x9e56e:
-	jumptextfaceplayer UnknownText_0x9f2e3
+	jumptextfaceplayer Text_BattleTowerGranny
 
 MovementData_0x9e571:
 	step_up
@@ -346,7 +346,7 @@
 	turn_head_right
 	step_end
 
-UnknownText_0x9e5ab:
+Text_BattleTowerWelcomesYou: ; 0x9e5ab
 	text "BATTLE TOWER"
 	line "welcomes you!"
 
@@ -354,17 +354,17 @@
 	line "to a BATTLE ROOM."
 	done
 
-UnknownText_0x9e5ea:
+Text_WantToGoIntoABattleRoom: ; 0x9e5ea
 	text "Want to go into a"
 	line "BATTLE ROOM?"
 	done
 
-UnknownText_0x9e60a:
+Text_RightThisWayToYourBattleRoom: ; 0x9e60a
 	text "Right this way to"
 	line "your BATTLE ROOM."
 	done
 
-UnknownText_0x9e62f:
+Text_BattleTowerIntroduction_1: ; 0x9e62f
 	text "BATTLE TOWER is a"
 	line "facility made for"
 	cont "#MON battles."
@@ -424,7 +424,7 @@
 	para ""
 	done
 
-UnknownText_0x9e886:
+Text_BattleTowerIntroduction_2: ; 0x9e886
 	text "BATTLE TOWER is a"
 	line "facility made for"
 	cont "#MON battles."
@@ -460,7 +460,7 @@
 	para ""
 	done
 
-UnknownText_0x9e9eb:
+Text_ReceivedAListOfLeadersOnTheHonorRoll: ; 0x9e9eb
 	text "Received a list of"
 	line "LEADERS on the"
 	cont "HONOR ROLL."
@@ -468,18 +468,18 @@
 	para ""
 	done
 
-UnknownText_0x9ea1b:
+Text_PleaseConfirmOnThisMonitor: ; 0x9ea1b
 	text "Please confirm on"
 	line "this monitor."
 	done
 
-UnknownText_0x9ea3c:
+Text_ThankYou: ; 0x9ea3c
 	text "Thank you!"
 
 	para ""
 	done
 
-UnknownText_0x9ea49:
+Text_ThanksForVisiting: ; 0x9ea49
 	text "Thanks for"
 	line "visiting!"
 	done
@@ -502,7 +502,7 @@
 	para ""
 	done
 
-UnknownText_0x9eaef:
+Text_CongratulationsYouveBeatenAllTheTrainers: ; 0x9eaef
 	text "Congratulations!"
 
 	para "You've beaten all"
@@ -522,7 +522,7 @@
 	line "CENTER?"
 	done
 
-UnknownText_0x9eb7e:
+Text_PlayerGotFive: ; 0x9eb7e
 	text "<PLAYER> got five"
 	line "@"
 	text_from_ram StringBuffer4
@@ -531,7 +531,7 @@
 	text_waitbutton
 	db "@"
 
-UnknownText_0x9eb94:
+Text_YourPackIsStuffedFull: ; 0x9eb94
 	text "Oops, your PACK is"
 	line "stuffed full."
 
@@ -539,7 +539,7 @@
 	line "and come back."
 	done
 
-UnknownText_0x9ebd6:
+Text_YourRegistrationIsComplete: ; 0x9ebd6
 	text "Your registration"
 	line "is complete."
 
@@ -546,17 +546,17 @@
 	para "Please come again!"
 	done
 
-UnknownText_0x9ec09:
+Text_WeHopeToServeYouAgain: ; 0x9ec09
 	text "We hope to serve"
 	line "you again."
 	done
 
-UnknownText_0x9ec26:
+Text_PleaseStepThisWay: ; 0x9ec26
 	text "Please step this"
 	line "way."
 	done
 
-UnknownText_0x9ec3d:
+Text_WouldYouLikeToHearAboutTheBattleTower: ; 0x9ec3d
 	text "Would you like to"
 	line "hear about the"
 	cont "BATTLE TOWER?"
@@ -582,12 +582,12 @@
 	cont "deleted. OK?"
 	done
 
-UnknownText_0x9ed1e:
+Text_CheckTheLeaderHonorRoll: ; 0x9ed1e
 	text "Check the LEADER"
 	line "HONOR ROLL?"
 	done
 
-UnknownText_0x9ed3c:
+Text_ReadBattleTowerRules: ; 0x9ed3c
 	text "BATTLE TOWER rules"
 	line "are written here."
 
@@ -594,7 +594,7 @@
 	para "Read the rules?"
 	done
 
-UnknownText_0x9ed72:
+Text_BattleTowerRules: ; 0x9ed72
 	text "Three #MON may"
 	line "enter battles."
 
@@ -626,13 +626,13 @@
 	line "invalid."
 	done
 
-UnknownText_0x9ee92:
+Text_YourPkmnWillBeHealedToFullHealth: ; 0x9ee92
 	text "Your #MON will"
 	line "be healed to full"
 	cont "health."
 	done
 
-UnknownText_0x9eebc:
+Text_NextUpOpponentNo: ; 0x9eebc
 	text "Next up, opponent"
 	line "no.@"
 	text_from_ram StringBuffer3
@@ -647,7 +647,7 @@
 	line "the CENTER."
 	done
 
-UnknownText_0x9ef1f:
+Text_SaveBeforeEnteringBattleRoom: ; 0x9ef1f
 	text "Before entering"
 	line "the BATTLE ROOM,"
 
@@ -655,7 +655,7 @@
 	line "be saved."
 	done
 
-UnknownText_0x9ef5e:
+Text_SaveAndEndTheSession: ; 0x9ef5e
 	text "SAVE and end the"
 	line "session?"
 	done
@@ -668,7 +668,7 @@
 	line "the previous ROOM."
 	done
 
-UnknownText_0x9efbf:
+Text_CancelYourBattleRoomChallenge: ; 0x9efbf
 	text "Cancel your BATTLE"
 	line "ROOM challenge?"
 	done
@@ -699,7 +699,7 @@
 	line "tomorrow."
 	done
 
-UnknownText_0x9f0c1:
+Text_TooMuchTimeElapsedNoRegister: ; 0x9f0c1
 	text "Sorry, but it's"
 	line "not possible to"
 
@@ -730,7 +730,7 @@
 	cont "challenge."
 	done
 
-UnknownText_0x9f1e5:
+Text_APkmnLevelExceeds: ; 0x9f1e5
 	text "One or more of"
 	line "your #MON's"
 	cont "levels exceeds @"
@@ -738,7 +738,7 @@
 	text "."
 	done
 
-UnknownText_0x9f217:
+Text_MayNotEnterABattleRoomUnderL70: ; 0x9f217
 	text_from_ram wcd49
 	text " may not"
 	line "enter a BATTLE"
@@ -750,7 +750,7 @@
 	text "."
 	done
 
-UnknownText_0x9f264:
+Text_BattleTowerYoungster: ; 0x9f264
 	text "Destroyed by the"
 	line "first opponent in"
 
@@ -758,7 +758,7 @@
 	line "I'm no good…"
 	done
 
-UnknownText_0x9f2a4:
+Text_BattleTowerCooltrainerF: ; 0x9f2a4
 	text "There are lots of"
 	line "BATTLE ROOMS, but"
 
@@ -766,7 +766,7 @@
 	line "them all!"
 	done
 
-UnknownText_0x9f2e3:
+Text_BattleTowerGranny: ; 0x9f2e3
 	text "It's a grueling"
 	line "task, not being"
 
@@ -780,7 +780,7 @@
 	line "winning battles."
 	done
 
-UnknownText_0x9f35b:
+Text_BattleTowerBugCatcher: ; 0x9f35b
 	text "I'm trying to see"
 	line "how far I can go"
 
--- a/maps/BattleTowerBattleRoom.asm
+++ b/maps/BattleTowerBattleRoom.asm
@@ -3,25 +3,25 @@
 	db 2
 
 	; triggers
-	dw UnknownScript_0x9f419, $0000
+	dw Script_EnterBattleRoom, $0000
 	dw UnknownScript_0x9f420, $0000
 
 .MapCallbacks:
 	db 0
 
-UnknownScript_0x9f419:
+Script_EnterBattleRoom: ; 0x9f419
 	disappear $2
-	priorityjump UnknownScript_0x9f421
+	priorityjump Script_BattleRoom
 	dotrigger $1
-
 UnknownScript_0x9f420:
 	end
 
-UnknownScript_0x9f421:
+Script_BattleRoom: ; 0x9f421
 	applymovement PLAYER, MovementData_0x9e58c
-UnknownScript_0x9f425:
+; beat all 7 opponents in a row
+Script_BattleRoomLoop: ; 0x9f425
 	writebyte $2
-	special Function170b44
+	special Function_LoadOpponentTrainerAndPokemonsWithOTSprite
 	appear $2
 	warpsound
 	waitbutton
@@ -30,12 +30,12 @@
 	storetext 1
 	keeptextopen
 	loadmovesprites
-	special Function170215
+	special Function170215 ; calls predef startbattle
 	special FadeBlackBGMap
 	reloadmap
 	if_not_equal $0, UnknownScript_0x9f4c2
-	copybytetovar wcf64
-	if_equal $7, UnknownScript_0x9f4d9
+	copybytetovar wNrOfBeatenBattleTowerTrainers ; wcf64
+	if_equal BATTLETOWER_NROFTRAINERS, Script_BeatenAllTrainers
 	applymovement $2, MovementData_0x9e597
 	warpsound
 	disappear $2
@@ -42,7 +42,7 @@
 	applymovement $3, MovementData_0x9e59c
 	applymovement PLAYER, MovementData_0x9e5a7
 	loadfont
-	writetext UnknownText_0x9ee92
+	writetext Text_YourPkmnWillBeHealedToFullHealth
 	closetext
 	loadmovesprites
 	playmusic MUSIC_HEAL
@@ -52,19 +52,19 @@
 	special FadeInBGMap
 	special RestartMapMusic
 	loadfont
-	writetext UnknownText_0x9eebc
+	writetext Text_NextUpOpponentNo
 	yesorno
-	iffalse UnknownScript_0x9f483
-UnknownScript_0x9f477:
+	iffalse Script_DontBattleNextOpponent
+Script_ContinueAndBattleNextOpponent: ; 0x9f477
 	loadmovesprites
 	applymovement PLAYER, MovementData_0x9e5a9
 	applymovement $3, MovementData_0x9e5a1
-	jump UnknownScript_0x9f425
+	jump Script_BattleRoomLoop
 
-UnknownScript_0x9f483:
-	writetext UnknownText_0x9ef5e
+Script_DontBattleNextOpponent: ; 0x9f483
+	writetext Text_SaveAndEndTheSession
 	yesorno
-	iffalse UnknownScript_0x9f4a3
+	iffalse Script_DontSaveAndEndTheSession
 	writebyte $7
 	special Function170687
 	writebyte $1f
@@ -75,10 +75,10 @@
 	waitbutton
 	special FadeBlackBGMap
 	special Reset
-UnknownScript_0x9f4a3:
-	writetext UnknownText_0x9efbf
+Script_DontSaveAndEndTheSession: ; 0x9f4a3
+	writetext Text_CancelYourBattleRoomChallenge
 	yesorno
-	iffalse UnknownScript_0x9f477
+	iffalse Script_ContinueAndBattleNextOpponent
 	writebyte $4
 	special Function170687
 	writebyte $6
@@ -96,25 +96,25 @@
 	writebyte $4
 	special Function170687
 	loadfont
-	writetext UnknownText_0x9ea49
+	writetext Text_ThanksForVisiting
 	closetext
 	loadmovesprites
 	end
 
-UnknownScript_0x9f4d9:
+Script_BeatenAllTrainers: ; 0x9f4d9
 	pause 60
 	special Special_BattleTowerFade
 	warpfacing $1, BATTLE_TOWER_1F, $7, $7
 BattleTowerBattleRoomScript_0x9f4e4:
 	loadfont
-	writetext UnknownText_0x9eaef
-	jump UnknownScript_0x9e47a
+	writetext Text_CongratulationsYouveBeatenAllTheTrainers
+	jump Script_GivePlayerHisPrize
 
 UnknownScript_0x9f4eb:
 	writebyte $4
 	special Function170687
 	loadfont
-	writetext UnknownText_0x9f0c1
+	writetext Text_TooMuchTimeElapsedNoRegister
 	closetext
 	loadmovesprites
 	end
@@ -125,8 +125,8 @@
 	writebyte $6
 	special Function170687
 	loadfont
-	writetext UnknownText_0x9ea49
-	writetext UnknownText_0x9ec09
+	writetext Text_ThanksForVisiting
+	writetext Text_WeHopeToServeYouAgain
 	closetext
 	loadmovesprites
 	end
--- a/maps/BattleTowerHallway.asm
+++ b/maps/BattleTowerHallway.asm
@@ -12,7 +12,6 @@
 UnknownScript_0x9f5bb:
 	priorityjump UnknownScript_0x9f5c1
 	dotrigger $1
-
 UnknownScript_0x9f5c0:
 	end
 
@@ -19,7 +18,7 @@
 UnknownScript_0x9f5c1:
 	follow $2, PLAYER
 	callasm Function_0x9f5cb
-	jump UnknownScript_0x9f5dc
+	jump Script_WalkToChosenBattleRoom
 
 
 Function_0x9f5cb:
@@ -28,7 +27,7 @@
 
 	ld a, 3
 	ld [rSVBK], a
-	ld a, [w3_d800]
+	ld a, [wBTChoiceOfLvlGroup]
 	ld [ScriptVar], a
 
 	pop af
@@ -36,38 +35,41 @@
 	ret
 
 
-UnknownScript_0x9f5dc:
-	if_equal $3, UnknownScript_0x9f603
-	if_equal $4, UnknownScript_0x9f603
-	if_equal $5, UnknownScript_0x9f60a
-	if_equal $6, UnknownScript_0x9f60a
-	if_equal $7, UnknownScript_0x9f611
-	if_equal $8, UnknownScript_0x9f611
-	if_equal $9, UnknownScript_0x9f618
-	if_equal $a, UnknownScript_0x9f618
+; enter different rooms for different levels to battle against
+; at least it should look like that
+; because all warps lead to the same room
+Script_WalkToChosenBattleRoom: ; 0x9f5dc
+	if_equal 3, Script_WalkToBattleRoomL30L40
+	if_equal 4, Script_WalkToBattleRoomL30L40
+	if_equal 5, Script_WalkToBattleRoomL50L60
+	if_equal 6, Script_WalkToBattleRoomL50L60
+	if_equal 7, Script_WalkToBattleRoomL70L80
+	if_equal 8, Script_WalkToBattleRoomL70L80
+	if_equal 9, Script_WalkToBattleRoomL90L100
+	if_equal 10, Script_WalkToBattleRoomL90L100
 	applymovement $2, MovementData_0x9e57a
-	jump UnknownScript_0x9f61f
+	jump Script_PlayerEntersBattleRoom
 
-UnknownScript_0x9f603:
+Script_WalkToBattleRoomL30L40: ; 0x9f603
 	applymovement $2, MovementData_0x9e57c
-	jump UnknownScript_0x9f61f
+	jump Script_PlayerEntersBattleRoom
 
-UnknownScript_0x9f60a:
+Script_WalkToBattleRoomL50L60: ; 0x9f60a
 	applymovement $2, MovementData_0x9e586
-	jump UnknownScript_0x9f61f
+	jump Script_PlayerEntersBattleRoom
 
-UnknownScript_0x9f611:
+Script_WalkToBattleRoomL70L80: ; 0x9f611
 	applymovement $2, MovementData_0x9e584
-	jump UnknownScript_0x9f61f
+	jump Script_PlayerEntersBattleRoom
 
-UnknownScript_0x9f618:
+Script_WalkToBattleRoomL90L100: ; 0x9f618
 	applymovement $2, MovementData_0x9e582
-	jump UnknownScript_0x9f61f
+	jump Script_PlayerEntersBattleRoom
 
-UnknownScript_0x9f61f:
+Script_PlayerEntersBattleRoom: ; 0x9f61f
 	faceperson PLAYER, $2
 	loadfont
-	writetext UnknownText_0x9ec26
+	writetext Text_PleaseStepThisWay
 	closetext
 	loadmovesprites
 	stopfollow
--- a/misc/mobile_45.asm
+++ b/misc/mobile_45.asm
@@ -9728,22 +9728,22 @@
 	ld [wcd3c], a
 	call Function119ed8
 	jp Function119e2e
-; 11891c (46:491c)
 
+
 Function11891c: ; 11891c
 	call Function118b42
 	jp Function119e2e
-; 118922
 
+
 Function118922: ; 118922
 	ld a, [wcd38]
 	and a
 	jr nz, .asm_11892d
-	ld hl, UnknownText_0x11aba5
+	ld hl, Text_WhatLevelDoYouWantToChallenge
 	jr .asm_118930
 
 .asm_11892d
-	ld hl, UnknownText_0x11abcb
+	ld hl, Text_CheckBattleRoomListByMaxLevel
 
 .asm_118930
 	call Function11a9c0
@@ -9770,13 +9770,13 @@
 	ld a, [StatusFlags]
 	bit 6, a
 	jr nz, .asm_11896b
-	ld hl, Strings_119d64
-	ld a, $5
+	ld hl, Strings_Ll0ToL40		; Address to list of strings with the choosable levels
+	ld a, 5						; 4 levels to choose from, including 'Cancel'-option
 	jr .asm_118970
 
 .asm_11896b
-	ld hl, Strings_119d0c
-	ld a, $b
+	ld hl, Strings_L10ToL100	; Address to list of strings with the choosable levels
+	ld a, 11					; 10 levels to choose from, including 'Cancel'-option
 
 .asm_118970
 	ld [wcd4a], a
@@ -9915,8 +9915,9 @@
 	ld a, $0
 	ld [wcd46], a
 	ret
-; 118a54
 
+
+
 Function118a54: ; 118a54
 	ld a, [wcd55]
 	ld l, a
@@ -12537,7 +12538,7 @@
 String_119d07:
 	db "   ▼@"
 
-Strings_119d0c:
+Strings_L10ToL100: ; 119d0c
 	db " L:10 @@"
 	db " L:20 @@"
 	db " L:30 @@"
@@ -12550,7 +12551,7 @@
 	db " L:100@@"
 	db "CANCEL@@"
 
-Strings_119d64:
+Strings_Ll0ToL40: ; 119d64
 	db " L:10 @@"
 	db " L:20 @@"
 	db " L:30 @@"
@@ -14274,13 +14275,13 @@
 	done
 ; 0x11aba5
 
-UnknownText_0x11aba5: ; 0x11aba5
+Text_WhatLevelDoYouWantToChallenge: ; 0x11aba5
 	text "What level do you"
 	line "want to challenge?"
 	done
 ; 0x11abcb
 
-UnknownText_0x11abcb: ; 0x11abcb
+Text_CheckBattleRoomListByMaxLevel: ; 0x11abcb
 	text "Check BATTLE ROOM"
 	line "list by max level?"
 	done
@@ -16529,7 +16530,7 @@
 	sub $19
 
 .asm_11c021
-	ld hl, Unknown_11f332
+	ld hl, BTTrainerTexts
 	jr .asm_11c033
 
 .asm_11c026
@@ -20671,14 +20672,14 @@
 	db $01, $01, $00, $00, $00, $01
 
 
-Unknown_11f332:
-	dw Unknown_11f338
-	dw Unknown_11f36a
-	dw Unknown_11f39c
+BTTrainerTexts: ; 11f332
+	dw BTTrainerGreetings
+	dw BTTrainerPlayerLostTexts
+	dw BTTrainerPlayerWonTexts
 
-Unknown_11f338: ; 11f338
-	dw UnknownText_0x11f42e
-	dw UnknownText_0x11f43d
+BTTrainerGreetings: ; 11f338
+	dw BattleTowerTextJump_0x11f42e
+	dw BattleTowerTextJump_0x11f43d
 	dw UnknownText_0x11f44c
 	dw UnknownText_0x11f45b
 	dw UnknownText_0x11f46a
@@ -20703,8 +20704,8 @@
 	dw UnknownText_0x11f587
 	dw UnknownText_0x11f596
 
-Unknown_11f36a: ; 11f36a
-	dw UnknownText_0x11f433
+BTTrainerPlayerLostTexts: ; 11f36a
+	dw BattleTowerTextJump_0x11f433
 	dw UnknownText_0x11f442
 	dw UnknownText_0x11f451
 	dw UnknownText_0x11f460
@@ -20730,7 +20731,7 @@
 	dw UnknownText_0x11f58c
 	dw UnknownText_0x11f59b
 
-Unknown_11f39c: ; 11f39c
+BTTrainerPlayerWonTexts: ; 11f39c
 	dw UnknownText_0x11f438
 	dw UnknownText_0x11f447
 	dw UnknownText_0x11f456
@@ -20815,12 +20816,12 @@
 	dw UnknownText_0x11f681
 
 
-UnknownText_0x11f42e: ; 0x11f42e
-	text_jump UnknownText_0x1ec000
+BattleTowerTextJump_0x11f42e: ; 0x11f42e
+	text_jump BattleTowerText_0x1ec000
 	db "@"
 
-UnknownText_0x11f433: ; 0x11f433
-	text_jump UnknownText_0x1ec03b
+BattleTowerTextJump_0x11f433: ; 0x11f433
+	text_jump BattleTowerText_0x1ec03b
 	db "@"
 
 UnknownText_0x11f438: ; 0x11f438
@@ -20827,8 +20828,8 @@
 	text_jump UnknownText_0x1ec060
 	db "@"
 
-UnknownText_0x11f43d: ; 0x11f43d
-	text_jump UnknownText_0x1ec080
+BattleTowerTextJump_0x11f43d: ; 0x11f43d
+	text_jump BattleTowerText_0x1ec080
 	db "@"
 
 UnknownText_0x11f442: ; 0x11f442
@@ -22803,7 +22804,7 @@
 
 Function17022c: ; 17022c
 .asm_17022c
-	call Function17023a
+	call Jumpto_BattleTowerBattleFunction
 	call DelayFrame
 	ld a, [wcf63]
 	cp $1
@@ -22811,11 +22812,11 @@
 	ret
 ; 17023a
 
-Function17023a: ; 17023a
+Jumpto_BattleTowerBattleFunction: ; 17023a
 	ld a, [wcf63]
 	ld e, a
 	ld d, 0
-	ld hl, Jumptable_170249
+	ld hl, Jumptable_BattleTowerBattleFunctions
 rept 2
 	add hl, de
 endr
@@ -22825,20 +22826,20 @@
 	jp [hl]
 ; 170249
 
-Jumptable_170249: ; 170249
-	dw Function17024d
-	dw Function1704c9
+Jumptable_BattleTowerBattleFunctions: ; 170249
+	dw RunBattleTowerBattle
+	dw SkipBattleTowerBattle
 ; 17024d
 
-Function17024d: ; 17024d
+RunBattleTowerBattle: ; 17024d
 	ld a, [Options]
 	push af
 	ld hl, Options
 	set 6, [hl]
-	ld a, [wcfc0]
+	ld a, [InBattleTowerBattle]
 	push af
 	or $1
-	ld [wcfc0], a
+	ld [InBattleTowerBattle], a
 	xor a
 	ld [InLinkBattle], a
 	callba Mobile_HealParty
@@ -22852,13 +22853,13 @@
 	ld [ScriptVar], a
 	and a
 	jr nz, .asm_1702a9
-	ld a, $1
+	ld a, BANK(sNrOfBeatenBattleTowerTrainers)
 	call GetSRAMBank
-	ld a, [$be46]
-	ld [wcf64], a
+	ld a, [sNrOfBeatenBattleTowerTrainers]
+	ld [wNrOfBeatenBattleTowerTrainers], a ; wcf64
 	call CloseSRAM
 	ld hl, StringBuffer3
-	ld a, [wcf64]
+	ld a, [wNrOfBeatenBattleTowerTrainers] ; wcf64
 	add $f7
 	ld [hli], a
 	ld a, $50
@@ -22866,64 +22867,66 @@
 
 .asm_1702a9
 	pop af
-	ld [wcfc0], a
+	ld [InBattleTowerBattle], a
 	pop af
 	ld [Options], a
 	ld a, $1
 	ld [wcf63], a
 	ret
-; 1702b7
 
+
 Function1702b7: ; 1702b7
-	call Function1704a2
-	ld de, $c643
-	ld c, $b
+; Initialise the BattleTower-Trainer and his Pkmn
+	call CopyBTTrainer_FromBT_OTrainer_TowBT_OTTempCopy
+	ld de, wBT_OTTempCopy + wBT_OTTempCopy_Pkmn1Name ; $c643
+	ld c, PKMN_NAME_LENGTH
 	callba Function17d073
 	jr nc, .asm_1702db
-	ld a, [$c608 + 11]
+
+	ld a, [wBT_OTTempCopy + wBT_OTTempCopy_Pkmn1]
 	ld [wd265], a
 	call GetPokemonName
 	ld l, e
 	ld h, d
-	ld de, $c643
-	ld bc, $000b
+	ld de, wBT_OTTempCopy + wBT_OTTempCopy_Pkmn1Name ; $c643
+	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 
 .asm_1702db
-	ld de, $c67e
-	ld c, $b
+	ld de, wBT_OTTempCopy + wBT_OTTempCopy_Pkmn2Name ; $c67e
+	ld c, PKMN_NAME_LENGTH
 	callba Function17d073
 	jr nc, .asm_1702fc
-	ld a, [$c64e]
+	ld a, [wBT_OTTempCopy + wBT_OTTempCopy_Pkmn2] ; [$c64e]
 	ld [wd265], a
 	call GetPokemonName
 	ld l, e
 	ld h, d
-	ld de, $c67e
-	ld bc, $000b
+	ld de, wBT_OTTempCopy + wBT_OTTempCopy_Pkmn2Name ; $c67e
+	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 
 .asm_1702fc
-	ld de, $c686 + 51
-	ld c, $b
+	ld de, wBT_OTTempCopy + wBT_OTTempCopy_Pkmn3Name ; $c686 + 51 = $c6b9
+	ld c, PKMN_NAME_LENGTH
 	callba Function17d073
 	jr nc, .asm_17031d
-	ld a, [$c689]
+	ld a, [wBT_OTTempCopy + wBT_OTTempCopy_Pkmn3] ; [$c689]
 	ld [wd265], a
 	call GetPokemonName
 	ld l, e
 	ld h, d
-	ld de, $c686 + 51
-	ld bc, $000b
+	ld de, wBT_OTTempCopy + wBT_OTTempCopy_Pkmn3Name ; $c686 + 51 = $c6b9
+	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 
 .asm_17031d
 	ld a, $50
-	ld [$c64d], a
-	ld [$c688], a
-	ld [$c68a + 57], a
+	ld [wBT_OTTempCopy + wBT_OTTempCopy_45], a ; $c64d
+	ld [wBT_OTTempCopy + wBT_OTTempCopy_80], a ; $c688
+	ld [wBT_OTTempCopy + wBT_OTTempCopy_BB], a ; $c68a + 57 = $c6c3
 	call Function170c98
-	ld de, $c608
+	ld de, wBT_OTTempCopy
 	ld c, $a
 	callba Function17d073
 	jr nc, .asm_17033d
@@ -22931,7 +22934,7 @@
 	jr .asm_170340
 
 .asm_17033d
-	ld hl, $c608
+	ld hl, wBT_OTTempCopy ; 0xc608
 
 .asm_170340
 	ld de, wd26b
@@ -22939,7 +22942,7 @@
 	call CopyBytes
 	ld a, $50
 	ld [de], a
-	ld hl, $c608 + 10
+	ld hl, wBT_OTTempCopy + wBT_OTTempCopy_TrainerClass
 	ld a, [hli]
 	ld [OtherTrainerClass], a
 	ld a, $ea
@@ -22946,9 +22949,11 @@
 	ld [BGMapBuffer], a
 	ld a, $d3
 	ld [wcd21], a
+
+	; Copy Pkmn into Memory from the address in hl
 	ld de, OTPartyMon1Species
 	ld bc, OTPartyCount
-	ld a, $3
+	ld a, BATTLETOWER_NROFPKMNS		; Number of Pkmn the BattleTower-Trainer has
 	ld [bc], a
 	inc bc
 .asm_170367
@@ -22957,7 +22962,7 @@
 	ld [bc], a
 	inc bc
 	push bc
-	ld bc, $0030
+	ld bc, BATTLETOWER_PKMNSTRUCTLENGTH
 	call CopyBytes
 	push de
 	ld a, [BGMapBuffer]
@@ -23163,27 +23168,29 @@
 	db $0f, $05, $14, $07
 	db $05, $05, $11, $0c
 	db $0c, $06, $06, $04
-; 1704a2
 
-Function1704a2: ; 1704a2
+
+CopyBTTrainer_FromBT_OTrainer_TowBT_OTTempCopy: ; 1704a2
+; copy the BattleTower-Trainer data that lies at 'BT_OTrainer' to 'wBT_OTTempCopy'
 	ld a, [rSVBK]
 	push af
 	ld a, $3
 	ld [rSVBK], a
-	ld hl, LYOverrides
-	ld de, $c608
-	ld bc, $00e0
+	ld hl, BT_OTrainer ; $d100
+	ld de, wBT_OTTempCopy ; $c608
+	ld bc, BT_OTrainerEnd - BT_OTrainer ; $e0 = $a + $1 + 3*$3b + $24
+                                        ;	  = $a + $1 + BATTLETOWER_NROFPKMNS * (BATTLETOWER_PKMNSTRUCTLENGTH + PKMN_NAME_LENGTH) + BATTLETOWER_TRAINERDATALENGTH
 	call CopyBytes
 	pop af
 	ld [rSVBK], a
-	ld a, $1
+	ld a, BANK(s1_be45)
 	call GetSRAMBank
 	ld a, $2
-	ld [$be45], a
-	ld hl, $be46
+	ld [s1_be45], a
+	ld hl, sNrOfBeatenBattleTowerTrainers
 	inc [hl]
 	call CloseSRAM
-Function1704c9:
+SkipBattleTowerBattle: ; 1704c9
 	ret
 ; 1704ca
 
@@ -23256,14 +23263,17 @@
 Function170525: ; 170525
 	ld a, $5
 	call GetSRAMBank
+
 	ld hl, $a89c
 	ld de, StringBuffer3
 	ld bc, $0016
 	call CopyBytes
+
 	ld hl, $a8b2
 	ld de, $c608
 	ld bc, $0096
 	call CopyBytes
+
 	call CloseSRAM
 	hlcoord 1, 1
 	ld de, StringBuffer3
@@ -23281,10 +23291,12 @@
 	call Function1705f0
 	jr Function1705b2
 
+
 Function170571:
 	call Function32f9
 	call Function1705b2
 
+
 Function170577:
 	ld hl, hJoyPressed
 	ld a, [hl]
@@ -23500,56 +23512,62 @@
 
 
 Jumptable_170696: ; 170696 (5c:4696)
-	dw Function17075f
-	dw Function170788
-	dw Function170778
-	dw Function170799
-	dw Function17079d
-	dw Function1707ac
-	dw Function1707f4
-	dw Function170868
-	dw Function170881
-	dw Function17089a
-	dw Function1708b1
-	dw Function1708b9
-	dw Function1708c8
-	dw Function1708f0
-	dw Function17093c
-	dw Function1709aa
-	dw Function1709bb
-	dw Function170a9c
-	dw Function170aa0
-	dw Function170aaf
-	dw Function170abe
-	dw Function170ad7
-	dw Function170807
-	dw Function17081d
-	dw Function170ae8
-	dw Function170b16
-	dw Function1706d6
-	dw Function1706ee
-	dw Function17071b
-	dw Function170729
-	dw Function17073e
-	dw Function170737
+	dw Function17075f ; 0x00
+	dw Function170788 ; 0x01
+	dw Function170778 ; 0x02
+	dw Function170799 ; 0x03
+	dw Function17079d ; 0x04
+	dw Function1707ac ; 0x05
+	dw Function1707f4 ; 0x06
+	dw Function170868 ; 0x07
+	dw Function170881 ; 0x08
+	dw Function17089a ; 0x09
+	dw Function1708b1 ; 0x0a
+	dw Function1708b9 ; 0x0b
+	dw Function1708c8 ; 0x0c
+	dw Function1708f0 ; 0x0d
+	dw Function17093c ; 0x0e
+	dw Function1709aa ; 0x0f
+	dw Function1709bb ; 0x10
+	dw Function170a9c ; 0x11
+	dw Function170aa0 ; 0x12
+	dw Function170aaf ; 0x13
+	dw Function170abe ; 0x14
+	dw Function170ad7 ; 0x15
+	dw Function170807 ; 0x16
+	dw Function17081d ; 0x17
+	dw Function170ae8 ; 0x18
+	dw Function170b16 ; 0x19
+	dw ResetBattleTowerTrainersSRAM ; 0x1a
+	dw Function1706ee ; 0x1b
+	dw Function17071b ; 0x1c
+	dw Function170729 ; 0x1d
+	dw Function17073e ; 0x1e
+	dw Function170737 ; 0x1f
 
 
-Function1706d6: ; 1706d6 (5c:46d6)
-	ld a, $1
+; Reset the save memory for BattleTower-Trainers (Counter and all 7 TrainerBytes)
+ResetBattleTowerTrainersSRAM: ; 1706d6 (5c:46d6)
+	ld a, BANK(sBTTrainers)
 	call GetSRAMBank
+
 	ld a, $ff
-	ld hl, $be48
-	ld bc, $7
+	ld hl, sBTTrainers
+	ld bc, BATTLETOWER_NROFTRAINERS
 	call ByteFill
+
 	xor a
-	ld [$be46], a
+	ld [sNrOfBeatenBattleTowerTrainers], a
+
 	call CloseSRAM
+
 	ret
 
 Function1706ee: ; 1706ee (5c:46ee)
-	ld a, $1
+	ld a, BANK(sbe50)
 	call GetSRAMBank
-	ld a, [$be50]
+
+	ld a, [sbe50]
 	call CloseSRAM
 	ld [ScriptVar], a
 	ld hl, NumItems
@@ -23575,18 +23593,18 @@
 	ret
 
 Function17071b: ; 17071b (5c:471b)
-	ld a, $1
+	ld a, BANK(s1_be45)
 	call GetSRAMBank
 	ld a, $3
-	ld [$be45], a
+	ld [s1_be45], a
 	call CloseSRAM
 	ret
 
 Function170729: ; 170729 (5c:4729)
-	ld a, $1
+	ld a, BANK(s1_be45)
 	call GetSRAMBank
 	ld a, $4
-	ld [$be45], a
+	ld [s1_be45], a
 	call CloseSRAM
 	ret
 
@@ -23606,10 +23624,10 @@
 	cp $1e
 	jr z, Function17073e
 	push af
-	ld a, $1
+	ld a, BANK(sbe50)
 	call GetSRAMBank
 	pop af
-	ld [$be50], a
+	ld [sbe50], a
 	call CloseSRAM
 	ret
 
@@ -23618,9 +23636,9 @@
 	ld a, [ScriptVar]
 	and a
 	ret z
-	ld a, $1
+	ld a, BANK(sbe4f)
 	call GetSRAMBank
-	ld a, [$be4f]
+	ld a, [sbe4f]
 	and $2
 	ld [ScriptVar], a
 	call CloseSRAM
@@ -23627,8 +23645,8 @@
 	ret
 
 Function170778: ; 170778 (5c:4778)
-	ld hl, $be45
-	ld a, $1
+	ld hl, s1_be45
+	ld a, BANK(s1_be45)
 	call GetSRAMBank
 	ld a, [hl]
 	ld [ScriptVar], a
@@ -23636,11 +23654,11 @@
 	ret
 
 Function170788: ; 170788 (5c:4788)
-	ld a, $1
+	ld a, BANK(sbe4f)
 	call GetSRAMBank
-	ld a, [$be4f]
+	ld a, [sbe4f]
 	or $2
-	ld [$be4f], a
+	ld [sbe4f], a
 	call CloseSRAM
 	ret
 
@@ -23651,10 +23669,10 @@
 Function17079d: ; 17079d (5c:479d)
 	ld c, $0
 asm_17079f: ; 17079f (5c:479f)
-	ld a, $1
+	ld a, BANK(s1_be45)
 	call GetSRAMBank
 	ld a, c
-	ld [$be45], a
+	ld [s1_be45], a
 	call CloseSRAM
 	ret
 
@@ -23763,7 +23781,7 @@
 	ret
 
 Function170868: ; 170868 (5c:4868)
-	ld a, $1
+	ld a, BANK(sbe47)
 	call GetSRAMBank
 	ld a, [rSVBK] ; $ff00+$70
 	push af
@@ -23770,7 +23788,7 @@
 	ld a, $3
 	ld [rSVBK], a ; $ff00+$70
 	ld a, [wd000 + $800]
-	ld [$be47], a
+	ld [sbe47], a
 	pop af
 	ld [rSVBK], a ; $ff00+$70
 	call CloseSRAM
@@ -23777,13 +23795,13 @@
 	ret
 
 Function170881: ; 170881 (5c:4881)
-	ld a, $1
+	ld a, BANK(sbe47)
 	call GetSRAMBank
 	ld a, [rSVBK] ; $ff00+$70
 	push af
 	ld a, $3
 	ld [rSVBK], a ; $ff00+$70
-	ld a, [$be47]
+	ld a, [sbe47]
 	ld [wd000 + $800], a
 	pop af
 	ld [rSVBK], a ; $ff00+$70
@@ -23815,9 +23833,9 @@
 	ret
 
 Function1708b9: ; 1708b9 (5c:48b9)
-	ld a, $1
+	ld a, BANK(s1_be3c)
 	call GetSRAMBank
-	ld a, [$be3c]
+	ld a, [s1_be3c]
 	ld [ScriptVar], a
 	call CloseSRAM
 	ret
@@ -24121,9 +24139,9 @@
 	ld a, [ScriptVar]
 	and a
 	ret z
-	ld a, $1
+	ld a, BANK(sbe4f)
 	call GetSRAMBank
-	ld a, [$be4f]
+	ld a, [sbe4f]
 	and $1
 	ld [ScriptVar], a
 	call CloseSRAM
@@ -24130,11 +24148,11 @@
 	ret
 
 Function170ad7: ; 170ad7 (5c:4ad7)
-	ld a, $1
+	ld a, BANK(sbe4f)
 	call GetSRAMBank
-	ld a, [$be4f]
+	ld a, [sbe4f]
 	or $1
-	ld [$be4f], a
+	ld [sbe4f], a
 	call CloseSRAM
 	ret
 
@@ -24178,8 +24196,8 @@
 	ld [ScriptVar], a
 	ret
 
-Function170b44: ; 170b44
-	callba Function1f8000
+Function_LoadOpponentTrainerAndPokemonsWithOTSprite: ; 0x170b44
+	callba Function_LoadOpponentTrainerAndPokemons
 	ld a, [rSVBK]
 	push af
 	ld a, $3
@@ -24195,6 +24213,9 @@
 	add hl, bc
 	ld a, [hl]
 	ld [wcd49], a
+
+; Load sprite of the opponent trainer
+; because s/he is chosen randomly and appears out of nowhere
 	ld a, [ScriptVar]
 	dec a
 	sla a
@@ -24237,8 +24258,8 @@
 	ret
 ; 170bd3
 
-Function170bd3: ; 170bd3
-	callba Function8b201
+SpecialCheckForBattleTowerRules: ; 170bd3
+	callba CheckForBattleTowerRules
 	jr c, .asm_170bde
 	xor a
 	jr .asm_170be0
--- a/misc/mobile_5f.asm
+++ b/misc/mobile_5f.asm
@@ -425,19 +425,29 @@
 	ret
 ; 17d224
 
-Function17d224: ; 17d224
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Parameter: [ScriptVar] = 0..1
+;
+; if [ScriptVar] == 0
+;    Show japanese menu options
+;    - News - News - ??? - Cancel
+; if [ScriptVar] == 1
+;    Show BattleTower-Menu with 3 options in english language
+;    - Challenge - Explanation - Cancel
+Special_Menu_ChallengeExplanationCancel: ; 17d224
 	ld a, [ScriptVar]
 	and a
 	jr nz, .asm_17d234
 	ld a, $4
 	ld [ScriptVar], a
-	ld hl, MenuDataHeader_17d26a
+	ld hl, MenuDataHeader_17d26a ; Japanese Menu, where you can choose 'News' as an option
 	jr .asm_17d23c
 
 .asm_17d234
 	ld a, $4
 	ld [ScriptVar], a
-	ld hl, MenuDataHeader_17d28f
+	ld hl, MenuDataHeader_ChallengeExplanationCancel ; English Menu
 
 .asm_17d23c
 	call LoadMenuDataHeader
@@ -488,14 +498,14 @@
 	db "やめる@"
 ; 17d28f
 
-MenuDataHeader_17d28f: ; 17d28f
+MenuDataHeader_ChallengeExplanationCancel: ; 17d28f
 	db $40 ; flags
 	db  0,  0 ; start coords
 	db  7, 14 ; end coords
-	dw MenuData2_17d297
+	dw MenuData2_ChallengeExplanationCancel
 	db 1 ; default option
 
-MenuData2_17d297: ; 17d297
+MenuData2_ChallengeExplanationCancel: ; 17d297
 	db $a0 ; flags
 	db 3
 	db "Challenge@"
@@ -2388,7 +2398,7 @@
 	ld a, [hli]
 	ld b, a
 	push hl
-	callba Function4dba3
+	callba SetPkmnCaughtData
 	pop hl
 	pop bc
 	jr .asm_17df5e
@@ -2534,7 +2544,7 @@
 ; 17e026
 
 Function17e026: ; 17e026
-	ld a, $1
+	ld a, BANK(sBoxCount)
 	call GetSRAMBank
 	ld a, [sBoxCount]
 	call CloseSRAM
@@ -2545,11 +2555,11 @@
 	push bc
 	push hl
 	callba LoadEnemyMon
-	callba Functionde6e
+	callba SentPkmnIntoBox
 	callba Function4db83
 	pop hl
 	pop bc
-	ld a, $1
+	ld a, BANK(sBoxMonNicknames)
 	call GetSRAMBank
 	bit 1, b
 	jr z, .asm_17e067
@@ -4294,9 +4304,9 @@
 	ld a, [wcd55]
 	bit 7, a
 	jr nz, .asm_17f355
-	ld a, $1
+	ld a, BANK(sCrystalData)
 	call GetSRAMBank
-	ld a, [$be3f]
+	ld a, [sCrystalData + 2]
 	jr .asm_17f35d
 
 .asm_17f355
@@ -4338,9 +4348,9 @@
 	ld a, [wcd55]
 	bit 7, a
 	jr nz, .asm_17f3a3
-	ld a, $1
+	ld a, BANK(sCrystalData)
 	call GetSRAMBank
-	ld de, $be40
+	ld de, sCrystalData + 3
 	jr .asm_17f3ab
 
 .asm_17f3a3
--- a/text/battle.asm
+++ b/text/battle.asm
@@ -44,7 +44,7 @@
 	prompt
 ; 0x807bd
 
-BattleText_0x807bd: ; 0x807bd
+BattleText_WildFled: ; 0x807bd
 	text "Wild @"
 	text_from_ram EnemyMonNick
 	text ""
@@ -52,7 +52,7 @@
 	prompt
 ; 0x807cf
 
-BattleText_0x807cf: ; 0x807cf
+BattleText_EnemyFled: ; 0x807cf
 	text "Enemy @"
 	text_from_ram EnemyMonNick
 	text ""
@@ -113,7 +113,7 @@
 	prompt
 ; 0x80899
 
-BattleText_0x80899: ; 0x80899
+BattleText_UserRecoveredPPUsing: ; 0x80899
 	text "<USER>"
 	line "recovered PP using"
 	cont "@"
@@ -129,13 +129,13 @@
 	prompt
 ; 0x808d2
 
-BattleText_0x808d2: ; 0x808d2
+BattleText_SafeguardFaded: ; 0x808d2
 	text "<USER>'s"
 	line "SAFEGUARD faded!"
 	prompt
 ; 0x808e7
 
-BattleText_0x808e7: ; 0x808e7
+BattleText_PkmnnLightScreenFell: ; 0x808e7
 	text_from_ram StringBuffer1
 	text " #MON's"
 	line "LIGHT SCREEN fell!"
@@ -149,42 +149,42 @@
 	prompt
 ; 0x8091f
 
-BattleText_0x8091f: ; 0x8091f
+BattleText_RainContinuesToFall: ; 0x8091f
 	text "Rain continues to"
 	line "fall."
 	prompt
 ; 0x80938
 
-BattleText_0x80938: ; 0x80938
+BattleText_TheSunlightIsStrong: ; 0x80938
 	text "The sunlight is"
 	line "strong."
 	prompt
 ; 0x80951
 
-BattleText_0x80951: ; 0x80951
+BattleText_TheSandstormRages: ; 0x80951
 	text "The SANDSTORM"
 	line "rages."
 	prompt
 ; 0x80967
 
-BattleText_0x80967: ; 0x80967
+BattleText_TheRainStopped: ; 0x80967
 	text "The rain stopped."
 	prompt
 ; 0x8097a
 
-BattleText_0x8097a: ; 0x8097a
+BattleText_TheSunlightFaded: ; 0x8097a
 	text "The sunlight"
 	line "faded."
 	prompt
 ; 0x8098f
 
-BattleText_0x8098f: ; 0x8098f
+BattleText_TheSandstormSubsided: ; 0x8098f
 	text "The SANDSTORM"
 	line "subsided."
 	prompt
 ; 0x809a8
 
-BattleText_0x809a8: ; 0x809a8
+BattleText_EnemyPkmnFainted: ; 0x809a8
 	text "Enemy @"
 	text_from_ram EnemyMonNick
 	text ""
@@ -199,7 +199,7 @@
 	line "for winning!"
 	prompt
 
-BattleText_0x809da: ; 0x809da
+BattleText_EnemyWasDefeated: ; 0x809da
 	text "<ENEMY>"
 	line "was defeated!"
 	prompt
@@ -234,7 +234,7 @@
 	prompt
 ; 0x80a75
 
-BattleText_0x80a75: ; 0x80a75
+BattleText_PkmnFainted: ; 0x80a75
 	text_from_ram BattleMonNick
 	text ""
 	line "fainted!"
@@ -241,7 +241,7 @@
 	prompt
 ; 0x80a83
 
-BattleText_0x80a83: ; 0x80a83
+BattleText_UseNextMon: ; 0x80a83
 	text "Use next #MON?"
 	done
 ; 0x80a93
@@ -259,7 +259,7 @@
 	prompt
 ; 0x80aca
 
-BattleText_0x80aca: ; 0x80aca
+BattleText_EnemyIsAboutToUseWillPlayerChangePkmn: ; 0x80aca
 	text "<ENEMY>"
 	line "is about to use"
 	cont "@"
@@ -271,7 +271,7 @@
 	done
 ; 0x80af8
 
-BattleText_0x80af8: ; 0x80af8
+BattleText_EnemySentOut: ; 0x80af8
 	text "<ENEMY>"
 	line "sent out"
 	cont "@"
@@ -280,34 +280,32 @@
 	done
 ; 0x80b0b
 
-BattleText_0x80b0b: ; 0x80b0b
+BattleText_TheresNoWillToBattle: ; 0x80b0b
 	text "There's no will to"
 	line "battle!"
 	prompt
 ; 0x80b26
 
-BattleText_0x80b26: ; 0x80b26
+BattleText_AnEGGCantBattle: ; 0x80b26
 	text "An EGG can't"
 	line "battle!"
 	prompt
 ; 0x80b3b
 
-BattleText_0x80b3b: ; 0x80b3b
+BattleText_CantEscape2: ; 0x80b3b
 	text "Can't escape!"
 	prompt
 ; 0x80b49
 
-BattleText_0x80b49: ; 0x80b49
+BattleText_TheresNoEscapeFromTrainerBattle: ; 0x80b49
 	text "No! There's no"
 	line "running from a"
 	cont "trainer battle!"
 	prompt
-; 0x80b77
 
-BattleText_0x80b77: ; 0x80b77
+BattleText_GotAwaySafely: ; 0x80b77
 	text "Got away safely!"
 	prompt
-; 0x80b89
 
 BattleText_0x80b89: ; 0x80b89
 	text "<USER>"
@@ -318,7 +316,7 @@
 	prompt
 ; 0x80ba0
 
-BattleText_0x80ba0: ; 0x80ba0
+BattleText_CantEscape: ; 0x80ba0
 	text "Can't escape!"
 	prompt
 ; 0x80bae
@@ -1282,7 +1280,7 @@
 	prompt
 ; 0x81863
 
-BattleText_0x81863: ; 0x81863
+BattleText_LinkErrorBattleCanceled: ; 0x81863
 	text "Link error…"
 
 	para "The battle has"
--- a/text/battle_tower.asm
+++ b/text/battle_tower.asm
@@ -1,5 +1,5 @@
 
-UnknownText_0x1ec000: ; 0x1ec000
+BattleTowerText_0x1ec000: ; 0x1ec000
 	text "Hello, glad to"
 	line "meet you!"
 
@@ -8,7 +8,7 @@
 	done
 ; 0x1ec03b
 
-UnknownText_0x1ec03b: ; 0x1ec03b
+BattleTowerText_0x1ec03b: ; 0x1ec03b
 	text "Thank you! A most"
 	line "enjoyable battle!"
 	done
@@ -20,7 +20,7 @@
 	done
 ; 0x1ec080
 
-UnknownText_0x1ec080: ; 0x1ec080
+BattleTowerText_0x1ec080: ; 0x1ec080
 	text "Work, work, work…"
 	line "I'm always busy!"
 	done
--- a/text/common_2.asm
+++ b/text/common_2.asm
@@ -1295,7 +1295,7 @@
 	done
 ; 0x1bcf9c
 
-UnknownText_0x1bcf9c: ; 0x1bcf9c
+Text_EnemyWithdrew: ; 0x1bcf9c
 	text "<ENEMY>"
 	line "withdrew"
 	cont "@"
@@ -1304,7 +1304,7 @@
 	prompt
 ; 0x1bcfaf
 
-UnknownText_0x1bcfaf: ; 0x1bcfaf
+Text_EnemyUsedOn: ; 0x1bcfaf
 	text "<ENEMY>"
 	line "used @"
 	text_from_ram wd050
@@ -1315,19 +1315,19 @@
 	prompt
 ; 0x1bcfc7
 
-UnknownText_0x1bcfc7: ; 0x1bcfc7
+Text_ThatCantBeUsedRightNow: ; 0x1bcfc7
 	text "That can't be used"
 	line "right now."
 	prompt
 ; 0x1bcfe5
 
-UnknownText_0x1bcfe5: ; 0x1bcfe5
+Text_ThatItemCantBePutInThePack: ; 0x1bcfe5
 	text "That item can't be"
 	line "put in the PACK."
 	done
 ; 0x1bd009
 
-UnknownText_0x1bd009: ; 0x1bd009
+Text_TheItemWasPutInThePack: ; 0x1bd009
 	text "The @"
 	text_from_ram StringBuffer1
 	text ""
@@ -1336,18 +1336,18 @@
 	done
 ; 0x1bd029
 
-UnknownText_0x1bd029: ; 0x1bd029
+Text_RemainingTime: ; 0x1bd029
 	text "Remaining Time"
 	done
 ; 0x1bd039
 
-UnknownText_0x1bd039: ; 0x1bd039
+Text_YourPkmnsHPWasHealed: ; 0x1bd039
 	text "Your #MON's HP"
 	line "was healed."
 	prompt
 ; 0x1bd054
 
-UnknownText_0x1bd054: ; 0x1bd054
+Text_Warping: ; 0x1bd054
 	text "Warping…"
 	done
 ; 0x1bd05e
@@ -1372,7 +1372,7 @@
 	prompt
 ; 0x1bd0bd
 
-UnknownText_0x1bd0bd: ; 0x1bd0bd
+Text_BreedingIsNotPossible: ; 0x1bd0bd
 	text "Breeding is not"
 	line "possible."
 	prompt
--- a/text/common_3.asm
+++ b/text/common_3.asm
@@ -129,29 +129,29 @@
 	prompt
 ; 1c02df
 
-UnknownText_0x1c02df: ; 1c02df
+Text_GoPkmn: ; 1c02df
 	text "Go! @"
 	db "@"
 ; 1c02e6
 
-UnknownText_0x1c02e6: ; 1c02e6
+Text_DoItPkmn: ; 1c02e6
 	text "Do it! @"
 	db "@"
 ; 1c02f0
 
-UnknownText_0x1c02f0: ; 1c02f0
+Text_GoForItPkmn: ; 1c02f0
 	text "Go for it,"
 	line "@"
 	db "@"
 ; 1c02fe
 
-UnknownText_0x1c02fe: ; 1c02fe
+Text_YourFoesWeakGetmPkmn: ; 1c02fe
 	text "Your foe's weak!"
 	line "Get'm, @"
 	db "@"
 ; 1c0317
 
-UnknownText_0x1c0317: ; 1c0317
+Text_BattleMonNick01: ; 1c0317
 	text_from_ram BattleMonNick
 	text "!"
 	done
@@ -1074,7 +1074,7 @@
 	done
 ; 1c0feb
 
-UnknownText_0x1c0feb: ; 1c0feb
+Text_WasSentToBillsPC: ; 1c0feb
 	text_from_ram StringBuffer1
 	text " was"
 	line "sent to BILL's PC."
--- a/text/common_4.asm
+++ b/text/common_4.asm
@@ -1262,7 +1262,7 @@
 	done
 ; 0x1c5944
 
-UnknownText_0x1c5944: ; 0x1c5944
+Text_ExcuseMeYoureNotReady: ; 0x1c5944
 	text "Excuse me."
 	line "You're not ready."
 	para ""
@@ -1289,7 +1289,7 @@
 	done
 ; 0x1c59c3
 
-UnknownText_0x1c59c3: ; 0x1c59c3
+Text_OnlyThreePkmnMayBeEntered: ; 0x1c59c3
 	text "Only three #MON"
 	line "may be entered."
 	para ""
@@ -1296,7 +1296,7 @@
 	done
 ; 0x1c59e5
 
-UnknownText_0x1c59e5: ; 0x1c59e5
+Text_ThePkmnMustAllBeDifferentKinds: ; 0x1c59e5
 	text "The @"
 	text_from_ram StringBuffer2
 	text " #MON"
@@ -1306,7 +1306,7 @@
 	done
 ; 0x1c5a13
 
-UnknownText_0x1c5a13: ; 0x1c5a13
+Text_ThePkmnMustNotHoldTheSameItems: ; 0x1c5a13
 	text "The @"
 	text_from_ram StringBuffer2
 	text " #MON"
@@ -1316,7 +1316,7 @@
 	done
 ; 0x1c5a42
 
-UnknownText_0x1c5a42: ; 0x1c5a42
+Text_YouCantTakeAnEgg: ; 0x1c5a42
 	text "You can't take an"
 	line "EGG!"
 	para ""
--- a/wram.asm
+++ b/wram.asm
@@ -443,6 +443,7 @@
 
 wMisc::
 wBattle::
+wBT_OTTempCopy:: ; used to copy the data of the BattleTower-Trainer and the 3 Pkmn
 
 wc608::
 wEnemyMoveStruct::  ds MOVE_LENGTH ; c608
@@ -808,6 +809,7 @@
 wc717:: ds 1
 wc718:: ds 1
 wc719:: ds 1
+LastPlayerMon:: ; c71a
 wc71a:: ds 1
 LastPlayerMove:: ; c71b
 	ds 1
@@ -884,6 +886,23 @@
 wc7e8:: ds 24
 
 
+RSSET 0 ; Offsets for wBT_OTTempCopy:: @ $c608
+wBT_OTTempCopy_0			RB   $A			; $c608
+wBT_OTTempCopy_TrainerClass	RB   $1			; $c608 + $a = $c612
+wBT_OTTempCopy_Pkmn1		RB   $30		; $c608 + $b = $c613
+wBT_OTTempCopy_Pkmn1Name	RB   $A			; $c608 + $3b = $c643
+wBT_OTTempCopy_45			RB   $1			; $c608 + $45 = $c64d
+wBT_OTTempCopy_Pkmn2		RB   $30		; $c608 + $46 = $c64e
+wBT_OTTempCopy_Pkmn2Name	RB   $A			; $c608 + $76 = $c67e
+wBT_OTTempCopy_80			RB   $1			; $c608 + $80 = $c688
+wBT_OTTempCopy_Pkmn3		RB   $30		; $c608 + $81 = $c689
+wBT_OTTempCopy_Pkmn3Name	RB   $A			; $c608 + $b1 = $c6b9
+wBT_OTTempCopy_BB			RB   $1			; $c608 + $bb = $c6c3
+
+GLOBAL wBT_OTTempCopy_TrainerClass, wBT_OTTempCopy_Pkmn1, wBT_OTTempCopy_Pkmn1Name, wBT_OTTempCopy_45, wBT_OTTempCopy_Pkmn2, wBT_OTTempCopy_Pkmn2Name, wBT_OTTempCopy_80, wBT_OTTempCopy_Pkmn3, wBT_OTTempCopy_Pkmn3Name, wBT_OTTempCopy_BB
+
+
+
 SECTION "Overworld Map", WRAM0 [$c800]
 
 wc800::
@@ -1172,6 +1191,7 @@
 
 wcf61:: ds 2
 wcf63:: ds 1
+wNrOfBeatenBattleTowerTrainers::
 wcf64:: ds 1
 IF !DEF(CRYSTAL11)
 wPokedexStatus::
@@ -1260,8 +1280,14 @@
 	ds 1
 
 wcfbe:: ds 2
-wcfc0:: ds 2
 
+InBattleTowerBattle:: ; cfc0
+; 0 not in BattleTower-Battle
+; 1 BattleTower-Battle
+	ds 1
+
+	ds 1
+
 FXAnimID::
 FXAnimIDLo:: ; cfc2
 	ds 1
@@ -1818,6 +1844,7 @@
 wd262:: ds 1
 wd263:: ds 1
 wd264:: ds 1
+GetPokemonName_Parameter::
 wd265:: ds 1
 wd266:: ds 1
 wd267:: ds 1
@@ -2598,11 +2625,36 @@
 
 SECTION "WRAM 3", WRAMX, BANK [3]
 
+w3_d000:: ; d000
 	ds $100
 
-w3_d100::
-	ds $700
+BT_OTrainer::
+w3_d100:: ; BattleTower OpponentTrainer-Data (length = 0xe0 = $a + $1 + 3*$3b + $24)
+BT_OTrainer_Name::
+	ds $A
+BT_OTrainer_TrainerClass::
+	ds $1
+BT_OTPkmn1:: ; w3_d10b
+	ds $1
+BT_OTPkmn1Item::
+	ds $3b-1
+BT_OTPkmn2:: ; w3_d146
+	ds $1
+BT_OTPkmn2Item::
+	ds $3b-1
+BT_OTPkmn3:: ; w3_d181
+	ds $1
+BT_OTPkmn3Item::
+	ds $3b-1
+	
+	ds $24
+BT_OTrainerEnd:: ; we_d1e0
+	
+	ds $20
+	
+	ds $600
 
+wBTChoiceOfLvlGroup::
 w3_d800:: ds 1
 
 
@@ -2772,17 +2824,26 @@
 s1_be44:: ds 1
 s1_be45:: ds 1
 
+; data of the BattleTower must be in SRAM because you can save and leave between battles
 sBattleTower:: ; be46
+sNrOfBeatenBattleTowerTrainers::
 sbe46:: ds 1
 sbe47:: ds 1
-sbe48:: ds 7
-sbe4f:: ds 2
-sbe51:: ds 1
-sbe52:: ds 1
-sbe53:: ds 1
-sbe54:: ds 1
-sbe55:: ds 1
-sbe56:: ds 1
+; The 7 trainers of the BattleTower are saved here, so nobody appears more than once
+sBTTrainers:: ; sbe48
+	ds 7
+sbe4f:: ds 1
+sbe50:: ds 1
+; Pkmn of previous trainer
+sBTPkmnOfTrainers:: ; 0xbe51
+sBTPkmnPrevTrainer1::
+	ds 1
+sBTPkmnPrevTrainer2:: ds 1
+sBTPkmnPrevTrainer3:: ds 1
+; Pkmn of preprevious trainer
+sBTPkmnPrevPrevTrainer1:: ds 1
+sBTPkmnPrevPrevTrainer2:: ds 1
+sBTPkmnPrevPrevTrainer3:: ds 1
 
 
 SECTION "Boxes 1-7",  SRAM, BANK [2]