mirror of
https://forgejo.xatacraft.ru/Sunshine/mkxp-sunshine.git
synced 2026-08-19 13:29:54 +00:00
780 lines
21 KiB
Ruby
780 lines
21 KiB
Ruby
PROTO_TEXT = "put me in the big portal"
|
|
CEDRIC_TEXT = "put me in the big portal"
|
|
RUE_TEXT = "put me in the big portal"
|
|
|
|
SUPPORTED_DE = ["cinnamon", "gnome", "mate", "kde", "xfce"]
|
|
|
|
module Script
|
|
def self.px
|
|
logpos($game_player.x, $game_player.real_x, $game_player.direction == 6)
|
|
end
|
|
|
|
def self.py
|
|
logpos($game_player.y, $game_player.real_y, $game_player.direction == 2)
|
|
end
|
|
|
|
def self.is_name_swear
|
|
test_string = $game_oneshot.player_name.downcase
|
|
if ["fuck", "shit", "ass", "cock", "damn", "penis", "tiddy", "titty", "cunt", "fag", "whore"].any? { |swear| test_string.include? swear }
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.is_name_niko
|
|
test_string = $game_oneshot.player_name.downcase
|
|
if test_string == "niko"
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.is_name_like_niko
|
|
test_string = $game_oneshot.player_name.downcase
|
|
if ["nico", "nikko", "nicco", "nikoh", "nicoh"].any? { |name| test_string == name }
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.is_name_like_mom_dad
|
|
test_string = $game_oneshot.player_name.downcase
|
|
if ["mom", "dad", "mommy", "daddy", "mama", "papa"].any? { |name| test_string == name }
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.is_name_gross
|
|
test_string = $game_oneshot.player_name.downcase
|
|
if ["poo", "pee", "fart", "stinky", "piss", "shit", "slimy"].any? { |name| test_string == name }
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.start_bruteforce
|
|
$game_oneshot.bruteforce_start = Graphics.frame_count
|
|
end
|
|
|
|
def self.check_bruteforce
|
|
if($game_oneshot.bruteforce_start == nil)
|
|
$game_oneshot.bruteforce_start = Graphics.frame_count
|
|
end
|
|
time_passed = Graphics.frame_count - $game_oneshot.bruteforce_start
|
|
if(time_passed > (2 * 60 * 63014))
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
def self.skip_bruteforce
|
|
$game_oneshot.bruteforce_start -= 62800*2*60
|
|
end
|
|
|
|
def self.lose_all_items
|
|
for i in 1..99
|
|
$game_party.lose_item(i, 99)
|
|
end
|
|
end
|
|
|
|
def self.bruteforce_vars
|
|
if($game_oneshot.bruteforce_start == nil)
|
|
$game_oneshot.bruteforce_start = Graphics.frame_count
|
|
end
|
|
time_passed = Graphics.frame_count - $game_oneshot.bruteforce_start
|
|
counts_tried = time_passed / (2 * 60)
|
|
digit1 = counts_tried % 10;
|
|
digit2 = ((counts_tried % 100) - digit1) / 10
|
|
digit3 = ((counts_tried % 1000) - (digit2 * 10) - digit1) / 100
|
|
digit4 = ((counts_tried % 10000) - (digit3 * 100) - (digit2 * 10) - digit1) / 1000
|
|
digit5 = ((counts_tried % 100000) - (digit4 * 1000) - (digit3 * 100) - (digit2 * 10) - digit1) / 10000
|
|
$game_variables[26] = digit5
|
|
$game_variables[27] = digit4
|
|
$game_variables[28] = digit3
|
|
$game_variables[29] = digit2
|
|
$game_variables[30] = digit1
|
|
end
|
|
|
|
def self.fix_footsplashes(xDelta, yDelta)
|
|
$scene.fix_footsplashes(xDelta, yDelta)
|
|
end
|
|
|
|
def self.move_player_relative(x, y)
|
|
$game_player.x += x
|
|
$game_player.y += y
|
|
$game_player.real_x += x * 4 * 32
|
|
$game_player.real_y += y * 4 * 32
|
|
$game_map.display_x += x * 4 * 32
|
|
$game_map.display_y += y * 4 * 32
|
|
end
|
|
|
|
def self.move_player(x, y)
|
|
xDelta = x - $game_player.x
|
|
yDelta = y - $game_player.y
|
|
Script.move_player_relative(xDelta, yDelta)
|
|
end
|
|
|
|
def self.eve_x(name)
|
|
for event in $game_map.events.values
|
|
if event.name == name
|
|
return logpos(event.x, event.real_x, event.direction == 6)
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
def self.eve_y(name)
|
|
for event in $game_map.events.values
|
|
if event.name == name
|
|
return logpos(event.y, event.real_y, event.direction == 2)
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
def self.countdown_over
|
|
equinox = Time.new(2017, 03, 27)
|
|
diff = equinox - Time.now
|
|
if(diff <= 0)
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.countdown_extend_over
|
|
equinox = Time.new(2017, 03, 27)
|
|
diff = equinox - Time.now
|
|
if(diff <= 0)
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.cdown_update(equinox)
|
|
diff = equinox - Time.now
|
|
if(diff < 0)
|
|
diff = 0
|
|
end
|
|
seconds = diff % 60
|
|
minutes = ((diff - seconds)/ 60) % 60
|
|
hours = ((((diff - seconds)/ 60) - minutes) / 60) % 24
|
|
days = (((((diff - seconds)/ 60) - minutes) / 60) - hours) / 24
|
|
secs1 = seconds % 10
|
|
secs2 = (seconds - secs1) / 10
|
|
mins1 = minutes % 10
|
|
mins2 = (minutes - mins1) / 10
|
|
hrs1 = hours % 10
|
|
hrs2 = (hours - hrs1) / 10
|
|
dys1 = days % 10
|
|
dys2 = ((days - dys1) / 10) % 10
|
|
dys3 = ((days - dys1 - (dys2*10)) / 100) % 10
|
|
dys4 = ((days - dys1 - (dys2*10) - (dys3*100)) / 1000) % 10
|
|
secs1 = secs1.floor
|
|
change = false
|
|
if secs1 != $game_variables[101]
|
|
$game_variables[101] = secs1
|
|
change = true
|
|
end
|
|
if secs2 != $game_variables[102]
|
|
$game_variables[102] = secs2
|
|
change = true
|
|
end
|
|
if mins1 != $game_variables[103]
|
|
$game_variables[103] = mins1
|
|
change = true
|
|
end
|
|
if mins2 != $game_variables[104]
|
|
$game_variables[104] = mins2
|
|
change = true
|
|
end
|
|
if hrs1 != $game_variables[105]
|
|
$game_variables[105] = hrs1
|
|
change = true
|
|
end
|
|
if hrs2 != $game_variables[106]
|
|
$game_variables[106] = hrs2
|
|
change = true
|
|
end
|
|
if dys1 != $game_variables[107]
|
|
$game_variables[107] = dys1
|
|
change = true
|
|
end
|
|
if dys2 != $game_variables[108]
|
|
$game_variables[108] = dys2
|
|
change = true
|
|
end
|
|
if dys3 != $game_variables[109]
|
|
$game_variables[109] = dys3
|
|
change = true
|
|
end
|
|
if dys4 != $game_variables[110]
|
|
$game_variables[110] = dys4
|
|
change = true
|
|
end
|
|
return change
|
|
end
|
|
|
|
def self.countdown_update
|
|
return cdown_update(Time.new(2017, 03, 27))
|
|
end
|
|
|
|
def self.countdown_extend_update
|
|
return cdown_update(Time.new(2017, 03, 27))
|
|
end
|
|
|
|
def self.countdown_update_rue
|
|
if @rue_equinox == nil
|
|
@rue_equinox = Time.now + 6
|
|
end
|
|
return cdown_update(@rue_equinox)
|
|
end
|
|
|
|
def self.niko_reflection_update
|
|
for event in $game_map.events.values
|
|
if event.name == "niko reflection"
|
|
event.real_y = 27*128/2 - ($game_player.real_y - 27*128/2)
|
|
event.real_x = $game_player.real_x
|
|
event.y = 14 - (($game_player.y - 13))
|
|
event.x = $game_player.x
|
|
if event.y > 14
|
|
event.y = 14
|
|
end
|
|
if event.real_y > 14*128
|
|
event.real_y = 14*128
|
|
end
|
|
event.direction = $game_player.direction
|
|
event.pattern = $game_player.pattern
|
|
case event.direction
|
|
when 2
|
|
event.direction = 8
|
|
when 8
|
|
event.direction = 2
|
|
end
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
def self.niko_reflection_enc_update
|
|
for event in $game_map.events.values
|
|
if event.name == "niko reflection"
|
|
event.real_y = 20*128 - ($game_player.real_y - 20*128)
|
|
event.real_x = $game_player.real_x
|
|
event.y = 20 - (($game_player.y - 20))
|
|
event.x = $game_player.x
|
|
if event.y > 19
|
|
event.y = 19
|
|
end
|
|
if event.real_y > 19*128
|
|
event.real_y = 19*128
|
|
end
|
|
|
|
if event.x > 14
|
|
event.x = 14
|
|
elsif event.x < 6
|
|
event.x = 6
|
|
end
|
|
if event.real_x > (14*128) - 32
|
|
event.real_x = (14*128) - 32
|
|
elsif event.real_x < (6*128) + 32
|
|
event.real_x = (6*128) + 32
|
|
end
|
|
|
|
event.direction = $game_player.direction
|
|
event.pattern = $game_player.pattern
|
|
case event.direction
|
|
when 2
|
|
event.direction = 8
|
|
when 8
|
|
event.direction = 2
|
|
end
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
def self.niko_reflection_peng_update
|
|
for event in $game_map.events.values
|
|
if event.name == "niko reflection"
|
|
event.real_y = 20*128 - ($game_player.real_y - 20*128)
|
|
event.real_x = $game_player.real_x
|
|
event.y = 20 - (($game_player.y - 20))
|
|
event.x = $game_player.x
|
|
if event.y > 19
|
|
event.y = 19
|
|
end
|
|
if event.real_y > 19*128
|
|
event.real_y = 19*128
|
|
end
|
|
|
|
if event.x > 14
|
|
event.x = 14
|
|
elsif event.x < 6
|
|
event.x = 6
|
|
end
|
|
if event.real_x > (14*128) - 32
|
|
event.real_x = (14*128) - 32
|
|
elsif event.real_x < (6*128) + 32
|
|
event.real_x = (6*128) + 32
|
|
end
|
|
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
# Temporary switch assignment
|
|
def self.tmp_s1=(val)
|
|
$game_switches[TMP_INDEX+0] = val
|
|
end
|
|
|
|
def self.tmp_s2=(val)
|
|
$game_switches[TMP_INDEX+1] = val
|
|
end
|
|
|
|
def self.tmp_s3=(val)
|
|
$game_switches[TMP_INDEX+2] = val
|
|
end
|
|
|
|
def self.tmp_v1=(val)
|
|
$game_variables[TMP_INDEX+0] = val
|
|
end
|
|
|
|
def self.tmp_v2=(val)
|
|
$game_variables[TMP_INDEX+1] = val
|
|
end
|
|
|
|
def self.tmp_v3=(val)
|
|
$game_variables[TMP_INDEX+2] = val
|
|
end
|
|
|
|
private
|
|
TMP_INDEX = 22
|
|
|
|
def self.logpos(pos, realpos, positive)
|
|
bigpos = pos * 128
|
|
if realpos < bigpos
|
|
return pos - 1 if positive
|
|
elsif realpos > bigpos
|
|
return pos + 1 if positive
|
|
end
|
|
return pos
|
|
end
|
|
|
|
def self.set_cam(x, y)
|
|
$game_map.display_x = x
|
|
$game_map.display_y = y
|
|
end
|
|
|
|
def self.fadein_bgm(target, speed)
|
|
$game_temp.target_bgm_vol_level = target
|
|
$game_temp.bgm_fadein_speed = speed
|
|
end
|
|
|
|
def self.copy_journal
|
|
# If the required directories don't exist, create them
|
|
Dir.mkdir(Oneshot::GAME_PATH) unless File.exists?(Oneshot::GAME_PATH)
|
|
Dir.mkdir(Oneshot::GAME_PATH + "/Oneshot") unless File.exists?(Oneshot::GAME_PATH + "/Oneshot")
|
|
begin
|
|
# If we're on a supported Linux DE, make a .desktop file
|
|
# so the clover icon can be properly shown
|
|
if Oneshot::OS == "linux" and SUPPORTED_DE.include? Oneshot::DE
|
|
path = "#{Oneshot::GAME_PATH}/Oneshot/#{Oneshot::JOURNAL}.desktop"
|
|
File.open(path, "wb") do |output|
|
|
output.write("[Desktop Entry]\n")
|
|
output.write("Comment=...\n")
|
|
output.write("Terminal=false\n")
|
|
output.write("Name=_______\n")
|
|
output.write("Exec=#{Dir.pwd}/#{Oneshot::JOURNAL}\n")
|
|
output.write("Type=Application\n")
|
|
output.write("Icon=#{Dir.pwd}/images/icon.png\n")
|
|
end
|
|
File.chmod(0777, path)
|
|
# If the journal is a file, copy it to Documents
|
|
elsif File.file?(Oneshot::JOURNAL)
|
|
File.open(Oneshot::JOURNAL, "rb") do |input|
|
|
File.open("#{Oneshot::GAME_PATH}/Oneshot/#{Oneshot::JOURNAL}", "wb") do |output|
|
|
while buff = input.read(4096)
|
|
output.write(buff)
|
|
end
|
|
end
|
|
end
|
|
# If the journal isn't a file, symlink it
|
|
else
|
|
File.symlink "#{Dir.pwd}/#{Oneshot::JOURNAL}", "#{Oneshot::GAME_PATH}/Oneshot/#{Oneshot::JOURNAL}"
|
|
end
|
|
rescue Errno::EACCES => e
|
|
# this probably means the clover.exe already exists and is running, so no need to create it again
|
|
rescue Errno::EEXIST => e
|
|
# this means that the journal file already exists, so no need to create it again
|
|
end
|
|
if File.exists?("README.txt")
|
|
File.open("README.txt", "rb") do |input|
|
|
File.open(Oneshot::GAME_PATH + "/Oneshot/README.txt","wb") do |output|
|
|
while buff = input.read(4096)
|
|
output.write(buff)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def self.create_boxes
|
|
Dir.mkdir(Oneshot::GAME_PATH) unless File.exists?(Oneshot::GAME_PATH)
|
|
Dir.mkdir(Oneshot::GAME_PATH + "/Oneshot") unless File.exists?(Oneshot::GAME_PATH + "/Oneshot")
|
|
Dir.mkdir(Oneshot::GAME_PATH + "/Oneshot/Portal1") unless File.exists?(Oneshot::GAME_PATH + "/Oneshot/Portal1")
|
|
Dir.mkdir(Oneshot::GAME_PATH + "/Oneshot/Portal2") unless File.exists?(Oneshot::GAME_PATH + "/Oneshot/Portal2")
|
|
Dir.mkdir(Oneshot::GAME_PATH + "/Oneshot/Portal3") unless File.exists?(Oneshot::GAME_PATH + "/Oneshot/Portal3")
|
|
Dir.mkdir(Oneshot::GAME_PATH + "/Oneshot/BigPortal") unless File.exists?(Oneshot::GAME_PATH + "/Oneshot/BigPortal")
|
|
end
|
|
|
|
def self.delete_if_exists(f_name)
|
|
File.delete(f_name) unless !File.exists?(f_name)
|
|
end
|
|
|
|
def self.clear_boxes
|
|
for i in 1..3
|
|
portal_path = Oneshot::GAME_PATH + "/Oneshot/Portal" + i.to_s
|
|
case i
|
|
when 1
|
|
delete_if_exists(portal_path + "/blue_npc_prototype.png")
|
|
delete_if_exists(portal_path + "/proto1.png")
|
|
delete_if_exists(portal_path + "/keyB.txt")
|
|
when 2
|
|
delete_if_exists(portal_path + "/green_npc_cedric.png")
|
|
delete_if_exists(portal_path + "/cedric.png")
|
|
delete_if_exists(portal_path + "/keyG.txt")
|
|
when 3
|
|
delete_if_exists(portal_path + "/red_rue.png")
|
|
delete_if_exists(portal_path + "/rue.png")
|
|
delete_if_exists(portal_path + "/keyR.txt")
|
|
end
|
|
end
|
|
delete_if_exists(Oneshot::GAME_PATH + "/Oneshot/BigPortal/keyB.txt")
|
|
delete_if_exists(Oneshot::GAME_PATH + "/Oneshot/BigPortal/keyG.txt")
|
|
delete_if_exists(Oneshot::GAME_PATH + "/Oneshot/BigPortal/keyR.txt")
|
|
end
|
|
|
|
def self.copy_file(src, dst)
|
|
begin
|
|
File.open(src, "rb") do |input|
|
|
File.open(dst,"wb") do |output|
|
|
while buff = input.read(4096)
|
|
output.write(buff)
|
|
end
|
|
end
|
|
end
|
|
rescue Errno::EACCES => e
|
|
#this probably means the file already exists and is open, so no need to create it again
|
|
rescue Errno::EEXIST => e
|
|
#this probably means the file already exists, so no need to create it again
|
|
end
|
|
end
|
|
|
|
def self.write_key(dst, str)
|
|
File.open(dst, 'w') do |file|
|
|
file.puts(str)
|
|
end
|
|
end
|
|
|
|
def self.put_key_in_box(numb)
|
|
portal_path = Oneshot::GAME_PATH + "/Oneshot/Portal" + numb.to_s
|
|
case numb
|
|
when 1
|
|
copy_file("Graphics/Characters/blue_npc_prototype.png", portal_path + "/blue_npc_prototype.png")
|
|
copy_file("Graphics/Faces/proto1.png", portal_path + "/proto1.png")
|
|
write_key(portal_path + "/keyB.txt", tr(PROTO_TEXT))
|
|
when 2
|
|
copy_file("Graphics/Characters/green_npc_cedric.png", portal_path + "/green_npc_cedric.png")
|
|
copy_file("Graphics/Faces/cedric.png", portal_path + "/cedric.png")
|
|
write_key(portal_path + "/keyG.txt", tr(CEDRIC_TEXT))
|
|
when 3
|
|
copy_file("Graphics/Characters/red_rue.png", portal_path + "/red_rue.png")
|
|
copy_file("Graphics/Faces/rue.png", portal_path + "/rue.png")
|
|
write_key(portal_path + "/keyR.txt", tr(RUE_TEXT))
|
|
end
|
|
|
|
end
|
|
|
|
def self.password1
|
|
locale = $persistent.langcode
|
|
if !Language::LANGUAGES.include? locale
|
|
locale = 'en'
|
|
end
|
|
source_dir = "Graphics/Fogs/_/scenario1/" + locale.downcase
|
|
Dir.mkdir(Oneshot::DOCS_PATH) unless File.exists?(Oneshot::DOCS_PATH)
|
|
copy_file(source_dir + "/pw1.png", Oneshot::DOCS_PATH + "/ONESHOT_password1.png")
|
|
copy_file(source_dir + "/pw2.png", Oneshot::DOCS_PATH + "/ONESHOT_password2.png")
|
|
copy_file(source_dir + "/pw3.png", Oneshot::DOCS_PATH + "/ONESHOT_password3.png")
|
|
copy_file(source_dir + "/pw4.png", Oneshot::DOCS_PATH + "/ONESHOT_password4.png")
|
|
end
|
|
|
|
def self.password2
|
|
locale = $persistent.langcode
|
|
if !Language::LANGUAGES.include? locale
|
|
locale = 'en'
|
|
end
|
|
source_dir = "Graphics/Fogs/_/scenario2/#{locale.downcase}"
|
|
Dir.mkdir(Oneshot::DOCS_PATH) unless File.exists?(Oneshot::DOCS_PATH)
|
|
copy_file("#{source_dir}/pw1.png", "#{Oneshot::DOCS_PATH}/ONESHOT_password1.png")
|
|
copy_file("#{source_dir}/pw2.png", "#{Oneshot::DOCS_PATH}/ONESHOT_password2.png")
|
|
copy_file("#{source_dir}/pw3.png", "#{Oneshot::DOCS_PATH}/ONESHOT_password3.png")
|
|
copy_file("#{source_dir}/pw4.png", "#{Oneshot::DOCS_PATH}/ONESHOT_password4.png")
|
|
end
|
|
|
|
=begin
|
|
def self.take_key_out_of_box(numb)
|
|
if File.exists?(Oneshot::GAME_PATH + "/Oneshot/Box" + numb.to_s + "/key" + numb.to_s + ".png")
|
|
File.delete(Oneshot::GAME_PATH + "/Oneshot/Box" + numb.to_s + "/key" + numb.to_s + ".png")
|
|
end
|
|
if File.exists?(Oneshot::GAME_PATH + "/Oneshot/BigBox/key" + numb.to_s + ".png")
|
|
File.delete(Oneshot::GAME_PATH + "/Oneshot/BigBox/key" + numb.to_s + ".png")
|
|
end
|
|
end
|
|
=end
|
|
|
|
def self.is_key_in_box(numb)
|
|
portal_path = Oneshot::GAME_PATH + "/Oneshot/Portal" + numb.to_s
|
|
case numb
|
|
when 1
|
|
return File.exists?(portal_path + "/keyB.txt")
|
|
when 2
|
|
return File.exists?(portal_path + "/keyG.txt")
|
|
when 3
|
|
return File.exists?(portal_path + "/keyR.txt")
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.is_key_in_bigbox(numb)
|
|
portal_path = Oneshot::GAME_PATH + "/Oneshot/BigPortal"
|
|
case numb
|
|
when 1
|
|
return File.exists?(portal_path + "/keyB.txt")
|
|
when 2
|
|
return File.exists?(portal_path + "/keyG.txt")
|
|
when 3
|
|
return File.exists?(portal_path + "/keyR.txt")
|
|
end
|
|
return false
|
|
end
|
|
|
|
end
|
|
|
|
def has_lightbulb?
|
|
$game_party.item_number(1) > 0
|
|
end
|
|
|
|
def button_pressed?
|
|
(1..18).each do |i|
|
|
return true if Input.trigger?(i)
|
|
end
|
|
return false
|
|
end
|
|
|
|
def enter_name
|
|
$game_temp.name_calling = true
|
|
end
|
|
|
|
def check_exit(min, max, x: -1, y: -1)
|
|
result = false
|
|
if x >= 0
|
|
if $game_player.x == x
|
|
if $game_player.y >= min && $game_player.y <= max
|
|
result = true
|
|
end
|
|
end
|
|
elsif y >= 0
|
|
if $game_player.y == y
|
|
if $game_player.x >= min && $game_player.x <= max
|
|
result = true
|
|
end
|
|
end
|
|
end
|
|
Script.tmp_s1 = $game_switches[11] ? false : result
|
|
end
|
|
|
|
def loadQASave(fname)
|
|
filename = "testing_saves/" + fname + ".rxdata"
|
|
# If file doesn't exist
|
|
unless FileTest.exist?(filename)
|
|
filename = "testing_saves_postgame/" + fname + ".rxdata"
|
|
unless FileTest.exist?(filename)
|
|
# Play buzzer SE
|
|
$game_system.se_play($data_system.buzzer_se)
|
|
return
|
|
end
|
|
end
|
|
# Play load SE
|
|
$game_system.se_play($data_system.load_se)
|
|
|
|
# Read save data
|
|
file = File.open(filename, "rb")
|
|
# Read character data for drawing save file
|
|
characters = Marshal.load(file)
|
|
# Read frame count for measuring play time
|
|
Graphics.frame_count = Marshal.load(file)
|
|
# Read each type of game object
|
|
$game_system = Marshal.load(file)
|
|
$game_switches = Marshal.load(file)
|
|
$game_variables = Marshal.load(file)
|
|
$game_self_switches = Marshal.load(file)
|
|
$game_screen = Marshal.load(file)
|
|
$game_actors = Marshal.load(file)
|
|
$game_party = Marshal.load(file)
|
|
$game_troop = Marshal.load(file)
|
|
$game_map = Marshal.load(file)
|
|
$game_player = Marshal.load(file)
|
|
$game_followers = Marshal.load(file)
|
|
$game_oneshot = Marshal.load(file)
|
|
$game_fasttravel = Marshal.load(file)
|
|
$game_temp.footstep_sfx = Marshal.load(file)
|
|
|
|
# If magic number is different from when saving
|
|
# (if editing was added with editor)
|
|
if $game_system.magic_number != $data_system.magic_number
|
|
# Load map
|
|
$game_map.setup($game_map.map_id)
|
|
$game_player.center($game_player.x, $game_player.y)
|
|
end
|
|
# Refresh party members
|
|
$game_party.refresh
|
|
|
|
f_prev = $game_player
|
|
for f in $game_followers
|
|
f.leader = f_prev
|
|
f.moveto($game_player.x, $game_player.y)
|
|
f_prev = f
|
|
end
|
|
file.close
|
|
# Restore BGM and BGS
|
|
$game_system.bgm_play($game_system.playing_bgm)
|
|
$game_system.bgs_play($game_system.playing_bgs)
|
|
# Update map (run parallel process event)
|
|
$game_map.update
|
|
# Switch to map screen
|
|
$scene = Scene_Map.new
|
|
end
|
|
|
|
def kill_perma_flags
|
|
for i in 151..175
|
|
$game_switches[i] = false
|
|
end
|
|
for i in 76..100
|
|
$game_variables[i] = 0
|
|
end
|
|
end
|
|
|
|
def bg(name)
|
|
$game_map.bg_name = name
|
|
end
|
|
|
|
def particles(type)
|
|
$game_map.particles_type = type
|
|
end
|
|
|
|
def ambient(r, g, b, gray = 0)
|
|
$game_map.ambient.set(r, g, b, gray)
|
|
end
|
|
|
|
def clear_ambient
|
|
$game_map.ambient.set(0, 0, 0, 0)
|
|
end
|
|
|
|
def add_light(id, file, intensity, x, y)
|
|
#$scene.add_light(id, file, intensity, x, y)
|
|
end
|
|
|
|
def del_light(id)
|
|
#$scene.del_light(id)
|
|
end
|
|
|
|
def clear_lights
|
|
#$scene.clear_lights
|
|
end
|
|
|
|
def wrap_map
|
|
$game_map.wrapping = true
|
|
end
|
|
|
|
def pan_offset_y(val)
|
|
$game_map.pan_offset_y = val
|
|
end
|
|
|
|
# Map specific settings
|
|
def green_ambient
|
|
ambient(-30, -20, -30)
|
|
end
|
|
|
|
def blue_ambient
|
|
ambient(-40, -40, -40)
|
|
end
|
|
|
|
def house_ambient
|
|
ambient(-15, -15, -15)
|
|
end
|
|
|
|
# Travel
|
|
def enable_travel
|
|
$game_fasttravel.enabled = true
|
|
end
|
|
|
|
def disable_travel
|
|
$game_fasttravel.enabled = false
|
|
end
|
|
|
|
def unlock_map(zone, map, dir)
|
|
# Find the coordinate of the calling event
|
|
e = $game_map.events.values.find { |e| e.name == 'FAST TRAVEL' }
|
|
raise 'could not find event named FAST TRAVEL' if !e
|
|
case dir
|
|
when :down
|
|
newdir = 2
|
|
when :left
|
|
newdir = 4
|
|
when :right
|
|
newdir = 6
|
|
when :up
|
|
newdir = 8
|
|
else
|
|
raise "invalid direction: #{dir}"
|
|
end
|
|
$game_fasttravel.enabled = true
|
|
$game_fasttravel.zone = zone
|
|
$game_fasttravel.unlock(map, $game_map.map_id, e.x, e.y, newdir)
|
|
end
|
|
|
|
# Misc
|
|
def watcher_tell_time
|
|
hour = Time.now.hour
|
|
if hour >= 6 && hour < 12
|
|
Script.tmp_v1 = 0
|
|
elsif hour >= 12 && hour < 17
|
|
Script.tmp_v1 = 1
|
|
elsif hour >= 17
|
|
Script.tmp_v1 = 2
|
|
else
|
|
Script.tmp_v1 = 3
|
|
end
|
|
end
|
|
|
|
def plight_start_timer
|
|
$game_oneshot.plight_timer = Time.now
|
|
end
|
|
|
|
def plight_update_timer
|
|
if $game_oneshot.plight_timer == nil
|
|
plight_start_timer
|
|
end
|
|
Script.tmp_v1 = ((Time.now - $game_oneshot.plight_timer) / 60).to_i
|
|
end
|
|
|
|
def activate_balcony?(ypos)
|
|
!$scene.menu_open? &&
|
|
$game_player.y == ypos &&
|
|
$game_player.direction == 8 &&
|
|
Input.trigger?(Input::ACTION) && !$game_system.map_interpreter.running? && !$game_temp.menus_visible
|
|
end
|