pokered/engine/hidden_object_functions7.asm

468 lines
8.7 KiB
NASM
Raw Normal View History

2016-06-12 00:24:04 +00:00
PrintNewBikeText:
2014-05-22 22:13:20 +00:00
call EnableAutoTextBoxDrawing
tx_pre_jump NewBicycleText
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
NewBicycleText:
2014-05-22 22:13:20 +00:00
TX_FAR _NewBicycleText
db "@"
2016-06-12 00:24:04 +00:00
DisplayOakLabLeftPoster:
2014-05-22 22:13:20 +00:00
call EnableAutoTextBoxDrawing
tx_pre_jump PushStartText
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
PushStartText:
2014-05-22 22:13:20 +00:00
TX_FAR _PushStartText
db "@"
2016-06-12 00:24:04 +00:00
DisplayOakLabRightPoster:
2014-05-22 22:13:20 +00:00
call EnableAutoTextBoxDrawing
ld hl, wPokedexOwned
ld b, wPokedexOwnedEnd - wPokedexOwned
call CountSetBits
2015-08-07 11:24:06 +00:00
ld a, [wNumSetBits]
cp 2
tx_pre_id SaveOptionText
2016-01-28 05:08:50 +00:00
jr c, .ownLessThanTwo
; own two or more mon
tx_pre_id StrengthsAndWeaknessesText
2016-01-28 05:08:50 +00:00
.ownLessThanTwo
2014-05-22 22:13:20 +00:00
jp PrintPredefTextID
2016-06-12 00:24:04 +00:00
SaveOptionText:
2014-05-22 22:13:20 +00:00
TX_FAR _SaveOptionText
db "@"
2016-06-12 00:24:04 +00:00
StrengthsAndWeaknessesText:
2014-05-22 22:13:20 +00:00
TX_FAR _StrengthsAndWeaknessesText
db "@"
2016-06-12 00:24:04 +00:00
SafariZoneCheck:
2015-07-21 01:32:02 +00:00
CheckEventHL EVENT_IN_SAFARI_ZONE ; if we are not in the Safari Zone,
2015-07-17 04:41:44 +00:00
jr z, SafariZoneGameStillGoing ; don't bother printing game over text
2015-08-31 02:38:41 +00:00
ld a, [wNumSafariBalls]
2014-05-22 22:13:20 +00:00
and a
2015-07-17 04:41:44 +00:00
jr z, SafariZoneGameOver
jr SafariZoneGameStillGoing
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
SafariZoneCheckSteps:
ld a, [wSafariSteps]
2014-05-22 22:13:20 +00:00
ld b, a
ld a, [wSafariSteps + 1]
2014-05-22 22:13:20 +00:00
ld c, a
or b
2015-07-17 04:41:44 +00:00
jr z, SafariZoneGameOver
2014-05-22 22:13:20 +00:00
dec bc
ld a, b
ld [wSafariSteps], a
2014-05-22 22:13:20 +00:00
ld a, c
ld [wSafariSteps + 1], a
2016-06-12 00:24:04 +00:00
SafariZoneGameStillGoing:
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [wSafariZoneGameOver], a
2014-05-22 22:13:20 +00:00
ret
2015-07-17 04:41:44 +00:00
2016-06-12 00:24:04 +00:00
SafariZoneGameOver:
2014-05-22 22:13:20 +00:00
call EnableAutoTextBoxDrawing
xor a
2015-08-09 05:32:44 +00:00
ld [wAudioFadeOutControl], a
2014-05-22 22:13:20 +00:00
dec a
call PlaySound
2015-07-22 14:57:31 +00:00
ld c, BANK(SFX_Safari_Zone_PA)
2015-07-19 08:46:12 +00:00
ld a, SFX_SAFARI_ZONE_PA
2014-05-22 22:13:20 +00:00
call PlayMusic
2016-06-12 04:30:05 +00:00
.waitForMusicToPlay
2016-07-28 03:08:13 +00:00
ld a, [wChannelSoundIDs + Ch4]
2016-06-12 04:30:05 +00:00
cp SFX_SAFARI_ZONE_PA
jr nz, .waitForMusicToPlay
2015-07-24 03:48:35 +00:00
ld a, TEXT_SAFARI_GAME_OVER
ld [hSpriteIndexOrTextID], a
2014-05-22 22:13:20 +00:00
call DisplayTextID
xor a
2015-07-20 00:52:26 +00:00
ld [wPlayerMovingDirection], a
ld a, SAFARI_ZONE_GATE
2015-07-24 03:48:35 +00:00
ld [hWarpDestinationMap], a
2014-05-22 22:13:20 +00:00
ld a, $3
2014-09-13 07:50:56 +00:00
ld [wDestinationWarpID], a
2014-05-22 22:13:20 +00:00
ld a, $5
ld [wSafariZoneGateCurScript], a
2015-07-21 01:32:02 +00:00
SetEvent EVENT_SAFARI_GAME_OVER
2015-07-24 03:48:35 +00:00
ld a, 1
2014-09-14 18:29:18 +00:00
ld [wSafariZoneGameOver], a
2014-05-22 22:13:20 +00:00
ret
2016-06-12 00:24:04 +00:00
PrintSafariGameOverText:
2014-05-22 22:13:20 +00:00
xor a
2014-05-25 17:51:53 +00:00
ld [wJoyIgnore], a
2014-05-22 22:13:20 +00:00
ld hl, SafariGameOverText
jp PrintText
2016-06-12 00:24:04 +00:00
SafariGameOverText:
2015-07-03 19:58:50 +00:00
TX_ASM
2015-08-31 02:38:41 +00:00
ld a, [wNumSafariBalls]
2014-05-22 22:13:20 +00:00
and a
2016-06-12 04:30:05 +00:00
jr z, .noMoreSafariBalls
2014-05-22 22:13:20 +00:00
ld hl, TimesUpText
call PrintText
2016-06-12 04:30:05 +00:00
.noMoreSafariBalls
2014-05-22 22:13:20 +00:00
ld hl, GameOverText
call PrintText
jp TextScriptEnd
2016-06-12 00:24:04 +00:00
TimesUpText:
2014-05-22 22:13:20 +00:00
TX_FAR _TimesUpText
db "@"
2016-06-12 00:24:04 +00:00
GameOverText:
2014-05-22 22:13:20 +00:00
TX_FAR _GameOverText
db "@"
2016-06-12 00:24:04 +00:00
PrintCinnabarQuiz:
ld a, [wSpriteStateData1 + 9]
cp SPRITE_FACING_UP
2014-05-22 22:13:20 +00:00
ret nz
call EnableAutoTextBoxDrawing
tx_pre_jump CinnabarGymQuiz
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
CinnabarGymQuiz:
2015-07-03 19:58:50 +00:00
TX_ASM
2014-05-22 22:13:20 +00:00
xor a
2015-07-26 02:26:54 +00:00
ld [wOpponentAfterWrongAnswer], a
2015-07-19 03:49:52 +00:00
ld a, [wHiddenObjectFunctionArgument]
2014-05-22 22:13:20 +00:00
push af
and $f
2015-07-26 02:26:54 +00:00
ld [hGymGateIndex], a
2014-05-22 22:13:20 +00:00
pop af
and $f0
swap a
ld [$ffdc], a
ld hl, CinnabarGymQuizIntroText
call PrintText
2015-07-26 02:26:54 +00:00
ld a, [hGymGateIndex]
2014-05-22 22:13:20 +00:00
dec a
add a
2015-07-26 02:26:54 +00:00
ld d, 0
2014-05-22 22:13:20 +00:00
ld e, a
ld hl, CinnabarQuizQuestions
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
call PrintText
2015-08-30 00:15:05 +00:00
ld a, 1
2014-09-13 07:50:56 +00:00
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
2014-05-22 22:13:20 +00:00
call CinnabarGymQuiz_1ea92
jp TextScriptEnd
2016-06-12 00:24:04 +00:00
CinnabarGymQuizIntroText:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarGymQuizIntroText
db "@"
2016-06-12 00:24:04 +00:00
CinnabarQuizQuestions:
2014-05-22 22:13:20 +00:00
dw CinnabarQuizQuestionsText1
dw CinnabarQuizQuestionsText2
dw CinnabarQuizQuestionsText3
dw CinnabarQuizQuestionsText4
dw CinnabarQuizQuestionsText5
dw CinnabarQuizQuestionsText6
2016-06-12 00:24:04 +00:00
CinnabarQuizQuestionsText1:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarQuizQuestionsText1
db "@"
2016-06-12 00:24:04 +00:00
CinnabarQuizQuestionsText2:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarQuizQuestionsText2
db "@"
2016-06-12 00:24:04 +00:00
CinnabarQuizQuestionsText3:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarQuizQuestionsText3
db "@"
2016-06-12 00:24:04 +00:00
CinnabarQuizQuestionsText4:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarQuizQuestionsText4
db "@"
2016-06-12 00:24:04 +00:00
CinnabarQuizQuestionsText5:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarQuizQuestionsText5
db "@"
2016-06-12 00:24:04 +00:00
CinnabarQuizQuestionsText6:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarQuizQuestionsText6
db "@"
2016-06-12 00:24:04 +00:00
CinnabarGymGateFlagAction:
2015-07-21 21:21:14 +00:00
EventFlagAddress hl, EVENT_CINNABAR_GYM_GATE0_UNLOCKED
predef_jump FlagActionPredef
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
CinnabarGymQuiz_1ea92:
2014-05-22 22:13:20 +00:00
call YesNoChoice
ld a, [$ffdc]
ld c, a
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
cp c
2015-07-26 02:26:54 +00:00
jr nz, .wrongAnswer
2016-01-03 19:17:10 +00:00
ld hl, wCurrentMapScriptFlags
2014-05-22 22:13:20 +00:00
set 5, [hl]
2015-07-26 02:26:54 +00:00
ld a, [hGymGateIndex]
2014-05-22 22:13:20 +00:00
ld [$ffe0], a
ld hl, CinnabarGymQuizCorrectText
call PrintText
ld a, [$ffe0]
2015-07-21 21:21:14 +00:00
AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
2014-05-22 22:13:20 +00:00
ld c, a
2015-07-20 03:45:34 +00:00
ld b, FLAG_SET
2015-07-21 21:21:14 +00:00
call CinnabarGymGateFlagAction
jp UpdateCinnabarGymGateTileBlocks_
2015-07-26 02:26:54 +00:00
.wrongAnswer
2014-05-22 22:13:20 +00:00
call WaitForSoundToFinish
2015-07-19 08:46:12 +00:00
ld a, SFX_DENIED
2014-05-22 22:13:20 +00:00
call PlaySound
call WaitForSoundToFinish
ld hl, CinnabarGymQuizIncorrectText
call PrintText
2015-07-26 02:26:54 +00:00
ld a, [hGymGateIndex]
2014-05-22 22:13:20 +00:00
add $2
2015-07-21 21:21:14 +00:00
AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
2014-05-22 22:13:20 +00:00
ld c, a
2015-07-20 03:45:34 +00:00
ld b, FLAG_TEST
2015-07-21 21:21:14 +00:00
EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0
predef FlagActionPredef
2014-05-22 22:13:20 +00:00
ld a, c
and a
ret nz
2015-07-26 02:26:54 +00:00
ld a, [hGymGateIndex]
2014-05-22 22:13:20 +00:00
add $2
2015-07-26 02:26:54 +00:00
ld [wOpponentAfterWrongAnswer], a
2014-05-22 22:13:20 +00:00
ret
2016-06-12 00:24:04 +00:00
CinnabarGymQuizCorrectText:
2016-07-18 06:17:03 +00:00
TX_SFX_ITEM_1
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarGymQuizCorrectText
2016-07-18 06:17:03 +00:00
TX_BLINK
2015-07-19 04:53:43 +00:00
TX_ASM
2014-05-22 22:13:20 +00:00
ld a, [$ffe0]
2015-07-21 21:21:14 +00:00
AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
2014-05-22 22:13:20 +00:00
ld c, a
2015-07-20 03:45:34 +00:00
ld b, FLAG_TEST
2015-07-21 21:21:14 +00:00
call CinnabarGymGateFlagAction
2014-05-22 22:13:20 +00:00
ld a, c
and a
jp nz, TextScriptEnd
call WaitForSoundToFinish
2015-07-19 08:46:12 +00:00
ld a, SFX_GO_INSIDE
2014-05-22 22:13:20 +00:00
call PlaySound
call WaitForSoundToFinish
jp TextScriptEnd
2016-06-12 00:24:04 +00:00
CinnabarGymQuizIncorrectText:
2014-05-22 22:13:20 +00:00
TX_FAR _CinnabarGymQuizIncorrectText
db "@"
2016-06-12 00:24:04 +00:00
UpdateCinnabarGymGateTileBlocks_:
2015-07-21 21:21:14 +00:00
; Update the overworld map with open floor blocks or locked gate blocks
; depending on event flags.
ld a, 6
2015-07-26 02:26:54 +00:00
ld [hGymGateIndex], a
2015-07-21 21:21:14 +00:00
.loop
2015-07-26 02:26:54 +00:00
ld a, [hGymGateIndex]
2014-05-22 22:13:20 +00:00
dec a
add a
add a
2015-07-21 21:21:14 +00:00
ld d, 0
2014-05-22 22:13:20 +00:00
ld e, a
ld hl, CinnabarGymGateCoords
2014-05-22 22:13:20 +00:00
add hl, de
ld a, [hli]
ld b, [hl]
ld c, a
inc hl
ld a, [hl]
2015-07-26 02:26:54 +00:00
ld [wGymGateTileBlock], a
2014-05-22 22:13:20 +00:00
push bc
2015-07-26 02:26:54 +00:00
ld a, [hGymGateIndex]
2014-05-22 22:13:20 +00:00
ld [$ffe0], a
2015-07-21 21:21:14 +00:00
AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
2014-05-22 22:13:20 +00:00
ld c, a
2015-07-20 03:45:34 +00:00
ld b, FLAG_TEST
2015-07-21 21:21:14 +00:00
call CinnabarGymGateFlagAction
2014-05-22 22:13:20 +00:00
ld a, c
and a
2015-07-21 21:21:14 +00:00
jr nz, .unlocked
2015-07-26 02:26:54 +00:00
ld a, [wGymGateTileBlock]
2015-07-21 21:21:14 +00:00
jr .next
.unlocked
2014-05-22 22:13:20 +00:00
ld a, $e
2015-07-21 21:21:14 +00:00
.next
2014-05-22 22:13:20 +00:00
pop bc
2015-07-24 21:39:45 +00:00
ld [wNewTileBlockID], a
2014-09-14 18:29:18 +00:00
predef ReplaceTileBlock
2015-07-26 02:26:54 +00:00
ld hl, hGymGateIndex
2014-05-22 22:13:20 +00:00
dec [hl]
2015-07-21 21:21:14 +00:00
jr nz, .loop
2014-05-22 22:13:20 +00:00
ret
2016-06-12 00:24:04 +00:00
CinnabarGymGateCoords:
2014-05-22 22:13:20 +00:00
; format: x-coord, y-coord, direction, padding
; direction: $54 = horizontal gate, $5f = vertical gate
db $09,$03,$54,$00
db $06,$03,$54,$00
db $06,$06,$54,$00
db $03,$08,$5f,$00
db $02,$06,$54,$00
db $02,$03,$54,$00
2016-06-12 00:24:04 +00:00
PrintMagazinesText:
2014-05-22 22:13:20 +00:00
call EnableAutoTextBoxDrawing
tx_pre MagazinesText
2014-05-22 22:13:20 +00:00
ret
2016-06-12 00:24:04 +00:00
MagazinesText:
2014-05-22 22:13:20 +00:00
TX_FAR _MagazinesText
db "@"
2016-06-12 00:24:04 +00:00
BillsHousePC:
2014-05-22 22:13:20 +00:00
call EnableAutoTextBoxDrawing
ld a, [wSpriteStateData1 + 9]
cp SPRITE_FACING_UP
2014-05-22 22:13:20 +00:00
ret nz
2015-07-21 17:36:03 +00:00
CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING
2016-06-12 04:30:05 +00:00
jr nz, .displayBillsHousePokemonList
2015-07-21 17:36:03 +00:00
CheckEventReuseA EVENT_USED_CELL_SEPARATOR_ON_BILL
2016-06-12 04:30:05 +00:00
jr nz, .displayBillsHouseMonitorText
2015-07-21 17:36:03 +00:00
CheckEventReuseA EVENT_BILL_SAID_USE_CELL_SEPARATOR
2016-06-12 04:30:05 +00:00
jr nz, .doCellSeparator
.displayBillsHouseMonitorText
tx_pre_jump BillsHouseMonitorText
2016-06-12 04:30:05 +00:00
.doCellSeparator
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-13 07:50:56 +00:00
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
tx_pre BillsHouseInitiatedText
ld c, 32
2014-05-22 22:13:20 +00:00
call DelayFrames
2015-07-19 08:46:12 +00:00
ld a, SFX_TINK
2014-05-22 22:13:20 +00:00
call PlaySound
call WaitForSoundToFinish
ld c, 80
2014-05-22 22:13:20 +00:00
call DelayFrames
2015-07-19 08:46:12 +00:00
ld a, SFX_SHRINK
2014-05-22 22:13:20 +00:00
call PlaySound
call WaitForSoundToFinish
ld c, 48
2014-05-22 22:13:20 +00:00
call DelayFrames
2015-07-19 08:46:12 +00:00
ld a, SFX_TINK
2014-05-22 22:13:20 +00:00
call PlaySound
call WaitForSoundToFinish
ld c, 32
2014-05-22 22:13:20 +00:00
call DelayFrames
2015-07-19 08:46:12 +00:00
ld a, SFX_GET_ITEM_1
2014-05-22 22:13:20 +00:00
call PlaySound
call WaitForSoundToFinish
call PlayDefaultMusic
2015-07-21 17:36:03 +00:00
SetEvent EVENT_USED_CELL_SEPARATOR_ON_BILL
2014-05-22 22:13:20 +00:00
ret
2016-06-12 04:30:05 +00:00
.displayBillsHousePokemonList
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-13 07:50:56 +00:00
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
tx_pre BillsHousePokemonList
2014-05-22 22:13:20 +00:00
ret
2016-06-12 00:24:04 +00:00
BillsHouseMonitorText:
2014-05-22 22:13:20 +00:00
TX_FAR _BillsHouseMonitorText
db "@"
2016-06-12 00:24:04 +00:00
BillsHouseInitiatedText:
2014-05-22 22:13:20 +00:00
TX_FAR _BillsHouseInitiatedText
2016-07-18 06:17:03 +00:00
TX_BLINK
2015-07-03 19:58:50 +00:00
TX_ASM
2014-05-22 22:13:20 +00:00
ld a, $ff
2015-08-09 05:32:44 +00:00
ld [wNewSoundID], a
2014-05-22 22:13:20 +00:00
call PlaySound
ld c, 16
2014-05-22 22:13:20 +00:00
call DelayFrames
2015-07-19 08:46:12 +00:00
ld a, SFX_SWITCH
2014-05-22 22:13:20 +00:00
call PlaySound
call WaitForSoundToFinish
ld c, 60
2014-05-22 22:13:20 +00:00
call DelayFrames
jp TextScriptEnd
2016-06-12 00:24:04 +00:00
BillsHousePokemonList:
2015-07-03 19:58:50 +00:00
TX_ASM
2014-05-22 22:13:20 +00:00
call SaveScreenTilesToBuffer1
ld hl, BillsHousePokemonListText1
call PrintText
xor a
2015-08-30 00:15:05 +00:00
ld [wMenuItemOffset], a ; not used
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
2015-08-11 05:34:32 +00:00
ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
2015-08-30 00:15:05 +00:00
ld a, 4
ld [wMaxMenuItem], a
2015-08-30 00:15:05 +00:00
ld a, 2
ld [wTopMenuItemY], a
2015-08-30 00:15:05 +00:00
ld a, 1
ld [wTopMenuItemX], a
2015-08-11 05:34:32 +00:00
.billsPokemonLoop
ld hl, wd730
2014-05-22 22:13:20 +00:00
set 6, [hl]
2015-07-18 20:52:03 +00:00
coord hl, 0, 0
2015-08-30 00:15:05 +00:00
ld b, 10
ld c, 9
2014-05-22 22:13:20 +00:00
call TextBoxBorder
2015-07-18 20:52:03 +00:00
coord hl, 2, 2
2014-05-22 22:13:20 +00:00
ld de, BillsMonListText
call PlaceString
ld hl, BillsHousePokemonListText2
call PrintText
call SaveScreenTilesToBuffer2
call HandleMenuInput
2015-08-11 05:34:32 +00:00
bit 1, a ; pressed b
jr nz, .cancel
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
add EEVEE
cp EEVEE
2015-08-11 05:34:32 +00:00
jr z, .displayPokedex
2014-05-22 22:13:20 +00:00
cp FLAREON
2015-08-11 05:34:32 +00:00
jr z, .displayPokedex
2014-05-22 22:13:20 +00:00
cp JOLTEON
2015-08-11 05:34:32 +00:00
jr z, .displayPokedex
2014-05-22 22:13:20 +00:00
cp VAPOREON
2015-08-11 05:34:32 +00:00
jr z, .displayPokedex
jr .cancel
.displayPokedex
2014-05-22 22:13:20 +00:00
call DisplayPokedex
call LoadScreenTilesFromBuffer2
2015-08-11 05:34:32 +00:00
jr .billsPokemonLoop
.cancel
ld hl, wd730
2014-05-22 22:13:20 +00:00
res 6, [hl]
call LoadScreenTilesFromBuffer2
jp TextScriptEnd
2016-06-12 00:24:04 +00:00
BillsHousePokemonListText1:
2014-05-22 22:13:20 +00:00
TX_FAR _BillsHousePokemonListText1
db "@"
2016-06-12 00:24:04 +00:00
BillsMonListText:
2014-05-22 22:13:20 +00:00
db "EEVEE"
next "FLAREON"
next "JOLTEON"
next "VAPOREON"
next "CANCEL@"
2016-06-12 00:24:04 +00:00
BillsHousePokemonListText2:
2014-05-22 22:13:20 +00:00
TX_FAR _BillsHousePokemonListText2
db "@"
2016-06-12 00:24:04 +00:00
DisplayOakLabEmailText:
ld a, [wSpriteStateData1 + 9]
cp SPRITE_FACING_UP
2014-05-22 22:13:20 +00:00
ret nz
call EnableAutoTextBoxDrawing
tx_pre_jump OakLabEmailText
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
OakLabEmailText:
2014-05-22 22:13:20 +00:00
TX_FAR _OakLabEmailText
db "@"