Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ZTBS Damage preview
#1
ZTBS Damage preview
Version: 1.0
Author: Rotimikid Shockwave
Aug 26 2007

This is a locked, single-post thread from Creation Asylum. Archived here to prevent its loss.
No support is given.


It has come to my attention that scripts done in the script request are supposed to be posted in their correct section in the script archive. this is a small add - on to the ZTBS that allows you to see how much damage you would do before you actually attack the enemy, kind of like final fantasy Tactics Advance.

Features:
-Shows damage before you choose to attack
-Shows damage for skills and items too

Code:
=begin
================================================================================



== ztbs addon v1.0 adds damage check. ==
== by rotimikid ==
================================================================================



== intstrucions paste under Actors Actions == ==
== ==
================================================================================



=end

#-------------------------------------------------------------------------------
# class Window_Help3- used for displaying the expected damage.
#-------------------------------------------------------------------------------
class Window_Help3 < Window_Base
def initialize
super(350, 300, 250, 180)
self.opacity = 0
self.contents = Bitmap.new(width - 32, height - 32)
end

def damage_display(texto, attacken)
if self.contents != nil
self.contents.clear
end
self.contents.draw_text(45, 30, 150, 32, 'Damage')
self.contents.draw_text(115, 30, 150, 32, texto)
self.contents.draw_text(45, 75, 150, 32, 'Hit %')
draw_actor_parameter(attacken, 105, 75, 4)
self.visible = true
end

def dispose
if self.contents != nil
self.contents.dispose
end
super
end
end

#-------------------------------------------------------------------------------
# class Window_Help2- draws the original window for faces and stats plus it
# creates and calls upon class Window_Help3
#-------------------------------------------------------------------------------
class Window_Help2 < Window_Base
alias rtmkd_old_initialize initialize
def initialize
rtmkd_old_initialize
@Damage_Graphic = Sprite.new
@Damage_Graphic.x = 310
@Damage_Graphic.z = self.z + 1
@help_window2 = Window_Help3.new
end
def set_actor(actor, attacker = nil, fear = false, f_kind = 0, id = nil)
if actor != @actor
self.contents.clear
draw_actor_name(actor, 120, -1)
draw_actor_state(actor, 180, -1)
draw_actor_hp(actor, 120, 55)
draw_actor_sp(actor, 120, 69)
draw_actor_level(actor, 121, 41)
draw_actor_class(actor, 120, 25)
draw_actor_parameter(actor, 120, 83, 0)
draw_actor_parameter(actor, 200, 83, 1)
draw_actor_parameter(actor, 120, 97, 2)
draw_actor_parameter(actor, 200, 97, 6)
draw_actor_parameter(actor, 120, 111, 4)
draw_actor_parameter(actor, 200, 111, 5)
@HUD_graphic.bitmap = RPG::Cache.picture('Battle Help')
@HUD_graphic.y = 480 - @HUD_graphic.bitmap.height
@HUD_graphic.visible = true
@face_graphic.bitmap = RPG::Cache.picture(actor.name)
@face_graphic.y = 480 - @face_graphic.bitmap.height
@face_graphic.visible = true
@Damage_Graphic.bitmap = RPG::Cache.picture('Battle Help2')
@Damage_Graphic.y= 320
@Damage_Graphic.visible = false
if fear == true
@attacker = attacker
target = actor
case f_kind
when 0
target.attack_effect2(@attacker)
when 1
target.skill_effect2(@attacker, id)
when 2
target.item_effect2(id)
end
texty = target.damage.to_s
hitter = @attacker.hit.to_s
@Damage_Graphic.visible = true
@help_window2.damage_display(texty, attacker)
end
@actor = actor
@text = nil
self.visible = true
end
end
def set_enemy(enemy, scary = false)
@face_graphic.visible = false
@HUD_graphic.visible = false
@help_window2.visible = false
@Damage_Graphic.visible = false
text = enemy.name
state_text = make_battler_state_text(enemy, 12, false)
if state_text != ""
text += " " + state_text
end
set_text(text, 1)
end

def visible=(bool)
@face_graphic.visible = bool
@HUD_graphic.visible = bool
if bool == false
@help_window2.visible = bool
@Damage_Graphic.visible = bool
end
super(bool)
end

def dispose
# Dispose if window contents bit map is set
if self.contents != nil
self.contents.dispose
end
@face_graphic.dispose
@HUD_graphic.dispose
@Damage_Graphic.dispose
@help_window2.dispose
super
end
alias ztbs_set_enemy set_enemy
def set_enemy(enemy, scary = false, attacker_ed = nil, f_set = 0, id_om = nil)
if $game_system.in_tactics and ZTBS::ENEMY_HPSP
set_actor(enemy, attacker = attacker_ed, fear = scary, f_kind = f_set,
id = id_om)
else
# 呼び戻す
ztbs_set_enemy(enemy)
end
end
end

#-------------------------------------------------------------------------------
# class Game_Battler- used to create fake damage testers. they do not actually
# take damage from you, but only calculates what it should
# actually be.
#-------------------------------------------------------------------------------
class Game_Battler
def attack_effect2(user)
# Calculate basic damage
self.critical = false
hit_result = true
if hit_result == true
self.damage = [(user.atk - self.pdef / 2) * (20 + user.str) / 20, 0].max
# Element correction
self.damage *= elements_correct(user.element_set)
self.damage /= 100
end
if hit_result == true
else
# Set damage to "Miss"
self.damage = "Miss"
# Clear critical flag
self.critical = false
end
# End Method
return true
end
def skill_effect2(user, skill)
# Clear critical flag
self.critical = false
# Clear effective flag
effective = false
# Set effective flag if skill is uncertain
effective |= hit < 100
# If hit occurs
hit_result = true
if hit_result == true
# Calculate power
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# Calculate rate
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# Calculate basic damage
self.damage = power * rate / 20
# Element correction
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
end
end
def item_effect2(item)
# Determine hit
hit_result = true
# If hit occurs
if hit_result == true
# Calculate amount of recovery
recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
if recover_hp < 0
recover_hp += self.pdef * item.pdef_f / 20
recover_hp += self.mdef * item.mdef_f / 20
recover_hp = [recover_hp, 0].min
end
# Element correction
recover_hp *= elements_correct(item.element_set)
recover_hp /= 100
recover_sp *= elements_correct(item.element_set)
recover_sp /= 100
# Set damage value and reverse HP recovery amount
self.damage = -recover_hp
# If HP recovery rate and recovery amount are 0
if item.recover_hp_rate == 0 and item.recover_hp == 0
# Set damage to empty string
self.damage = ""
end
# If miss occurs
else
# Set damage to "Miss"
self.damage = ""
end
end
end

#-------------------------------------------------------------------------------
# class Scene_Map- extra arguements were added to set_actor and set_enemy
# also, the battle has different choices for the arguements
# based on whether you are using attack, skill, or item
#-------------------------------------------------------------------------------
class Scene_Map
def set_battler_info(fierce = false, f_type = 0, id_su = nil)
if @battler != nil
# ヘルプウィンドウにアクター or エネミーをセット
if $game_system.tactics_actors.keys.include?(@battler.id)
@help_window.set_actor($game_system.tactics_actors[@battler.id],
attacker = $game_system.tactics_actors[@active_battler.id],
fear = fierce, f_kind = f_type, id = id_su)
elsif $game_system.tactics_enemies.keys.include?(@battler.id)
@help_window.set_enemy($game_system.tactics_enemies[@battler.id],
scary = fierce,
attacker_ed = $game_system.tactics_actors[@active_battler.id],
f_set = f_type, id_om = id_su)
else
@help_window.visible = false
return
end
# ヘルプウィンドウを可視化
@help_window.visible = true
else
@help_window.visible = false
end
end
def update_phase1_step6
# カーソル位置のバトラー(イベント)取得
get_cursor_battler
# ヘルプウィンドウにアクター or エネミーをセット
case @attacker.current_action.kind
when 0
set_battler_info(fierce = true)
when 1
set_battler_info(fierce = true, f_type = 1, id_su = @skill)
when 2
set_battler_info(fierce = true, f_type = 2, id_su = @item)
end
# C ボタンが押された場合
if Input.trigger?(Input::C) and !$game_player.moving?
# 発動可能な場合
if possible_action?
@back_step2 = nil
# 決定 SE を演奏
@help_window.visible = false
$game_system.se_play($data_system.decision_se)
# カーソルを固定
$game_player.not_update = true
# エリアを解放
dispose_area
# ステップ 7 へ移行
$game_system.tactics_step = 7
@select = nil
if @revival == nil
# ターゲットを取得
@targets = {}
for i in @can_attack
if $game_system.tactics_actors.keys.include?(i)
@targets[i] = $game_system.tactics_actors[i]
$game_map.events[i].turn_toward_event(@active_battler.id)
else
@targets[i] = $game_system.tactics_enemies[i]
$game_map.events[i].turn_toward_event(@active_battler.id)
end
end
@active_battler.turn_toward_position($game_player.x, $game_player.y)
# 戦闘不能回復の場合
else
$game_map.events[@targets.keys[0]].moveto($game_player.x, $game_player.y)
@active_battler.turn_toward_position($game_player.x, $game_player.y)
$game_map.events[@targets.keys[0]].turn_toward_event(@active_battler.id)
end
@revival = nil
@can_attack = nil
# アクション結果作成
case @attacker.current_action.kind
when 0
make_basic_action_result
when 1
make_skill_action_result
when 2
make_item_action_result
end
else
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
end
# B ボタンが押された場合
end
if Input.trigger?(Input::B) and !$game_player.moving?
@targets = nil
@revival = nil
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# エリアを解放
dispose_area
# カーソル位置を戻す
back_cursor
# カーソルを固定
$game_player.not_update = true
if @back_step2 != nil and @back_step2
# ステップ 2 へ移行
$game_system.tactics_step = 2
if @select != nil
case @attacker.current_action.kind
when 1
# セレクトウィンドウを作成
make_select_window(1, @attacker, @skill)
@select = 2
when 2
# セレクトウィンドウを作成
make_select_window(2, nil, @item)
@select = 3
end
else
@back_step2 = nil
# コマンドウィンドウを作成
make_command_window(1)
end
else
# ステップ 5 へ移行
$game_system.tactics_step = 5
if @select != nil
case @attacker.current_action.kind
when 1
# セレクトウィンドウを作成
make_select_window(1, @attacker, @skill)
@select = 1
when 2
# セレクトウィンドウを作成
make_select_window(2, nil, @item)
@select = 2
end
else
# コマンドウィンドウを作成
make_command_window
end
end
end
end
end


Instructions:
-paste between actors action and enemies action
-edit in the script were it says attack_effect2, skill_effect2, and item_effect2 if you have changed your damage formula.

Save this picture in the picture folder of the game under the name Battle Help2
(dead imageshack link for picture)


Thats all.
}




Users browsing this thread: