2047 lines
57 KiB
Lua
2047 lines
57 KiB
Lua
local lua_file = nil
|
|
|
|
--load common functions
|
|
lua_file = nuvie_load("common/intro_common.lua"); lua_file();
|
|
|
|
local FREUD_STATE_STARING = 0
|
|
local FREUD_STATE_WRITING = 1
|
|
|
|
local function origin_fx_sequence()
|
|
local g_img_tbl = image_load_all("title.lzc")
|
|
|
|
canvas_set_palette("strax.pal", 0)
|
|
|
|
|
|
local stars = sprite_new(g_img_tbl[0][0], 0, 24, true)
|
|
local logo_image = image_new(282,82)
|
|
image_blit(logo_image, g_img_tbl[0][1],0,16)
|
|
image_blit(logo_image, g_img_tbl[0][2],g_img_tbl[0][1].w,14)
|
|
image_blit(logo_image, g_img_tbl[0][3],g_img_tbl[0][1].w+g_img_tbl[0][2].w,0)
|
|
|
|
local logo = sprite_new(logo_image, 20, 70, false)
|
|
|
|
local planet = sprite_new(g_img_tbl[12], 160, 48, true)
|
|
|
|
planet.clip_x = 0
|
|
planet.clip_y = 0
|
|
planet.clip_w = 320
|
|
planet.clip_h = 152
|
|
local players = {}
|
|
players[1] = create_player_sprite(g_img_tbl[1][0], 58, 118)
|
|
players[2] = create_player_sprite(g_img_tbl[2][0], 186, 118)
|
|
players[3] = create_player_sprite(g_img_tbl[3][0], 278, 118)
|
|
|
|
players[4] = create_player_sprite(g_img_tbl[4][0], 58, 126)
|
|
players[5] = create_player_sprite(g_img_tbl[5][0], 186, 126)
|
|
players[6] = create_player_sprite(g_img_tbl[6][0], 278, 126)
|
|
|
|
players[7] = create_player_sprite(g_img_tbl[7][0], 58, 134)
|
|
players[8] = create_player_sprite(g_img_tbl[8][0], 186, 134)
|
|
players[9] = create_player_sprite(g_img_tbl[9][0], 278, 134)
|
|
|
|
local conductor = sprite_new(g_img_tbl[10][0], 158, 98, true)
|
|
conductor.clip_x = 0
|
|
conductor.clip_y = 24
|
|
conductor.clip_w = 320
|
|
conductor.clip_h = 128
|
|
|
|
music_play("strx_mus.lzc", 0)
|
|
|
|
fade_in()
|
|
|
|
local i = 0
|
|
for i=0,6,1 do
|
|
conductor.image = g_img_tbl[10][i]
|
|
|
|
update_players(players, g_img_tbl)
|
|
if poll_for_key_or_button(4) == true then return end
|
|
end
|
|
for i=7,13,1 do
|
|
conductor.image = g_img_tbl[10][i]
|
|
|
|
update_players(players, g_img_tbl)
|
|
if poll_for_key_or_button(4) == true then return end
|
|
end
|
|
for i=7,12,1 do
|
|
conductor.image = g_img_tbl[10][i]
|
|
|
|
update_players(players, g_img_tbl)
|
|
if poll_for_key_or_button(4) == true then return end
|
|
end
|
|
local j
|
|
for i=1,4,1 do
|
|
for j=13,15,1 do
|
|
conductor.image = g_img_tbl[10][j]
|
|
if poll_for_key_or_button(1) == true then return end
|
|
end
|
|
|
|
conductor.image = g_img_tbl[10][14]
|
|
if poll_for_key_or_button(2) == true then return end
|
|
conductor.image = g_img_tbl[10][13]
|
|
if poll_for_key_or_button(2) == true then return end
|
|
conductor.image = g_img_tbl[10][16]
|
|
|
|
if poll_for_key_or_button(1) == true then return end
|
|
play_sfx(38, false)
|
|
end
|
|
|
|
for i=16,20,1 do
|
|
conductor.image = g_img_tbl[10][i]
|
|
if poll_for_key_or_button(4) == true then return end
|
|
end
|
|
if poll_for_key_or_button(135) == true then return end
|
|
|
|
--play_sfx(12, false)
|
|
|
|
conductor.image = g_img_tbl[10][6]
|
|
|
|
for i=1,21,1 do
|
|
conductor.y = 98 + i * 12
|
|
conductor.image.scale = 100 + i * 15
|
|
|
|
for j=1,9,1 do
|
|
players[j].y = players[j].y + 5
|
|
players[j].image.scale = 100 + i * 5
|
|
if j == 1 or j == 4 or j == 7 then
|
|
players[j].x = players[j].x - 2
|
|
end
|
|
if j == 3 or j == 6 or j == 9 then
|
|
players[j].x = players[j].x + 2
|
|
end
|
|
end
|
|
|
|
if poll_for_esc(4) == true then return end
|
|
end
|
|
|
|
|
|
logo.visible = true
|
|
logo.image.scale = 10
|
|
|
|
|
|
for i=1,18,1 do
|
|
planet.y = planet.y + 6
|
|
|
|
logo.image.scale = logo.image.scale + 5
|
|
logo.x = math.floor((320 - logo.image.w) / 2)
|
|
if i < 10 then
|
|
logo.y = logo.y - 4
|
|
else
|
|
logo.y = logo.y + 1
|
|
end
|
|
|
|
if poll_for_key_or_button(4) == true then return end
|
|
end
|
|
|
|
if poll_for_esc(45) == true then return end
|
|
|
|
fireworks(g_img_tbl, logo)
|
|
fade_out()
|
|
end
|
|
|
|
function show_logos()
|
|
local g_img_tbl = image_load_all("logos.lzc")
|
|
local sprite = sprite_new(g_img_tbl[0], 0, 0, true)
|
|
music_play("mdd_mus.lzc", 0)
|
|
fade_in()
|
|
|
|
poll_for_key_or_button(195)
|
|
if should_exit() then return end
|
|
--fade_out()
|
|
sprite.image = g_img_tbl[1]
|
|
fade_in()
|
|
poll_for_key_or_button(195)
|
|
if should_exit() then return end
|
|
|
|
sprite.image = g_img_tbl[2]
|
|
sprite.x = 15
|
|
music_play("mdd_mus.lzc", 1)
|
|
fade_in()
|
|
poll_for_key_or_button(175)
|
|
sprite.visible = false
|
|
end
|
|
|
|
function flash_effect(image, text_delay)
|
|
if text_delay == nil then
|
|
text_delay = 300
|
|
end
|
|
|
|
canvas_hide_all_sprites()
|
|
|
|
local s = sprite_new(image, 0, 0, true)
|
|
local bg = sprite_new(image_new(320,200,15), 0, 0, true)
|
|
|
|
if poll_for_key_or_button(6) == true then return end
|
|
|
|
local speed = 10
|
|
local i
|
|
for i=0x0,0xff,speed do
|
|
bg.opacity = 0xff - i
|
|
canvas_update()
|
|
end
|
|
|
|
return poll_for_key_or_button(text_delay)
|
|
end
|
|
|
|
function show_fair_ground()
|
|
local g_img_tbl = image_load_all("fair.lzc")
|
|
|
|
canvas_hide_all_sprites()
|
|
|
|
local fair_bg = sprite_new(g_img_tbl[0], 0, 24, true)
|
|
local buildings = sprite_new(g_img_tbl[1][0], 0, 24, true)
|
|
local buildings1 = sprite_new(g_img_tbl[1][1], 320, 24, true)
|
|
local wheel = sprite_new(g_img_tbl[2][0], 0, 24, true)
|
|
local column = sprite_new(g_img_tbl[3], 190, 24, true)
|
|
local podium = sprite_new(g_img_tbl[4], 240, 24, true)
|
|
local people = sprite_new(g_img_tbl[5][0], 0, 24, true)
|
|
local people1 = sprite_new(g_img_tbl[5][1], 320, 24, true)
|
|
|
|
local i
|
|
for i=0,9 do
|
|
wheel.image = g_img_tbl[2][i%5]
|
|
if poll_for_key_or_button(7) == true then return end
|
|
end
|
|
|
|
for i=0,79 do
|
|
buildings.x = 0 - i
|
|
buildings1.x = 320 - i
|
|
wheel.x = 0 - i * 2
|
|
wheel.image = g_img_tbl[2][i%5]
|
|
column.x = 190 - i * 2
|
|
podium.x = 240 - i * 2
|
|
people.x = 0 - i * 3
|
|
people1.x = 320 - i * 3
|
|
if poll_for_key_or_button(7) == true then return end
|
|
end
|
|
|
|
if poll_for_key_or_button(15) == true then return end
|
|
|
|
end
|
|
|
|
function show_lowell()
|
|
|
|
flash_effect(image_load("credits.lzc", 0))
|
|
|
|
canvas_hide_all_sprites()
|
|
|
|
local g_img_tbl = image_load_all("lowell.lzc")
|
|
local bg = sprite_new(g_img_tbl[0][0], 0, 24, true)
|
|
local lowell = sprite_new(g_img_tbl[0][1], 0, 24, true)
|
|
|
|
fade_in()
|
|
|
|
for i=1,20 do
|
|
lowell.image = g_img_tbl[0][i]
|
|
if poll_for_key_or_button(5) == true then return end
|
|
end
|
|
|
|
flash_effect(image_load("credits.lzc", 1))
|
|
|
|
if poll_for_key_or_button(70) == true then return end
|
|
end
|
|
|
|
function show_fuse()
|
|
|
|
canvas_hide_all_sprites()
|
|
|
|
local g_img_tbl = image_load_all("fuse.lzc")
|
|
local bg = sprite_new(g_img_tbl[0][0], 0, 24, true)
|
|
local fuse = sprite_new(g_img_tbl[0][1], 0, 24, true)
|
|
|
|
music_play("mdd_mus.lzc", 2)
|
|
|
|
fade_in(4)
|
|
|
|
for i=1,28 do
|
|
fuse.image = g_img_tbl[0][i]
|
|
if poll_for_key_or_button(2) == true then return end
|
|
end
|
|
|
|
flash_effect(image_load("credits.lzc", 2))
|
|
end
|
|
|
|
function show_flash()
|
|
|
|
canvas_hide_all_sprites()
|
|
|
|
local g_img_tbl = image_load_all("fair.lzc")
|
|
|
|
canvas_hide_all_sprites()
|
|
|
|
local fair_bg = sprite_new(g_img_tbl[0], 0, 24, true)
|
|
local buildings = sprite_new(g_img_tbl[1][0], -80, 24, true)
|
|
local buildings1 = sprite_new(g_img_tbl[1][1], 240, 24, true)
|
|
local column = sprite_new(g_img_tbl[3], 30, 24, true)
|
|
local podium = sprite_new(g_img_tbl[4], 80, 24, true)
|
|
|
|
music_play("mdd_mus.lzc", 3)
|
|
|
|
g_img_tbl = image_load_all("flash.lzc")
|
|
|
|
fade_in(8)
|
|
play_sfx(12, false) --explosion FIXME this might not be the correct sfx
|
|
local s = sprite_new(g_img_tbl[0][0], 80, 24, true)
|
|
local i
|
|
for i=0,9 do
|
|
s.image = g_img_tbl[0][i]
|
|
if poll_for_key_or_button(7) == true then return end
|
|
end
|
|
for i=0,8 do
|
|
s.image = g_img_tbl[1][i]
|
|
if poll_for_key_or_button(6) == true then return end
|
|
end
|
|
|
|
flash_effect(image_load("credits.lzc", 3), 215)
|
|
end
|
|
|
|
function show_flight()
|
|
canvas_hide_all_sprites()
|
|
|
|
local g_img_tbl = image_load_all("flight.lzc")
|
|
local bg = sprite_new(g_img_tbl[0], 0, 24, true)
|
|
music_play("mdd_mus.lzc", 4)
|
|
fade_in(12)
|
|
local capsule = create_sprite(g_img_tbl[1], 270, 140)
|
|
|
|
local i
|
|
for i=0,12 do
|
|
capsule.image.scale = 1 + i * i + (i * 2)
|
|
capsule.x = 270 - i * 4 * i
|
|
capsule.y = 140 - i * 2 * i
|
|
if poll_for_key_or_button(6) == true then return end
|
|
end
|
|
|
|
if poll_for_key_or_button(98) == true then return end
|
|
music_stop()
|
|
if poll_for_key_or_button(8) == true then return end
|
|
|
|
end
|
|
|
|
function show_cabin()
|
|
canvas_hide_all_sprites()
|
|
|
|
local g_img_tbl = image_load_all("cabin.lzc")
|
|
|
|
local bg = sprite_new(g_img_tbl[0], 0, 24, true)
|
|
local cloud = sprite_new(g_img_tbl[1][0], 116, 28, true)
|
|
local cloud1 = sprite_new(g_img_tbl[1][0], 222, 53, true)
|
|
local man = create_sprite(g_img_tbl[2], 0, 50)
|
|
local silhouette = create_sprite(g_img_tbl[3], -900, -150)
|
|
local hat1 = create_sprite(g_img_tbl[4], 62, -150)
|
|
local hat2 = create_sprite(g_img_tbl[5], 62, 0)
|
|
local hat3 = create_sprite(g_img_tbl[6], 62, 0)
|
|
|
|
music_play("mdd_mus.lzc", 5)
|
|
|
|
--FIXME rotate sprites.
|
|
|
|
local i
|
|
for i=0,30 do
|
|
cloud.image = g_img_tbl[1][(i + 2) % 15]
|
|
cloud1.image = g_img_tbl[1][i % 15]
|
|
silhouette.x = i * 64 - 900
|
|
silhouette.y = i * 16 - 150
|
|
man.x = 0 - (i * 4)
|
|
man.y = i * i * 2 + 50
|
|
man.image.scale = 100 + i * 32
|
|
hat1.x = i * 32 + 62
|
|
if i > 6 then
|
|
hat1.y = i * 4 + 15
|
|
else
|
|
hat1.y = i * 8 + 15
|
|
end
|
|
|
|
hat2.x = i * 32 - 150
|
|
hat2.y = i * 8
|
|
|
|
hat3.x = i * 32 - 500
|
|
hat3.y = i * 4
|
|
|
|
if poll_for_key_or_button(8) == true then return end
|
|
end
|
|
|
|
flash_effect(image_load("credits.lzc", 4),250)
|
|
end
|
|
|
|
function show_mars_flash()
|
|
canvas_hide_all_sprites()
|
|
|
|
local g_img_tbl = image_load_all("mars.lzc")
|
|
|
|
music_play("mdd_mus.lzc", 6)
|
|
|
|
local bg = sprite_new(g_img_tbl[0][0], 0, 24, true)
|
|
local flash = sprite_new(g_img_tbl[0][1], 0, 24, true)
|
|
|
|
fade_in(12)
|
|
|
|
if poll_for_key_or_button(60) == false then
|
|
|
|
local i
|
|
for i=-1,1 do
|
|
local j
|
|
for j=0,2 do
|
|
local k
|
|
for k=-1,2 do
|
|
flash.image = g_img_tbl[0][3-math.abs(k)]
|
|
|
|
local delay = 3
|
|
if i == 0 and k == 0 then
|
|
delay = 10
|
|
end
|
|
if poll_for_key_or_button(delay) == true then
|
|
flash_effect(image_load("credits.lzc", 5))
|
|
return
|
|
end
|
|
end
|
|
|
|
if poll_for_key_or_button(5) == true then
|
|
flash_effect(image_load("credits.lzc", 5))
|
|
return
|
|
end
|
|
end
|
|
|
|
if poll_for_key_or_button(30) == true then
|
|
flash_effect(image_load("credits.lzc", 5))
|
|
return
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
poll_for_key_or_button(40)
|
|
|
|
flash_effect(image_load("credits.lzc", 5))
|
|
end
|
|
|
|
function play_intro()
|
|
|
|
show_logos()
|
|
if should_exit() then return end
|
|
|
|
show_fair_ground()
|
|
if should_exit() then return end
|
|
|
|
show_lowell()
|
|
if should_exit() then return end
|
|
|
|
show_fuse()
|
|
if should_exit() then return end
|
|
|
|
show_flash()
|
|
if should_exit() then return end
|
|
|
|
show_flight()
|
|
if should_exit() then return end
|
|
|
|
show_cabin()
|
|
if should_exit() then return end
|
|
|
|
show_mars_flash()
|
|
if should_exit() then return end
|
|
|
|
end
|
|
|
|
function show_home()
|
|
canvas_hide_all_sprites()
|
|
|
|
local text_tbl = text_load("scenetxt.lzc", 0)
|
|
|
|
local g_img_tbl = image_load_all("scene1.lzc")
|
|
|
|
local bg = sprite_new(g_img_tbl[0][0], 0, 24, true)
|
|
local door = sprite_new(g_img_tbl[0][1], 0, 24, true)
|
|
local avatar = sprite_new(g_img_tbl[1][0], 240, 151, true)
|
|
local text = sprite_new(nil, 0, 160, true)
|
|
text.text = text_tbl[1]
|
|
text.text_color = 14
|
|
text.text_align = 2
|
|
fade_in()
|
|
music_play("mdd_mus.lzc", 8)
|
|
|
|
poll_for_key_or_button(75)
|
|
if should_exit() then return end
|
|
|
|
local woman = sprite_new(g_img_tbl[8][0], 0, 151, true)
|
|
local spector = create_sprite(g_img_tbl[2][0], 60, 151)
|
|
|
|
door.visible = false
|
|
avatar.image = g_img_tbl[1][1]
|
|
text.text = text_tbl[2]
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
avatar.image = g_img_tbl[1][3]
|
|
spector.image = g_img_tbl[2][1]
|
|
spector.x = 80
|
|
text.text = text_tbl[3]
|
|
text.text_color = 2
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
woman.image = g_img_tbl[8][1]
|
|
text.text = text_tbl[4]
|
|
text.text_color = 14
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
woman.image = g_img_tbl[8][2]
|
|
spector.image = g_img_tbl[2][2]
|
|
spector.x = 100
|
|
text.text = text_tbl[5]
|
|
text.text_color = 2
|
|
|
|
poll_for_key_or_button(75)
|
|
if should_exit() then return end
|
|
|
|
woman.image = g_img_tbl[3][0]
|
|
woman.x = -10
|
|
woman.y = 155
|
|
spector.image = g_img_tbl[2][3]
|
|
spector.x = 145
|
|
text.text = text_tbl[6]
|
|
text.text_color = 9
|
|
|
|
poll_for_key_or_button(75)
|
|
if should_exit() then return end
|
|
|
|
--woman hands spector note
|
|
text.text = text_tbl[7]
|
|
local i
|
|
for i=0,10 do
|
|
if i <= 9 then
|
|
woman.image = g_img_tbl[3][i]
|
|
end
|
|
spector.image = g_img_tbl[2][i + 5]
|
|
poll_for_key_or_button(5)
|
|
end
|
|
|
|
poll_for_key_or_button(50)
|
|
if should_exit() then return end
|
|
|
|
text.text = text_tbl[8]
|
|
text.text_color = 2
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
|
|
--close up on woman
|
|
canvas_hide_all_sprites()
|
|
|
|
bg.image = g_img_tbl[7]
|
|
bg.visible = true
|
|
text.text = text_tbl[9]
|
|
text.text_color = 9
|
|
text.visible = true
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
--spector, avatar review papers
|
|
|
|
bg.image = g_img_tbl[0][0]
|
|
avatar.image = g_img_tbl[1][1]
|
|
avatar.x = 270
|
|
avatar.visible = true
|
|
|
|
spector.image = g_img_tbl[2][16]
|
|
spector.x = 193
|
|
spector.y = 161
|
|
spector.visible = true
|
|
|
|
text.text = text_tbl[10]
|
|
text.text_color = 2
|
|
|
|
poll_for_key_or_button(75)
|
|
if should_exit() then return end
|
|
|
|
--close up on papers
|
|
canvas_hide_all_sprites()
|
|
bg.image = g_img_tbl[5][0]
|
|
bg.visible = true
|
|
|
|
local letter = sprite_new(g_img_tbl[5][1], 50, 24, true)
|
|
local hand = sprite_new(g_img_tbl[4], 235, 78, true)
|
|
|
|
text.text = text_tbl[11]
|
|
text.text_color = 14
|
|
text.visible = true
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
hand.visible = false
|
|
text.text = text_tbl[12]
|
|
text.text_color = 2
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
--pickup letter
|
|
letter.image = g_img_tbl[6]
|
|
letter.x = 0
|
|
|
|
text.text = text_tbl[13]
|
|
--FIXME need to rotate the letter sprite.
|
|
for i=0,19 do
|
|
letter.y = -20 - i
|
|
poll_for_key_or_button(1)
|
|
end
|
|
|
|
letter.visible = false
|
|
text.text = text_tbl[14]
|
|
text.text_color = 14
|
|
|
|
poll_for_key_or_button(100)
|
|
if should_exit() then return end
|
|
|
|
fade_out(6)
|
|
end
|
|
|
|
function show_map()
|
|
|
|
local xhair_tbl = {
|
|
{["x"]=190, ["y"]=80},
|
|
{["x"]=180, ["y"]=82},
|
|
{["x"]=170, ["y"]=84},
|
|
{["x"]=162, ["y"]=81},
|
|
{["x"]=154, ["y"]=75},
|
|
{["x"]=145, ["y"]=73},
|
|
{["x"]=135, ["y"]=73},
|
|
{["x"]=125, ["y"]=74},
|
|
{["x"]=115, ["y"]=76},
|
|
{["x"]=105, ["y"]=78},
|
|
{["x"]=95, ["y"]=81},
|
|
{["x"]=86, ["y"]=86}
|
|
}
|
|
|
|
canvas_hide_all_sprites()
|
|
|
|
local bg = sprite_new(image_load("scene2.lzc", 0), 0, 24, true)
|
|
fade_in(6)
|
|
|
|
poll_for_key_or_button(50)
|
|
if should_exit() then return end
|
|
|
|
local i
|
|
for i=1,12 do
|
|
image_draw_line(bg.image, xhair_tbl[i].x-1, xhair_tbl[i].y-24-5, xhair_tbl[i].x+3, xhair_tbl[i].y-24-5, 9)
|
|
image_draw_line(bg.image, xhair_tbl[i].x+1, xhair_tbl[i].y-1-24-5, xhair_tbl[i].x+1, xhair_tbl[i].y+1-24-5, 9)
|
|
poll_for_key_or_button(20)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
poll_for_key_or_button(50)
|
|
|
|
fade_out(6)
|
|
|
|
end
|
|
|
|
function show_hike()
|
|
canvas_hide_all_sprites()
|
|
local g_img_tbl = image_load_all("scene2.lzc")
|
|
|
|
local bg = sprite_new(g_img_tbl[1], 0, 24, true)
|
|
local avatar = sprite_new(g_img_tbl[3][0], -15, 148, true)
|
|
local spector = sprite_new(g_img_tbl[4][0], -45, 149, true)
|
|
local fg = sprite_new(g_img_tbl[2], 0, 24, true)
|
|
|
|
fade_in(6)
|
|
|
|
local i
|
|
for i=0,94 do
|
|
avatar.image = g_img_tbl[3][i % 12]
|
|
avatar.x = i * 4 + -15
|
|
spector.image = g_img_tbl[4][(i+4) % 12]
|
|
spector.x = i * 4 + -45
|
|
poll_for_key_or_button(3)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
fade_out(6)
|
|
end
|
|
|
|
function show_lab_present_day()
|
|
canvas_hide_all_sprites()
|
|
local g_img_tbl = image_load_all("scene3.lzc")
|
|
local text_tbl = text_load("scenetxt.lzc", 1)
|
|
|
|
local text = sprite_new(nil, 0, 160, true)
|
|
text.text = text_tbl[1]
|
|
text.text_color = 2
|
|
text.text_align = 2
|
|
|
|
local moongate_tbl = image_load_all("moongate.lzc")
|
|
|
|
local bg = sprite_new(g_img_tbl[0], 0, 24, true)
|
|
|
|
local moongate = create_sprite(moongate_tbl[0][0], 125, 130)
|
|
moongate.visible = false
|
|
|
|
local spector = sprite_new(g_img_tbl[3][0], 165, 137,true)
|
|
local table = create_sprite(g_img_tbl[1][0], 151, 82)
|
|
local avatar = create_sprite(g_img_tbl[2][0], 65, 150)
|
|
|
|
--local s = sprite_new(g_img_tbl[4][0], 0, 24,true)
|
|
music_play("mdd_mus.lzc", 9)
|
|
|
|
fade_in(6)
|
|
|
|
local lab_tbl = {
|
|
{1, 2, 0, 0, 50},
|
|
{1, 2, 0, 1, 100},
|
|
{2, 14, 0, 1, 100},
|
|
{3, 2, 0, 2, 100},
|
|
{4, 2, -1, 0, 100},
|
|
{5, 14,-2, 0, 100},
|
|
{6, 2, -1, 0, 100},
|
|
{7, 14, 1, 3, 100},
|
|
{8, 2, 1, 2, 100},
|
|
{9, 14, 0, 2, 100}
|
|
|
|
}
|
|
|
|
local i
|
|
for i=1,7 do
|
|
if lab_tbl[i][3] >= 0 then
|
|
spector.image = g_img_tbl[3][lab_tbl[i][4]]
|
|
else
|
|
spector.visible = false
|
|
table.visible = false
|
|
avatar.visible = false
|
|
bg.image = g_img_tbl[4][math.abs(lab_tbl[i][3])-1]
|
|
end
|
|
|
|
text.text = text_tbl[lab_tbl[i][1]]
|
|
text.text_color = lab_tbl[i][2]
|
|
poll_for_key_or_button(lab_tbl[i][5])
|
|
if should_exit() then return end
|
|
end
|
|
|
|
bg.image = g_img_tbl[0]
|
|
spector.visible = true
|
|
avatar.visible = true
|
|
table.visible = true
|
|
table.image = g_img_tbl[1][1]
|
|
|
|
spector.image = g_img_tbl[3][3]
|
|
avatar.image = g_img_tbl[2][1]
|
|
|
|
moongate.visible = true
|
|
|
|
--moongate rises up from floor
|
|
for i=0,8 do
|
|
moongate.image = moongate_tbl[0][i]
|
|
poll_for_key_or_button(4)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
--avatar, spector discuss moongate
|
|
moongate.image = moongate_tbl[1][0]
|
|
for i=8,10 do
|
|
local j
|
|
for j=0,39 do
|
|
moongate.image = moongate_tbl[1][j % 8]
|
|
avatar.image = g_img_tbl[2][lab_tbl[i][3]]
|
|
spector.image = g_img_tbl[3][lab_tbl[i][4]]
|
|
text.text = text_tbl[lab_tbl[i][1]]
|
|
text.text_color = lab_tbl[i][2]
|
|
|
|
poll_for_key_or_button(4)
|
|
if should_exit() then return end
|
|
end
|
|
end
|
|
|
|
|
|
spector.image = moongate_tbl[4][0]
|
|
for i=0,64 do
|
|
moongate.image = moongate_tbl[1][i % 8]
|
|
avatar.image = moongate_tbl[2][math.floor(i/2)]
|
|
|
|
poll_for_key_or_button(4)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
avatar.visible = false
|
|
|
|
for i=0,39 do
|
|
moongate.image = moongate_tbl[1][i % 8]
|
|
if i ~= 39 then
|
|
spector.image = moongate_tbl[4][math.floor(i/2)]
|
|
end
|
|
|
|
poll_for_key_or_button(4)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
fade_out(6)
|
|
end
|
|
|
|
function show_lab_1895()
|
|
canvas_hide_all_sprites()
|
|
local scene4a_tbl = image_load_all("scene4a.lzc")
|
|
local scene4b_tbl = image_load_all("scene4b.lzc")
|
|
local moongate_tbl = image_load_all("moongate.lzc")
|
|
|
|
local text_tbl = text_load("scenetxt.lzc", 2)
|
|
|
|
local text = sprite_new(nil, 0, 160, true)
|
|
text.text = text_tbl[1]
|
|
text.text_color = 6
|
|
text.text_align = 2
|
|
|
|
local bg = sprite_new(scene4a_tbl[0], 0, 24, true)
|
|
|
|
local moongate = create_sprite(moongate_tbl[0][0], 140, 125)
|
|
moongate.visible = false
|
|
|
|
local tesla = sprite_new(scene4a_tbl[6][0], 187, 125, true)
|
|
local spark = sprite_new(scene4b_tbl[2][0], 32, 24, false)
|
|
|
|
local freud_body = create_sprite(scene4a_tbl[4][0], 0, 74)
|
|
local freud_head = create_sprite(scene4a_tbl[4][2], 23, 100)
|
|
|
|
local nellie = sprite_new(scene4b_tbl[1][0], 242, 24, false)
|
|
|
|
local bookcase = sprite_new(scene4a_tbl[1], 242, 24, false)
|
|
|
|
local blood = sprite_new(scene4a_tbl[5][0], 240, 40, true)
|
|
local garrett = sprite_new(scene4b_tbl[0][0], 270, 45, false)
|
|
|
|
fade_in(6)
|
|
|
|
music_play("mdd_mus.lzc", 10)
|
|
|
|
local i
|
|
for i=1,2 do
|
|
text.text = text_tbl[i]
|
|
local j
|
|
for j=0,20 do
|
|
if 10 - math.abs(j-10) > 5 then
|
|
tesla.image = scene4a_tbl[6][5]
|
|
else
|
|
tesla.image = scene4a_tbl[6][10 - math.abs(j-10)]
|
|
end
|
|
|
|
if j > 4 and j < 16 then
|
|
--FIXME need spark sfx
|
|
spark.visible = true
|
|
spark.image = scene4b_tbl[2][j % 10]
|
|
else
|
|
spark.visible = false
|
|
end
|
|
|
|
poll_for_key_or_button(4)
|
|
if should_exit() then return end
|
|
end
|
|
text.text_color = 7
|
|
end
|
|
|
|
moongate.visible = true
|
|
|
|
--moongate rises up from floor
|
|
tesla.x = 188
|
|
tesla.y = 128
|
|
tesla.image = scene4a_tbl[6][6]
|
|
|
|
for i=0,8 do
|
|
moongate.image = moongate_tbl[0][i]
|
|
if i == 5 then
|
|
tesla.image = scene4a_tbl[6][7]
|
|
end
|
|
|
|
if i == 2 then
|
|
blood.image = scene4a_tbl[5][1]
|
|
end
|
|
|
|
poll_for_key_or_button(4)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
--avatar walks out of the newly risen moongate
|
|
local avatar = create_sprite(moongate_tbl[3][0], 80, 150)
|
|
|
|
tesla.x = 180
|
|
tesla.y = 133
|
|
tesla.image = scene4a_tbl[6][8]
|
|
|
|
for i=0,68 do
|
|
moongate.image = moongate_tbl[1][i % 8]
|
|
avatar.image = moongate_tbl[3][math.floor(i/2)]
|
|
if i == 3 then
|
|
blood.image = scene4a_tbl[5][2]
|
|
end
|
|
|
|
if i == 4 then
|
|
freud_head.image = scene4a_tbl[4][3]
|
|
end
|
|
|
|
if i == 11 then
|
|
text.text = text_tbl[3]
|
|
text.text_color = 7
|
|
end
|
|
|
|
poll_for_key_or_button(3)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
--spector walks out of moongate
|
|
local spector = create_sprite(moongate_tbl[5][0], 140, 130)
|
|
|
|
text.text = text_tbl[4]
|
|
text.text_color = 14
|
|
|
|
for i=0,24 do
|
|
moongate.image = moongate_tbl[1][i % 8]
|
|
spector.image = moongate_tbl[5][math.floor(i/2)]
|
|
|
|
poll_for_key_or_button(3)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
--spector face closeup shot
|
|
canvas_hide_all_sprites()
|
|
|
|
bg.image = scene4a_tbl[9][0]
|
|
bg.visible = true
|
|
|
|
local face = sprite_new(scene4a_tbl[9][1], 0, 24, true)
|
|
|
|
text.text = text_tbl[5]
|
|
text.text_color = 2
|
|
text.visible = true
|
|
|
|
poll_for_key_or_button(200)
|
|
if should_exit() then return end
|
|
|
|
--spector shows note to tesla
|
|
text.text = text_tbl[6]
|
|
face.visible = false
|
|
bg.image = scene4a_tbl[0]
|
|
|
|
tesla.visible = true
|
|
tesla.image = scene4a_tbl[6][9]
|
|
|
|
blood.visible = true
|
|
|
|
freud_head.image = scene4a_tbl[4][2]
|
|
freud_head.visible = true
|
|
|
|
freud_body.visible = true
|
|
|
|
avatar.visible = true
|
|
avatar.x = 80
|
|
avatar.y = 150
|
|
avatar.image = scene4a_tbl[2][1]
|
|
|
|
spector.visible = true
|
|
spector.x = 145
|
|
spector.y = 140
|
|
spector.image = scene4a_tbl[3][1]
|
|
|
|
poll_for_key_or_button(200)
|
|
if should_exit() then return end
|
|
|
|
--tesla face closeup shot
|
|
canvas_hide_all_sprites()
|
|
|
|
bg.image = scene4a_tbl[7][0]
|
|
bg.visible = true
|
|
|
|
face.image = scene4a_tbl[7][1]
|
|
face.visible = true
|
|
|
|
text.text = text_tbl[7]
|
|
text.text_color = 7
|
|
text.visible = true
|
|
|
|
poll_for_key_or_button(200)
|
|
if should_exit() then return end
|
|
|
|
--blood closeup.
|
|
canvas_hide_all_sprites()
|
|
|
|
bg.image = scene4a_tbl[8][0]
|
|
bg.visible = true
|
|
|
|
face.visible = true
|
|
text.visible = true
|
|
text.text_color = 4
|
|
|
|
for i=8,9 do
|
|
face.image = scene4a_tbl[8][i - 7]
|
|
text.text = text_tbl[i]
|
|
|
|
poll_for_key_or_button(200)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
--Tesla calls Mr Garrett.
|
|
text.text = text_tbl[10]
|
|
text.text_color = 7
|
|
face.visible = false
|
|
bg.image = scene4a_tbl[0]
|
|
|
|
tesla.visible = true
|
|
tesla.image = scene4a_tbl[6][10]
|
|
|
|
blood.visible = true
|
|
|
|
freud_head.visible = true
|
|
freud_body.visible = true
|
|
|
|
avatar.visible = true
|
|
avatar.image = scene4a_tbl[2][0]
|
|
|
|
spector.visible = true
|
|
spector.image = scene4a_tbl[3][0]
|
|
|
|
poll_for_key_or_button(200)
|
|
if should_exit() then return end
|
|
|
|
--Mr Garrett entrance
|
|
garrett.visible = true
|
|
spector.x = 150
|
|
spector.y = 140
|
|
text.text = text_tbl[11]
|
|
text.text_color = 9
|
|
for i=0,31 do
|
|
if i == 5 then
|
|
spector.image = scene4a_tbl[3][2]
|
|
end
|
|
if i <= 10 then
|
|
avatar.image = scene4a_tbl[2][i]
|
|
end
|
|
|
|
garrett.image = scene4b_tbl[0][i]
|
|
|
|
poll_for_key_or_button(3)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
--Tesla checks note, talks about mission.
|
|
|
|
spector.image = scene4a_tbl[3][1]
|
|
spector.x = 155
|
|
avatar.image = scene4a_tbl[2][10]
|
|
freud_head.image = scene4a_tbl[4][1]
|
|
|
|
local text_color_tbl = {4, 6, 7, 7, 14, 2, 2, 7, 4, 4, 7, 9, 7, 4, 7, 4, 7, 2, 7, 7, 7, 7, 7, 11, 2, 7, 7}
|
|
|
|
for i=12,20 do
|
|
if i==13 or i==16 or i==20 then
|
|
face.visible = true
|
|
tesla.visible = false
|
|
blood.visible = false
|
|
freud_head.visible = false
|
|
freud_body.visible = false
|
|
avatar.visible = false
|
|
spector.visible = false
|
|
garrett.visible = false
|
|
local idx
|
|
if i==13 then
|
|
idx = 8
|
|
else
|
|
idx = 7
|
|
end
|
|
bg.image = scene4a_tbl[idx][0]
|
|
|
|
if i==16 then
|
|
face.image = scene4a_tbl[idx][2]
|
|
else
|
|
face.image = scene4a_tbl[idx][1]
|
|
end
|
|
else
|
|
local idx
|
|
if i == 14 then
|
|
spector.image = scene4a_tbl[3][0]
|
|
end
|
|
if i == 12 or i == 17 then
|
|
idx = 9
|
|
elseif i == 14 or i == 15 then
|
|
idx = 10
|
|
else
|
|
idx = 11
|
|
end
|
|
tesla.image = scene4a_tbl[6][idx]
|
|
end
|
|
|
|
text.text = text_tbl[i]
|
|
text.text_color = text_color_tbl[i+1]
|
|
|
|
poll_for_key_or_button(200)
|
|
if should_exit() then return end
|
|
|
|
face.visible = false
|
|
tesla.visible = true
|
|
blood.visible = true
|
|
freud_head.visible = true
|
|
freud_body.visible = true
|
|
avatar.visible = true
|
|
spector.visible = true
|
|
garrett.visible = true
|
|
bg.image = scene4a_tbl[0]
|
|
end
|
|
|
|
|
|
--Nellie walks in
|
|
|
|
tesla.image = scene4a_tbl[6][10]
|
|
|
|
text.text = text_tbl[21]
|
|
text.text_color = text_color_tbl[22]
|
|
|
|
nellie.visible = true
|
|
nellie.y = 125
|
|
bookcase.visible = true
|
|
|
|
for i=0,31 do
|
|
if i == 7 then
|
|
freud_head.image = scene4a_tbl[4][2]
|
|
end
|
|
nellie.image = scene4b_tbl[1][i%4]
|
|
nellie.x = 320 - i * 3
|
|
if i > 25 then
|
|
nellie.y = 125 + (i - 26) * 2
|
|
end
|
|
|
|
local avatar_idx = 20 - i
|
|
if avatar_idx > 10 then
|
|
avatar_idx = 10
|
|
end
|
|
|
|
if avatar_idx < 4 then
|
|
avatar_idx = 4
|
|
end
|
|
avatar.image = scene4a_tbl[2][avatar_idx]
|
|
|
|
local garrett_idx = 45 - i
|
|
if garrett_idx > 31 then
|
|
garrett_idx = 31
|
|
end
|
|
|
|
if garrett_idx < 18 then
|
|
garrett_idx = 18
|
|
end
|
|
garrett.image = scene4b_tbl[0][garrett_idx]
|
|
|
|
poll_for_key_or_button(3)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
--Nellie shakes hands with Spector, Avatar
|
|
|
|
spector.x = 165
|
|
nellie.x = 227
|
|
nellie.y = 135
|
|
|
|
for i=22,26 do
|
|
if i == 24 then
|
|
nellie.image = scene4b_tbl[1][7]
|
|
spector.image = scene4a_tbl[3][3]
|
|
else
|
|
if i == 23 then
|
|
nellie.image = scene4b_tbl[1][6]
|
|
else
|
|
nellie.image = scene4b_tbl[1][5]
|
|
end
|
|
spector.image = scene4a_tbl[3][0]
|
|
end
|
|
|
|
if i == 25 then
|
|
tesla.image = scene4a_tbl[6][9]
|
|
elseif i == 26 then
|
|
tesla.image = scene4a_tbl[6][11]
|
|
else
|
|
tesla.image = scene4a_tbl[6][12]
|
|
end
|
|
|
|
text.text = text_tbl[i]
|
|
text.text_color = text_color_tbl[i+1]
|
|
|
|
poll_for_key_or_button(200)
|
|
if should_exit() then return end
|
|
end
|
|
|
|
end
|
|
|
|
function run_introduction()
|
|
|
|
show_home()
|
|
if should_exit() then return end
|
|
|
|
show_map()
|
|
if should_exit() then return end
|
|
|
|
show_hike()
|
|
if should_exit() then return end
|
|
|
|
show_lab_present_day()
|
|
if should_exit() then return end
|
|
|
|
show_lab_1895()
|
|
if should_exit() then return end
|
|
|
|
fade_out(6)
|
|
end
|
|
|
|
local char_creation_tbl = {
|
|
{["text"]=-1, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=-2, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=3, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=4, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=5, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -4},
|
|
{["text"]=6, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=7, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=8, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=9, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=10, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=11, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=12, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=13, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=14, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -3},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=15, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=16, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=17, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=18, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=19, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=20, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=21, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=22, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=23, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=24, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=25, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=26, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=27, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=28, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=29, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=30, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=31, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=32, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=33, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=34, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=35, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=36, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=37, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=38, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=39, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=40, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=41, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=42, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=43, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=44, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=45, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=46, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=47, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=48, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=49, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=50, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=51, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=52, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=53, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=54, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=55, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=56, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=57, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=58, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=59, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -2},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=60, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=61, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=62, ["eye_sprite"]=3, ["can_move_pen"]=true, ["action_code"]= -1},
|
|
{["text"]=63, ["eye_sprite"]=1, ["can_move_pen"]=false, ["action_code"]= -1},
|
|
{["text"]=0, ["eye_sprite"]=2, ["can_move_pen"]=false, ["action_code"]= -1}
|
|
}
|
|
|
|
local g_player_name = ""
|
|
local gender_answer = ""
|
|
local avatar_str
|
|
local avatar_dex
|
|
local avatar_int
|
|
|
|
function insert_player_name(text)
|
|
local output = ""
|
|
local i = string.find(text,"$P")
|
|
while i ~= nil do
|
|
output = output .. string.sub(text,1,i-1) .. g_player_name
|
|
text = string.sub(text,i+2)
|
|
i = string.find(text, "$P")
|
|
end
|
|
output = output .. text
|
|
|
|
return output
|
|
end
|
|
|
|
local g_keycode_tbl =
|
|
{
|
|
[32]=" ",
|
|
[39]="'",
|
|
[44]=",",
|
|
[45]="-",
|
|
[46]=".",
|
|
[48]="0",
|
|
[49]="1",
|
|
[50]="2",
|
|
[51]="3",
|
|
[52]="4",
|
|
[53]="5",
|
|
[54]="6",
|
|
[55]="7",
|
|
[56]="8",
|
|
[57]="9",
|
|
[65]="A",
|
|
[66]="B",
|
|
[67]="C",
|
|
[68]="D",
|
|
[69]="E",
|
|
[70]="F",
|
|
[71]="G",
|
|
[72]="H",
|
|
[73]="I",
|
|
[74]="J",
|
|
[75]="K",
|
|
[76]="L",
|
|
[77]="M",
|
|
[78]="N",
|
|
[79]="O",
|
|
[80]="P",
|
|
[81]="Q",
|
|
[82]="R",
|
|
[83]="S",
|
|
[84]="T",
|
|
[85]="U",
|
|
[86]="V",
|
|
[87]="W",
|
|
[88]="X",
|
|
[89]="Y",
|
|
[90]="Z",
|
|
|
|
[97]="a",
|
|
[98]="b",
|
|
[99]="c",
|
|
[100]="d",
|
|
[101]="e",
|
|
[102]="f",
|
|
[103]="g",
|
|
[104]="h",
|
|
[105]="i",
|
|
[106]="j",
|
|
[107]="k",
|
|
[108]="l",
|
|
[109]="m",
|
|
[110]="n",
|
|
[111]="o",
|
|
[112]="p",
|
|
[113]="q",
|
|
[114]="r",
|
|
[115]="s",
|
|
[116]="t",
|
|
[117]="u",
|
|
[118]="v",
|
|
[119]="w",
|
|
[120]="x",
|
|
[121]="y",
|
|
[122]="z",
|
|
}
|
|
|
|
local g_name_sprite = sprite_new(nil, 120, 184, false)
|
|
g_name_sprite.text_color = 14
|
|
local g_cursor_sprite = sprite_new(nil, 120, 184, false)
|
|
g_cursor_sprite.text = "_"
|
|
g_cursor_sprite.text_color = 14
|
|
local g_cursor_timer = 0
|
|
g_char_index = 0
|
|
|
|
|
|
function collect_player_name()
|
|
local name_text = g_name_sprite.text
|
|
local len = string.len(name_text)
|
|
|
|
g_name_sprite.visible = true
|
|
|
|
local input = poll_for_input()
|
|
if input ~= nil then
|
|
if should_exit() then
|
|
return false
|
|
end
|
|
|
|
if (input == SDLK_BACKSPACE or input == SDLK_LEFT) and len > 0 then
|
|
g_name_sprite.text = string.sub(name_text, 1, len - 1)
|
|
len = len - 1
|
|
if len == 1 then -- old len
|
|
g_char_index = 0
|
|
else
|
|
g_char_index = string.byte(name_text, len -1)
|
|
end
|
|
elseif (input == SDLK_RETURN or input == SDLK_KP_ENTER) and string.len(trim_string(name_text)) > 0 then --return
|
|
g_name_sprite.visible = false
|
|
g_cursor_sprite.visible = false
|
|
g_player_name = trim_string(name_text)
|
|
return true
|
|
elseif input == SDLK_UP then --up
|
|
if g_char_index == 0 then
|
|
if len > 0 then
|
|
g_char_index = SDLK_a
|
|
else
|
|
g_char_index = 65 --A
|
|
end
|
|
elseif g_char_index <= 32 then --gap in characters
|
|
g_char_index = 48
|
|
elseif g_char_index >= 57 and g_char_index < 65 then --gap in characters
|
|
g_char_index = 65
|
|
elseif g_char_index >= 90 and g_char_index < 97 then --gap in characters
|
|
g_char_index = 97
|
|
elseif g_char_index >= 122 then --last char
|
|
g_char_index = 32
|
|
else
|
|
g_char_index = g_char_index + 1
|
|
end
|
|
|
|
if len > 0 then -- erase char
|
|
name_text = string.sub(name_text, 1, len - 1)
|
|
end
|
|
g_name_sprite.text = name_text..g_keycode_tbl[g_char_index]
|
|
elseif input == SDLK_DOWN then --down
|
|
if g_char_index == 0 then
|
|
if len > 0 then
|
|
g_char_index = 122 --z
|
|
else
|
|
g_char_index = 90 --Z
|
|
end
|
|
elseif g_char_index == 65 then --gap in characters
|
|
g_char_index = 57
|
|
elseif g_char_index == 97 then --gap in characters
|
|
g_char_index = 90
|
|
elseif g_char_index <= 32 then --first char
|
|
g_char_index = 122
|
|
elseif g_char_index <= 48 then --gap in characters
|
|
g_char_index = 32
|
|
else
|
|
g_char_index = g_char_index - 1
|
|
end
|
|
|
|
if len > 0 then -- erase char
|
|
name_text = string.sub(name_text, 1, len - 1)
|
|
end
|
|
g_name_sprite.text = name_text..g_keycode_tbl[g_char_index]
|
|
elseif input == SDLK_RIGHT and len < 13 then --right
|
|
g_char_index = SDLK_a --a
|
|
g_name_sprite.text = name_text.."a"
|
|
elseif g_keycode_tbl[input] ~= nil and len < 13 then
|
|
g_name_sprite.text = name_text..g_keycode_tbl[input]
|
|
len = len + 1
|
|
end
|
|
|
|
end
|
|
|
|
if len == 13 then
|
|
g_cursor_sprite.visible = false
|
|
else
|
|
g_cursor_sprite.x = 120 + g_name_sprite.text_width
|
|
if g_cursor_timer == 0 then
|
|
g_cursor_timer = 8
|
|
if g_cursor_sprite.visible == true then
|
|
g_cursor_sprite.visible = false
|
|
else
|
|
g_cursor_sprite.visible = true
|
|
end
|
|
else
|
|
g_cursor_timer = g_cursor_timer - 1
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function update_freud(freud)
|
|
if freud.eyes.blink_timer < 200 then
|
|
if freud.timer == 0 then
|
|
freud.timer = math.random(100, 350)
|
|
if freud.state == FREUD_STATE_STARING then
|
|
freud.state = FREUD_STATE_WRITING
|
|
else
|
|
freud.state = FREUD_STATE_STARING
|
|
end
|
|
else
|
|
freud.timer = freud.timer - 1
|
|
end
|
|
|
|
local state = freud.state
|
|
if state == FREUD_STATE_STARING then
|
|
if freud.can_move_pen == true then
|
|
freud.eyes.sprite.image = freud.images[0][1]
|
|
else
|
|
freud.eyes.sprite.image = freud.images[0][freud.eyes.sprite_idx]
|
|
end
|
|
elseif state == FREUD_STATE_WRITING and freud.can_move_pen == true then
|
|
freud.eyes.sprite.image = freud.images[0][freud.eyes.sprite_idx]
|
|
if freud.timer % 4 == 0 then
|
|
freud.pen.sprite.image = freud.images[2][math.random(0,6)]
|
|
freud.pen.x_off = freud.pen.x_off + math.random(0, 3)
|
|
if freud.pen.x_off >= 30 then
|
|
freud.pen.x_off = freud.pen.x_off % 30
|
|
freud.pen.y_off = (freud.pen.y_off + 2) % 20
|
|
end
|
|
|
|
freud.pen.sprite.x = 128 - freud.pen.x_off
|
|
freud.pen.sprite.y = 83 + freud.pen.y_off
|
|
end
|
|
end
|
|
end
|
|
|
|
if freud.eyes.blink_timer == 200 then
|
|
if freud.eyes.sprite_idx == 2 then
|
|
freud.eyes.sprite.image = freud.images[0][5]
|
|
else
|
|
freud.eyes.sprite.image = freud.images[0][4]
|
|
end
|
|
elseif freud.eyes.blink_timer == 215 then
|
|
if state == FREUD_STATE_WRITING or freud.can_move_pen == false then
|
|
freud.eyes.sprite.image = freud.images[0][freud.eyes.sprite_idx]
|
|
else
|
|
freud.eyes.sprite.image = freud.images[0][1]
|
|
end
|
|
freud.eyes.blink_timer = -1
|
|
end
|
|
freud.eyes.blink_timer = freud.eyes.blink_timer + 1
|
|
end
|
|
|
|
function ask_question(question_idx, text, freud)
|
|
question_idx = question_idx + 1
|
|
|
|
local key_input = nil
|
|
|
|
local text_offset = char_creation_tbl[question_idx].text
|
|
|
|
while text_offset ~= 0 do
|
|
|
|
if text_offset < 0 then
|
|
text.text_color = 4
|
|
else
|
|
text.text_color = 6
|
|
end
|
|
|
|
text.text = insert_player_name(freud.text_tbl[math.abs(text_offset)])
|
|
|
|
freud.eyes.sprite_idx = char_creation_tbl[question_idx].eye_sprite
|
|
freud.eyes.sprite.image = freud.images[0][freud.eyes.sprite_idx]
|
|
freud.eyes.blink_timer = 0
|
|
freud.state = FREUD_STATE_STARING
|
|
freud.can_move_pen = char_creation_tbl[question_idx].can_move_pen
|
|
local action = char_creation_tbl[question_idx].action_code
|
|
|
|
local continue_loop = true
|
|
while continue_loop do
|
|
if action == -1 then
|
|
local input = poll_for_input()
|
|
if input ~= nil then
|
|
continue_loop = false
|
|
end
|
|
elseif action == -2 then
|
|
-- A, B input
|
|
local input = poll_for_input()
|
|
if input ~= nil and (input == SDLK_a or input == SDLK_b) then
|
|
key_input = input
|
|
continue_loop = false
|
|
end
|
|
elseif action == -3 then
|
|
local input = poll_for_input()
|
|
if input ~= nil and (input == SDLK_a or input == SDLK_b or input == SDLK_c) then
|
|
key_input = input
|
|
continue_loop = false
|
|
end
|
|
elseif action == -4 then
|
|
if collect_player_name() == true then
|
|
continue_loop = false
|
|
end
|
|
end
|
|
|
|
if should_exit() then
|
|
return nil
|
|
end
|
|
|
|
update_freud(freud)
|
|
canvas_update()
|
|
end
|
|
|
|
question_idx = question_idx + 1
|
|
text_offset = char_creation_tbl[question_idx].text
|
|
end
|
|
|
|
return key_input
|
|
end
|
|
|
|
function question_1_answer_a(text, freud, rand_high, rand_low)
|
|
ask_question(18, text, freud)
|
|
local var_14 = ask_question(20, text, freud)
|
|
if var_14 == SDLK_a then
|
|
local var_16 = ask_question(23, text, freud)
|
|
if var_16 == SDLK_a then
|
|
local answer = ask_question(29, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_str = rand_high
|
|
avatar_int = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(31, text, freud)
|
|
else
|
|
ask_question(34, text, freud)
|
|
end
|
|
elseif answer == SDLK_b then
|
|
avatar_int = rand_high
|
|
avatar_str = rand_low
|
|
end
|
|
elseif var_16 == SDLK_b then
|
|
local answer = ask_question(37, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_int = rand_high
|
|
avatar_dex = rand_low
|
|
ask_question(40, text, freud)
|
|
elseif answer == SDLK_b then
|
|
avatar_dex = rand_high
|
|
avatar_int = rand_low
|
|
ask_question(43, text, freud)
|
|
end
|
|
end
|
|
elseif var_14 == SDLK_b then
|
|
local var_16 = ask_question(26, text, freud)
|
|
if var_16 == SDLK_a then
|
|
local answer = ask_question(46, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_str = rand_high
|
|
avatar_dex = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(49, text, freud)
|
|
else
|
|
ask_question(52, text, freud)
|
|
end
|
|
elseif answer == SDLK_b then
|
|
avatar_dex = rand_high
|
|
avatar_str = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(58, text, freud)
|
|
else
|
|
ask_question(55, text, freud)
|
|
end
|
|
end
|
|
elseif var_16 == SDLK_b then
|
|
local answer = ask_question(61, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_int = rand_high
|
|
avatar_dex = rand_low
|
|
ask_question(64, text, freud)
|
|
elseif answer == SDLK_b then
|
|
avatar_dex = rand_high
|
|
avatar_int = rand_low
|
|
ask_question(66, text, freud)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function question_1_answer_b(text, freud, rand_high, rand_low)
|
|
local var_14 = ask_question(26, text, freud)
|
|
if var_14 == SDLK_a then
|
|
local var_16 = ask_question(23, text, freud)
|
|
if var_16 == SDLK_a then
|
|
local answer = ask_question(29, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_str = rand_high
|
|
avatar_int = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(31, text, freud)
|
|
else
|
|
ask_question(34, text, freud)
|
|
end
|
|
elseif answer == SDLK_b then
|
|
avatar_int = rand_high
|
|
avatar_str = rand_low
|
|
end
|
|
elseif var_16 == SDLK_b then
|
|
local answer = ask_question(37, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_int = rand_high
|
|
avatar_dex = rand_low
|
|
ask_question(40, text, freud)
|
|
elseif answer == SDLK_b then
|
|
avatar_dex = rand_high
|
|
avatar_int = rand_low
|
|
ask_question(43, text, freud)
|
|
end
|
|
end
|
|
elseif var_14 == SDLK_b then
|
|
local var_16 = ask_question(20, text, freud)
|
|
if var_16 == SDLK_a then
|
|
local answer = ask_question(72, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_int = rand_high
|
|
avatar_str = rand_low
|
|
ask_question(75, text, freud)
|
|
elseif answer == SDLK_b then
|
|
avatar_str = rand_high
|
|
avatar_int = rand_low
|
|
ask_question(78, text, freud)
|
|
end
|
|
elseif var_16 == SDLK_b then
|
|
local answer = ask_question(46, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_str = rand_high
|
|
avatar_dex = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(49, text, freud)
|
|
else
|
|
ask_question(52, text, freud)
|
|
end
|
|
elseif answer == SDLK_b then
|
|
avatar_dex = rand_high
|
|
avatar_str = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(58, text, freud)
|
|
else
|
|
ask_question(55, text, freud)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function question_1_answer_c(text, freud, rand_high, rand_low)
|
|
ask_question(81, text, freud)
|
|
local var_14 = ask_question(23, text, freud)
|
|
if var_14 == SDLK_a then
|
|
local var_16 = ask_question(26, text, freud)
|
|
if var_16 == SDLK_a then
|
|
local answer = ask_question(46, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_str = rand_high
|
|
avatar_dex = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(49, text, freud)
|
|
else
|
|
ask_question(52, text, freud)
|
|
end
|
|
elseif answer == SDLK_b then
|
|
avatar_dex = rand_high
|
|
avatar_str = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(58, text, freud)
|
|
else
|
|
ask_question(55, text, freud)
|
|
end
|
|
end
|
|
elseif var_16 == SDLK_b then
|
|
local answer = ask_question(37, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_int = rand_high
|
|
avatar_dex = rand_low
|
|
ask_question(40, text, freud)
|
|
elseif answer == SDLK_b then
|
|
avatar_dex = rand_high
|
|
avatar_int = rand_low
|
|
ask_question(43, text, freud)
|
|
end
|
|
end
|
|
elseif var_14 == SDLK_b then
|
|
local var_16 = ask_question(20, text, freud)
|
|
if var_16 == SDLK_a then
|
|
local answer = ask_question(29, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_str = rand_high
|
|
avatar_int = rand_low
|
|
if gender_answer == SDLK_a then
|
|
ask_question(31, text, freud)
|
|
else
|
|
ask_question(34, text, freud)
|
|
end
|
|
elseif answer == SDLK_b then
|
|
avatar_int = rand_high
|
|
avatar_str = rand_low
|
|
end
|
|
elseif var_16 == SDLK_b then
|
|
local answer = ask_question(84, text, freud)
|
|
if answer == SDLK_a then
|
|
avatar_dex = rand_high
|
|
avatar_str = rand_low
|
|
ask_question(87, text, freud)
|
|
elseif answer == SDLK_b then
|
|
avatar_str = rand_high
|
|
avatar_dex = rand_low
|
|
ask_question(90, text, freud)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function create_character()
|
|
canvas_hide_all_sprites()
|
|
local create_tbl = image_load_all("create.lzc")
|
|
|
|
local text_tbl = text_load("scenetxt.lzc", 5)
|
|
|
|
local text = sprite_new(nil, 0, 160, true)
|
|
text.text = text_tbl[0]
|
|
text.text_color = 2
|
|
text.text_align = 2
|
|
|
|
local bg = sprite_new(create_tbl[0][0], 0, 24, true)
|
|
local eyes_sprite = sprite_new(create_tbl[0][4], 0, 24, true)
|
|
local pen_sprite = sprite_new(create_tbl[2][0], 128, 83, true)
|
|
local clipboard = sprite_new(create_tbl[1], 89, 109, true)
|
|
|
|
local eyes ={["sprite"]=eyes_sprite, ["sprite_idx"]=4, ["blink_timer"]=0}
|
|
local pen = {["sprite"]=pen_sprite,["x_off"]=0,["y_off"]=0,["sprite_idx"]=0,["timer"]=0,}
|
|
local freud = {["eyes"]=eyes, ["pen"]=pen, ["state"]=FREUD_STATE_STARING, ["timer"] = 0, ["can_move_pen"] = false, ["images"]=create_tbl, ["text_tbl"]=text_tbl}
|
|
|
|
music_play("mdd_mus.lzc", 7)
|
|
|
|
local rand_high = math.random(24,26)
|
|
local rand_low = math.random(22,24)
|
|
local stat_base = math.random(18,22)
|
|
|
|
avatar_str = stat_base
|
|
avatar_dex = stat_base
|
|
avatar_int = stat_base
|
|
|
|
local gender
|
|
|
|
gender_answer = ask_question(0, text, freud)
|
|
if gender_answer == SDLK_a then
|
|
gender = 0 --male
|
|
ask_question(8, text, freud)
|
|
elseif gender_answer == SDLK_b then
|
|
gender = 1 --female
|
|
ask_question(11, text, freud)
|
|
end
|
|
|
|
local answer = ask_question(14, text, freud)
|
|
|
|
if answer == SDLK_a then
|
|
question_1_answer_a(text, freud, rand_high, rand_low)
|
|
elseif answer == SDLK_b then
|
|
question_1_answer_b(text, freud, rand_high, rand_low)
|
|
elseif answer == SDLK_c then
|
|
question_1_answer_c(text, freud, rand_high, rand_low)
|
|
end
|
|
|
|
if should_exit() then
|
|
return false
|
|
end
|
|
|
|
ask_question(69, text, freud)
|
|
|
|
config_set("config/newgame", true)
|
|
config_set("config/newgamedata/name", g_player_name)
|
|
config_set("config/newgamedata/gender", gender)
|
|
config_set("config/newgamedata/str", avatar_str)
|
|
config_set("config/newgamedata/dex", avatar_dex)
|
|
config_set("config/newgamedata/int", avatar_int)
|
|
|
|
--wait_for_input()
|
|
fade_out(6)
|
|
|
|
return true
|
|
end
|
|
|
|
function journey_onward()
|
|
end
|
|
|
|
local g_menu_idx = 0
|
|
local g_menu_cursor_sprite = nil
|
|
local g_menu_bg_sprite = nil
|
|
|
|
function execute_menu_item(cursor_pos)
|
|
if cursor_pos ~= nil then
|
|
set_menu_cursor_pos(cursor_pos)
|
|
end
|
|
|
|
hide_mouse_cursor()
|
|
|
|
if g_menu_idx == 0 then -- story so far
|
|
run_introduction()
|
|
elseif g_menu_idx == 1 then -- create char
|
|
if create_character() == true then
|
|
return "J" -- starting new game
|
|
end
|
|
elseif g_menu_idx == 2 then -- journey onward
|
|
journey_onward()
|
|
return "J"
|
|
elseif g_menu_idx == 3 then -- about md
|
|
about_martian_dreams()
|
|
end
|
|
|
|
clear_should_exit_flag()
|
|
canvas_hide_all_sprites()
|
|
canvas_set_opacity(0xff)
|
|
music_stop()
|
|
g_menu_bg_sprite.visible = true
|
|
g_menu_cursor_sprite.visible = true
|
|
|
|
return "";
|
|
end
|
|
|
|
function update_menu_cursor()
|
|
local box_y_tbl = {[0]=130,[1]=147,[2]=164,[3]=181}
|
|
g_menu_cursor_sprite.y = box_y_tbl[g_menu_idx]
|
|
end
|
|
|
|
function set_menu_cursor_pos(new_pos)
|
|
g_menu_idx = new_pos
|
|
update_menu_cursor()
|
|
end
|
|
|
|
function menu_cursor_down()
|
|
g_menu_idx = (g_menu_idx + 1) % 4
|
|
update_menu_cursor()
|
|
end
|
|
|
|
function menu_cursor_up()
|
|
g_menu_idx = g_menu_idx - 1
|
|
if g_menu_idx < 0 then
|
|
g_menu_idx = 3
|
|
end
|
|
update_menu_cursor()
|
|
end
|
|
|
|
local g_mouse_cursor_visible = false
|
|
|
|
function show_mouse_cursor()
|
|
if g_mouse_cursor_visible == false then
|
|
mouse_cursor_set_pointer(9)
|
|
mouse_cursor_visible(true)
|
|
g_mouse_cursor_visible = true
|
|
end
|
|
end
|
|
|
|
function hide_mouse_cursor()
|
|
if g_mouse_cursor_visible == true then
|
|
mouse_cursor_visible(false)
|
|
g_mouse_cursor_visible = false
|
|
end
|
|
end
|
|
|
|
function main_menu()
|
|
canvas_hide_all_sprites()
|
|
music_stop()
|
|
clear_should_exit_flag()
|
|
local g_img_tbl = image_load_all("mdmenu.lzc")
|
|
|
|
g_menu_bg_sprite = sprite_new(g_img_tbl[0][0], 0, 0, true)
|
|
|
|
fade_in()
|
|
|
|
g_menu_cursor_sprite = sprite_new(g_img_tbl[0][2], 26, 0, true)
|
|
update_menu_cursor()
|
|
canvas_set_update_interval(10)
|
|
|
|
while true do
|
|
canvas_update()
|
|
local input = input_poll(true)
|
|
|
|
if engine_should_quit() == 1 then
|
|
return "Q"
|
|
end
|
|
|
|
if input ~= nil then
|
|
canvas_set_update_interval(25)
|
|
|
|
if input == SDLK_q then -- q
|
|
return "Q"
|
|
elseif input == SDLK_RETURN or input == SDLK_SPACE or input == KP_ENTER then -- space or return
|
|
if execute_menu_item() == "J" then
|
|
return "J"
|
|
end
|
|
elseif input == SDLK_r or input == SDLK_i then -- Run Introduction
|
|
execute_menu_item(0)
|
|
elseif input == SDLK_c then -- c (create char)
|
|
if execute_menu_item(1) == "J" then
|
|
return "J" -- starting new game
|
|
end
|
|
elseif input == SDLK_j or input == SDLK_g then -- j, g (journey onward, continue Game)
|
|
execute_menu_item(2)
|
|
return "J"
|
|
elseif input == SDLK_a then -- a (about MD)
|
|
execute_menu_item(3)
|
|
elseif input == SDLK_DOWN or input == SDL_KP2 then -- down key
|
|
menu_cursor_down()
|
|
elseif input == SDLK_UP or input == SDL_KP8 then -- up key
|
|
menu_cursor_up()
|
|
elseif input == MOUSE_MOTION or input == MOUSE_CLICK then --mouse movement
|
|
show_mouse_cursor()
|
|
local x = get_mouse_x()
|
|
local y = get_mouse_y()
|
|
if x > 57 and x < 260 and y > 130 then
|
|
if y > 130 and y < 148 then -- run introduction
|
|
set_menu_cursor_pos(0)
|
|
elseif y > 147 and y < 164 then -- create new char
|
|
set_menu_cursor_pos(1)
|
|
elseif y > 163 and y < 181 then -- continue game
|
|
set_menu_cursor_pos(2)
|
|
elseif y > 180 then -- about MD
|
|
set_menu_cursor_pos(3)
|
|
end
|
|
if input == MOUSE_CLICK then
|
|
if execute_menu_item() == "J" then
|
|
return "J"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
canvas_set_update_interval(10)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
|
|
mouse_cursor_visible(false)
|
|
canvas_set_update_interval(25)
|
|
canvas_set_bg_color(0)
|
|
canvas_set_opacity(0)
|
|
|
|
origin_fx_sequence()
|
|
|
|
canvas_set_palette("md_title.pal", 0)
|
|
canvas_hide_all_sprites()
|
|
play_intro()
|
|
|
|
if main_menu() == "Q" then -- returns "Q" for quit or "J" for Journey Onward
|
|
hide_mouse_cursor()
|
|
fade_out(6)
|
|
config_set("config/quit", true)
|
|
end
|
|
|
|
music_stop()
|
|
canvas_hide()
|