- Сообщений: 1274
- Спасибо получено: 1307
[XP] Panic Mode
13 года 1 нед. назад #59991
от caveman
caveman создал тему: [XP] Panic Mode
Понадобилось сделать режим panic (drunk, confuse) героя, когда он ходит в обратную сторону, то есть, нажмешь вправо - он влево идет и так далее. Интернеты, обычно, предлагают простой способ через Common Event, например,
тут .
Проблема в том, что кроме евента отрабатывает и скрипт карты, из-за чего герой, по нажатию клавиши, вместо одной клетки ходит на две. Конечно, паники это добавляет
, но больше, все-таки, неудобств игроку.
Поэтому я написал небольшой скрипт, который делает режим паники более корректным. Вставьте его над Main, и в игре просто вызывайте, когда нужно скрипт $game_player.set_panic_mode(1) для паники, и $game_player.set_panic_mode(0) для обычного движения.
Демку, как обычно, прилагаю
тут .
Проблема в том, что кроме евента отрабатывает и скрипт карты, из-за чего герой, по нажатию клавиши, вместо одной клетки ходит на две. Конечно, паники это добавляет
Поэтому я написал небольшой скрипт, который делает режим паники более корректным. Вставьте его над Main, и в игре просто вызывайте, когда нужно скрипт $game_player.set_panic_mode(1) для паники, и $game_player.set_panic_mode(0) для обычного движения.
Демку, как обычно, прилагаю
ВНИМАНИЕ: Спойлер!
Code:
class Game_Character
alias panic_initialize initialize
def initialize
@panic_mode = 0
panic_initialize
end
# 1 - Panic, 0 - Normal
def set_panic_mode(mode)
@panic_mode = mode
end
end
class Game_Player
alias panic_update update
def update
last_moving = moving?
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
case Input.dir4
when 2
@panic_mode == 0 ? move_down : move_up
when 4
@panic_mode == 0 ? move_left : move_right
when 6
@panic_mode == 0 ? move_right : move_left
when 8
@panic_mode == 0 ? move_up : move_down
end
end
last_real_x = @real_x
last_real_y = @real_y
super
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
$game_map.scroll_down(@real_y - last_real_y)
end
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
$game_map.scroll_left(last_real_x - @real_x)
end
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
$game_map.scroll_right(@real_x - last_real_x)
end
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
$game_map.scroll_up(last_real_y - @real_y)
end
unless moving?
if last_moving
result = check_event_trigger_here([1,2])
if result == false
unless $DEBUG and Input.press?(Input::CTRL)
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
if Input.trigger?(Input::C)
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end
Спасибо сказали: AnnTenna, strelokhalfer
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- strelokhalfer
-
- Не в сети
- Живу я здесь
-
- Знатный грамотей
Скрыть
Больше
- Сообщений: 1640
- Спасибо получено: 1080
13 года 1 нед. назад - 13 года 1 нед. назад #59995
от strelokhalfer
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
strelokhalfer ответил в теме [XP] Panic Mode
А можешь для Aсe сделать?
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Последнее редактирование: 13 года 1 нед. назад пользователем strelokhalfer.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
13 года 1 нед. назад #60001
от caveman
caveman ответил в теме [XP] Panic Mode
Да, наменяли всякого в ace, но держи:
ВНИМАНИЕ: Спойлер!
Code:
class Game_Character
alias panic_initialize initialize
def initialize
@panic_mode = 0
panic_initialize
end
# 1 - Panic, 0 - Normal
def set_panic_mode(mode)
@panic_mode = mode
end
end
class Game_CharacterBase
alias panic_move_straight move_straight
def move_straight(d, turn_ok = true)
if @panic_mode == 1 #2 <-> 8, 4 <-> 6
d = 10 - d
end
@move_succeed = passable?(@x, @y, d)
if @move_succeed
set_direction(d)
@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)
check_event_trigger_touch_front
end
end
end
Спасибо сказали: DeadElf79, strelokhalfer
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 8 мес. назад #63479
от caveman
caveman ответил в теме [XP] Panic Mode
Попросили только что сделать систему движения как в первых Resident Evil (крестовина: вверх - вперед, вниз - пятится, влево - поворот влево, вправо - поворот вправо). Сделал, и решил заодно тут выложить скрипт (включается аналогично Panic Mode).
yadi.sk/d/YHjO7u7Z7vdce ссылочка (обращаю внимание, что попой вперед столкновения с евентами не срабатывают, и я думаю, что это правильно)
ВНИМАНИЕ: Спойлер!
Code:
class Game_Character
alias re_initialize initialize
def initialize
@re_mode = 0
re_initialize
end
# 1 - Panic, 0 - Normal
def set_re_mode(mode)
@re_mode = mode
end
end
class Game_Player
def move_by_input
return if !movable? || $game_map.interpreter.running?
if @re_mode == 1
if Input.dir4 > 0
if Input.dir4 == 2 # backward
move_backward
elsif Input.dir4 == 8 # forward
move_forward
elsif Input.dir4 == 4 && Input.repeat?(:LEFT) # turn left
turn_left_90
elsif Input.dir4 == 6 && Input.repeat?(:RIGHT)# turn right
turn_right_90
end
end
else
move_straight(Input.dir4) if Input.dir4 > 0
end
end
end
yadi.sk/d/YHjO7u7Z7vdce ссылочка (обращаю внимание, что попой вперед столкновения с евентами не срабатывают, и я думаю, что это правильно)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- KoHcTPyKTop
-
- Не в сети
- Захожу иногда
-
Скрыть
Больше
- Сообщений: 186
- Спасибо получено: 16
12 года 8 мес. назад #63480
от KoHcTPyKTop
KoHcTPyKTop ответил в теме [XP] Panic Mode
Отлично. Использую этот скрипт для того, чтобы герой был пьяный)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.094 секунд
