Italianstal1ion
Member
Could someone tell me what is wrong with this script? When I try to save I get
Argument Error Line 557
Wrong number of arguments (0 for 1)
Script (made by GoldenShadow)
Script addon (I am not sure if the other script really needs it, but if you dont put it in, you get errors)
Argument Error Line 557
Wrong number of arguments (0 for 1)
Script (made by GoldenShadow)
Code:
#=============================================================
# <> Battle Trophies similar to Star Ocean 3: Till the End of Time
# ==> You can delete all the comments except the copyright and creator info. Thanks.
# ==> Do not rip, repost or any other way of reproducing without proper credit. Thanks.
# ShadowClan Technologies © 2003-2005 - All rights reserved. X-RPG/Asylum rules :-)
#--------------------------------------------------------------------------------------------------------------------------
# call with $scene = Scene_BT.new
#
#
# * So... what the hell is a 'Battle Trophy' anyways??
# The term 'Battle Trophies' is really what is says it is.
# That in battle, by doing various tasks, you can obtain
# a 'proof' of succession of the task made. These tasks
# can vary from doing a damage over 1000 to doing
# a damage of 0. Or even winning alone or defeating
# at least 1000 enemies, etc.. The 'proof' is called a
# 'trophy' and because it's mainly done in battle, it
# is therefore called a 'Battle Trophy'.
#
# * So... how the hell does this work anyway??
# Having multiple trophy check defs, like damage checking and result,
# you can get lots of trophies. The way trophies are set to 'achievement'
# is simply by checking every trophy condition in that particular def and
# if one or more conditions are met, it sets that ID in @trophy_id to true.
# Thus making it 'achieved'. If not, it does nothing, leaving that ID to nil (nothing).
#
# * And how about using them? How do I do that?
# The trophies that are set as default or the ones you set up, are initiated
# when a new game starts. To get a trophy, just battle battle battle!
# If you're a debugger, you can use $bt.get_data(print=true) for popping the stuff up.
# If you want to make your own windows that should list all trophies, then you must
# put the $bt.get_data under 'def initialize' or 'def main', because only then
# you can use the arrays for the IDs or names and stuff, like this:
# $bt.trophy_id[ID] is the trophy ID, returns true if met, and nil if not met
# $bt.trophy_names[ID] is trophy name ID, returns the name if met, and nothing if not.
# Some Ruby codes documented in the japanese helpfile you can use:
# Array.reverse > Reverses contents, example: [1,2,3] becomes [3,2,1]
# Array.first > Returns first item, example: Array.first returns 1 if 1 is first.
# Array.last > Returns last item, example: Array.last returns 3 if 3 is last.
# Array.clear > Clears the array of its contents.
# Array.compact > Removes 'nil' items from an array, and returns the remaining.
# Array.nitems > Returns amount of items that are non-nil.
# Array.uniq > Returns the array with duplicate items removed.
# Array.fill(n) > Fills the array with n, where 'n' is a string or a number.
#
# * "Can I make sum trophies too? Well can I huh, big GS?" -Cloud_1989
# You can also add your own trophies. To do that, just study the
# trophies how they are created & placed then add your own.
# They catagorized by their purpose like 'def check_trophy_DAMAGE' (which is also for heals).
# If it still doesn't fit anywhere, try adding a new catagory... !!CAUTION!!
# --> If you're a rookie DO NOT DO THAT, adding categories may screw up your battles!!
# --> If you're not a rookie, don't add it directly to your game, make test project first!
# But when you've learned it, then add as many as you want -- Just knock yourself out! :-P
#
# * What if you plan on removing all data? Can I reset the whole thing?
# If you want to reset the data for any reason, like customized game overs or so,
# you can do that by either Call Script or scenes by adding this: $bt.reset_data
# It will reset most things... what exactly? Look at: Battle_Trophies#reset_data
#
# * To view the whole history, http://www.sct.net/scripts/sid04/history.txt [Site is currently down]
#
# * What is fixed in ver 2.0 ?
# - Shows window on achievement and/or hears sound on achievement!
# - Works more efficienter and effective now.
# - Added new thing 'add_trophy(id)' for adding trophies.
# Can now be used as: $bt.add_trophy(Trophy ID). [Assuming $bt = Battle_Trophies.new]
# - Some other minor bug fixes.
#
# * What is fixed in ver 2.1 ?
# - Instead of global variables, it uses attribute accessors to store data internally.
# - Showing the trophies in the window works different (Not through name&ID but just ID).
# - Each array can be accessed anytime using $bt.data, replace data with the array.
# Example 1: $bt.trophy_id[id] => Returns true if met, nil of not.
# Example 2: $bt.amount_battles => Returns the amount of battles made so far
# - Remove of some stuff I forgot to change, I needed them to debug, they're now fixed.
# - Also changed this intro, regarding the explain of some things. It's more rookie-friendly now.
#
# That would end the little explaining for now. I -really- hope you like this script.
#--------------------------------------------------------------------------------------------------------------------------
# * Suggestions? ==> Post/PM (X-RPG forums) or emailling me: invincible_p0wer_@hotmail.com
# * Created by: GoldenShadow
# * Credits: Big thanks to Sodisna for helping me out! Wouldn't continue this script without 'em! :-P
# And Kio for bringing me on the idea ...
#=============================================================
module SC # don't remove this module
RXSC_BTS_ = "Battle Trophies Script: v2.1 (SID:02)"
RXSC_BTSE = "Battle Trophies Scene: v1.0 (SID:02)"
BT_POPUP_SOUND = "Audio/SE/015-Jump01" # Soundfile
BT_POPUP_MODE = 2 # Popup mode
# Popup mode, style of showing when you've achieved a trophy:
# 0 : Only window, 1 : Only sound, 2 : Both, 3 : None
end
class Battle_Trophies # Be careful when adding definitions unless you know what you're doing~
attr_accessor :trophy_id # Trophy array full of IDs with either true/false as key
attr_accessor :trophy_names # Trophy array full of IDs with their names
attr_accessor :new_trophy # Array with the new trophies
attr_accessor :trophy_perc # % of trophies got
attr_accessor :trophy_amount # Amount of trophies
attr_accessor :defeated_enemies # Amount of defeated enemies (Optional)
attr_accessor :amount_miss # Amount of misses (Optional)
attr_accessor :amount_battles # Amount of battles (Optional)
attr_accessor :ally_kills # Amount of allies kills (Optional)
def initialize
@trophy_id = []
@trophy_names = []
@new_trophy = []
@trophy_perc = 0
@trophy_amount = 0
@defeated_enemies = 0
@amount_miss = 0
@amount_battles = 0
@ally_kills = 0
end
def reset_data
@trophy_id = []
@trophy_names = []
@new_trophy = []
@trophy_perc = 0
@trophy_amount = 0
#@defeated_enemies = 0 # If you want them to reset too, delete '#'
@amount_miss = 0
#@amount_battles = 0 # If you want them to reset too, delete '#'
@ally_kills = 0
end
# Ver. 2: This is the new way of adding trophies;
# fast and efficient! + Easy to track the errors if any
def add_trophy(id)
if !id.is_a?(Numeric)
return
end
if @trophy_id.include?(id) or @trophy_id[id] == true or @new_trophy[id] == false
return
else
if id == 3 # Making damage 100, 1000 also be true when 10.000 is achieved
@trophy_id[1] = true
@trophy_id[2] = true
@trophy_id[3] = true
elsif id == 32 # Same as damage, only heal version
@trophy_id[31] = true
@trophy_id[32] = true
@trophy_id[33] = true
else
@trophy_id[id] = true
end
trophy_name
@new_trophy[id] = @trophy_names[id]
end
end
# Checks the damage for trophy
# Note: Healing damage is always negative. (Example: -2039 would heal 2039)
# Note: If you specify enemy, you can check enemy stats to compare with the damage/healing/etc
def check_trophy_damage(damage, actor, exact = false, enemy = nil)
if actor.is_a?(Game_Actor)
if damage.is_a?(Numeric)
## "Damage 10000 or more, 1000~10000, 100~1000, 100~ and 0 respectivly
if damage >= 10000
add_trophy(3)
elsif damage >= 1000 and damage <= 9999
add_trophy(2)
elsif damage >= 100 and damage <= 999
add_trophy(1)
elsif damage == 0
add_trophy(0)
## Stuff for damage according to enemy stats.
elsif enemy != nil
## "Deal a damage of enemy HP*2 or greater
if damage >= (enemy.maxhp * 2) and damage < (enemy.maxhp * 4)
add_trophy(35)
## "Deal a damage of enemy HP*4 or greater
elsif damage >= (enemy.maxhp * 4)
add_trophy(36)
end
## "Heal 100~1000 HP, 1000~10.000 HP, 10.000> HP and exact respectivly
elsif damage <= -100 and damage > -1000
add_trophy(30)
elsif damage <= -1000 and damage > -10000
add_trophy(31)
elsif damage <= -10000
add_trophy(32)
elsif damage == actor.maxhp
add_trophy(33)
## "Heal half Hp
elsif damage == (actor.maxhp / 2)
add_trophy(34)
## "Damage 777, 7777, 77.777 respectivly
elsif damage == 777
add_trophy(37)
elsif damage == 7777
add_trophy(38)
elsif damage == 77777
add_trophy(39)
end
elsif damage.is_a?(String)
## Miss 10, 100, 1000, 10.000 times respectivly
if damage == "Miss"
if @miss_count == nil
@miss_count = 1
elsif @miss_count != nil
@miss_count += 1
elsif @miss_count > 9
add_trophy(18)
elsif @miss_count > 99
add_trophy(19)
elsif @miss_count > 999
add_trophy(20)
end
end
end
if exact == true
add_trophy(25)
end
end
end
# Checks result conditions
def check_trophy_results
## "Win alone! ##
if $game_party.actors.size == 1
add_trophy(4)
end
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
## "Win with at least one member full HP & SP respectivly
if actor.hp == actor.maxhp
add_trophy(13)
end
if actor.sp == actor.maxsp
add_trophy(14)
end
## "Reach level 10, 50 and 99(100) respectivly
if actor.level >= 10 and actor.level < 50
add_trophy(15)
end
if actor.level >= 50 and actor.level < 99#100
add_trophy(16)
end
if actor.level == 99#100
add_trophy(17)
end
## "Reach HP of 1000~9999 & 9999 respectivly
if actor.maxhp > 999 and actor.maxhp < 9999
add_trophy(26)
end
if actor.maxhp == 9999
add_trophy(27)
end
## "Reach SP of 1000~9999 & 9999 respectivly
if actor.maxsp > 999 and actor.maxsp < 9999
add_trophy(28)
end
if actor.maxsp == 9999
add_trophy(29)
end
end
## "Last battle for 50 turns and 100 turns respectivly
if $game_temp.battle_turn >= 50
add_trophy(5)
end
if $game_temp.battle_turn >= 100
add_trophy(6)
end
end
# Checks the amount of KO's (Deaths, Kills, Downs or whatever)
def check_trophy_kills
## "Defeat 0~10, 10~100, 100~1000 and 1000+ enemies respectivly
if @defeated_enemies > 0 and @defeated_enemies < 10
add_trophy(21)
end
if @defeated_enemies > 9 and @defeated_enemies < 100
add_trophy(22)
end
if @defeated_enemies > 99 and @defeated_enemies < 1000
add_trophy(23)
end
if @defeated_enemies > 999
add_trophy(24)
end
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.hp == 0
if @ally_kills == nil
@ally_kills = 0
else
@ally_kills += 1
end
## "Partymembers got killed 10 or more timesa dn 100 or more times respectivly
if @ally_kills > 9
add_trophy(7)
end
if @ally_kills > 99
add_trophy(8)
end
end
end
end
# Check amount of battles
def check_trophy_battles
## "Fought over 10, 100, 1000, 10.000 times respectivly
if @amount_battles >= 10 and @amount_battles < 100
add_trophy(9)
end
if @amount_battles >= 100 and @amount_battles < 1000
add_trophy(10)
end
if @amount_battles >= 1000 and @amount_battles < 10000
add_trophy(11)
end
if @amount_battles >= 10000
add_trophy(12)
end
end
# This is where you set up your trophy name
# You can also merge 'em in the core itself (like def check_trophy_battles)
def trophy_name
if @trophy_id[0] == true
@trophy_names[0] = "Do a damage of 0!"
end
if @trophy_id[1] == true
@trophy_names[1] = "Do over 100 damage!"
end
if @trophy_id[2] == true
@trophy_names[2] = "Do over 1000 damage!"
end
if @trophy_id[3] == true
@trophy_names[3] = "Do over 10.000 damage!"
end
if @trophy_id[4] == true
@trophy_names[4] = "Win alone!"
end
if @trophy_id[5] == true
@trophy_names[5] = "Battle lasted for 50 turns!"
end
if @trophy_id[6] == true
@trophy_names[6] = "Battle lasted for 100 turns!"
end
if @trophy_id[7] == true
@trophy_names[7] = "Members got killed 10+ times!"
end
if @trophy_id[8] == true
@trophy_names[8] = "Members got killed 100+ times!"
end
if @trophy_id[9] == true
@trophy_names[9] = "Fought over 10 times!"
end
if @trophy_id[10] == true
@trophy_names[10] = "Fought over 100 times!"
end
if @trophy_id[11] == true
@trophy_names[11] = "Fought over 1000 times"
end
if @trophy_id[12] == true
@trophy_names[12] = "Fought over 10000 times!"
end
if @trophy_id[13] == true
@trophy_names[13] = "Win w/one member full HP!"
end
if @trophy_id[14] == true
@trophy_names[14] = "Win w/one member full SP!"
end
if @trophy_id[15] == true
@trophy_names[15] = "Reach level 10!"
end
if @trophy_id[16] == true
@trophy_names[16] = "Reach level 50!"
end
if @trophy_id[17] == true
@trophy_names[17] = "Reach level 99!"
end
if @trophy_id[18] == true
@trophy_names[18] = "Miss 10 times!"
end
if @trophy_id[19] == true
@trophy_names[19] = "Miss 100 times!"
end
if @trophy_id[20] == true
@trophy_names[20] = "Miss 1000 times!"
end
if @trophy_id[21] == true
@trophy_names[21] = "Defeat at least 1 enemy!"
end
if @trophy_id[22] == true
@trophy_names[22] = "Defeat at least 10 enemies!"
end
if @trophy_id[23] == true
@trophy_names[23] = "Defeat at least 100 enemies!"
end
if @trophy_id[24] == true
@trophy_names[24] = "Defeat at least 1000 enemies!"
end
if @trophy_id[25] == true
@trophy_names[25] = "Do exact damage!"
end
if @trophy_id[26] == true
@trophy_names[26] = "Reach an HP of 1000!"
end
if @trophy_id[27] == true
@trophy_names[27] = "Reach an HP of 9999!"
end
if @trophy_id[28] == true
@trophy_names[28] = "Reach an SP of 1000!"
end
if @trophy_id[29] == true
@trophy_names[29] = "Reach an SP of 9999!"
end
if @trophy_id[30] == true
@trophy_names[30] = "Heal at least 100 HP"
end
if @trophy_id[31] == true
@trophy_names[31] = "Heal at least 1000 HP"
end
if @trophy_id[32] == true
@trophy_names[32] = "Heal at least 10000 HP"
end
if @trophy_id[33] == true
@trophy_names[33] = "Heal exact HP"
end
if @trophy_id[34] == true
@trophy_names[34] = "Heal half Max.HP"
end
if @trophy_id[35] == true
@trophy_names[35] = "Overkill enemy HPx2"
end
if @trophy_id[36] == true
@trophy_names[36] = "Overkill enemy HPx4"
end
if @trophy_id[37] == true
@trophy_names[37] = "777 Damage!"
end
if @trophy_id[38] == true
@trophy_names[38] = "7777 Damage!"
end
if @trophy_id[39] == true
@trophy_names[39] = "77777 Damage!"
end
end
# To show names, default is just put in global array
def get_data(print = false) # Printing was for the debugging
trophy_name
@perc = 0
for id in 0...@trophy_id.size
if @trophy_id[id] == true
@perc += 1
end
if print == true
if @trophy_names[id] == nil
p "Not Met: ID #{id}: ???"
else
p "Met: ID #{id}: #{@trophy_names[id]}"
end
end
end
if @perc != 0
@trophy_amount = @perc
@trophy_perc = (100.0 / @trophy_id.size) * @perc
else
@trophy_amount = 0
@trophy_perc = 0
end
end
end
#===========================================================
# * Now the Game_Battler needs some modifications.
# * This is needed for being able to check the conditions after an action.
#===========================================================
class Game_Battler
alias bt_skill_effect skill_effect
alias bt_attack_effect attack_effect
def attack_effect(attacker)
bool = bt_attack_effect(attacker)
hit_result = (rand(100) < attacker.hit)
if hit_result == true
if self.is_a?(Game_Enemy)
$bt.check_trophy_damage(self.damage, attacker, false, self)
if self.hp == 0
if $defeated_enemies == nil
$defeated_enemies = 0
else
$defeated_enemies += 1
end
elsif self.damage == self.hp
$bt.check_trophy_damage(self.damage, attacker, true, nil)
end
elsif self.is_a?(Game_Actor)
$bt.check_trophy_damage(self.damage, attacker, true, nil)
end
end
return bool
end
def skill_effect(user, skill)
effective = bt_skill_effect(user, skill)
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
if hit_result == true
if self.is_a?(Game_Enemy)
$bt.check_trophy_damage(self.damage, user, false, self)
if self.hp == 0
if $defeated_enemies == nil
$defeated_enemies = 0
else
$defeated_enemies += 1
end
elsif self.damage == self.hp
$bt.check_trophy_damage(self.damage, user, true, nil)
end
else
$bt.check_trophy_damage(self.damage, user, false, nil)
end
end
return effective
end
end
#===========================================================
# * Now the Scene_Title also needs some modifications.
# * This is when a new game is started, the $bt.* must be defined.
#===========================================================
class Scene_Title
alias bt_title_command_new_game command_new_game
alias bt_battle_test battle_test
def command_new_game
bt_title_command_new_game
$bt = Battle_Trophies.new
end
def battle_test
$bt = Battle_Trophies.new
bt_battle_test
end
end
#===========================================================
# * Now the Scene_Save also needs some modifications.
#===========================================================
class Scene_Save
alias bt_save_data write_save_data
def write_save_data(file)
bt_save_data
Marshal.dump($bt, file)
end
end
#===========================================================
# * Now the Scene_Load also needs some modifications.
# * Because when loading, the trophies must be loaded too.
# * See Battle Trophies Add-On (SID04) to load it from a seperate file
#===========================================================
class Scene_Load
alias bt_load_data read_save_data
def read_save_data(file)
bt_load_data
$bt = Marshal.load(file)
if $game_system.magic_number != $data_system.magic_number
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
$game_party.refresh
end
end
#===========================================================
# * Final step: Battle scene for checking battle result for available trophies.
#===========================================================
class Scene_Battle
alias bt_scene_battle_main main
alias bt_scene_battle_update update
alias bt_scene_battle_start_phase5 start_phase5
alias bt_scene_battle_battle_end battle_end
alias bt_scene_battle_update_phase4_step5 update_phase4_step5
def main
if $bt.amount_battles == nil or $bt.amount_battles == 0
$bt.amount_battles = 1
else
$bt.amount_battles += 1
end
bt_scene_battle_main
if @pop_up != nil
@pop_up.dispose
@pop_up = nil
end
end
def update
if @pop_up != nil
@pop_up.update
end
bt_scene_battle_update
end
def start_phase5
$bt.check_trophy_results
$bt.check_trophy_kills
$bt.check_trophy_battles
$bt.get_data
bt_scene_battle_start_phase5
end
def update_phase4_step5 # This one is new (Ver. 2)
bt_scene_battle_update_phase4_step5
$bt.get_data
if @pop_up != nil
@pop_up.dispose
@pop_up = nil
end
if SC::BT_POPUP_MODE == 0 or SC::BT_POPUP_MODE == 2
@pop_up = Window_Popup.new
elsif SC::BT_POPUP_MODE == 1
for id in 0...$new_trophy.size
if $bt.new_trophy[id] != nil
@ok = true
end
end
if @ok == true
Audio.se_play(SC::BT_POPUP_SOUND, 100, 100)
end
else
# ... nothing happens, making the script move on --->
end
@phase4_step = 1
end
def battle_end(result)
$bt.trophy_name
result = bt_scene_battle_battle_end(result)
end
end
#===========================================================
# <> Optional: Custom window showing achieved trophies
#===========================================================
#===========================================================
# * Window_BattleTrophies
#===========================================================
class Window_BattleTrophies < Window_Selectable
def initialize
super(0, 64, 640, 416)
@column_max = 2
$bt.get_data
refresh
self.index = 0
end
def item
return @trophy_id[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@item_max = $bt.trophy_id.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
if $bt.trophy_names[index] != nil
self.contents.font.color = normal_color
self.contents.draw_text(x, y, self.width - 40, 32, "#{index + 1}:")
self.contents.draw_text(x + 30, y, self.width - 40, 32, "#{$bt.trophy_names[index]}", 0)
else
self.contents.font.color = Color.new(255,255,255,80)
self.contents.draw_text(x, y, self.width - 40, 32, "#{index + 1}:", 0)
self.contents.draw_text(x + 30, y, self.width - 40, 32, "????", 0)
end
end
end
#===========================================================
# * Window_Popup: Pop up window that tells if one is achieved!
#===========================================================
class Window_Popup < Window_Base
def initialize
super(4,4, 320, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
self.visible = false
self.opacity = 160
self.visible = true
for id in 0...$bt.new_trophy.size
if $bt.new_trophy[id] != nil and $bt.new_trophy[id] != false
@ok = true
refresh
end
end
if @ok == true
@wait = 40 # amount of frams that window will be visible
else
@wait = -1
self.visible = false
end
end
# Update to auto hide the window
def update
super
if @wait == 0
self.visible = false
@wait = -1
else
@wait -= 1
end
end
# Refreshing to show the contents
def refresh
self.contents.clear
self.contents.font.color = normal_color
for id in 0...$bt.new_trophy.size
if $bt.new_trophy[id] != nil and $bt.new_trophy[id] != false
if SC::BT_POPUP_MODE == 2 or SC::BT_POPUP_MODE == 1
Audio.se_play(SC::BT_POPUP_SOUND, 100, 100)
end
self.contents.draw_text(4, 0, self.width - 40, 32, $bt.new_trophy[id])
$bt.new_trophy[id] = false
end
end
end
end
#===========================================================
# <> Optional: Scene with the custom window in use.
#===========================================================
class Scene_BT
def main
@trophy_window = Window_BattleTrophies.new
@trophy_window.active = true
@help_window = Window_Help.new
p = $bt.trophy_perc.to_s
@perc = "%1.2f" % p.to_f
@help_window.set_text("You have #{$bt.trophy_amount} trophies of #{$bt.trophy_id.size}. Percentage achieved: #{@perc}%")
@discard_window = Window_Command.new(190, ["Remove trophy","Remove all","Cancel"])
@discard_window.x = 320 - @discard_window.width / 2
@discard_window.y = 240 - @discard_window.height / 2
@discard_window.active = false
@discard_window.visible = false
@discard_window.z = 9999
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@trophy_window.dispose
@help_window.dispose
@discard_window.dispose
end
def update
@trophy_window.update
@help_window.update
if @discard_window.active == true
update_discard
return
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new # Change to your previous screen
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
@discard_window.visible = true
@discard_window.active = true
@trophy_window.active = false
end
if $bt.trophy_names[@trophy_window.index] != nil
@discard_window.refresh
elsif $bt.trophy_names.nitems == 0 or $bt.trophy_id.nitems == 0
@discard_window.disable_item(0)
@discard_window.disable_item(1)
else
@discard_window.disable_item(0)
end
end
def update_discard
@discard_window.update
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@discard_window.visible = false
@discard_window.active = false
@trophy_window.active = true
end
if Input.trigger?(Input::C)
case @discard_window.index
when 0
if $bt.trophy_names[@trophy_window.index] == nil
$game_system.se_play($data_system.buzzer_se)
return
else
$game_system.se_play($data_system.decision_se)
$bt.trophy_names[@trophy_window.index] = nil
$bt.trophy_id[@trophy_window.index] = nil
$bt.get_data
@discard_window.visible = false
@discard_window.active = false
@trophy_window.active = true
@trophy_window.refresh
p = $bt.trophy_perc.to_s
@perc = "%1.2f" % p.to_f
@help_window.set_text("You have #{$bt.trophy_amount} trophies of #{$bt.trophy_id.size}. Percentage achieved: #{@perc}%")
end
when 1
if $bt.trophy_names.nitems == 0 or $bt.trophy_id.nitems == 0
$game_system.se_play($data_system.buzzer_se)
return
else
$game_system.se_play($data_system.decision_se)
$bt.trophy_id.fill(nil)
$bt.trophy_names.fill(nil)
$bt.get_data
@trophy_window.refresh
@trophy_window.active = true
@discard_window.visible = false
@discard_window.active = false
p = $bt.trophy_perc.to_s
@perc = "%1.2f" % p.to_f
@help_window.set_text("You have #{$bt.trophy_amount} trophies of #{$bt.trophy_id.size}. Percentage achieved: #{@perc}%")
@discard_window.disable_item(0)
@discard_window.disable_item(1)
end
when 2
$game_system.se_play($data_system.cancel_se)
@trophy_window.active = true
@discard_window.visible = false
@discard_window.active = false
end
end
end
end
# FINAL UPDATE: 19:14, 1st of July 2005
Script addon (I am not sure if the other script really needs it, but if you dont put it in, you get errors)
Code:
#=============================================================
# <> Battle Trophies Saving similar to Star Ocean 3: Till the End of Time
# ==> You can delete all the comments except the copyright and creator info. Thanks.
# ==> Do not rip, repost or any other way of reproducing without proper credit. Thanks.
# ShadowClan Technologies © 2003-2005 - All rights reserved. Asylum rules :-)
#--------------------------------------------------------------------------------------------------------------------------
# call with: $scene = Scene_BTLoad.new
#
# * What this does
# Somebody asked me (I forgot your name sorry!), if it was possible to save
# the data into a different file. I had to say 'no' but as I thought more about it,
# I wanted to make that happen anyway. So here it is:
# Battle Trophies Expansion Pack: Save in different file
# A saved file would look like this by default: BT_File[ID].sav
# Replace the ID with the slot number.
#
# * Why you want to save it into a different file
# Why? I don't know and I don't care, yes, I know this can be useless, don't bug me.
# But some of you would use this in combination of the Battle script made by CrushD (Frederick Cuenco),
# and the AI integrator menu for AI control also by CrushD (Frederick Cuenco),
# my Battle Trophies and this seperate file saver.
# That would make you a new Star Ocean game when added up all together, won't it?
# Gee, isn't that great for you SO lovers??
#
# * How this basicly works
# You call up, just like the ordinairy save menu, the BT Menu, so: $scene = Scene_BTLoad.new
# Don't get confused by the name, it can also save the file.
# Then, you can immediatly see if there already is an saved file or not.
# When so, press ok button to save it, press Z button to load it
# You can also silent save. It will save to the file you last saved to.
# This can be very useful for after battle saves.
#
# * What is fixed in Ver. 2.1 ?
# - Intergration with the updated Battle Trophies Script Ver. 2.1 SID:04
# - Fixed a nasty bug preventing to load the data (Save worked properly though)
# - Changed some explain to be more ... uh ... 'obvious' :-P
#
# That would end the little explaining for now. I -really- hope you like this script.
#--------------------------------------------------------------------------------------------------------------------------
# * Suggestions? ==> Post/PM or email me: invincible_p0wer_@hotmail.com
# * Created by: GoldenShadow
# * Credits: dragonslayer for the delay definition
#=============================================================
module SC # dont remove
if SC::RXSC_BTS_ == nil
raise ScriptError.new("Unable to locate the Battle Trophies Script (SID:02)")
exit
else
RXSC_BTLS = "Battle Trophies Load/Save Script: v2.1dca (SID04)"
SAVE_FILE = "BT_File" # change as pleased, 'cause this will be the save file
EXTENSION = ".sav" # this would be the extension.
# why seperate variables you ask? cuz the index would be difficult to script in
end
end
class Window_BTFile < Window_Selectable
#--------------------------------------------------------------------------
# ◠オブジェクトåˆæœŸåŒ–
#--------------------------------------------------------------------------
def initialize
super(0, 64, 640, 416)
@column_max = 1
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ◠リフレッシュ
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@item_max = 6 # slot numbers
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype
self.contents.font.size = 24
for id in 0...@item_max.size
draw_item(id)
end
end
#--------------------------------------------------------------------------
# â— é …ç›®ã®æç”»
# index : é …ç›®ç•ªå·
#--------------------------------------------------------------------------
def draw_item(index)
x = 4
y = index * 132
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
@filename = "#{SC::SAVE_FILE}#{index + 1}#{SC::EXTENSION}"
self.contents.font.color = normal_color
if File.exists?(@filename)
file = File.open(@filename, "r")
@bt = Marshal.load(file)
self.contents.font.size = 24
self.contents.draw_text(x, y, self.width - 40, 32, "Saved Battle Trophies Data #{index + 1}")
self.contents.font.size = 16
self.contents.draw_text(x + 16, y + 27, self.width - 40, 32, "The Battle Trophies data when last saved:")
self.contents.draw_text(x + 16, y + 47, self.width - 40, 32, "Amount of trophies")
self.contents.draw_text(x + 148, y + 47, self.width - 40, 32, "#{@bt.trophy_amount}")
self.contents.draw_text(x + 16, y + 67, self.width - 40, 32, "Percentage achieved")
p = @bt.trophy_perc.to_i
@perc = "%1.2f" % p.to_f
self.contents.draw_text(x + 148, y + 67, self.width - 40, 32, "#{@perc}%")
self.contents.draw_text(x + 16, y + 87, self.width - 40, 32, "Do you want to load this file? (Press 'Z' to load this)")
file.close
else
self.contents.font.size = 24
self.contents.draw_text(x, y, self.width - 40, 32, "No saved Battle Trophies file")
self.contents.font.size = 16
self.contents.draw_text(x + 16, y + 27, self.width - 40, 32, "Press 'C' to save your Battle Trophies Data file.")
self.contents.draw_text(x + 16, y + 47, self.width - 40, 32, "The data will be saved to '#{SC::SAVE_FILE}[ID]#{SC::EXTENSION}'. Don't modify it or data will be lost.")
end
end
def update_cursor_rect
self.cursor_rect.set(0, self.index * 132, self.width - 32, 32)
end
end
class Scene_BTLoad
def main
@help_window = Window_Help.new
@help_window.set_text("Select a slot and press 'C' to save to it or 'Z' to load it")
@file_window = Window_BTFile.new
$bt.get_data
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@help_window.dispose
@file_window.dispose
end
def update
@help_window.update
@file_window.update
if Input.trigger?(Input::C) # save
save_file
delay(40)
@file_window.refresh
@help_window.set_text("Save complete.")
delay(20)
@help_window.set_text("Select a slot and press 'C' to save to it or 'Z' to load it")
return
end
if Input.trigger?(Input::A) # load
load_file
return
end
if Input.trigger?(Input::B)
$scene = Scene_Map.new # prev scene
return
end
end
def load_file # Load file ...
@filename = "#{SC::SAVE_FILE}#{@file_window.index + 1}#{SC::EXTENSION}"
if File.exists?(@filename)
@help_window.set_text("Loading Battle Trophies File... please wait...")
file = File.open(@filename, "rb")
$bt = Marshal.load(file)
file.close
$bt.get_data
delay(40)
@file_window.refresh
@help_window.set_text("Load complete.")
delay(20)
@help_window.set_text("Select a slot and press 'C' to save to it or 'Z' to load it")
else
@file_window.refresh
@help_window.set_text("That slot is empty or the file doesn't exist")
delay(20)
@help_window.set_text("Select a slot and press 'C' to save to it or 'Z' to load it")
end
end
def save_file # Save file ...
@filename = "#{SC::SAVE_FILE}#{@file_window.index + 1}#{SC::EXTENSION}"
$save_file_index= @file_window.index + 1
if File.exists?(@filename)
@help_window.set_text("Overwriting Battle Trophies File... please wait...")
else
@help_window.set_text("Saving Battle Trophies File... please wait...")
end
file = File.open(@filename, "wb")
Marshal.dump($bt, file)
file.close
end
#Thnx to dragonslayer for this
def delay(wait)
count = Graphics.frame_count
while wait + count >= Graphics.frame_count
Graphics.update
end
end
end
# special thingy to save data outside the save class, like using after battle
# so use: $btsave.save_data
# and it will automaticly save the current battle trophy data!
# You can also load it (Like making your own load scene or so...).
class BT_Save
def save_data
if $save_file_index == nil
$save_file_index = 1
end
@filename = "#{SC::SAVE_FILE}#{$save_file_index}#{SC::EXTENSION}"
file = File.open(@filename, "wb")
Marshal.dump($bt, file)
file.close
end
def load_data # Ver. 2.1: Loads data too
if $save_file_index == nil
$save_file_index = 1
end
@filename = "#{SC::SAVE_FILE}#{$save_file_index}#{SC::EXTENSION}"
file = File.open(@filename, "rb")
$bt = Marshal.load(file)
file.close
end
end
#title thingy
class Scene_Title
alias btss_title_command_new_game command_new_game
def command_new_game
btss_title_command_new_game
if $bt == nil
$bt = Battle_Trophies.new
end
$btsave = BT_Save.new
end
end
# FINAL UPDATE: July 2nd 2005, 21:51 GMT