Para ser interessante, cada jogo deve ser único. Ter uma característica que o torne especial. Eu sou programador, então gosto de dar uma cara nova aos jogos através de scripts. Não precisa nada sofisticado, pequenas mudanças podem fazer grandes diferenças.
Criei este tópico para listar os scripts personalizados que eu criei atendendo alguns pedidos do fórum. Eles não são inovadores, nem exclusivos, são apenas diferentes. Talvez você encontre algum que lhe seja útil. Alguns são simples modificações nos scripts padrão, mas outros são completamente novos.
ATENÇÃO: regras modificadas, apesar de que este não é um tópico para fazer pedidos, se você tiver alguma dúvida, pedido, modificação ou sugestão sobre algum script deste tópico, poste aqui. Porém, antes de postar considere postar no tópico original ou criar um tópico numa seção adequada. Também respondo dúvidas e pedidos por PM. Mas por favor, apenas assunto relacionado aos scripts presentes neste tópico.
[VX] Recuperar HP ou MP por passo - versão VX - 22-01-09
Este não foi pedido, foi por necessidade minha mesmo. Preciso que os jogos passem rápido para poder fazer testes exaustivamente até corrigir todos os bugs :D
Este script tem o propósito de pular alguns graphics updates ou "graphics frames", de forma que o jogo passe mais rápido.
Você pode acionar o Frame Skip através de uma tecla apenas durante o Play Test; e
Você pode controlar o Frame Rate através de uma variável (opcional).
Este script permite chamar um evento comum ao entrar ou sair de determinado mapa, tornando mais fácil a programação de mapas com efeitos especiais, como cor de tela (mapas noturnos), efeitos de clima, etc. O objetivo é que você não precise programar todos esses efeitos em todos os eventos de teletransporte do mapa.
Este pedido era para XP, eu fiz uma pequena confusão e criei para VX (abaixo). Só percebi o erro depois que as duas versões estavam prontas. Esta versão para XP também foi um pedido de NicholasRg.
Esta é uma HUD para um só personagem que mostra HP, SP, Exp, equipamentos e itens. É configurável e, apesar de poucas opções, e possível criar efeitos visuais bem diferentes. A vantagem da versão XP é mais espaço para itens devido a resolução maior.
Esta é uma HUD para um só personagem que mostra HP, MP, Exp, equipamentos e itens. É configurável e, apesar de poucas opções, e possível criar efeitos visuais bem diferentes.
Este não foi um pedido, mas foi criado especialmente para o SuperCueca usar no Flux.
Este script cria um "deslocamento" no array de pictures para que você use mais que 20 pictures no RPG Maker VX. Você usa o comando de evento Mostrar Imagem normalmente, porém junto com uma variável que indica o deslocamento.
Este script serve para retornar para o local onde o jogo foi salvo, ao invés de voltar ao título. Ele permite que você salve o local ao teletransportar ou salvar o jogo.
Também permite recuperar uma percentagem do seu HP ou SP e perder uma percentagem do dinheiro ou experiência.
$INIMIGO = 1
class Window_Inimigo < Window_Base
def initialize
super(0,0,200,WLH+32)
self.visible = true
@opening = false
@closing = false
self.openness = 0
@inimigo = 0
end
def update
super
if @inimigo != $game_variables[$INIMIGO]
@inimigo = $game_variables[$INIMIGO]
if @inimigo == 0
self.close
else
self.open
end
end
refresh
end
def refresh
if $data_enemies[@inimigo] != nil
nome = $data_enemies[@inimigo].name
else
nome = ""
end
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, self.width - 32, WLH, nome)
end
end
class Scene_Map < Scene_Base
alias inimigo_start start
def start
inimigo_start
@inimigo = Window_Inimigo.new
end
alias inimigo_terminate terminate
def terminate
@inimigo.dispose
inimigo_terminate
end
alias inimigo_update update
def update
inimigo_update
@inimigo.update
end
end
Amigo:
Código:
$AMIGO = 2
class Window_Amigo < Window_Base
def initialize
super(282,208,262,WLH*2+32)
self.visible = true
@opening = false
@closing = false
self.openness = 0
@amigo = 0
end
def update
super
if @amigo != $game_variables[$AMIGO]
@amigo = $game_variables[$AMIGO]
if @amigo == 0
self.close
else
self.open
end
end
refresh
end
def refresh
if $game_actors[@amigo] != nil
actor = $game_actors[@amigo]
else
self.contents.clear
return
end
self.contents.clear
self.contents.font.color = normal_color
draw_actor_name(actor, 0, 0)
draw_actor_state(actor, 110, 0, 48)
draw_actor_level(actor, 174, 0)
draw_actor_hp(actor, 0, 24, 120)
draw_actor_mp(actor, 160, 24, 70)
end
end
class Scene_Map < Scene_Base
alias amigo_start start
def start
amigo_start
@amigo = Window_Amigo.new
end
alias amigo_terminate terminate
def terminate
@amigo.dispose
amigo_terminate
end
alias amigo_update update
def update
amigo_update
@amigo.update
end
end
Se você trocar as linhas:
Código:
if $game_actors[@amigo] != nil
actor = $game_actors[@amigo]
por
Código:
if $game_party.members[@amigo-1] != nil
actor = $game_party.members[@amigo-1]
Para usar o índice no grupo (1 à 4) no lugar da ID do herói.
[XP] Desativar armas (Se garantir nos punhos) - 01-12-2008
Pedido de Blacksoul.
Com este script você pode proibir que um (ou todos) os heróis troquem de arma. O objetivo original era forçar o herói ficar desarmado.
Código:
$PUNHOS = 1 # ID da switch que ativa os "punhos"
$PERSONAGEM = 1 # ID do personagem "metidão", ou 0 para todos
class Window_EquipRight < Window_Selectable
def draw_item_name(item, x, y)
if item == nil
return
end
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == system_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name)
end
def refresh
self.contents.clear
@data = []
@data.push($data_weapons[@actor.weapon_id])
@data.push($data_armors[@actor.armor1_id])
@data.push($data_armors[@actor.armor2_id])
@data.push($data_armors[@actor.armor3_id])
@data.push($data_armors[@actor.armor4_id])
@item_max = @data.size
if $game_switches[$PUNHOS] and ($PERSONAGEM == 0 or @actor.id == $PERSONAGEM)
self.contents.font.color = disabled_color
self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon)
draw_item_name(@data[0], 92, 32 * 0)
self.contents.font.color = system_color
else
self.contents.font.color = system_color
self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon)
draw_item_name(@data[0], 92, 32 * 0)
end
self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.armor1)
self.contents.draw_text(4, 32 * 2, 92, 32, $data_system.words.armor2)
self.contents.draw_text(4, 32 * 3, 92, 32, $data_system.words.armor3)
self.contents.draw_text(5, 32 * 4, 92, 32, $data_system.words.armor4)
draw_item_name(@data[1], 92, 32 * 1)
draw_item_name(@data[2], 92, 32 * 2)
draw_item_name(@data[3], 92, 32 * 3)
draw_item_name(@data[4], 92, 32 * 4)
end
end
class Scene_Equip
def update_right
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Menu.new(2)
return
end
if Input.trigger?(Input::C)
if @actor.equip_fix?(@right_window.index) or
($game_switches[$PUNHOS] and ($PERSONAGEM == 0 or @actor.id == $PERSONAGEM))
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
@right_window.active = false
@item_window.active = true
@item_window.index = 0
return
end
if Input.trigger?(Input::R)
$game_system.se_play($data_system.cursor_se)
@actor_index += 1
@actor_index %= $game_party.actors.size
$scene = Scene_Equip.new(@actor_index, @right_window.index)
return
end
if Input.trigger?(Input::L)
$game_system.se_play($data_system.cursor_se)
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
$scene = Scene_Equip.new(@actor_index, @right_window.index)
return
end
end
end
[VX] Menu estilo Crash Bandicoot Três - 27-11-2008
# ATENÇÃO: Configure aqui.
################################################################################
# Coloque qualquer nome no lugar de "Menu Crash" (entre aspas, por favor)
# Se quiser que não apareça nada, coloque apenas: ""
$CRASH_NOME = "Menu Crash"
# Coloque a ID da variável que vai aparecer a porcentagem
$CRASH_VARIAVEL = 1
# Coloque a lista de IDs dos itens. Pode ser um, dois, três ou mais...
# Mas, se forem muitos vai aparecer remontado
$CRASH_ITENS = [1,8]
# Mistura de nomes em inglês e português é horrível, se quiser mudar é aqui
$CRASH_COMANDOS = ["Continuar", "Load", "Sair"]
# ATENÇÃO: Se não souber o que está fazendo, não mude daqui para baixo.
# Mas, se souber boa sorte!
################################################################################
class Window_CrashCmd < Window_Command
def initialize(width)
super(width,$CRASH_COMANDOS)
self.y = 312 # 416 - self.height
end
def draw_item(index, enabled = true)
rect = item_rect(index)
rect.x += 4
rect.width -= 8
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(rect, @commands[index], 1)
end
end
class Game_Map
attr_reader :map_id
def mpname
$mpname = load_data("Data/MapInfos.rvdata")
$mpname[@map_id].name
end
end
class Window_CrashMapa < Window_Base
def update
super
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, self.width - 32, WLH, $game_map.mpname, 1)
end
end
class Window_CrashNome < Window_Base
def update
super
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, self.width - 32, WLH, $CRASH_NOME, 1)
end
end
class Window_CrashVariavel < Window_Base
def update
super
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, self.width - 32, WLH,
"#{$game_variables[$CRASH_VARIAVEL]}%", 1)
end
end
class Window_CrashItem < Window_Base
attr_accessor :itens
def initialize(x, y, width, height)
super(x, y, width, height)
@itens = []
end
def update
super
self.contents.clear
self.contents.font.color = normal_color
spc = (self.height - 32) / itens.length
y = 0
for item in itens do
i = (spc - WLH) / 2
draw_icon(item.icon_index, 0, y + i, true)
self.contents.draw_text(32, y + i, self.width - 32 - 50, WLH, item.name)
self.contents.draw_text(0, y + i, self.width - 32, WLH,
sprintf(": %2d", $game_party.item_number(item)), 2)
y += spc
end
end
end
class Scene_Menu < Scene_Base
def initialize(menu_index = 0)
@menu_index = menu_index
end
def start
super
create_menu_background
@wmapa = Window_CrashMapa.new(0, 256, 294, 56)
@wcomando = Window_CrashCmd.new(294)
if $CRASH_NOME != nil and $CRASH_NOME != ""
@wnome = Window_CrashNome.new(294, 200, 250, 56)
end
@witem = Window_CrashItem.new(294, 256, 250, 104)
@wvariavel = Window_CrashVariavel.new(294, 360, 250, 56)
for item in $data_items
for i in $CRASH_ITENS
if item.id == i
@witem.itens.push(item)
end
end
end
end
def terminate
super
dispose_menu_background
@wvariavel.dispose
@witem.dispose
if $CRASH_NOME != nil and $CRASH_NOME != ""
@wnome.dispose
end
@wcomando.dispose
@wmapa.dispose
end
def update
super
update_menu_background
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
end
if Input.trigger?(Input::C)
case @wcomando.index
when 0 # Continuar
Sound.play_decision
$scene = Scene_Map.new
when 1 # Load
$scene = Scene_File.new(false, false, true)
when 2 # Sair
$scene = Scene_End.new
end
end
@wmapa.update
@wcomando.update
if $CRASH_NOME != nil and $CRASH_NOME != ""
@wnome.update
end
@witem.update
@wvariavel.update
end
end
Menu apenas com Item, Equipamento e Fim de Jogo. Sem MP.
Código:
class Scene_Menu < Scene_Base
def create_command_window
s1 = Vocab::item
s2 = Vocab::equip
s3 = Vocab::game_end
@command_window = Window_Command.new(160, [s1, s2, s3])
@command_window.index = @menu_index
if $game_party.members.size == 0 # Se não houver membros na equipe
@command_window.draw_item(0, false) # Desabilita "Items"
@command_window.draw_item(1, false) # Desabilita "Equipamentos"
end
end
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 2
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0 # Item
$scene = Scene_Item.new
when 1 # Equipamento
start_actor_selection
when 2 # Fim de jogo
$scene = Scene_End.new
end
end
end
def update_actor_selection
if Input.trigger?(Input::B)
Sound.play_cancel
end_actor_selection
elsif Input.trigger?(Input::C)
$game_party.last_actor_index = @status_window.index
Sound.play_decision
$scene = Scene_Equip.new(@status_window.index)
end
end
end
class Scene_End < Scene_Base
def return_scene
$scene = Scene_Menu.new(2)
end
end
class Scene_Equip < Scene_Base
def return_scene
$scene = Scene_Menu.new(1)
end
end
class Window_MenuStatus < Window_Selectable
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
x = 104
y = actor.index * 96 + WLH / 2
draw_actor_name(actor, x, y)
draw_actor_class(actor, x + 120, y)
draw_actor_level(actor, x, y + WLH * 1)
draw_actor_state(actor, x, y + WLH * 2)
draw_actor_hp(actor, x + 120, y + WLH * 1)
#draw_actor_mp(actor, x + 120, y + WLH * 2)
end
end
end
class Window_BattleStatus < Window_Selectable
def draw_item(index)
rect = item_rect(index)
rect.x += 4
rect.width -= 8
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
actor = $game_party.members[index]
draw_actor_name(actor, 4, rect.y)
draw_actor_state(actor, 114, rect.y, 48)
draw_actor_hp(actor, 174, rect.y, 120)
#draw_actor_mp(actor, 310, rect.y, 70)
end
end
[VX] Controle de Tempo (por passos), Sono e Fome - 14-11-2008
Para ter scripts únicos eu sigo um conceito: faço meu jogo e desenvolvo scripts para ele, depois de alguns meses eu posso distribuir os scripts para qualquer um utilizar (claro que ainda não tenho nenhum jogo pronto, mas 2 scripts quase prontos e 3 em desenvolvimento)
__________________
Link para o concurso AQUI - Me coloca de indicação, se preferir.
Pessoal, quando eu disse único não é porque é uma inovação ou porque é exclusivo. É porque foram feitos para atender pedidos dos membros, portanto com as características exatas que eles pediram. Não são scripts genéricos, não são inovadores nem exclusivos, são apenas diferentes.