shithub: pokecrystal

Download patch

ref: 7729dcd20420b6ec869bd82c954ced935186bfed
parent: f65448a4c0d6c1b3877ceb8ad138e40669f97c86
author: Rangi <[email protected]>
date: Thu Aug 13 09:47:50 EDT 2020

Consistent constants for radio data table sizes (could still be better)

--- a/constants/radio_constants.asm
+++ b/constants/radio_constants.asm
@@ -106,16 +106,22 @@
 	const MAPRADIO_LETS_ALL_SING
 	const MAPRADIO_ROCKET
 
+; OaksPKMNTalkRoutes size (see data/radio/oaks_pkmn_talk_routes.asm)
+NUM_OAKS_POKEMON_TALK_ROUTES EQU 15
+
 ; These tables in engine/pokegear/radio.asm are all sized to a power of 2
 ; so there's no need for a rejection sampling loop
 NUM_OAKS_POKEMON_TALK_ADVERBS    EQU 16 ; OaksPKMNTalk8.Adverbs
 NUM_OAKS_POKEMON_TALK_ADJECTIVES EQU 16 ; OaksPKMNTalk9.Adjectives
-NUM_PNP_PEOPLE_ADJECTIVES    EQU 16 ; PeoplePlaces5.Adjectives
-NUM_PNP_PLACES_ADJECTIVES    EQU 16 ; PeoplePlaces7.Adjectives
+NUM_PNP_PEOPLE_ADJECTIVES        EQU 16 ; PeoplePlaces5.Adjectives
+NUM_PNP_PLACES_ADJECTIVES        EQU 16 ; PeoplePlaces7.Adjectives
 
 ; BuenasPasswordTable sizes (see data/radio/buenas_passwords.asm)
 NUM_PASSWORD_CATEGORIES    EQU 11
 NUM_PASSWORDS_PER_CATEGORY EQU  3
+
+; BuenaPrizeItems size (see data/items/buena_prizes.asm)
+NUM_BUENA_PRIZES EQU 9
 
 ; GetBuenasPassword.StringFunctionJumpTable indexes (see engine/pokegear/radio.asm)
 	const_def
--- a/data/items/buena_prizes.asm
+++ b/data/items/buena_prizes.asm
@@ -1,5 +1,5 @@
 BuenaPrizeItems:
-; there are NUM_BUENA_PRIZES items (see engine/events/buena.asm)
+; there are NUM_BUENA_PRIZES entries
 	db ULTRA_BALL,   2
 	db FULL_RESTORE, 2
 	db NUGGET,       3
@@ -9,4 +9,3 @@
 	db CARBOS,       5
 	db CALCIUM,      5
 	db HP_UP,        5
-.End
--- a/data/radio/oaks_pkmn_talk_routes.asm
+++ b/data/radio/oaks_pkmn_talk_routes.asm
@@ -1,6 +1,7 @@
 ; Oak's Pokémon Talk will list wild Pokémon on these maps.
 
 OaksPKMNTalkRoutes:
+; there are NUM_OAKS_POKEMON_TALK_ROUTES entries
 	map_id ROUTE_29
 	map_id ROUTE_46
 	map_id ROUTE_30
@@ -16,4 +17,3 @@
 	map_id ROUTE_45
 	map_id ROUTE_36
 	map_id ROUTE_31
-.End
--- a/engine/events/buena.asm
+++ b/engine/events/buena.asm
@@ -262,9 +262,7 @@
 	dba .prizeitem
 	dba .prizepoints
 
-NUM_BUENA_PRIZES EQU 9 ; ((BuenaPrizeItems.End - BuenaPrizeItems) / 2)
-
-.indices
+.indices:
 	db NUM_BUENA_PRIZES
 x = 1
 rept NUM_BUENA_PRIZES
@@ -273,7 +271,7 @@
 endr
 	db -1
 
-.prizeitem
+.prizeitem:
 	ld a, [wMenuSelection]
 	call Buena_getprize
 	ld a, [hl]
@@ -284,7 +282,7 @@
 	call PlaceString
 	ret
 
-.prizepoints
+.prizepoints:
 	ld a, [wMenuSelection]
 	call Buena_getprize
 	inc hl
--- a/engine/overworld/wildmons.asm
+++ b/engine/overworld/wildmons.asm
@@ -705,11 +705,14 @@
 JumpRoamMon:
 .loop
 	ld hl, RoamMaps
-.innerloop1                   ; This loop happens to be unnecessary.
-	call Random               ; Choose a random number.
-	maskbits NUM_ROAMMON_MAPS ; Mask the number to limit it between 0 and 15.
-	cp NUM_ROAMMON_MAPS       ; If the number is not less than 16, try again.
-	jr nc, .innerloop1        ; I'm sure you can guess why this check is bogus.
+.innerloop1
+	; 0-15 are all valid indexes into RoamMaps,
+	; so this retry loop is unnecessary
+	; since NUM_ROAMMON_MAPS happens to be 16
+	call Random
+	maskbits NUM_ROAMMON_MAPS
+	cp NUM_ROAMMON_MAPS
+	jr nc, .innerloop1
 	inc a
 	ld b, a
 .innerloop2 ; Loop to get hl to the address of the chosen roam map.
--- a/engine/pokegear/radio.asm
+++ b/engine/pokegear/radio.asm
@@ -194,10 +194,10 @@
 ; Choose a random route, and a random Pokemon from that route.
 .sample
 	call Random
-	and %11111
-	cp (OaksPKMNTalkRoutes.End - OaksPKMNTalkRoutes) / 2
+	and %11111 ; maskbits NUM_OAKS_POKEMON_TALK_ROUTES would be more efficient
+	cp NUM_OAKS_POKEMON_TALK_ROUTES
 	jr nc, .sample
-	; We now have a number between 0 and 14.
+	; We now have a number between 0 and NUM_OAKS_POKEMON_TALK_ROUTES - 1.
 	ld hl, OaksPKMNTalkRoutes
 	ld c, a
 	ld b, 0