diff --git a/Credits.txt b/Credits.txt index c2db0a3ed..8220adaa4 100644 --- a/Credits.txt +++ b/Credits.txt @@ -113,7 +113,11 @@ with their respective authors' consent UnworthyPie (Bruno battle sprite, Lance backsprite) Triple Fusion sprites - Sinnoh legendaries: Blackboot + Tom spiste grønt + Scrapped Bones + Blackboot + Kiwi + Solo Queue ### Tileset graphics ### Jorginho (OutsideEmerald) ThatsSoWitty (Cave) http://thatssowitty.deviantart.com/art/The-Public-Pokemon-Tileset-281342410 @@ -153,6 +157,13 @@ with their respective authors' consent ### Other graphics Region map: Pokemon-Diamond (http://www.deviantart.com/art/Kanto-BW-styled-map-275298527) Move animations: + + Augmented Reborn Animations Project + Project lead by StCooler. + Contributors: StCooler, DarryBD99, WolfPP, ardicoozer, riddlemeree. + Thanks to the Reborn team for letting people use their resources. You are awesome. + Thanks to BellBlitzKing for his Pokemon Sound Effects Pack: Gen 1 to Gen 7 - All Attacks SFX. + Dig: WolfPP (Pokecommunity) Bone Club, Bonemerang, Bone Rush: rekman (Pokecommunity) ########################################################### diff --git a/Data/CommonEvents.rxdata b/Data/CommonEvents.rxdata index 71c6de4dc..6450d6f5e 100644 Binary files a/Data/CommonEvents.rxdata and b/Data/CommonEvents.rxdata differ diff --git a/Data/Map019.rxdata b/Data/Map019.rxdata index e5e18068d..f7bb235c3 100644 Binary files a/Data/Map019.rxdata and b/Data/Map019.rxdata differ diff --git a/Data/Map078.rxdata b/Data/Map078.rxdata index aa407bd24..be9bbe5c1 100644 Binary files a/Data/Map078.rxdata and b/Data/Map078.rxdata differ diff --git a/Data/Map143.rxdata b/Data/Map143.rxdata index 89de28648..625a92829 100644 Binary files a/Data/Map143.rxdata and b/Data/Map143.rxdata differ diff --git a/Data/Map437.rxdata b/Data/Map437.rxdata index 6baff2717..c338ce62c 100644 Binary files a/Data/Map437.rxdata and b/Data/Map437.rxdata differ diff --git a/Data/Map507.rxdata b/Data/Map507.rxdata index 3bb1a2901..927ea4726 100644 Binary files a/Data/Map507.rxdata and b/Data/Map507.rxdata differ diff --git a/Data/Map716.rxdata b/Data/Map716.rxdata index e0ca59712..4006f13fa 100644 Binary files a/Data/Map716.rxdata and b/Data/Map716.rxdata differ diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index 1a8dcf17c..d7b72d7f1 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/PkmnAnimations.rxdata b/Data/PkmnAnimations.rxdata index 26c658833..80ca4b4ac 100644 Binary files a/Data/PkmnAnimations.rxdata and b/Data/PkmnAnimations.rxdata differ diff --git a/Data/Scripts/001_Settings.rb b/Data/Scripts/001_Settings.rb index 323712deb..6047d7210 100644 --- a/Data/Scripts/001_Settings.rb +++ b/Data/Scripts/001_Settings.rb @@ -6,13 +6,14 @@ module Settings # The version of your game. It has to adhere to the MAJOR.MINOR.PATCH format. GAME_VERSION = '5.0.0' - GAME_VERSION_NUMBER = "5.0.24.1 - beta" + GAME_VERSION_NUMBER = "5.0.25.1 - beta" POKERADAR_LIGHT_ANIMATION_RED_ID = 17 POKERADAR_LIGHT_ANIMATION_GREEN_ID = 18 POKERADAR_HIDDEN_ABILITY_POKE_CHANCE = 32 POKERADAR_BATTERY_STEPS = 0 + # FUSION_ICON_SPRITE_OFFSET = 10 @@ -374,7 +375,7 @@ module Settings [670, 30, :WEAVILE,50,50], #Ice mountains [528, 30, :PYUKUMUKU,20,20], #Treasure Beach [690, 30, :OCTILLERY,32,45], #Deep Ocean - [561, 30, :MAGMAR,32,45], #Mt. Ember + [561, 30, :FLETCHINDER,32,45], #Mt. Ember [562, 30, :NINJASK,45,50], #Boon Island [603, 30, :KECLEON,45,50], #Chrono Island [654, 30, :WHIMSICOTT,32,45] #Brine Road diff --git a/Data/Scripts/003_Game processing/002_Scene_Map.rb b/Data/Scripts/003_Game processing/002_Scene_Map.rb index 2b8e55b0c..78d167d95 100644 --- a/Data/Scripts/003_Game processing/002_Scene_Map.rb +++ b/Data/Scripts/003_Game processing/002_Scene_Map.rb @@ -22,7 +22,7 @@ class Scene_Map @spritesets[map.map_id] = Spriteset_Map.new(map) end $MapFactory.setSceneStarted(self) - updateSpritesets + updateSpritesets(true) end def createSingleSpriteset(map) @@ -30,7 +30,7 @@ class Scene_Map @spritesets[map] = Spriteset_Map.new($MapFactory.maps[map]) $scene.spriteset.restoreAnimations(temp) $MapFactory.setSceneStarted(self) - updateSpritesets + updateSpritesets(true) end def disposeSpritesets @@ -145,7 +145,7 @@ class Scene_Map $MapFactory.updateMaps(self) end - def updateSpritesets + def updateSpritesets(refresh = false) @spritesets = {} if !@spritesets keys = @spritesets.keys.clone for i in keys @@ -162,6 +162,7 @@ class Scene_Map @spritesets[map.map_id] = Spriteset_Map.new(map) if !@spritesets[map.map_id] end pbDayNightTint(@map_renderer) + @map_renderer.refresh if refresh @map_renderer.update Events.onMapUpdate.trigger(self) end diff --git a/Data/Scripts/006_Map renderer/001_TilemapRenderer.rb b/Data/Scripts/006_Map renderer/001_TilemapRenderer.rb index de9e6173b..e52296534 100644 --- a/Data/Scripts/006_Map renderer/001_TilemapRenderer.rb +++ b/Data/Scripts/006_Map renderer/001_TilemapRenderer.rb @@ -271,6 +271,7 @@ class TilemapRenderer @ox = 0 @oy = 0 @visible = true + @need_refresh = true @disposed = false end @@ -312,7 +313,9 @@ class TilemapRenderer #============================================================================= - def refresh; end + def refresh + @need_refresh = true + end def refresh_tile_bitmap(tile, map, tile_id) if tile_id < TILES_PER_AUTOTILE @@ -484,7 +487,7 @@ class TilemapRenderer # Recalculate autotile frames @tilesets.update @autotiles.update - do_full_refresh = false + do_full_refresh = @need_refresh if @viewport.ox != @old_viewport_ox || @viewport.oy != @old_viewport_oy @old_viewport_ox = @viewport.ox @old_viewport_oy = @viewport.oy @@ -546,6 +549,7 @@ class TilemapRenderer end end end + @need_refresh = false @autotiles.changed = false end end diff --git a/Data/Scripts/011_Battle/001_Battler/007_Battler_UseMove.rb b/Data/Scripts/011_Battle/001_Battler/007_Battler_UseMove.rb index 1fec2b87b..6b3453ee9 100644 --- a/Data/Scripts/011_Battle/001_Battler/007_Battler_UseMove.rb +++ b/Data/Scripts/011_Battle/001_Battler/007_Battler_UseMove.rb @@ -218,11 +218,13 @@ class PokeBattle_Battler end end # Stance Change - if isSpecies?(:AEGISLASH) && self.ability == :STANCECHANGE + if self.ability == :STANCECHANGE if move.damagingMove? - pbChangeForm(1,_INTL("{1} changed to Blade Forme!",pbThis)) + user = pbFindUser(choice,move) + stanceChangeEffect(user,true) elsif move.id == :KINGSSHIELD - pbChangeForm(0,_INTL("{1} changed to Shield Forme!",pbThis)) + user = pbFindUser(choice,move) + stanceChangeEffect(user,false) end end # Calculate the move's type during this usage @@ -570,6 +572,20 @@ class PokeBattle_Battler end end + + def stanceChangeEffect(user,attacking=false) + inSwordForm = user.effects[PBEffects::PowerTrick] + if !inSwordForm && attacking + user.effects[PBEffects::PowerTrick] = true + user.attack,user.defense = user.defense,user.attack + @battle.pbDisplay(_INTL("{1} changed to Sword Mode!",pbThis)) + elsif inSwordForm && !attacking + user.effects[PBEffects::PowerTrick] = false + user.attack,user.defense = user.defense,user.attack + @battle.pbDisplay(_INTL("{1} changed to Shield Mode!",pbThis)) + end + end + #============================================================================= # Attack a single target #============================================================================= diff --git a/Data/Scripts/012_Overworld/002_Battle triggering/002_Overworld_BattleIntroAnim.rb b/Data/Scripts/012_Overworld/002_Battle triggering/002_Overworld_BattleIntroAnim.rb index 314af2395..dccf79f1c 100644 --- a/Data/Scripts/012_Overworld/002_Battle triggering/002_Overworld_BattleIntroAnim.rb +++ b/Data/Scripts/012_Overworld/002_Battle triggering/002_Overworld_BattleIntroAnim.rb @@ -2,7 +2,11 @@ # Battle intro animation #=============================================================================== def pbSceneStandby + $scene.disposeSpritesets if $scene.is_a?(Scene_Map) + RPG::Cache.clear + Graphics.frame_reset yield + $scene.createSpritesets if $scene.is_a?(Scene_Map) end def pbBattleAnimation(bgm=nil,battletype=0,foe=nil) diff --git a/Data/Scripts/019_Utilities/001_Utilities.rb b/Data/Scripts/019_Utilities/001_Utilities.rb index fa24b760e..76428547d 100644 --- a/Data/Scripts/019_Utilities/001_Utilities.rb +++ b/Data/Scripts/019_Utilities/001_Utilities.rb @@ -572,7 +572,7 @@ def pbLoadRpgxpScene(scene) oldscene = $scene $scene = scene Graphics.freeze - #oldscene.disposeSpritesets + oldscene.disposeSpritesets visibleObjects = pbHideVisibleObjects Graphics.transition(20) Graphics.freeze @@ -582,7 +582,7 @@ def pbLoadRpgxpScene(scene) Graphics.transition(20) Graphics.freeze $scene = oldscene - #$scene.createSpritesets + $scene.createSpritesets pbShowObjects(visibleObjects) Graphics.transition(20) end diff --git a/Data/Scripts/025-Randomizer/RandomizerUtils.rb b/Data/Scripts/025-Randomizer/RandomizerUtils.rb index 65851fcaf..a68f81a97 100644 --- a/Data/Scripts/025-Randomizer/RandomizerUtils.rb +++ b/Data/Scripts/025-Randomizer/RandomizerUtils.rb @@ -20,6 +20,8 @@ HELD_ITEMS = [:AIRBALLOON, :BRIGHTPOWDER, :EVIOLITE, :FLOATSTONE, :DESTINYKNOT, :PETAYABERRY, :APICOTBERRY, :LANSATBERRY, :STARFBERRY, :ENIGMABERRY, :MICLEBERRY, :CUSTAPBERRY, :JABOCABERRY, :ROWAPBERRY, :FAIRYGEM] +REMOVED_ITEMS=[:COVERFOSSIL,:PLUMEFOSSIL,:DAMAGEUP,:ACCURACYUP,:ANCIENTSTONE,:ODDKEYSTONE_FULL] + def pbGetRandomItem(item_id) return nil if item_id == nil item = GameData::Item.get(item_id) @@ -41,7 +43,7 @@ def pbGetRandomItem(item_id) items_list = GameData::Item.list_all newItem_id = items_list.keys.sample newItem = GameData::Item.get(newItem_id) - while (newItem.is_machine? || newItem.is_key_item?) + while (newItem.is_machine? || newItem.is_key_item? || REMOVED_ITEMS.include?(item)) newItem_id = items_list.keys.sample newItem = GameData::Item.get(newItem_id) end diff --git a/Data/Scripts/050_AddOns/Footprints.rb b/Data/Scripts/050_AddOns/Footprints.rb index 254ab6fc1..986d975d3 100644 --- a/Data/Scripts/050_AddOns/Footprints.rb +++ b/Data/Scripts/050_AddOns/Footprints.rb @@ -1,225 +1,225 @@ -# #=============================================================================== -# # Klein Footprints / WolfPP for Pokémon Essentials -# # Give credits if you're using this! -# # http://kleinstudio.deviantart.com -# # -# # bo4p5687 update (v.19) -# #=============================================================================== +#=============================================================================== +# Klein Footprints / WolfPP for Pokémon Essentials +# Give credits if you're using this! +# http://kleinstudio.deviantart.com # -# # Fix event comment -# def pbEventCommentInput(*args) -# parameters = [] -# list = *args[0].list # Event or event page -# elements = *args[1] # Number of elements -# trigger = *args[2] # Trigger -# return nil if list == nil -# return nil unless list.is_a?(Array) -# for item in list -# next unless item.code == 108 || item.code == 408 -# if item.parameters[0] == trigger[0] -# start = list.index(item) + 1 -# finish = start + elements[0] -# for id in start...finish -# next if !list[id] -# parameters.push(list[id].parameters[0]) -# end -# return parameters -# end -# end -# return nil -# end -# -# module FootprintVariables -# # If you set pokemon here, they doesn't have footprints -# FOLLOWING_DONT_WALK = [ -# # Example: -# # 12,15,17 -# ] -# -# # Set here the terrain tag for footprints, 3 is sand -# TERRAIN_FOOT = 3 -# -# # Initial opacity for footprints -# FOOT_OPACITY = 62 -# -# # Delay velocity -# FOOT_DELAY = 1.1 -# -# def self.get_new_id -# newId = 1 -# while !$game_map.events[newId].nil? do -# break if $game_map.events[newId].erased -# newId += 1 -# end -# return newId -# end -# -# def self.show(event, position) -# if event != $game_player -# return if event.character_name == "" || event.character_name == "nil" || event.name.include?("/nofoot/") -# return if pbEventCommentInput(event, 0, "NoFoot") -# if $Trainer.party.length > 0 -# return if (!($game_map.events[event] && $game_map.events[event].name == "Dependent") && -# (FOLLOWING_DONT_WALK.include?($Trainer.party[0].species) || $PokemonGlobal.bicycle)) -# end -# end -# character_sprites = $scene.spriteset.character_sprites -# viewport = $scene.spriteset.viewport1 -# footsprites = $scene.spriteset.footsprites -# nid = self.get_new_id -# rpgEvent = RPG::Event.new(position[0], position[1]) -# rpgEvent.id = nid -# fev = Game_Event.new($game_map.map_id, rpgEvent, $game_map) -# eventsprite = Sprite_Character.new(viewport, fev) -# character_sprites.push(eventsprite) -# footsprites.push(Footsprite.new(eventsprite, fev, viewport, $game_map, position[2], nid, character_sprites, (event==$game_player))) -# end -# -# end -# -# class Game_Event < Game_Character -# attr_reader :erased -# end -# -# class Sprite_Character -# alias old_initialize_foot initialize -# def initialize(viewport, character=nil) -# old_initialize_foot(viewport, character) -# @disposed = false -# end -# -# alias old_update_foot update -# def update -# return if @disposed -# old_update_foot -# end -# -# alias old_dispose_foot dispose -# def dispose -# old_dispose_foot -# @disposed = true -# end -# end -# -# class Spriteset_Map -# attr_accessor :character_sprites -# attr_accessor :footsprites -# -# alias old_initialize initialize -# def initialize(map=nil) -# old_initialize(map) -# @footsprites = [] -# end -# -# def viewport1 -# return @@viewport1 -# end -# -# def putFootprint(event, pos) -# return FootprintVariables.show(event, pos) -# end -# -# alias old_dispose dispose -# def dispose -# old_dispose -# @footsprites.each { |sprite| sprite.dispose } if !@footsprites.nil? -# @footsprites.clear -# end -# -# alias old_update update -# def update -# old_update -# return if @footsprites.nil? -# @footsprites.each { |sprite| sprite.update } -# end -# end -# -# class Scene_Map -# def spriteset? -# return !@spritesets.nil? -# end -# end -# -# class Game_Character -# -# def get_last_pos -# case direction -# when 2 then return [@x, @y-1, direction] # Move down -# when 4 then return [@x+1, @y, direction] # Move left -# when 6 then return [@x-1, @y, direction] # Move right -# when 8 then return [@x, @y+1, direction] # Move up -# end -# return false -# end -# -# def foot_prints? -# return $game_map.terrain_tag(get_last_pos[0], get_last_pos[1]) == FootprintVariables::TERRAIN_FOOT && $scene.is_a?(Scene_Map) && $scene.spriteset? -# end -# -# alias leave_tile_footprints triggerLeaveTile -# def triggerLeaveTile -# leave_tile_footprints -# $scene.spriteset.putFootprint(self, get_last_pos) if foot_prints? -# end -# -# end -# -# class Footsprite -# def initialize(sprite,event,viewport,map,direction,nid,chardata,player) -# @rsprite = sprite -# # Sprite -# @sprite = Sprite.new(viewport) -# file = player && $PokemonGlobal.bicycle ? "footsetbike.png" : "footset.png" -# @sprite.bitmap = RPG::Cache.load_bitmap("Graphics/Pictures/", file) -# # Set position -# @realwidth = @sprite.bitmap.width/4 -# @sprite.src_rect.width = @realwidth -# @opacity = FootprintVariables::FOOT_OPACITY -# setFootset(direction) -# # Values -# @map = map -# @event = event -# @disposed = false -# @eventid = nid -# @viewport = viewport -# @chardata = chardata -# update -# end -# -# def setFootset(direction) -# @sprite.src_rect.x = -# case direction -# when 2 then 0 # Move down -# when 4 then @realwidth * 3 # Move left -# when 6 then @realwidth * 2 # Move right -# when 8 then @realwidth # Move up -# end -# @sprite.opacity = @opacity -# end -# -# def dispose -# return if @disposed -# @disposed = true -# @event.erase -# (0...@chardata.length).each { |i| @chardata.delete_at(i) if @chardata[i] == @rsprite } -# @rsprite.dispose -# @sprite.dispose -# @sprite = nil -# end -# -# def update -# return if @disposed -# x = @rsprite.x - @rsprite.ox -# y = @rsprite.y - @rsprite.oy -# width = @rsprite.src_rect.width -# height = @rsprite.src_rect.height -# @sprite.x = x + width / 2 -# @sprite.y = y + height -# @sprite.ox = @realwidth / 2 -# @sprite.oy = @sprite.bitmap.height -# @sprite.z = @rsprite.z - 2 -# @opacity -= FootprintVariables::FOOT_DELAY -# @sprite.opacity = @opacity -# dispose if @sprite.opacity <= 0 -# end -# end \ No newline at end of file +# bo4p5687 update (v.19) +#=============================================================================== + +# Fix event comment +def pbEventCommentInput(*args) + parameters = [] + list = *args[0].list # Event or event page + elements = *args[1] # Number of elements + trigger = *args[2] # Trigger + return nil if list == nil + return nil unless list.is_a?(Array) + for item in list + next unless item.code == 108 || item.code == 408 + if item.parameters[0] == trigger[0] + start = list.index(item) + 1 + finish = start + elements[0] + for id in start...finish + next if !list[id] + parameters.push(list[id].parameters[0]) + end + return parameters + end + end + return nil +end + +module FootprintVariables + # If you set pokemon here, they doesn't have footprints + FOLLOWING_DONT_WALK = [ + # Example: + # 12,15,17 + ] + + # Set here the terrain tag for footprints, 3 is sand + TERRAIN_FOOT = 3 + + # Initial opacity for footprints + FOOT_OPACITY = 62 + + # Delay velocity + FOOT_DELAY = 1.1 + + def self.get_new_id + newId = 1 + while !$game_map.events[newId].nil? do + break if $game_map.events[newId].erased + newId += 1 + end + return newId + end + + def self.show(event, position) + if event != $game_player + return if event.character_name == "" || event.character_name == "nil" || event.name.include?("/nofoot/") + return if pbEventCommentInput(event, 0, "NoFoot") + if $Trainer.party.length > 0 + return if (!($game_map.events[event] && $game_map.events[event].name == "Dependent") && + (FOLLOWING_DONT_WALK.include?($Trainer.party[0].species) || $PokemonGlobal.bicycle)) + end + end + character_sprites = $scene.spriteset.character_sprites + viewport = $scene.spriteset.viewport1 + footsprites = $scene.spriteset.footsprites + nid = self.get_new_id + rpgEvent = RPG::Event.new(position[0], position[1]) + rpgEvent.id = nid + fev = Game_Event.new($game_map.map_id, rpgEvent, $game_map) + eventsprite = Sprite_Character.new(viewport, fev) + character_sprites.push(eventsprite) + footsprites.push(Footsprite.new(eventsprite, fev, viewport, $game_map, position[2], nid, character_sprites, (event==$game_player))) + end + +end + +class Game_Event < Game_Character + attr_reader :erased +end + +class Sprite_Character + alias old_initialize_foot initialize + def initialize(viewport, character=nil) + old_initialize_foot(viewport, character) + @disposed = false + end + + alias old_update_foot update + def update + return if @disposed + old_update_foot + end + + alias old_dispose_foot dispose + def dispose + old_dispose_foot + @disposed = true + end +end + +class Spriteset_Map + attr_accessor :character_sprites + attr_accessor :footsprites + + alias old_initialize initialize + def initialize(map=nil) + old_initialize(map) + @footsprites = [] + end + + def viewport1 + return @@viewport1 + end + + def putFootprint(event, pos) + return FootprintVariables.show(event, pos) + end + + alias old_dispose dispose + def dispose + old_dispose + @footsprites.each { |sprite| sprite.dispose } if !@footsprites.nil? + @footsprites.clear + end + + alias old_update update + def update + old_update + return if @footsprites.nil? + @footsprites.each { |sprite| sprite.update } + end +end + +class Scene_Map + def spriteset? + return !@spritesets.nil? + end +end + +class Game_Character + + def get_last_pos + case direction + when 2 then return [@x, @y-1, direction] # Move down + when 4 then return [@x+1, @y, direction] # Move left + when 6 then return [@x-1, @y, direction] # Move right + when 8 then return [@x, @y+1, direction] # Move up + end + return false + end + + def foot_prints? + return $game_map.terrain_tag(get_last_pos[0], get_last_pos[1]) == FootprintVariables::TERRAIN_FOOT && $scene.is_a?(Scene_Map) && $scene.spriteset? + end + + alias leave_tile_footprints triggerLeaveTile + def triggerLeaveTile + leave_tile_footprints + $scene.spriteset.putFootprint(self, get_last_pos) if foot_prints? + end + +end + +class Footsprite + def initialize(sprite,event,viewport,map,direction,nid,chardata,player) + @rsprite = sprite + # Sprite + @sprite = Sprite.new(viewport) + file = player && $PokemonGlobal.bicycle ? "footsetbike.png" : "footset.png" + @sprite.bitmap = RPG::Cache.load_bitmap("Graphics/Pictures/", file) + # Set position + @realwidth = @sprite.bitmap.width/4 + @sprite.src_rect.width = @realwidth + @opacity = FootprintVariables::FOOT_OPACITY + setFootset(direction) + # Values + @map = map + @event = event + @disposed = false + @eventid = nid + @viewport = viewport + @chardata = chardata + update + end + + def setFootset(direction) + @sprite.src_rect.x = + case direction + when 2 then 0 # Move down + when 4 then @realwidth * 3 # Move left + when 6 then @realwidth * 2 # Move right + when 8 then @realwidth # Move up + end + @sprite.opacity = @opacity + end + + def dispose + return if @disposed + @disposed = true + @event.erase + (0...@chardata.length).each { |i| @chardata.delete_at(i) if @chardata[i] == @rsprite } + @rsprite.dispose + @sprite.dispose + @sprite = nil + end + + def update + return if @disposed + x = @rsprite.x - @rsprite.ox + y = @rsprite.y - @rsprite.oy + width = @rsprite.src_rect.width + height = @rsprite.src_rect.height + @sprite.x = x + width / 2 + @sprite.y = y + height + @sprite.ox = @realwidth / 2 + @sprite.oy = @sprite.bitmap.height + @sprite.z = @rsprite.z - 2 + @opacity -= FootprintVariables::FOOT_DELAY + @sprite.opacity = @opacity + dispose if @sprite.opacity <= 0 + end +end \ No newline at end of file diff --git a/Data/Scripts/050_AddOns/UnrealTime.rb b/Data/Scripts/050_AddOns/UnrealTime.rb index fd92b0dba..29b445933 100644 --- a/Data/Scripts/050_AddOns/UnrealTime.rb +++ b/Data/Scripts/050_AddOns/UnrealTime.rb @@ -55,224 +55,224 @@ # }) # end # -# module UnrealTime -# # Set false to disable this system (returns Time.now) -# ENABLED=true -# -# # Time proportion here. -# # So if it is 100, one second in real time will be 100 seconds in game. -# # If it is 60, one second in real time will be one minute in game. -# PROPORTION=60 -# -# # Starting on Essentials v17, the map tone only try to refresh tone each 30 -# # real time seconds. -# # If this variable number isn't -1, the game use this number instead of 30. -# # When time is changed with advance_to or add_seconds, the tone refreshes. -# TONE_CHECK_INTERVAL = 10.0 -# -# # Make this true to time only pass at field (Scene_Map) -# # A note to scripters: To make time pass on other scenes, put line -# # '$PokemonGlobal.addNewFrameCount' near to line 'Graphics.update' -# TIME_STOPS=true -# -# # Make this true to time pass in battle, during turns and command selection. -# # This won't affect the Pokémon and Bag submenus. -# # Only works if TIME_STOPS=true. -# BATTLE_PASS=true -# -# # Make this true to time pass when the Dialog box or the main menu are open. -# # This won't affect the submenus like Pokémon and Bag. -# # Only works if TIME_STOPS=true. -# TALK_PASS=true -# -# # Choose switch number that when true the time won't pass (or -1 to cancel). -# # Only works if TIME_STOPS=true. -# SWITCH_STOPS=-1 -# -# # Choose variable(s) number(s) that can hold time passage (or -1 to cancel). -# # Look at description for more details. -# EXTRA_SECONDS=79 -# EXTRA_DAYS=-1 -# -# # Initial date. In sequence: Year, month, day, hour and minutes. -# # Method UnrealTime.reset resets time back to this time. -# def self.initial_date -# return Time.local(2000,1,1, 12,0) -# end -# -# # Advance to next time. If time already passed, advance -# # into the time on the next day. -# # Hour is 0..23 -# def self.advance_to(hour,min=0,sec=0) -# if hour < 0 || hour > 23 -# raise RangeError, "hour is #{hour}, should be 0..23" -# end -# day_seconds = 60*60*24 -# seconds_now = pbGetTimeNow.hour*60*60+pbGetTimeNow.min*60+pbGetTimeNow.sec -# target_seconds = hour*60*60+min*60+sec -# seconds_added = target_seconds-seconds_now -# seconds_added += day_seconds if seconds_added<0 -# $PokemonGlobal.newFrameCount+=seconds_added -# PBDayNight.sheduleToneRefresh -# end -# -# # Resets time to initial_date. -# def self.reset -# raise "Method doesn't work when TIME_STOPS is false!" if !TIME_STOPS -# $game_variables[EXTRA_SECONDS]=0 if EXTRA_DAYS>0 -# $game_variables[EXTRA_DAYS]=0 if EXTRA_DAYS>0 -# $PokemonGlobal.newFrameCount=0 -# $PokemonGlobal.extraYears=0 -# PBDayNight.sheduleToneRefresh -# end -# -# # Does the same thing as EXTRA_SECONDS variable. -# def self.add_seconds(seconds) -# raise "Method doesn't work when TIME_STOPS is false!" if !TIME_STOPS -# $PokemonGlobal.newFrameCount+=(seconds*Graphics.frame_rate)/PROPORTION.to_f -# PBDayNight.sheduleToneRefresh -# end -# -# def self.add_days(days) -# add_seconds(60*60*24*days) -# end -# -# NEED_32_BIT_FIX = [''].pack('p').size <= 4 -# end -# -# # Essentials V18 and lower compatibility -# module Settings -# TIME_SHADING = defined?(ENABLESHADING) ? ENABLESHADING : ::TIME_SHADING -# end if defined?(TIME_SHADING) || defined?(ENABLESHADING) -# -# module PBDayNight -# class << self -# if method_defined?(:getTone) && UnrealTime::TONE_CHECK_INTERVAL > 0 -# def getTone -# @cachedTone = Tone.new(0,0,0) if !@cachedTone -# return @cachedTone if !Settings::TIME_SHADING -# toneNeedUpdate = (!@dayNightToneLastUpdate || -# Graphics.frame_count-@dayNightToneLastUpdate >= -# Graphics.frame_rate*UnrealTime::TONE_CHECK_INTERVAL -# ) -# if toneNeedUpdate -# getToneInternal -# @dayNightToneLastUpdate = Graphics.frame_count -# end -# return @cachedTone -# end -# end -# -# # Shedule a tone refresh on the next try (probably next frame) -# def sheduleToneRefresh -# @dayNightToneLastUpdate = nil -# end -# end -# end -# -# def pbGetTimeNow -# return Time.now if !$PokemonGlobal || !UnrealTime::ENABLED -# day_seconds = 60*60*24 -# if UnrealTime::TIME_STOPS -# # Sum the extra values to newFrameCount -# if UnrealTime::EXTRA_SECONDS>0 -# UnrealTime.add_seconds(pbGet(UnrealTime::EXTRA_SECONDS)) -# $game_variables[UnrealTime::EXTRA_SECONDS]=0 -# end -# if UnrealTime::EXTRA_DAYS>0 -# UnrealTime.add_seconds(day_seconds*pbGet(UnrealTime::EXTRA_DAYS)) -# $game_variables[UnrealTime::EXTRA_DAYS]=0 -# end -# elsif UnrealTime::EXTRA_SECONDS>0 && UnrealTime::EXTRA_DAYS>0 -# # Checks to regulate the max/min values at UnrealTime::EXTRA_SECONDS -# while pbGet(UnrealTime::EXTRA_SECONDS)>=day_seconds -# $game_variables[UnrealTime::EXTRA_SECONDS]-=day_seconds -# $game_variables[UnrealTime::EXTRA_DAYS]+=1 -# end -# while pbGet(UnrealTime::EXTRA_SECONDS)<=-day_seconds -# $game_variables[UnrealTime::EXTRA_SECONDS]+=day_seconds -# $game_variables[UnrealTime::EXTRA_DAYS]-=1 -# end -# end -# start_time=UnrealTime.initial_date -# if UnrealTime::TIME_STOPS -# time_played=$PokemonGlobal.newFrameCount -# else -# time_played=Graphics.frame_count -# end -# time_played=(time_played*UnrealTime::PROPORTION)/Graphics.frame_rate -# time_jumped=0 -# if UnrealTime::EXTRA_SECONDS>-1 -# time_jumped+=pbGet(UnrealTime::EXTRA_SECONDS) -# end -# if UnrealTime::EXTRA_DAYS>-1 -# time_jumped+=pbGet(UnrealTime::EXTRA_DAYS)*day_seconds -# end -# time_ret = 0 -# # Before Essentials V19, there is a year limit. To prevent crashes due to this -# # limit, every time that you reach in year 2036 the system will subtract 6 -# # years (to works with leap year) from your date and sum in -# # $PokemonGlobal.extraYears. You can sum your actual year with this extraYears -# # when displaying years. -# loop do -# time_fix=0 -# if $PokemonGlobal.extraYears!=0 -# time_fix = $PokemonGlobal.extraYears*day_seconds*(365*6+1)/6 -# end -# time_ret=start_time+(time_played+time_jumped-time_fix) -# break if !UnrealTime::NEED_32_BIT_FIX || time_ret.year<2036 -# $PokemonGlobal.extraYears+=6 -# end -# return time_ret -# end -# -# if UnrealTime::ENABLED -# class PokemonGlobalMetadata -# attr_accessor :newFrameCount # Became float when using extra values -# attr_accessor :extraYears -# -# def addNewFrameCount -# return if (UnrealTime::SWITCH_STOPS>0 && -# $game_switches[UnrealTime::SWITCH_STOPS]) -# self.newFrameCount+=1 -# end -# -# def newFrameCount -# @newFrameCount=0 if !@newFrameCount -# return @newFrameCount -# end -# -# def extraYears -# @extraYears=0 if !@extraYears -# return @extraYears -# end -# end -# -# if UnrealTime::TIME_STOPS -# class Scene_Map -# alias :updateold :update -# def update -# $PokemonGlobal.addNewFrameCount -# updateold -# end -# -# if UnrealTime::TALK_PASS -# alias :miniupdateold :miniupdate -# def miniupdate -# $PokemonGlobal.addNewFrameCount -# miniupdateold -# end -# end -# end -# -# if UnrealTime::BATTLE_PASS -# class PokeBattle_Scene -# alias :pbGraphicsUpdateold :pbGraphicsUpdate -# def pbGraphicsUpdate -# $PokemonGlobal.addNewFrameCount -# pbGraphicsUpdateold -# end -# end -# end -# end -# end \ No newline at end of file +module UnrealTime + # Set false to disable this system (returns Time.now) + ENABLED=true + + # Time proportion here. + # So if it is 100, one second in real time will be 100 seconds in game. + # If it is 60, one second in real time will be one minute in game. + PROPORTION=60 + + # Starting on Essentials v17, the map tone only try to refresh tone each 30 + # real time seconds. + # If this variable number isn't -1, the game use this number instead of 30. + # When time is changed with advance_to or add_seconds, the tone refreshes. + TONE_CHECK_INTERVAL = 10.0 + + # Make this true to time only pass at field (Scene_Map) + # A note to scripters: To make time pass on other scenes, put line + # '$PokemonGlobal.addNewFrameCount' near to line 'Graphics.update' + TIME_STOPS=true + + # Make this true to time pass in battle, during turns and command selection. + # This won't affect the Pokémon and Bag submenus. + # Only works if TIME_STOPS=true. + BATTLE_PASS=true + + # Make this true to time pass when the Dialog box or the main menu are open. + # This won't affect the submenus like Pokémon and Bag. + # Only works if TIME_STOPS=true. + TALK_PASS=true + + # Choose switch number that when true the time won't pass (or -1 to cancel). + # Only works if TIME_STOPS=true. + SWITCH_STOPS=-1 + + # Choose variable(s) number(s) that can hold time passage (or -1 to cancel). + # Look at description for more details. + EXTRA_SECONDS=79 + EXTRA_DAYS=-1 + + # Initial date. In sequence: Year, month, day, hour and minutes. + # Method UnrealTime.reset resets time back to this time. + def self.initial_date + return Time.local(2000,1,1, 12,0) + end + + # Advance to next time. If time already passed, advance + # into the time on the next day. + # Hour is 0..23 + def self.advance_to(hour,min=0,sec=0) + if hour < 0 || hour > 23 + raise RangeError, "hour is #{hour}, should be 0..23" + end + day_seconds = 60*60*24 + seconds_now = pbGetTimeNow.hour*60*60+pbGetTimeNow.min*60+pbGetTimeNow.sec + target_seconds = hour*60*60+min*60+sec + seconds_added = target_seconds-seconds_now + seconds_added += day_seconds if seconds_added<0 + $PokemonGlobal.newFrameCount+=seconds_added + PBDayNight.sheduleToneRefresh + end + + # Resets time to initial_date. + def self.reset + raise "Method doesn't work when TIME_STOPS is false!" if !TIME_STOPS + $game_variables[EXTRA_SECONDS]=0 if EXTRA_DAYS>0 + $game_variables[EXTRA_DAYS]=0 if EXTRA_DAYS>0 + $PokemonGlobal.newFrameCount=0 + $PokemonGlobal.extraYears=0 + PBDayNight.sheduleToneRefresh + end + + # Does the same thing as EXTRA_SECONDS variable. + def self.add_seconds(seconds) + raise "Method doesn't work when TIME_STOPS is false!" if !TIME_STOPS + $PokemonGlobal.newFrameCount+=(seconds*Graphics.frame_rate)/PROPORTION.to_f + PBDayNight.sheduleToneRefresh + end + + def self.add_days(days) + add_seconds(60*60*24*days) + end + + NEED_32_BIT_FIX = [''].pack('p').size <= 4 +end + +# Essentials V18 and lower compatibility +module Settings + TIME_SHADING = defined?(ENABLESHADING) ? ENABLESHADING : ::TIME_SHADING +end if defined?(TIME_SHADING) || defined?(ENABLESHADING) + +module PBDayNight + class << self + if method_defined?(:getTone) && UnrealTime::TONE_CHECK_INTERVAL > 0 + def getTone + @cachedTone = Tone.new(0,0,0) if !@cachedTone + return @cachedTone if !Settings::TIME_SHADING + toneNeedUpdate = (!@dayNightToneLastUpdate || + Graphics.frame_count-@dayNightToneLastUpdate >= + Graphics.frame_rate*UnrealTime::TONE_CHECK_INTERVAL + ) + if toneNeedUpdate + getToneInternal + @dayNightToneLastUpdate = Graphics.frame_count + end + return @cachedTone + end + end + + # Shedule a tone refresh on the next try (probably next frame) + def sheduleToneRefresh + @dayNightToneLastUpdate = nil + end + end +end + +def pbGetTimeNow + return Time.now if !$PokemonGlobal || !UnrealTime::ENABLED + day_seconds = 60*60*24 + if UnrealTime::TIME_STOPS + # Sum the extra values to newFrameCount + if UnrealTime::EXTRA_SECONDS>0 + UnrealTime.add_seconds(pbGet(UnrealTime::EXTRA_SECONDS)) + $game_variables[UnrealTime::EXTRA_SECONDS]=0 + end + if UnrealTime::EXTRA_DAYS>0 + UnrealTime.add_seconds(day_seconds*pbGet(UnrealTime::EXTRA_DAYS)) + $game_variables[UnrealTime::EXTRA_DAYS]=0 + end + elsif UnrealTime::EXTRA_SECONDS>0 && UnrealTime::EXTRA_DAYS>0 + # Checks to regulate the max/min values at UnrealTime::EXTRA_SECONDS + while pbGet(UnrealTime::EXTRA_SECONDS)>=day_seconds + $game_variables[UnrealTime::EXTRA_SECONDS]-=day_seconds + $game_variables[UnrealTime::EXTRA_DAYS]+=1 + end + while pbGet(UnrealTime::EXTRA_SECONDS)<=-day_seconds + $game_variables[UnrealTime::EXTRA_SECONDS]+=day_seconds + $game_variables[UnrealTime::EXTRA_DAYS]-=1 + end + end + start_time=UnrealTime.initial_date + if UnrealTime::TIME_STOPS + time_played=$PokemonGlobal.newFrameCount + else + time_played=Graphics.frame_count + end + time_played=(time_played*UnrealTime::PROPORTION)/Graphics.frame_rate + time_jumped=0 + if UnrealTime::EXTRA_SECONDS>-1 + time_jumped+=pbGet(UnrealTime::EXTRA_SECONDS) + end + if UnrealTime::EXTRA_DAYS>-1 + time_jumped+=pbGet(UnrealTime::EXTRA_DAYS)*day_seconds + end + time_ret = 0 + # Before Essentials V19, there is a year limit. To prevent crashes due to this + # limit, every time that you reach in year 2036 the system will subtract 6 + # years (to works with leap year) from your date and sum in + # $PokemonGlobal.extraYears. You can sum your actual year with this extraYears + # when displaying years. + loop do + time_fix=0 + if $PokemonGlobal.extraYears!=0 + time_fix = $PokemonGlobal.extraYears*day_seconds*(365*6+1)/6 + end + time_ret=start_time+(time_played+time_jumped-time_fix) + break if !UnrealTime::NEED_32_BIT_FIX || time_ret.year<2036 + $PokemonGlobal.extraYears+=6 + end + return time_ret +end + +if UnrealTime::ENABLED + class PokemonGlobalMetadata + attr_accessor :newFrameCount # Became float when using extra values + attr_accessor :extraYears + + def addNewFrameCount + return if (UnrealTime::SWITCH_STOPS>0 && + $game_switches[UnrealTime::SWITCH_STOPS]) + self.newFrameCount+=1 + end + + def newFrameCount + @newFrameCount=0 if !@newFrameCount + return @newFrameCount + end + + def extraYears + @extraYears=0 if !@extraYears + return @extraYears + end + end + + if UnrealTime::TIME_STOPS + class Scene_Map + alias :updateold :update + def update + $PokemonGlobal.addNewFrameCount + updateold + end + + if UnrealTime::TALK_PASS + alias :miniupdateold :miniupdate + def miniupdate + $PokemonGlobal.addNewFrameCount + miniupdateold + end + end + end + + if UnrealTime::BATTLE_PASS + class PokeBattle_Scene + alias :pbGraphicsUpdateold :pbGraphicsUpdate + def pbGraphicsUpdate + $PokemonGlobal.addNewFrameCount + pbGraphicsUpdateold + end + end + end + end +end \ No newline at end of file diff --git a/Data/System.rxdata b/Data/System.rxdata index 9adf8aa42..45f6279f2 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ diff --git a/Data/items.dat b/Data/items.dat index 68b2996e8..05d9c2ac0 100644 Binary files a/Data/items.dat and b/Data/items.dat differ diff --git a/Data/messages.dat b/Data/messages.dat index aedd5512e..f48830018 100644 Binary files a/Data/messages.dat and b/Data/messages.dat differ diff --git a/Data/move2anim.dat b/Data/move2anim.dat index 96a7e35d3..dafa27888 100644 Binary files a/Data/move2anim.dat and b/Data/move2anim.dat differ diff --git a/Data/trainers.dat b/Data/trainers.dat index 1ce32f46f..24834ea69 100644 Binary files a/Data/trainers.dat and b/Data/trainers.dat differ diff --git a/PBS/items.txt b/PBS/items.txt index 7284c66d6..742447996 100644 --- a/PBS/items.txt +++ b/PBS/items.txt @@ -664,6 +664,6 @@ 656,TM119,TM119,TM119s,4,30000,"The user attacks driven by frustration. Power increases if the user's previous move failed.",3,0,0,STOMPINGTANTRUM 657,TM120,TM120,TM120s,4,30000,"The user attacks the target's throat. The target cannot use sound-based moves for two turns.",3,0,0,THROATCHOP 658,TM00,TM00,TM00s,4,0,"A strange TM developped by Team Rocket. It appears to be related to Pokémon fusion.",3,0,0,FUSIONSWAP -659;TM121;TM121;TM121s;4;10000;"The user shoots boiling hot water at its target. It may also leave the target with a burn.";3;0;0;SCALD +659,TM121,TM121,TM121s,4,10000,"The user shoots boiling hot water at its target. It may also leave the target with a burn.",3,0,0,SCALD