Files
scummvm-cursorfix/devtools/create_ultima/files/ultima6/scripts/md/intro.lua
2026-02-02 04:50:13 +01:00

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()