#===============================================================================
# Chrono Trigger SkilL Learning
# Author game_guy
# Version 1.0
#-------------------------------------------------------------------------------
# Intro:
# Remember the good old game Chrono Trigger? You already knew skills but you
# couldn't just use them yet. Each skill needed a certain amount of "AP" to
# use. You got AP from enemies. Well this script is pretty much the same.
#
# Features:
# Easily setup AP for Enemies
# Easily setup AP for Skills
# Display amount AP the skill needs
#
# Instructions:
# Go down and look at the config. Follow the instructions. They're pretty
# simple. If you can't understand it please do ask questions.
#
# Some noteworthy things. Any skill that's not configured will automatically
# be usable. Any enemy that's not configured, its ap will be set to 0.
#
# Credits:
# game_guy ~ for making it
# Chrono Trigger ~ for inspiring me to make this
#===============================================================================
module GameGuy
#====================================
# ApWord2 ~ Word used for displaying
# AP at the end of a battle.
#====================================
ApWord2 = "AP"
#====================================
# ShowAp ~ If true, it displays the
# skills current ap in the skill
# menu.
#====================================
ShowAp = true
def self.skillptz(id)
#==============================================================
# Config Skill Points
# This is how many points a skill needs to be usable.
# when skill_id then return points
# Example: when 1 then return 5
# So you need 5 "AP" points until Heal is officially learned.
#==============================================================
case id
when 57 then return 10
when 58 then return 2
when 59 then return 6
when 60 then return 8
end
return 0
end
def self.enemyptz(id)
#=============================================================
# Config Enemy Points
# This is how many points enemies are worth.
# when enemy_id then return points
# Example: when 1 then return 1
# So when ghost is killed you would get 1 ap point.
#=============================================================
case id
when 1 then return 1
end
return 0
end
end
class Game_System
attr_accessor :pointsa
alias gg_ct_skills_lat initialize
def initialize
@pointsa = []
return gg_ct_skills_lat
end
end
class Game_Actor
alias gg_init_parray_lat setup
def setup(actor_id)
$game_system.pointsa[actor_id] = []
return gg_init_parray_lat(actor_id)
end
def learn_skill(skill_id)
if skill_id > 0 and not skill_learn?(skill_id)
@skills.push(skill_id)
@skills.sort!
$game_system.pointsa[id][skill_id] = 0
end
end
def forget_skill(skill_id)
@skills.delete(skill_id)
$game_system.pointsa[id][skill_id] = nil
end
def add_points(skill, n)
unless @skills.include?(skill)
return
end
if $game_system.pointsa[id][skill] == nil
$game_system.pointsa[id][skill] = 0
end
$game_system.pointsa[id][skill] += n
if $game_system.pointsa[id][skill] > GameGuy.skillptz(skill)
$game_system.pointsa[id][skill] = GameGuy.skillptz(skill)
end
end
alias gg_skill_can_use_ct_lat skill_can_use?
def skill_can_use?(skill_id)
skill = $game_system.pointsa[id][skill_id]
if skill >= GameGuy.skillptz(skill_id)
return super
else
return false
end
return gg_skill_can_use_ct_lat(skill_id)
end
end
class Scene_Battle
def start_phase5
ap = 0
for enemy in $game_troop.enemies
eid = enemy.id
ap += GameGuy.enemyptz(eid)
for i in $game_party.actors
arrayt = $game_system.pointsa[i.id]
for j in i.skills
$game_actors[i.id].add_points(j, GameGuy.enemyptz(eid))
end
end
end
@phase = 5
$game_system.me_play($game_system.battle_end_me)
$game_system.bgm_play($game_temp.map_bgm)
exp = 0
gold = 0
treasures = []
for enemy in $game_troop.enemies
unless enemy.hidden
exp += enemy.exp
gold += enemy.gold
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items[enemy.item_id])
end
if enemy.weapon_id > 0
treasures.push($data_weapons[enemy.weapon_id])
end
if enemy.armor_id > 0
treasures.push($data_armors[enemy.armor_id])
end
end
end
end
treasures = treasures[0..5]
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
@status_window.level_up(i)
end
end
end
$game_party.gain_gold(gold)
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
@result_window = Window_BattleResult.new(exp, gold, treasures, ap)
@phase5_wait_count = 100
end
end
class Window_BattleResult < Window_Base
def initialize(exp, gold, treasures, ap)
@exp = exp
@gold = gold
@treasures = treasures
@ap = ap
super(160, 0, 320, @treasures.size * 32 + 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.y = 160 - height / 2
self.back_opacity = 160
self.visible = false
refresh
end
def refresh
self.contents.clear
x = 4
self.contents.font.color = normal_color
cx = contents.text_size(@exp.to_s).width
self.contents.draw_text(x, 0, cx, 32, @exp.to_s)
x += cx + 4
self.contents.font.color = system_color
cx = contents.text_size("EXP").width
self.contents.draw_text(x, 0, 64, 32, "EXP")
x += cx + 16
self.contents.font.color = normal_color
cx = contents.text_size(@gold.to_s).width
self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
x += cx + 4
self.contents.font.color = system_color
self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
x += cx + 16
self.contents.font.color = normal_color
cx = contents.text_size(@ap.to_s).width
self.contents.draw_text(x, 0, cx, 32, @ap.to_s)
x += cx + 4
self.contents.font.color = system_color
self.contents.draw_text(x, 0, 128, 32, GameGuy::ApWord2)
y = 32
for item in @treasures
draw_item_name(item, 4, y)
y += 32
end
end
end
class Window_Skill < Window_Selectable
def initialize(actor)
super(0, 128, 640, 352)
@actor = actor
@column_max = 1
refresh
self.index = 0
if $game_temp.in_battle
self.y = 64
self.height = 256
self.back_opacity = 160
end
end
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 1 * (288 + 32)
y = index / 1 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
if GameGuy::ShowAp
skillp = $game_system.pointsa[@actor.id][skill.id]
skillp2 = GameGuy.skillptz(skill.id)
skillt = skillp.to_s + " / " + skillp2.to_s
self.contents.draw_text(x, y, 600, 32, skillt, 2)
end
end
end