Incapacitate States XP
Incapacitate States XPby
Gidan90
This script allows setup states that makes the character to be set as dead even if not actually dead, an example is a petrification state.
Features
- If all party members are hit by this state, it’s game over.
- If all enemies are hit by this state the battle ends, and you not receive any experience points, items or money.
v. 1.0.1
- You can choose if obtain or not exp and gil when all foes are incapacitated.
- You can choose if change or not battler color when incapacitated.
How to Use
Copy the script into the script editor below the default scripts but above Main. Follow the instructions and configuration guidance within the script itself.
Script
Spoiler: Script Ruby:
#-------------------------------------------------------------------------------
# Gidan90 - Incapacitate States XP
#-------------------------------------------------------------------------------
# Description:
# This script allows setup states that makes the character to be set as dead
# even if not actually dead, an example is a petrification state.
# Features:
# v. 1.0.0
# - If all party members are hit by this state, it’s game over.
# - If all enemies are hit by this state the battle ends, and
# you not receive any experience points, items or money.
# - Enemy or party members color tone changed when incapacitated
# status is applied.
# v. 1.0.1
# - Aliased Sprite_Battler method for more compatibilities.
# - You can choose if obtain or not exp and gil when all foes are incapacitated.
# - You can choose if change or not battler color when incapacitated.
#-------------------------------------------------------------------------------
# * This script was made with the default battle system in mind. Custom battle
# scripts will most likely not work with this script without edits.
# * Changes made to Game_Party, Game_Troop, Game_Battler, Scene_Battle
# and Sprite_Battler.
#-------------------------------------------------------------------------------
module Gidan
module IncapacitateStates
# ID from database of incapacitate states.
PETRIFY_STATE = 18# Petrify State.
#CUSTOM_STATE = 19# Rename it and add your custom state to line 90 and 268.
# Option (TRUE/FALSE)
OBT_EXP = false # Set true to obtain exp and gil when all foes are incapacitated.
INC_TONE = true # Set false if you don't want to change battler color tone when incapacitated.
end
end
class Game_Party
#--------------------------------------------------------------------------
# * Get Array of Living Members
#--------------------------------------------------------------------------
def alive_members
@actors.select{|member| member.alive?}
end
#--------------------------------------------------------------------------
# * Determine Everyone is Incapacitated
#--------------------------------------------------------------------------
def all_incapacitate?
# If an actor is in the party not incapacitate
for actor in self.alive_members
unless actor.incapacitate?
# End Method
return false
end
end
# All members incapacitate
return true
end
end
class Game_Troop
#--------------------------------------------------------------------------
# * Get Array of Living Members
#--------------------------------------------------------------------------
def alive_members
@enemies.select{|member| member.alive?}
end
#--------------------------------------------------------------------------
# * Determine Everyone is Incapacitated
#--------------------------------------------------------------------------
def all_incapacitate?
# If an enemy is in the party not incapacitate
for enemy in self.alive_members
unless enemy.incapacitate?
# End Method
return false
end
end
# All members incapacitate
return true
end
end
class Game_Battler
include Gidan::IncapacitateStates
#--------------------------------------------------------------------------
# * Get State ID of Incapacitate
#--------------------------------------------------------------------------
def incapacitate_state?
state?(PETRIFY_STATE) # or
#state?(CUSTOM_STATE) # Add here your custom states.
end
#--------------------------------------------------------------------------
# * Check Incapacitate State
#--------------------------------------------------------------------------
def incapacitate?
return (incapacitate_state?)
end
#--------------------------------------------------------------------------
# * Get State ID of K.O.
#--------------------------------------------------------------------------
def death_state?
state?(1)
end
#--------------------------------------------------------------------------
# * Determine Survival
#--------------------------------------------------------------------------
def alive?
return (not @hidden and !death_state?)
end
#--------------------------------------------------------------------------
# * Add State
# state_id : state ID
# force : forcefully added flag (used to deal with auto state)
#--------------------------------------------------------------------------
alias incapacitate_add_state add_state
def add_state(state_id, force = false)
# If incapacitate
if incapacitate? and !dead?
# End Method
return
end
incapacitate_add_state(state_id, force = false)
end
end
class Scene_Battle
include Gidan::IncapacitateStates
#--------------------------------------------------------------------------
# * Determine Battle Win/Loss Results
#--------------------------------------------------------------------------
def judge
# If all dead determinant is true, if all incapacitate determinant is true
# or number of members in party is 0
if $game_party.all_dead? or $game_party.all_incapacitate? or $game_party.actors.size == 0
# If possible to lose
if $game_temp.battle_can_lose
# Return to BGM before battle starts
$game_system.bgm_play($game_temp.map_bgm)
# Battle ends
battle_end(2)
# Return true
return true
end
# Set game over flag
$game_temp.gameover = true
# Return true
return true
end
# Return false if even all enemies are incapacitated
if $game_troop.all_incapacitate?
start_phase5
return true
end
# Return false if even 1 enemy exists
for enemy in $game_troop.enemies
if enemy.exist?
return false
end
end
# Start after battle phase (win)
start_phase5
# Return true
return true
end
#--------------------------------------------------------------------------
# * Start After Battle Phase
#--------------------------------------------------------------------------
def start_phase5
# Shift to phase 5
@phase = 5
# Play battle end ME
$game_system.me_play($game_system.battle_end_me)
# Return to BGM before battle started
$game_system.bgm_play($game_temp.map_bgm)
# Initialize EXP, amount of gold, and treasure
exp = 0
gold = 0
treasures = []
# Loop
for enemy in $game_troop.enemies
# If EXP_RECEIVE is true
if OBT_EXP
# If enemy is not hidden
unless enemy.hidden
# Add EXP and amount of gold obtained
exp += enemy.exp
gold += enemy.gold
# Determine if treasure appears
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items)
end
if enemy.weapon_id > 0
treasures.push($data_weapons)
end
if enemy.armor_id > 0
treasures.push($data_armors)
end
end
end
else
# If enemy is not hidden or incapacitate
unless enemy.hidden or enemy.incapacitate?
# Add EXP and amount of gold obtained
exp += enemy.exp
gold += enemy.gold
# Determine if treasure appears
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items)
end
if enemy.weapon_id > 0
treasures.push($data_weapons)
end
if enemy.armor_id > 0
treasures.push($data_armors)
end
end
end
end
end
# Treasure is limited to a maximum of 6 items
treasures = treasures
# Obtaining EXP
for i in 0...$game_party.actors.size
actor = $game_party.actors
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
# Obtaining gold
$game_party.gain_gold(gold)
# Obtaining treasure
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
# Make battle result window
@result_window = Window_BattleResult.new(exp, gold, treasures)
# Set wait count
@phase5_wait_count = 100
end
end
class Sprite_Battler < RPG::Sprite
include Gidan::IncapacitateStates
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias tone_change_update update
def update
tone_change_update
# If visible
if @battler_visible and INC_TONE
# Incapacitate state set color tone
if @battler.state?(PETRIFY_STATE) and @battler.damage == nil
self.tone.set(0, 0, 0, 255)
#elsif @battler.state?(CUSTOM_STATE) and @battler.damage == nil
#self.tone.set(0, 80, 255, 0) #self.tone.set(0, 0, 0, 255)
else
self.tone.set(0, 0, 0, 0) unless @battler.incapacitate?
end
end
end
end
Demo
DEMO
Credits and Thanks
- Kyonides for exp suggestion
License
You can use it for both commercial and non-commercial games!
本贴来自国际rpgmaker官方论坛作者:Gidan90处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/incapacitate-states-xp.144835/
页:
[1]