mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-10 06:34:59 +00:00
Added class GameData::TerrainTag
This commit is contained in:
@@ -304,40 +304,34 @@ end
|
||||
|
||||
# Gather soot from soot grass
|
||||
Events.onStepTakenFieldMovement += proc { |_sender,e|
|
||||
event = e[0] # Get the event affected by field movement
|
||||
event = e[0] # Get the event affected by field movement
|
||||
thistile = $MapFactory.getRealTilePos(event.map.map_id,event.x,event.y)
|
||||
map = $MapFactory.getMap(thistile[0])
|
||||
sootlevel = -1
|
||||
for i in [2, 1, 0]
|
||||
tile_id = map.data[thistile[1],thistile[2],i]
|
||||
next if tile_id==nil
|
||||
if map.terrain_tags[tile_id]==PBTerrain::SootGrass
|
||||
sootlevel = i
|
||||
break
|
||||
end
|
||||
end
|
||||
if sootlevel>=0 && GameData::Item.exists?(:SOOTSACK)
|
||||
$PokemonGlobal.sootsack = 0 if !$PokemonGlobal.sootsack
|
||||
# map.data[thistile[1],thistile[2],sootlevel]=0
|
||||
if event==$game_player && $PokemonBag.pbHasItem?(:SOOTSACK)
|
||||
next if tile_id == nil
|
||||
next if GameData::TerrainTag.try_get(map.terrain_tags[tile_id]).id != :SootGrass
|
||||
if event == $game_player && GameData::Item.exists?(:SOOTSACK) && $PokemonBag.pbHasItem?(:SOOTSACK)
|
||||
$PokemonGlobal.sootsack = 0 if !$PokemonGlobal.sootsack
|
||||
$PokemonGlobal.sootsack += 1
|
||||
end
|
||||
# map.data[thistile[1], thistile[2], i] = 0
|
||||
# $scene.createSingleSpriteset(map.map_id)
|
||||
break
|
||||
end
|
||||
}
|
||||
|
||||
# Show grass rustle animation, and auto-move the player over waterfalls and ice
|
||||
Events.onStepTakenFieldMovement += proc { |_sender,e|
|
||||
event = e[0] # Get the event affected by field movement
|
||||
Events.onStepTakenFieldMovement += proc { |_sender, e|
|
||||
event = e[0] # Get the event affected by field movement
|
||||
if $scene.is_a?(Scene_Map)
|
||||
currentTag = pbGetTerrainTag(event)
|
||||
if PBTerrain.isJustGrass?(pbGetTerrainTag(event,true)) # Won't show if under bridge
|
||||
$scene.spriteset.addUserAnimation(Settings::GRASS_ANIMATION_ID,event.x,event.y,true,1)
|
||||
elsif event==$game_player
|
||||
if currentTag==PBTerrain::WaterfallCrest
|
||||
# Descend waterfall, but only if this event is the player
|
||||
if pbGetTerrainTag(event, true).shows_grass_rustle # Won't show if under bridge
|
||||
$scene.spriteset.addUserAnimation(Settings::GRASS_ANIMATION_ID, event.x, event.y, true, 1)
|
||||
elsif event == $game_player
|
||||
currentTag = pbGetTerrainTag(event)
|
||||
if currentTag.waterfall_crest
|
||||
pbDescendWaterfall(event)
|
||||
elsif PBTerrain.isIce?(currentTag) && !$PokemonGlobal.sliding
|
||||
elsif currentTag.ice && !$PokemonGlobal.sliding
|
||||
pbSlideOnIce(event)
|
||||
end
|
||||
end
|
||||
@@ -599,19 +593,17 @@ end
|
||||
|
||||
def pbGetTerrainTag(event=nil,countBridge=false)
|
||||
event = $game_player if !event
|
||||
return 0 if !event
|
||||
return GameData::TerrainTag.get(:None) if !event
|
||||
if $MapFactory
|
||||
return $MapFactory.getTerrainTag(event.map.map_id,event.x,event.y,countBridge)
|
||||
end
|
||||
$game_map.terrain_tag(event.x,event.y,countBridge)
|
||||
return $game_map.terrain_tag(event.x,event.y,countBridge)
|
||||
end
|
||||
|
||||
def pbFacingTerrainTag(event=nil,dir=nil)
|
||||
if $MapFactory
|
||||
return $MapFactory.getFacingTerrainTag(dir,event)
|
||||
end
|
||||
return $MapFactory.getFacingTerrainTag(dir,event) if $MapFactory
|
||||
event = $game_player if !event
|
||||
return 0 if !event
|
||||
return GameData::TerrainTag.get(:None) if !event
|
||||
facing = pbFacingTile(dir,event)
|
||||
return $game_map.terrain_tag(facing[1],facing[2])
|
||||
end
|
||||
@@ -762,7 +754,7 @@ end
|
||||
# Player/event movement in the field
|
||||
#===============================================================================
|
||||
def pbLedge(_xOffset,_yOffset)
|
||||
if PBTerrain.isLedge?(pbFacingTerrainTag)
|
||||
if pbFacingTerrainTag.ledge
|
||||
if pbJumpToward(2,true)
|
||||
$scene.spriteset.addUserAnimation(Settings::DUST_ANIMATION_ID,$game_player.x,$game_player.y,true,1)
|
||||
$game_player.increase_steps
|
||||
@@ -776,7 +768,7 @@ end
|
||||
def pbSlideOnIce(event=nil)
|
||||
event = $game_player if !event
|
||||
return if !event
|
||||
return if !PBTerrain.isIce?(pbGetTerrainTag(event))
|
||||
return if !pbGetTerrainTag(event).ice
|
||||
$PokemonGlobal.sliding = true
|
||||
direction = event.direction
|
||||
oldwalkanime = event.walk_anime
|
||||
@@ -784,7 +776,7 @@ def pbSlideOnIce(event=nil)
|
||||
event.walk_anime = false
|
||||
loop do
|
||||
break if !event.passable?(event.x,event.y,direction)
|
||||
break if !PBTerrain.isIce?(pbGetTerrainTag(event))
|
||||
break if !pbGetTerrainTag(event).ice
|
||||
event.move_forward
|
||||
while event.moving?
|
||||
pbUpdateSceneMap
|
||||
|
||||
@@ -174,17 +174,11 @@ def pbGetEnvironment
|
||||
else
|
||||
terrainTag = $game_player.terrain_tag
|
||||
end
|
||||
case terrainTag
|
||||
when PBTerrain::Grass, PBTerrain::SootGrass
|
||||
ret = (ret == :Forest) ? :ForestGrass : :Grass
|
||||
when PBTerrain::TallGrass
|
||||
ret = (ret == :Forest) ? :ForestGrass : :TallGrass
|
||||
when PBTerrain::Rock then ret = :Rock
|
||||
when PBTerrain::Sand then ret = :Sand
|
||||
when PBTerrain::DeepWater, PBTerrain::Water then ret = :MovingWater
|
||||
when PBTerrain::StillWater then ret = :StillWater
|
||||
when PBTerrain::Puddle then ret = :Puddle
|
||||
when PBTerrain::Ice then ret = :Ice
|
||||
tile_environment = terrainTag.battle_environment
|
||||
if ret == :Forest && [:Grass, :TallGrass].include?(tile_environment)
|
||||
ret = :ForestGrass
|
||||
else
|
||||
ret = tile_environment if tile_environment
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
@@ -91,9 +91,9 @@ class PokemonEncounters
|
||||
def encounter_possible_here?
|
||||
return true if $PokemonGlobal.surfing
|
||||
terrain_tag = $game_map.terrain_tag($game_player.x, $game_player.y)
|
||||
return false if PBTerrain.isIce?(terrain_tag)
|
||||
return false if terrain_tag.ice
|
||||
return true if has_cave_encounters? # i.e. this map is a cave
|
||||
return true if PBTerrain.isGrass?(terrain_tag) && has_land_encounters?
|
||||
return true if has_land_encounters? && terrain_tag.land_wild_encounters
|
||||
return false
|
||||
end
|
||||
|
||||
@@ -203,7 +203,7 @@ class PokemonEncounters
|
||||
return false if pbInSafari?
|
||||
return true if $PokemonGlobal.partner
|
||||
return false if $Trainer.able_pokemon_count <= 1
|
||||
return true if PBTerrain.isDoubleWildBattle?(pbGetTerrainTag) && rand(100) < 30
|
||||
return true if pbGetTerrainTag.double_wild_encounters && rand(100) < 30
|
||||
return false
|
||||
end
|
||||
|
||||
@@ -242,7 +242,7 @@ class PokemonEncounters
|
||||
if $PokemonGlobal.surfing
|
||||
ret = find_valid_encounter_type_for_time(:Water, time)
|
||||
else # Land/Cave (can have both in the same map)
|
||||
if has_land_encounters? && PBTerrain.isGrass?($game_map.terrain_tag($game_player.x, $game_player.y))
|
||||
if has_land_encounters? && $game_map.terrain_tag($game_player.x, $game_player.y).land_wild_encounters
|
||||
ret = :BugContest if pbInBugContest? && has_encounter_type?(:BugContest)
|
||||
ret = find_valid_encounter_type_for_time(:Land, time) if !ret
|
||||
end
|
||||
|
||||
@@ -381,11 +381,11 @@ Events.onAction += proc { |_sender, _e|
|
||||
break
|
||||
end
|
||||
if surface_map_id &&
|
||||
PBTerrain.isDeepWater?($MapFactory.getTerrainTag(surface_map_id, $game_player.x, $game_player.y))
|
||||
$MapFactory.getTerrainTag(surface_map_id, $game_player.x, $game_player.y).can_dive
|
||||
pbSurfacing
|
||||
end
|
||||
else
|
||||
pbDive if PBTerrain.isDeepWater?($game_player.terrain_tag)
|
||||
pbDive if $game_player.terrain_tag.can_dive
|
||||
end
|
||||
}
|
||||
|
||||
@@ -399,7 +399,7 @@ HiddenMoveHandlers::CanUseMove.add(:DIVE,proc { |move,pkmn,showmsg|
|
||||
break
|
||||
end
|
||||
if !surface_map_id ||
|
||||
!PBTerrain.isDeepWater?($MapFactory.getTerrainTag(surface_map_id, $game_player.x, $game_player.y))
|
||||
!$MapFactory.getTerrainTag(surface_map_id, $game_player.x, $game_player.y).can_dive
|
||||
pbMessage(_INTL("Can't use that here.")) if showmsg
|
||||
next false
|
||||
end
|
||||
@@ -409,7 +409,7 @@ HiddenMoveHandlers::CanUseMove.add(:DIVE,proc { |move,pkmn,showmsg|
|
||||
pbMessage(_INTL("Can't use that here.")) if showmsg
|
||||
next false
|
||||
end
|
||||
if !PBTerrain.isDeepWater?($game_player.terrain_tag)
|
||||
if !$game_player.terrain_tag.can_dive
|
||||
pbMessage(_INTL("Can't use that here.")) if showmsg
|
||||
next false
|
||||
end
|
||||
@@ -727,9 +727,7 @@ def pbEndSurf(_xOffset,_yOffset)
|
||||
return false if !$PokemonGlobal.surfing
|
||||
x = $game_player.x
|
||||
y = $game_player.y
|
||||
currentTag = $game_map.terrain_tag(x,y)
|
||||
facingTag = pbFacingTerrainTag
|
||||
if PBTerrain.isSurfable?(currentTag) && !PBTerrain.isSurfable?(facingTag)
|
||||
if $game_map.terrain_tag(x,y).can_surf && !pbFacingTerrainTag.can_surf
|
||||
$PokemonTemp.surfJump = [x,y]
|
||||
if pbJumpToward(1,false,true)
|
||||
$game_map.autoplayAsCue
|
||||
@@ -759,7 +757,7 @@ Events.onAction += proc { |_sender,_e|
|
||||
next if $PokemonGlobal.surfing
|
||||
next if GameData::MapMetadata.exists?($game_map.map_id) &&
|
||||
GameData::MapMetadata.get($game_map.map_id).always_bicycle
|
||||
next if !PBTerrain.isSurfable?(pbFacingTerrainTag)
|
||||
next if !pbFacingTerrainTag.can_surf_freely
|
||||
next if !$game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
|
||||
pbSurf
|
||||
}
|
||||
@@ -779,7 +777,7 @@ HiddenMoveHandlers::CanUseMove.add(:SURF,proc { |move,pkmn,showmsg|
|
||||
pbMessage(_INTL("Let's enjoy cycling!")) if showmsg
|
||||
next false
|
||||
end
|
||||
if !PBTerrain.isSurfable?(pbFacingTerrainTag) ||
|
||||
if !pbFacingTerrainTag.can_surf_freely ||
|
||||
!$game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
|
||||
pbMessage(_INTL("No surfing here!")) if showmsg
|
||||
next false
|
||||
@@ -914,13 +912,13 @@ def pbAscendWaterfall(event=nil)
|
||||
oldthrough = event.through
|
||||
oldmovespeed = event.move_speed
|
||||
terrain = pbFacingTerrainTag
|
||||
return if !PBTerrain.isWaterfall?(terrain)
|
||||
return if !terrain.waterfall && !terrain.waterfall_crest
|
||||
event.through = true
|
||||
event.move_speed = 2
|
||||
loop do
|
||||
event.move_up
|
||||
terrain = pbGetTerrainTag(event)
|
||||
break if !PBTerrain.isWaterfall?(terrain)
|
||||
break if !terrain.waterfall && !terrain.waterfall_crest
|
||||
end
|
||||
event.through = oldthrough
|
||||
event.move_speed = oldmovespeed
|
||||
@@ -933,13 +931,13 @@ def pbDescendWaterfall(event=nil)
|
||||
oldthrough = event.through
|
||||
oldmovespeed = event.move_speed
|
||||
terrain = pbFacingTerrainTag
|
||||
return if !PBTerrain.isWaterfall?(terrain)
|
||||
return if !terrain.waterfall && !terrain.waterfall_crest
|
||||
event.through = true
|
||||
event.move_speed = 2
|
||||
loop do
|
||||
event.move_down
|
||||
terrain = pbGetTerrainTag(event)
|
||||
break if !PBTerrain.isWaterfall?(terrain)
|
||||
break if !terrain.waterfall && !terrain.waterfall_crest
|
||||
end
|
||||
event.through = oldthrough
|
||||
event.move_speed = oldmovespeed
|
||||
@@ -964,16 +962,16 @@ end
|
||||
|
||||
Events.onAction += proc { |_sender,_e|
|
||||
terrain = pbFacingTerrainTag
|
||||
if terrain==PBTerrain::Waterfall
|
||||
if terrain.waterfall
|
||||
pbWaterfall
|
||||
elsif terrain==PBTerrain::WaterfallCrest
|
||||
elsif terrain.waterfall_crest
|
||||
pbMessage(_INTL("A wall of water is crashing down with a mighty roar."))
|
||||
end
|
||||
}
|
||||
|
||||
HiddenMoveHandlers::CanUseMove.add(:WATERFALL,proc { |move,pkmn,showmsg|
|
||||
next false if !pbCheckHiddenMoveBadge(Settings::BADGE_FOR_WATERFALL,showmsg)
|
||||
if pbFacingTerrainTag!=PBTerrain::Waterfall
|
||||
if !pbFacingTerrainTag.waterfall
|
||||
pbMessage(_INTL("Can't use that here.")) if showmsg
|
||||
next false
|
||||
end
|
||||
|
||||
@@ -229,7 +229,7 @@ class DependentEvents
|
||||
tile=$MapFactory.getFacingTile(facing,leader)
|
||||
passable=tile && $MapFactory.isPassableStrict?(tile[0],tile[1],tile[2],follower)
|
||||
if i==0 && !passable && tile &&
|
||||
PBTerrain.isLedge?($MapFactory.getTerrainTag(tile[0],tile[1],tile[2]))
|
||||
$MapFactory.getTerrainTag(tile[0],tile[1],tile[2]).ledge
|
||||
# If the tile isn't passable and the tile is a ledge,
|
||||
# get tile from further behind
|
||||
tile=$MapFactory.getFacingTileFromPos(tile[0],tile[1],tile[2],facing)
|
||||
|
||||
Reference in New Issue
Block a user