Skip to content

Add a new radio channel

luckytyphlosion edited this page Jun 14, 2018 · 11 revisions

This tutorial teaches you how to add a new radio channel in pokecrystal. (radio channels with text coming soon!)

For this tutorial we're going to add National Park as a channel that plays its own music.

Contents

  1. Define a radio constant
  2. Define a pointer to the radio station
  3. Define the music for the channel
  4. Set the name of the channel and add a pointer for loading it
  5. Set the channel to a frequency you like

1. Define a radio constant

Edit constants/radio_constants.asm:

; radio channel ids
; indexes for:
; - RadioChannelSongs (see data/radio/channel_music.asm)
; - PlayRadioShow/RadioJumptable (see engine/pokegear/radio.asm)
; - RadioChannels (see engine/pokegear/radio.asm)
	const_def
	const OAKS_POKEMON_TALK      ; 00
	const POKEDEX_SHOW           ; 01
	const POKEMON_MUSIC          ; 02
	const LUCKY_CHANNEL          ; 03
	const BUENAS_PASSWORD        ; 04
	const PLACES_AND_PEOPLE      ; 05
	const LETS_ALL_SING          ; 06
	const ROCKET_RADIO           ; 07
	const POKE_FLUTE_RADIO       ; 08
	const UNOWN_RADIO            ; 09
	const EVOLUTION_RADIO        ; 0a
+	const NATIONAL_PARK_RADIO    ; 0b

2. Define a pointer to the radio station

Edit engine/pokegear/radio.asm:

RadioJumptable:
; entries correspond to constants/radio_constants.asm
	dw OaksPKMNTalk1  ; $00
	dw PokedexShow1 ; $01
	dw BenMonMusic1  ; $02
	dw LuckyNumberShow1 ; $03
	dw BuenasPassword1 ; $04
	dw PeoplePlaces1 ; $05
	dw FernMonMusic1 ; $06
	dw RocketRadio1 ; $07
	dw PokeFluteRadio ; $08
	dw UnownRadio ; $09
	dw EvolutionRadio ; $0a
+	dw NationalParkRadio ; $0b
UnownRadio:
	call StartRadioStation
	ld a, 1
	ld [wNumRadioLinesPrinted], a
	ret

EvolutionRadio:
	call StartRadioStation
	ld a, 1
	ld [wNumRadioLinesPrinted], a
	ret
+		
+NationalParkRadio:
+	call StartRadioStation
+	ld a, 1
+	ld [wNumRadioLinesPrinted], a
+	ret

3. Define the music for the channel

Edit data/radio/channel_music.asm:

RadioChannelSongs:
; entries correspond to radio channel ids
	dw MUSIC_POKEMON_TALK
	dw MUSIC_POKEMON_CENTER
	dw MUSIC_TITLE
	dw MUSIC_GAME_CORNER
	dw MUSIC_BUENAS_PASSWORD
	dw MUSIC_VIRIDIAN_CITY
	dw MUSIC_BICYCLE
	dw MUSIC_ROCKET_OVERTURE
	dw MUSIC_POKE_FLUTE_CHANNEL
	dw MUSIC_RUINS_OF_ALPH_RADIO
	dw MUSIC_LAKE_OF_RAGE_ROCKET_RADIO
+	dw MUSIC_NATIONAL_PARK

4. Set the name of the channel and add a pointer for loading it

Edit engine/pokegear/pokegear.asm:

; 917c3 (24:57c3)

BuenasPasswordName:    db "BUENA'S PASSWORD@"
NotBuenasPasswordName: db "@"
+NationalParkName:    db "Narional Park@"
+
+LoadStation_NationalPark:
+	ld a, TESTSTATION_RADIO
+	ld [wCurrentRadioLine], a
+	xor a
+	ld [wNumRadioLinesPrinted], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, NationalParkName
+	ret

5. Set the channel to a frequency you like

Edit engine/pokegear/pokegear.asm:

In this example, I set the frequency to 15.

RadioChannels:
; entries correspond to constants/radio_constants.asm

; frequency value given here = 4 × ingame_frequency − 2
	dbw 16, .PKMNTalkAndPokedexShow
	dbw 28, .PokemonMusic
	dbw 32, .LuckyChannel
	dbw 40, .BuenasPassword
	dbw 52, .RuinsOfAlphRadio
+	dbw 58, .NationalPark
	dbw 64, .PlacesAndPeople
	dbw 72, .LetsAllSing
	dbw 78, .PokeFluteRadio
	dbw 80, .EvolutionRadio
	db -1

Johto exclusive channel:

+.NationalPark:
+	call .InJohto
+	jr nc, .NoSignal
+	jp LoadStation_NationalPark

Kanto exclusive channel:

+.NationalPark:
+	call .InJohto
+	jr c, .NoSignal
+	ld a, [wPokegearFlags]
+	bit POKEGEAR_EXPN_CARD_F, a
+	jr z, .NoSignal
+       jp LoadStation_NationalPark

and we're done!

Clone this wiki locally