#================================================= ==============================
# )----------------------------------------------------------------------------(
# )-- AUTHOR: Mr Trivel --(
# )-- NAME: Quicksand --(
# )-- CREATED: 2014-10-27 --(
# )-- VERSION: 1.2 --(
#================================================= ==============================
# )-- VERSION HISTORY --(
# )-- 1.0 - Initial script. --(
# )-- 1.1 - Player is slowed down while in quicksand. --(
# )-- 1.2 - Multiple quicksand tiles. --(
#================================================= ==============================
# )-- DESCRIPTION --(
# )-- Allows the developer to set which Terrain Tags are quicksand. --(
# )-- Player will start sinking in quicksand. If DEATH option is set to true--(
# )-- player will get a game over screen after sinking completely. Or, if --(
# )-- it's false, player will sink to a specific amount. --(
# )-- --(
# )-- Bonus: Best effect reached when quicksand tiles have Bush option. --(
#================================================= ==============================
# )-- INSTRUCTIONS --(
# )-- Customize value in Quicksand module. And play. --(
#================================================= ==============================
# )-- LICENSE INFO --(
# )-- Free for non-commercial & commercial games if credit was given to --(
# )-- Mr Trivel. --(
# )----------------------------------------------------------------------------(
#================================================= ==============================
# )=======---------------------------------------------------------------------(
# )-- Module: Quicksand --(
# )---------------------------------------------------------------------=======(
module Quicksand
Quicksands = {
# Quicksand
2 => { :sinking_speed => 0.1, # Sinking Speed in pixels per frame
:slow_down => 0.05, # Movement slow-down by %
:max_slow_down => 0.5, # Max slowdown in %
:death => true, # Death after sinking?
:death_sink => 32, # Pixels for death, VX Ace default is 32px
:max_sink => 32, # Max sink possible
:dash => false # Can dash in quicksand?
},
# Snow
3 => { :sinking_speed => 0.1,
:slow_down => 0.04,
:max_slow_down => 0.5,
:death => false,
:death_sink => 32,
:max_sink => "$game_party.has_item?($data_items[1]) ? 4 : 8", # if party has item 1, make max sink 4, else it's 8
:dash => true
}
}
end
# )=======---------------------------------------------------------------------(
# )-- Class: Game_Player --(
# )---------------------------------------------------------------------=======(
class Game_Player < Game_Character
include Quicksand
# )--------------------------------------------------------------------------(
# )-- Aliased methods --(
# )--------------------------------------------------------------------------(
alias :mrts_qcksnd_initialize :initialize
alias :mrts_qcksnd_dash? :dash?
alias :mrts_qcksnd_update :update
alias :mrts_qcksnd_shift_y :shift_y
alias :mrts_qcksnd_move_straight :move_straight
alias :mrts_qcksnd_update_move :update_move
# )--------------------------------------------------------------------------(
# )-- Public Instance Variables --(
# )--------------------------------------------------------------------------(
attr_accessor :sunk
# )--------------------------------------------------------------------------(
# )-- Alias: initialize --(
# )--------------------------------------------------------------------------(
def initialize
mrts_qcksnd_initialize
@sunk = 0.0
end
# )--------------------------------------------------------------------------(
# )-- New Method: in_quicksand? --(
# )--------------------------------------------------------------------------(
def in_quicksand?
Quicksands[terrain_tag]
end
# )--------------------------------------------------------------------------(
# )-- New Method: qcks_can_dash? --(
# )--------------------------------------------------------------------------(
def qcks_can_dash?
Quicksands[terrain_tag][:dash]
end
# )--------------------------------------------------------------------------(
# )-- New Method: qcks_sink_speed --(
# )--------------------------------------------------------------------------(
def qcks_sink_speed
Quicksands[terrain_tag][:sinking_speed]
end
# )--------------------------------------------------------------------------(
# )-- New Method: qcks_max_sink --(
# )--------------------------------------------------------------------------(
def qcks_max_sink
Quicksands[terrain_tag][:max_sink]
end
# )--------------------------------------------------------------------------(
# )-- New Method: qcks_death_sink --(
# )--------------------------------------------------------------------------(
def qcks_death_sink
Quicksands[terrain_tag][:death_sink]
end
# )--------------------------------------------------------------------------(
# )-- New Method: qcks_death --(
# )--------------------------------------------------------------------------(
def qcks_death
Quicksands[terrain_tag][:death]
end
# )--------------------------------------------------------------------------(
# )-- New Method: qcks_slow_down --(
# )--------------------------------------------------------------------------(
def qcks_slow_down
Quicksands[terrain_tag][:slow_down]
end
# )--------------------------------------------------------------------------(
# )-- New Method: qcks_max_slow_down --(
# )--------------------------------------------------------------------------(
def qcks_max_slow_down
Quicksands[terrain_tag][:max_slow_down]
end
# )--------------------------------------------------------------------------(
# )-- Alias: dash? --(
# )--------------------------------------------------------------------------(
def dash?
return false if in_quicksand? && !qcks_can_dash?
mrts_qcksnd_dash?
end
# )--------------------------------------------------------------------------(
# )-- Alias: update --(
# )--------------------------------------------------------------------------(
def update
mrts_qcksnd_update
update_sinking
end
# )--------------------------------------------------------------------------(
# )-- New Method: update_sinking --(
# )--------------------------------------------------------------------------(
def update_sinking
if in_quicksand?
@sunk += qcks_sink_speed
max_sink = eval(qcks_max_sink.to_s).to_f
@sunk = max_sink if @sunk > max_sink
SceneManager.goto(Scene_Gameover) if @sunk >= qcks_death_sink.to_f && qcks_death
else
@sunk -= 8.0 if @sunk > 0
@sunk = 0 if @sunk < 0
end
end
# )--------------------------------------------------------------------------(
# )-- Alias: shift_y --(
# )--------------------------------------------------------------------------(
def shift_y
shift = mrts_qcksnd_shift_y
return
shift-@sunk.to_i
end
# )--------------------------------------------------------------------------(
# )-- Alias: move_straight --(
# )--------------------------------------------------------------------------(
def move_straight(d, turn_ok = true)
@move_succeed = passable?(@x, @y, d)
dx = (d == 6 ? 1 : d == 4 ? -1 : 0)
dy = (d == 2 ? 1 : d == 8 ? -1 : 0)
new_x = @x + dx
new_y = @y + dy
if in_quicksand? && $game_map.terrain_tag(new_x, new_y) != terrain_tag && @move_succeed
jump(dx, dy)
else
mrts_qcksnd_move_straight(d, turn_ok = true)
end
end
# )--------------------------------------------------------------------------(
# )-- Alias: update_move --(
# )--------------------------------------------------------------------------(
def update_move
if in_quicksand?
slowdown = distance_per_frame * [qcks_max_slow_down, (1 - @sunk*qcks_slow_down)].max
@real_x = [@real_x - slowdown, @x].max if @x < @real_x
@real_x = [@real_x + slowdown, @x].min if @x > @real_x
@real_y = [@real_y - slowdown, @y].max if @y < @real_y
@real_y = [@real_y + slowdown, @y].min if @y > @real_y
update_bush_depth
else
mrts_qcksnd_update_move
end
end
end
# )=======---------------------------------------------------------------------(
# )-- Class: Game_Enemy --(
# )---------------------------------------------------------------------=======(
class Sprite_Character < Sprite_Base
# )--------------------------------------------------------------------------(
# )-- Aliased methods --(
# )--------------------------------------------------------------------------(
alias :mrts_qcksnd_initialize :initialize
alias :mrts_qcksnd_update_other :update_other
alias :mrts_qcksnd_update_src_rect :update_src_rect
# )--------------------------------------------------------------------------(
# )-- Alias: initialize --(
# )--------------------------------------------------------------------------(
def initialize(*args)
@sunk = 0.0
mrts_qcksnd_initialize(*args)
end
# )--------------------------------------------------------------------------(
# )-- Alias: update_src_rect --(
# )--------------------------------------------------------------------------(
def update_src_rect
mrts_qcksnd_update_src_rect
self.src_rect.height -= @sunk
end
# )--------------------------------------------------------------------------(
# )-- Alias: update_other --(
# )--------------------------------------------------------------------------(
def update_other
mrts_qcksnd_update_other
@sunk = @character.sunk if @character.is_a?(Game_Player)
end
end
Социальные закладки