Opis:
Takentai za trudny, a domyślny system walki się przejadł? W czasie rzeczywistym też walczyć nie chcecie? Oto idealne remedium na wasze kłopoty! To jest JEDEN skrypt Plug&Play - wrzucasz nad Main i nawet bez konfiguracji możesz go używać!
Heh, to brzmi jak reklama proszku do prania... Do rzeczy:
###############################################################################
## RSSBS - Reedo's Simple Side Battle System
## Version 1.0
## January 7, 2010
## By Reedo
###############################################################################
## SOURCE
##
## Source thread:
##
##
## Support thread:
## http://www.rpgmakervx.net/index.php?showtopic=24587
###############################################################################
## REFERENCES
##
## None. This is an original script by Reedo.
## However other people have contributed ideas and bug finds. Please see the
## support thread link above for details.
###############################################################################
## DESCRIPTION
##
## This script provides a plug-and-play Side Battle System for the default
## battle system. This is purely an asthetic script, and as such, it only
## modifies the visuals of the battle. It does not modify battle mechanics
## when used by itself.
##
## This script will:
## 1) Draw the party on the right side of the screen, facing left, during batle.
## 2) Cause actors to perform their stepping animation when they are on the
## ground, and have no state restrictions applied.
## 3) Place a shadow under the actor.
## 4) Provide a target for animations, and optionally, animations themselves.
## 5) Line up actors in a staggerd row, top to bottom, with adjustable spacing,
## recessed according to the position value of their class.
## 6) Cause actors to step forward when performing an action.
## 7) Draw actors lying down, whitened, and semi-transparent when dead.
## 8) Cause living actors to do a victory dance at the end of battle.
## 9) Provide the option to horizontally flip enemy images by enemy ID.
##
## When used with the YERD or YEZ battle scripts, you then get even more
## animation options (such as casting animations) and popups for most battle
## event messages. This SBS and YEZ combine to form an amazing SBS experience!
## YEZ Script Link: http://www.pockethouse.com/yez/
###############################################################################
## COMPATIBILITY
##
## Should be compatible with most other scripts.
##
## This script overwrites 1 method: Spriteset_Battle.update_actors
## All other methods are aliased, and those aliases are called.
## The one overwrite should not cause an issue as the only functionality it
## supresses is setting the party members to the current battle sprites. The
## rest of the original method is maintained, and this script handles the
## relationship between party members and battle sprites.
###############################################################################
## REQUIREMENTS
##
## None
###############################################################################
## INSTALLATION
##
## Plug-and-play. (and this time I mean it for reals!)
##
## Insert below Materials, above other Reedo scripts.
## All Reedo scripts should be below all YERD/YEZ scripts.
###############################################################################
## RIGHTS & RESTRICTIONS
##
## As with most Reedo scripts, this script is free to re-use, as-is,
## in personal, educational, and commercial RPGVX development projects,
## providing that: this script, as well as the rpgmakervx.net forum link
## from which it was obtained, are credited in writing displayed readily
## to the user of the final compiled code assembly.
##
## Reedo and rgpmakervx.net retain all rights of intellect and ownership.
## You forego all rights of warranty by utilizing this script.
###############################################################################
## USAGE
##
## Plug and play. Suggested to use YEZ Battle Engine Zealous, and Reedo's
## Tile-Based Battle Backgrounds scripts.
##
## Some visual options can be modified below.
###############################################################################
###############################################################################
## USER OPTIONS
###############################################################################
module REEDO_SBS
# If desired, you can modify the default script options using the constants
# below. In most cases though, you should not need to adjust these values.
###############################################################################
## This section controls the battle animations provided by this script
###############################################################################
# This controls whether or not this script will provide animations during
# battle. Set to 'true' when using this script without any other battle scene
# enhancements. Set to 'false' when using battle scene enhancements such
# as YEZ/YERD. Default is 'false'.
SBS_ACTION_ANIMES = false
# If this script is providing animations, then you can specify which
# animations to use a default.
SBS_DEFAULT_ATTACK_ANIME = 0
# Skill and item animations will use the animation assigned to the skill or
# item, if any. If none is assigned, then the default will be used. Specify
# a value of 0 if you do not want a default animation. These values have no
# effect if SBS_ACTION_ANIMES is set to 'false'.
SBS_DEFAULT_SKILL_ANIME = 1
SBS_DEFAULT_ITEM_ANIME = 1
###############################################################################
## SEKCJA KONTROLI POZYCJI BOHATERÓW
###############################################################################
ACTOR_START_LINE = 432 # Najlewsza pozycja głównego bohatera
ACTOR_START_TOP = 80 # I jego najgórniejsza pozycja
ACTOR_STAGGER_HORZ = 8 # Przesunięcie każdego następnego bohatera w prawo
ACTOR_STAGGER_VERT = 16 # Pionowy odstęp między nimi
ACTOR_CLASS_POS_STAGGER = 16 # Dodatkowy odstęp w prawo dla klas
ACTOR_STEP_IN_DISTANCE = 64 # Dystans na jaki bohater podchodzi do potwora
ACTOR_STEP_IN_RATE = 8 # I prędkość z jaką ten dystans pokonuje
###############################################################################
## SEKCJA KONTROLI ANIMACJI STĄPANIA
###############################################################################
# Jeśli aktor będzie w stanie wymienionym poniżej, animacja stąpania
# nie będzie wyświetlana aż do usunięcia stanu.
# (If an actor has a state applied which has a restriction value listed in
# the following array, the actor will not display their stepping animation
# until the state is removed.)
NO_STEP_RESTRICTIONS = [4, 5]
# Taki sam efekt jak wyżej, ale na czym innym bazuje
# (Has the same effect as above, but halts the stepping animation based on
# the state's ID, without regard to the state's restriction.)
NO_STEP_STATES = []
###############################################################################
## SEKCJA KONTROLI WYGLĄDU TRUPA
###############################################################################
ACTOR_DEATH_OPACITY = 175 # Przezroczystość martwych bohaterów
ACTOR_DEATH_ANGLE = 270 # Kąt o jaki należy obrócić zwłoki
ACTOR_DEATH_TONE = [128, 128, 128, 0] # Ton (kolor) obrazka
ACTOR_DEATH_OFFSET_X = -8 # Przesunięcie horyzontalne
ACTOR_DEATH_OFFSET_Y = -8 # Przesunięcie wertykalne
###############################################################################
## SEKCJA KONTROLI CIENIA BOHATERA
###############################################################################
ACTOR_SHADOW_IMAGE = "Shadow" # Nazwa obrazka do użycia
ACTOR_SHADOW_CUSTOM_PICTURE = nil # Nazwa własnego obrazka do użycia. nil jeśli korzystasz z górnej opcji
ACTOR_SHADOW_OFFSET_X = 0 # Horyzontalne przesunięcie względem bohatera
ACTOR_SHADOW_OFFSET_Y = 8 # A także wertykalne
ACTOR_DEATH_SHADOW_OFFSET_X = 8 # Przesunięcie o X gdy martwy
ACTOR_DEATH_SHADOW_OFFSET_Y = 2 # Oraz o Y
###############################################################################
## SEKCJA KONTROLI TAŃCA ZWYCIĘSTWA
###############################################################################
VICTORY_DANCE_JUMP_HEIGHT = 16 # Wysokość skoku
VICTORY_DANCE_JUMP_INCREMENT = 2 # Częstotliwość skoku
VICTORY_DANCE_JUMP_HOVER = 4 # Czas w powietrzu
VICTORY_DANCE_JUMP_WAIT = 70 # Czas między skokami
VICTORY_DANCE_JUMP_TWIST = true # True jeśli ma się obracać, false, jeśli ma stać twarzą do nas
###############################################################################
## SEKCJA KONTROLI TŁA WALKI
###############################################################################
BATTLE_FLOOR_TOP = 128 # Góra tła
###############################################################################
## SEKCJA KONTROLI OBRAZKÓW WROGÓW
###############################################################################
# Wpisz ID potworów, których grafiki mają być odbite poziomo
FLIP_ENEMY = [
2, 3, 4, 5, 8, 10, 12, 13, 14, 16, 17,
18, 19, 21, 22, 23, 25, 28, 29,
]
end
###############################################################################
## SAM SKRYPT
###############################################################################
## PONIŻEJ EDYTUJESZ NA WŁASNE RYZYKO!!!
###############################################################################
class Game_Battler
alias reedo_sbs_gb_add_state add_state
def add_state(state_id)
reedo_sbs_gb_add_state(state_id)
if self.is_a?(Game_Actor) and $scene.is_a?(Scene_Battle)
bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)
return if bs == nil
bs.reedo_bc_sprite.character.step_anime = reedo_check_step_anime
reedo_update_life_state
end
end
alias reedo_sbs_gb_remove_state remove_state
def remove_state(state_id)
reedo_sbs_gb_remove_state(state_id)
if self.is_a?(Game_Actor) and $scene.is_a?(Scene_Battle)
bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)
return if bs == nil
bs.reedo_bc_sprite.character.step_anime = reedo_check_step_anime
reedo_update_life_state
end
end
def reedo_check_step_anime
return false if dead?
for state in states
return false if REEDO_SBS::NO_STEP_STATES.include?(state.id)
return false if REEDO_SBS::NO_STEP_RESTRICTIONS.include?(state.restriction)
end
return true
end
def reedo_update_life_state(battle_sprite = nil)
if dead?
if !@reedo_dead_set
reedo_set_dead_state(battle_sprite)
@reedo_dead_set = true
end
else
if @reedo_dead_set
reedo_set_live_state(battle_sprite)
@reedo_dead_set = false
end
end
end
def reedo_reset_dead_set
@reedo_dead_set = false
end
def reedo_set_dead_state(battle_sprite = nil)
if battle_sprite == nil
bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)
else
bs = battle_sprite
end
return if bs == nil
return if bs.reedo_bc_sprite.is_dead
bs.reedo_bc_sprite.angle = REEDO_SBS::ACTOR_DEATH_ANGLE
tone = REEDO_SBS::ACTOR_DEATH_TONE
bs.reedo_bc_sprite.tone.set(tone[0], tone[1], tone[2], tone[3])
bs.reedo_bc_sprite.character.opacity = REEDO_SBS::ACTOR_DEATH_OPACITY
bs.reedo_bc_sprite.character.screen_x += REEDO_SBS::ACTOR_DEATH_OFFSET_X
bs.reedo_bc_sprite.character.screen_y += REEDO_SBS::ACTOR_DEATH_OFFSET_Y
bs.reedo_bc_sprite.shadow_sprite.x += REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_X
bs.reedo_bc_sprite.shadow_sprite.y += REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_Y
bs.reedo_bc_sprite.is_dead = true
end
def reedo_set_live_state(battle_sprite = nil)
if battle_sprite == nil
bs = $scene.reedo_get_battle_sprite(reedo_battle_sprite_id)
else
bs = battle_sprite
end
return if bs == nil
return if bs.reedo_bc_sprite.is_dead != true
bs.reedo_bc_sprite.angle = 0
bs.reedo_bc_sprite.tone.set(0, 0, 0, 0)
bs.reedo_bc_sprite.character.opacity = 255
bs.reedo_bc_sprite.character.screen_x -= REEDO_SBS::ACTOR_DEATH_OFFSET_X
bs.reedo_bc_sprite.character.screen_y -= REEDO_SBS::ACTOR_DEATH_OFFSET_Y
bs.reedo_bc_sprite.shadow_sprite.x -= REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_X
bs.reedo_bc_sprite.shadow_sprite.y -= REEDO_SBS::ACTOR_DEATH_SHADOW_OFFSET_Y
bs.reedo_bc_sprite.is_dead = false
end
end
class Game_Actor
attr_accessor :reedo_battle_sprite_id
attr_accessor :screen_x
attr_accessor :screen_y
end
class Game_Actors
def members
return @data
end
end
class Game_Troop
def troop_id
return @troop_id
end
end
class Game_Character
alias reedo_sbs_gc_screen_x screen_x
def screen_x
if $scene.is_a?(Scene_Battle)
return @battle_screen_x
else
return reedo_sbs_gc_screen_x
end
end
alias reedo_sbs_gc_screen_y screen_y
def screen_y
if $scene.is_a?(Scene_Battle)
return @battle_screen_y
else
return reedo_sbs_gc_screen_y
end
end
def opacity=(value)
@opacity = value
end
def screen_x=(value)
@battle_screen_x = value
end
def screen_y=(value)
@battle_screen_y = value
end
def step_anime
return @step_anime
end
def step_anime=(value)
@step_anime = value
end
end
class Sprite_Base
attr_accessor :reedo_victory_wait
end
class Sprite_Character
attr_accessor :shadow_sprite
attr_accessor :is_dead
alias reedo_sbs_sc_dispose dispose
def dispose
@shadow_sprite.dispose if @shadow_sprite != nil
reedo_sbs_sc_dispose
end
alias reedo_sbs_sc_update update
def update
reedo_sbs_sc_update
@shadow_sprite.update if @shadow_sprite != nil
end
end
class Sprite_Battler
attr_accessor :reedo_bc_sprite
alias reedo_sbs_sb_dispose dispose
def dispose
@reedo_bc_sprite.dispose if @reedo_bc_sprite != nil
reedo_sbs_sb_dispose
end
alias reedo_sbs_sb_update update
def update
reedo_sbs_sb_update
@reedo_bc_sprite.update if @reedo_bc_sprite != nil
end
end
class Spriteset_Battle
alias reedo_sbs_ssb_create_battlefloor create_battlefloor
def create_battlefloor
reedo_sbs_ssb_create_battlefloor
@battlefloor_sprite.y = REEDO_SBS::BATTLE_FLOOR_TOP
end
alias reedo_sbs_ssb_create_actors create_actors
def create_actors
if @actor_sprites != nil
dispose_actors
end
reedo_sbs_ssb_create_actors
@reedo_start_points = {}
@actor_sprites = []
i = 1
for actor in $game_party.members
actor.reedo_battle_sprite_id = i - 1
gc = Game_Character.new
gc.set_graphic(actor.character_name, actor.character_index)
gc.set_direction(4)
gc.screen_x = 0; gc.screen_y = 0
bc = Sprite_Character.new(@viewport1, gc)
gc.screen_x = REEDO_SBS::ACTOR_START_LINE +
($data_classes[actor.class_id].position *
REEDO_SBS::ACTOR_CLASS_POS_STAGGER) +
((i - 1) * REEDO_SBS::ACTOR_STAGGER_HORZ)
gc.screen_y = REEDO_SBS::ACTOR_START_TOP + ((bc.height * i) +
(REEDO_SBS::ACTOR_STAGGER_VERT * i))
actor.screen_x = gc.screen_x; actor.screen_y = gc.screen_y
sb = Sprite_Battler.new(@viewport1, actor)
sb.reedo_victory_wait = REEDO_SBS::VICTORY_DANCE_JUMP_HOVER
sb.reedo_bc_sprite = bc
gc.step_anime = actor.reedo_check_step_anime
@reedo_start_points[sb] = [gc.screen_x, gc.screen_y]
@actor_sprites.push(sb)
bc.update
bc.create_shadow_sprite
actor.reedo_reset_dead_set
actor.reedo_update_life_state(sb)
i += 1
end
end
alias reedo_sbs_ssb_create_enemies create_enemies
def create_enemies
reedo_sbs_ssb_create_enemies
for sprite in @enemy_sprites
if REEDO_SBS::FLIP_ENEMY.include?(sprite.battler.enemy_id)
sprite.mirror = true
end
end
end
def update_actors
if $scene.is_a?(Scene_Battle)
if $scene.victory_dance_time
reedo_update_victory_dance
end
end
for sprite in @actor_sprites
sprite.reedo_bc_sprite.character.update
sprite.update
end
end
def reedo_get_battle_sprite(sprite_id)
return nil if !sprite_id.is_a?(Fixnum)
return nil if sprite_id < 0
return nil if sprite_id >= @actor_sprites.length
return @actor_sprites[sprite_id]
end
def reedo_update_victory_dance
if @victory_delta == nil
@victory_delta = -REEDO_SBS::VICTORY_DANCE_JUMP_INCREMENT
for sp in @actor_sprites
sp.reedo_bc_sprite.character.step_anime = false
end
end
for sp in @actor_sprites
next if sp.battler.reedo_check_step_anime == false
stpt = @reedo_start_points[sp]
if sp.reedo_bc_sprite.character.screen_y < stpt[1] - REEDO_SBS::VICTORY_DANCE_JUMP_HEIGHT
if sp.reedo_victory_wait <= 0
@victory_delta = REEDO_SBS::VICTORY_DANCE_JUMP_INCREMENT
sp.reedo_victory_wait = REEDO_SBS::VICTORY_DANCE_JUMP_WAIT
else
@victory_delta = 0
sp.reedo_victory_wait -= 1
end
end
if sp.reedo_bc_sprite.character.screen_y > stpt[1]
if sp.reedo_victory_wait <= 0
@victory_delta = -REEDO_SBS::VICTORY_DANCE_JUMP_INCREMENT
sp.reedo_victory_wait = REEDO_SBS::VICTORY_DANCE_JUMP_HOVER
sp.reedo_bc_sprite.character.step_anime = false
else
@victory_delta = 0
sp.reedo_victory_wait -= 1
sp.reedo_bc_sprite.character.step_anime = true if !sp.reedo_bc_sprite.character.step_anime
end
end
if REEDO_SBS::VICTORY_DANCE_JUMP_TWIST
if sp.reedo_bc_sprite.character.screen_y <= stpt[1]
if (sp.reedo_bc_sprite.character.screen_y - stpt[1]) % (REEDO_SBS::VICTORY_DANCE_JUMP_HEIGHT / 4) == 0
case sp.reedo_bc_sprite.character.direction
when 4; sp.reedo_bc_sprite.character.set_direction(2)
when 2; sp.reedo_bc_sprite.character.set_direction(6)
when 6; sp.reedo_bc_sprite.character.set_direction(8)
when 8; sp.reedo_bc_sprite.character.set_direction(4)
end
end
else
sp.reedo_bc_sprite.character.set_direction(4) if sp.reedo_bc_sprite.character.direction != 4
end
end
sp.reedo_bc_sprite.character.screen_y += @victory_delta
sp.battler.screen_y += @victory_delta
end
end
end
class Scene_Battle
attr_reader :victory_dance_time
alias reedo_sbs_sb_start start
def start
reedo_sbs_sb_start
@current_party = $game_party.members
end
alias reedo_sbs_sb_terminate terminate
def terminate
reedo_teardown_actors
reedo_sbs_sb_terminate
end
alias reedo_sbs_sb_update update
def update
if @current_party != $game_party.members
@spriteset.create_actors
@current_party = $game_party.members
end
reedo_sbs_sb_update
end
alias reedo_sbs_sb_execute_action_attack execute_action_attack
def execute_action_attack
reedo_do_execute_action("attack")
end
alias reedo_sbs_sb_execute_action_skill execute_action_skill
def execute_action_skill
reedo_do_execute_action("skill")
end
alias reedo_sbs_sb_execute_action_item execute_action_item
def execute_action_item
reedo_do_execute_action("item")
end
alias reedo_sbs_sb_process_victory process_victory
def process_victory
@victory_dance_time = true
reedo_sbs_sb_process_victory
end
def reedo_get_battle_sprite(sprite_id)
return @spriteset.reedo_get_battle_sprite(sprite_id)
end
def reedo_teardown_actors
for actor in $game_actors.members
actor.reedo_battle_sprite_id = nil if actor != nil
end
end
def reedo_do_execute_action(action_method)
targets = @active_battler.action.make_targets
if @active_battler.is_a?(Game_Actor)
reedo_actor_step_in
if REEDO_SBS::SBS_ACTION_ANIMES
targets.each do |t|
if t.is_a?(Game_Actor)
bs = reedo_get_battle_sprite(t.reedo_battle_sprite_id)
bs.reedo_bc_sprite.character.animation_id = eval("reedo_get_" + action_method + "_animation") if bs != nil
end
end
end
eval("reedo_sbs_sb_execute_action_" + action_method)
reedo_actor_step_back
else
if REEDO_SBS::SBS_ACTION_ANIMES
targets.each do |t|
if t.is_a?(Game_Actor)
bs = reedo_get_battle_sprite(t.reedo_battle_sprite_id)
bs.reedo_bc_sprite.character.animation_id = eval("reedo_get_" + action_method + "_animation") if bs != nil
end
end
end
eval("reedo_sbs_sb_execute_action_" + action_method)
end
end
def reedo_get_attack_animation
return REEDO_SBS::SBS_DEFAULT_ATTACK_ANIME
end
def reedo_get_skill_animation
skill = $data_skills[@active_battler.action.skill_id]
aid = REEDO_SBS::SBS_DEFAULT_SKILL_ANIME
aid = skill.animation_id if skill.animation_id > 0
return aid
end
def reedo_get_item_animation
item = $data_items[@active_battler.action.item_id]
aid = REEDO_SBS::SBS_DEFAULT_ITEM_ANIME
aid = item.animation_id if item.animation_id > 0
return aid
end
def reedo_actor_step_in
delta = 0
dr = REEDO_SBS::ACTOR_STEP_IN_RATE
while delta < REEDO_SBS::ACTOR_STEP_IN_DISTANCE
bs = reedo_get_battle_sprite(@active_battler.reedo_battle_sprite_id)
return if bs == nil
bs.reedo_bc_sprite.shadow_sprite.x -= dr
bs.reedo_bc_sprite.character.screen_x -= dr
bs.battler.screen_x -= dr
Graphics.update
@spriteset.update
delta += dr
end
end
def reedo_actor_step_back
delta = 0
dr = REEDO_SBS::ACTOR_STEP_IN_RATE
while delta < REEDO_SBS::ACTOR_STEP_IN_DISTANCE
bs = reedo_get_battle_sprite(@active_battler.reedo_battle_sprite_id)
return if bs == nil
bs.reedo_bc_sprite.shadow_sprite.x += dr
bs.reedo_bc_sprite.character.screen_x += dr
bs.battler.screen_x += dr
Graphics.update
@spriteset.update
delta += dr
end
end
end
Skriny:
Spoiler:
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
Reedo's SIMPLE Sideview Battle System - czyli prosty skrypt. Dla kogoś, dla kogo bajery Takentaia są zbędne, lub kogoś, kto go nie pojmuje. Dlatego nie ma animacji.
Ale jeśli dobrze poszukacie, to są dodatki do niego zmieniające grafikę po śmierci, dodające animacje, etc.
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
Polecał bym Ci zmienić battlersy na sideview battle ( czyli takie które widzi się od boku ) zazwyczaj są mniejsze i lepiej pasują. Np. ja dzisiaj po wgraniu szukałem battlersów żeby pasowały. Bodajże w materiałach można je znaleźć.
W bazie danych w zakładce "grupy przeciwników" przesuń wszystkie battlersy jak najbardziej w lewo. Ponadto w konfiguracji skryptu masz ustawienie, które battlersy mają być odbite poziomo, jest to ta linijka:
Kod:
###############################################################################
## SEKCJA KONTROLI OBRAZKÓW WROGÓW
###############################################################################
# Wpisz ID potworów, których grafiki mają być odbite poziomo
FLIP_ENEMY = [
2, 3, 4, 5, 8, 10, 12, 13, 14, 16, 17,
18, 19, 21, 22, 23, 25, 28, 29,
]
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum