diff options
Diffstat (limited to 'src/scripts/mason_laboratory.asm')
-rw-r--r-- | src/scripts/mason_laboratory.asm | 509 |
1 files changed, 509 insertions, 0 deletions
diff --git a/src/scripts/mason_laboratory.asm b/src/scripts/mason_laboratory.asm new file mode 100644 index 0000000..24336f5 --- /dev/null +++ b/src/scripts/mason_laboratory.asm @@ -0,0 +1,509 @@ +Script_BeginGame: + start_script + do_frames 60 + walk_player_to_mason_lab + do_frames 120 + enter_map $02, MASON_LABORATORY, 14, 26, NORTH + quit_script_fully + +MasonLaboratoryAfterDuel: + ld hl, .after_duel_table + call FindEndOfDuelScript + ret + +.after_duel_table + db NPC_SAM + db NPC_SAM + dw Script_BeatSam + dw Script_LostToSam + db $00 + +MasonLabLoadMap: + get_event_value EVENT_MASON_LAB_STATE + cp MASON_LAB_RECEIVED_STARTER_DECK + ret nc + ld a, NPC_DRMASON + ld [wTempNPC], a + call FindLoadedNPC + ld bc, Script_EnterLabFirstTime + jp SetNextNPCAndScript + +MasonLabCloseTextBox: + ld a, MAP_EVENT_CHALLENGE_MACHINE + farcall Func_80b89 + ret + +; Lets you access the Challenge Machine if available +MasonLabPressedA: + get_event_value EVENT_RECEIVED_LEGENDARY_CARDS + or a + ret z + ld hl, ChallengeMachineObjectTable + call FindExtraInteractableObjects + ret + +ChallengeMachineObjectTable: + db 10, 4, NORTH + dw Script_ChallengeMachine + db 12, 4, NORTH + dw Script_ChallengeMachine + db $00 + +Script_ChallengeMachine: + start_script + print_text ItsTheChallengeMachineText + challenge_machine + quit_script_fully + +Script_Tech1: + lb bc, 0, EnergyCardList.end - EnergyCardList + ld hl, EnergyCardList +.count_loop + ld a, [hli] + call GetCardCountInCollection + add b + ld b, a + dec c + jr nz, .count_loop + ld a, b + cp 10 + jr c, .low_on_energies + + start_script + test_if_event_false EVENT_RECEIVED_LEGENDARY_CARDS + print_variable_npc_text Tech1MasterMedalExplanationText, Tech1AutoDeckMachineExplanationText + quit_script_fully + +.low_on_energies + ld c, EnergyCardList.end - EnergyCardList + ld hl, EnergyCardList +.next_energy_card + ld b, 10 + ld a, [hli] +.add_loop + push af + call AddCardToCollection + pop af + dec b + jr nz, .add_loop + dec c + jr nz, .next_energy_card + + start_script + print_npc_text Tech1FewEnergyCardsText + pause_song + play_song MUSIC_BOOSTER_PACK + print_npc_text Tech1ReceivedEnergyCardsText + wait_for_song_to_finish + resume_song + print_text_quit_fully Tech1GoodbyeText + +EnergyCardList: + db GRASS_ENERGY + db FIRE_ENERGY + db WATER_ENERGY + db LIGHTNING_ENERGY + db FIGHTING_ENERGY + db PSYCHIC_ENERGY +.end + +Script_Tech2: + start_script + test_if_event_false EVENT_RECEIVED_LEGENDARY_CARDS + print_variable_npc_text Tech2LegendaryCardsExplanationText, Tech2LegendaryCardsCongratsText + quit_script_fully + +Script_Tech3: + start_script + test_if_event_false EVENT_RECEIVED_LEGENDARY_CARDS + print_variable_npc_text Tech3BoosterPackExplanationText, Tech3LegendaryCardsCongratsText + quit_script_fully + +Script_Tech4: + start_script + test_if_event_false EVENT_RECEIVED_LEGENDARY_CARDS + print_variable_npc_text Tech4ClubsExplanationText, Tech4DefeatedTheGrandMastersText + quit_script_fully + +Preload_Tech5: + get_event_value EVENT_RECEIVED_LEGENDARY_CARDS + or a + jr z, .skip + ld hl, wLoadNPCXPos + inc [hl] + inc [hl] +.skip + scf + ret + +Script_Tech5: + start_script + test_if_event_false EVENT_RECEIVED_LEGENDARY_CARDS + print_variable_npc_text Tech5DiaryAndEmailExplanationText, Tech5ChallengeMachineExplanationText + quit_script_fully + +Preload_Sam: + get_event_value EVENT_MASON_LAB_STATE + cp MASON_LAB_IN_PRACTICE_DUEL + jr nc, .sam_at_table + ld a, $0a + ld [wLoadNPCXPos], a + ld a, $08 + ld [wLoadNPCYPos], a + ld a, SOUTH + ld [wLoadNPCDirection], a +.sam_at_table + scf + ret + +Script_Sam: + start_script + show_sam_normal_multichoice + close_text_box + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_NORMAL_DUEL, .ows_d63b + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_RULES, Script_LostToSam.ows_d6b0 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_NOTHING, .ows_d637 +; SAM_MENU_PRACTICE_DUEL + print_npc_text Text05cb + ask_question_jump Text05cc, .ows_d647 +.ows_d637 + print_npc_text Text05cd + quit_script_fully + +.ows_d63b + print_npc_text Text05ce + ask_question_jump Text05cf, .ows_d647 + print_npc_text Text05d0 + quit_script_fully + +.ows_d647 + close_text_box + jump_if_player_coords_match 4, 12, .ows_above_sam + jump_if_player_coords_match 2, 14, .ows_left_of_sam +; ows_below_sam + set_player_direction WEST + move_player WEST, 1 + set_player_direction NORTH + move_player NORTH, 1 +.ows_left_of_sam + set_player_direction NORTH + move_player NORTH, 1 + set_player_direction EAST + move_player EAST, 1 +.ows_above_sam + set_player_direction EAST + move_player EAST, 1 + move_player EAST, 1 + move_player EAST, 1 + set_player_direction SOUTH + move_player SOUTH, 1 + set_player_direction WEST + move_active_npc NPCMovement_d889 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_NORMAL_DUEL, .ows_d685 + start_duel PRIZES_2, SAMS_PRACTICE_DECK_ID, MUSIC_DUEL_THEME_1 + quit_script_fully + +.ows_d685 + start_duel PRIZES_2, SAMS_NORMAL_DECK_ID, MUSIC_DUEL_THEME_1 + quit_script_fully + +Script_BeatSam: + start_script + jump_if_event_equal EVENT_MASON_LAB_STATE, MASON_LAB_IN_PRACTICE_DUEL, Script_EnterLabFirstTime.ows_d82d + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_PRACTICE_DUEL, Script_LostToSam.ows_d6ad + print_npc_text Text05d1 + give_booster_packs BOOSTER_ENERGY_RANDOM, NO_BOOSTER, NO_BOOSTER + print_text_quit_fully Text05d2 + +Script_LostToSam: + start_script + jump_if_event_equal EVENT_MASON_LAB_STATE, MASON_LAB_IN_PRACTICE_DUEL, Script_EnterLabFirstTime.ows_d82d + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_PRACTICE_DUEL, .ows_d6ad + print_text_quit_fully Text05d3 + +.ows_d6ad + print_text_quit_fully Text05d4 + +.ows_d6b0 + print_npc_text Text05d5 +.ows_d6b3 + close_text_box + show_sam_rules_multichoice + close_text_box + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_NOTHING_TO_ASK, Script_Sam.ows_d637 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_ATTACKING, .ows_d6df + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_RETREATING, .ows_d6e5 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_EVOLVING, .ows_d6eb + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_POKEMON_POWER, .ows_d6f1 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_ENDING_YOUR_TURN, .ows_d6f7 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_WIN_OR_LOSS, .ows_d6fd +; SAM_MENU_ENERGY + print_npc_text Text05d6 + script_jump .ows_d6b3 + +.ows_d6df + print_npc_text Text05d7 + script_jump .ows_d6b3 + +.ows_d6e5 + print_npc_text Text05d8 + script_jump .ows_d6b3 + +.ows_d6eb + print_npc_text Text05d9 + script_jump .ows_d6b3 + +.ows_d6f1 + print_npc_text Text05da + script_jump .ows_d6b3 + +.ows_d6f7 + print_npc_text Text05db + script_jump .ows_d6b3 + +.ows_d6fd + print_npc_text Text05dc + script_jump .ows_d6b3 + +Func_d703: + get_event_value EVENT_RECEIVED_LEGENDARY_CARDS + or a + ret z + ld a, $0a + farcall Func_80ba4 + ret + +Preload_DrMason: + call Func_d703 + get_event_value EVENT_MASON_LAB_STATE + cp MASON_LAB_IN_PRACTICE_DUEL + jr nz, .not_practice_duel + ld a, $06 + ld [wLoadNPCXPos], a + ld a, $0c + ld [wLoadNPCYPos], a +.not_practice_duel + scf + ret + +Script_DrMason: + start_script + jump_if_event_true EVENT_RONALD_FIRST_CLUB_ENTRANCE_ENCOUNTER, .ows_d72f + print_text_quit_fully Text05dd + +.ows_d72f + try_give_medal_pc_packs + jump_if_event_greater_or_equal EVENT_MEDAL_COUNT, 2, .ows_d738 + print_text_quit_fully Text05de + +.ows_d738 + jump_if_event_greater_or_equal EVENT_MEDAL_COUNT, 7, .ows_d740 + print_text_quit_fully Text05df + +.ows_d740 + jump_if_event_true EVENT_RECEIVED_LEGENDARY_CARDS, .ows_d747 + print_text_quit_fully Text05e0 + +.ows_d747 + jump_if_event_true EVENT_DRMASON_CONGRATULATED_PLAYER, .ows_d750 + max_out_event_value EVENT_DRMASON_CONGRATULATED_PLAYER + print_text_quit_fully Text05e1 + +.ows_d750 + print_text_quit_fully Text05e2 + +Script_EnterLabFirstTime: + start_script + move_player NORTH, 2 + move_player NORTH, 2 + move_player NORTH, 2 + move_player NORTH, 2 + move_player NORTH, 2 + move_player NORTH, 2 + move_player NORTH, 2 + move_player NORTH, 2 + move_player NORTH, 2 + print_npc_text Text05e3 + close_advanced_text_box + set_next_npc_and_script NPC_SAM, .ows_d779 + end_script + ret + +.ows_d779 + start_script + move_active_npc NPCMovement_d880 + print_npc_text Text05e4 + set_dialog_npc NPC_DRMASON + print_npc_text Text05e5 + close_text_box + move_active_npc NPCMovement_d882 + set_active_npc_direction EAST + set_player_direction WEST + close_advanced_text_box + set_next_npc_and_script NPC_DRMASON, .ows_d794 + end_script + ret + +.ows_d794 + start_script + move_active_npc NPCMovement_d88b + do_frames 40 + print_npc_text Text05e6 + close_text_box + move_player WEST, 1 + move_player WEST, 1 + set_player_direction SOUTH + move_player SOUTH, 1 + move_player SOUTH, 1 + move_player SOUTH, 1 + set_player_direction WEST + move_active_npc NPCMovement_d894 + print_npc_text Text05e7 + set_dialog_npc NPC_SAM + print_npc_text Text05e8 +.ows_d7bc + close_text_box + show_sam_rules_multichoice + close_text_box + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_NOTHING_TO_ASK, .ows_d80c + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_ATTACKING, .ows_d7e8 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_RETREATING, .ows_d7ee + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_EVOLVING, .ows_d7f4 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_POKEMON_POWER, .ows_d7fa + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_ENDING_YOUR_TURN, .ows_d800 + jump_if_event_equal EVENT_SAM_MENU_CHOICE, SAM_MENU_WIN_OR_LOSS, .ows_d806 +; SAM_MENU_ENERGY + print_npc_text Text05d6 + script_jump .ows_d7bc + +.ows_d7e8 + print_npc_text Text05d7 + script_jump .ows_d7bc + +.ows_d7ee + print_npc_text Text05d8 + script_jump .ows_d7bc + +.ows_d7f4 + print_npc_text Text05d9 + script_jump .ows_d7bc + +.ows_d7fa + print_npc_text Text05da + script_jump .ows_d7bc + +.ows_d800 + print_npc_text Text05db + script_jump .ows_d7bc + +.ows_d806 + print_npc_text Text05dc + script_jump .ows_d7bc + +.ows_d80c + print_npc_text Text05e9 + ask_question_jump_default_yes NULL, .ows_d817 + script_jump .ows_d7bc + +.ows_d817 + set_dialog_npc NPC_DRMASON + print_npc_text Text05ea + script_nop + set_event EVENT_MASON_LAB_STATE, MASON_LAB_IN_PRACTICE_DUEL + close_advanced_text_box + set_next_npc_and_script NPC_SAM, .ows_d827 + end_script + ret + +.ows_d827 + start_script + start_duel PRIZES_2, SAMS_PRACTICE_DECK_ID, MUSIC_DUEL_THEME_1 + quit_script_fully + +.ows_d82d + close_advanced_text_box + set_next_npc_and_script NPC_DRMASON, Script_AfterPracticeDuel + end_script + ret + +Script_AfterPracticeDuel: + start_script + print_npc_text Text05eb + print_npc_text Text05ef + close_text_box + move_active_npc NPCMovement_d896 + set_player_direction NORTH + move_player NORTH, 1 + move_player NORTH, 1 + move_player NORTH, 1 + set_player_direction EAST + move_player EAST, 1 + move_player EAST, 1 + set_player_direction NORTH + print_npc_text Text05f0 + close_text_box + print_text Text05f1 + close_text_box + print_npc_text Text05f2 +.ows_d85f + choose_starter_deck + close_text_box + ask_question_jump Text05f3, .ows_d869 + script_jump .ows_d85f + +.ows_d869 + print_npc_text Text05f4 + close_text_box + pause_song + play_song MUSIC_BOOSTER_PACK + print_text Text05f5 + wait_for_song_to_finish + resume_song + close_text_box + set_event EVENT_MASON_LAB_STATE, MASON_LAB_RECEIVED_STARTER_DECK + give_stater_deck + print_npc_text Text05f6 + save_game 0 + quit_script_fully + +NPCMovement_d880: + db EAST + db $ff + +NPCMovement_d882: + db SOUTH + db SOUTH + db WEST + db WEST + db WEST + db WEST + db SOUTH +NPCMovement_d889: + db EAST | NO_MOVE + db $ff + +NPCMovement_d88b: + db WEST + db SOUTH + db SOUTH + db SOUTH + db WEST + db WEST + db WEST + db EAST | NO_MOVE + db $ff + +NPCMovement_d894: + db SOUTH | NO_MOVE + db $ff + +NPCMovement_d896: + db NORTH + db NORTH + db NORTH + db EAST + db EAST + db EAST + db EAST + db SOUTH | NO_MOVE + db $ff |