Переношу всё из дневников из-за лимита символов... Чорт.
Данные статьи рекомендуется читать новичкам, или тем, у кого нет идей.
Магазин, использующий HP главного героя
Можно использовать для каких нибудь баффов или улучшений. Основная задача - сделать проверку HP. Создать общее событие с проверки переменной, привязанной к HP. Дальше осталось делать магазины, отнимающая некоторое кол-во HP, а переменная требуется для создания лимита и чтобы герой не умер. Данная фича будет в IIW.
Механика собственности
Заезжанная, но нестандартная для roguelike. Если игрок покупает собственность, он будет получать некоторые бонусы после окончания подземелий. Например, купив кузницу, можно получить рандомный меч, или новую броню. Купив медпункт, каждый заход будет даваться некоторое кол-во аптечек. Ну можно и башню мага, где можно обучиться магии. Идей полно, нужно только подумать.
"Рандомная генерация" снаряжения
На мейкере без скриптов нельзя сделать генерацию, но можно сделать псевдомодель этой фичи. В пример берём пистолет. Разможаем его на 20 штук, и начинаем давать ему префиксы и менять характеристики. Проблема будет при получении этого оружия, ведь в обычной боёвке можно позволить 3 разных вещи. Можно это решить с помощью коробки с рандомным оружием. Выглядит данная механика не очень, но она нестандартная для мейкера.
Сохранения из метройдваний.
Не видел таких на мейкере, потому что не искал, но не суть)
Они заключаются в расстановке в некоторых точках и невозможностью сохранится в любом месте. Для удобства, вам следует лучше взять два скрипта, которые позже выложу. Сначало берем скрипт на автосохранения
СпойлерСкрипт:
Код:
#===============================================================================
#
# DT's Autosave
# Author: DoctorTodd
# Date (06/22/2012)
# Version: (1.0.0) (VXA)
# Level: (Simple)
# Email: Todd@beacongames.com
#
#===============================================================================
#
# NOTES: 1)This script will only work with ace.
#
#===============================================================================
#
# Description: Saves the game when transferring the map, before battle,
# and opening the menu (all optional).
#
# Credits: Me (DoctorTodd)
#
#===============================================================================
#
# Instructions
# Paste above main.
# Call using Autosave.call
#
#===============================================================================
#
# Free for any use as long as I'm credited.
#
#===============================================================================
#
# Editing begins 37 and ends on 50.
#
#===============================================================================
module ToddAutoSaveAce
#Max files (without autosave).
MAXFILES = 2
#Autosave file name.
AUTOSAVEFILENAME = "Autosave"
#Autosave before battle?
AUTOSAVEBB = false
#Autosave when menu opened?
AUTOSAVEM = false
#Autosave when changing map?
AUTOSAVETM = false
end
#==============================================================================
# ** Autosave
#------------------------------------------------------------------------------
# This module contains the autosave method. This is allows you to use the
# "Autosave.call" command.
#==============================================================================
module Autosave
#--------------------------------------------------------------------------
# * Call method
#--------------------------------------------------------------------------
def self.call
DataManager.save_game_without_rescue(0)
end
end
#==============================================================================
# ** DataManager
#------------------------------------------------------------------------------
# This module manages the database and game objects. Almost all of the
# global variables used by the game are initialized by this module.
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# * Maximum Number of Save Files
#--------------------------------------------------------------------------
def self.savefile_max
return ToddAutoSaveAce::MAXFILES + 1
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs the map screen processing.
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Preprocessing for Battle Screen Transition
#--------------------------------------------------------------------------
def pre_battle_scene
Graphics.update
Graphics.freeze
@spriteset.dispose_characters
BattleManager.save_bgm_and_bgs
BattleManager.play_battle_bgm
Sound.play_battle_start
Autosave.call if ToddAutoSaveAce::AUTOSAVEBB
end
#--------------------------------------------------------------------------
# * Call Menu Screen
#--------------------------------------------------------------------------
def call_menu
Sound.play_ok
SceneManager.call(Scene_Menu)
Window_MenuCommand::init_command_position
Autosave.call if ToddAutoSaveAce::AUTOSAVEM
end
#--------------------------------------------------------------------------
# * Post Processing for Transferring Player
#--------------------------------------------------------------------------
def post_transfer
case $game_temp.fade_type
when 0
Graphics.wait(fadein_speed / 2)
fadein(fadein_speed)
when 1
Graphics.wait(fadein_speed / 2)
white_fadein(fadein_speed)
end
@map_name_window.open
Autosave.call if ToddAutoSaveAce::AUTOSAVETM
end
end
Дальше в местах "сохранения" добавляем выполнение скрипта Autosave.call . Рекомендую ставить её после всех действий, кроме полного восстановления. И вы скажете, что игрокам будет скучно бегать за сохранялками в жопу мира. Тут два решения. Или делайте сохранялки по системе (начало, середина, конец) или добавьте какие нибудь порталы (как Кастлваниях, да). И ещё одна проблема, "я спешу, и я не успею добежать до сохранения!" И тут вбегает второй скрипт. Он позволит сохранить игру один раз и выйти из игры. После входа предложат продолжить из этого сохранения. Данная фича взята из Castlevania: Aria of Sorrow (где я её в первый раз увидел).
СпойлерСкрипт 2:
Код:
#===============================================================================
# RGSS3: Quicksave v.1.1
#===============================================================================
# by Cryranos/Metatron
#===============================================================================
# Instructions: Paste In the Materials section. Edit Module if desired.
#===============================================================================
# This script allows the player to quickly save and quit the game. Upon
# reopening the game, the player will be prompted to load the game. If it is
# loaded or declined, the quicksave file will be deleted.
#===============================================================================
module CryQuicksave
QSFile = "Qsave.qsav" # Filename for the quicksave.
MenuOp = true # Add a quicksave command to the menu?
QSVNam = "Перерыв" # This is what the menu command will show up as
# These are the Quicksave help and the Quickload help. Insert the second line
# with \n.
QSVMess = "Выходим?\nТвой прогресс будет сохранен."
QSVLoad = "Входим?\nМожешь отменить свой выбор и выйти."
# These are for those who wish to bind the quicksave function to a key rather
# than to the menu.
UseKey = true
QSVKey = Input::F5
end
module DataManager
def self.quicksave_file_exists?
!Dir.glob(CryQuicksave::QSFile).empty?
end
def self.make_quicksave_filename
sprintf(CryQuicksave::QSFile)
end
def self.quicksave_game
self.quicksave_game_without_rescue
end
def self.quicksave_game_without_rescue
File.open(make_quicksave_filename, "wb") do |file|
$game_system.on_before_save
Marshal.dump(make_save_header, file)
Marshal.dump(make_save_contents, file)
end
end
def self.quickload_game
self.load_quicksave_without_rescue
self.dispose_quicksave
end
def self.load_quicksave_without_rescue
File.open(make_quicksave_filename, "rb") do |file|
Marshal.load(file)
extract_save_contents(Marshal.load(file))
reload_map_if_updated
end
end
def self.dispose_quicksave
File.delete(make_quicksave_filename) rescue nil
end
end
module SceneManager
def self.first_scene_class
if $BTEST
Scene_Battle
elsif DataManager.quicksave_file_exists?
Scene_QuickLoadTitle
else
Scene_Title
end
end
end
if CryQuicksave::UseKey
class Game_Player < Game_Character
alias quicksave_update update
def update
quicksave_update
if Input.trigger?(CryQuicksave::QSVKey)
SceneManager.call(Scene_Quicksave)
end
end
end
end
class Window_QuicksaveCommand < Window_Command
def initialize
super(0, 0)
update_placement
end
def window_width
return 160
end
def update_placement
self.x = (Graphics.width - width) / 2
self.y = (Graphics.height * 1.6 - height) / 2
end
def make_command_list
add_command("Да", :confirm)
add_command("Нет", :decline)
end
end
class Scene_Quicksave < Scene_MenuBase
def start
super
create_command_window
create_help_window
end
def help_window_text
CryQuicksave::QSVMess
end
def create_command_window
@command_window = Window_QuicksaveCommand.new
@command_window.set_handler(:confirm, method(:command_quicksave))
@command_window.set_handler(:decline, method(:command_decline))
@command_window.set_handler(:cancel, method(:return_scene))
end
def create_help_window
@help_window = Window_Help.new(2)
@help_window.set_text(help_window_text)
end
def command_quicksave
DataManager.quicksave_game
fadeout_all
SceneManager.exit
end
def command_decline
SceneManager.return
end
def return_scene
SceneManager.return
end
end
class Scene_QuickLoadTitle < Scene_Title
def start
super
SceneManager.clear
Graphics.freeze
create_background
create_foreground
create_command_window
play_title_music
create_help_window
end
def help_window_text
CryQuicksave::QSVLoad
end
def create_command_window
@command_window = Window_QuicksaveCommand.new
@command_window.set_handler(:confirm, method(:command_quickload))
@command_window.set_handler(:decline, method(:command_decline))
@command_window.set_handler(:cancel, method(:return_scene))
end
def create_help_window
@help_window = Window_Help.new(2)
@help_window.set_text(help_window_text)
end
def command_quickload
close_command_window
DataManager.quickload_game
Sound.play_load
fadeout_all
$game_system.on_after_load
SceneManager.goto(Scene_Map)
end
def command_decline
DataManager.dispose_quicksave
close_windows
SceneManager.goto(Scene_Title)
end
def return_scene
fadeout_all
SceneManager.exit
end
end
if CryQuicksave::MenuOp
class Window_MenuCommand
alias add_qsv_command add_save_command
def add_save_command
add_qsv_command
add_command(CryQuicksave::QSVNam, :qsav)
end
end
class Scene_Menu
alias add_qsv_to_commands create_command_window
def create_command_window
add_qsv_to_commands
@command_window.set_handler(:qsav, method(:command_quicksave))
end
def command_quicksave
SceneManager.call(Scene_Quicksave)
end
end
end
Генерация партии (классы,имена)
Итак, мы хотим сделать РПГ? Мы хотим создать партию с разными классами и героями? Пожалуйста!
В качестве демки я выбрал LW Rpg. Я чуть чуть её изменил и добавил "генерацию" партии. Можете посмотреть (и поиграть ( нет)). https://yadi.sk/d/SZqjibCx34Jx6b.
Генерация персонажа (внешний вид)
Вы это видели в IIW... Но всё равно расскажу.
Берем две переменных. Одна будет "голова", а другая "туловище". На каждую переменную ставим условие и смену графики гг. При туловище нужно учитывать что нужно иметь точно (или не очень) такую же голову. Это решается проверкой переменной "голова". А при смене головы лучше и проверять переменную "туловище"
Скрины нихрена не загрузились, так что скачивайте I in Wastland (знаю что там ошибка, но всё же...) и ищите генерацию там)
Эффект холода
Вероятно, не очень интересная, но возможная идея. Она заключается в баффе, который вы создаёте сами, и места, где холод будет царствовать. Не будем делать настолько жестокий холод, как в Заморозке, но он будет не полезен ГГ. Итак, во всех дверях и проходах на улицу(или холодильник) мы ставим этот бафф и переключатель на включение холода. Если надо создать фазы холода, вам потребуется несколько баффов, и общее событие с Ждать, и когда период пройдёт, накладывается вторая фаза. Додумывать не буду, это дело за вами.
Исследование или обучение использования оружия
Вы никогда не задумывались, что в некоторых играх, герои могут носить любое оружие, без практики в его использовании. Сейчас попробуем сделать навык владения оружием. Есть два способа - группой или одиночное. Группой легче, но нелогично, а одиночным тяжело и логично. Надеюсь вы поняли, о чем я? Итак... Группа - одна переменная, которая означает мастерство владения одним видом оружия. Например, изучив дробовик, ГГ будет одинаково хорошо стрелять из всех дробовиков. Одиночное - (кол-во переменных = кол-ву оружия) на каждое оружие своя переменная. Фактически, гг изучает каждое оружие по новой, что не даст игроку сосредоточится на основной цели, практически гринд опыта. Данные механики можно скомбинировать, например похожее оружие гг будет использовать исскуснее, чем оружие другого подтипа.
СпойлерКак сделать на практике?:
Итак, делаем переменные. И делаем или бафф, или по три-четыре копии вашего оружия. Дальше требуется после любого боя (или в условиях боя) давать в плюс к той переменной, к которой привязан вид (оружие). Дальше делаем общее событие, в котором будут все условия. Условия в основном будут на смену оружия на копию, или снятие и смену баффа.
Наемники
Два раза видел, что об этом спрашивали в группе Вк. Напишу свою версию здесь.
Наемник - это что-то типо временного помощника в партии, и нужно сначала придумать, через сколько времени соскачит наш помощник.
Можно сделать самым легким и действенным способом - через некоторое количество боёв. И логично, и легко. К тому же можно сделать так, что бы "продлить" защиту. Итак давайте сделаем это на практике. Делаем в героях наёмника, даем имя, спрайт, ставим класс. Дальше ставим событие в том месте, где его можно нанять. И делаем условие по деньгам. Дальше тупо после каждого боя прибавляем к переменной в которой будет периуд действия защиты наёмника. Дальше делаем наёмнику (через общие события) фразу, например: "Продлевать?" и выбор. Нужно отметить то, что наёмником наверное нельзя будет помыкать и ему можно сделать автобой.
Массив на переменных
Данная механика нестабильна и узконаправленная, но она сокращает количество переключателей и переменных.
Основная фишка этой механики, сократить количество переключателей. Она может применятся в крафте (и его производных, типо алхимии) различных основанных на диалогах или выборах играх (например визуальные новеллы (кому сбрендит это делать на мейкере)) ну и просто сгруппировать внутренности событий.
Как это сделать?
Сначало нужно посмотреть на переменную в таком виде (00000000) каждый ноль это отдельный переключатель. И нужно понять, что каждая единица это первая переменная, каждая десятка это вторая переменная и сотня третья переменная, и так далее...
Нужно запомнить что мы должны прибавлять и вычитать а не приравнивать к нужному числу, и иначе весь массив перестанет работать. Используйте это на свой страх и риск.
Последний раз редактировалось Gforce_Vtk; 23.11.2017 в 12:18.
Социальные закладки