Release 6.9.0

This commit is contained in:
chardub
2026-11-02 11:34:46 -05:00
parent 060726298d
commit ae6e2ebc64
5697 changed files with 131795 additions and 17423 deletions
@@ -23,7 +23,7 @@ end
def Kernel.getRoamingMap(roamingArrayPos)
curmap = $PokemonGlobal.roamPosition[roamingArrayPos]
mapinfos = $RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
text = mapinfos[curmap].name #,(curmap==$game_map.map_id) ? _INTL("(this map)") : "")
text = pbGetMessage(MessageTypes::MapNames, curmap) #,(curmap==$game_map.map_id) ? _INTL("(this map)") : "")
return text
end
@@ -63,4 +63,4 @@ end
def setForcedAltSprites(forcedSprites_map)
$PokemonTemp.forced_alt_sprites = forcedSprites_map
end
end
@@ -82,9 +82,9 @@ def pbReceiveCosmeticsMoney(amount, showMessage=true, msgwindow=nil, goldwindow=
if showMessage
if amount >= 0
pbMessage(_INTL("{1} received {2} {3}!", $Trainer.name, amount.to_s_formatted, COSMETIC_CURRENCY_NAME))
pbMessage(_INTL("{1} received {2} {3}!", $Trainer.name, amount.to_s_formatted, get_cosmetic_currency_name))
else
pbMessage(_INTL("{1} spent {2} {3}!", $Trainer.name, amount.abs.to_s_formatted, COSMETIC_CURRENCY_NAME))
pbMessage(_INTL("{1} spent {2} {3}!", $Trainer.name, amount.abs.to_s_formatted, get_cosmetic_currency_name))
end
end
@@ -111,7 +111,7 @@ def pbReceiveCosmeticsMoney(amount, showMessage=true, msgwindow=nil, goldwindow=
sign = amount >= 0 ? "+" : "-"
goldwindow.text = _INTL(
"{1}:\n<ar>{2}</ar>\n<ar><c3={3}>{4} {5}</c3></ar>",
COSMETIC_CURRENCY_NAME,
get_cosmetic_currency_name,
current.to_s_formatted,
color,
sign,
@@ -131,7 +131,7 @@ def pbReceiveCosmeticsMoney(amount, showMessage=true, msgwindow=nil, goldwindow=
# Final display text
goldwindow.text = _INTL(
"{1}:\n<ar>{2}</ar>",
COSMETIC_CURRENCY_NAME,
get_cosmetic_currency_name,
targetMoney.to_s_formatted
)
@@ -2,6 +2,11 @@ def unlock_easter_egg_hats()
if $Trainer.name.downcase == "ash"
$Trainer.hat = HAT_ASH
$Trainer.unlock_hat(HAT_ASH)
$Trainer.clothes = CLOTHES_ASH
$Trainer.unlock_clothes(CLOTHES_ASH)
$Trainer.unlock_clothes(CLOTHES_ASH_2)
end
if $Trainer.name.downcase == "frogman"
$Trainer.hat = HAT_FROG
@@ -96,7 +101,12 @@ def give_date_specific_hats()
end
end
class PokemonTemp
attr_accessor :current_party
attr_accessor :obtainable_outfits_from_team
end
#Random chance of obtaining a hat related to the wild Pokemon you just defeated after a battle
def check_obtain_hat_after_battle(species)
hat_chance = 1
if rand(1..100) <= hat_chance
@@ -107,6 +117,35 @@ def check_obtain_hat_after_battle(species)
end
end
#Random chance of obtaining a hat related to the Pokemon in your team that took part in the battle after winning a Trainer battle
def checkObtainClothesAfterBattle(battle_participants)
clothes_chance = 1
if rand(1..100) <= clothes_chance
possible_outfits = list_obtainable_clothes_from_party(battle_participants)
if possible_outfits && !possible_outfits.empty?
pbMessage(_INTL("Huh? Your Pokémon found something during the battle..."))
obtainClothes(possible_outfits.sample)
end
end
end
def list_obtainable_clothes_from_party(battle_participants)
species_list = []
battle_participants.each do |pokemon|
body_pokemon_id = get_body_species_from_symbol(pokemon.species).to_s.downcase
head_pokemon_id = get_head_species_from_symbol(pokemon.species).to_s.downcase
body_pokemon_tag = "pokemon-#{body_pokemon_id}"
head_pokemon_tag = "pokemon-#{head_pokemon_id}"
species_list << body_pokemon_tag unless species_list.include?(body_pokemon_tag)
species_list << head_pokemon_tag unless species_list.include?(head_pokemon_tag)
end
echoln species_list
return if species_list.empty?
possible_clothes = search_clothes(species_list)
possible_clothes = filter_clothes_only_not_owned(possible_clothes)
return possible_clothes
end
def qmarkMaskCheck()
if $Trainer.seen_qmarks_sprite
@@ -66,7 +66,7 @@ def convertAllPokemon()
if $game_switches[SWITCH_RANDOM_TRAINERS] #randomized trainers
Kernel.pbShuffleTrainers()
end
if $game_switches[956] #randomized pokemon
if $game_switches[SWITCH_WILD_RANDOM_GLOBAL] #randomized pokemon
range = pbGet(197) == nil ? 25 : pbGet(197)
Kernel.pbShuffleDex(range, 1)
end
@@ -115,6 +115,10 @@ def numeric_string?(str)
str.match?(/\A\d+\z/)
end
def titleize(str)
str.split(/ |\_/).map(&:capitalize).join(" ")
end
def timeDateGreaterThan(date1, date2)
return (
date1.year > date2.year ||
@@ -44,35 +44,35 @@ def get_egg_group_name(id)
when 0;
return nil
when 1;
return "Monster Pokémon"
return _INTL("Monster Pokémon")
when 2;
return :"Aquatic Pokémon"
return _INTL("Aquatic Pokémon")
when 3;
return :"Bug Pokémon"
return _INTL("Bug Pokémon")
when 4;
return :"Bird Pokémon"
return _INTL("Bird Pokémon")
when 5;
return :"Land Pokémon"
return _INTL("Land Pokémon")
when 6;
return :"Cute Pokémon"
return _INTL("Cute Pokémon")
when 7;
return :"Plant Pokémon"
return _INTL("Plant Pokémon")
when 8;
return :"Human-like Pokémon"
return _INTL("Human-like Pokémon")
when 9;
return :"Aquatic Pokémon"
return _INTL("Aquatic Pokémon")
when 10;
return :"Mineral Pokémon"
return _INTL("Mineral Pokémon")
when 11;
return :"Blob Pokémon"
return _INTL("Blob Pokémon")
when 12;
return :"Fish Pokémon"
return _INTL("Fish Pokémon")
when 13;
return :"Ditto"
return _INTL("Ditto")
when 14;
return :"Dragon Pokémon"
return _INTL("Dragon Pokémon")
when 15;
return :"Legendary Pokémon"
return _INTL("Legendary Pokémon")
end
end
@@ -229,4 +229,4 @@ def getCustomSpeciesListForPokemon(dexNum,allowLegendaries=true)
speciesList << dexNum
end
return speciesList
end
end
@@ -33,7 +33,7 @@ def floorHole(mapBelow, frames_for_fall = 8, bikeOnly = true)
event.instance_variable_set(:@idle_frames, event.instance_variable_get(:@idle_frames) + 1)
frames_for_fall = 0 if bikeOnly && !$PokemonGlobal.bicycle
pbSEPlay("bw_fall")
if event.instance_variable_get(:@idle_frames) >= frames_for_fall
event.instance_variable_set(:@idle_frames, 0)
@@ -47,19 +47,50 @@ def floorHole(mapBelow, frames_for_fall = 8, bikeOnly = true)
event.turn_left
pbWait(4)
pbFadeOutIn {
$game_temp.player_new_map_id = mapBelow
$game_temp.player_new_x = target_x
$game_temp.player_new_y = target_y
pbCancelVehicles
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
playerFall(mapBelow, target_x, target_y)
pbWait(8)
end
end
def floorHoleSameMap(x_offset,y_offset, frames_for_fall = 8, bikeOnly = true, relative_to_player=true,landing_animation = Settings::EXCLAMATION_ANIMATION_ID)
return unless x_offset && y_offset
if relative_to_player
x = $game_player.x+x_offset
y = $game_player.y+y_offset
else
x = x_offset
y = y_offset
end
return if $game_player.moving?
event = this_event()
event.instance_variable_set(:@idle_frames, 0) unless event.instance_variable_defined?(:@idle_frames)
event.instance_variable_set(:@idle_frames, event.instance_variable_get(:@idle_frames) + 1)
frames_for_fall = 0 if bikeOnly && !$PokemonGlobal.bicycle
if event.instance_variable_get(:@idle_frames) >= frames_for_fall
event.instance_variable_set(:@idle_frames, 0)
# Find a passable landing tile on the target map
target_x, target_y = findPassableLanding($game_map.map_id, x, y)
return unless target_x
pbSEPlay("Slash")
playAnimation(Settings::EXCLAMATION_ANIMATION_ID, $game_player.x, $game_player.y)
event.direction_fix = false
event.turn_left
pbWait(4)
playerFall($game_map.map_id, target_x, target_y, landing_animation)
event.turn_down
event.direction_fix = true
pbWait(8)
end
end
# Loads the target map and spirals outward from (start_x, start_y)
# until a passable tile is found. Returns [x, y] or [nil, nil].
def findPassableLanding(map_id, start_x, start_y, max_radius = 10)
@@ -205,3 +236,175 @@ def pokedex_check
return missing
end
def replace_water_autotile(target_base_id = 240)
map = $MapFactory.getMap($game_map.map_id)
tiles_per_autotile = TilemapRenderer::TILES_PER_AUTOTILE rescue 48
for x in 0..map.width - 1
for y in 0..map.height - 1
for z in [2, 1, 0]
tile_id = map.data[x, y, z]
next unless tile_id && tile_id > 0
terrain_tag = GameData::TerrainTag.try_get(map.terrain_tags[tile_id]) if map.terrain_tags
if terrain_tag && terrain_tag.can_surf
shape_index = tile_id % tiles_per_autotile
new_tile_id = target_base_id + shape_index
if map.data[x, y, z] != new_tile_id
echoln "(#{x},#{y},#{z}): #{tile_id} -> #{new_tile_id}"
map.set_tile(x, y, z, new_tile_id)
end
end
end
end
end
end
#checks each of the events passed as ID to see if a berry of a specific type has been planted
# @return
# -1 : Berry not found
# 0 : Berry found, not grown
# 1 : Berry found, fully grown
def check_event_for_berries(wanted_berry_type, variable_result,variable_quantity, events_list = [])
quantity_found = 0
found_berry= false
found_full_grown = false
events_list.each do |event_id|
berry_data = $PokemonGlobal.eventvars[[$game_map.map_id, event_id]]
if berry_data
berry_type = berry_data[1]
growth_stage= berry_data[0]
if berry_type == wanted_berry_type
found_berry = true
quantity_found+=1
if growth_stage == 5
found_full_grown = true
end
end
end
end
pbSet(variable_quantity, quantity_found)
if found_full_grown
pbSet(variable_result, 1) if found_full_grown
elsif found_berry
pbSet(variable_result, 0) if found_berry
else
pbSet(variable_result, -1)
end
return found_berry
end
def berryMasterRandomBerry(rare_berries_only=false)
rare_berries = [ :GREPABERRY, :HONDEWBERRY, :KELPSYBERRY, :MAGOSTBERRY, :NOMELBERRY, :POMEGBERRY,
:QUALOTBERRY, :RABUTABERRY, :TAMATOBERRY,
:SPELONBERRY, :PAMTREBERRY, :WATMELBERRY, :DURINBERRY, :BELUEBERRY, # given by the wife in the originals
]
normal_berries = [ :ASPEARBERRY, :CHERIBERRY, :CHESTOBERRY, :LEPPABERRY, :LUMBERRY, :ORANBERRY,
:PECHABERRY, :PERSIMBERRY, :RAWSTBERRY, :SITRUSBERRY]
berries_list = rare_berries_only ? rare_berries : (rare_berries + normal_berries)
berry = berries_list.sample
pbReceiveItem(berry)
end
def last_map_position_smell_npc
last_map = $Trainer.last_visited_town_map_location
case last_map
when MAP_MT_CHIMNEY
when MAP_ROUTE_112
when MAP_ROUTE_112_NORTH
when MAP_JAGGED_PASS
pbCallBub(2,@event_id)
pbMessage(_INTL("Sniff...\nUm... You, uh... smell singed."))
pbCallBub(2,@event_id)
pbMessage(_INTL("Were you at a volcano or something?"))
when MAP_DESERT
when MAP_ROUTE_113
when MAP_FALLARBOR
pbCallBub(2,@event_id)
pbMessage(_INTL("Sniff...\nUm... You, uh... smell like dust."))
pbCallBub(2,@event_id)
pbMessage(_INTL("Were you in a desert or something?"))
when MAP_RUSTURF_TUNNEL
when MAP_SHOAL_CAVE
when MAP_METEOR_FALLS
when MAP_DESERT_UNDERPASS
when MAP_GRANITE_CAVE
pbCallBub(2,@event_id)
pbMessage(_INTL("Sniff...\nUm... You, uh... smell damp."))
pbCallBub(2,@event_id)
pbMessage(_INTL("Were you in a cave or something?"))
when MAP_RUSTBORO
pbCallBub(2,@event_id)
pbMessage(_INTL("Sniff...\nUm... You, uh... smell like rust."))
pbCallBub(2,@event_id)
pbMessage(_INTL("Were you in an old city or something?"))
when MAP_MAUVILLE
pbCallBub(2,@event_id)
pbMessage(_INTL("Sniff...\nUm... You, uh... smell like ozone."))
pbCallBub(2,@event_id)
pbMessage(_INTL("Were you near a power plant or something?"))
when MAP_DEWFORD
when MAP_SLATEPORT
when MAP_MOSSDEEP
when MAP_SOOTOPOLIS
when MAP_PACIFIDLOG
when MAP_AQUA_CAMP
when MAP_ROUTE_104_SOUTH
when MAP_ROUTE_105
when MAP_ROUTE_106
when MAP_ROUTE_107
when MAP_ROUTE_108
when MAP_ROUTE_109
pbCallBub(2,@event_id)
pbMessage(_INTL("Sniff...\nUm... You, uh... smell like brine."))
pbCallBub(2,@event_id)
pbMessage(_INTL("Were you at the beach or something?"))
else
pbCallBub(2,@event_id)
pbMessage(_INTL("Sniff...\nUm... You, uh... smell like the rainforest."))
pbCallBub(2,@event_id)
pbMessage(_INTL("Ah, the smell of home!"))
end
end
#
DIRECTION_ARROWS = {
left: "←",
right: "→",
down: "↓",
up: "↑"
}
def direction_sign(**directions)
lines = []
directions.each do |key, label|
arrow = DIRECTION_ARROWS[key]
next if arrow.nil? || label.nil?
lines << "#{arrow} #{label}"
end
pbMessage(lines.join("\n"))
end
# map = $MapFactory.getMap($game_map.map_id)
#
# erased_tiles = []
# for tile in tiles_to_cut
# for map_layer in [2, 1, 0]
# tile_id = map.data[tile[1], tile[2], map_layer]
# cut_tile_id = tile_id -8
# next if tile_id == nil
# tile_tag = GameData::TerrainTag.try_get(map.terrain_tags[tile_id])
# next unless tile_tag.battle_environment == :Grass
# map.erase_tile(tile[1], tile[2], map_layer)
# unless tile_tag.id == :CutGrass
# map.set_tile(tile[1], tile[2], map_layer,cut_tile_id)
# end
# erased_tiles << tile
# end
# end
# unless erased_tiles.empty?
# pbSEPlay("Cut", 80)
# $scene.spriteset.addUserAnimation(Settings::CUT_TREE_ANIMATION_ID, $game_player.x, $game_player.y, false, 1)
# end
@@ -58,11 +58,11 @@ def player_on_hidden_ability_map
end
def getCurrentHiddenAbilityMapName
return getMapName(pbGet(VAR_CURRENT_HIDDEN_MAP)).to_s
return pbGetMessage(MessageTypes::MapNames, pbGet(VAR_CURRENT_HIDDEN_MAP)).to_s
end
def getMapName(id)
mapinfos = pbLoadMapInfos
return _INTL("Unknown location") if !mapinfos[id]
return mapinfos[id].name
end
return pbGetMessage(MessageTypes::MapNames, id).to_s
end
@@ -275,6 +275,11 @@ ItemHandlers::UseInField.add(:SPAWNER, proc { |item|
spawn_ow_pokemon(species.species,5,1)
})
ItemHandlers::UseInField.add(:DEBUGSPONGE, proc { |item|
replace_water_autotile_by_seafloor
})
def useSleepingBag()
currentSecondsValue = pbGet(UnrealTime::EXTRA_SECONDS)
choices = [_INTL("1 hour"), _INTL("6 hours"), _INTL("12 hours"), _INTL("24 hours"), _INTL("Cancel")]
@@ -308,7 +313,7 @@ def useSleepingBag()
time = pbGetTimeNow.strftime("%I:%M %p")
newDay = getDayOfTheWeek()
if newDay != oldDay
Kernel.pbMessage(_INTL("The current time is now {1} on {2}.", time, newDay.downcase.capitalize))
Kernel.pbMessage(_INTL("The current time is now {1} on {2}.", time, getDayOfTheWeekName(newDay)))
else
Kernel.pbMessage(_INTL("The current time is now {1}.", time))
end
@@ -344,7 +349,7 @@ def useFieldSleepingBag()
time = pbGetTimeNow.strftime("%I:%M %p")
newDay = getDayOfTheWeek()
if newDay != oldDay
Kernel.pbMessage(_INTL("The current time is now {1} on {2}.", time, newDay.downcase.capitalize))
Kernel.pbMessage(_INTL("The current time is now {1} on {2}.", time, getDayOfTheWeekName(newDay)))
else
Kernel.pbMessage(_INTL("The current time is now {1}.", time))
end
@@ -649,13 +654,17 @@ def useAquaUniform()
return 1
end
def useDreamMirror
visitedMap = $PokemonGlobal.visitedMaps[pbGet(226)]
map_name = visitedMap ? getMapName(pbGet(226)).to_s : _INTL("an unknown location")
map_id = pbGet(226)
visitedMap = $PokemonGlobal.visitedMaps[map_id]
if visitedMap
map_name = pbGetMessage(MessageTypes::MapNames, map_id).to_s
else
map_name = _INTL("an unknown location")
end
Kernel.pbMessage(_INTL("You peeked into the Dream Mirror..."))
Kernel.pbMessage(_INTL("You can see a faint glimpse of {1} in the reflection.", map_name))
end
@@ -2177,7 +2186,7 @@ def track_pokemon()
mapinfos = $RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
currently_roaming.each do |roamer_id|
map_id = $PokemonGlobal.roamPosition[roamer_id]
map_name = mapinfos[map_id].name
map_name = pbGetMessage(MessageTypes::MapNames, map_id)
weather_type = Settings::ROAMING_SPECIES[roamer_id][6]
case weather_type
when :Storm
@@ -33,7 +33,7 @@ end
def showRandomRareMoveConditionExample(legendary = false)
example = legendary ? getlegendaryConditionExample : getRegularConditionExample
text = "For example, " + example
text = _INTL("For example, ") + example
pbMessage(text)
end
@@ -24,10 +24,12 @@ end
def berry_contest_results(player_score)
contestants = {"Evelyn" => rand(5..8),
"Martin" => rand(4..8),
"Sarah" => rand(3..5)}
contestants = {
_INTL("Evelyn") => rand(5..8),
_INTL("Martin") => rand(4..8),
_INTL("Sarah") => rand(3..5)
}
contestants[$Trainer.name] = player_score
results = contestants.sort_by { |name, score| score }
return results
end
end
@@ -19,6 +19,72 @@ def turnEventTowardsEvent(turning, turnedTowards)
end
end
def moveEventTowardsEvent(turning, turnedTowards)
if turnedTowards.is_a?(Integer)
turnedTowards = $game_map.events[turnedTowards]
end
if turning.is_a?(Integer)
turning = $game_map.events[turning]
end
event_x = turnedTowards.x
event_y = turnedTowards.y
dx = event_x - turning.x
dy = event_y - turning.y
# Already next to it
if (dx == 0 && dy.abs == 1) || (dy == 0 && dx.abs == 1)
turnEventTowardsEvent(turning, turnedTowards)
return
end
if turning.x < event_x
turning.move_right
elsif turning.x > event_x
turning.move_left
elsif turning.y < event_y
turning.move_down
elsif turning.y > event_y
turning.move_up
end
end
def moveEventAwayFromEvent(moving, movingAwayFrom)
if movingAwayFrom.is_a?(Integer)
movingAwayFrom = $game_map.events[movingAwayFrom]
end
if moving.is_a?(Integer)
moving = $game_map.events[moving]
end
event_x = movingAwayFrom.x
event_y = movingAwayFrom.y
dx = moving.x - event_x
dy = moving.y - event_y
# Move in whichever axis has the larger distance, away from the target
if dx.abs >= dy.abs
if moving.x < event_x
moving.move_left
elsif moving.x > event_x
moving.move_right
elsif moving.y < event_y
moving.move_up
elsif moving.y > event_y
moving.move_down
end
else
if moving.y < event_y
moving.move_up
elsif moving.y > event_y
moving.move_down
elsif moving.x < event_x
moving.move_left
elsif moving.x > event_x
moving.move_right
end
end
end
def resetFrames(event)
if event.is_a?(Integer)
event = $game_map.events[event]
@@ -147,9 +213,9 @@ def kick_ball(eventId, obstacleName = nil, targetDestination = nil, targetSwitch
# Shorter kick distance — scales gently with speed
player_speed = $game_player.move_speed
remaining_distance = [player_speed * 0.8, 1].max.floor
pbSEPlay("jump", 80, 100) rescue nil
pbSEPlay("kick_ball", 80, 100) rescue nil
pbWait(3)
pbSEPlay("jump", 80, 100) rescue nil
current_dir = dir
total_bounces = 0
@@ -279,8 +345,6 @@ def sit_on_chair
$game_player.direction_fix = false
else
passable = $game_map.passable?($game_player.x, $game_player.y, direction)
dest_x = $game_player.x + (direction == 6 ? 1 : direction == 4 ? -1 : 0)
dest_y = $game_player.y + (direction == 2 ? 1 : direction == 8 ? -1 : 0)
if passable #&& !$game_map.event_at_position(dest_x, dest_y) #todo Meant to make it so that you can't get stuck, but also prevents from interacting with
$game_player.turn_generic(direction)
$game_player.jump_forward
@@ -307,16 +371,39 @@ def checkInputDirection
return nil
end
SWITCH_ON_BOAT = 2214
def getOnBoat
$game_switches[SWITCH_ON_BOAT] = true
set_player_graphics("boat_briney_peeko")
$PokemonTemp.prevent_ow_battles = true
$PokemonGlobal.boat = true
end
def tile_is_water?(x, y, map = $game_map)
return false if !map.valid?(x, y)
tag = map.terrain_tag(x, y)
return !!(tag && tag.can_surf)
end
def tile_passable_or_water(x, y, map = $game_map)
return false if !map.valid?(x, y)
map.events.each_value do |event|
next if !event.at_coordinate?(x, y) || event.through
return false if event.character_name != ""
end
terrain_tag = map.terrain_tag(x, y)
return true if terrain_tag && terrain_tag.can_surf
[2, 4, 6, 8].each do |d|
return true if map.passable?(x, y, d)
end
return false
end
def getOffBoat
reset_player_graphics
$PokemonTemp.prevent_ow_battles = false
$PokemonGlobal.boat = false
$game_switches[SWITCH_ON_BOAT] = false
$game_map.refresh
end
@@ -414,6 +501,22 @@ def clefairy_minigame(length = 4, clefairy_event_id = nil)
end
end
def getEventsInRadius(radius = 5)
player_x = $game_player.x
player_y = $game_player.y
nearby_events = []
$game_map.events.each_value do |event|
next if event.nil? || !event.active?
distance = Math.sqrt((event.x - player_x)**2 + (event.y - player_y)**2)
if distance <= radius
nearby_events << event
end
end
return nearby_events
end
# Switch 20
def isDebugMode()
return $DEBUG
@@ -474,7 +577,7 @@ def get_random_trend
end
def trendSet(option1, option2)
choice = pbMessage(_INTL("What do you think? Do you think any of these have any potential?"), [_INTL("Not really..."), "#{option1} is pretty cool!", "I like #{option2}!"])
choice = pbMessage(_INTL("What do you think? Do you think any of these have any potential?"), [_INTL("Not really..."), _INTL("{1} is pretty cool!", option1), _INTL("I like {1}!", option2)])
case choice
when 0
return false
@@ -692,3 +795,98 @@ def getRandomUnisexName
return RandTrainerNames_unisex.sample
end
def playAnimationAroundPlayer(animation_id, radius, only_passable = false)
player_x = $game_player.x
player_y = $game_player.y
valid_tiles = []
(-radius..radius).each do |dx|
(-radius..radius).each do |dy|
next if Math.sqrt(dx**2 + dy**2) > radius
target_x = player_x + dx
target_y = player_y + dy
next unless $game_map.valid?(target_x, target_y)
if only_passable
next unless $game_player.passable?(target_x, target_y, 0)
end
valid_tiles << [target_x, target_y]
end
end
return if valid_tiles.empty?
selected_x, selected_y = valid_tiles.sample
playAnimation(animation_id, selected_x, selected_y)
end
def playerFall(mapBelow, target_x, target_y, landing_animation=DUST_ANIMATION_ID)
$game_player.walk_anime =false
$game_player.direction_fix =true
$game_player.move_speed_override = 5
$game_player.through = true
pbWait(4)
pbFadeOutIn {
$game_temp.player_new_map_id = mapBelow
$game_temp.player_new_x = target_x
$game_temp.player_new_y = target_y-4
pbCancelVehicles
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
pbSEPlay("bw_fall")
$game_player.move_down
$game_player.move_down
$game_player.move_down
$game_player.move_down
pbWait(16)
pbSEPlay("Earth3")
playAnimation(landing_animation,$game_player.x,$game_player.y)
$game_screen.start_shake(2, 8, 8)
$game_player.walk_anime =true
$game_player.direction_fix =false
$game_player.move_speed_override = nil
$game_player.through = false
end
def playerLift(mapAbove, target_x, target_y, lift_animation=nil)
$game_player.walk_anime =false
$game_player.direction_fix =true
$game_player.move_speed_override = 6
$game_player.through = true
pbWait(4)
playAnimation(lift_animation, $game_player.x, $game_player.y) if lift_animation
pbWait(1)
$game_player.move_up
$game_player.move_up
$game_player.move_up
$game_player.move_up
$game_player.move_up
$game_player.move_up
pbWait(16)
pbFadeOutIn {
$game_temp.player_new_map_id = mapAbove
$game_temp.player_new_x = target_x
$game_temp.player_new_y = target_y
pbCancelVehicles
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
playAnimation(DUST_ANIMATION_ID,$game_player.x,$game_player.y)
pbSEPlay("Earth3")
$game_screen.start_shake(2, 8, 8)
$game_player.walk_anime =true
$game_player.direction_fix =false
$game_player.move_speed_override = nil
$game_player.through = false
end
@@ -29,7 +29,9 @@ def find_random_tall_grass_coordinates_near_player(width,height,variance,max_nb_
encounter_type = :Land1 if terrain.id == :Grass_alt1
encounter_type = :Land2 if terrain.id == :Grass_alt2
encounter_type = :Land3 if terrain.id == :Grass_alt3
encounter_type = :Land4 if terrain.id == :Grass_alt4
encounter_type = :TallGrass if terrain.id == :TallGrass
encounter_type = :Puddle if terrain.id == :Puddle
return [x,y],encounter_type
end
@@ -110,4 +112,5 @@ def showLocation(map_name=nil)
LocationWindow.new($game_map.name)
scene.spriteset.addUserSprite(LocationWindow.new(map_name))
end
end
end
@@ -294,16 +294,15 @@ class PokemonPokedexInfo_Scene
end
end
SHARED_BODIES = {}
SHARED_BODIES = {
:SHELLOS_E => :SHELLOS_W,
:SHELLOS_W => :SHELLOS_E,
:GASTRODON_E => :GASTRODON_W,
:GASTRODON_W => :GASTRODON_E
}
SHARED_HEADS = {}
def get_shared_bodies
#return SHARED_BODIES
return {
GameData::Species.get(NB_POKEMON-3).species => GameData::Species.get(NB_POKEMON-1).species,
GameData::Species.get(NB_POKEMON-1).species => GameData::Species.get(NB_POKEMON-3).species,
GameData::Species.get(NB_POKEMON-2).species => GameData::Species.get(NB_POKEMON).species,
GameData::Species.get(NB_POKEMON).species => GameData::Species.get(NB_POKEMON-2).species,
}
return SHARED_BODIES
end
def get_shared_heads
@@ -505,14 +504,14 @@ class PokemonPokedexInfo_Scene
end
def pbChooseAlt(brief = false)
if @available.size <= 1
pbPlayBuzzerSE
return
end
checkSpritesPageTutorial
@selecting_sprites = true
updateBlackListInstructionIcons
update_blacklist_icons if @selecting_blacklist
if @available.size <= 0
pbPlayBuzzerSE
return
end
loop do
Graphics.update
Input.update
@@ -21,10 +21,10 @@ def get_constellation_variable(pokemon)
# when :LUGIA; return VAR_CONSTELLATION_LUGIA
# when :HOOH; return VAR_CONSTELLATION_HOOH
# when :CELEBI; return VAR_CONSTELLATION_CELEBI
# when :SLAKING; return VAR_CONSTELLATION_SLAKING
# when :JIRACHI; return VAR_CONSTELLATION_JIRACHI
when :SLAKING; return VAR_CONSTELLATION_SLAKING
when :JIRACHI; return VAR_CONSTELLATION_JIRACHI
# when :TYRANTRUM; return VAR_CONSTELLATION_TYRANTRUM
# when :SHARPEDO; return VAR_CONSTELLATION_SHARPEDO
when :SHARPEDO; return VAR_CONSTELLATION_SHARPEDO
# when :ARCEUS; return VAR_CONSTELLATION_ARCEUS
end
end
@@ -42,4 +42,4 @@ def clear_all_images()
# echoln i.to_s + " : " + $game_screen.pictures[i].name
$game_screen.pictures[i].erase
end
end
end
@@ -240,7 +240,6 @@ class Sprite_Character
def removeQuestIcon()
@questIcon.dispose if @questIcon
@questIcon = nil
@character.show_quest_icon = false if @character.is_a?(Game_Event)
end
end
end
@@ -74,7 +74,7 @@ end
def showNewSideQuestMessage(title, description, show_description)
pbMEPlay("Voltorb Flip Win") if Settings::KANTO
pbMEPlay("match_call") if Settings::HOENN
pbMEPlay("quest_jingle") if Settings::HOENN
pbCallBub(3)
Kernel.pbMessage(_INTL("\\C[6]NEW QUEST: ") + title)
@@ -17,7 +17,8 @@ QUEST_REWARDS = Settings::KANTO ? [
QuestReward.new(5, :INCUBATOR, 1, _INTL("The note that came with it said that it allows you to hatch an egg instantly!")),
QuestReward.new(10, :ITEMFINDER, 1, _INTL("There's a note with it. If there's a hidden item anywhere near you, that little thing will react to tell you.")),
QuestReward.new(15, :INCUBATOR, 3, _INTL("Looks like they sent even more of these incubators for hatching Eggs. There must be a high-profile Pokémon breeder that's a fan of the show!")),
QuestReward.new(20, :SLEEPINGBAG, 1, _INTL("There's a note with it. This deluxe sleeping bag will allow you to sleep anywhere you want. It's so comfortable that you can sleep in it for hours!")),
#QuestReward.new(20, :SLEEPINGBAG, 1, _INTL("There's a note with it. This deluxe sleeping bag will allow you to sleep anywhere you want. It's so comfortable that you can sleep in it for hours!")),
QuestReward.new(20, :LUCKYEGG, 1, _INTL("This time they sent a gift basket. It had this strange egg in it! I don't think it will hatch into a Pokémon...")),
QuestReward.new(25, :LINKINGCORD, 1, _INTL("Apparently, this strange cable triggers the evolution of Pokémon that typically evolve via trade. I know you'll put it to good use!")),
QuestReward.new(50, :MISTSTONE, 1, _INTL("This rare stone can evolve any Pokémon, regardless of their level or evolution method. Use it wisely!"), true),
QuestReward.new(60, :GSBALL, 1, _INTL("This mysterious ball is rumored to be the key to call upon the protector of Ilex Forest. It's a precious relic.")),
@@ -178,7 +178,7 @@ QUESTS = {
"legendary_meloetta_3" => Quest.new("legendary_meloetta_3", _INTL("A legendary band (Part 3)"), _INTL("The drummer from a legendary Pokéband wants you to find its former bandmates. There are rumors about strange music that was heard around the region."), "band_drummer", _INTL("Saffron City"), LegendaryQuestColor),
"legendary_meloetta_4" => Quest.new("legendary_meloetta_4", _INTL("A legendary band (Part 4)"), _INTL("You assembled the full band! Come watch the show on Saturday night."), "BW117", _INTL("Saffron City"), LegendaryQuestColor),
"legendary_cresselia_1" => Quest.new(61, _INTL("Mysterious Lunar feathers"), _INTL("A mysterious entity asked you to collect Lunar Feathers for them. It said that they will come at night to tell you where to look. Whoever that may be..."), "lunarFeather", _INTL("Lavender Town"), LegendaryQuestColor),
"legendary_cresselia_1" => Quest.new("legendary_cresselia_1", _INTL("Mysterious Lunar feathers"), _INTL("A mysterious entity asked you to collect Lunar Feathers for them. It said that they will come at night to tell you where to look. Whoever that may be..."), "lunarFeather", _INTL("Lavender Town"), LegendaryQuestColor),
#removed
#11 => Quest.new(11, "Powering the Lighthouse", "Catch some Voltorb to power up the lighthouse", QuestBranchHotels, "BW (43)", "Vermillion City", HotelQuestColor),
}
@@ -205,6 +205,9 @@ define_quest("main_league",:MAIN_QUEST,_INTL("Pokémon League Challenge"), _INTL
define_quest("main_stolen_parts",:MAIN_QUEST,_INTL("Stolen Package"), _INTL("Recover a package stolen by Team Magma!"),_INTL("Rustboro City"),"NPC_Hoenn_MrStone")
define_quest("main_steven_letter",:MAIN_QUEST,_INTL("Steven's Letter"), _INTL("Deliver a letter from the Devon Corp. president to Steven in Granite Cave. "),_INTL("Granite Cave"),"NPC_Hoenn_MrStone",MAP_DEWFORD)
define_quest("main_devon_parts",:MAIN_QUEST,_INTL("Devon Parts Delivery"), _INTL("Deliver the Devon Parts to the Shipyard in Slateport City."),_INTL("Slateport City"),"NPC_Hoenn_MrStone",MAP_SLATEPORT)
define_quest("main_meteor_falls",:MAIN_QUEST,_INTL("Find Professor Cozmo"), _INTL("Find Professor Cozmo in Meteor Falls."),_INTL("Meteor Falls"),"NPC_Hoenn_AromaLady",MAP_METEOR_FALLS)
define_quest("mt_chimney_aqua",:MAIN_QUEST,_INTL("Stop Team Magma!"), _INTL("Team Magma wants to use the Meteorite's power at Mt. Chimney. They need to be stopped before it's too late."),_INTL("Mt. Chimney"),"NPC_Hoenn_Magma_Maxie",MAP_MT_CHIMNEY)
define_quest("mt_chimney_magma",:MAIN_QUEST,_INTL("The Meteorite's Power"), _INTL("Go to Mt. Chimney to help Team Magma harness the power of the Meteorite."),_INTL("Mt. Chimney"),"NPC_Hoenn_Magma_Maxie",MAP_MT_CHIMNEY)
#SIDE QUESTS
define_quest("template",:FIELD_QUEST,_INTL("Template Quest"), _INTL("Don't forget to change the quest ID if you copy paste this!"),_INTL("Unknown"),"000")
@@ -284,7 +287,7 @@ define_quest("mauville_quests_7",:FIELD_QUEST,_INTL("Associate Producer! - Episo
define_quest("mauville_magma",:MAGMA_QUEST,_INTL("The Element of Surprise!"), _INTL("Catch a Tynamo in the waters near New Mauville to catch Team Aqua by surprise."),_INTL("Mauville City"),"NPC_Hoenn_Magma_Grunt_M")
define_quest("mauville_aqua",:AQUA_QUEST,_INTL("The Element of Surprise!"), _INTL("Catch a Tynamo in the waters near New Mauville to catch Team Magma by surprise."),_INTL("Mauville City"),"NPC_Hoenn_Aqua_Grunt_M")
#Route 111
#Route 111 (South)
define_quest("route111_winstrate",:FIELD_QUEST,_INTL("The Winstrate Family"), _INTL("Defeat all 4 members of the Winstrate family in back-to-back battles."),_INTL("Route 111"),"NPC_Hoenn_Pokefan_M")
#Verdanturf
@@ -294,3 +297,29 @@ define_quest("verdanturf_nurse",:FIELD_QUEST,_INTL("The Bored Nurse"), _INTL("Th
#Rusturf Tunnel
define_quest("rusturf_trumpet",:FIELD_QUEST,_INTL("Uproar in B Flat"), _INTL("A trumpet player is cornered in Rusturf Tunnel. Find a way to help him!"),_INTL("Rusturf Tunnel"),"NPC_Hoenn_trumpet_playing")
define_quest("evergrande_trumpet",:FIELD_QUEST,_INTL("The Trumpet Festival!"), _INTL("Find the 4 Trumpet Brothers and join the Trumpet Festival in Evergrande City."),_INTL("Evergrande City"),"NPC_Hoenn_trumpet_playing",MAP_EVERGRANDE)
#Route 112
#Route 111 (North)
define_quest("route111_cut",:FIELD_QUEST,_INTL("Lawnmower Mon"), _INTL("Use the move Cut in the field to get rid of the tall grass near the campsite."),_INTL("Route 111"),"NPC_Hoenn_Schoolmate_Senior")
#Route 113
define_quest("route113_sootgrass",:FIELD_QUEST,_INTL("Clear Out the Soot!"), _INTL("Get rid of the soot on every single patch of grass on Route 113."),_INTL("Route 113"),"NPC_oldman3")
#Fallarbor Town
define_quest("fallarbor_berries",:FIELD_QUEST,_INTL("Fireproof Berries"), _INTL("Fallarbor Town residents cannot grow crops because of a Slugma infestation. Find fire-resistant berries for them to grow."),_INTL("Fallarbor Town"),"NPC_oldman3")
#Route 114
define_quest("route114_roar",:FIELD_QUEST,_INTL("Hear Me Roar!"), _INTL("Use Roar outside of battles to get to the end of the tunnel on Route 114 without encountering a single Pokémon."),_INTL("Route 114"),"NPC_Hoenn_Gentleman")
#Desert
define_quest("desert_caves",:FIELD_QUEST,_INTL("Find the lost Assistant!"), _INTL("An archeologist lost his assistant in the caves beneath the desert. Help him find him!"),_INTL("Mauville Desert"),"NPC_Hoenn_RuinManiac")
#Route 119
define_quest("route_119_fishing",:FIELD_QUEST,_INTL("Fishing with Bait!"), _INTL("Fish up a Feebas with the Good Rod by placing a Blue Pokéblock in the water."),_INTL("Route 119"),"NPC_Hoenn_Fisherman")
#Safari Zone
define_quest("safari_flowers",:FIELD_QUEST,_INTL("Safari Flowers"), _INTL("Unlock every area in the Safari Zone to scout for spots to plant flowers."),_INTL("Safari Zone"),"NPC_Hoenn_AromaLady")
define_quest("safari_balls1",:FIELD_QUEST,_INTL("Bidoof Population Survey"), _INTL("Catch 5 Bidoof in the Safari Zone."),_INTL("Safari Zone"),"NPC_Hoenn_Ranger_F")
define_quest("safari_balls2",:FIELD_QUEST,_INTL("Bibarel Population Survey"), _INTL("Catch 3 Bibarel in the Safari Zone."),_INTL("Safari Zone"),"NPC_Hoenn_Ranger_F")
define_quest("safari_blocks1",:FIELD_QUEST,_INTL("Phanpy Population Survey"), _INTL("Catch 5 Phanpy in the Safari Zone."),_INTL("Safari Zone"),"NPC_Hoenn_Ranger_M")
define_quest("safari_blocks2",:FIELD_QUEST,_INTL("Kangaskhan Population Survey"), _INTL("Catch 2 Kangaskhan in the Safari Zone."),_INTL("Safari Zone"),"NPC_Hoenn_Ranger_M")
@@ -1,7 +1,6 @@
##=============================================================================
## Easy Questing System - Refactored with Extensible Mode System
## Original by M3rein
# Refactored using by Claude
# Adapted for Pokemon Infinite Fusion by chardub
##=============================================================================
## Main entry point for the quest log
@@ -72,7 +71,7 @@ end
class CompletedQuestMode < QuestCategory
def initialize
super("Completed Quests", "Completed")
super(_INTL("Completed Quests"), _INTL("Completed"))
end
def button_path
return "Graphics/Pictures/eqi/quest_button_complete"
@@ -90,7 +89,7 @@ end
class MainQuestMode < QuestCategory
def initialize
super("Main Quests", "Main Quests")
super(_INTL("Main Quests"), _INTL("Main Quests"))
end
def button_path
@@ -107,7 +106,7 @@ end
class SideQuestMode < QuestCategory
def initialize
super("Side Quests", "Side Quests")
super(_INTL("Side Quests"), _INTL("Side Quests"))
end
def button_path
@@ -830,9 +829,14 @@ class Questlog
pbDrawOutlineText(@main, 188, 54, 512, 384, quest.name,
Color.new(255, 172, 115), Color.new(0, 0, 0))
drawTextExMulti(@main, 188, 84, 318, 8, quest.desc,
drawTextExMulti(@main, 188, 84, 318, 8, quest.desc.gsub(/\\n/, "\n"),
Color.new(255, 255, 255), Color.new(0, 0, 0))
pbDrawOutlineText(@main, 188, 330, 512, 384, quest.location,
location_y = 330
current_language = getCurrentLanguage
if current_language == :CHINESE
location_y += 10
end
pbDrawOutlineText(@main, 188, location_y, 512, 384, quest.location,
Color.new(255, 172, 115), Color.new(0, 0, 0))
@@ -912,4 +916,4 @@ class Questlog
@viewport.dispose
pbWait(1)
end
end
end