Jump to content
Sign in to follow this  
MoonShadow

Bullpup Shooting engine problem

Recommended Posts

Hello everybody, I'm using this abs http://www.mundorpgmaker.com.br/topic/90666-rmtm-bullpup-shooting-engine-v18/, (I know is Portuguese) works very well but I have a problem: the script is the function of alert near enemies and I would like to turn it off but default you can`t do. The page of script is this:

 

#==============================================================================
# Bullpup Shooting Engine Main
#==============================================================================
#------------------------------------------------------------------------------
# Créditos: Leon-S.K --- ou --- AndreMaker --- ou --- 4ndreMTM
#------------------------------------------------------------------------------
#
# Para Criar um inimigo, coloque o comentario em um evento:
# - enemy_id= E coloque o ID do inimigo na database
# Para adicionar um comando quando o inimigo morrer, coloque o comentario
# Die Erase - Ira apagar o inimigo
# Die Switch Local X - Ira ativar a switch local x
# Die Switch X - Ira ativar a switch
#
# Você pode criar um objeto, colocando um comentario no evento
# - object command
#
# E SUBSTITUA command por :
# Self X - Ativa a switch local x
# Switch X - Ativa a swich X
# Start - Executa tudo após o comentario
# Weapon X - Ativa-se somente com a arma de ID X
#
# Exemplo:
# - Object Self A
#
# Outro Exemplo:
# - Object Switch 20
#
# Para o Inimigo no database, coloque nos comentarios
# animation_id= id da animação
# Para definir uma animação de ataque
#
# Você ainda pode criar uma arma com dano em area ou que atravessa mais
# de um inimigo.
#
# Para fazer-lo coloque no comentario da arma:
#
# Adicione "area" para criar uma arma com efeito de area(explosao)
# Adicione "pierce x" e troque x para quantos inimigos quiser atravessar
#
# Para colocar as armas no script, visite "Bullpup Weapons"
#------------------------------------------------------------------------------
#==============================================================================
module Module_Of_Config

#------------------------------------------------------------------------------
# CONFIGURAÇÕES GERAIS
#------------------------------------------------------------------------------

Opacity_Burn = 10 # A velocidade que a opacidade diminui quando morto
Enemy_Recover = 60 # Recover padrão de inimigos
Attack_Key = Key::A # Tecla de Tiro
Reload_Key = Key::S # Tecla de Reload
Turn_Key = nil # Tecla que quando segurada gira o jogador
Pierce_Enemies = 1 # Quantos inimigos a bala pode atravessar (padrao 1)
Die_SE = "Monster6" # SE tocado quando o inimigo Morre
Player_Die_SE = "die_abyss" # SE tocado quando o player morre

# Tecla que possui a mesma função de enter
# deixe nil para desabilitar
Enter_Key2 = nil

# Tecla de andar sileciosamente (esgueirar)
Sneak_Key = Key::Ctrl

# Velocidade do movimento do inimigo
Enemy_Speed = {:normal => 2, # normal -> velocidade normal do inimigo
:search => 3, # search -> quando o inimigo estiver te procurando
:chase => 3} # chase -> quando o inimigo estiver te perseguindo

Mouse_Control = false # Girar o Player e atirar com o Mouse?

WeaponWeight_Slow = false # Peso da arma afeta a velocidade do player?

WASD_Movement = false # Controlar usando WASD

Disable_Control = 0 # Switch que Impede que o Player atire etc...

Show_Damage_Sprites = true # Mostrar valor do dano no alvo
Show_Melee_Sprites = true # Mostrar sprites de armas melee (facas, etc)
Show_Weapon_Sprites = true # Mostrar sprites de armas (pistolas, etc)
Show_Smoke_On_Fire = true # Mostrar sprites de fumaça ao atirar
Show_Blood_Anim = true # Mostrar sangue
Show_PopUp_Item = true # Mostrar janelas de item ganho

Stamina = false # Sistema de Stamina
Max_Stamina = 150 # Máximo de stamina
Stamina_Time = 70 # Tempo até a stamina começar a regenerar
Stamina_Rate = 8 # Frequencia de Regeneraçaõ
Stamina_Regeneration = 5 # Quantidade regenerada cada vez

Jump_On_Damage = false # Pular quando recebe dano

Health_Time = 0 # Tempo de espera até o hp começar a regenerar
Health_Rate = 0 # Frequencia de Regeneraçaõ
Health_Regeneration = 0 # Quantidade regenerada cada vez

Decrease_Volume = true # Diminuir o som periodicamente quando morrendo
Decrease_Tone = true # Diminuir a tonalidade periodicamente quando morrendo

Enemy_Drop = false # Inimigos dropam suas armas
Pick_SE = "Equip1" # Som ao pegar um drop

Quick_Switch_Key = nil # Tecla de rapida troca de armas
Swap_SE = "Equip2" # Som de rapida troca de armas

Drop_Weapon_Key = nil # Tecla de largar arma
Drop_SE = "Equip3" # Som de largar arma

Push_Back_Effect = false # Aumento do recover quando é atingido
Push_Back_Melee = 14 # Valor para o push back do ataque melee

Clip_IN_SE = "usp_no_ammo"

# Se os tiros estiverem passando por um tile que não pode ser passavel, marque
# o tile com o numero abaixo...
Terrain_Debug = 1


Flash = false # Flash quando receber dano ou uma explosão acontecer
Floor = true # Explosão deixa uma marca do chão

Default_Follow = 0 # Valor padrão para visão dos inimigos

Melee_Wav_Name = "knife_hit" # Som do ataque melee

Explosion_SE = "Explosion2" # Som da explosão
Blend_Type = 1 # Sinteticidade (normal, adicionar, subtrair) padrão 1

Fragments = 10 # Numero de fragmentos que a explosão solta
Frag_Vel = 9 # Velocidade dos fragmentos

Smokes = 2 # Numero de fumaças que a explosão solta
Smoke_Vel = 2 # Velocidade da fumaça
Smoke_Freq = 3 # Frequencia da fumaça

Shot_Bit = {} # Não Mecha

# GRAFICOS
# Coloque aqui o caminho para os determinados graficos:
# Se não souber oque é, não mecha.
AreaChar = "$!rocket"
Floor_Bit = Bitmap.new("Graphics/Particles/floor")
Explosion_Bit = Bitmap.new("Graphics/Particles/explosion")
Fragment_Bit = Bitmap.new("Graphics/Particles/fragments")
Smoke_Bit = Bitmap.new("Graphics/Particles/smoke")
Blood_Bit = Bitmap.new("Graphics/Particles/blood")
Melee_Bit = Bitmap.new("Graphics/Particles/knifeslash")
Shot_Bit[:x] = Bitmap.new("Graphics/Particles/shot_x")
Shot_Bit[:y] = Bitmap.new("Graphics/Particles/shot_y")

#----------------------------------------------------------------------------------#

#------------------------------------------------------------------------------
# AREA NAO EDITAVEL - APENAS SE SABE OQUE ESTA FAZENDO =D
#------------------------------------------------------------------------------


def abs_distance_to(me, him)
dx = me.distance_x_from(him.x).abs
dy = me.distance_y_from(him.y).abs
return dx + dy
end

def same_axis?(me, character)
return if !me.is_a?(Game_Character) or !character.is_a?(Game_Character)
ax = me.x - character.x
ay = me.y - character.y
case me.direction
when 2
return true if ax == 0 and ay < 0
when 4
return true if ay == 0 and ax > 0
when 6
return true if ay == 0 and ax < 0
when 8
return true if ax == 0 and ay > 0
end
return false
end

def in_sight?(me, him, range)
xx = [];yy = []
xx.push(me.x); yy.push(me.y)
SceneManager.scene.spriteset.dep_clear
case me.direction
when 2
for i in 0..range
if $game_map.passable?(me.x, me.y + i, me.direction) or $game_map.counter?(me.x, me.y + i)
yy.push(me.y + i)
#SceneManager.scene.spriteset.depuracao(me.x, me.y + i)
else
break
end
end
when 4
for i in 0..range
if $game_map.passable?(me.x - i, me.y, me.direction) or $game_map.counter?(me.x - i, me.y)
xx.push(me.x - i)
#SceneManager.scene.spriteset.depuracao(me.x - i, me.y)
else
break
end
end
when 6
for i in 0..range
if $game_map.passable?(me.x + i, me.y, me.direction) or $game_map.counter?(me.x + i, me.y)
xx.push(me.x + i)
#SceneManager.scene.spriteset.depuracao(me.x + i, me.y)
else
break
end
end
when 8
for i in 0..range
if $game_map.passable?(me.x, me.y - i, me.direction) or $game_map.counter?(me.x, me.y - i)
yy.push(me.y - i)
#SceneManager.scene.spriteset.depuracao(me.x, me.y - i)
else
break
end
end
end
xx = xx & xx
yy = yy & yy
xx.sort!; yy.sort!
return true if xx.include?(him.x) and yy.include?(him.y)
return false
end
end


class Game_Map
attr_accessor :enemies
attr_accessor :damage_sprites
attr_accessor :item_windows
attr_accessor :explosion_chars
#attr_accessor :last_drops
attr_accessor :screen
attr_accessor :hash
alias abs_setup setup
def setup(map_id)
@enemies.nil? ? @enemies = [] : @enemies.clear
@item_windows.nil? ? @item_windows = [] : @item_windows.clear
#@last_drops.nil? ? @last_drops = [] : @last_drops.clear
store_drops [] if @hash.nil?
abs_setup(map_id)
if SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.dispose_spriteset
SceneManager.scene.create_spriteset
end
end
def window(type)
@item_windows.push(type)
end
def store_drops array
@hash = {}; @hash[:x] = []; @hash[:y] = []; @hash[:item] = []; @hash[:angle] = []
array.each do |sprite|
@hash[:x].push(sprite.character.x)
@hash[:y].push(sprite.character.y)
@hash[:item].push(sprite.item)
@hash[:angle].push(sprite.angle)
end
end
end
#----------------------------------------------------------------------------------#
class Game_Event < Game_Character
include Module_Of_Config
attr_accessor :state
attr_accessor :last_know
attr_reader :enemy
attr_reader :object
attr_reader :not_blood
attr_reader :st
attr_reader :dbug
alias abs_setup_page_settings setup_page_settings
alias abs_initialize initialize
alias abs_update update
alias abs_start start
alias abs_erase_enemy erase
def initialize(map_id, event)
@enemy = nil
@recover = 0; @timer = 0; @state = :normal
abs_initialize(map_id, event)
end
def setup_page_settings
abs_setup_page_settings
check_enemy
end
def check_enemy
if !@enemy.nil?
@enemy = nil
$game_map.enemies.delete(self)
elsif !@object.nil?
@object = nil
$game_map.enemies.delete(self)
end
return if @list.nil?
weapon = nil
@list.each do |command|
next if not command.code == 108 or command.code == 408
if @enemy.nil?
if command.parameters[0].downcase.include?("enemy_id=")
id = command.parameters[0].sub("enemy_id=","")
@enemy = ABS_Enemy.new(id.to_i)
@trigger = 2
$game_map.enemies.push(self)
print "Enemy #{@enemy.enemy.name} criado \n"
@move_speed = weight_speed if @enemy.weapon != nil
elsif command.parameters[0].downcase.include?("object")
die_com = command.parameters[0].downcase.sub("object ", ""); die_com.downcase!
if die_com.include?("self ")
switch = die_com.downcase.sub('self ','')
switch.downcase!
switch = check_switch_string(switch)
elsif die_com.include?("switch ") and !die_com.include?('local')
switch = die_com.downcase.sub('switch ','')
switch = switch.to_i
elsif die_com.include?('start')
switch = true
elsif die_com.include?('weapon')
switch = true
weapon = (die_com.sub("weapon ",'')).to_i
else
switch = true
end
@object = ABS_Object.new(switch, weapon)
$game_map.enemies.push(self)
print "Objeto criado com switch #{@object.switch} \n"
end
else
if command.parameters[0].downcase.include?("die")
cmd = command.parameters[0].downcase
if cmd == "die erase"
@enemy.die = 0
elsif cmd.include?("die switch local")
@enemy.die = 1
maqoe = cmd.sub("die switch local ",'')
@enemy.switch = check_switch_string(maqoe)
elsif cmd.include?("die switch")
@enemy.die = 2
maqoe = cmd.sub("die switch ", '')
@enemy.switch = maqoe.to_i
else
@enemy.die = 0
end
print "Enemy #{@enemy.enemy.name} die command is #{@enemy.die} \n"
elsif command.parameters[0].downcase.include?("follow ")
cmd = command.parameters[0].downcase
@enemy.follow = (cmd.sub("follow ","")).to_i
else
next
end
end
end
end

def weight_speed
return 5 if @enemy.weapon.nil?
return 6 - @enemy.weapon.weight
end

def check_switch_string(string)
if string.include?('a')
return "A"
elsif string.include?('b')
return "B"
elsif string.include?('c')
return "C"
elsif string.include?('d')
return "D"
end
return nil
end

def start_object(used = nil)
if @object.only.is_a?(Fixnum)
print "has a only! \n"
return if @object.only != used.id
end
if @object.switch.is_a?(TrueClass)
start(true);return
end
if @object.switch.is_a?(String)
key = [$game_map.map_id, self.id, @object.switch]
$game_self_switches[key] ? $game_self_switches[key] = false : $game_self_switches[key] = true
elsif @object.switch.is_a?(TrueClass)
@object = nil
$game_map.enemies.delete(self)
self.start
else
$game_switches[@object.switch] ? $game_switches[@object.switch] = false : $game_switches[@object.switch] = true
end
end

def erase
@character_name = ''
@priority_type = 1
moveto(0,0)
abs_erase_enemy
end

def damage_enemy(value, pushback, used = nil)
if !@object.nil?
start_object(used)
return
end
turn_toward_character($game_player)
@state = :chase if @state == :search and @st == 0
@recover += (pushback / 2).to_i if Push_Back_Effect
value -= (rand(10) - 5)
value -= @enemy.defense
value = 0 if value < 0
if Jump_On_Damage
last_speed = @move_speed
last_freq = @move_frequency
@move_speed = 5
@move_frequency = 5
jump(0,0)
end
$game_map.damage_sprites.push(Damage_Sprite.new(self, value)) if Show_Damage_Sprites == true
@enemy.hp -= value
if @enemy.hp <= 0
$game_map.enemies.delete(self)
RPG::SE.new(Die_SE, 80).play
Audio.se_play('Audio/Se/Blow6', 90, 100)
expp = @enemy.enemy.exp
end
if Jump_On_Damage
@move_speed = last_speed
@move_frequency = last_freq
end
end

def update
@not_blood = (@object.nil? ? false : true) if @not_blood.nil?
@bl = false if @bl.nil?
update_enemy_basic
abs_update
end

def update_enemy_basic
if @enemy != nil
@recover -= 1 if @recover > 0
if @enemy.hp <= 0
update_kill
return
end
update_state
end
end

def check_enemies_around
$game_map.enemies.each do |enemy|
next if enemy.object != nil
next if abs_distance_to(self, enemy) >= 6
next if enemy.st != 0
if enemy.state != @state
@state = enemy.state
if @state == :search
@last_know = enemy.last_know
end
end
end
end

def update_state
return if @enemy.nil?
return if @enemy.hp == 0
@move_speed = Enemy_Speed[@state] if @move_speed != Enemy_Speed[@state]
case @state
when :normal
@last_know = nil if @last_know != nil
check_enemies_around
clear_path
if in_sight?(self, $game_player, @enemy.follow)
if @bl == false
@bl = true
@balloon_id = 1
end
@state = :chase
elsif in_sight?(self, $game_player, @enemy.follow + 3)
change_to_search
if @bl == false
@bl = true
@balloon_id = 2
end
elsif check_really_near == true
change_to_search
else
@direction_fix = false if @direction_fix
@bl = false if @bl
end
when :search
update_search
when :chase
print "chasing \n"
if abs_distance_to(self, $game_player) >= 9; @state = :search; change_to_search; end;
update_chase!
end
end

def change_to_search
return if @state == :chase
clear_path
turn_toward_character($game_player)
@state = :search
@last_know = Game_Character.new
@last_know.moveto($game_player.x,$game_player.y)
find_path(@last_know.x, @last_know.y)
@recover = 20
end

def update_search
@st = 0 if @st.nil?
@dbug = 0 if @dbug.nil?
return if @state != :search
@state = :normal if @last_know.nil?
if in_sight?(self, $game_player, @enemy.follow)
@ballon_id = 0
@bl = true
@state = :chase
@last_know = nil
@balloon_id = 1
return
end
if (self.x != @last_know.x) == true and (self.y != @last_know.y) == true
@dbug += 1
if @map.nil? and @runpath == false
find_path(@last_know.x, @last_know.y)
else
print "searching \n"
run_path if !moving?
end
if @dbug == 200
@state = :normal
@last_know = nil; @dbug = 0; clear_path
return
end
else
clear_path
@st += 1
if @st == 40
print "turn? \n"
turn_toward_character($game_player) if !moving?
elsif @st == 80
print "turn! \n"
turn_away_from_character($game_player) if !moving?
elsif @st == 120
print "turned \n"
turn_random if !moving?
@st = 0; @state = :normal
@last_know = nil
end
end
end

def update_chase!
return if @state != :chase
if @enemy.weapon.nil?
@direction_fix = false if @direction_fix
if in_sight?(self, $game_player, @enemy.follow)
clear_path
move_toward_character($game_player) if !moving?
else
if @map.nil? and @runpath == false
find_path($game_player.x, $game_player.y)
else
run_path if !moving?
end
end
dx = distance_x_from($game_player.x).abs
dy = distance_y_from($game_player.y).abs
if dx + dy <= 1
attack; return
end
else
turn_toward_character($game_player) if !moving?
if in_sight?(self, $game_player, @enemy.follow)
clear_path
@direction_fix = true
update_shooting
else
if @map.nil? and @runpath == false
find_path($game_player.x, $game_player.y)
else
run_path if !moving?
end
@direction_fix = false
end
end
end
def update_shooting
return if @recover > 0
return if @enemy.weapon.nil?
if @enemy.weapon.bullets > 0
RPG::SE.new("#{@enemy.weapon.wav_name}", 100).play
SceneManager.scene.spriteset.shoot_enemy(self)
@recover = @enemy.weapon.recover
@enemy.weapon.bullets -= 1
else
RPG::SE.new("#{@enemy.weapon.wav_name}_reload", 100).play
@enemy.weapon.bullets = @enemy.weapon.max
@recover = (@enemy.weapon.recover > 40 ? @enemy.weapon.recover : 40 )
end
end
def update_kill
if @opacity > 0
@opacity -= Module_Of_Config::Opacity_Burn
else
if Enemy_Drop and @enemy.weapon != nil
SceneManager.scene.spriteset.drop(@x, @y, @enemy.weapon.weapon)
end
$game_party.members[0].gain_exp(@enemy.enemy.exp)
$game_party.gain_gold(@enemy.enemy.gold)
case @enemy.die
when 0
print "Erased enemy #{@enemy.enemy.name}\n"
self.erase
@enemy = nil
when 1
key = [$game_map.map_id, self.id, @enemy.switch]
if $game_self_switches[key] == true
$game_self_switches[key] = false
else
$game_self_switches[key] = true
end
@opacity = 255
when 2
$game_switches[@enemy.switch] ? $game_switches[@enemy.switch] = false : $game_switches[@enemy.switch] = true
@opacity = 255
end
@enemy = nil if !@enemy.nil?
end
end
def start(object_ok = false)
if object_ok and @object != nil
abs_start
return
end
abs_start if @enemy.nil?
end
def check_really_near
return false if !$game_player.moving?
return false if $game_player.sneaking
sx = distance_x_from($game_player.x).abs
sy = distance_y_from($game_player.y).abs
plus = ($game_player.dash? ? 1 : 0)
return true if sx + sy - plus < 3
end
def attack
return if @enemy.hp == 0 or @recover > 0
@recover = Module_Of_Config::Enemy_Recover
SceneManager.scene.spriteset.blood($game_player, @direction)
value = @enemy.attack
r = rand(20)
factor = r - 10
value += factor
$game_player.damage_hero(value, Push_Back_Melee)
SceneManager.scene.spriteset.melee(self)
end
end
#----------------------------------------------------------------------------------#
class ABS_Object
attr_accessor :only
attr_accessor :switch
def initialize(die_com, only = nil)
@switch = die_com
@only = only
end
end
#----------------------------------------------------------------------------------#
class ABS_Enemy
include Module_Of_Config
attr_accessor :enemy
attr_accessor :hp
attr_accessor :attack
attr_accessor :defense
attr_accessor :die
attr_accessor :switch
attr_accessor :weapon
attr_reader :name
attr_accessor :follow
def initialize(id)
@enemy = Game_Enemy.new(0, id)
@name = @enemy.name; @weapon = nil
@die = 0, @switch = nil; @follow = Default_Follow
note = @enemy.enemy.note
if note.include?("weapon=")
id = note.sub("weapon=","").to_i
arma = Weapons_To_Be_Used::Armas[id]
p1 = $data_weapons[id]
p2 = $data_items[arma[0]]
p3 = arma[1]
p4 = arma[2]
p5 = arma[3]
p6 = arma[4]
p7 = arma[5]
@weapon = Abs_Weapon.new(p1,p2,p3,p4,p5,p6,p7)
@weapon.bullets = @weapon.max
end
@hp = enemy.mhp
@attack = enemy.atk
@defense = enemy.def
end
end
#----------------------------------------------------------------------------------#
class Game_Player < Game_Character
include Module_Of_Config
attr_accessor :kill_player
attr_accessor :equipped_weapon
attr_accessor :need_check
attr_accessor :hrate
attr_accessor :weight
attr_accessor :stamina
attr_reader :aiming
attr_reader :stamina_wasted
alias abs_initialize initialize
alias abs_update update

def initialize
@st_time, @st_rate = 0, 0
@recover = 0; $master_sound = 0; @stamina = Max_Stamina; @stamina_wasted = false
@kill_player = false; @need_check = true; @hrate = 0; @hwait = 0; @weight = false
@real_vis_character_name = @character_name
@real_vis_character_index = @character_index
abs_initialize
end

def update_stamina
return unless Stamina
return unless SceneManager.scene.is_a?(Scene_Map)
spriteset = SceneManager.scene.spriteset
if Stamina_Gauge::Enabled
if spriteset.stamina_gauge != nil
spriteset.stamina_gauge.update if spriteset.stamina_gauge.stamina != @stamina or spriteset.stamina_gauge.visible != !SceneManager.scene.hud.nil?
else
spriteset.create_stamina_gauge
end
end
if dash? and moving?
minus = 1 + distance_per_frame
if @stamina - minus < 0
@stamina = 0
else
@stamina -= minus
end
@st_time = Stamina_Time
@stamina_wasted = true if @stamina == 0
return
else
if @st_time > 0
@st_time -= 1
else
if @st_rate == Stamina_Rate
if @stamina + Stamina_Regeneration > Max_Stamina
@stamina = Max_Stamina
else
@stamina += Stamina_Regeneration
end
@stamina_wasted = false if @stamina == Max_Stamina
@st_rate = 0
else
@st_rate += 1
end
end
end
end

alias :normal_dash :dash?
def dash?
if Stamina
return false if @stamina == 0 or @stamina_wasted
end
return normal_dash
end

def sneaking
Input.press?(Sneak_Key)
end

def update_inputs
return if stop_bullpup!
if @recover == 0 and Input.trigger?(Drop_Weapon_Key) and @equipped_weapon != nil
drop_weapon
end
if Mouse_Control
update_mouse_control
else
if @recover == 0 and Input.trigger?(Quick_Switch_Key)
quick_weapon_swap
end
if not @equipped_weapon == nil
if Input.press?(Attack_Key) and @recover == 0
if not @equipped_weapon.bullets == 0
@equipped_weapon.area == true ? update_attack(true) : update_attack
return
else
Audio.se_play("Audio/SE/#{@equipped_weapon.wav_name}_no_ammo", 100, 130)
@recover = @equipped_weapon.recover
end
end
if Input.trigger?(Reload_Key)
if @equipped_weapon.bullets == 0
reload(@equipped_weapon)
else
Audio.se_play("Audio/SE/Buzzer1", 80, 100)
end
end
else
if Input.press?(Attack_Key)
update_melee if @recover == 0
end
end
end
end

def update_mouse_control
return if Mouse_Control == false
if @recover == 0 and Mouse.click?(Mouse::SCROLL)
quick_weapon_swap
end
if not @equipped_weapon == nil
if Mouse.press?(Mouse::LEFT) and @recover == 0
if not @equipped_weapon.bullets == 0
@equipped_weapon.area == true ? update_attack(true) : update_attack
return
else
Audio.se_play("Audio/SE/#{@equipped_weapon.wav_name}_no_ammo", 100, 130)
@recover = @equipped_weapon.recover
end
end
if Input.trigger?(Reload_Key)
if @equipped_weapon.bullets == 0
reload(@equipped_weapon)
else
Audio.se_play("Audio/SE/Buzzer1", 80, 100)
end
end
else
if Mouse.click?(Mouse::LEFT)
update_melee if @recover == 0
end
end
end

def update
update_health_reg
@original_ms = @move_speed if @original_ms.nil?
if sneaking
@move_speed = @original_ms - 1
else
if !dash?
@move_speed = @original_ms if @move_speed != @original_ms
end
end
if WeaponWeight_Slow == true
if @equipped_weapon != nil
@move_speed = weight_speed if @move_speed != weight_speed
else
@move_speed = 5 if @move_speed != 5
end
end
update_kill if @kill_player
update_stamina if Stamina
if $reload_sprite.nil?
@recover -= 1 if @recover > 0
end
re_check_equipped_weapon if @need_check == true
abs_update
update_inputs
update_strafe if Mouse_Control
end

def update_strafe
return if stop_bullpup!
bx = Mouse.x - self.screen_x
by = Mouse.y - (self.screen_y-16)
rad_angle = Math.atan2(bx,by) rescue 1
r_angle = (rad_angle*360)/(2*Math::PI)
if r_angle >= 135 and r_angle <= 225 #between?(-2,-1)
set_direction(8) if @direction != 8
elsif r_angle >= -135 and r_angle <= -45 #.between?(-2,2)
set_direction(4) if @direction != 4
elsif r_angle >= 45 and r_angle <= 135 #.between?(1,2)
set_direction(6) if @direction != 6
elsif r_angle >= -45 and r_angle <= 45#.between?(-1,1)
set_direction(2) if @direction != 2
end
end

def stop_bullpup!
return true if $game_switches[Disable_Control] == true
return true if $game_map.interpreter.running?
return true if $game_message.busy?
return false
end

if Mouse_Control
def move_straight(d, turn_ok = true)
@followers.move if passable?(@x, @y, d)
@move_succeed = passable?(@x, @y, d)
if @move_succeed
set_direction(d) if stop_bullpup!
@x = $game_map.round_x_with_direction(@x, d)
@y = $game_map.round_y_with_direction(@y, d)
@real_x = $game_map.x_with_direction(@x, reverse_dir(d))
@real_y = $game_map.y_with_direction(@y, reverse_dir(d))
increase_steps
elsif turn_ok
set_direction(d) if stop_bullpup!
check_event_trigger_touch_front
end
end
end

def weight_speed
return if not WeaponWeight_Slow
return 6 - @equipped_weapon.weight
end

def update_health_reg
actor = $game_party.members[0]
return if actor.nil?
return if actor.hp == actor.mhp
if Decrease_Volume
volume = (50 * actor.hp / actor.mhp).to_i
$master_sound = 50 - volume
end
if Decrease_Tone
if @last_alpha.nil?
@last_alpha = $game_map.screen.tone
elsif actor.hp == actor.mhp
if @last_alpha != $game_map.screen.tone
@last_alpha = $game_map.screen.tone
end
end
color = (255 * actor.hp / actor.mhp).to_i
tone = (@last_alpha.gray + 255) - color
if tone < 0; tone = 0; elsif tone > 255; tone = 255; end
$game_map.screen.start_tone_change(Tone.new(@last_alpha.red,@last_alpha.green,@last_alpha.blue,tone), 0)
end
if @hwait > 0
@hwait -= 1; return
else
if @hrate == Health_Rate
if actor.hp + Health_Regeneration > actor.mhp
actor.hp = actor.mhp
else
actor.hp += Health_Regeneration
end
@hrate = 0
else
@hrate += 1
end
end
end

alias :move :movable?
def movable?
return false if @kill_player
move
end

def drop_weapon
return if @equipped_weapon == nil
RPG::SE.new(Drop_SE, 90).play
item = @equipped_weapon.weapon
SceneManager.scene.spriteset.drop(@x, @y, item)
actor = $game_party.members[0]
actor.change_equip(0,nil)
@equipped_weapon = nil
$game_party.lose_item(item, 1)
SceneManager.scene.spriteset.refresh!
$game_system.hud_need_refresh = true
end

def quick_weapon_swap
real = []
$weapons.each {|weapon|
if $game_party.has_item?(weapon.weapon, true)
real.push(weapon)
end
}
return if real.empty?
if @equipped_weapon.nil?
@equipped_weapon = real[0]
$game_party.members[0].change_equip(0, real[0].weapon)
$game_party.lose_item(real[0].weapon, 1)
$game_map.window(Pop.new(real[0].weapon))
proc; return
end
if real.size == 1
$game_party.gain_item(@equipped_weapon.weapon, 1,false, true)
@equipped_weapon = real[0]
$game_party.members[0].change_equip(0, real[0].weapon)
$game_party.lose_item(real[0].weapon, 1)
$game_map.window(Pop.new(real[0].weapon))
proc; return
end
if real.include?(@equipped_weapon)
index = real.index(@equipped_weapon)
if index == real.size - 1
$game_party.gain_item(@equipped_weapon.weapon, 1,false,true)
@equipped_weapon = real[0]
$game_party.members[0].force_change_equip(0, real[0].weapon)
$game_party.lose_item(real[0].weapon, 1)
$game_map.window(Pop.new(real[0].weapon))
proc; return
else
#$game_party.gain_item(@equipped_weapon.weapon, 1)
@equipped_weapon = real[index + 1]
$game_party.members[0].change_equip(0, real[index + 1].weapon)
$game_map.item_windows.clear;
$game_party.lose_item(real[index + 1].weapon, 1)
$game_map.window(Pop.new(real[index + 1].weapon))
proc; return
end
else
$game_party.gain_item(@equipped_weapon.weapon, 1,false,true)
@equipped_weapon = real[0]
$game_party.members[0].change_equip(0, real[0].weapon)
$game_party.lose_item(real[0].weapon, 1)
$game_map.window(Pop.new(real[0].weapon))
proc; return
end
proc
end

def proc
@recover = 30
@need_check = true
SceneManager.scene.spriteset.refresh! if Show_Weapon_Sprites
RPG::SE.new(Swap_SE,80).play
end

def move_by_input
return if !movable? || $game_map.interpreter.running?
if Input.press?(Turn_Key)
set_direction(Input.dir4) if Input.dir4 > 0
else
move_straight(Input.dir4) if Input.dir4 > 0
end
end

def update_melee
actor = $game_party.members[0]
@recover = 60
if actor.weapons[0] != nil and Show_Melee_Sprites
SceneManager.scene.spriteset.weapon(self, actor.weapons[0].icon_index)
end
SceneManager.scene.spriteset.melee(self)
return if $game_map.enemies.empty?
$game_map.enemies.each {|enemy|
damage = actor.atk
if @direction == enemy.direction
damage *= 2
end
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
if ax == 0 and ay == -1
enemy.damage_enemy(damage, Push_Back_Melee)
SceneManager.scene.spriteset.blood(enemy, @direction) if enemy.object.nil?
end
when 4
if ay == 0 and ax == 1
enemy.damage_enemy(damage, Push_Back_Melee)
SceneManager.scene.spriteset.blood(enemy, @direction) if enemy.object.nil?
end
when 6
if ay == 0 and ax == -1
enemy.damage_enemy(damage, Push_Back_Melee)
SceneManager.scene.spriteset.blood(enemy, @direction) if enemy.object.nil?
end
when 8
if ax == 0 and ay == 1
enemy.damage_enemy(damage, Push_Back_Melee)
SceneManager.scene.spriteset.blood(enemy, @direction) if enemy.object.nil?
end
end
}
end

def re_check_equipped_weapon
if self.actor.weapons[0].nil?
print "#{self.actor.name} has no weapon\n"
@equipped_weapon = nil; return
end
$weapons.each { |weapon|
if self.actor.equips.include?(weapon.weapon)
@equipped_weapon = weapon
return
elsif self.actor.weapons[0].id == weapon.weapon.id
@equipped_weapon = weapon
return
else
@equipped_weapon = nil
end }
@need_check = false
end

def reload(weapon)
$game_party.items.each { |item|
if item.id == weapon.magazine.id
rec = 0
if @equipped_weapon.recover < 40
rec = 40
else
rec = @equipped_weapon.recover
end
SceneManager.scene.spriteset.reload(rec)
@recover = (@equipped_weapon.recover > 40 ? @equipped_weapon.recover : 45)
$game_party.lose_item(weapon.magazine,1)
@equipped_weapon.bullets += @equipped_weapon.max
Audio.se_play("Audio/Se/#{weapon.wav_name}_reload", 100, 100)
@recover = @equipped_weapon.recover
return
end
}
Audio.se_play("Audio/Se/Buzzer1", 85, 100)
end

def update_attack(bazooca = false)
return if $game_map.interpreter.running? or $game_message.busy?
$game_map.enemies.compact!
return if @kill_player
return if $game_party.members[0].weapons[0] == nil
re_check_equipped_weapon if @equipped_weapon == nil
return if @equipped_weapon.nil? or @equipped_weapon.class != Abs_Weapon
Audio.se_stop
Audio.se_play("Audio/Se/#{@equipped_weapon.wav_name}", 100, 100)
@equipped_weapon.bullets -= 1
@recover = @equipped_weapon.recover
range_x = {'pos' => [], 'neg' => []}
range_y = {'pos' => [], 'neg' => []}
SceneManager.scene.spriteset.shoot(self)
$game_map.enemies.each {|enemy|
next if enemy.object != nil
next if enemy.state == :chase
dx = enemy.distance_x_from(self.x).abs
dy = enemy.distance_y_from(self.y).abs
rg = (@equipped_weapon.wav_name.include?("silenced") ? 2 : 4)
if dx+dy <= rg
enemy.change_to_search
enemy.balloon_id = 2
end
}
for i in 1..8
if (map_passable?(@x - i, @y, 4) or $game_map.counter?(@x - i, @y)) and $game_map.terrain_tag(@x - i, @y) != Terrain_Debug
range_x['pos'].push(i)
else
break; next
end
end
for i in 1..8
if (map_passable?(@x + i, @y, 6) or $game_map.counter?(@x + i, @y)) and $game_map.terrain_tag(@x + i, @y) != Terrain_Debug
range_x['neg'].push(i * (-1))
else
break; next
end
end
for i in 1..8
if (map_passable?(@x, @y - i, 8) or $game_map.counter?(@x, @y - i)) and $game_map.terrain_tag(@x, @y - i) != Terrain_Debug
range_y['pos'].push(i)
else
break; next
end
end
for i in 1..8
if (map_passable?(@x, @y + i, 2) or $game_map.counter?(@x, @y + i)) and $game_map.terrain_tag(@x, @y + i) != Terrain_Debug
range_y['neg'].push(i * (-1))
else
break; next
end
end
@new_enemies = []
$game_map.enemies.each do |enemy|
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
if not ax != 0
if ay == -1
@new_enemies[0] = enemy
elsif ay == - 2
@new_enemies[1] = enemy
elsif ay == - 3
@new_enemies[2] = enemy
elsif ay == - 4
@new_enemies[3] = enemy
elsif ay == - 5
@new_enemies[4] = enemy
elsif ay == - 6
@new_enemies[5] = enemy
elsif ay == - 7
@new_enemies[6] = enemy
elsif ax == - 8
@new_enemies[7] = enemy
end
end
when 4
if not ay != 0
if ax == 1
@new_enemies[0] = enemy
elsif ax == 2
@new_enemies[1] = enemy
elsif ax == 3
@new_enemies[2] = enemy
elsif ax == 4
@new_enemies[3] = enemy
elsif ax == 5
@new_enemies[4] = enemy
elsif ax == 6
@new_enemies[5] = enemy
elsif ax == 7
@new_enemies[6] = enemy
elsif ax == 8
@new_enemies[7] = enemy
end
end
when 6
if not ay != 0
if ax == -1
@new_enemies[0] = enemy
elsif ax == - 2
@new_enemies[1] = enemy
elsif ax == - 3
@new_enemies[2] = enemy
elsif ax == - 4
@new_enemies[3] = enemy
elsif ax == - 5
@new_enemies[4] = enemy
elsif ax == - 6
@new_enemies[5] = enemy
elsif ax == - 7
@new_enemies[6] = enemy
elsif ax == - 8
@new_enemies[7] = enemy
end
end
when 8
if not ax != 0
if ay == 1
@new_enemies[0] = enemy
elsif ay == 2
@new_enemies[1] = enemy
elsif ay == 3
@new_enemies[2] = enemy
elsif ay == 4
@new_enemies[3] = enemy
elsif ay == 5
@new_enemies[4] = enemy
elsif ay == 6
@new_enemies[5] = enemy
elsif ay == 7
@new_enemies[6] = enemy
elsif ay == 8
@new_enemies[7] = enemy
end
end
end
end
@new_enemies.compact!; a = 0
@new_enemies.each do |enemy|
if @equipped_weapon.pierce == true
break if a >= Pierce_Enemies + @equipped_weapon.pierce_num
else
break if a >= Pierce_Enemies
end
next if not enemy.is_a?(Game_Event)
ax = @x - enemy.x
ay = @y - enemy.y
case @direction
when 2
if ax == 0
if range_y['neg'].include?(ay)
bazooca ? damage_area(enemy) : attack_enemy(enemy)
a += 1
next
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
when 4
if ay == 0
if range_x['pos'].include?(ax)
bazooca ? damage_area(enemy) : attack_enemy(enemy)
a += 1
next
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
when 6
if ay == 0
if range_x['neg'].include?(ax)
bazooca ? damage_area(enemy) : attack_enemy(enemy)
a += 1
next
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
when 8
if ax == 0
if range_y['pos'].include?(ay)
bazooca ? damage_area(enemy) : attack_enemy(enemy)
a += 1
next
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
else
@equipped_weapon.area ? miss_area(range_x, range_y) : miss; break
end
end
end
@new_enemies.clear
if a == 0
@equipped_weapon.area ? miss_area(range_x, range_y) : miss
end
end

def miss_area(area_x, area_y)
@recover = @equipped_weapon.recover
area_x['pos'].sort!; area_x['neg'].sort!
area_y['pos'].sort!; area_y['neg'].sort!
area_x['pos'].compact!; area_x['neg'].compact!
area_y['pos'].compact!; area_y['neg'].compact!
xis, yis = @x, @y
gm = $game_party.members[0]
pre_feito = gm.atk - gm.def
pre_feito = 0 if pre_feito <= 0
if not area_x['pos'].empty? or area_x['neg'].empty? or area_y['pos'].empty? or area_y['neg'].empty?
case @direction
when 2
if area_y['neg'][0].nil?; damage_hero(pre_feito, 20); SceneManager.scene.spriteset.explode($game_player.x, $game_player.y); return; end
xis = @x; yis -= area_y['neg'][0]
when 4
a = area_x['pos'].size
if area_x['pos'][a - 1].nil?; damage_hero(pre_feito, 20); SceneManager.scene.spriteset.explode($game_player.x, $game_player.y); return; end
yis = @y; xis -= area_x['pos'][a - 1]
when 6
if area_x['neg'][0].nil?; damage_hero(pre_feito, 20); SceneManager.scene.spriteset.explode($game_player.x, $game_player.y); return; end
yis = @y; xis -= area_x['neg'][0]
when 8
a = area_y['pos'].size
if area_y['pos'][a - 1].nil?; damage_hero(pre_feito, 20); SceneManager.scene.spriteset.explode($game_player.x, $game_player.y); return; end
xis = @x; yis -= area_y['pos'][a - 1]
end
else
return
end
xis = 0 if xis.nil?
yis = 0 if yis.nil?
SceneManager.scene.spriteset.area(self, xis, yis)
SceneManager.scene.spriteset.explode(xis,yis)
range = {}
range[:x] = [xis]; range[:y] = [yis]
for i in 0..1
range[:x].push(xis + i)
range[:y].push(yis + i)
range[:x].push(xis - i)
range[:y].push(yis - i)
end
range[:x] = range[:x] & range[:x]
range[:y] = range[:y] & range[:y]
range[:x].sort!; range[:y].sort!
$game_map.enemies.each {|enemy|
if range[:x].include?(enemy.x) and range[:y].include?(enemy.y)
enemy.damage_enemy(pre_feito, 20, @equipped_weapon.weapon)
end
}
if range[:x].include?($game_player.x) and range[:y].include?($game_player.y)
$game_player.damage_hero(pre_feito, 20, @equipped_weapon.weapon)
end
end

def remove_bullets(qnt)
if @equipped_weapon.bullets - qnt < 0
@equipped_weapons.bullets = 0
else
@equipped_weapon.bullets -= qnt
end
end

def damage_area(enemy)
Audio.se_play("Audio/Se/#{@equipped_weapon.wav_name}", 100, 100)
SceneManager.scene.spriteset.area(self, enemy.x, enemy.y)
SceneManager.scene.spriteset.explode(enemy.x, enemy.y)
xis, yis = enemy.x, enemy.y
area = {'X' => [], 'Y' => []}
area['X'].push(xis + 1)
area['X'].push(xis - 1)
area['Y'].push(yis + 1)
area['Y'].push(yis - 1)
area['X'].push(xis)
area['Y'].push(yis)
area['X'].sort!; area['Y'].sort!
$game_map.enemies.compact!
a = $game_map.enemies.compact; a.delete(enemy)
attack_enemy(enemy, true)
for enemi in a
if area['X'].include?(enemi.x) and area['Y'].include?(enemi.y)
attack_enemy(enemi, true)
end
end
Audio.se_play("Audio/Se/explosion1", 100, 100)
end

def miss
hero = $game_party.members[0]
@recover = @equipped_weapon.recover
end

def attack_enemy(event, bazooca = false)
hero = $game_party.members[0]
r = rand(10)
rand = r - 5
event.damage_enemy(hero.atk + rand, @equipped_weapon.pushback, @equipped_weapon.weapon)
if event.object.nil?
SceneManager.scene.spriteset.blood(event, @direction) if bazooca != true
end
@recover = @equipped_weapon.recover
end

def get_bullets(weapon)
if not weapon.bullets == weapon.max
$game_party.lose_item(weapon.magazine, 1)
weapon.bullets += weapon.max
else
return
end
end

def damage_hero(value, pushback)
return if @kill_player
@hwait = Health_Time
@recover += (pushback / 2).to_i if Push_Back_Effect
jump(0,0) if Jump_On_Damage
hero = $game_party.members[0]
value -= hero.def
value -= (rand(10) - 5)
value = 0 if value < 0
$game_map.damage_sprites.push(Damage_Sprite.new(self, value)) if Show_Damage_Sprites == true
if not value > hero.hp
hero.hp -= value
else
hero.hp = 1
@kill_player = true
RPG::SE.new(Player_Die_SE, 80).play
end
end

def update_kill
if @opacity > 0
@opacity -= Module_Of_Config::Opacity_Burn
else
SceneManager.goto(Scene_Gameover)
end
end
end

if Module_Of_Config::WASD_Movement
class << Input

alias :dir :dir4
def dir4
return dir_wasd
end

def dir_wasd
return 8 if self.press?(Key::W) or self.press?(:UP)
return 4 if self.press?(Key::A) or self.press?(:LEFT)
return 2 if self.press?(Key::S) or self.press?(:DOWN)
return 6 if self.press?(Key:) or self.press?(:RIGHT)
return 0
end
end
end
#----------------------------------------------------------------------------------#
class Scene_Map < Scene_Base

alias :upd :update
def update
upd
Mouse.update
end
end
#----------------------------------------------------------------------------------#
class Spriteset_Map
alias abs_initialize initialize
alias abs_update update
alias abs_dispose dispose
attr_reader :viewport1
def initialize
$game_map.damage_sprites = []
$game_map.item_windows = []
$game_map.explosion_chars = []
@spritees = {}; $reload_sprite = nil
abs_initialize
end
def update
abs_update
trash = []
trash2 = []
$game_map.damage_sprites.each do |sprite|
sprite.update
trash.push(sprite )if sprite.disposed?
end
if !$game_map.item_windows.empty?
if $game_map.item_windows[0].is_a?(Pop)
$game_map.item_windows[0].update
trash2.push($game_map.item_windows[0]) if $game_map.item_windows[0].disposed?
end
end
trash2.each { |item| $game_map.item_windows.delete(item) }
$game_map.item_windows.compact!
trash.each { |item| $game_map.damage_sprites.delete(item) }
trash2.clear; trash.clear
for char in $game_map.explosion_chars
char.update
char.my_sprite = Sprite_Character.new(@viewport1, char) if char.my_sprite.nil?
trash.push(char) if char.disposed?
end
trash.each { |item| $game_map.explosion_chars.delete(item) }
end
def dispose
abs_dispose
$game_map.damage_sprites.each do |sprite|
sprite.bitmap.dispose
sprite.dispose
end
$game_map.damage_sprites.clear
$game_map.item_windows.each do |window|
window.dispose
end
$game_map.item_windows.clear
$game_map.explosion_chars.each { |char| char.dispose }
$game_map.explosion_chars.clear
end
end
#----------------------------------------------------------------------------------#
class Game_Party < Game_Unit
alias metodo_aliasado_com_sucesso gain_item
def gain_item(item, amount, include_equip = false, swaping = false)
if amount > 0 and Module_Of_Config::Show_PopUp_Item
$game_map.window(Pop.new(item)) if swaping == false
end
$game_system.hud_need_refresh = true
metodo_aliasado_com_sucesso(item, amount, include_equip)
end
end
#----------------------------------------------------------------------------------#
class Damage_Sprite < Sprite
def initialize(target, value)
super(nil)
@target = target
self.bitmap = Bitmap.new(100,20)
self.bitmap.draw_text(0,0,100,20,value,1)
self.ox = 50
self.z = 999
self.x = target.screen_x
self.y = target.screen_y - 40
@timer = 50
end
def update
if @timer > 0
@timer -= 1
self.y -= 1 if not self.y < @target.screen_y - 60
else
if self.opacity > 0
self.opacity -= 15
self.y -= 2
else
dispose
end
end
end
def dispose
self.bitmap.dispose
super
end
end
#----------------------------------------------------------------------------------#
class Reward_Sprite < Sprite
def initialize(target, value)
super(nil)
@target = target
self.bitmap = Bitmap.new(100,20)
self.bitmap.font.color = Color.new(72,0,255)
self.bitmap.draw_text(0,0,100,20,value,1)
self.ox = 50
self.z = 999
self.x = target.screen_x - 5
self.y = target.screen_y - 40
@timer = 50
end
def update
if @timer > 0
@timer -= 1
self.zoom_x += 0.008
self.zoom_y += 0.008
self.y -= 1 if not self.y < @target.screen_y - 60
else
if self.opacity > 0
self.opacity -= 15
self.y -= 2
else
dispose
end
end
end
def dispose
self.bitmap.dispose
super
end
end
#----------------------------------------------------------------------------------#
class Window_Ammo < Window_Base
def initialize
super(0,0,120,52)
self.contents = Bitmap.new(width - 32, height - 32)
if not $game_player.equipped_weapon == nil
self.contents.draw_text(2,0,120,20,"Ammo:" + $game_player.equipped_weapon.bullets.to_s)
end
end
def dispose
super
end
end
#----------------------------------------------------------------------------------#
class Pop < Window_Base
def initialize(item)
if not item.nil?
super(0,355,175,60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.draw_text(30,5,120,20, item.name)
draw_icon(item.icon_index, 5, 5)
@timer = 70
self.opacity = 0; self.visible = false
else
dispose if not self.disposed?
end
end
def update
return if self.disposed?
self.opacity = 255 if self.opacity != 255
self.visible = true if self.visible == false
@timer > 0 ? @timer -= 1 : dispose
end
def dispose
super
end
end
#----------------------------------------------------------------------------------#
module DataManager
def self.make_save_contents
contents = {}
contents[:system] = $game_system
contents[:timer] = $game_timer
contents[:message] = $game_message
contents[:switches] = $game_switches
contents[:variables] = $game_variables
contents[:self_switches] = $game_self_switches
contents[:actors] = $game_actors
contents[:party] = $game_party
contents[:troop] = $game_troop
contents[:map] = $game_map
contents[:player] = $game_player
if $weapons != nil
$weapons.compact!
contents[:weapons] = $weapons
end
contents
end
def self.extract_save_contents(contents)
$game_system = contents[:system]
$game_timer = contents[:timer]
$game_message = contents[:message]
$game_switches = contents[:switches]
$game_variables = contents[:variables]
$game_self_switches = contents[:self_switches]
$game_actors = contents[:actors]
$game_party = contents[:party]
$game_troop = contents[:troop]
$game_map = contents[:map]
$game_player = contents[:player]
$weapons = contents[:weapons] if contents.has_key?(:weapons)
$weapons.compact!
end
end

class Scene_Gameover < Scene_Base
alias :weapons_reset :start
def start
weapons_reset
$weapons.each {|weapon| weapon.bullets = 0}
end
end
if Module_Of_Config::Decrease_Volume
class << Audio
alias :play! :se_play
def se_play(dir, volume, rate)
new = (volume - $master_sound rescue volume)
new = 0 if new < 0
play!(dir,new,rate)
end
end
$master_sound = 0
end
#----------------------------------------------------------------------------------#
module Definitions

Sprite_angles = {2=>[80,110,140,170],4=>[340,10,40,70],6=>[290,260,230,200],8=>[290,320,350,20]}
Move_correction = {2=>[-8,-10],4=>[0,-10],6=>[0,-4],8=>[4,-10]}
Sprite_z_values = { 2=>120, 4=>50, 6=>120, 8=>50}

Static_Angles = {2=>140,4=>40,6=>320,8=>350} # 6=>340
Static_Move = {2=>[-8,-14],4=>[0,-10],6=>[10,0],8=>[4,-10]}
Static_Z = { 2=>120, 4=>50, 6=>120, 8=>50}
Static_Mirror = {2 => false, 4=>false,6=>true,8=>false}
Kick_Angles = {2=>[-14,-10,-6],4=>[-14,-10,-6],6=>[14,10,6],8=>[14,10,6] }

end

class Scene_Map < Scene_Base; attr_reader :spriteset; end

class Spriteset_Map

include Module_Of_Config
include Definitions
attr_accessor :smoke
attr_accessor :stamina_gauge

alias :mtm_initialize :initialize
def initialize
@explosions = []; @smoke = []; @floors = []; @particles = []; @parts = []
@array_weapons = {}; @weapons = {}; @drops = []
mtm_initialize
if $last_frame != nil
$reload_sprite = Reload.new($last_frame, @viewport2, $last_max)
end
if !$game_map.hash[:x].empty?
xis = $game_map.hash[:x]
yis = $game_map.hash[:y]
items = $game_map.hash[:item]
angles = $game_map.hash[:angle]
xis.each_with_index do |xx, i|
@drops.push(Particle_Sprites::Drop.new(xx, yis[i], items[i], @viewport1, angles[i]))
end
end
create_enemy_weapons if Show_Weapon_Sprites
end

def create_enemy_weapons
$game_map.enemies.each {|enemy|
next if enemy.enemy.nil?
if enemy.enemy.weapon != nil
icon = (enemy.enemy.weapon.weapon.icon_index rescue nil)
return if icon.nil?
bitmap = Bitmap.new(24,24)
bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(icon%16*24,icon/16*24,24,24))
sprite = Sprite.new(@viewport1)
sprite.ox, sprite.oy = 22,22
sprite.zoom_x, sprite.zoom_y = 0.85, 0.85
sprite.bitmap = bitmap
@weapons[enemy] = [sprite, false, 0]
end
}
end

alias :mtm_update :update
def update
update_explosions if !@explosions.empty?
update_smokes if !@smoke.empty?
update_particles if !@particles.empty?
update_parts if !@parts.empty?
update_array if !@array_weapons.empty?
update_drops if !@drops.empty?
trash = []
@floors.each { |sprite|
sprite.update
if sprite.disposed?
trash.push(sprite)
end
}
trash.each {|item| @floors.delete(item)}; trash.clear
if Show_Weapon_Sprites
update_vis_equip
end
if $reload_sprite != nil
$reload_sprite.update
$reload_sprite = nil if $reload_sprite.disposed?
end
mtm_update
end

def depuracao(x, y)
@dep = [] if @dep.nil?
@dep.push(Particle_Sprites::Dep.new(x,y, @viewport1))
end

def dep_clear
if @dep.is_a?(Array)
@dep.each {|sprite| sprite.dispose if not sprite.disposed?}
@dep.clear
end
end

def create_stamina_gauge
@stamina_gauge = Stamina_Bar.new(@viewport2)
end

def reload(frames)
return if $reload_sprite != nil
$reload_sprite = Reload.new(frames, @viewport2)
end

def update_vis_equip
update_enemy_weapons
return if $game_player.equipped_weapon == nil
if @weapons.keys.include?(:player)
sprite = @weapons[:player][0]; player = $game_player
kick = @weapons[:player][1]; time = @weapons[:player][2]
sprite.update
if $game_player.kill_player
@wtf.nil? ? @wtf = 1 : @wtf += 1
return if @wtf == 3
sprite.x += rand(2) - 1
sprite.y += rand(2) - 1
sprite.angle += rand(4) - 2
return
end
sprite.x = player.screen_x + Static_Move[player.direction][0]
sprite.y = player.screen_y + Static_Move[player.direction][1]
sprite.z = Static_Z[player.direction]# - 15
sprite.mirror = Static_Mirror[player.direction]
if kick
case time
when 9
sprite.angle = Static_Angles[player.direction] + Kick_Angles[player.direction][0]
when 6
sprite.angle = Static_Angles[player.direction] + Kick_Angles[player.direction][1]
when 3
sprite.angle = Static_Angles[player.direction] + Kick_Angles[player.direction][2]
when 0
@weapons[:player][1] = false
@weapons[:player][2] = 0
end
@weapons[:player][2] -= 1
else
sprite.angle = Static_Angles[player.direction]
end
else
icon = ($game_player.equipped_weapon.weapon.icon_index rescue nil)
return if icon.nil?
bitmap = Bitmap.new(24,24)
bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(icon%16*24,icon/16*24,24,24))
sprite = Sprite.new(@viewport1)
sprite.ox, sprite.oy = 22,22
sprite.zoom_x, sprite.zoom_y = 0.85, 0.85
sprite.bitmap = bitmap
@weapons[:player] = [sprite, false, 0]
end
end

def update_enemy_weapons
new_weapons = @weapons.clone
new_weapons[:player] = nil
new_weapons.delete(:player)
new_weapons.each {|key, value|
enemy = key; sprite = value[0]; kick = value[1]; time = value[2]
if enemy.nil?
sprite.dispose if not sprite.disposed?
next
end
if enemy.enemy.nil?
sprite.dispose if not sprite.disposed?
next
end
sprite.update
sprite.x = enemy.screen_x + Static_Move[enemy.direction][0]
sprite.y = enemy.screen_y + Static_Move[enemy.direction][1]
sprite.z = Static_Z[enemy.direction]# - 15
sprite.mirror = Static_Mirror[enemy.direction]
if kick
case time
when 9
sprite.angle = Static_Angles[enemy.direction] + Kick_Angles[enemy.direction][0]
when 6
sprite.angle = Static_Angles[enemy.direction] + Kick_Angles[enemy.direction][1]
when 3
sprite.angle = Static_Angles[enemy.direction] + Kick_Angles[enemy.direction][2]
when 0
@weapons[enemy][1] = false
@weapons[enemy][2] = 0
end
@weapons[enemy][2] -= 1
else
sprite.angle = Static_Angles[enemy.direction]
end
}
end

def refresh!
if @weapons[:player] != nil
@weapons[:player][0].dispose if not @weapons[:player][0].disposed?
@weapons.delete(:player)
end
icon = ($game_player.equipped_weapon.weapon.icon_index rescue nil)
return if icon.nil?
bitmap = Bitmap.new(24,24)
bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(icon%16*24,icon/16*24,24,24))
sprite = Sprite.new(@viewport1)
sprite.ox, sprite.oy = 22,22
sprite.zoom_x, sprite.zoom_y = 0.85, 0.85
sprite.bitmap = bitmap
@weapons[:player] = [sprite, false, 0]
end

def update_array
trash = []
@array_weapons.each_with_index {|array, i|
update_array_weapon(array)
trash.push(@array_weapons[i]) if array[1][1] == false
}
trash.each {|item| @array_weapons.delete(item) }; trash.clear
end

def update_array_weapon(array)
array[1][0].x = array[0].screen_x + Move_correction[array[0].direction][0]
array[1][0].y = array[0].screen_y + Move_correction[array[0].direction][1]
if !array[1][3]
case array[1][2]
when 12
array[1][0].angle = Sprite_angles[array[0].direction][0]
array[1][0].z = Sprite_z_values[array[0].direction] - 15
when 9
array[1][0].angle = Sprite_angles[array[0].direction][1]
array[1][0].z = Sprite_z_values[array[0].direction] - 15
when 6
array[1][0].angle = Sprite_angles[array[0].direction][2]
array[1][0].z = Sprite_z_values[array[0].direction] - 15
when 3
array[1][0].angle = Sprite_angles[array[0].direction][3]
array[1][0].z = Sprite_z_values[array[0].direction] - 15
when 0
array[1][1] = false
array[1][0].bitmap = nil
end
else
if array[1][2] > 0
array[1][0].angle = Sprite_angles[array[0].direction][2]
array[1][0].z = Sprite_z_values[array[0].direction] - 15
else
array[1][1] = false
array[1][0].bitmap = nil
end
end
array[1][0].update
array[1][2] -= 1
end

alias :mtm_dispose :dispose
def dispose
@explosions.each {|sprite| sprite.dispose if not sprite.disposed? }
@explosions = nil
@smoke.each {|sprite| sprite.dispose if not sprite.disposed? }
@smoke = nil
@particles.each {|sprite| sprite.dispose if not sprite.disposed?}
@particles = nil
@parts.each {|sprite| sprite.dispose if not sprite.disposed?}
@parts = nil
if @weapons[:player].is_a?(Sprite)
@weapons[:player].dispose if not @weapons[:player].disposed?
@weapons[:player] = nil
@weapons.delete(:player)
end
@weapons.each {|key, value| value[0].dispose if not value[0].disposed? }
@weapons = nil
$game_map.store_drops @drops
@drops = nil
if $reload_sprite != nil
$reload_sprite.store
$reload_sprite = nil
end
mtm_dispose
end

def blood(target, direction)
return unless Show_Blood_Anim
if target.is_a?(Game_Event)
return if target.not_blood
end
3.times { @particles.push(Particle_Sprites::Blood.new(target,direction, @viewport1)) }
return unless Flash
@character_sprites.each {|sprite_character|
next if sprite_character.character != target
sprite_character.flash(Color.new(255,0,0), 30)
break
}
end

def drop(x, y, weapon)
@drops.push(Particle_Sprites::Drop.new(x,y,weapon,@viewport1))
end

def explode(x, y)
@explosions.push(Particle_Sprites::Explosion.new(x, y, @viewport1))
i = 0
loop { i += 1; break if i == 5}
for i in 0..Smokes - 1
@smoke.push(Particle_Sprites::Smoke.new(x, y, @viewport1))
end
if Floor
if @floors.empty?
@floors.push(Particle_Sprites::Floor.new(x, y, @viewport1))
else
if not @floors.any? {|floor| floor.event_x == x and floor.event_y == y}
@floors.push(Particle_Sprites::Floor.new(x, y, @viewport1))
end
end
end
end

def weapon(character, icon_index)
return if character.nil?
return if icon_index == 0
icon = icon_index
bitmap = Bitmap.new(24,24)
bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(icon%16*24,icon/16*24,24,24))
sprite = Sprite.new(@viewport1)
sprite.ox, sprite.oy = 22,22
sprite.bitmap = bitmap
@array_weapons[character] = [sprite,true,12,false]
end

def melee(character)
Audio.se_stop
RPG::SE.new("#{Melee_Wav_Name}", 80).play
@particles.push(Particle_Sprites::Melee.new(character, @viewport1))
end

def area(attacker, final_x, final_y)
@particles.push(Particle_Sprites::Area.new(attacker ,final_x, final_y, @viewport1))
end

def shoot(character)
if character.is_a?(Game_Player)
if @weapons[:player] != nil
@weapons[:player][1] = true
@weapons[:player][2] = 9
end
end
@particles.push(Particle_Sprites::Shot.new(character, @parts, @viewport1))
if Show_Smoke_On_Fire
@smoke.push(Particle_Sprites::Smoke2.new(character, @viewport1))
end
end

def shoot_enemy(event)
if @weapons[event] != nil
@weapons[event][1] = true
@weapons[event][2] = 9
end
if event.enemy.weapon.area == true
@particles.push(Particle_Sprites::Enemy_Area.new(event, @viewport1))
else
@particles.push(Particle_Sprites::Enemy_Shot.new(event, @parts, @viewport1))
end
if Show_Smoke_On_Fire
@smoke.push(Particle_Sprites::Smoke2.new(event, @viewport1))
end
end

def update_explosions
trash = []
@explosions.each {|sprite|
sprite.update
trash.push(sprite) if sprite.disposed?
}
trash.each {|item| @explosions.delete(item)}
trash.clear
end

def update_parts
trash = []
@parts.each {|sprite|
sprite.update
trash.push(sprite) if sprite.disposed?
}
trash.each {|item| @parts.delete(item)}
trash.clear
end

def update_smokes
trash = []
@smoke.each {|sprite|
sprite.update
trash.push(sprite) if sprite.disposed?
}
trash.each {|item| @smoke.delete(item)}
trash.clear
end

def update_particles
trash = []
@particles.each {|sprite|
sprite.update
trash.push(sprite) if sprite.disposed?
}
trash.each {|item| @particles.delete(item)}
trash.clear
end

def update_drops
trash = []
@drops.each {|sprite|
sprite.update
trash.push(sprite) if sprite.disposed?
}
trash.each {|item| @drops.delete(item)}
trash.clear
end
end

module Particle_Sprites

class Area < Game_Character

include Module_Of_Config
attr_accessor :sprite

def initialize(character, final_x, final_y, view)
super(); @character, @fx, @fy = character.clone, final_x, final_y; @view = view
@move_speed = 7
@move_frequency = 3
@through = true
@sprite = Sprite_Character.new(view,self)
set_graphic(AreaChar, 0); @disposed = false
moveto(@character.x, @character.y); set_direction @character.direction
update
end

def update
return if disposed?
@sprite.update if not @sprite.disposed?
if !destination_reached?
move_straight(@direction)
SceneManager.scene.spriteset.smoke.push(Smoke.new(@x, @y, @view))
else
dispose
end
end

def destination_reached?
return true if @x == @fx and @y == @fy
return false
end

def dispose
@disposed = true
@sprite.dispose if not @sprite.disposed?
@sprite = nil
end

def disposed?
@disposed
end
end

class Shot < Sprite

include Module_Of_Config

def initialize(character, parts_array, view)
super(view); @character = character; @direction = character.direction
case @direction
when 2; self.bitmap = Shot_Bit[:y]
when 4; self.bitmap = Shot_Bit[:x]
when 6; self.bitmap = Shot_Bit[:x]
when 8; self.bitmap = Shot_Bit[:y]
end
self.ox, self.oy = 16,16
self.x, self.y = character.screen_x, character.screen_y - 8
@parts = parts_array
@disposer = Game_Character.new
@disposer.moveto(@character.x, @character.y)
@disposer.set_direction(@direction)
get_speed; update
end

def update
return if self.disposed?
if out_screen?
dispose; return
end
case @disposer.direction
when 2
@disposer.moveto(@disposer.x, @disposer.y + 1)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
when 4
@disposer.moveto(@disposer.x - 1, @disposer.y)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
when 6
@disposer.moveto(@disposer.x + 1, @disposer.y)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
when 8
@disposer.moveto(@disposer.x, @disposer.y - 1)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
end
self.x, self.y = @disposer.screen_x, @disposer.screen_y - 8
self.opacity > 0 ? self.opacity -= 25 : dispose
create_new_parts
end

def out_screen?
return false if @disposer.x == $game_map.width - 1 and @character.x == $game_map.width - 1
return false if @disposer.y == $game_map.height and @character.y == $game_map.height
return true if @disposer.x + 1 == $game_map.width or @disposer.y + 1 == $game_map.height
return false if @disposer.x == 0 and @character.x == 0
return false if @disposer.y == 0 and @character.y == 0
return true if @disposer.x == 0 or @disposer.y == 0
return false
end

def get_speed
case @direction
when 2
@vx = 0
@vy = 25
when 4
@vx = -25
@vy = 0
when 6
@vx = 25
@vy = 0
when 8
@vx = 0
@vy = -25
end
end

def create_new_parts
return if self.disposed?
3.times do
case @direction
when 2
vx = 0
vy = 1
when 4
vx = -1
vy = 0
when 6
vx = 1
vy = 0
when 8
vx = 0
vy = -1
end
@parts.push(Part.new(self, self.viewport, vx, vy))
end
end

def dispose
super
@disposer = nil
end
end

class Part < Sprite

def initialize(sprite, view, vx, vy)
super(view); @sprite = sprite
self.bitmap = Bitmap.new(2,2)
self.bitmap.fill_rect(0,0,2,2,Color.new(255,216,0))
rx, ry = rand(12) - 6, rand(12) - 6
self.x, self.y = sprite.x + rx, sprite.y + ry
@vx, @vy = vx, vy
update
end

def update
return if self.disposed?
self.x += @vx
self.y += @vy
self.opacity > 0 ? self.opacity -= 8 : dispose
end
end

class Melee < Sprite

include Module_Of_Config

def initialize(character, view)
@character = character.clone
super(view)
self.bitmap = Melee_Bit
self.z = 60; self.blend_type = 1
self.ox, self.oy = 16,16
self.x, self.y = @character.screen_x, @character.screen_y - 8
character!
update
end

def update
return if disposed?
self.opacity > 0 ? self.opacity -= 6 : dispose
end

def character!
case @character.direction
when 2
self.y += 8
self.angle = 180
when 4
self.x -= 8
self.angle = 90
when 6
self.x += 8
self.angle = 270
when 8
self.y -= 8
self.angle = 0
end
end
end

class Explosion < Sprite

include Module_Of_Config
attr_reader :event

def initialize(x, y, viewport)
super(viewport)
@phase = 0; @timer = 30
@event = Game_Character.new
@event.moveto(x,y)
self.z = 999
self.bitmap = Bitmap.new(128,128)
self.ox = 64; self.oy = 64
self.x, self.y = @event.screen_x, @event.screen_y - 32
RPG::SE.new(Explosion_SE, 100).play
self.blend_type = Blend_Type
self.bitmap.blt(0,0,Explosion_Bit,Rect.new(128 * @phase,0,128,128))
self.viewport.flash(Color.new(255,105,0,190),30) if Flash
@event = nil
create_fragments
update
self.viewport.flash(Color.new(234,96,0),25)
end

def create_fragments
@fragments = []
for i in 0..Fragments - 1
@fragments.push(Fragment.new(self.x, self.y, self.viewport))
end
@fragments.compact
end

def update_fragments
trash = []
@fragments.each {|sprite|
sprite.update
trash.push(sprite) if sprite.disposed?
}
trash.each {|item| @fragments.delete(item) if @fragments.include?(item)}
end

def update
return if self.disposed?
update_fragments
self.bitmap.clear
case @timer
when 30
@phase = 0
when 27
@phase = 1
when 24
@phase = 2
when 21
@phase = 3
when 18
@phase = 4
when 15
@phase = 5
when 12
@phase = 6
when 9
@phase = 7
when 6
@phase = 8
when 3
@phase = 9
when 0
self.dispose
end
if @timer == 0
self.dispose if not self.disposed?
return
end
@timer -= 1
self.bitmap.blt(0,0,Explosion_Bit,Rect.new(128 * @phase,0,128,128))
end

def dispose
super
return if @fragments.nil?
if !@fragments.empty?
@fragments.each {|frag|
frag.dispose if not frag.disposed?
}
@fragments.clear
end
end
end

class Fragment < Sprite

include Module_Of_Config

def initialize(x, y, viewport)
super()
self.viewport = viewport
r = rand(15)
self.bitmap = Bitmap.new(32,32)
self.z = 0
self.bitmap.blt(0,0,Fragment_Bit,Rect.new(32 * r,0,32,32))
self.blend_type = 2
@vx, @vy = rand(Frag_Vel) - (Frag_Vel/2).to_i, rand(Frag_Vel) - (Frag_Vel/2).to_i
self.x, self.y = x - 16, y - 16
end

def update
return if self.disposed?
self.x += @vx
self.y += @vy
self.opacity -= 9
end
end

class Smoke < Sprite

include Module_Of_Config

def initialize(x, y, viewport)
@event = Game_Character.new
@event.moveto(x,y)
super(viewport)
self.bitmap = Smoke_Bit
self.blend_type = 2
self.opacity = 150
self.z = 999 - 5
self.x, self.y = @event.screen_x - 16, @event.screen_y - 32 - 16
@event = nil
@vx, @vy = rand(4) - 2, rand(4) - 2
@vx = 1 if @vx == 0; @vy = 1 if @vy == 0
@move_freq = Smoke_Freq
update
end

def update
return if self.disposed?
if @move_freq > 0
@move_freq -= 1
else
@move_freq = Smoke_Freq
self.x += @vx
self.y += @vy
end
self.opacity > 0 ? self.opacity -= 2 : dispose
end
end

class Smoke2 < Sprite

include Module_Of_Config

def initialize(character, viewport)
@character = character.clone
direction = character.direction
super(viewport)
self.bitmap = Smoke_Bit
self.blend_type = 2
self.opacity = 150
self.z = 0
self.zoom_x, self.zoom_y = 0.3, 0.3
case direction
when 2
self.x, self.y = @character.screen_x - 9, @character.screen_y + 6
when 4
self.x, self.y = @character.screen_x - 26, @character.screen_y - 19
when 6
self.x, self.y = @character.screen_x + 9, @character.screen_y - 21
when 8
self.x, self.y = @character.screen_x - 9, @character.screen_y - 36
end
@vx, @vy = rand(4) - 2, rand(4) - 2
@vx = 1 if @vx == 0; @vy = 1 if @vy == 0
@move_freq = Smoke_Freq + 2
update
end

def update
return if self.disposed?
if @move_freq > 0
@move_freq -= 1
else
@move_freq = Smoke_Freq + 2
self.x += @vx
self.y += @vy
end
self.opacity > 0 ? self.opacity -= 4 : dispose
end
end

class Floor < Sprite

attr_reader :event_x
attr_reader :event_y

def initialize(x,y,viewport)
@event_x, @event_y = x,y
super(viewport)
self.z = 0
self.ox, self.oy = 16,16
self.bitmap = Module_Of_Config::Floor_Bit
@event = Game_Character.new
@event.moveto(x,y)
self.x, self.y = @event.screen_x, @event.screen_y - 8
self.z = @event.screen_z
end

def update
self.x = @event.screen_x if self.x != @event.screen_x
self.y = @event.screen_y - 8 if self.y != @event.screen_y - 8
self.z = @event.screen_z if self.z != @event.screen_z
end
end

class PlayerWeapon < Sprite

Sprite_z_values = { 2=>120, 4=>50, 6=>120, 8=>50}
Sprite_Mirror = {2=>false,4=>false,6=>true,8=>false}

Sprite_Angles = {2=>100, 4=>20, 6=>340, 8=>100}
Move_correction = {2=>[2,-4],4=>[-7,-10],6=>[8,-14],8=>[-2,-18]}

def initialize(view)
super(view)
self.bitmap = Bitmap.new(24,24)
self.ox, self.oy = 12,12
icon = $game_player.equipped_weapon.weapon.icon_index
self.bitmap.blt(0,0,Cache.system("Iconset"), Rect.new(icon%16*24,icon/16*24,24,24))
update
end

def update
self.x = $game_player.screen_x + Move_correction[$game_player.direction][0]
self.y = $game_player.screen_y + Move_correction[$game_player.direction][1]
self.z = Sprite_z_values[$game_player.direction]
self.angle = Sprite_Angles[$game_player.direction]
self.mirror = Sprite_Mirror[$game_player.direction]
end
end

class Blood < Sprite

include Module_Of_Config

def initialize(target, direction, view)
@target, @direction = target, direction
super(view)
self.bitmap = Bitmap.new(32,32)
rand = rand(7) + 3
self.bitmap.blt(0,0,Blood_Bit, Rect.new(32 * rand,0,32,32))
self.ox, self.oy = 16,16
self.x, self.y = @target.screen_x, @target.screen_y - 8
self.z = 30
get_speed
update
end

def update
return if self.disposed?
return if @vx.nil? or @vy.nil?
if @target.nil?
dispose; return
end
self.x += @vx
self.y += @vy
self.opacity > 0 ? self.opacity -= 6 : dispose
end

def get_speed
case @direction
when 2
@vx = rand(4) - 2
@vy = rand(4)
when 4
@vx = -rand(4)
@vy = rand(4) - 2
when 6
@vx = rand(4)
@vy = rand(4) - 2
when 8
@vx = rand(4) - 2
@vy = -rand(4)
end
end
end

class Enemy_Shot < Sprite

include Module_Of_Config

def initialize(character, parts_array, view)
super(view); @character = character; @direction = character.direction
case @direction
when 2; self.bitmap = Shot_Bit[:y]
when 4; self.bitmap = Shot_Bit[:x]
when 6; self.bitmap = Shot_Bit[:x]
when 8; self.bitmap = Shot_Bit[:y]
end
self.ox, self.oy = 16,16
self.x, self.y = character.screen_x, character.screen_y - 8
@parts = parts_array
@disposer = Game_Character.new
@disposer.moveto(@character.x, @character.y)
@disposer.set_direction(@direction)
get_speed; update
end

def update
return if self.disposed?
case @disposer.direction
when 2
@disposer.moveto(@disposer.x, @disposer.y + 1)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
when 4
@disposer.moveto(@disposer.x - 1, @disposer.y)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
when 6
@disposer.moveto(@disposer.x + 1, @disposer.y)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
when 8
@disposer.moveto(@disposer.x, @disposer.y - 1)
if !@disposer.map_passable?(@disposer.x, @disposer.y, @disposer.direction) or @disposer.collide_with_characters?(@disposer.x, @disposer.y) or $game_map.terrain_tag(@disposer.x, @disposer.y) == 1 and $game_map.counter?(@disposer.x, @disposer.y) != true
dispose; return
end
end
#self.x += @vx
#self.y += @vy
self.x, self.y = @disposer.screen_x, @disposer.screen_y - 8
self.opacity > 0 ? self.opacity -= 25 : dispose
return if self.disposed?
if hit_area?(self.x, self.y)
if @character.enemy.nil?
dispose if not self.disposed?
return
else
$game_player.damage_hero(@character.enemy.attack + @character.enemy.weapon.weapon.params[2], @character.enemy.weapon.pushback)
SceneManager.scene.spriteset.blood($game_player, @character.direction) if SceneManager.scene.is_a?(Scene_Map)
dispose if not self.disposed?
return
end
end
create_new_parts
end

def get_speed
case @direction
when 2
@vx = 0
@vy = 25
when 4
@vx = -25
@vy = 0
when 6
@vx = 25
@vy = 0
when 8
@vx = 0
@vy = -25
end
end

def create_new_parts
return if self.disposed?
3.times do
case @direction
when 2
vx = 0
vy = 1
when 4
vx = -1
vy = 0
when 6
vx = 1
vy = 0
when 8
vx = 0
vy = -1
end
@parts.push(Part.new(self, self.viewport, vx, vy))
end
end

def dispose
super
@disposer = nil
end

def area_x
result = []
init = ($game_player.screen_x - 16).to_i
final = (init + 32).to_i
for i in init..final
result.push(i)
end
result.sort
end

def area_y
result = []
init = ($game_player.screen_y - 28).to_i
final = (init + 32).to_i
for i in init..final
result.push(i)
end
result.sort
end

def hit_area?(x,y)
return false if self.disposed?
return true if area_x.include?(x) and area_y.include?(y)
return false
end
end

class Drop < Sprite

attr_reader :character
attr_reader :item

def initialize(x, y, item, view, angle = nil)
super(view)
@character = Game_Character.new
@character.moveto(x,y)
@item = item
self.ox, self.oy = 12,12
self.bitmap = Bitmap.new(32,32)
icon = item.icon_index
if icon.nil?
dispose; return
end
self.bitmap.blt(4,4,Cache.system("Iconset"), Rect.new(icon%16*24,icon/16*24,24,24))
if angle.nil?
self.angle += rand(60) - 30
else
self.angle = angle
end
end

def update
return if self.disposed?
self.x, self.y = @character.screen_x, @character.screen_y - 16
if self.viewport.nil?
self.viewport = SceneManager.scene.spriteset.viewport1 if SceneManager.scene.is_a?(Scene_Map)
end
if player_in_range?
if Input.trigger?(:C) or Input.repeat?(:C)
pick_up
end
end
end

def player_in_range?
return true if $game_player.x == @character.x and $game_player.y == @character.y
return true if $game_player.x - 1 == @character.x and $game_player.y == @character.y
return true if $game_player.x + 1 == @character.x and $game_player.y == @character.y
return true if $game_player.y - 1 == @character.y and $game_player.x == @character.x
return true if $game_player.y + 1 == @character.y and $game_player.x == @character.x
return false
end

def pick_up
if $game_party.has_item?(@item, true)
to_gain = nil
$weapons.each {|w| next if w.weapon != @item; to_gain = w.magazine; break}
$game_party.gain_item(to_gain,1)
else
$game_party.gain_item(@item,1)
if $game_player.equipped_weapon.nil?
to_equip = nil
$weapons.each {|w| next if w.weapon != @item; to_equip = w; break}
$game_player.equipped_weapon = to_equip
$game_party.members[0].change_equip(0,@item)
SceneManager.scene.spriteset.refresh!
$game_player.need_check = true
$game_party.lose_item(@item,1)
end
end
RPG::SE.new("#{Module_Of_Config::Pick_SE}", 90).play
dispose if not disposed?
end

def dispose
super
@character = nil; @item = nil
end
end

class Enemy_Area < Game_Character

include Module_Of_Config
attr_accessor :sprite

def initialize(character, view)
super(); @character = character.clone; @view = view
@move_speed = 7
@move_frequency = 3
@travel = 0
@through = true
set_graphic(AreaChar, 0); @disposed = false
@sprite = Sprite_Character.new(view,self)
moveto(@character.x, @character.y); set_direction @character.direction
update
end

def update
return if self.disposed?
@sprite.update if not @sprite.disposed?
if !destination_reached?
if @character.enemy.nil?
dispose; return
end
move_straight(@direction)
@travel += 1
SceneManager.scene.spriteset.smoke.push(Smoke.new(@x, @y, @view))
if @x == $game_player.x and @y == $game_player.y
SceneManager.scene.spriteset.explode(@x, @y)
$game_player.damage_hero(@character.enemy.attack + @character.enemy.weapon.weapon.params[2])
dispose if not self.disposed?
end
if @travel >= 8
SceneManager.scene.spriteset.explode(@x, @y)
if $game_player.x - 1 == @x and $game_player.y == @y
$game_player.damage_hero((@character.enemy.attack + @character.enemy.weapon.weapon.params[2] / 2).to_i)
elsif $game_player.x + 1 == @x and $game_player.y == @y
$game_player.damage_hero((@character.enemy.attack + @character.enemy.weapon.weapon.params[2] / 2).to_i)
elsif $game_player.y + 1 == @y and $game_player.x == @x
$game_player.damage_hero((@character.enemy.attack + @character.enemy.weapon.weapon.params[2] / 2).to_i)
elsif $game_player.y - 1 == @y and $game_player.x == @x
$game_player.damage_hero((@character.enemy.attack + @character.enemy.weapon.weapon.params[2] / 2).to_i)
end
dispose if not self.disposed?
end
else
dispose if not self.disposed?
end
end

def destination_reached?
return true if @x == @fx and @y == @fy
return false
end

def dispose
@disposed = true
@sprite.dispose if not @sprite.disposed?
@sprite = nil
end

def disposed?
@disposed
end

def area_x
result = []
init = ($game_player.screen_x - 16).to_i
final = (init + 32).to_i
for i in init..final
result.push(i)
end
result.sort
end

def area_y
result = []
init = ($game_player.screen_y - 28).to_i
final = (init + 32).to_i
for i in init..final
result.push(i)
end
result.sort
end

def hit_area?(x,y)
return true if area_x.include?(x) and area_y.include?(y)
return false
end
end

class Dep < Sprite
def initialize(x, y, view)
super(view)
@char = Game_Character.new
@char.moveto(x,y)
self.bitmap = Bitmap.new(32,32)
self.ox, self.oy = 16,16
self.x, self.y = @char.screen_x, @char.screen_y - 8
self.bitmap.fill_rect(0,0,32,32,Color.new(255,255,255,200))
end
end
end

class Reload < Sprite

def initialize(frames, view, max = nil)
if max.nil?
@frames = frames; @max = frames
else
@frames = frames; @max = max
end
$last_max, $last_frame = nil,nil
super(view)
self.bitmap = Bitmap.new(128,26)
self.ox, self.oy = self.bitmap.width / 2, self.bitmap.height / 2
self.x, self.y = 544/2,416/2 + 100
self.bitmap.font.color = Color.new(255,216,0)
self.bitmap.font.bold = true
self.bitmap.font.size = 14
create_base
update
end

def update
return if self.disposed?
self.bitmap.clear
create_base
if @frames > 0
@frames -= 1
else
RPG::SE.new(Module_Of_Config::Clip_IN_SE, 100).play
dispose if not self.disposed?
return
end
wd = 124 * @frames / @max; wd = 124 - wd
self.bitmap.fill_rect(2,2,wd,22,Color.new(255,216,0))
self.bitmap.draw_text(12,4,90,20,"RELOADING...")
end

def create_base
return if self.disposed?
self.bitmap.fill_rect(0,0,128,26,Color.new(255,216,0))
self.bitmap.fill_rect(1,1,126,24,Color.new())
end

def store
$last_frame = @frames
$last_max = @max
dispose if not self.disposed?
end
end

if Module_Of_Config::WASD_Movement
class Window_Selectable < Window_Base
def process_cursor_move
return unless cursor_movable?
last_index = @index
cursor_down (Input.trigger?(:DOWN)) if Input.repeat?(:DOWN)
cursor_up (Input.trigger?(:UP)) if Input.repeat?(:UP)
cursor_right(Input.trigger?(:RIGHT)) if Input.repeat?(:RIGHT)
cursor_left (Input.trigger?(:LEFT)) if Input.repeat?(:LEFT)
cursor_down (Input.trigger?(Key::S)) if Input.repeat?(Key::S)
cursor_up (Input.trigger?(Key::W)) if Input.repeat?(Key::W)
cursor_right(Input.trigger?(Key:)) if Input.repeat?(Key:)
cursor_left (Input.trigger?(Key::A)) if Input.repeat?(Key::A)
cursor_pagedown if !handle?(:pagedown) && Input.trigger?(:R)
cursor_pageup if !handle?(:pageup) && Input.trigger?(:L)
Sound.play_cursor if @index != last_index
end
end
end

if Module_Of_Config::Enter_Key2 != nil
class << Input
alias normal_trigger? trigger?
alias normal_repeat? repeat?
alias normal_press? press?

def trigger?(key)
if key == :C
if normal_trigger?(:C) == false
return normal_trigger?(Module_Of_Config::Enter_Key2)
else
true
end
else
normal_trigger?(key)
end
end
def repeat?(key)
if key == :C
if normal_repeat?(:C) == false
return normal_repeat?(Module_Of_Config::Enter_Key2)
else
true
end
else
normal_repeat?(key)
end
end
def press?(key)
if key == :C
if normal_press?(:C) == false
return normal_press?(Module_Of_Config::Enter_Key2)
else
true
end
else
normal_press?(key)
end
end
end
end

#-----##-----##-----##-----##-----##-----##-----##-----##-----##-----##-----#
# FIM ## FIM ## FIM ## FIM ## FIM ## FIM ## FIM ## FIM ## FIM ## FIM ## FIM #
#-----##-----##-----##-----##-----##-----##-----##-----##-----##-----##-----#

 
in particular this is the command that sets the distance of "alert" enemies
Default_Follow = 0 # Valor padrão para visão dos inimigos
 
 
it set to 0 but remains active. Can someone please help me? Thank you in advance. smile.png

 

 

 

Edited by MoonShadow

Share this post


Link to post
Share on other sites

Could you please put these scripts in spoilers? It would make everything easier for the others. Thank you. (=

To use spoilers use this BBCode:

 

[ spoiler ]

your script

[ /spoiler ]

 

(Remove spaces.)

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
Top ArrowTop Arrow Highlighted