From 7d77c5f3fcb58af86a03b6cb70e22dc3b56bdf5b Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Sat, 24 Jun 2023 23:52:09 +0100 Subject: [PATCH] Tweaked some overworld weather animations, added NPCTrainer#version, added Debug function for editing more things in the phone and its contacts --- Data/Scripts/001_Settings.rb | 10 +- .../001_Hardcoded data/012_Weather.rb | 28 +-- .../010_Data/002_PBS data/015_Trainer.rb | 2 +- .../001_Overworld_Weather.rb | 2 +- .../015_Trainers and player/001_Trainer.rb | 4 +- .../003_Debug menus/002_Debug_MenuCommands.rb | 234 ++++++++++++------ 6 files changed, 179 insertions(+), 101 deletions(-) diff --git a/Data/Scripts/001_Settings.rb b/Data/Scripts/001_Settings.rb index 25489a710..4f396f257 100644 --- a/Data/Scripts/001_Settings.rb +++ b/Data/Scripts/001_Settings.rb @@ -357,11 +357,11 @@ module Settings #============================================================================= - # An array of available languages in the game, and their corresponding - # filename. Text files for a language are extracted to a folder called - # "Text_filename_core" or "Text_filename_game", and are recompiled into files - # in the Data folder called "messages_filename_core.dat" or - # "messages_filename_game.dat". + # An array of available languages in the game. Each one is an array containing + # the display name of the language in-game, and that language's filename + # fragment. A language will use the language data files from the Data folder + # called messages_FRAGMENT_core.dat and messages_FRAGMENT_game.dat (if they + # exist). LANGUAGES = [ # ["English", "english"], # ["Deutsch", "deutsch"] diff --git a/Data/Scripts/010_Data/001_Hardcoded data/012_Weather.rb b/Data/Scripts/010_Data/001_Hardcoded data/012_Weather.rb index d44cbf365..8835e6801 100644 --- a/Data/Scripts/010_Data/001_Hardcoded data/012_Weather.rb +++ b/Data/Scripts/010_Data/001_Hardcoded data/012_Weather.rb @@ -72,10 +72,10 @@ GameData::Weather.register({ :id_number => 1, # Must be 1 (preset RMXP weather) :category => :Rain, :graphics => [["rain_1", "rain_2", "rain_3", "rain_4"]], # Last is splash - :particle_delta_x => -1200, - :particle_delta_y => 4800, + :particle_delta_x => -600, + :particle_delta_y => 2400, :tone_proc => proc { |strength| - next Tone.new(-strength * 3 / 4, -strength * 3 / 4, -strength * 3 / 4, 10) + next Tone.new(-strength / 2, -strength / 2, -strength / 2, 10) } }) @@ -85,10 +85,10 @@ GameData::Weather.register({ :id_number => 2, # Must be 2 (preset RMXP weather) :category => :Rain, :graphics => [["storm_1", "storm_2", "storm_3", "storm_4"]], # Last is splash - :particle_delta_x => -4800, - :particle_delta_y => 4800, + :particle_delta_x => -3600, + :particle_delta_y => 3600, :tone_proc => proc { |strength| - next Tone.new(-strength * 3 / 2, -strength * 3 / 2, -strength * 3 / 2, 20) + next Tone.new(-strength * 3 / 4, -strength * 3 / 4, -strength * 3 / 4, 10) } }) @@ -110,10 +110,10 @@ GameData::Weather.register({ :id_number => 4, :category => :Hail, :graphics => [["blizzard_1", "blizzard_2", "blizzard_3", "blizzard_4"], ["blizzard_tile"]], - :particle_delta_x => -960, + :particle_delta_x => -720, :particle_delta_y => 240, - :tile_delta_x => -1440, - :tile_delta_y => 720, + :tile_delta_x => -1200, + :tile_delta_y => 600, :tone_proc => proc { |strength| next Tone.new(strength * 3 / 4, strength * 3 / 4, strength * 3 / 4, 0) } @@ -126,8 +126,8 @@ GameData::Weather.register({ :graphics => [["sandstorm_1", "sandstorm_2", "sandstorm_3", "sandstorm_4"], ["sandstorm_tile"]], :particle_delta_x => -1200, :particle_delta_y => 640, - :tile_delta_x => -720, - :tile_delta_y => 360, + :tile_delta_x => -800, + :tile_delta_y => 400, :tone_proc => proc { |strength| next Tone.new(strength / 2, 0, -strength / 2, 0) } @@ -138,10 +138,10 @@ GameData::Weather.register({ :id_number => 6, :category => :Rain, :graphics => [["storm_1", "storm_2", "storm_3", "storm_4"]], # Last is splash - :particle_delta_x => -4800, - :particle_delta_y => 4800, + :particle_delta_x => -3600, + :particle_delta_y => 3600, :tone_proc => proc { |strength| - next Tone.new(-strength * 3 / 2, -strength * 3 / 2, -strength * 3 / 2, 20) + next Tone.new(-strength * 3 / 4, -strength * 3 / 4, -strength * 3 / 4, 10) } }) diff --git a/Data/Scripts/010_Data/002_PBS data/015_Trainer.rb b/Data/Scripts/010_Data/002_PBS data/015_Trainer.rb index 10a51c3d7..7c50a1f35 100644 --- a/Data/Scripts/010_Data/002_PBS data/015_Trainer.rb +++ b/Data/Scripts/010_Data/002_PBS data/015_Trainer.rb @@ -121,7 +121,7 @@ module GameData break end # Create trainer object - trainer = NPCTrainer.new(tr_name, @trainer_type) + trainer = NPCTrainer.new(tr_name, @trainer_type, @version) trainer.id = $player.make_foreign_ID trainer.items = @items.clone trainer.lose_text = self.lose_text diff --git a/Data/Scripts/012_Overworld/001_Overworld visuals/001_Overworld_Weather.rb b/Data/Scripts/012_Overworld/001_Overworld visuals/001_Overworld_Weather.rb index ebe48bfb8..5d9fb1171 100644 --- a/Data/Scripts/012_Overworld/001_Overworld visuals/001_Overworld_Weather.rb +++ b/Data/Scripts/012_Overworld/001_Overworld visuals/001_Overworld_Weather.rb @@ -411,7 +411,7 @@ module RPG @sun_magnitude = weather_max if @sun_magnitude != weather_max && @sun_magnitude != -weather_max @sun_magnitude *= -1 if (@sun_magnitude > 0 && @sun_strength > @sun_magnitude) || (@sun_magnitude < 0 && @sun_strength < 0) - @sun_strength += @sun_magnitude.to_f * Graphics.delta / 0.4 # 0.4 seconds per half flash + @sun_strength += @sun_magnitude.to_f * Graphics.delta / 0.8 # 0.8 seconds per half flash tone_red += @sun_strength tone_green += @sun_strength tone_blue += @sun_strength / 2 diff --git a/Data/Scripts/015_Trainers and player/001_Trainer.rb b/Data/Scripts/015_Trainers and player/001_Trainer.rb index 3df4d6ff9..6f99f9a62 100644 --- a/Data/Scripts/015_Trainers and player/001_Trainer.rb +++ b/Data/Scripts/015_Trainers and player/001_Trainer.rb @@ -182,12 +182,14 @@ end # Trainer class for NPC trainers #=============================================================================== class NPCTrainer < Trainer + attr_accessor :version attr_accessor :items attr_accessor :lose_text attr_accessor :win_text - def initialize(name, trainer_type) + def initialize(name, trainer_type, version = 0) super + @version = version @items = [] @lose_text = nil @win_text = nil diff --git a/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb b/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb index fbe970bd8..5073752b2 100644 --- a/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb +++ b/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb @@ -500,35 +500,6 @@ MenuHandlers.add(:debug_menu, :roamers, { } }) -MenuHandlers.add(:debug_menu, :toggle_rematches_possible, { - "name" => _INTL("Toggle Phone Rematches Possible"), - "parent" => :battle_menu, - "description" => _INTL("Toggles whether trainers in the phone can be rebattled."), - "effect" => proc { - Phone.rematches_enabled = !Phone.rematches_enabled - pbMessage(_INTL("Trainers in the phone can now be rebattled.")) if Phone.rematches_enabled - pbMessage(_INTL("Trainers in the phone cannot be rebattled.")) if !Phone.rematches_enabled - } -}) - -MenuHandlers.add(:debug_menu, :ready_rematches, { - "name" => _INTL("Ready All Phone Rematches"), - "parent" => :battle_menu, - "description" => _INTL("Make all trainers in the phone ready for rematches."), - "effect" => proc { - if !$PokemonGlobal.phone || $PokemonGlobal.phone.contacts.length == 0 - pbMessage(_INTL("There are no trainers in the Phone.")) - else - $PokemonGlobal.phone.contacts.each do |contact| - next if !contact.trainer? - contact.rematch_flag = 1 - contact.set_trainer_event_ready_for_rematch - end - pbMessage(_INTL("All trainers in the Phone are now ready to rebattle.")) - end - } -}) - MenuHandlers.add(:debug_menu, :reset_trainers, { "name" => _INTL("Reset Map's Trainers"), "parent" => :battle_menu, @@ -744,6 +715,56 @@ MenuHandlers.add(:debug_menu, :open_storage, { } }) +#=============================================================================== +# Shadow Pokémon options +#=============================================================================== +MenuHandlers.add(:debug_menu, :shadow_pokemon_menu, { + "name" => _INTL("Shadow Pokémon Options..."), + "parent" => :pokemon_menu, + "description" => _INTL("Snag Machine and purification."), + "always_show" => false +}) + +MenuHandlers.add(:debug_menu, :toggle_snag_machine, { + "name" => _INTL("Toggle Snag Machine"), + "parent" => :shadow_pokemon_menu, + "description" => _INTL("Toggle all Poké Balls being able to catch Shadow Pokémon."), + "effect" => proc { + $player.has_snag_machine = !$player.has_snag_machine + pbMessage(_INTL("Gave the Snag Machine.")) if $player.has_snag_machine + pbMessage(_INTL("Lost the Snag Machine.")) if !$player.has_snag_machine + } +}) + +MenuHandlers.add(:debug_menu, :toggle_purify_chamber_access, { + "name" => _INTL("Toggle Purify Chamber Access"), + "parent" => :shadow_pokemon_menu, + "description" => _INTL("Toggle access to the Purify Chamber via the PC."), + "effect" => proc { + $player.seen_purify_chamber = !$player.seen_purify_chamber + pbMessage(_INTL("The Purify Chamber is accessible.")) if $player.seen_purify_chamber + pbMessage(_INTL("The Purify Chamber is not accessible.")) if !$player.seen_purify_chamber + } +}) + +MenuHandlers.add(:debug_menu, :purify_chamber, { + "name" => _INTL("Use Purify Chamber"), + "parent" => :shadow_pokemon_menu, + "description" => _INTL("Open the Purify Chamber for Shadow Pokémon purification."), + "effect" => proc { + pbPurifyChamber + } +}) + +MenuHandlers.add(:debug_menu, :relic_stone, { + "name" => _INTL("Use Relic Stone"), + "parent" => :shadow_pokemon_menu, + "description" => _INTL("Choose a Shadow Pokémon to show to the Relic Stone for purification."), + "effect" => proc { + pbRelicStone + } +}) + #=============================================================================== # Item options #=============================================================================== @@ -937,6 +958,111 @@ MenuHandlers.add(:debug_menu, :toggle_pokegear, { } }) +MenuHandlers.add(:debug_menu, :edit_phone_contacts, { + "name" => _INTL("Edit Phone And Contacts"), + "parent" => :player_menu, + "description" => _INTL("Edit properties of the phone and of contacts registered in it."), + "effect" => proc { + if !$PokemonGlobal.phone + pbMessage(_INTL("The phone is not defined.")) + next + end + cmd = 0 + loop do + cmds = [] + time = $PokemonGlobal.phone.time_to_next_call.to_i # time is in seconds + min = time / 60 + sec = time % 60 + cmds.push(_INTL("Time until next call: {1}m {2}s", min, sec)) + cmds.push((Phone.rematches_enabled ? "[Y]" : "[ ]") + " " + _INTL("Rematches possible")) + cmds.push(_INTL("Maximum rematch version : {1}", Phone.rematch_variant)) + if $PokemonGlobal.phone.contacts.length > 0 + cmds.push(_INTL("Make all contacts ready for a rematch")) + cmds.push(_INTL("Edit individual contacts: {1}", $PokemonGlobal.phone.contacts.length)) + end + cmd = pbShowCommands(nil, cmds, -1, cmd) + break if cmd < 0 + case cmd + when 0 # Time until next call + params = ChooseNumberParams.new + params.setRange(0, 99999) + params.setDefaultValue(min) + params.setCancelValue(-1) + new_time = pbMessageChooseNumber(_INTL("Set the time (in minutes) until the next phone call."), params) + $PokemonGlobal.phone.time_to_next_call = new_time * 60 if new_time >= 0 + when 1 # Rematches possible + Phone.rematches_enabled = !Phone.rematches_enabled + when 2 # Maximum rematch version + params = ChooseNumberParams.new + params.setRange(0, 99) + params.setDefaultValue(Phone.rematch_variant) + new_version = pbMessageChooseNumber(_INTL("Set the maximum version number a trainer contact can reach."), params) + Phone.rematch_variant = new_version + when 3 # Make all contacts ready for a rematch + $PokemonGlobal.phone.contacts.each do |contact| + next if !contact.trainer? + contact.rematch_flag = 1 + contact.set_trainer_event_ready_for_rematch + end + pbMessage(_INTL("All trainers in the phone are now ready to rebattle.")) + when 4 # Edit individual contacts + contact_cmd = 0 + loop do + contact_cmds = [] + $PokemonGlobal.phone.contacts.each do |contact| + visible_string = (contact.visible?) ? "[Y]" : "[ ]" + if contact.trainer? + battle_string = (contact.can_rematch?) ? "(can battle)" : "" + contact_cmds.push(sprintf("%s %s (%i) %s", visible_string, contact.display_name, contact.variant, battle_string)) + else + contact_cmds.push(sprintf("%s %s", visible_string, contact.display_name)) + end + end + contact_cmd = pbShowCommands(nil, contact_cmds, -1, contact_cmd) + break if contact_cmd < 0 + contact = $PokemonGlobal.phone.contacts[contact_cmd] + edit_cmd = 0 + loop do + edit_cmds = [] + edit_cmds.push((contact.visible? ? "[Y]" : "[ ]") + " " + _INTL("Contact visible")) if contact.can_hide? + if contact.trainer? + edit_cmds.push((contact.can_rematch? ? "[Y]" : "[ ]") + " " + _INTL("Can battle")) + ready_time = contact.time_to_ready # time is in seconds + ready_min = ready_time / 60 + ready_sec = ready_time % 60 + edit_cmds.push(_INTL("Time until ready to battle: {1}m {2}s", ready_min, ready_sec)) + edit_cmds.push(_INTL("Last defeated version: {1}", contact.variant)) + end + break if edit_cmds.length == 0 + edit_cmd = pbShowCommands(nil, edit_cmds, -1, edit_cmd) + break if edit_cmd < 0 + case edit_cmd + when 0 # Visibility + contact.visible = !contact.visible + when 1 # Can battle + contact.rematch_flag = (contact.can_rematch?) ? 0 : 1 + contact.time_to_ready = 0 if contact.can_rematch? + when 2 # Time until ready to battle + params = ChooseNumberParams.new + params.setRange(0, 99999) + params.setDefaultValue(ready_min) + params.setCancelValue(-1) + new_time = pbMessageChooseNumber(_INTL("Set the time (in minutes) until this trainer is ready to battle."), params) + contact.time_to_ready = new_time * 60 if new_time >= 0 + when 3 # Last defeated version + params = ChooseNumberParams.new + params.setRange(0, 99) + params.setDefaultValue(contact.variant) + new_version = pbMessageChooseNumber(_INTL("Set the last defeated version number of this trainer."), params) + contact.version = contact.start_version + new_version + end + end + end + end + end + } +}) + MenuHandlers.add(:debug_menu, :toggle_box_link, { "name" => _INTL("Toggle Party Screen Access To Storage"), "parent" => :player_menu, @@ -1017,56 +1143,6 @@ MenuHandlers.add(:debug_menu, :random_id, { } }) -#=============================================================================== -# Shadow Pokémon options -#=============================================================================== -MenuHandlers.add(:debug_menu, :shadow_pokemon_menu, { - "name" => _INTL("Shadow Pokémon Options..."), - "parent" => :main, - "description" => _INTL("Snag Machine and purification."), - "always_show" => false -}) - -MenuHandlers.add(:debug_menu, :toggle_snag_machine, { - "name" => _INTL("Toggle Snag Machine"), - "parent" => :shadow_pokemon_menu, - "description" => _INTL("Toggle all Poké Balls being able to catch Shadow Pokémon."), - "effect" => proc { - $player.has_snag_machine = !$player.has_snag_machine - pbMessage(_INTL("Gave the Snag Machine.")) if $player.has_snag_machine - pbMessage(_INTL("Lost the Snag Machine.")) if !$player.has_snag_machine - } -}) - -MenuHandlers.add(:debug_menu, :toggle_purify_chamber_access, { - "name" => _INTL("Toggle Purify Chamber Access"), - "parent" => :shadow_pokemon_menu, - "description" => _INTL("Toggle access to the Purify Chamber via the PC."), - "effect" => proc { - $player.seen_purify_chamber = !$player.seen_purify_chamber - pbMessage(_INTL("The Purify Chamber is accessible.")) if $player.seen_purify_chamber - pbMessage(_INTL("The Purify Chamber is not accessible.")) if !$player.seen_purify_chamber - } -}) - -MenuHandlers.add(:debug_menu, :purify_chamber, { - "name" => _INTL("Use Purify Chamber"), - "parent" => :shadow_pokemon_menu, - "description" => _INTL("Open the Purify Chamber for Shadow Pokémon purification."), - "effect" => proc { - pbPurifyChamber - } -}) - -MenuHandlers.add(:debug_menu, :relic_stone, { - "name" => _INTL("Use Relic Stone"), - "parent" => :shadow_pokemon_menu, - "description" => _INTL("Choose a Shadow Pokémon to show to the Relic Stone for purification."), - "effect" => proc { - pbRelicStone - } -}) - #=============================================================================== # PBS file editors #===============================================================================