mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
143 lines
7.9 KiB
Ruby
143 lines
7.9 KiB
Ruby
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
module GameData
|
|
class MapMetadata
|
|
attr_reader :id
|
|
attr_reader :real_name
|
|
attr_reader :outdoor_map
|
|
attr_reader :announce_location
|
|
attr_reader :can_bicycle
|
|
attr_reader :always_bicycle
|
|
attr_reader :teleport_destination
|
|
attr_reader :weather
|
|
attr_reader :town_map_position
|
|
attr_reader :dive_map_id
|
|
attr_reader :dark_map
|
|
attr_reader :safari_map
|
|
attr_reader :snap_edges
|
|
attr_reader :still_reflections
|
|
attr_reader :random_dungeon
|
|
attr_reader :battle_background
|
|
attr_reader :wild_battle_BGM
|
|
attr_reader :trainer_battle_BGM
|
|
attr_reader :wild_victory_BGM
|
|
attr_reader :trainer_victory_BGM
|
|
attr_reader :wild_capture_ME
|
|
attr_reader :town_map_size
|
|
attr_reader :battle_environment
|
|
attr_reader :flags
|
|
attr_reader :pbs_file_suffix
|
|
|
|
DATA = {}
|
|
DATA_FILENAME = "map_metadata.dat"
|
|
PBS_BASE_FILENAME = "map_metadata"
|
|
SCHEMA = {
|
|
"SectionName" => [:id, "u"],
|
|
"Name" => [:real_name, "s"],
|
|
"Outdoor" => [:outdoor_map, "b"],
|
|
"ShowArea" => [:announce_location, "b"],
|
|
"Bicycle" => [:can_bicycle, "b"],
|
|
"BicycleAlways" => [:always_bicycle, "b"],
|
|
"HealingSpot" => [:teleport_destination, "vuu"],
|
|
"Weather" => [:weather, "eu", :Weather],
|
|
"MapPosition" => [:town_map_position, "uuu"],
|
|
"DiveMap" => [:dive_map_id, "v"],
|
|
"DarkMap" => [:dark_map, "b"],
|
|
"SafariMap" => [:safari_map, "b"],
|
|
"SnapEdges" => [:snap_edges, "b"],
|
|
"StillReflections" => [:still_reflections, "b"],
|
|
"Dungeon" => [:random_dungeon, "b"],
|
|
"BattleBack" => [:battle_background, "s"],
|
|
"WildBattleBGM" => [:wild_battle_BGM, "s"],
|
|
"TrainerBattleBGM" => [:trainer_battle_BGM, "s"],
|
|
"WildVictoryBGM" => [:wild_victory_BGM, "s"],
|
|
"TrainerVictoryBGM" => [:trainer_victory_BGM, "s"],
|
|
"WildCaptureME" => [:wild_capture_ME, "s"],
|
|
"MapSize" => [:town_map_size, "us"],
|
|
"Environment" => [:battle_environment, "e", :Environment],
|
|
"Flags" => [:flags, "*s"]
|
|
}
|
|
|
|
extend ClassMethodsIDNumbers
|
|
include InstanceMethods
|
|
|
|
def self.editor_properties
|
|
return [
|
|
["ID", ReadOnlyProperty, _INTL("ID number of this map.")],
|
|
["Name", StringProperty, _INTL("The name of the map, as seen by the player. Can be different to the map's name as seen in RMXP.")],
|
|
["Outdoor", BooleanProperty, _INTL("If true, this map is an outdoor map and will be tinted according to time of day.")],
|
|
["ShowArea", BooleanProperty, _INTL("If true, the game will display the map's name upon entry.")],
|
|
["Bicycle", BooleanProperty, _INTL("If true, the bicycle can be used on this map.")],
|
|
["BicycleAlways", BooleanProperty, _INTL("If true, the bicycle will be mounted automatically on this map and cannot be dismounted.")],
|
|
["HealingSpot", MapCoordsProperty, _INTL("Map ID of this Pokémon Center's town, and X and Y coordinates of its entrance within that town.")],
|
|
["Weather", WeatherEffectProperty, _INTL("Weather conditions in effect for this map.")],
|
|
["MapPosition", RegionMapCoordsProperty, _INTL("Identifies the point on the regional map for this map.")],
|
|
["DiveMap", MapProperty, _INTL("Specifies the underwater layer of this map. Use only if this map has deep water.")],
|
|
["DarkMap", BooleanProperty, _INTL("If true, this map is dark and a circle of light appears around the player. Flash can be used to expand the circle.")],
|
|
["SafariMap", BooleanProperty, _INTL("If true, this map is part of the Safari Zone (both indoor and outdoor). Not to be used in the reception desk.")],
|
|
["SnapEdges", BooleanProperty, _INTL("If true, when the player goes near this map's edge, the game doesn't center the player as usual.")],
|
|
["StillReflections", BooleanProperty, _INTL("If true, reflections of events and the player will not ripple horizontally.")],
|
|
["Dungeon", BooleanProperty, _INTL("If true, this map has a randomly generated layout. See the wiki for more information.")],
|
|
["BattleBack", StringProperty, _INTL("PNG files named 'XXX_bg', 'XXX_base0', 'XXX_base1', 'XXX_message' in Battlebacks folder, where XXX is this property's value.")],
|
|
["WildBattleBGM", BGMProperty, _INTL("Default BGM for wild Pokémon battles on this map.")],
|
|
["TrainerBattleBGM", BGMProperty, _INTL("Default BGM for trainer battles on this map.")],
|
|
["WildVictoryBGM", BGMProperty, _INTL("Default BGM played after winning a wild Pokémon battle on this map.")],
|
|
["TrainerVictoryBGM", BGMProperty, _INTL("Default BGM played after winning a Trainer battle on this map.")],
|
|
["WildCaptureME", MEProperty, _INTL("Default ME played after catching a wild Pokémon on this map.")],
|
|
["MapSize", MapSizeProperty, _INTL("The width of the map in Town Map squares, and a string indicating which squares are part of this map.")],
|
|
["Environment", GameDataProperty.new(:Environment), _INTL("The default battle environment for battles on this map.")],
|
|
["Flags", StringListProperty, _INTL("Words/phrases that distinguish this map from others.")]
|
|
]
|
|
end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
def initialize(hash)
|
|
@id = hash[:id]
|
|
@real_name = hash[:real_name]
|
|
@outdoor_map = hash[:outdoor_map]
|
|
@announce_location = hash[:announce_location]
|
|
@can_bicycle = hash[:can_bicycle]
|
|
@always_bicycle = hash[:always_bicycle]
|
|
@teleport_destination = hash[:teleport_destination]
|
|
@weather = hash[:weather]
|
|
@town_map_position = hash[:town_map_position]
|
|
@dive_map_id = hash[:dive_map_id]
|
|
@dark_map = hash[:dark_map]
|
|
@safari_map = hash[:safari_map]
|
|
@snap_edges = hash[:snap_edges]
|
|
@still_reflections = hash[:still_reflections]
|
|
@random_dungeon = hash[:random_dungeon]
|
|
@battle_background = hash[:battle_background]
|
|
@wild_battle_BGM = hash[:wild_battle_BGM]
|
|
@trainer_battle_BGM = hash[:trainer_battle_BGM]
|
|
@wild_victory_BGM = hash[:wild_victory_BGM]
|
|
@trainer_victory_BGM = hash[:trainer_victory_BGM]
|
|
@wild_capture_ME = hash[:wild_capture_ME]
|
|
@town_map_size = hash[:town_map_size]
|
|
@battle_environment = hash[:battle_environment]
|
|
@flags = hash[:flags] || []
|
|
@pbs_file_suffix = hash[:pbs_file_suffix] || ""
|
|
end
|
|
|
|
# @return [String] the translated name of this map
|
|
def name
|
|
ret = pbGetMessageFromHash(MessageTypes::MAP_NAMES, @real_name)
|
|
ret = pbGetBasicMapNameFromId(@id) if nil_or_empty?(ret)
|
|
ret.gsub!(/\\PN/, $player.name) if $player
|
|
return ret
|
|
end
|
|
|
|
def has_flag?(flag)
|
|
return @flags.any? { |f| f.downcase == flag.downcase }
|
|
end
|
|
|
|
alias __orig__get_property_for_PBS get_property_for_PBS unless method_defined?(:__orig__get_property_for_PBS)
|
|
def get_property_for_PBS(key)
|
|
key = "SectionName" if key == "ID"
|
|
return __orig__get_property_for_PBS(key)
|
|
end
|
|
end
|
|
end
|