2020-03-08 12:49:40 -07:00
SDLK_UP = 82 + 1073741824
SDLK_DOWN = 81 + 1073741824
SDLK_RIGHT = 79 + 1073741824
SDLK_LEFT = 80 + 1073741824
g_img_tbl = { }
local function poll_for_esc ( )
local input = input_poll ( )
if input ~= nil and input == 27 then
return true
end
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
return true
end
2020-03-08 12:49:40 -07:00
return false
end
local function wait_for_input ( )
local input = nil
while input == nil do
canvas_update ( )
input = input_poll ( )
if input ~= nil then
break
end
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
break
end
2020-03-08 12:49:40 -07:00
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return input
end
local function should_exit ( input )
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
return true
end
2020-03-08 12:49:40 -07:00
if input ~= nil and input == 27 then
return true
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return false
end
local function fade_out ( )
local i
for i = 0xff , 0 , - 3 do
canvas_set_opacity ( i )
canvas_update ( )
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
break
end
2020-03-08 12:49:40 -07:00
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return false
end
local function fade_out_sprite ( sprite , speed )
local i
if speed ~= nil then
speed = - speed
else
speed = - 3
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0xff , 0 , speed do
sprite.opacity = i
canvas_update ( )
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
break
end
2020-03-08 12:49:40 -07:00
end
return false
end
local function fade_in ( )
local i
for i = 0x0 , 0xff , 3 do
canvas_set_opacity ( i )
canvas_update ( )
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
break
end
2020-03-08 12:49:40 -07:00
end
return false
end
local function fade_in_sprite ( sprite , speed )
local i
if speed ~= nil then
speed = speed
else
speed = 3
end
for i = 0 , 0xff , speed do
sprite.opacity = i
canvas_update ( )
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
break
end
2020-03-08 12:49:40 -07:00
end
return false
end
local function load_images ( filename )
g_img_tbl = image_load_all ( filename )
end
g_clock_tbl = { }
local function load_clock ( )
g_clock_tbl [ " h1 " ] = sprite_new ( nil , 0xdd , 0x14 , true )
g_clock_tbl [ " h2 " ] = sprite_new ( nil , 0xdd + 4 , 0x14 , true )
g_clock_tbl [ " m1 " ] = sprite_new ( nil , 0xdd + 0xa , 0x14 , true )
g_clock_tbl [ " m2 " ] = sprite_new ( nil , 0xdd + 0xe , 0x14 , true )
end
local function display_clock ( )
local t = os.date ( " *t " )
local hour = t.hour
local minute = t.min
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if hour > 12 then
hour = hour - 12
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if hour < 10 then
g_clock_tbl [ " h1 " ] . image = g_img_tbl [ 12 ]
else
g_clock_tbl [ " h1 " ] . image = g_img_tbl [ 3 ]
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if hour >= 10 then
hour = hour - 10
end
g_clock_tbl [ " h2 " ] . image = g_img_tbl [ hour + 2 ]
g_clock_tbl [ " m1 " ] . image = g_img_tbl [ math.floor ( minute / 10 ) + 2 ]
g_clock_tbl [ " m2 " ] . image = g_img_tbl [ ( minute % 10 ) + 2 ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
end
g_lounge_tbl = { }
g_tv_base_x = 0xe5
g_tv_base_y = 0x32
local function load_lounge ( )
g_lounge_tbl [ " bg0 " ] = sprite_new ( g_img_tbl [ 15 ] , 210 , 0 , true )
g_lounge_tbl [ " bg " ] = sprite_new ( g_img_tbl [ 0 ] , 0 , 0 , true )
g_lounge_tbl [ " bg1 " ] = sprite_new ( g_img_tbl [ 1 ] , 320 , 0 , true )
g_lounge_tbl [ " avatar " ] = sprite_new ( g_img_tbl [ 0xd ] , 0 , 63 , true )
g_lounge_tbl [ " tv " ] = { sprite_new ( nil , g_tv_base_x , g_tv_base_y , true ) , sprite_new ( nil , g_tv_base_x , g_tv_base_y , true ) , sprite_new ( nil , g_tv_base_x , g_tv_base_y , true ) , sprite_new ( nil , g_tv_base_x , g_tv_base_y , true ) , sprite_new ( nil , g_tv_base_x , g_tv_base_y , true ) }
for i = 1 , 5 do
local sprite = g_lounge_tbl [ " tv " ] [ i ]
sprite.clip_x = g_tv_base_x
sprite.clip_y = g_tv_base_y
sprite.clip_w = 57
sprite.clip_h = 37
end
g_lounge_tbl [ " finger " ] = sprite_new ( g_img_tbl [ 0xe ] , 143 , 91 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_lounge_tbl [ " tv_static " ] = image_new ( 57 , 37 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
load_clock ( )
end
g_tv_loop_pos = 0
g_tv_loop_cnt = 0
g_tv_cur_pos = 1
g_tv_cur_program = 3
g_tv_news_image = 0
g_tv_news_image_tbl = { 0x5 , 0x6 , 0x7 , 0x0D , 0x0E , 0x18 , 0x19 , 0x1F , 0x20 }
g_tv_programs = {
{ 0x82 , 0x82 , 0x80 , 0x3 , 0x2 , 0x8A , 0x2 , 0x8A , 0x1 , 0x8A , 0x1 , 0x8A , 0x0 , 0x8A , 0x0 , 0x8A , 0x1 , 0x8A , 0x1 , 0x81 } , --breathing
{ 0x82 , 0x82 , 0x80 , 0x28 , 0x3 , 0x8B , 0x81 } , --intestines
{ 0x82 , 0x82 , 0x80 , 0x4 , 0x4 , 0x81 , 0x80 , 0x4 , 0x8 , 0x81 , 0x80 , 0x4 , 0x9 , 0x81 , 0x80 , 0x4 , 0x0A , 0x81 , 0x80 , 0x4 , 0x0B , 0x81 , 0x80 , 0x4 , 0x0C , 0x81 } , --vacuum
{ 0x82 , 0x82 , 0x87 , 0x80 , 0x46 , 0x0F , 0x86 , 0x84 , 0x9 , 0x10 , 0x10 , 0x10 , 0x11 , 0x11 , 0x11 , 0x12 , 0x12 , 0x12 , 0x81 } , --tv anchor man
{ 0x82 , 0x82 , 0x80 , 0x32 , 0x83 , 0x81 } , --endless road
{ 0x82 , 0x82 , 0x80 , 0x5 , 0x27 , 0x8A , 0x28 , 0x8A , 0x29 , 0x81 , 0x80 , 0x6 , 0x2A , 0x8A , 0x2A , 0x8A , 0x2B , 0x8A , 0x2B , 0x8A , 0x2C , 0x8A , 0x2C , 0x8A , 0x2D , 0x8A , 0x2D , 0x81 , 0x80 , 0x0A , 0x2E , 0x8A , 0x2F , 0x8A , 0x30 , 0x8A , 0x84 , 0x9 , 0x2E , 0x2E , 0x2E , 0x2F , 0x2F , 0x2F , 0x30 , 0x30 , 0x30 , 0x8A , 0x2E , 0x8A , 0x2F , 0x8A , 0x30 , 0x81 } , --rock band
{ 0x82 , 0x82 , 0x80 , 0x55 , 0x16 , 0x17 , 0x84 , 0x0C , 0x13 , 0x13 , 0x13 , 0x13 , 0x14 , 0x14 , 0x14 , 0x14 , 0x15 , 0x15 , 0x15 , 0x15 , 0x88 , 0x81 , 0x80 , 0x0F , 0x16 , 0x84 , 0x2 , 0x1A , 0x1B , 0x89 , 0x88 , 0x81 , 0x80 , 0x3 , 0x16 , 0x1A , 0x89 , 0x88 , 0x81 , 0x80 , 0x3 , 0x16 , 0x1C , 0x88 , 0x81 , 0x80 , 0x3 , 0x16 , 0x1D , 0x88 , 0x81 , 0x80 , 0x3 , 0x16 , 0x1E , 0x88 , 0x81 , 0x80 , 0x3 , 0x16 , 0x23 , 0x88 , 0x81 , 0x80 , 0x3 , 0x16 , 0x24 , 0x88 , 0x81 , 0x80 , 0x32 , 0x16 , 0x88 , 0x81 } --pledge now!
}
g_tv_x_off = {
0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1F , 0x1F , 0x1F , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1F , 0x1F ,
0x0 , 0x9 , 0x9 , 0x9 , 0x0C , 0x0C , 0x0C , 0x0 , 0x4 , 0x1F , 0x1F , 0x4 , 0x0 , 0x4 ,
0x4 , 0x4 , 0x1F , 0x1F , 0x0 , 0x0 , 0x6 , 0x6 , 0x8 , 0x4 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0
}
g_tv_y_off = {
0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x2 , 0x2 , 0x2 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x2 , 0x2 , 0x0 , 0x7 , 0x7 ,
0x7 , 0x3 , 0x3 , 0x3 , 0x0 , 0x2 , 0x2 , 0x2 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x2 , 0x2 , 0x0 , 0x0 , 0x3 ,
0x8 , 0x1D , 0x1C , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
0x0 , 0x0
}
g_tv_pledge_counter = 0
g_tv_pledge_image = 37
g_tv_road_offset = 0xe
local function display_tv_sprite ( s_idx , image_num )
local sprite = g_lounge_tbl.tv [ s_idx ]
if sprite ~= nil then
sprite.image = g_img_tbl [ 0x10 + image_num ]
sprite.x = g_tv_base_x + g_tv_x_off [ image_num + 1 ]
sprite.y = g_tv_base_y + g_tv_y_off [ image_num + 1 ]
if g_tv_base_x < 0 then
sprite.clip_x = 0
else
sprite.clip_x = g_tv_base_x
end
sprite.clip_y = g_tv_base_y
sprite.visible = true
end
end
local function display_tv ( )
local should_exit = false
local s_idx = 1
for i = 1 , 5 do
g_lounge_tbl [ " tv " ] [ i ] . visible = false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_lounge_tbl.finger . visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
while should_exit == false do
local item = g_tv_programs [ g_tv_cur_program ] [ g_tv_cur_pos ]
if item < 0x80 then
display_tv_sprite ( s_idx , item )
s_idx = s_idx + 1
elseif item == 0x82 then
--static
local sprite = g_lounge_tbl.tv [ s_idx ]
if sprite ~= nil then
sprite.image = g_lounge_tbl [ " tv_static " ]
image_static ( sprite.image )
sprite.x = g_tv_base_x
sprite.y = g_tv_base_y
sprite.clip_x = g_tv_base_x
sprite.clip_y = g_tv_base_y
sprite.visible = true
end
g_lounge_tbl.finger . visible = true
should_exit = true
elseif item == 0x80 then --loop start
g_tv_cur_pos = g_tv_cur_pos + 1
g_tv_loop_cnt = g_tv_programs [ g_tv_cur_program ] [ g_tv_cur_pos ]
g_tv_loop_pos = g_tv_cur_pos
elseif item == 0x81 then --loop end
if g_tv_loop_cnt > 0 then
g_tv_cur_pos = g_tv_loop_pos
g_tv_loop_cnt = g_tv_loop_cnt - 1
end
should_exit = true
elseif item == 0x83 then --endless road
g_tv_road_offset = g_tv_road_offset - 1
if g_tv_road_offset == 0 then
g_tv_road_offset = 0xe
end
g_tv_y_off [ 0x23 ] = 0x15 - g_tv_road_offset
display_tv_sprite ( s_idx , 0x22 )
s_idx = s_idx + 1
g_tv_y_off [ 0x23 ] = 0x24 - g_tv_road_offset
display_tv_sprite ( s_idx , 0x22 )
s_idx = s_idx + 1
display_tv_sprite ( s_idx , 0x21 )
s_idx = s_idx + 1
elseif item == 0x84 then --select random image from list.
local rand_len = g_tv_programs [ g_tv_cur_program ] [ g_tv_cur_pos + 1 ]
item = g_tv_programs [ g_tv_cur_program ] [ g_tv_cur_pos + math.random ( 1 , rand_len ) + 1 ]
display_tv_sprite ( s_idx , item )
s_idx = s_idx + 1
g_tv_cur_pos = g_tv_cur_pos + 1 + rand_len
elseif item == 0x86 then --display news image
display_tv_sprite ( s_idx , g_tv_news_image )
s_idx = s_idx + 1
elseif item == 0x87 then --select news image
g_tv_news_image = g_tv_news_image_tbl [ math.random ( 1 , 9 ) ]
elseif item == 0x88 then --pledge now!
g_tv_pledge_counter = g_tv_pledge_counter + 1
if g_tv_pledge_counter % 4 == 0 then
display_tv_sprite ( s_idx , g_tv_pledge_image )
s_idx = s_idx + 1
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if g_tv_pledge_counter == 16 then
if g_tv_pledge_image == 37 then
g_tv_pledge_image = 38
else
g_tv_pledge_image = 37
end
g_tv_pledge_counter = 0
end
elseif item == 0x89 then
display_tv_sprite ( s_idx , math.random ( 50 , 52 ) )
s_idx = s_idx + 1
elseif item == 0x8a then
should_exit = true
elseif item == 0x8b then
canvas_rotate_palette ( 0xe0 , 5 )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_tv_cur_pos = g_tv_cur_pos + 1
if g_tv_programs [ g_tv_cur_program ] [ g_tv_cur_pos ] == nil then
g_tv_cur_program = g_tv_cur_program + 1
g_tv_cur_pos = 1
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if g_tv_programs [ g_tv_cur_program ] == nil then
g_tv_cur_program = 1
end
end
end
end
g_tv_update = true
local function display_lounge ( )
display_clock ( )
if g_tv_update == true then
display_tv ( )
g_tv_update = false
else
g_tv_update = true
end
end
local function scroll_clock ( )
g_clock_tbl [ " h1 " ] . x = g_clock_tbl [ " h1 " ] . x - 1
g_clock_tbl [ " h2 " ] . x = g_clock_tbl [ " h2 " ] . x - 1
g_clock_tbl [ " m1 " ] . x = g_clock_tbl [ " m1 " ] . x - 1
g_clock_tbl [ " m2 " ] . x = g_clock_tbl [ " m2 " ] . x - 1
end
local function scroll_lounge ( )
g_lounge_tbl.bg . x = g_lounge_tbl.bg . x - 1
g_lounge_tbl.bg1 . x = g_lounge_tbl.bg1 . x - 1
g_tv_base_x = g_tv_base_x - 1
g_lounge_tbl.avatar . x = g_lounge_tbl.avatar . x - 2
g_lounge_tbl.finger . x = g_lounge_tbl.finger . x - 2
if g_lounge_tbl.bg1 . x < 166 and g_lounge_tbl.bg1 . x % 2 == 0 then
g_lounge_tbl.bg0 . x = g_lounge_tbl.bg0 . x - 1
end
scroll_clock ( )
end
local function hide_lounge ( )
g_lounge_tbl [ " bg0 " ] . visible = false
g_lounge_tbl [ " bg " ] . visible = false
g_lounge_tbl [ " bg1 " ] . visible = false
g_lounge_tbl [ " avatar " ] . visible = false
g_lounge_tbl [ " tv " ] . visible = false
end
local function lounge_sequence ( )
load_lounge ( )
canvas_set_palette ( " palettes.int " , 1 )
--for i=0,0xff do
--display_lounge()
--canvas_update()
--end
local scroll_img = image_load ( " blocks.shp " , 1 )
local scroll = sprite_new ( scroll_img , 1 , 0x9f , true )
local x , y = image_print ( scroll_img , " Upon your world, five seasons have passed since your " , 8 , 312 , 8 , 10 , 0x3e )
image_print ( scroll_img , " triumphant homecoming from Britannia. " , 8 , 312 , x , y , 0x3e )
local input = input_poll ( )
while input == nil do
display_lounge ( )
canvas_update ( )
input = input_poll ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if should_exit ( input ) then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
x , y = image_print ( scroll_img , " You have traded the Avatar's life of peril and adventure " , 7 , 310 , 7 , 8 , 0x3e )
x , y = image_print ( scroll_img , " for the lonely serenity of a world at peace. But " , 7 , 310 , x , y , 0x3e )
x , y = image_print ( scroll_img , " television supermen cannot take the place of friends " , 7 , 310 , x , y , 0x3e )
image_print ( scroll_img , " who died at your side! " , 7 , 310 , x , y , 0x3e )
scroll.image = scroll_img
scroll.x = 1
scroll.y = 0x98
input = input_poll ( )
while input == nil do
display_lounge ( )
canvas_update ( )
input = input_poll ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if should_exit ( input ) then
return false
end
scroll_img = image_load ( " blocks.shp " , 0 )
image_print ( scroll_img , " Outside, a chill wind rises... " , 39 , 200 , 39 , 8 , 0x3e )
scroll.image = scroll_img
scroll.x = 0x21
scroll.y = 0x9d
for i = 0 , 319 do
scroll_lounge ( )
display_lounge ( )
canvas_update ( )
input = input_poll ( )
if should_exit ( input ) then
return false
end
end
input = input_poll ( )
while input == nil do
canvas_update ( )
input = input_poll ( )
end
if should_exit ( input ) then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
hide_lounge ( )
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return true
end
g_window_tbl = { }
local function load_window ( )
local rand = math.random
g_window_tbl [ " cloud_x " ] = - 400
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_window_tbl [ " sky " ] = sprite_new ( g_img_tbl [ 1 ] , 0 , 0 , true )
g_window_tbl [ " cloud1 " ] = sprite_new ( g_img_tbl [ 0 ] , g_window_tbl [ " cloud_x " ] , - 5 , true )
g_window_tbl [ " cloud2 " ] = sprite_new ( g_img_tbl [ 0 ] , g_window_tbl [ " cloud_x " ] , - 5 , true )
g_window_tbl [ " clouds " ] = { }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local i
for i = 1 , 5 do
table.insert ( g_window_tbl [ " clouds " ] , sprite_new ( g_img_tbl [ rand ( 2 , 3 ) ] , rand ( 0 , 320 ) - 260 , rand ( 0 , 30 ) , true ) )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_window_tbl [ " lightning " ] = sprite_new ( nil , 0 , 0 , false )
g_window_tbl [ " ground " ] = sprite_new ( g_img_tbl [ 10 ] , 0 , 0x4c , true )
g_window_tbl [ " trees " ] = sprite_new ( g_img_tbl [ 8 ] , 0 , 0 , true )
g_window_tbl [ " strike " ] = sprite_new ( g_img_tbl [ rand ( 19 , 23 ) ] , 158 , 114 , false )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--FIXME rain here.
local rain = { }
local i
for i = 0 , 100 do
rain [ i ] = sprite_new ( g_img_tbl [ math.random ( 4 , 7 ) ] , math.random ( 0 , 320 ) , math.random ( 0 , 200 ) , false )
end
g_window_tbl [ " rain " ] = rain
2020-04-09 23:30:08 +02:00
g_window_tbl [ " frame " ] = sprite_new ( g_img_tbl [ 28 ] , 0 , 0 , true )
2020-03-08 12:49:40 -07:00
g_window_tbl [ " window " ] = sprite_new ( g_img_tbl [ 26 ] , 0x39 , 0 , true )
g_window_tbl [ " door_left " ] = sprite_new ( g_img_tbl [ 24 ] , 320 , 0 , true )
g_window_tbl [ " door_right " ] = sprite_new ( g_img_tbl [ 25 ] , 573 , 0 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_window_tbl [ " flash " ] = 0
g_window_tbl [ " drops " ] = 0
g_window_tbl [ " rain_delay " ] = 20
g_window_tbl [ " lightning_counter " ] = 0
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
end
local function hide_window ( )
g_window_tbl [ " sky " ] . visible = false
g_window_tbl [ " cloud1 " ] . visible = false
g_window_tbl [ " cloud2 " ] . visible = false
local i
for i = 1 , 5 do
g_window_tbl [ " clouds " ] [ i ] . visible = false
end
g_window_tbl [ " lightning " ] . visible = false
g_window_tbl [ " ground " ] . visible = false
g_window_tbl [ " trees " ] . visible = false
g_window_tbl [ " strike " ] . visible = false
local i
for i = 0 , 100 do
g_window_tbl [ " rain " ] [ i ] . visible = false
end
g_window_tbl [ " frame " ] . visible = false
g_window_tbl [ " window " ] . visible = false
g_window_tbl [ " door_left " ] . visible = false
g_window_tbl [ " door_right " ] . visible = false
end
local function display_window ( )
local i
local rain = g_window_tbl [ " rain " ]
local rand = math.random
local c_num
--FIXME display clouds here.
local cloud
for i , cloud in ipairs ( g_window_tbl [ " clouds " ] ) do
if cloud.x > 320 then
cloud.x = rand ( 0 , 320 ) - 320
cloud.y = rand ( 0 , 30 )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
cloud.x = cloud.x + 2
end
g_window_tbl [ " cloud_x " ] = g_window_tbl [ " cloud_x " ] + 1
if g_window_tbl [ " cloud_x " ] == 320 then
g_window_tbl [ " cloud_x " ] = 0
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_window_tbl [ " cloud1 " ] . x = g_window_tbl [ " cloud_x " ]
g_window_tbl [ " cloud2 " ] . x = g_window_tbl [ " cloud_x " ] - 320
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if rand ( 0 , 6 ) == 0 and g_window_tbl [ " lightning_counter " ] == 0 then --fixme var_1a, var_14
g_window_tbl [ " lightning_counter " ] = rand ( 1 , 4 )
g_window_tbl [ " lightning " ] . image = g_img_tbl [ rand ( 11 , 18 ) ]
g_window_tbl [ " lightning " ] . visible = true
g_window_tbl [ " lightning_x " ] = rand ( - 5 , 320 )
g_window_tbl [ " lightning_y " ] = rand ( - 5 , 200 )
end
if g_window_tbl [ " lightning_counter " ] > 0 then
g_window_tbl [ " lightning " ] . x = g_window_tbl [ " lightning_x " ] + rand ( 0 , 3 )
g_window_tbl [ " lightning " ] . y = g_window_tbl [ " lightning_y " ] + rand ( 0 , 3 )
end
if ( g_window_tbl [ " lightning_counter " ] > 0 and rand ( 0 , 3 ) == 0 ) or g_window_tbl [ " strike " ] . visible == true then
canvas_set_palette_entry ( 0x58 , 0x40 , 0x94 , 0xfc )
canvas_set_palette_entry ( 0x5a , 0x40 , 0x94 , 0xfc )
canvas_set_palette_entry ( 0x5c , 0x40 , 0x94 , 0xfc )
else
canvas_set_palette_entry ( 0x58 , 0x20 , 0xa4 , 0x80 )
canvas_set_palette_entry ( 0x5a , 0x14 , 0x8c , 0x74 )
canvas_set_palette_entry ( 0x5c , 0x0c , 0x74 , 0x68 )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if rand ( 0 , 1 ) == 0 then
g_window_tbl [ " strike " ] . image = g_img_tbl [ rand ( 19 , 23 ) ]
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if g_window_tbl [ " flash " ] > 0 then
g_window_tbl [ " flash " ] = g_window_tbl [ " flash " ] - 1
else
if rand ( 0 , 5 ) == 0 or g_window_tbl [ " strike " ] . visible == true then
g_window_tbl [ " window " ] . image = g_img_tbl [ 27 ]
g_window_tbl [ " flash " ] = rand ( 1 , 5 )
else
g_window_tbl [ " window " ] . image = g_img_tbl [ 26 ]
end
end
if g_window_tbl [ " drops " ] < 100 then
if rand ( 0 , g_window_tbl [ " rain_delay " ] ) == 0 then
g_window_tbl [ " rain_delay " ] = g_window_tbl [ " rain_delay " ] - 2
if g_window_tbl [ " rain_delay " ] < 1 then
g_window_tbl [ " rain_delay " ] = 1
end
i = g_window_tbl [ " drops " ]
rain [ i ] . visible = true
rain [ i ] . image = g_img_tbl [ rand ( 4 , 7 ) ]
rain [ i ] . y = - 4
rain [ i ] . x = rand ( 0 , 320 )
g_window_tbl [ " drops " ] = i + 1
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , g_window_tbl [ " drops " ] do
if rain [ i ] . visible == true then
rain [ i ] . x = rain [ i ] . x + 2
rain [ i ] . y = rain [ i ] . y + 8
if rain [ i ] . x > 320 or rain [ i ] . y > 200 then
rain [ i ] . visible = false
end
else
rain [ i ] . visible = true
rain [ i ] . image = g_img_tbl [ rand ( 4 , 7 ) ]
rain [ i ] . y = - 4
rain [ i ] . x = rand ( 0 , 320 )
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if g_window_tbl [ " lightning_counter " ] > 0 then
g_window_tbl [ " lightning_counter " ] = g_window_tbl [ " lightning_counter " ] - 1
end
end
local function window_update ( )
local input = input_poll ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
while input == nil do
display_window ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
break
end
canvas_update ( )
end
return should_exit ( input )
end
local function window_sequence ( )
load_images ( " intro_2.shp " )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
load_window ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_set_palette ( " palettes.int " , 2 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local i = 0
local input
while i < 20 do
display_window ( )
canvas_update ( )
input = input_poll ( )
if should_exit ( input ) then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
i = i + 1
canvas_update ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local scroll_img = image_load ( " blocks.shp " , 1 )
local scroll = sprite_new ( scroll_img , 1 , 0x98 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local x , y = image_print ( scroll_img , " ...and in moments, the storm is upon you. " , 8 , 312 , 36 , 14 , 0x3e )
if window_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
x , y = image_print ( scroll_img , " Tongues of lightning lash the sky, conducting an unceasing " , 8 , 310 , 8 , 10 , 0x3e )
image_print ( scroll_img , " crescendo of thunder.... " , 8 , 310 , x , y , 0x3e )
scroll.image = scroll_img
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if window_update ( ) == true then
return false
end
scroll_img = image_load ( " blocks.shp " , 1 )
x , y = image_print ( scroll_img , " In a cataclysm of sound and light, a bolt of searing " , 8 , 310 , 8 , 10 , 0x3e )
image_print ( scroll_img , " blue fire strikes the earth! " , 8 , 310 , x , y , 0x3e )
scroll.image = scroll_img
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_window_tbl [ " strike " ] . visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if window_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
x , y = image_print ( scroll_img , " Lightning among the stones! " , 8 , 310 , 73 , 10 , 0x3e )
image_print ( scroll_img , " Is this a sign from distant Britannia? " , 8 , 310 , 41 , 18 , 0x3e )
scroll.image = scroll_img
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--scroll window.
i = 0
while i < 320 do
display_window ( )
canvas_update ( )
input = input_poll ( )
if should_exit ( input ) then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_update ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_window_tbl [ " window " ] . x = g_window_tbl [ " window " ] . x - 2
g_window_tbl [ " frame " ] . x = g_window_tbl [ " frame " ] . x - 2
g_window_tbl [ " door_left " ] . x = g_window_tbl [ " door_left " ] . x - 2
g_window_tbl [ " door_right " ] . x = g_window_tbl [ " door_right " ] . x - 2
i = i + 2
if i > 160 and g_window_tbl [ " strike " ] . visible == true then
g_window_tbl [ " strike " ] . visible = false
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if window_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
i = 0
while i < 68 do
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
display_window ( )
canvas_update ( )
input = input_poll ( )
if should_exit ( input ) then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_update ( )
input = input_poll ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_window_tbl [ " door_left " ] . x = g_window_tbl [ " door_left " ] . x - 1
g_window_tbl [ " door_right " ] . x = g_window_tbl [ " door_right " ] . x + 1
i = i + 1
end
scroll_img = image_load ( " blocks.shp " , 2 )
x , y = image_print ( scroll_img , " You bolt from your house, stumbling, running blind in the " , 7 , 310 , 8 , 12 , 0x3e )
x , y = image_print ( scroll_img , " storm. Into the forest, down the path, through the " , 7 , 310 , x , y , 0x3e )
image_print ( scroll_img , " rain... to the stones. " , 7 , 310 , x , y , 0x3e )
scroll.image = scroll_img
scroll.visible = true
if window_update ( ) == true then
return false
end
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
end
local function stones_rotate_palette ( )
if g_pal_counter == 4 then
canvas_rotate_palette ( 144 , 16 )
g_pal_counter = 0
else
g_pal_counter = g_pal_counter + 1
end
end
local function stones_update ( )
local input = input_poll ( )
while input == nil do
stones_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
break
end
end
return should_exit ( input )
end
local function stones_shake_moongate ( )
local input = input_poll ( )
while input == nil do
stones_rotate_palette ( )
g_stones_tbl [ " moon_gate " ] . x = 0x7c + math.random ( 0 , 1 )
g_stones_tbl [ " moon_gate " ] . y = 5 + math.random ( 0 , 3 )
canvas_update ( )
stones_rotate_palette ( )
g_stones_tbl [ " moon_gate " ] . x = 0x7c + math.random ( 0 , 1 )
g_stones_tbl [ " moon_gate " ] . y = 5 + math.random ( 0 , 3 )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
break
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return should_exit ( input )
end
g_pal_counter = 0
g_stones_tbl = { }
local function stones_sequence ( )
load_images ( " intro_3.shp " )
canvas_set_palette ( " palettes.int " , 3 )
g_stones_tbl [ " bg " ] = sprite_new ( g_img_tbl [ 0 ] , 0 , 0 , true )
g_stones_tbl [ " stone_cover " ] = sprite_new ( g_img_tbl [ 3 ] , 0x96 , 0x64 , false )
g_stones_tbl [ " gate_cover " ] = sprite_new ( g_img_tbl [ 4 ] , 0x5e , 0x66 , false )
g_stones_tbl [ " hand " ] = sprite_new ( g_img_tbl [ 1 ] , 0xbd , 0xc7 , false )
g_stones_tbl [ " moon_gate " ] = sprite_new ( g_img_tbl [ 2 ] , 0x7c , 0x64 , false )
g_stones_tbl [ " moon_gate " ] . clip_x = 0
g_stones_tbl [ " moon_gate " ] . clip_y = 0
g_stones_tbl [ " moon_gate " ] . clip_w = 320
g_stones_tbl [ " moon_gate " ] . clip_h = 0x66
g_stones_tbl [ " avatar " ] = sprite_new ( g_img_tbl [ 7 ] , - 2 , 0x12 , false )
local scroll_img = image_load ( " blocks.shp " , 2 )
local scroll = sprite_new ( scroll_img , 1 , 0xc , true )
local x , y = image_print ( scroll_img , " Near the stones, the smell of damp, blasted earth hangs " , 7 , 303 , 7 , 8 , 0x3e )
x , y = image_print ( scroll_img , " in the air. In a frozen moment of lightning-struck " , 7 , 303 , x , y , 0x3e )
x , y = image_print ( scroll_img , " daylight, you glimpse a tiny obsidian stone in the " , 7 , 303 , x , y , 0x3e )
x , y = image_print ( scroll_img , " midst of the circle! " , 7 , 303 , x , y , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
if stones_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " stone_cover " ] . visible = true
g_stones_tbl [ " hand " ] . visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 0 )
image_print ( scroll_img , " Wondering, you pick it up.... " , 8 , 234 , 0x2a , 8 , 0x3e )
scroll.image = scroll_img
scroll.x = 0x21
scroll.y = 0x1e
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local i
for i = 0xc7 , 0x54 , - 2 do
-- display_stones()
g_stones_tbl [ " hand " ] . y = i
canvas_update ( )
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
if stones_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " bg " ] . image = g_img_tbl [ 5 ]
g_stones_tbl [ " stone_cover " ] . visible = false
g_stones_tbl [ " gate_cover " ] . visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
x , y = image_print ( scroll_img , " ...and from the heart of the stones, a softly glowing door " , 7 , 303 , 7 , 10 , 0x3e )
image_print ( scroll_img , " ascends in silence! " , 7 , 303 , x , y , 0x3e )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0xa0
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " moon_gate " ] . visible = true
for i = 0x64 , 0x5 , - 1 do
-- display_stones()
stones_rotate_palette ( )
g_stones_tbl [ " moon_gate " ] . y = i
canvas_update ( )
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
for i = 0x54 , 0xc7 , 2 do
-- display_stones()
stones_rotate_palette ( )
g_stones_tbl [ " hand " ] . y = i
canvas_update ( )
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " hand " ] . visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if stones_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " hand " ] . image = g_img_tbl [ 6 ]
g_stones_tbl [ " hand " ] . x = 0x9b
g_stones_tbl [ " hand " ] . visible = true
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0xc7 , 0x44 , - 2 do
stones_rotate_palette ( )
g_stones_tbl [ " hand " ] . y = i
g_stones_tbl [ " bg " ] . y = g_stones_tbl [ " bg " ] . y - 1
g_stones_tbl [ " gate_cover " ] . y = g_stones_tbl [ " gate_cover " ] . y - 1
g_stones_tbl [ " moon_gate " ] . y = g_stones_tbl [ " moon_gate " ] . y - 1
canvas_update ( )
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
x , y = image_print ( scroll_img , " Exultant memories wash over you as you clutch the stone. " , 7 , 303 , 7 , 8 , 0x3e )
x , y = image_print ( scroll_img , " When last you saw an orb such as this, it was cast down " , 7 , 303 , x , y , 0x3e )
image_print ( scroll_img , " by Lord British to banish the tyrant Blackthorn! " , 7 , 303 , x , y , 0x3e )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0x98
scroll.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if stones_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0x44 , 0xc7 , 2 do
stones_rotate_palette ( )
g_stones_tbl [ " hand " ] . y = i
g_stones_tbl [ " bg " ] . y = g_stones_tbl [ " bg " ] . y + 1
g_stones_tbl [ " gate_cover " ] . y = g_stones_tbl [ " gate_cover " ] . y + 1
g_stones_tbl [ " moon_gate " ] . y = g_stones_tbl [ " moon_gate " ] . y + 1
canvas_update ( )
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " hand " ] . visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
image_print ( scroll_img , " But your joy soon gives way to apprehension. " , 7 , 303 , 16 , 8 , 0x3e )
image_print ( scroll_img , " The gate to Britannia has always been blue... " , 7 , 303 , 18 , 24 , 0x3e )
image_print ( scroll_img , " as blue as the morning sky. " , 7 , 303 , 76 , 32 , 0x3e )
scroll.image = scroll_img
scroll.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if stones_update ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
x , y = image_print ( scroll_img , " Abruptly, the portal quivers and begins to sink " , 7 , 303 , 7 , 10 , 0x3e )
image_print ( scroll_img , " into the ground. Its crimson light wanes! " , 7 , 303 , x , y , 0x3e )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0xa0
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if stones_shake_moongate ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
x , y = image_print ( scroll_img , " Desperation makes the decision an easy one. " , 7 , 303 , 22 , 14 , 0x3e )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0xa0
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if stones_shake_moongate ( ) == true then
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " avatar " ] . visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_set_palette_entry ( 0x19 , 0 , 0 , 0 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , 19 , 1 do
g_stones_tbl [ " avatar " ] . image = g_img_tbl [ 7 + i ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local j
for j = 0 , 4 do
canvas_update ( )
stones_rotate_palette ( )
g_stones_tbl [ " moon_gate " ] . x = 0x7c + math.random ( 0 , 1 )
g_stones_tbl [ " moon_gate " ] . y = 5 + math.random ( 0 , 3 )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " avatar " ] . y = g_stones_tbl [ " avatar " ] . y - 3
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0xff , 0 , - 3 do
canvas_update ( )
stones_rotate_palette ( )
g_stones_tbl [ " moon_gate " ] . x = 0x7c + math.random ( 0 , 1 )
g_stones_tbl [ " moon_gate " ] . y = 5 + math.random ( 0 , 3 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " avatar " ] . opacity = i
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
canvas_set_palette_entry ( 0x19 , 0x74 , 0x74 , 0x74 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_stones_tbl [ " moon_gate " ] . x = 0x7c
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0x5 , 0x64 , 1 do
stones_rotate_palette ( )
g_stones_tbl [ " moon_gate " ] . y = i
canvas_update ( )
local input = input_poll ( )
if input ~= nil and should_exit ( input ) then
return false
end
end
g_stones_tbl [ " bg " ] . image = g_img_tbl [ 0 ]
g_stones_tbl [ " moon_gate " ] . visible = false
g_stones_tbl [ " gate_cover " ] . visible = false
g_stones_tbl [ " stone_cover " ] . visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if stones_update ( ) == true then
return false
end
return true
end
local function play ( )
mouse_cursor_set_pointer ( 0 )
mouse_cursor_visible ( false )
load_images ( " intro_1.shp " )
music_play ( " bootup.m " )
--[ [
canvas_set_palette ( " palettes.int " , 0 )
canvas_set_update_interval ( 25 )
local img = g_img_tbl [ 0x45 ]
local background = sprite_new ( img )
background.x = 0
background.y = 0
background.opacity = 0
background.visible = true
music_play ( " bootup.m " )
for i = 0 , 0xff , 3 do
background.opacity = i
if poll_for_esc ( ) == true then return end
canvas_update ( )
end
for i = 0xff , 0 , - 3 do
background.opacity = i
if poll_for_esc ( ) == true then return end
--if input ~= nil and input == ESCAPE_KEY then
-- return
--end
canvas_update ( )
end
img = g_img_tbl [ 0x46 ]
background.image = img
for i = 0 , 0xff , 3 do
background.opacity = i
if poll_for_esc ( ) == true then return end
canvas_update ( )
end
for i = 0xff , 0 , - 3 do
background.opacity = i
if poll_for_esc ( ) == true then return end
canvas_update ( )
end
background.visible = false
if lounge_sequence ( ) == false then
2020-04-09 23:30:08 +02:00
return
2020-03-08 12:49:40 -07:00
end
if window_sequence ( ) == false then
return
end
fade_out ( )
hide_window ( )
--] ]
stones_sequence ( )
end
local function gypsy_update_bubbles ( bubble_image )
if g_gypsy_tbl [ " bubble_counter " ] == 0 then
image_bubble_effect ( bubble_image )
g_gypsy_tbl [ " bubble_counter " ] = 3
else
g_gypsy_tbl [ " bubble_counter " ] = g_gypsy_tbl [ " bubble_counter " ] - 1
end
end
local function gypsy_ab_select ( question )
local a_lookup_tbl = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ,
1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 ,
2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 ,
4 , 5 , 5 , 6 ,
}
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local b_lookup_tbl = {
1 , 2 , 3 , 4 , 5 , 6 , 7 , 2 ,
3 , 4 , 5 , 6 , 7 , 3 , 4 , 5 ,
6 , 7 , 4 , 5 , 6 , 7 , 5 , 6 ,
7 , 6 , 7 , 7 ,
}
if g_highlight_index == nil then
g_highlight_index = 0
end
local input = nil
while input == nil do
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if input == 65 or input == 97 or ( input == 13 and g_highlight_index == 0 ) then
return a_lookup_tbl [ question - 104 ] + 1
elseif input == 66 or input == 98 or input == 13 then
return b_lookup_tbl [ question - 104 ] + 1
elseif input == SDLK_RIGHT and g_highlight_index == 0 then -- right
g_highlight_index = 1
g_ab_highlight.x = g_ab_highlight.x + 17
elseif input == SDLK_LEFT and g_highlight_index == 1 then -- left
g_highlight_index = 0
g_ab_highlight.x = g_ab_highlight.x - 17
elseif input == 0 then
local y = get_mouse_y ( )
if ( y > 173 and y < 190 ) then
local x = get_mouse_x ( )
if x > 278 and x < 296 then
return a_lookup_tbl [ question - 104 ] + 1
elseif x > 296 and x < 313 then
return b_lookup_tbl [ question - 104 ] + 1
end
end
end
input = nil
end
if g_gypsy_tbl [ " jar_liquid " ] . visible == true then
gypsy_update_bubbles ( g_gypsy_tbl [ " jar_liquid " ] . image )
end
end
end
local gypsy_question_text = {
" \" Entrusted to deliver an uncounted purse of gold, thou dost meet a poor beggar. Dost thou A) deliver the gold Honestly, knowing the trust in thee was well-placed; or B) show Compassion and give the beggar a coin, knowing it won't be missed? \127 " ,
" \" Thou has been prohibited by thy absent Lord from joining thy friends in a close-pitched battle. Dost thou A) refrain, so thou may Honestly claim obedience; or B) show Valor and aid thy comrades, knowing thou may deny it later? \127 " ,
" \" A merchant owes thy friend money, now long past due. Thou dost see the same merchant drop a purse of gold. Dost thou A) Honestly return the purse intact; or B) Justly give thy friend a portion of the gold first? \127 " ,
" \" Thee and thy friend are valiant but penniless warriors. Thou both set forth to slay a mighty dragon. Thy friend dost think he slew it, but the killing blow was thine. Dost thou A) Honestly claim the reward; or B) Sacrifice the gold for the sake of thy friendship? \127 " ,
" \" Thou art sworn to protect thy Lord at any cost, yet thou knowest he hath committed a crime. Authorities ask thee of the affair. Dost thou A) Break thine oath by Honestly speaking; or B) uphold Honor by silently keeping thine oath? \127 " ,
" \" Thy friend doth seek admittance to thy spiritual order. Thou art asked to vouch for his purity of spirit, of which thou art uncertain. Dost thou A) Honestly express thy doubt; or B) Vouch for him, hoping for his Spiritual improvement? \127 " ,
" \" Thy Lord doth mistakenly believe he slew a dragon. Thou hast proof that thy lance felled the beast. When asked, dost thou A) Honestly claim the kill; or B) Humbly permit thy Lord his belief? \127 " ,
" \" Thou dost manage to disarm thy mortal enemy in a duel. He is at thy mercy. Dost thou A) Show Compassion by permitting him to yield; or B) Slay him, as expected of a Valiant duelist? \127 " ,
" \" After twenty years thou hast found the slayer of thy best friends. The villain proves to be a man who provides the sole support for a young girl. Dost thou A) Spare him in Compassion for the child; or B) Slay him in the name of Justice? \127 " ,
" \" Thee and thy friends hath been routed and ordered to retreat. In defiance of thy orders, dost thou A) Stop in Compassion to aid a wounded comrade; or B) Sacrifice thyself to slow the pursuing enemy so that others might escape? \127 " ,
" \" Thou art sworn to uphold a Lord who doth participate in the forbidden torture of prisoners. Each night their cries of pain reach thee. Dost thou A) Show Compassion by reporting the deeds; or B) Honor thy oath and ignore the deeds? \127 " ,
" \" Thou hast been taught to preserve all life as sacred. A man lies fatally stung by a venomous serpent. He prays for a merciful death. Dost thou A) Show Compassion and end his pain; or B) heed thy Spiritual beliefs and turn away? \127 " ,
" \" The Captain of the King's Guard asks that one among thee visit a hospital to cheer the children with tales of valiant personal deeds. Dost thou A) Show thy Compassion and play the braggart; or B) Humbly let another go? \127 " ,
" \" Thou hast been sent to secure a needed treaty with a distant Lord. Thy host is agreeable to thy proposal but insults thy country at dinner. Dost thou A) Valiantly bear the slurs; or B) Justly rise and demand an apology? \127 " ,
" \" A burly knight accosts thee and demands thy food. Dost thou A) Valiantly refuse and engage the knight, or B) Sacrifice thy rations unto the hungry knight? \127 " ,
" \" During battle thou art ordered to guard thy commander's empty tent. The battle goes poorly and thou dost yearn to aid thy fellows. Dost thou A) Valiantly enter the battle; or B) Honor thy post as guard? \127 " ,
" \" A local bully pushes for a fight. Dost thou A) Valiantly trounce the rogue; or B) Decline, knowing in thy Spirit that no lasting good will come of it? \127 " ,
" \" Although a simple fisherman, thou art also a skillful swordsman. Thy Lord dost seek to assemble a peacetime guard. Dost thou A) Answer the call, so that all may witness thy Valor; or B) Humbly decline the offer to join thy Lord's largely ceremonial knighthood? \127 " ,
" \" During a pitched battle, thou dost see a fellow desert his post, endangering many. As he flees, he is set upon by several enemies. Dost thou A) Justly let him fight alone; or B) Risk the Sacrifice of thine own life to aid him? \127 " ,
" \" Thou hast sworn to do thy Lord's bidding in all. He covets a piece of land and orders its owner removed. Dost thou A) Serve Justice, refusing to act, thus being disgraced; or B) Honor thine oath and evict the landowner? \127 " ,
" \" Thou dost believe that virtue resides in all people. Thou dost see a rogue steal from thy Lord. Dost thou A) Call him to Justice; or B) Personally try to sway him back to the Spiritual path of good? \127 " ,
" \" Unwitnessed, thou hast slain a mighty dragon in defense of thy life. A poor warrior claims the offered reward. Dost thou A) Justly step forward to claim the bounty; or B) Humbly go about thy life, secure in thy self-esteem? \127 " ,
" \" Thou art a bounty hunter sworn to return an alleged murderer. After his capture, thou dost come to believe him innocent. Dost thou A) Sacrifice thy sizable bounty for thy belief; or B) Honor thine oath to return him as promised? \127 " ,
" \" Thou hast spent thy life in charitable and righteous work. Thine uncle the innkeeper lies ill and asks thee to take over his tavern. Dost thou A) Sacrifice thy life of purity to aid thy kin; or B) Decline and follow the call of Spirituality? \127 " ,
" \" Thou art an elderly, wealthy merchant. Thy end is near. Dost thou A) Sacrifice all thy wealth to feed hundreds of starving children, receiving public adulation; or B) Humbly live out thy life, willing thy fortune to thy heirs? \127 " ,
" \" In thy youth thou didst pledge to marry thy sweetheart. Now thou art on a sacred quest in distant lands. Thy sweetheart doth ask thee to keep thy vow. Dost thou A) Honor thy pledge to wed; or B) Follow thy Spiritual crusade? \127 " ,
" \" Though thou art but a peasant shepherd, thou art discovered to be the sole descendant of a noble family long thought extinct. Dost thou A) Honorably take up the arms of thy ancestors; or B) Humbly resume thy life of simplicity and peace? \127 " ,
" \" Thy parents wish thee to become an apprentice. Two positions are available. Dost thou A) Become an acolyte in a worthy Spiritual order; or B) Become an assistant to a humble village cobbler? \127 " ,
}
local gypsy_questions = {
- 1 , 0x69 , 0x6A , 0x6B , 0x6C , 0x6D , 0x6E , 0x6F ,
0x69 , - 1 , 0x70 , 0x71 , 0x72 , 0x73 , 0x74 , 0x75 ,
0x6A , 0x70 , - 1 , 0x76 , 0x77 , 0x78 , 0x79 , 0x7A ,
0x6B , 0x71 , 0x76 , - 1 , 0x7B , 0x7C , 0x7D , 0x7E ,
0x6C , 0x72 , 0x77 , 0x7B , - 1 , 0x7F , 0x80 , 0x81 ,
0x6D , 0x73 , 0x78 , 0x7C , 0x7F , - 1 , 0x82 , 0x83 ,
0x6E , 0x74 , 0x79 , 0x7D , 0x80 , 0x82 , - 1 , 0x84 ,
0x6F , 0x75 , 0x7A , 0x7E , 0x81 , 0x83 , 0x84 , - 1 ,
}
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_str = 0xf
g_dex = 0xf
g_int = 0xf
g_question_tbl = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }
local function shuffle_question_tbl ( shuffle_len )
local random = math.random
local c = random ( 0 , ( shuffle_len * shuffle_len ) - 1 ) + shuffle_len
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , c , 1 do
local j = random ( 1 , shuffle_len )
local k = random ( 1 , shuffle_len )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local tmp = g_question_tbl [ j ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_question_tbl [ j ] = g_question_tbl [ k ]
g_question_tbl [ k ] = tmp
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
end
2020-04-09 23:30:08 +02:00
local function gypsy_start_pouring ( vial_num , vial_level )
local pour_img_tbl =
2020-03-08 12:49:40 -07:00
{
0x2B , 0x43 , 0x56 , 0x6B , 0x24 , 0x74 , 0x19 , 0x2C ,
0x2C , 0x44 , 0x57 , 0x6C , 0x23 , 0x73 , 0x18 , 0x2B ,
0x2E , 0x45 , 0x58 , 0x6D , 0x22 , 0x72 , 0x17 , 0x2A ,
}
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_level <= 3 and vial_level > 0 then
g_gypsy_tbl [ " pour " ] . visible = true
local img1 = pour_img_tbl [ ( 3 - vial_level ) * 8 + vial_num ]
--io.stderr:write("pour: "..vial_level.." img1="..img1.."vial_num="..vial_num.."\n")
if vial_num > 6 then
img1 = img1 + 9
else
img1 = img1 + 0x42
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " pour " ] . image = g_gypsy_img_tbl [ img1 ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local pour_y_tbl = { 0x32 , 0x37 , 0x40 }
g_gypsy_tbl [ " pour " ] . y = pour_y_tbl [ 3 - vial_level + 1 ] - 20
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local pour_x_tbl =
{
0x92 , 0x92 , 0x92 , 0x92 , 0x0A9 , 0x0A9 , 0x0A9 , 0x0A9 ,
0x91 , 0x91 , 0x91 , 0x91 , 0x0A9 , 0x0A9 , 0x0A9 , 0x0A9 ,
0x94 , 0x94 , 0x94 , 0x94 , 0x0AA , 0x0AA , 0x0AA , 0x0AA ,
}
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " pour " ] . x = pour_x_tbl [ ( 3 - vial_level ) * 8 + vial_num ]
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " jar_level " ] = g_gypsy_tbl [ " jar_level " ] + 1
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " jar_liquid " ] . visible = true
g_gypsy_tbl [ " jar_liquid " ] . image = g_gypsy_img_tbl [ 8 + g_gypsy_tbl [ " jar_level " ] ]
g_gypsy_tbl [ " jar_liquid " ] . y = g_gypsy_tbl [ " jar_liquid " ] . y - 1
local vial_colors = { 239 , 14 , 231 , 103 , 228 , 5 , 15 , 219 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_bubble_effect_add_color ( vial_colors [ vial_num ] )
g_gypsy_tbl [ " bubble_counter " ] = 0
end
local function gypsy_stop_pouring ( )
g_gypsy_tbl [ " pour " ] . visible = false
end
local function gypsy_vial_anim_liquid ( img_num , vial_num , vial_level , hand_x , hand_y )
--io.stderr:write(img_num..", "..vial_num..", "..vial_level..", "..hand_x..", "..hand_y.."\n")
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_level == 3 then
vial_level = 2
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_level <= 0 then
g_gypsy_tbl [ " vial_liquid " ] [ vial_num ] . visible = false
return
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local si = 0
if img_num == 0xf then return end
if img_num > 0xf then
if img_num == 0x12 then
si = 1
else
if img_num > 0x12 then
if img_num == 0x25 then return end
if img_num == 0x2e then
si = 2
end
else
if img_num == 0x10 then
si = 2
else
if img_num == 0x11 then
si = 0
end
end
end
end
else
img_num = img_num - 9
if img_num == 0 then
si = 0
elseif img_num == 1 then
si = 1
elseif img_num >= 2 and img_num <= 5 then
si = 3
end
end
2020-04-09 23:30:08 +02:00
local vial_liquid_tbl = {
2020-03-08 12:49:40 -07:00
0x3A , 0x4F , 0x64 , 0x7C , 0x28 , 0x7E , 0x20 , 0x34 ,
0x36 , 0x4B , 0x60 , 0x76 , 0x26 , 0x78 , 0x1C , 0x30 ,
0x36 , 0x4B , 0x60 , 0x76 , 0x26 , 0x78 , 0x1C , 0x30 ,
0x3C , 0x51 , 0x66 , 0x7F , 0x14 , 0x5F , 0x22 , 0x36 ,
0x38 , 0x4D , 0x62 , 0x79 , 0x27 , 0x7B , 0x1E , 0x32 ,
0x38 , 0x4D , 0x62 , 0x79 , 0x27 , 0x7B , 0x1E , 0x32 ,
0x40 , 0x53 , 0x68 , 0x81 , 0x29 , 0x83 , 0x24 , 0x38 ,
0x40 , 0x53 , 0x68 , 0x81 , 0x29 , 0x83 , 0x24 , 0x38 ,
0x40 , 0x53 , 0x68 , 0x81 , 0x29 , 0x83 , 0x24 , 0x38 ,
0x0 , 0x3 , 0x6 , 0x9 , 0x16 , 0x19 , 0x1C , 0x1F ,
0x1 , 0x4 , 0x7 , 0x0A , 0x17 , 0x1A , 0x1D , 0x20 ,
0x2 , 0x5 , 0x8 , 0x0B , 0x18 , 0x1B , 0x1E , 0x21
}
local img_offset
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_num > 6 and si ~= 3 then
img_offset = 9
else
img_offset = 0x42
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--io.stderr:write("si ="..si.."\n")
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_level > 0 and vial_level < 3 then
--vial_liquid_tbl[vial_level * 2 + si * 24 + vial_num] + img_offset
local img_idx = vial_liquid_tbl [ ( vial_level - 1 ) * 8 + si * 24 + vial_num ]
g_gypsy_tbl [ " vial_liquid " ] [ vial_num ] . image = g_gypsy_img_tbl [ img_idx + img_offset ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local hand_y_tbl = { 0x1B , 0x13 , 0x13 , 0x16 , 0x0E , 0x0E , 0x0E , 0x0E , 0x0E , 0x0B , 0x0B , 0x0B }
g_gypsy_tbl [ " vial_liquid " ] [ vial_num ] . y = hand_y + hand_y_tbl [ si * 3 + vial_level ] - 20
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local hand_x_tbl =
{
0x4 , 0x4 , 0x4 , 0x4 , 0x14 , 0x14 , 0x14 , 0x14 ,
0x4 , 0x4 , 0x4 , 0x4 , 0x13 , 0x13 , 0x13 , 0x13 ,
0x4 , 0x4 , 0x4 , 0x4 , 0x13 , 0x13 , 0x13 , 0x13 ,
0x4 , 0x4 , 0x4 , 0x4 , 0x17 , 0x17 , 0x17 , 0x17 ,
0x3 , 0x3 , 0x3 , 0x3 , 0x17 , 0x17 , 0x17 , 0x17 ,
0x3 , 0x3 , 0x3 , 0x3 , 0x17 , 0x17 , 0x17 , 0x17 ,
0x3 , 0x3 , 0x3 , 0x3 , 0x1B , 0x1B , 0x1B , 0x1B ,
0x3 , 0x3 , 0x3 , 0x3 , 0x1B , 0x1B , 0x1B , 0x1B ,
0x3 , 0x3 , 0x3 , 0x3 , 0x1B , 0x1B , 0x1B , 0x1B ,
0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 ,
0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 ,
0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 ,
}
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local hand_x_tbl1 = { 10 , 10 , 10 , 10 , - 13 , - 13 , - 13 , - 13 }
g_gypsy_tbl [ " vial_liquid " ] [ vial_num ] . x = hand_x + hand_x_tbl [ si * 24 + ( vial_level - 1 ) * 8 + vial_num ] + hand_x_tbl1 [ vial_num ]
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
end
local function gypsy_vial_anim ( vial )
local vial_level = g_gypsy_tbl [ " vial_level " ]
local vial_img_off = { 2 , 5 , 8 , 0xB , 0x18 , 0x1B , 0x1E , 0x21 }
local vial_x_offset = { 41 , 62 , 83 , 104 , 200 , 221 , 242 , 263 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local idx
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--g_gypsy_tbl["vial"][vial].visible = false
--g_gypsy_tbl["vial_liquid"][vial].visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local arm_img_tbl = { 0 , 0 , 0 , 0 , 5 , 5 , 5 , 5 }
local arm_img_tbl1 = { 1 , 1 , 1 , 1 , 4 , 4 , 4 , 4 }
local arm_img_tbl2 = { 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local hand_img_tbl = { 12 , 12 , 12 , 12 , 13 , 13 , 13 , 13 }
local hand_img_tbl1 = { 9 , 9 , 9 , 9 , 17 , 17 , 17 , 17 }
local hand_img_tbl2 = { 10 , 10 , 10 , 10 , 18 , 18 , 18 , 18 }
local hand_img_tbl3 = { 16 , 16 , 16 , 16 , 46 , 46 , 46 , 46 }
local hand_img_tbl4 = { 15 , 15 , 15 , 15 , 37 , 37 , 37 , 37 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local arm_x_offset = { 93 , 93 , 93 , 93 , 172 , 172 , 172 , 172 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local hand_x_offset = { 29 , 50 , 71 , 92 , 202 , 223 , 244 , 264 }
local hand_x_offset1 = { 107 , 107 , 107 , 107 , 170 , 170 , 170 , 170 }
local hand_x_offset2 = { 109 , 109 , 109 , 109 , 168 , 168 , 168 , 168 }
local hand_x_offset3 = { 112 , 112 , 112 , 112 , 165 , 165 , 165 , 165 }
local hand_x_offset4 = { 10 , 10 , 10 , 10 , - 13 , - 13 , - 13 , - 13 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local hand_img_num
local should_update
for idx = 0 , 16 do
should_update = true
if idx == 0 then
--
hand_img_num = 0xf
should_update = false
elseif idx == 1 or idx == 15 then
--
g_gypsy_tbl [ " arm " ] . visible = true
g_gypsy_tbl [ " hand " ] . visible = true
g_gypsy_tbl [ " vial " ] [ vial ] . visible = false
g_gypsy_tbl [ " arm " ] . image = g_gypsy_img_tbl [ 1 + arm_img_tbl [ vial ] ]
g_gypsy_tbl [ " arm " ] . x = vial_x_offset [ vial ] - 6
g_gypsy_tbl [ " arm " ] . y = 21
hand_img_num = hand_img_tbl [ vial ]
g_gypsy_tbl [ " hand " ] . image = g_gypsy_img_tbl [ 9 + hand_img_num ]
g_gypsy_tbl [ " hand " ] . x = vial_x_offset [ vial ]
g_gypsy_tbl [ " hand " ] . y = 66
g_gypsy_tbl [ " hand " ] . visible = true
elseif idx == 2 or idx == 14 then
--
g_gypsy_tbl [ " arm " ] . image = g_gypsy_img_tbl [ 1 + arm_img_tbl1 [ vial ] ]
g_gypsy_tbl [ " arm " ] . x = vial_x_offset [ vial ] - 6
g_gypsy_tbl [ " arm " ] . y = 21
hand_img_num = hand_img_tbl [ vial ]
g_gypsy_tbl [ " hand " ] . image = g_gypsy_img_tbl [ 9 + hand_img_num ]
g_gypsy_tbl [ " hand " ] . x = vial_x_offset [ vial ]
g_gypsy_tbl [ " hand " ] . y = 29
elseif idx == 3 or idx == 13 then
--
g_gypsy_tbl [ " arm " ] . image = g_gypsy_img_tbl [ 1 + arm_img_tbl1 [ vial ] ]
g_gypsy_tbl [ " arm " ] . x = vial_x_offset [ vial ] - 6
g_gypsy_tbl [ " arm " ] . y = 21
hand_img_num = hand_img_tbl1 [ vial ]
g_gypsy_tbl [ " hand " ] . image = g_gypsy_img_tbl [ 9 + hand_img_num ]
g_gypsy_tbl [ " hand " ] . x = hand_x_offset [ vial ]
g_gypsy_tbl [ " hand " ] . y = 25
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
elseif idx == 4 or idx == 12 then
--
g_gypsy_tbl [ " arm " ] . image = g_gypsy_img_tbl [ 1 + arm_img_tbl2 [ vial ] ]
g_gypsy_tbl [ " arm " ] . x = arm_x_offset [ vial ]
g_gypsy_tbl [ " arm " ] . y = 21
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
hand_img_num = hand_img_tbl1 [ vial ]
g_gypsy_tbl [ " hand " ] . image = g_gypsy_img_tbl [ 9 + hand_img_num ]
g_gypsy_tbl [ " hand " ] . x = hand_x_offset1 [ vial ]
g_gypsy_tbl [ " hand " ] . y = 20
elseif idx == 5 or idx == 11 then
--
g_gypsy_tbl [ " arm " ] . image = g_gypsy_img_tbl [ 1 + arm_img_tbl2 [ vial ] ]
g_gypsy_tbl [ " arm " ] . x = arm_x_offset [ vial ]
g_gypsy_tbl [ " arm " ] . y = 21
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
hand_img_num = hand_img_tbl2 [ vial ]
g_gypsy_tbl [ " hand " ] . image = g_gypsy_img_tbl [ 9 + hand_img_num ]
g_gypsy_tbl [ " hand " ] . x = hand_x_offset1 [ vial ]
g_gypsy_tbl [ " hand " ] . y = 20
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if idx == 11 then
vial_level [ vial ] = vial_level [ vial ] - 1
if vial_level [ vial ] == 2 then
gypsy_stop_pouring ( )
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_level [ vial ] == 3 then
gypsy_start_pouring ( vial , vial_level [ vial ] )
end
elseif idx == 6 or idx == 10 then
--
if vial_level [ vial ] > 2 then
should_update = false
end
g_gypsy_tbl [ " arm " ] . image = g_gypsy_img_tbl [ 1 + arm_img_tbl2 [ vial ] ]
g_gypsy_tbl [ " arm " ] . x = arm_x_offset [ vial ]
g_gypsy_tbl [ " arm " ] . y = 21
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
hand_img_num = hand_img_tbl3 [ vial ]
g_gypsy_tbl [ " hand " ] . image = g_gypsy_img_tbl [ 9 + hand_img_num ]
g_gypsy_tbl [ " hand " ] . x = hand_x_offset2 [ vial ]
g_gypsy_tbl [ " hand " ] . y = 21
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_level [ vial ] == 2 then
if idx == 6 then
gypsy_start_pouring ( vial , vial_level [ vial ] )
elseif idx == 10 then
gypsy_stop_pouring ( )
end
end
elseif idx == 7 or idx == 8 or idx == 9 then
--
if vial_level [ vial ] > 1 then
should_update = false
end
g_gypsy_tbl [ " arm " ] . image = g_gypsy_img_tbl [ 1 + arm_img_tbl2 [ vial ] ]
g_gypsy_tbl [ " arm " ] . x = arm_x_offset [ vial ]
g_gypsy_tbl [ " arm " ] . y = 21
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
hand_img_num = hand_img_tbl4 [ vial ]
g_gypsy_tbl [ " hand " ] . image = g_gypsy_img_tbl [ 9 + hand_img_num ]
g_gypsy_tbl [ " hand " ] . x = hand_x_offset3 [ vial ]
g_gypsy_tbl [ " hand " ] . y = 13
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if vial_level [ vial ] == 1 then
if idx == 7 then
gypsy_start_pouring ( vial , vial_level [ vial ] )
g_gypsy_tbl [ " vial_liquid " ] [ vial ] . visible = false
elseif idx == 9 then
gypsy_stop_pouring ( )
end
end
end
--if idx > 3 and idx < 9 or idx > 8 and idx < 13 then
-- g_gypsy_tbl["hand"].x = g_gypsy_tbl["hand"].x - hand_x_offset4[vial]
--end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--io.stderr:write("idx ="..idx.."\n")
if should_update == true then
gypsy_vial_anim_liquid ( hand_img_num , vial , vial_level [ vial ] , g_gypsy_tbl [ " hand " ] . x - hand_x_offset4 [ vial ] , g_gypsy_tbl [ " hand " ] . y + 20 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--g_gypsy_tbl["hand"].x = g_gypsy_tbl["hand"].x + hand_x_offset4[vial]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local j
for j = 1 , 8 do
if g_gypsy_tbl [ " jar_level " ] > 0 then
gypsy_update_bubbles ( g_gypsy_tbl [ " jar_liquid " ] . image )
end
canvas_update ( )
input_poll ( )
end
end
2020-04-09 23:30:08 +02:00
--[[
2020-03-08 12:49:40 -07:00
local j
for j = 1 , 8 do
local img = g_gypsy_tbl [ " jar_liquid " ] . image
if img ~= nil then
gypsy_update_bubbles ( g_gypsy_tbl [ " jar_liquid " ] . image )
end
canvas_update ( )
input_poll ( )
end
--]]
end
g_gypsy_tbl [ " hand " ] . visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--io.stderr:write("vial #"..vial.." level="..vial_level[vial].."\n")
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " hand " ] . visible = false
g_gypsy_tbl [ " arm " ] . visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " vial " ] [ vial ] . visible = true
--g_gypsy_tbl["vial_liquid"][vial].visible = true
end
local function gypsy_ask_questions ( num_questions , scroll )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local strength_adjustment_tbl = { 0 , 0 , 2 , 0 , 1 , 1 , 1 , 0 }
2020-04-09 23:30:08 +02:00
local dex_adjustment_tbl = { 0 , 2 , 0 , 1 , 1 , 0 , 1 , 0 }
2020-03-08 12:49:40 -07:00
local int_adjustment_tbl = { 2 , 0 , 0 , 1 , 0 , 1 , 1 , 0 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , num_questions - 1 , 1 do
local q = gypsy_questions [ g_question_tbl [ i * 2 + 1 ] * 8 + g_question_tbl [ i * 2 + 2 ] + 1 ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local scroll_img = image_load ( " blocks.shp " , 3 )
scroll.image = scroll_img
image_print ( scroll_img , gypsy_question_text [ q - 104 ] , 7 , 303 , 8 , 9 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local vial = gypsy_ab_select ( q )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
gypsy_vial_anim ( vial )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_str = g_str + strength_adjustment_tbl [ vial ]
g_dex = g_dex + dex_adjustment_tbl [ vial ]
g_int = g_int + int_adjustment_tbl [ vial ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_question_tbl [ i + 1 ] = vial - 1
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--io.stderr:write(q.." "..vial.."("..g_str..","..g_dex..","..g_int..")\n")
end
end
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 function create_character ( )
music_play ( " create.m " )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local bubbles = sprite_new ( image_new ( 100 , 100 , 0 ) , 110 , 30 , false )
local bg = sprite_new ( image_load ( " vellum1.shp " , 0 ) , 0x10 , 0x50 , true )
image_print ( bg.image , " By what name shalt thou be called? " , 7 , 303 , 36 , 24 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local name = sprite_new ( nil , 0x34 , 0x78 , true )
name.text = " "
local char_index = 0
local input = nil
while input == nil do
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
bg.visible = false
name.visible = false
return false
end
local name_text = name.text
local len = string.len ( name_text )
if ( input == 8 or input == SDLK_LEFT ) and len > 0 then
name.text = string.sub ( name_text , 1 , len - 1 )
if len == 1 then -- old len
char_index = 0
else
char_index = string.byte ( name_text , len - 1 )
end
elseif input == 13 and len > 0 then --return
break ;
elseif g_keycode_tbl [ input ] ~= nil and len < 13 then
char_index = input
name.text = name_text .. g_keycode_tbl [ input ]
elseif input == SDLK_UP then --up
if char_index == 0 then
if len > 0 then
char_index = 97 --a
else
char_index = 65 --A
end
elseif char_index <= 32 then --gap in characters
char_index = 48
elseif char_index >= 57 and char_index < 65 then --gap in characters
char_index = 65
elseif char_index >= 90 and char_index < 97 then --gap in characters
char_index = 97
elseif char_index >= 122 then --last char
char_index = 32
else
char_index = char_index + 1
end
if len > 0 then -- erase char
name_text = string.sub ( name_text , 1 , len - 1 )
end
name.text = name_text .. g_keycode_tbl [ char_index ]
elseif input == SDLK_DOWN then --down
if char_index == 0 then
if len > 0 then
char_index = 122 --z
else
char_index = 90 --Z
end
elseif char_index == 65 then --gap in characters
char_index = 57
elseif char_index == 97 then --gap in characters
char_index = 90
elseif char_index <= 32 then --first char
char_index = 122
elseif char_index <= 48 then --gap in characters
char_index = 32
else
char_index = char_index - 1
end
if len > 0 then -- erase char
name_text = string.sub ( name_text , 1 , len - 1 )
end
name.text = name_text .. g_keycode_tbl [ char_index ]
elseif input == SDLK_RIGHT and len < 13 then --right
char_index = 97 --a
name.text = name_text .. " a "
end
input = nil
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
name.x = 0x10 + ( 284 - canvas_string_length ( name.text ) ) / 2
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( bg.image , " And art thou Male, or Female? " , 7 , 303 , 52 , 56 , 0x48 )
local gender_sprite = sprite_new ( nil , 154 , 152 , true )
gender_sprite.text = " "
input = nil
local gender = 0
while input == nil do
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
bg.visible = false
name.visible = false
gender_sprite.visible = false
return false
end
if input == 77 or input == 109 then
gender = 1 --male
break
elseif input == 70 or input == 102 then
gender = 0 --female
break
elseif input == SDLK_UP or input == SDLK_DOWN then --up and down
if gender == 0 then
gender = 1 --male
gender_sprite.text = " M "
else
gender = 0 --female
gender_sprite.text = " F "
end
elseif input == 13 and gender_sprite.text ~= " " then --return
break ;
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
end
end
gender_sprite.visible = false
load_images ( " vellum1.shp " )
bg.image = g_img_tbl [ 0 ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
name.y = 0x59
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_draw_line ( bg.image , 14 , 19 , 277 , 19 , 0x48 )
2020-04-09 23:30:08 +02:00
local new_sex = sprite_new ( g_img_tbl [ 3 ] , 0x5e , 0x70 , true )
2020-03-08 12:49:40 -07:00
local new_portrait = sprite_new ( g_img_tbl [ 0x12 ] , 0x3e , 0x81 , true )
local continue = sprite_new ( g_img_tbl [ 0x10 ] , 0x56 , 0x92 , true )
local esc_abort = sprite_new ( g_img_tbl [ 4 ] , 0x50 , 0xa3 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local montage_img_tbl = image_load_all ( " montage.shp " )
local portrait_num = 0
local avatar = sprite_new ( montage_img_tbl [ gender * 6 + portrait_num ] , 0xc3 , 0x76 , true )
local button_index = 0
local old_button_index = 0
local sex_highlight = sprite_new ( image_new ( 58 , 2 ) , new_sex.x , new_sex.y + 14 , true )
image_draw_line ( sex_highlight.image , 0 , 0 , 59 , 0 , 248 )
image_draw_line ( sex_highlight.image , 0 , 1 , 59 , 1 , 248 )
local portrait_highlight = sprite_new ( image_new ( 90 , 2 ) , new_portrait.x , new_portrait.y + 14 , false )
image_draw_line ( portrait_highlight.image , 0 , 0 , 91 , 0 , 248 )
image_draw_line ( portrait_highlight.image , 0 , 1 , 91 , 1 , 248 )
local continue_highlight = sprite_new ( image_new ( 66 , 2 ) , continue.x , continue.y + 14 , false )
image_draw_line ( continue_highlight.image , 0 , 0 , 67 , 0 , 248 )
image_draw_line ( continue_highlight.image , 0 , 1 , 67 , 1 , 248 )
local esc_abort_highlight = sprite_new ( image_new ( 72 , 2 ) , esc_abort.x , esc_abort.y + 14 , false )
image_draw_line ( esc_abort_highlight.image , 0 , 0 , 73 , 0 , 248 )
image_draw_line ( esc_abort_highlight.image , 0 , 1 , 73 , 1 , 248 )
input = nil
local exiting = false
while input == nil do
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true or ( input == 13 and button_index == 3 ) then
exiting = true
end
if input == 112 or input == 80 or ( input == 13 and button_index == 1 ) then
if portrait_num == 5 then
portrait_num = 0
else
portrait_num = portrait_num + 1
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
avatar.image = montage_img_tbl [ gender * 6 + portrait_num ]
elseif input == 115 or input == 83 or ( input == 13 and button_index == 0 ) then
if gender == 0 then
gender = 1
else
gender = 0
end
avatar.image = montage_img_tbl [ gender * 6 + portrait_num ]
elseif input == 99 or input == 67 or ( input == 13 and button_index == 2 ) then
break
elseif input == SDLK_UP and button_index > 0 then --up
button_index = button_index - 1 ;
elseif input == SDLK_DOWN and button_index < 3 then --down
button_index = button_index + 1 ;
elseif input == 0 then -- FIXME redundant stuff
local x = get_mouse_x ( )
if ( x < 152 ) then
local y = get_mouse_y ( )
if x > 93 and y > 111 and y < 128 then
if gender == 0 then
gender = 1
else
gender = 0
end
avatar.image = montage_img_tbl [ gender * 6 + portrait_num ]
elseif x > 61 and y > 128 and y < 145 then
if portrait_num == 5 then
portrait_num = 0
else
portrait_num = portrait_num + 1
end
avatar.image = montage_img_tbl [ gender * 6 + portrait_num ]
elseif x > 85 and y > 145 and y < 162 then
break
elseif x > 79 and y > 162 and y < 179 then
exiting = true
end
end
end
if button_index ~= old_button_index or exiting == true then
if old_button_index == 0 then
sex_highlight.visible = false
elseif old_button_index == 1 then
portrait_highlight.visible = false
elseif old_button_index == 2 then
continue_highlight.visible = false
else
esc_abort_highlight.visible = false
end
if exiting == true then
bg.visible = false
name.visible = false
new_sex.visible = false
new_portrait.visible = false
continue.visible = false
esc_abort.visible = false
avatar.visible = false
return false
end
if button_index == 0 then
sex_highlight.visible = true
elseif button_index == 1 then
portrait_highlight.visible = true
elseif button_index == 2 then
continue_highlight.visible = true
else
esc_abort_highlight.visible = true
end
old_button_index = button_index
end
input = nil
end
end
mouse_cursor_visible ( false )
fade_out ( )
canvas_hide_all_sprites ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_set_palette ( " palettes.int " , 4 )
local woods_img_tbl = image_load_all ( " woods.shp " )
local woods = sprite_new ( woods_img_tbl [ 0 ] , 0 , 0 , true )
local woods1 = sprite_new ( woods_img_tbl [ 1 ] , 0x140 , 0 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local scroll_img = image_load ( " blocks.shp " , 1 )
local scroll = sprite_new ( scroll_img , 1 , 0xa0 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local x , y = image_print ( scroll_img , " \" Welcome, O Seeker! \127 " , 7 , 303 , 96 , 14 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
for i = 0 , 0xbd , 2 do
woods.x = woods.x - 2
woods1.x = woods1.x - 2
canvas_update ( )
input = input_poll ( )
if input ~= nil then
break
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
woods.x = - 190
woods1.x = 130
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.x = 1
scroll.y = 0x98
image_print ( scroll_img , " A lonely stroll along an unfamiliar forest path brings you upon a curious gypsy wagon, its exotic colors dappled in the summer shade. " , 7 , 303 , 8 , 12 , 0x3e )
scroll.image = scroll_img
scroll.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.x = 1
scroll.y = 0x98
image_print ( scroll_img , " A woman's voice rings out with friendship, beckoning you into across the wagon's threshold and, as it happens, into another life.... " , 7 , 303 , 8 , 12 , 0x3e )
scroll.image = scroll_img
scroll.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_out ( )
canvas_hide_all_sprites ( )
canvas_set_palette ( " palettes.int " , 5 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_img_tbl = image_load_all ( " gypsy.shp " )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bg.image = g_gypsy_img_tbl [ 0 ]
bg.x = 0
bg.y = - 20
bg.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl = { }
g_gypsy_tbl [ " arm " ] = sprite_new ( nil , 0 , 0 , false )
g_gypsy_tbl [ " pour " ] = sprite_new ( nil , 0 , 0 , false )
g_gypsy_tbl [ " jar_level " ] = 0
g_gypsy_tbl [ " jar_liquid " ] = sprite_new ( nil , 0x92 , 0x53 , false )
g_gypsy_tbl [ " jar_liquid " ] . clip_x = 0
g_gypsy_tbl [ " jar_liquid " ] . clip_y = 0
g_gypsy_tbl [ " jar_liquid " ] . clip_w = 320
g_gypsy_tbl [ " jar_liquid " ] . clip_h = 0x6d
2020-04-09 23:30:08 +02:00
g_gypsy_tbl [ " jar " ] = sprite_new ( g_gypsy_img_tbl [ 16 ] , 0x8e , 0x38 , true )
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " bubble_counter " ] = 0
g_gypsy_tbl [ " vial_level " ] = { 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 }
local vial_level = g_gypsy_tbl [ " vial_level " ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local vial_img_off = { 2 , 5 , 8 , 0xB , 0x18 , 0x1B , 0x1E , 0x21 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " vial_liquid " ] = {
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 1 ] + vial_level [ 1 ] - 3 ] , 44 , 0x4d , true ) ,
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 2 ] + vial_level [ 2 ] - 3 ] , 65 , 0x4d , true ) ,
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 3 ] + vial_level [ 3 ] - 3 ] , 86 , 0x4d , true ) ,
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 4 ] + vial_level [ 4 ] - 3 ] , 107 , 0x4d , true ) ,
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 5 ] + vial_level [ 5 ] - 3 ] , 203 , 0x4d , true ) ,
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 6 ] + vial_level [ 6 ] - 3 ] , 224 , 0x4d , true ) ,
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 7 ] + vial_level [ 7 ] - 3 ] , 245 , 0x4d , true ) ,
sprite_new ( g_gypsy_img_tbl [ 0x42 + vial_img_off [ 8 ] + vial_level [ 8 ] - 3 ] , 266 , 0x4d , true ) ,
}
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " hand " ] = sprite_new ( nil , 0 , 0 , false )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_tbl [ " vial " ] = {
sprite_new ( g_gypsy_img_tbl [ 20 ] , 41 , 0x42 , true ) ,
sprite_new ( g_gypsy_img_tbl [ 20 ] , 62 , 0x42 , true ) ,
sprite_new ( g_gypsy_img_tbl [ 20 ] , 83 , 0x42 , true ) ,
sprite_new ( g_gypsy_img_tbl [ 20 ] , 104 , 0x42 , true ) ,
sprite_new ( g_gypsy_img_tbl [ 23 ] , 200 , 0x42 , true ) ,
sprite_new ( g_gypsy_img_tbl [ 23 ] , 221 , 0x42 , true ) ,
sprite_new ( g_gypsy_img_tbl [ 23 ] , 242 , 0x42 , true ) ,
sprite_new ( g_gypsy_img_tbl [ 23 ] , 263 , 0x42 , true ) ,
}
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.x = 1
scroll.y = 0x7c
scroll.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local scroll_img = image_load ( " blocks.shp " , 3 )
scroll.image = scroll_img
x , y = image_print ( scroll_img , " \" At last thou hast come to fulfill thy destiny, \127 the gypsy says. She smiles, as if in great relief. " , 7 , 303 , 8 , 19 , 0x3e )
image_print ( scroll_img , " \" Sit before me now, and I shall pour the light of Virtue into the shadows of thy future. \127 " , 7 , 303 , 8 , y + 16 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 3 )
scroll.image = scroll_img
x , y = image_print ( scroll_img , " On a wooden table eight bottles stand, a rainbow of bubbling liquids. " , 7 , 303 , 8 , 19 , 0x3e )
image_print ( scroll_img , " \" Behold the Virtues of the Avatar, \127 the woman says. \" Let us begin the casting! \127 " , 7 , 303 , 8 , y + 16 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
canvas_set_palette_entry ( 19 , 200 , 200 , 200 ) -- fix mouse cursor
canvas_set_palette_entry ( 27 , 68 , 68 , 68 ) -- fix mouse cursor
mouse_cursor_visible ( true )
local a_button = sprite_new ( g_gypsy_img_tbl [ 7 ] , 0x117 , 0xae , true )
local b_button = sprite_new ( g_gypsy_img_tbl [ 8 ] , 0x128 , 0xae , true )
g_ab_highlight = sprite_new ( image_new ( 16 , 2 ) , a_button.x , a_button.y + 13 , true )
image_draw_line ( g_ab_highlight.image , 0 , 0 , 17 , 0 , 248 )
image_draw_line ( g_ab_highlight.image , 0 , 1 , 17 , 1 , 248 )
g_str = 0xf
g_dex = 0xf
g_int = 0xf
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
shuffle_question_tbl ( 8 )
gypsy_ask_questions ( 4 , scroll )
shuffle_question_tbl ( 4 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
gypsy_ask_questions ( 2 , scroll )
gypsy_ask_questions ( 1 , scroll )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
a_button.visible = false
b_button.visible = false
g_ab_highlight.visible = false
mouse_cursor_visible ( false )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 3 )
scroll.image = scroll_img
image_print ( scroll_img , " \" The path of the Avatar lies beneath thy feet, worthy " .. name.text .. " , \127 the gypsy intones. With a mysterious smile, she passes you the flask of shimmering liquids. \" Drink of these waters and go forth among our people, who shall receive thee in joy! \127 " , 7 , 303 , 8 , 16 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
-- wait_for_input()
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
while input == nil do
gypsy_update_bubbles ( g_gypsy_tbl [ " jar_liquid " ] . image )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
break
end
end
fade_out ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_hide_all_sprites ( )
canvas_set_palette ( " palettes.int " , 6 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--local big_flask = sprite_new(g_gypsy_img_tbl[198], 0, 0, true)
bubbles.visible = true
bg.x = 0
bg.y = 0
bg.visible = true
bg.image = g_gypsy_img_tbl [ 198 ]
g_gypsy_tbl [ " bubble_counter " ] = 0
gypsy_update_bubbles ( bubbles.image )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.x = 1
scroll.y = 0x98
scroll.visible = true
image_print ( scroll_img , " As you drink from the flask, vertigo overwhelms you. A soothing mist obscures the gypsy's face, and you sink without fear into an untroubled sleep. " , 7 , 303 , 8 , 8 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
--wait_for_input()
input = nil
while input == nil do
gypsy_update_bubbles ( bubbles.image )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
break
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_set_bg_color ( 0x75 )
fade_out ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bubbles.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bg.image = g_gypsy_img_tbl [ 199 ]
bg.x = 0
bg.y = 0
bg.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.visible = true
image_print ( scroll_img , " You wake in a different time, upon another world's shore. Though the Avatar's quests bring you both triumph and tragedy, never do you stray from the path of the Eight Virtues. " , 7 , 303 , 8 , 8 , 0x3e )
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.visible = true
image_print ( scroll_img , " The sagas of Ultima IV and Ultima V chronicle your perilous travels, and your name and your deeds are written forever among Britannia's legends.... " , 7 , 303 , 8 , 8 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.visible = true
image_print ( scroll_img , " Finally, tempered by your struggles against the enemies of Virtue, you are proven ready to answer the epic challenge of Ultima VI! " , 7 , 303 , 8 , 12 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_set_bg_color ( 0 )
fade_out ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
config_set ( " config/newgame " , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
config_set ( " config/newgamedata/name " , name.text )
config_set ( " config/newgamedata/gender " , gender )
config_set ( " config/newgamedata/portrait " , portrait_num )
config_set ( " config/newgamedata/str " , g_str )
config_set ( " config/newgamedata/dex " , g_dex )
config_set ( " config/newgamedata/int " , g_int )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_gypsy_img_tbl = nil
g_gypsy_tbl = nil
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return true
end
local function ack_header ( scroll_img )
image_print ( scroll_img , " Ultima VI " , 7 , 303 , 115 , 9 , 0x3d )
image_print ( scroll_img , " A Lord British Production " , 7 , 303 , 63 , 17 , 0x3d )
image_draw_line ( scroll_img , 9 , 26 , 274 , 26 , 0x3d )
end
local function acknowledgements ( )
local bg = sprite_new ( image_load ( " vellum1.shp " , 0 ) , 0x10 , 0x50 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
ack_header ( bg.image )
image_print ( bg.image , " Produced by " , 7 , 303 , 106 , 32 , 0xC )
image_print ( bg.image , " Richard Garriott and Warren Spector " , 7 , 303 , 28 , 40 , 0x48 )
image_print ( bg.image , " Executive Producer " , 7 , 303 , 82 , 56 , 0xC )
image_print ( bg.image , " Dallas Snell " , 7 , 303 , 106 , 64 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( bg.image , " Programming " , 7 , 303 , 104 , 80 , 0xC )
image_print ( bg.image , " Cheryl Chen John Miles " , 7 , 303 , 67 , 88 , 0x48 )
image_print ( bg.image , " Herman Miller Gary Scott Smith " , 7 , 303 , 40 , 96 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in_sprite ( bg )
local input
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bg.image = image_load ( " vellum1.shp " , 0 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
ack_header ( bg.image )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( bg.image , " Writing " , 7 , 303 , 120 , 47 , 0xC )
image_print ( bg.image , " Stephen Beeman Dr. Cat \39 Manda Dee " , 7 , 303 , 25 , 55 , 0x48 )
image_print ( bg.image , " Richard Garriott Greg Malone " , 7 , 303 , 46 , 63 , 0x48 )
image_print ( bg.image , " John Miles Herman Miller " , 7 , 303 , 61 , 71 , 0x48 )
image_print ( bg.image , " Todd Porter Warren Spector " , 7 , 303 , 50 , 79 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bg.image = image_load ( " vellum1.shp " , 0 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
ack_header ( bg.image )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( bg.image , " Art " , 7 , 303 , 132 , 31 , 0xC )
image_print ( bg.image , " Keith Berdak Daniel Bourbonnais " , 7 , 303 , 37 , 39 , 0x48 )
image_print ( bg.image , " Jeff Dee \39 Manda Dee " , 7 , 303 , 75 , 47 , 0x48 )
image_print ( bg.image , " Glen Johnson Denis Loubet " , 7 , 303 , 56 , 55 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( bg.image , " Music " , 7 , 303 , 126 , 71 , 0xC )
image_print ( bg.image , " Ken Arnold Iolo Fitzowen " , 7 , 303 , 61 , 79 , 0x48 )
image_print ( bg.image , " Herman Miller Todd Porter " , 7 , 303 , 56 , 87 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bg.image = image_load ( " vellum1.shp " , 0 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
ack_header ( bg.image )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( bg.image , " Quality Assurance " , 7 , 303 , 87 , 31 , 0xC )
image_print ( bg.image , " Paul Malone Mike Romero " , 7 , 303 , 62 , 39 , 0x48 )
image_print ( bg.image , " " , 7 , 303 , 49 , 47 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( bg.image , " Additional Support " , 7 , 303 , 84 , 63 , 0xC )
image_print ( bg.image , " Michelle Caddel Melanie Fleming " , 7 , 303 , 39 , 71 , 0x48 )
image_print ( bg.image , " Alan Gardner Jeff Hillhouse " , 7 , 303 , 51 , 79 , 0x48 )
image_print ( bg.image , " Sherry Hunter Steve Muchow " , 7 , 303 , 49 , 87 , 0x48 )
image_print ( bg.image , " Cheryl Neeld " , 7 , 303 , 104 , 95 , 0x48 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
wait_for_input ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_out_sprite ( bg , 4 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bg.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return true
end
local function intro_sway_gargs ( sprite , idx , angry_flag )
if math.random ( 0 , 3 ) == 0 then
return idx
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local movement_tbl = { 1 , 1 , 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 1 , 1 , 1 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if idx == 12 then
idx = 1
else
idx = idx + 1
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
sprite.x = sprite.x + movement_tbl [ idx ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return idx
end
local function moongate_rotate_palette ( idx , num )
if g_pal_counter == 3 then
canvas_rotate_palette ( 232 , 8 )
g_pal_counter = 0
else
g_pal_counter = g_pal_counter + 1
end
end
local function intro_exit ( )
fade_out ( )
canvas_hide_all_sprites ( )
canvas_set_palette ( " palettes.int " , 0 )
end
local function intro_wait ( )
if should_exit ( wait_for_input ( ) ) == true then
intro_exit ( )
return false
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
return true
end
local function intro ( )
local input
local intro_img_tbl = image_load_all ( " intro.shp " )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local bg = sprite_new ( intro_img_tbl [ 6 ] , 0 , 0 , true )
local moongate = sprite_new ( intro_img_tbl [ 7 ] , 0x78 , 0x3a , false )
local gargs_left = sprite_new ( intro_img_tbl [ 3 ] , - 84 , 0x6d , true )
local gargs_right = sprite_new ( intro_img_tbl [ 4 ] , 326 , 0xc7 , true )
local garg_body = sprite_new ( intro_img_tbl [ 8 ] , 0xd5 , 0x8d , false )
local garg_head = sprite_new ( intro_img_tbl [ 11 ] , 0x123 , 0x9b , false )
local iolo = sprite_new ( intro_img_tbl [ 1 ] , 0xa8 , 0xca , false )
local shamino = sprite_new ( intro_img_tbl [ 2 ] , 0x44 , 0x7a , false )
local dupre = sprite_new ( intro_img_tbl [ 0 ] , - 0x20 , 0x7a , false )
2020-04-09 23:30:08 +02:00
local avatar = sprite_new ( intro_img_tbl [ 9 ] , 0x31 , 0x44 , false )
2020-03-08 12:49:40 -07:00
local alter = sprite_new ( intro_img_tbl [ 5 ] , 0 , 0x70 , true )
local ropes = sprite_new ( intro_img_tbl [ 12 ] , 0xd2 , 0x84 , false )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_set_palette ( " palettes.int " , 7 )
music_play ( " intro.m " )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local scroll_img = image_load ( " blocks.shp " , 2 )
local scroll = sprite_new ( scroll_img , 1 , 0x98 , true )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
image_print ( scroll_img , " Dazed, you emerge from the portal to find yourself standing on a desolate plain. Nearby rests a massive rune-struck altar, shrouded in moonlit fog. " , 7 , 308 , 8 , 8 , 0x3e )
if should_exit ( wait_for_input ( ) ) == true then intro_exit ( ) return end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
image_print ( scroll_img , " At first the plain is still. Then a hundred voices raise a slow, deathlike song, drawing closer and closer with each passing moment. You are seized by an urge to run... " , 7 , 308 , 8 , 8 , 0x3e )
if intro_wait ( ) == false then return end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local l_move_tbl_x = { 1 , 1 , 0 , 1 , 1 , 1 }
local l_move_tbl_y = { 0 , 0 , - 1 , 0 , 0 , - 1 }
local r_move_tbl_x = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 }
local r_move_tbl_y = { - 1 , - 1 , 0 , - 1 , - 1 , - 1 }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local i
for i = 0 , 95 , 1 do
gargs_left.x = gargs_left.x + l_move_tbl_x [ ( i % 6 ) + 1 ]
gargs_left.y = gargs_left.y + l_move_tbl_y [ ( i % 6 ) + 1 ]
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if i > 23 then
gargs_right.x = gargs_right.x + r_move_tbl_x [ ( i % 6 ) + 1 ] * 2
gargs_right.y = gargs_right.y + r_move_tbl_y [ ( i % 6 ) + 1 ] * 2
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
gargs_left.x = - 4
gargs_left.y = 77
gargs_right.x = 182
gargs_right.y = 79
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
break
end
canvas_update ( )
canvas_update ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 0 )
scroll.image = scroll_img
scroll.x = 0x21
scroll.y = 0x9d
scroll.visible = true
image_print ( scroll_img , " ...but you have no place to go. " , 7 , 308 , 35 , 8 , 0x3e )
if intro_wait ( ) == false then return end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0x98
image_print ( scroll_img , " Before you can offer a protest to the creatures who surround you, scaly claws grasp your body. " , 7 , 308 , 8 , 12 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if intro_wait ( ) == false then return end
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0xa0
image_print ( scroll_img , " With unearthly strength, the monsters bind you to the altar stone! " , 7 , 308 , 11 , 10 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
avatar.visible = true
ropes.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if intro_wait ( ) == false then return end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
gargs_left.y = gargs_left.y + 4
gargs_right.y = gargs_right.y + 4
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
garg_body.visible = true
garg_head.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , 22 , 1 do
garg_body.x = garg_body.x - 3
garg_body.y = garg_body.y - 3
garg_head.x = garg_head.x - 3
garg_head.y = garg_head.y - 3
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
break
end
canvas_update ( )
canvas_update ( )
end
if input == nil then
for i = 0 , 13 , 1 do
garg_body.y = garg_body.y - 3
garg_head.y = garg_head.y - 3
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
break
end
canvas_update ( )
canvas_update ( )
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
garg_body.x = 144
garg_body.y = 30
garg_head.x = 222
garg_head.y = 44
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0xa0
scroll.visible = true
image_print ( scroll_img , " Kneeling, the hordes sway and chant as a stately winged nightmare steps forward. " , 32 , 262 , 33 , 10 , 0x3e )
local input = nil
local left_idx = 1
local right_idx = 6
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
break
end
canvas_update ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0x98
scroll.visible = true
image_print ( scroll_img , " The leader unwraps a velvet covered, brass-bound book and recites from it in a formal, stilted tongue. " , 7 , 308 , 8 , 12 , 0x3e )
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
break
end
canvas_update ( )
end
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
image_print ( scroll_img , " Shouts and jeers explode from the masses as the priest slams shut the book. In his hand a malignant dagger drips with moonlight. " , 7 , 308 , 8 , 12 , 0x3e )
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
break
end
canvas_update ( )
end
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0xa0
image_print ( scroll_img , " You close your eyes. A dying scream, certainly your own, curdles the air. " , 80 , 228 , 16 , 10 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
moongate.visible = true
g_pal_counter = 0
for i = 0x78 , 0x3a , - 1 do
moongate.y = i
moongate_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
moongate.y = 0x3a
break
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
while input == nil do
moongate_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
break
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0xff , 0 , - 3 do
moongate_rotate_palette ( )
canvas_set_opacity ( i )
canvas_update ( )
input_poll ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_hide_all_sprites ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0x50
scroll.visible = true
image_print ( scroll_img , " Catcalls, the dagger, a scream, Death.... " , 7 , 308 , 39 , 14 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if intro_wait ( ) == false then return end
fade_out ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
image_print ( scroll_img , " Pandemonium. Shrieks of rage, of terror. " , 7 , 308 , 34 , 14 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if intro_wait ( ) == false then return end
fade_out ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
image_print ( scroll_img , " From the inevitable, an impossibility emerges. " , 7 , 308 , 16 , 14 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if intro_wait ( ) == false then return end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_out ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
image_print ( scroll_img , " You are still alive. " , 7 , 308 , 101 , 14 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if intro_wait ( ) == false then return end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_out ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
bg.visible = true
moongate.visible = true
gargs_left.visible = true
gargs_right.visible = true
garg_body.visible = true
garg_head.visible = true
alter.visible = true
avatar.visible = true
ropes.visible = true
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , 0xff , 3 do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
canvas_set_opacity ( i )
canvas_update ( )
input_poll ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
garg_head.image = intro_img_tbl [ 10 ]
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0x98
scroll.visible = true
image_print ( scroll_img , " Silent red light fills the darkness. There is the wooden clack of a crossbow, and a violet- fletched rose blooms in the priest \39 s barren forehead. " , 7 , 308 , 8 , 8 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
break
end
end
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , 42 , 1 do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local x = math.random ( - 1 , 2 )
garg_body.x = garg_body.x + x
garg_body.y = garg_body.y + 3
garg_head.x = garg_head.x + x
garg_head.y = garg_head.y + 3
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
garg_body.visible = false
garg_head.visible = false
break
end
canvas_update ( )
end
garg_body.visible = false
garg_head.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
iolo.visible = true
dupre.visible = true
shamino.visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , 82 , 1 do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if i > 33 then
dupre.x = dupre.x + 2
else
dupre.x = dupre.x + 1
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
dupre.y = dupre.y - 1
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if i > 13 then
if i > 36 then
shamino.x = shamino.x + 2
else
shamino.x = shamino.x + 1
2020-04-09 23:30:08 +02:00
end
2020-03-08 12:49:40 -07:00
shamino.y = shamino.y - 1
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
if i > 10 then
iolo.x = iolo.x + 1
if i > 14 then
iolo.y = iolo.y - 2
else
iolo.y = iolo.y - 1
end
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
dupre.x = 99
dupre.y = 40
shamino.x = 183
shamino.y = 53
iolo.x = 240
iolo.y = 62
break
end
canvas_update ( )
end
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0x98
scroll.visible = true
image_print ( scroll_img , " Friendly faces vault from a newborn moongate, while a rain of quarrels holds the furious mob at bay. The knight Dupre \39 s sword flashes twice in the darkness, slicing away your bonds! " , 7 , 308 , 8 , 8 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
break
end
end
scroll.visible = false
ropes.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 0 , 82 , 1 do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
dupre.x = dupre.x - 1
dupre.y = dupre.y + 2
shamino.x = shamino.x - 1
shamino.y = shamino.y + 2
iolo.x = iolo.x - 1
iolo.y = iolo.y + 2
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
avatar.y = avatar.y + 1
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) == true then
intro_exit ( )
return
end
dupre.visible = false
shamino.visible = false
iolo.visible = false
avatar.visible = false
break
end
canvas_update ( )
end
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.visible = true
image_print ( scroll_img , " \" Quickly, old friend! To the gate! \127 Accompanied by the swordsman Shamino and a grinning, crossbow-wielding Iolo the Bard, Dupre thrusts a spare sword into your hand. " , 7 , 308 , 8 , 8 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
break
end
end
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
image_print ( scroll_img , " Snatching the fallen priest \39 s book, Iolo dives into the redness with Shamino at his heels. The howling throng surges forward, all of one terrible mind. " , 7 , 308 , 8 , 8 , 0x3e )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
moongate_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
break
end
end
scroll_img = image_load ( " blocks.shp " , 1 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0xa0
image_print ( scroll_img , " The gate wanes rapidly as you and Dupre charge through... " , 130 , 178 , 12 , 10 , 0x3e )
for i = 0 , 150 , 1 do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
if i % 2 == 0 then
moongate.y = moongate.y + 1
end
moongate_rotate_palette ( )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
moongate.visible = false
break
end
end
scroll_img = image_load ( " blocks.shp " , 0 )
scroll.image = scroll_img
scroll.x = 0x21
scroll.y = 0x9d
image_print ( scroll_img , " ...but not rapidly enough. " , 7 , 308 , 50 , 8 , 0x3e )
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
break
end
end
scroll_img = image_load ( " blocks.shp " , 2 )
scroll.image = scroll_img
scroll.x = 0x1
scroll.y = 0x98
image_print ( scroll_img , " From the mob \39 s vanguard, three of the abominations scramble toward the gate. Driven by fury, the creatures hurl their bodies into the portal \39 s last handspan of light! " , 7 , 308 , 8 , 8 , 0x3e )
input = nil
while input == nil do
left_idx = intro_sway_gargs ( gargs_left , left_idx , false )
right_idx = intro_sway_gargs ( gargs_right , right_idx , false )
canvas_update ( )
input = input_poll ( )
if input ~= nil then
if should_exit ( input ) then
intro_exit ( )
return
end
break
end
end
scroll.visible = false
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
intro_exit ( )
end
g_menu_pal =
{
{ 232 , 96 , 0 } ,
{ 236 , 128 , 0 } ,
{ 244 , 164 , 0 } ,
{ 248 , 200 , 0 } ,
{ 252 , 252 , 84 } ,
{ 248 , 200 , 0 } ,
{ 244 , 164 , 0 } ,
{ 236 , 128 , 0 } ,
{ 232 , 96 , 0 }
}
g_menu_pal_idx = { 14 , 33 , 34 , 35 , 36 }
local function main_menu_set_pal ( idx )
local i
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
for i = 1 , 5 , 1 do
local colour = g_menu_pal [ 5 + ( i - 1 ) - idx ]
canvas_set_palette_entry ( g_menu_pal_idx [ i ] , colour [ 1 ] , colour [ 2 ] , colour [ 3 ] )
end
end
local function main_menu_load ( )
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
return
end
2020-03-08 12:49:40 -07:00
music_play ( " ultima.m " )
g_menu = { }
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
canvas_set_palette ( " palettes.int " , 0 )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local title_img_tbl = image_load_all ( " titles.shp " )
g_menu [ " title " ] = sprite_new ( title_img_tbl [ 0 ] , 0x13 , 0 , true )
g_menu [ " subtitle " ] = sprite_new ( title_img_tbl [ 1 ] , 0x3b , 0x2f , false )
g_menu [ " menu " ] = sprite_new ( image_load ( " mainmenu.shp " , 0 ) , 0x31 , 0x53 , false )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in ( )
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
g_menu [ " subtitle " ] . visible = true
g_menu [ " menu " ] . visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
fade_in_sprite ( g_menu [ " menu " ] )
mouse_cursor_visible ( true )
end
g_menu_idx = 0
local function selected_intro ( )
mouse_cursor_visible ( false )
main_menu_set_pal ( 0 )
fade_out ( )
canvas_hide_all_sprites ( )
intro ( )
music_play ( " ultima.m " )
g_menu [ " title " ] . visible = true
fade_in ( )
g_menu [ " subtitle " ] . visible = true
g_menu [ " menu " ] . visible = true
fade_in_sprite ( g_menu [ " menu " ] )
mouse_cursor_visible ( true )
end
local function selected_create_character ( )
main_menu_set_pal ( 1 )
fade_out_sprite ( g_menu [ " menu " ] , 6 )
if create_character ( ) == true then
return true
end
canvas_set_palette ( " palettes.int " , 0 )
g_menu_idx = 0
main_menu_set_pal ( g_menu_idx )
music_play ( " ultima.m " )
fade_in_sprite ( g_menu [ " menu " ] )
return false
end
local function selected_acknowledgments ( )
main_menu_set_pal ( 3 )
fade_out_sprite ( g_menu [ " menu " ] , 6 )
acknowledgements ( )
canvas_set_palette ( " palettes.int " , 0 )
g_menu_idx = 0
main_menu_set_pal ( g_menu_idx )
fade_in_sprite ( g_menu [ " menu " ] )
end
local function main_menu ( )
g_menu [ " title " ] . visible = true
g_menu [ " subtitle " ] . visible = true
g_menu [ " menu " ] . visible = true
2020-04-09 23:30:08 +02:00
2020-03-08 12:49:40 -07:00
local input
while true do
canvas_update ( )
input = input_poll ( true )
2020-04-09 23:24:28 +02:00
if engine_should_quit ( ) == 1 then
return " Q "
end
2020-03-08 12:49:40 -07:00
if input ~= nil then
if input == 113 then --q quit
return " Q "
elseif input == 105 or input == 13 and g_menu_idx == 0 then --i
selected_intro ( )
elseif input == 99 or input == 13 and g_menu_idx == 1 then --c
if selected_create_character ( ) == true then
return " J "
end
elseif input == 116 or input == 13 and g_menu_idx == 2 then --t
--transfer a character
elseif input == 97 or input == 13 and g_menu_idx == 3 then --a
selected_acknowledgments ( )
elseif input == 106 or input == 13 and g_menu_idx == 4 then --j
main_menu_set_pal ( 4 )
fade_out ( )
return " J "
elseif input == SDLK_DOWN then --down key
if g_menu_idx < 4 then
g_menu_idx = g_menu_idx + 1
main_menu_set_pal ( g_menu_idx )
end
elseif input == SDLK_UP then --up key
if g_menu_idx > 0 then
g_menu_idx = g_menu_idx - 1
main_menu_set_pal ( g_menu_idx )
end
elseif input >= 48 and input <= 57 or input == 45 or input == 61 then --play music play pressing number keys or '-' or '='
if input == 45 then
input = 11
elseif input == 48 then
input = 10
elseif input == 61 then
input = 12
else
input = input - 48
end
local song_names = {
" ultima.m " ,
" bootup.m " ,
" intro.m " ,
" create.m " ,
" forest.m " ,
" hornpipe.m " ,
" engage.m " ,
" stones.m " ,
" dungeon.m " ,
" brit.m " ,
" gargoyle.m " ,
" end.m "
}
music_play ( song_names [ input ] )
elseif input == 0 then --mouse click
local x = get_mouse_x ( )
if x > 56 and x < 264 then
local y = get_mouse_y ( )
if y > 86 and y < 108 then
selected_intro ( )
elseif y > 107 and y < 128 then
if selected_create_character ( ) == true then
return " J "
end
elseif y > 127 and y < 149 then
--transfer a character
elseif y > 148 and y < 170 then
selected_acknowledgments ( )
elseif y > 169 and y < 196 then
main_menu_set_pal ( 4 )
fade_out ( )
return " J " -- journey onward
end
end
elseif input == 1 then --mouse movement
local x = get_mouse_x ( )
if x > 56 and x < 264 then
local old_menu_idx = g_menu_idx
local y = get_mouse_y ( )
if y > 86 and y < 108 then
g_menu_idx = 0
elseif y > 107 and y < 128 then
g_menu_idx = 1
elseif y > 127 and y < 149 then
g_menu_idx = 2
elseif y > 148 and y < 170 then
g_menu_idx = 3
elseif y > 169 and y < 196 then
g_menu_idx = 4
end
if g_menu_idx ~= old_menu_idx then
main_menu_set_pal ( g_menu_idx )
end
end
end
input = nil
end
end
end
play ( )
fade_out ( )
g_img_tbl = nil
g_clock_tbl = nil
g_lounge_tbl = nil
g_window_tbl = nil
g_stones_tbl = nil
canvas_hide_all_sprites ( )
main_menu_load ( )
if main_menu ( ) == " Q " then -- returns "Q" for quit or "J" for Journey Onward
config_set ( " config/quit " , true )
end
music_stop ( )
canvas_hide_all_sprites ( )
canvas_hide ( )