mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-11-03 08:15:47 +00:00
Release 6.9.0
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
MULTIPLE_WILD_OW_FUSE_CHANCE = 35
|
||||
|
||||
class Game_Event
|
||||
def player_near_event?(radius = 1)
|
||||
dx = $game_player.x - @x
|
||||
dy = $game_player.y - @y
|
||||
distance = Math.sqrt(dx * dx + dy * dy)
|
||||
return distance <= radius
|
||||
end
|
||||
|
||||
def playerPositionRelativeToEvent
|
||||
dx = $game_player.x - @x
|
||||
dy = $game_player.y - @y
|
||||
|
||||
# Quick map for front/back detection
|
||||
front = case @direction
|
||||
when DIRECTION_UP then dy < 0
|
||||
when DIRECTION_DOWN then dy > 0
|
||||
when DIRECTION_LEFT then dx < 0
|
||||
when DIRECTION_RIGHT then dx > 0
|
||||
end
|
||||
|
||||
back = case @direction
|
||||
when DIRECTION_UP then dy > 0
|
||||
when DIRECTION_DOWN then dy < 0
|
||||
when DIRECTION_LEFT then dx > 0
|
||||
when DIRECTION_RIGHT then dx < 0
|
||||
end
|
||||
|
||||
# Side: adjacent but not in front or back
|
||||
side = !front && !back && (dx.abs + dy.abs == 1)
|
||||
|
||||
return { front: front, back: back, side: side, dx: dx, dy: dy }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def fuse_wild_pokemon_animation(battler1, battler2)
|
||||
if battler1.ow_coordinates && battler2.ow_coordinates
|
||||
playAnimation(Settings::FUSE_ANIMATION_ID, battler1.ow_coordinates[0], battler1.ow_coordinates[1])
|
||||
playAnimation(Settings::FUSE_ANIMATION_ID, battler2.ow_coordinates[0], battler2.ow_coordinates[1])
|
||||
pbWait(16)
|
||||
end
|
||||
end
|
||||
|
||||
def trigger_overworld_wild_battle
|
||||
return if $PokemonTemp.overworld_wild_battle_triggered
|
||||
$PokemonTemp.overworld_wild_battle_triggered = true
|
||||
case $PokemonTemp.overworld_wild_battle_participants.length
|
||||
when 0
|
||||
$PokemonTemp.overworld_wild_battle_triggered = false
|
||||
return
|
||||
when 2
|
||||
battler1 = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
battler2 = $PokemonTemp.overworld_wild_battle_participants[1].pokemon
|
||||
should_fuse = rand(100) <= MULTIPLE_WILD_OW_FUSE_CHANCE
|
||||
should_fuse = false if battler1.isFusion? || battler2.isFusion? #&& rand(100) <= MULTIPLE_WILD_OW_FUSE_CHANCE
|
||||
should_fuse = false if battler1.shiny? || battler2.shiny?
|
||||
if should_fuse
|
||||
fusion_species = fusionOf(battler1.species, battler2.species)
|
||||
fusion_level = (battler1.level + battler2.level) / 2.ceil
|
||||
fuse_wild_pokemon_animation(battler1, battler2)
|
||||
checkWildFusePokemonChallenge(battler1, battler2)
|
||||
pbWildBattleSpecific(Pokemon.new(fusion_species, fusion_level))
|
||||
else
|
||||
pb1v2WildBattleSpecific(battler1, battler2)
|
||||
end
|
||||
when 3
|
||||
battler1 = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
battler2 = $PokemonTemp.overworld_wild_battle_participants[1].pokemon
|
||||
battler3 = $PokemonTemp.overworld_wild_battle_participants[2].pokemon
|
||||
pb1v3WildBattleSpecific(battler1, battler2, battler3)
|
||||
when 1
|
||||
battler = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
if isWeatherWind?()
|
||||
event_x = $PokemonTemp.overworld_wild_battle_participants[0].x
|
||||
if event_x && event_x > $game_player.x
|
||||
$PokemonTemp.recordBattleRule("windside", 1) #event to the right of player. Tailwind for event
|
||||
elsif event_x && event_x < $game_player.x
|
||||
$PokemonTemp.recordBattleRule("windside", 0) #player to the right of event. Tailwind for player
|
||||
end
|
||||
end
|
||||
pbWildBattleSpecific(battler)
|
||||
else
|
||||
# shouldn"t happen
|
||||
battler = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
pbWildBattleSpecific(battler)
|
||||
$PokemonTemp.overworld_wild_battle_participants.shift
|
||||
end
|
||||
|
||||
$PokemonTemp.overworld_wild_battle_participants.each do |ow_pokemon|
|
||||
ow_pokemon.despawn
|
||||
end
|
||||
$PokemonTemp.overworld_wild_battle_participants = []
|
||||
|
||||
$PokemonTemp.overworld_wild_battle_triggered = false
|
||||
|
||||
end
|
||||
|
||||
def overworldPokemonCatchOffGuard()
|
||||
event = $MapFactory.getMap(@map_id).events[@event_id]
|
||||
return unless event && event.is_a?(OverworldPokemonEvent)
|
||||
unless event.current_state == :NOTICED_PLAYER || event.noticed_player_once
|
||||
if event.last_facing_direction == $game_player.direction
|
||||
setBattleRule("surprise")
|
||||
event.set_noticed_sprite
|
||||
playAnimation(Settings::EXCLAMATION_ANIMATION_ID, event.x, event.y)
|
||||
pbSEPlay("jump")
|
||||
event.turn_away_from_player
|
||||
event.jump(0,0)
|
||||
pbWait(8)
|
||||
event.set_roaming_sprite
|
||||
$Trainer.stats&.incr_nb_pokemon_surprised
|
||||
check_offguard_challenge(event)
|
||||
end
|
||||
end
|
||||
event.overworldPokemonBattle
|
||||
end
|
||||
|
||||
def check_offguard_challenge(pokemon_event)
|
||||
return unless pokemon_event.is_a?(OverworldPokemonEvent)
|
||||
$Trainer.complete_challenge(:encounter_offguard_any)
|
||||
case pokemon_event.behavior_noticed
|
||||
when :aggressive
|
||||
$Trainer.complete_challenge(:encounter_offguard_aggressive)
|
||||
when :curious
|
||||
$Trainer.complete_challenge(:encounter_offguard_curious)
|
||||
when :skittish, :flee
|
||||
$Trainer.complete_challenge(:encounter_offguard_skittish)
|
||||
end
|
||||
end
|
||||
|
||||
# Used to be called from spawned overworld Pokemon events, now handled directly in OverworldPokemonEvent
|
||||
# Kept here, empty in case I forgot to change some for the manual overworld Pokemon
|
||||
def overworldPokemonBehavior()
|
||||
# event = $MapFactory.getMap(@map_id).events[@event_id]
|
||||
# return unless event && event.is_a?(OverworldPokemonEvent)
|
||||
#
|
||||
# # Todo: There's a glitch where static overowrld pokemon also appear on connecting maps.
|
||||
# # They don't have any graphics. This just deactivetes their behavior too which makes them
|
||||
# # harmless - player won't know they're there... But they are, technically.
|
||||
# # This doesn't actually fix the glitch - just makes it invisible.
|
||||
# # -
|
||||
# # It would be good to make it so that the events only appear in their own map in the first place.
|
||||
# return unless @map_id == $game_map.map_id
|
||||
# #
|
||||
# #
|
||||
#
|
||||
# begin
|
||||
# if $game_temp.message_window_showing
|
||||
# event.pause_movement
|
||||
# else
|
||||
# event.update_behavior
|
||||
# end
|
||||
# rescue
|
||||
# return
|
||||
# end
|
||||
end
|
||||
|
||||
def overworldPokemonDetect(radius = 1)
|
||||
event = $MapFactory.getMap(@map_id).events[@event_id]
|
||||
return pbPlayerInEventCone?(event, $game_player, radius)
|
||||
end
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user