shithub: pokecrystal

Download patch

ref: 20ffc8bd8b3f239e9eeeddb7ecc2543f8c55a7e9
parent: 9dec80b07e3638c722b9768a1ca0184edea20392
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Sat Jul 28 20:27:13 EDT 2018

Reformat some bugfix diffs

--- a/docs/bugs_and_glitches.md
+++ b/docs/bugs_and_glitches.md
@@ -306,7 +306,7 @@
 **Fix:** Edit `CheckHiddenOpponent` in [engine/battle/effect_commands.asm](/engine/battle/effect_commands.asm):
 
 ```diff
--CheckHiddenOpponent:
+ CheckHiddenOpponent:
 -; BUG: This routine is completely redundant and introduces a bug, since BattleCommand_CheckHit does these checks properly.
 -	ld a, BATTLE_VARS_SUBSTATUS3_OPP
 -	call GetBattleVar
@@ -887,20 +887,20 @@
 
 ([Video](https://www.youtube.com/watch?v=eij_1060SMc))
 
-**Fix:**
+There are three things wrong here:
 
-There's three things wrong here.
+- `wEnemyMonLevel` isn't initialized yet
+- `wBattleMonLevel` gets overwritten after it's initialized by `FindFirstAliveMonAndStartBattle`
+- `wBattleMonLevel` isn't initialized until much later when the battle is with a trainer
 
-* `wEnemyMonLevel` doesn't have the value its name implies yet; it'll be populated later from `wCurPartyLevel`.
-* `wBattleMonLevel` gets overwritten between when the value is written in `FindFirstAliveMonAndStartBattle` and when it's read.
-* `wBattleMonLevel` isn't set until much later when the battle is with a trainer; extra code is needed to read a trainer's party and get the level of their lead Pokémon.
+**Fix:**
 
-First, in [engine/battle/battle_transition.asm](/engine/battle/battle_transition.asm):
+First, edit [engine/battle/battle_transition.asm](/engine/battle/battle_transition.asm):
 
 ```diff
-StartTrainerBattle_DetermineWhichAnimation:
-; The screen flashes a different number of times depending on the level of
-; your lead Pokemon relative to the opponent's.
+ StartTrainerBattle_DetermineWhichAnimation:
+ ; The screen flashes a different number of times depending on the level of
+ ; your lead Pokemon relative to the opponent's.
 -; BUG: wBattleMonLevel and wEnemyMonLevel are not set at this point, so whatever
 -; values happen to be there will determine the animation.
 +	ld a, [wOtherTrainerClass]
@@ -927,43 +927,43 @@
 	ld de, 0
 -	ld a, [wBattleMonLevel]
 +	ld a, [hl]
-	add 3
+ 	add 3
 -	ld hl, wEnemyMonLevel
 +	ld hl, wCurPartyLevel
-	cp [hl]
-	jr nc, .not_stronger
-	set TRANS_STRONGER_F, e
-.not_stronger
-	ld a, [wEnvironment]
-	cp CAVE
-	jr z, .cave
-	cp ENVIRONMENT_5
-	jr z, .cave
-	cp DUNGEON
-	jr z, .cave
-	set TRANS_NO_CAVE_F, e
-.cave
-	ld hl, .StartingPoints
-	add hl, de
-	ld a, [hl]
-	ld [wJumptableIndex], a
-	ret
+ 	cp [hl]
+ 	jr nc, .not_stronger
+ 	set TRANS_STRONGER_F, e
+ .not_stronger
+ 	ld a, [wEnvironment]
+ 	cp CAVE
+ 	jr z, .cave
+ 	cp ENVIRONMENT_5
+ 	jr z, .cave
+ 	cp DUNGEON
+ 	jr z, .cave
+ 	set TRANS_NO_CAVE_F, e
+ .cave
+ 	ld hl, .StartingPoints
+ 	add hl, de
+ 	ld a, [hl]
+ 	ld [wJumptableIndex], a
+ 	ret
 
-.StartingPoints:
-; entries correspond to TRANS_* constants
-	db BATTLETRANSITION_CAVE
-	db BATTLETRANSITION_CAVE_STRONGER
-	db BATTLETRANSITION_NO_CAVE
-	db BATTLETRANSITION_NO_CAVE_STRONGER
+ .StartingPoints:
+ ; entries correspond to TRANS_* constants
+ 	db BATTLETRANSITION_CAVE
+ 	db BATTLETRANSITION_CAVE_STRONGER
+ 	db BATTLETRANSITION_NO_CAVE
+ 	db BATTLETRANSITION_NO_CAVE_STRONGER
 ```
 
-In [engine/battle/start_battle.asm](/engine/battle/start_battle.asm):
+Then edit [engine/battle/start_battle.asm](/engine/battle/start_battle.asm):
 
 ```diff
-FindFirstAliveMonAndStartBattle:
-	xor a
-	ld [hMapAnims], a
-	call DelayFrame
+ FindFirstAliveMonAndStartBattle:
+ 	xor a
+ 	ld [hMapAnims], a
+ 	call DelayFrame
 -	ld b, 6
 -	ld hl, wPartyMon1HP
 -	ld de, PARTYMON_STRUCT_LENGTH - 1
@@ -981,57 +981,58 @@
 -	add hl, de
 -	ld a, [hl]
 -	ld [wBattleMonLevel], a
-	predef DoBattleTransition
+ 	predef DoBattleTransition
 ```
 
-Finally, add this code to the end of [engine/battle/read_trainer_party.asm](/engine/battle/read_trainer_party.asm):
+Finally, edit [engine/battle/read_trainer_party.asm](/engine/battle/read_trainer_party.asm):
 
 ```asm
-SetTrainerBattleLevel:
-	ld a, 255
-	ld [wCurPartyLevel], a
-
-	ld a, [wInBattleTowerBattle]
-	bit 0, a
-	ret nz
-
-	ld a, [wLinkMode]
-	and a
-	ret nz
-
-	ld a, [wOtherTrainerClass]
-	dec a
-	ld c, a
-	ld b, 0
-	ld hl, TrainerGroups
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-
-	ld a, [wOtherTrainerID]
-	ld b, a
-.skip_trainer
-	dec b
-	jr z, .got_trainer
-.loop1
-	ld a, [hli]
-	cp $ff
-	jr nz, .loop1
-	jr .skip_trainer
-.got_trainer
-
-.skip_name
-	ld a, [hli]
-	cp "@"
-	jr nz, .skip_name
-
-	inc hl
-	ld a, [hl]
-	ld [wCurPartyLevel], a
-	ret
+ INCLUDE "data/trainers/parties.asm"
++
++SetTrainerBattleLevel:
++	ld a, 255
++	ld [wCurPartyLevel], a
++
++	ld a, [wInBattleTowerBattle]
++	bit 0, a
++	ret nz
++
++	ld a, [wLinkMode]
++	and a
++	ret nz
++
++	ld a, [wOtherTrainerClass]
++	dec a
++	ld c, a
++	ld b, 0
++	ld hl, TrainerGroups
++	add hl, bc
++	add hl, bc
++	ld a, [hli]
++	ld h, [hl]
++	ld l, a
++
++	ld a, [wOtherTrainerID]
++	ld b, a
++.skip_trainer
++	dec b
++	jr z, .got_trainer
++.loop1
++	ld a, [hli]
++	cp $ff
++	jr nz, .loop1
++	jr .skip_trainer
++.got_trainer
++
++.skip_name
++	ld a, [hli]
++	cp "@"
++	jr nz, .skip_name
++
++	inc hl
++	ld a, [hl]
++	ld [wCurPartyLevel], a
++	ret
 ```
 
 
@@ -1138,7 +1139,7 @@
 ```diff
  .Cry:
 -	call Pokedex_GetSelectedMon
--	ld a, [wd265]
+-	ld a, [wTempSpecies]
 -	call GetCryIndex
 -	ld e, c
 -	ld d, b