mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Implemented GameData::BerryPlant
This commit is contained in:
36
Data/Scripts/011_Data/017_Berry_Plant_Data.rb
Normal file
36
Data/Scripts/011_Data/017_Berry_Plant_Data.rb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
module GameData
|
||||||
|
class BerryPlant
|
||||||
|
attr_reader :id
|
||||||
|
attr_reader :id_number
|
||||||
|
attr_reader :hours_per_stage
|
||||||
|
attr_reader :drying_per_hour
|
||||||
|
attr_reader :minimum_yield
|
||||||
|
attr_reader :maximum_yield
|
||||||
|
|
||||||
|
DATA = {}
|
||||||
|
DATA_FILENAME = "berry_plants.dat"
|
||||||
|
|
||||||
|
NUMBER_OF_REPLANTS = 9
|
||||||
|
|
||||||
|
extend ClassMethods
|
||||||
|
include InstanceMethods
|
||||||
|
|
||||||
|
def initialize(hash)
|
||||||
|
validate hash => Hash, hash[:id] => Symbol
|
||||||
|
@id = hash[:id]
|
||||||
|
@id_number = hash[:id_number] || -1
|
||||||
|
@hours_per_stage = hash[:hours_per_stage] || 3
|
||||||
|
@drying_per_hour = hash[:drying_per_hour] || 15
|
||||||
|
@minimum_yield = hash[:minimum_yield] || 2
|
||||||
|
@maximum_yield = hash[:maximum_yield] || 5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#===============================================================================
|
||||||
|
# Deprecated methods
|
||||||
|
#===============================================================================
|
||||||
|
def pbGetBerryPlantData(item)
|
||||||
|
Deprecation.warn_method('pbGetBerryPlantData', 'v20', 'GameData::BerryPlant.get(item)')
|
||||||
|
return GameData::BerryPlant.get(item)
|
||||||
|
end
|
||||||
@@ -1,33 +1,3 @@
|
|||||||
class PokemonTemp
|
|
||||||
attr_accessor :berryPlantData
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def pbLoadBerryPlantData
|
|
||||||
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
|
|
||||||
if !$PokemonTemp.berryPlantData
|
|
||||||
if pbRgssExists?("Data/berry_plants.dat")
|
|
||||||
$PokemonTemp.berryPlantData = load_data("Data/berry_plants.dat")
|
|
||||||
else
|
|
||||||
$PokemonTemp.berryPlantData = {}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return $PokemonTemp.berryPlantData
|
|
||||||
end
|
|
||||||
|
|
||||||
def pbGetBerryPlantData(item)
|
|
||||||
data = pbLoadBerryPlantData
|
|
||||||
return data[item] if data[item]
|
|
||||||
return [3, 15, 2, 5] # Hours/stage, drying/hour, min yield, max yield
|
|
||||||
end
|
|
||||||
|
|
||||||
alias __berryPlant__pbClearData pbClearData
|
|
||||||
def pbClearData
|
|
||||||
$PokemonTemp.berryPlantData = nil if $PokemonTemp
|
|
||||||
__berryPlant__pbClearData
|
|
||||||
end
|
|
||||||
|
|
||||||
Events.onSpritesetCreate += proc { |_sender,e|
|
Events.onSpritesetCreate += proc { |_sender,e|
|
||||||
spriteset = e[0]
|
spriteset = e[0]
|
||||||
viewport = e[1]
|
viewport = e[1]
|
||||||
@@ -103,8 +73,6 @@ end
|
|||||||
|
|
||||||
|
|
||||||
class BerryPlantSprite
|
class BerryPlantSprite
|
||||||
REPLANTS = 9
|
|
||||||
|
|
||||||
def initialize(event,map,_viewport)
|
def initialize(event,map,_viewport)
|
||||||
@event=event
|
@event=event
|
||||||
@map=map
|
@map=map
|
||||||
@@ -140,8 +108,8 @@ class BerryPlantSprite
|
|||||||
|
|
||||||
def updatePlantDetails(berryData)
|
def updatePlantDetails(berryData)
|
||||||
return berryData if berryData[0]==0
|
return berryData if berryData[0]==0
|
||||||
berryvalues=pbGetBerryPlantData(berryData[1])
|
berryvalues = GameData::BerryPlant.get(berryData[1])
|
||||||
timeperstage=berryvalues[0]*3600
|
timeperstage = berryvalues.hours_per_stage * 3600
|
||||||
timenow=pbGetTimeNow
|
timenow=pbGetTimeNow
|
||||||
if berryData.length>6
|
if berryData.length>6
|
||||||
# Gen 4 growth mechanisms
|
# Gen 4 growth mechanisms
|
||||||
@@ -150,9 +118,9 @@ class BerryPlantSprite
|
|||||||
return berryData if timeDiff<=0
|
return berryData if timeDiff<=0
|
||||||
berryData[3]=timenow.to_i # last updated now
|
berryData[3]=timenow.to_i # last updated now
|
||||||
# Mulch modifiers
|
# Mulch modifiers
|
||||||
dryingrate=berryvalues[1]
|
dryingrate = berryvalues.drying_per_hour
|
||||||
maxreplants=REPLANTS
|
maxreplants = GameData::BerryPlant::NUMBER_OF_REPLANTS
|
||||||
ripestages=4
|
ripestages = 4
|
||||||
case berryData[7]
|
case berryData[7]
|
||||||
when :GROWTHMULCH
|
when :GROWTHMULCH
|
||||||
timeperstage = (timeperstage * 0.75).to_i
|
timeperstage = (timeperstage * 0.75).to_i
|
||||||
@@ -246,8 +214,8 @@ class BerryPlantSprite
|
|||||||
berryData[3]+=timeperstage*4 # add to time existed
|
berryData[3]+=timeperstage*4 # add to time existed
|
||||||
berryData[4]=0 # reset total waterings count
|
berryData[4]=0 # reset total waterings count
|
||||||
berryData[5]+=1 # add to replanted count
|
berryData[5]+=1 # add to replanted count
|
||||||
if berryData[5]>REPLANTS # Too many replants
|
if berryData[5] > GameData::BerryPlant::NUMBER_OF_REPLANTS # Too many replants
|
||||||
berryData=[0,0,false,0,0,0]
|
berryData = [0,0,false,0,0,0]
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -282,7 +250,7 @@ class BerryPlantSprite
|
|||||||
@event.character_name="berrytreeplanted" # Common to all berries
|
@event.character_name="berrytreeplanted" # Common to all berries
|
||||||
@event.turn_down
|
@event.turn_down
|
||||||
else
|
else
|
||||||
filename=sprintf("berrytree%s",GameData::Item.get(berryData[1]).id.to_s) rescue nil
|
filename=sprintf("berrytree%s",GameData::Item.get(berryData[1]).id.to_s)
|
||||||
if !pbResolveBitmap("Graphics/Characters/"+filename)
|
if !pbResolveBitmap("Graphics/Characters/"+filename)
|
||||||
filename=sprintf("berrytree%03d",GameData::Item.get(berryData[1]).id_number)
|
filename=sprintf("berrytree%03d",GameData::Item.get(berryData[1]).id_number)
|
||||||
end
|
end
|
||||||
@@ -427,7 +395,7 @@ def pbBerryPlant
|
|||||||
pbFadeOutIn {
|
pbFadeOutIn {
|
||||||
scene = PokemonBag_Scene.new
|
scene = PokemonBag_Scene.new
|
||||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||||
berry = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_berry? })
|
berry = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_berry? })
|
||||||
}
|
}
|
||||||
if berry
|
if berry
|
||||||
timenow=pbGetTimeNow
|
timenow=pbGetTimeNow
|
||||||
@@ -470,19 +438,20 @@ def pbBerryPlant
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
when 5 # X berries
|
when 5 # X berries
|
||||||
berryvalues=pbGetBerryPlantData(berryData[1])
|
berryvalues = GameData::BerryPlant.get(berryData[1])
|
||||||
# Get berry yield (berrycount)
|
# Get berry yield (berrycount)
|
||||||
berrycount=1
|
berrycount=1
|
||||||
if berryData.length>6
|
if berryData.length > 6
|
||||||
# Gen 4 berry yield calculation
|
# Gen 4 berry yield calculation
|
||||||
berrycount=[berryvalues[3]-berryData[6],berryvalues[2]].max
|
berrycount = [berryvalues.maximum_yield - berryData[6], berryvalues.minimum_yield].max
|
||||||
else
|
else
|
||||||
# Gen 3 berry yield calculation
|
# Gen 3 berry yield calculation
|
||||||
if berryData[4]>0
|
if berryData[4] > 0
|
||||||
randomno=rand(1+berryvalues[3]-berryvalues[2])
|
berrycount = (berryvalues.maximum_yield - berryvalues.minimum_yield) * (berryData[4] - 1)
|
||||||
berrycount=(((berryvalues[3]-berryvalues[2])*(berryData[4]-1)+randomno)/4).floor+berryvalues[2]
|
berrycount += rand(1 + berryvalues.maximum_yield - berryvalues.minimum_yield)
|
||||||
|
berrycount = (berrycount / 4) + berryvalues.minimum_yield
|
||||||
else
|
else
|
||||||
berrycount=berryvalues[2]
|
berrycount = berryvalues.minimum_yield
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
item = GameData::Item.get(berry)
|
item = GameData::Item.get(berry)
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ def pbSetUpSystem
|
|||||||
consts = [] if !consts
|
consts = [] if !consts
|
||||||
GameData::Ability.load
|
GameData::Ability.load
|
||||||
GameData::Item.load
|
GameData::Item.load
|
||||||
|
GameData::BerryPlant.load
|
||||||
rescue
|
rescue
|
||||||
consts = []
|
consts = []
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -267,8 +267,6 @@ end
|
|||||||
# Save berry plant data to PBS file
|
# Save berry plant data to PBS file
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
def pbSaveBerryPlants
|
def pbSaveBerryPlants
|
||||||
berryPlantData = load_data("Data/berry_plants.dat")
|
|
||||||
return if !berryPlantData || berryPlantData.length==0
|
|
||||||
File.open("PBS/berryplants.txt","wb") { |f|
|
File.open("PBS/berryplants.txt","wb") { |f|
|
||||||
f.write(0xEF.chr)
|
f.write(0xEF.chr)
|
||||||
f.write(0xBB.chr)
|
f.write(0xBB.chr)
|
||||||
@@ -276,13 +274,14 @@ def pbSaveBerryPlants
|
|||||||
f.write("\# "+_INTL("See the documentation on the wiki to learn how to edit this file."))
|
f.write("\# "+_INTL("See the documentation on the wiki to learn how to edit this file."))
|
||||||
f.write("\r\n")
|
f.write("\r\n")
|
||||||
f.write("\#-------------------------------\r\n")
|
f.write("\#-------------------------------\r\n")
|
||||||
keys = berryPlantData.keys.sort
|
GameData::BerryPlant.each do |bp|
|
||||||
keys.each do |key|
|
f.write(sprintf("%s = %d,%d,%d,%d\r\n",
|
||||||
data = berryPlantData[key]
|
csvQuote(bp.id.to_s),
|
||||||
next if !data || !GameData::Item.exists?(key)
|
bp.hours_per_stage,
|
||||||
f.write(sprintf("%s = %d,%d,%d,%d",
|
bp.drying_per_hour,
|
||||||
csvQuote(GameData::Item.get(key).id.to_s), data[0], data[1], data[2], data[3]))
|
bp.minimum_yield,
|
||||||
f.write("\r\n")
|
bp.maximum_yield
|
||||||
|
))
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -139,6 +139,33 @@ module Compiler
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Compile berry plants
|
# Compile berry plants
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
|
def compile_berry_plants
|
||||||
|
GameData::BerryPlant::DATA.clear
|
||||||
|
pbCompilerEachCommentedLine("PBS/berryplants.txt") { |line, line_no|
|
||||||
|
if line[/^\s*(\w+)\s*=\s*(.*)$/] # Of the format XXX = YYY
|
||||||
|
key = $1
|
||||||
|
value = $2
|
||||||
|
item_symbol = parseItem(key).to_sym
|
||||||
|
item_number = GameData::Item.get(item_symbol).id_number
|
||||||
|
line = pbGetCsvRecord(value, line_no, [0, "vuuv"])
|
||||||
|
# Construct berry plant hash
|
||||||
|
berry_plant_hash = {
|
||||||
|
:id => item_symbol,
|
||||||
|
:id_number => item_number,
|
||||||
|
:hours_per_stage => line[0],
|
||||||
|
:drying_per_hour => line[1],
|
||||||
|
:minimum_yield => line[2],
|
||||||
|
:maximum_yield => line[3]
|
||||||
|
}
|
||||||
|
# Add berry plant's data to records
|
||||||
|
GameData::BerryPlant::DATA[item_number] = GameData::BerryPlant::DATA[item_symbol] = GameData::BerryPlant.new(berry_plant_hash)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
# Save all data
|
||||||
|
GameData::BerryPlant.save
|
||||||
|
Graphics.update
|
||||||
|
end
|
||||||
|
|
||||||
def compile_berry_plants
|
def compile_berry_plants
|
||||||
sections = {}
|
sections = {}
|
||||||
if File.exists?("PBS/berryplants.txt")
|
if File.exists?("PBS/berryplants.txt")
|
||||||
|
|||||||
Reference in New Issue
Block a user