MoonShadow
-
Numero contenuti
3 -
Iscritto
-
Ultima visita
Risposte pubblicati da MoonShadow
-
-
-
Ciao a tutti, sto utilizzando questo abs Bullpup shooting engine, (si lo so è portoghese) funziona molto bene ma ho un problema: nello script è presente la funzione di allerta in prossimità di nemici e io vorrei disattivarla ma di default nn si può fare. La pagina di script è questa:
#==============================================================================
# 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 [email protected]?
@enemy = nil
$game_map.enemies.delete(self)
elsif [email protected]?
@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 [email protected]?
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 [email protected]?
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, items, @viewport1, angles))
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 [email protected]?
update_smokes if [email protected]?
update_particles if [email protected]?
update_parts if [email protected]?
update_array if !@array_weapons.empty?
update_drops if [email protected]?
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) 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 [email protected]_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 [email protected]_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 [email protected]_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 [email protected]_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 [email protected]?
@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 [email protected]_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 [email protected]_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 [email protected]_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 [email protected]_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?
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?
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 particolare questo è il comando che imposta la distanza di "allerta" dei nemici
Default_Follow = 0 # Valor padrão para visão dos inimigos
lo impostato a 0 ma rimane comunque attivo. Qualcuno può aiutarmi? Grazie in anticipo.
Bullpup Shooting engine problema
in Supporto Script
Inviato · Report reply
up