global { raspberry_pie_status = 0; seen_ring_librarian = false; seen_ring_box = false; power_on = false; irradiated = false; rods_raised = false; rods_enriched = false; candles_solved = false; solarscale_with_me = false; solarscale_helps = 2; solarscale_glade_visited = false; pc_status = false; village_visited = false; candle_taken = false; tower_seen = false; tower_accept_level = 0; --0 -- no contanct, 1 -- level 3 reached, 2 -- level 4 completed, 3 -- complete acceptance tea_answer_1 = 0; --0 -- not spoken or not correct, 1 -- correct, 2 -- don't know tea_answer_2 = 0; --0 -- not spoken or not correct, 1 -- correct, 2 -- don't know tea_answer_3 = 0; --0 -- not spoken or not correct, 1 -- correct, 2 -- don't know had_tea = false; library_word = ''; library_book_map = {}; password1 = ''; password2 = ''; } obj { nam = 'raspberry_pie'; disp = translate(forest_locale, 'raspberry_pie'); inv = translate(forest_locale, 'raspberry_pie_inv'); } obj { nam = 'flower'; disp =translate(forest_locale, 'flower'); inv = translate(forest_locale, 'flower_inv'); } obj { nam = 'lock'; disp = translate(forest_locale, 'lock'); disp2 = translate(forest_locale, 'lock_disp2'); disp3 = translate(forest_locale, 'lock_disp3'); inv = translate(forest_locale, 'lock_inv'); } room { nam = 'above_forest'; pic = 'images/above_forest.png'; disp = translate(forest_locale, 'above_forest'); theme = 'main'; decor = function(s) pr(translate_now(forest_locale, 'above_forest_decor')); if not village_visited then pr(translate_now(forest_locale, 'above_forest_decor_village')); end; end; enter = function(s) if here():from()^'intro_start' or here():from()^'intro_settings' or here():from()^'intro_info' then stop_menu(); end; if here()^'forest_glade' then pr(translate_now(forest_locale, 'above_forest_enter')); end; snd.music('sound/bgm_forest.ogg'); end; way = { path {"#down", translate(forest_locale, 'transition_land'), 'forest_glade'}:disable(); path {"#north", translate(forest_locale, 'transition_north_along_road'), 'above_near_village'}; } }:with { obj { nam = '#thicket'; act = translate(forest_locale, 'above_forest_thicket_act'); }; obj { nam = '#road'; act = function(s) pr(translate_now(forest_locale, 'above_forest_road_act')); if not village_visited then pr(translate_now(forest_locale, 'above_forest_road_act_village')); end; end; }; obj { nam = '#powerlines'; act = translate(forest_locale, 'above_forest_powerlines_act'); }; obj { nam = '#glade'; act = function(s) pr(translate_now(forest_locale, 'above_forest_glade_act')); if _'#down':disabled() then _'#down':enable(); pr(translate_now(forest_locale, 'above_forest_glade_act_first')); end; end; }; 'mountains'; 'wind'; 'sun'; 'clouds'; } room { nam = 'forest_glade'; pic = function(s) if lookup('#flowers', 'forest_glade').state == 1 then return 'images/forest_glade.png'; else return 'images/forest_glade.png;images/forest_glade_flower.png@269,201'; end; end; disp = translate(forest_locale, 'forest_glade'); theme = 'main'; onenter = function(s) pr(translate_now(forest_locale, 'forest_glade_enter')); if solarscale_with_me and not solarscale_glade_visited then solarscale_glade_visited = true; pr(translate_now(forest_locale, 'forest_glade_solarscale')); end; end; decor = translate(forest_locale, 'forest_glade_decor'); way = { path {'#up', translate(forest_locale, 'transition_fly'), 'above_forest'}; } }: with { obj { nam = '#thicket'; act = translate(forest_locale, 'forest_glade_thicket'); }; obj { nam = '#birds'; act = translate(forest_locale, 'forest_glade_birds'); }; obj { nam = '#grass'; act = function(s) _'#flowers':enable(); return translate_now(forest_locale, 'forest_glade_grass'); end; }; obj { state = 0; nam = '#flowers'; act = function(s) if s.state == 0 then take('flower'); s.state = 1; return translate_now(forest_locale, 'forest_glade_flowers_first'); else return translate_now(forest_locale, 'forest_glade_flowers'); end; end; }:disable(); } room { nam = 'above_near_village'; disp = translate(forest_locale, 'above_near_village'); pic = 'images/above_near_village.png'; theme = 'main'; onenter = function(s) if here()^'near_village' then return translate_now(forest_locale, 'above_near_village_enter'); end; end; decor = translate(forest_locale, 'above_near_village_decor'); way = { path {"#south", translate(forest_locale, 'transition_south_along_road'), 'above_forest'}; path {"#down", translate(forest_locale, 'transition_land'), 'near_village'}; path {"#north", translate(forest_locale, 'transition_north_to_the_village'), 'above_village'}; } }: with { obj { nam = '#road'; act = translate(forest_locale, 'above_near_village_road'); }; obj { nam = '#thicket'; act = translate(forest_locale, 'above_near_village_thicket'); }; obj { nam = '#village'; act = function(s) pr(translate_now(forest_locale, 'above_near_village_village')); if not village_visited then village_visited = true; pr(translate_now(forest_locale, 'village_unvisited')); end; end; }; 'mountains'; 'wind'; 'sun'; 'clouds'; }; room { nam = 'above_village'; pic = 'images/above_village.png'; disp = translate(forest_locale, 'above_village'); theme = 'main'; decor = translate(forest_locale, 'above_village_decor'); way = { path {"#south", translate(forest_locale, 'transition_south_along_road'), 'above_near_village'}; path {"#down", translate(forest_locale, 'transition_land'), 'village_no_way'}; path {"fly_west_from_village", translate(forest_locale, 'transition_west'), 'above_west'}:disable(); } }: with { obj { nam = '#thicket'; act = translate(forest_locale, 'above_village_thicket'); }; obj { nam = '#road'; act = translate(forest_locale, 'above_village_road'); }; obj { nam = '#village'; act = function(s) pr(translate_now(forest_locale, 'above_village_village')); if not village_visited then village_visited = true; pr(translate_now(forest_locale, 'village_unvisited')); end; end; }; 'mountains'; 'wind'; 'sun'; 'clouds'; }; obj { nam = 'sun'; act = translate(forest_locale, 'sun'); }; obj { nam = 'sun_transformed'; act = translate(forest_locale, 'sun_transformed'); }; obj { nam = 'clouds'; act = translate(forest_locale, 'clouds'); }; obj { nam = 'wind'; act = translate(forest_locale, 'wind'); }; obj { nam = 'mountains'; act = translate(forest_locale, 'mountains'); }; room { nam = 'above_west'; disp = translate(forest_locale, 'above_west'); pic = 'images/above_west.png'; theme = 'main'; decor = translate(forest_locale, 'above_west_decor'); way = { path {"#east", translate(forest_locale, 'transition_east_to_the_village'), 'above_village'}; path {"#west", translate(forest_locale, 'transition_west_to_the_crater'), 'above_crater'}:disable(); } }: with { obj { nam = '#village'; act = translate(forest_locale, 'above_west_village'); }; obj { nam = '#mountains'; act = translate(forest_locale, 'above_west_mountains'); }; obj { nam = '#mountaintops'; act = translate(forest_locale, 'above_west_mountaintops'); }; obj { nam = '#mountainslopes'; act = translate(forest_locale, 'above_west_mountainslopes'); }; obj { nam = '#crater'; act = function(s) _'#west':enable(); return translate_now(forest_locale, 'above_west_crater'); end; }; 'clouds'; 'sun'; } room { nam = 'above_crater'; pic = 'images/above_crater.png'; theme = 'main'; onenter = function(s) if here()^'inside_crater_glade' then p(translate_now(forest_locale, 'above_crater_enter')); end; end; disp = translate(forest_locale, 'above_crater'); decor = translate(forest_locale, 'above_crater_decor'); way = { path {"#east", translate(forest_locale, 'transition_east'), 'above_west'}; path {"#down", translate(forest_locale, 'transition_land'), 'inside_crater_glade'}:disable(); } }: with { obj { nam = '#crater'; act = translate(forest_locale, 'above_crater_crater'); }; obj { nam = '#tower'; act = translate(forest_locale, 'above_crater_tower'); }; obj { nam = '#trees'; act = translate(forest_locale, 'above_crater_trees'); }; obj { nam = '#glade'; act = function(s) _'#down':enable(); return translate_now(forest_locale, 'above_crater_glade'); end; }; 'wind'; 'sun'; 'clouds'; } room { nam = 'village_no_way'; onenter = function(s) if solarscale_with_me then p(translate_now(forest_locale, 'village_no_way_solarscale')); else p(translate_now(forest_locale, 'village_no_way_alone')); end; return false; end; } room { nam = 'near_village'; disp = translate(forest_locale, 'near_village'); pic = 'images/near_village.png'; theme = 'main'; onenter = function(s) if here()^'above_near_village' then p(translate_now(forest_locale, 'near_village_enter')); end; end; decor = translate(forest_locale, 'near_village_decor'); way = { path {"#up", translate(forest_locale, 'transition_fly'), 'above_near_village'}; path {"#north", translate(forest_locale, 'transition_north_to_the_village'), 'village_south'}; } }: with { obj { nam = '#road'; act = translate(forest_locale, 'near_village_road'); }; obj { nam = '#forest'; act = translate(forest_locale, 'near_village_forest'); }; obj { nam = '#village'; act = function(s) p(translate_now(forest_locale, 'near_village_village')); if not village_visited then village_visited = true; p(translate_now(forest_locale, 'near_village_village_2')); end; end; }; 'sun_transformed'; 'clouds'; } room { nam = 'village_south'; disp = translate(forest_locale, 'village_south'); pic='images/village_south.png'; theme = 'main'; enter = function(s) if not village_visited then village_visited = true; p(translate_now(forest_locale, 'village_south_enter')); end; end; nofollow = function(s) if here():from()^'near_village' then return translate_now(forest_locale, 'village_south_follow'); else return true; end; end; decor = translate(forest_locale, 'village_south_decor'); way = { path {'#south', translate(forest_locale, 'transition_south_to_the_forest'), 'near_village'}; path {'#in', translate(forest_locale, 'transition_inside_hut'), 'foresters_hut'}; path {'#north', translate(forest_locale, 'transition_north_to_the_townhall'), 'village_center'}; }; }:with { obj { nam = '#road'; act = translate(forest_locale, 'village_south_road'); }; obj { nam = '#village'; act = translate(forest_locale, 'village_south_village'); }; obj { nam = '#foresters_car'; act = translate(forest_locale, 'village_south_car'); }; obj { nam = '#foresters_hut_out'; act = translate(forest_locale, 'village_south_hut'); }; 'sun_transformed'; 'clouds'; } room { state = 0; nam = 'foresters_hut'; pic = function(s) if _'rope':where() == here() then return 'images/foresters_hut.png;images/foresters_hut_rope.png@8,160'; else return 'images/foresters_hut.png'; end; end; theme = 'main'; nofollow = true; disp = translate(forest_locale, 'foresters_hut'); enter = function(s) if s.state == 0 then s.state = 1; return translate_now(forest_locale, 'foresters_hut_enter'); end; end; decor = translate(forest_locale, 'foresters_hut_decor'); way = { path {'#out', translate(forest_locale, 'transition_out'), 'village_south'}; } }:with { obj { nam = '#sofa'; act = translate(forest_locale, 'foresters_hut_sofa'); }; obj { nam = '#cupboard'; act = translate(forest_locale, 'foresters_hut_cupboard'); }; obj { nam = '#table'; act = translate(forest_locale, 'foresters_hut_table'); }; obj { nam = '#chairs'; act = translate(forest_locale, 'foresters_hut_chairs'); }; obj { nam = '#radio'; act = translate(forest_locale, 'foresters_hut_radio'); }; obj { bought = false; nam = 'forester'; dsc = translate(forest_locale, 'foresters_hut_forester'); act = function(s) walkin('forester_dlg'); end; used = function(s, o) if o^'raspberry_pie' then return translate_now(forest_locale, 'foresters_hut_forester_pie'); else return translate_now(forest_locale, 'foresters_hut_not_interested'); end; end; }; obj { nam = 'rope'; disp = translate(forest_locale, 'foresters_hut_rope_disp'); dsc = translate(forest_locale, 'foresters_hut_rope'); act = function(s) if _('forester').bought then p(translate_now(forest_locale, 'foresters_hut_rope_taken')); take('rope') else p(translate_now(forest_locale, 'foresters_hut_rope_not_taken')); end; end; inv = translate(forest_locale, 'foresters_hut_rope_inv'); }; } dlg { nam = 'forester_dlg'; disp = translate(forest_locale, 'forester_dlg_disp'); theme = 'main'; pic = 'images/characters/forester.png'; enter = translate(forest_locale, 'forester_dlg_enter'); phr = { {translate(forest_locale, 'common_dlg_greet'), translate(forest_locale, 'forester_dlg_greet_response'), {translate(forest_locale, 'common_dlg_places'), translate(forest_locale, 'forester_dlg_places_response')}; }, {cond=function(s) return where('rope')^'foresters_hut' and not _('forester').bought end, translate(forest_locale, 'forester_dlg_rope'), function(s) p(translate_now(forest_locale, 'forester_dlg_rope_response')); raspberry_pie_status = 1; end}, {cond=function(s) return have 'raspberry_pie' end, translate(forest_locale, 'forester_dlg_pie'), function(s) remove('raspberry_pie', pl); p(translate_now(forest_locale, 'forester_dlg_pie_response')); raspberry_pie_status = 2; _('forester').bought = 1; end}, {true, translate(forest_locale, 'forester_dlg_farewell'), function(s) p(translate_now(forest_locale, 'forester_dlg_farewell_response')); walkout(); end} } } room { nam = 'village_center'; nofollow = true; pic = 'images/village_center.png'; theme = 'main'; disp = translate(forest_locale, 'village_center'); decor = function(s) p(translate_now(forest_locale, 'village_center_decor')); p(translate_now(forest_locale, 'village_all_decor')); end; way = { path {translate(forest_locale, 'transition_south_to_hut'), 'village_south'}; path {'#down', translate(forest_locale, 'transition_inside_well'), 'inside_well'}:disable(); path {translate(forest_locale, 'transition_inside_town_hall'), 'townhall'}; path {translate(forest_locale, 'transition_inside_tavern'), 'tavern'}; path {translate(forest_locale, 'transition_north_to_library'), 'village_north'}; }; }: with { obj { nam = '#townhall'; act = translate(forest_locale, 'village_center_townhall'); }; obj { nam = '#music'; act = translate(forest_locale, 'village_center_music'); }; obj { nam = '#tavern'; act = translate(forest_locale, 'village_center_tavern'); }; obj { nam = '#library'; act = translate(forest_locale, 'village_center_library'); }; obj { known = false; nam = 'village_well'; dsc = function(s) p(translate_now(forest_locale, 'village_well_dsc')); if _('inside_well').state then p(translate_now(forest_locale, 'village_well_dsc_rope')); end; end; act = function(s) if s.known then _'#down':enable(); p(translate_now(forest_locale, 'village_well_act_key')); else p(translate_now(forest_locale, 'village_well_act')); end; end; used = function(s, o) if s.known and o^'rope' then _('inside_well').state = true; remove('rope', pl); p(translate_now(forest_locale, 'village_well_used')); else return false; end; end; }; obj { nam = 'maid'; dsc = function(s) p(translate_now(forest_locale, 'village_maid_dsc')); if _('maid_dlg').flower then p(translate_now(forest_locale, 'village_maid_flower')); end; end; act = function(s) if _('maid_dlg').flower and (raspberry_pie_status == 0 or raspberry_pie_status == 2) then return translate_now(forest_locale, 'village_maid_act'); else walkin('maid_dlg'); end; end; used = function(s, o) if o^'flower' then return translate_now(forest_locale, 'village_maid_used_flower'); else return translate_now(forest_locale, 'village_maid_used_other'); end; end; }; 'sun_transformed'; 'clouds'; } dlg { nam = 'maid_dlg'; disp = translate(forest_locale, 'maid_dlg'); theme = 'main'; pic = function(s) if s.flower then return 'images/characters/maid_glad.png'; else return 'images/characters/maid_sad.png'; end; end; flower = false; pie = false; work_asked = false; pie_asked = false; enter = function(s) if _('maid_dlg').flower then return translate_now(forest_locale, 'maid_dlg_enter_flower'); else return translate_now(forest_locale, 'maid_dlg_enter_no_flower'); end; end; phr = { {cond=function(s) return not _('maid_dlg').flower end, translate(forest_locale, 'common_dlg_greet'), translate(forest_locale, 'maid_dlg_greet_response'), {translate(forest_locale, 'common_dlg_places'), translate(forest_locale, 'maid_dlg_places_response'), {translate(forest_locale, 'maid_dlg_places_like'), translate(forest_locale, 'maid_dlg_places_like_response'), only=true, { cond=function(s) return have 'flower' end, translate(forest_locale, 'maid_dlg_flower'), function(s) _('maid_dlg').flower = 1; remove('flower', pl); p(translate_now(forest_locale, 'maid_dlg_flower_response')); end }; { translate(forest_locale, 'maid_dlg_silent'), translate(forest_locale, 'maid_dlg_silent_response') } }; }; }; {cond=function(s) return not _('maid_dlg').work_asked end, translate(forest_locale, 'maid_dlg_tavern'), function(s) _('maid_dlg').work_asked = true; return translate_now(forest_locale, 'maid_dlg_tavern_response'); end}; { cond=function(s) return _('maid_dlg').pie_asked and have 'flower' end, translate(forest_locale, 'maid_dlg_flower'), function(s) _('maid_dlg').flower = 1; remove('flower', pl); raspberry_pie_status = 2; take 'raspberry_pie' p(translate_now(forest_locale, 'maid_dlg_pie_response')); end }; { cond=function(s) return _('maid_dlg').work_asked and not _('maid_dlg').pie_asked and _('maid_dlg').flower and raspberry_pie_status == 1; end; translate(forest_locale, 'maid_dlg_pie'), function(s) raspberry_pie_status = 2; take 'raspberry_pie' p(translate_now(forest_locale, 'maid_dlg_pie_response')); end; }; { cond=function(s) return _('maid_dlg').work_asked and not _('maid_dlg').pie_asked and not _('maid_dlg').flower and raspberry_pie_status == 1; end; translate(forest_locale, 'maid_dlg_pie'), translate(forest_locale, 'maid_dlg_pie_fail_response'), only=true, { translate(forest_locale, 'maid_dlg_no_money'), function(s) _('maid_dlg').pie_asked = 1; p(translate_now(forest_locale, 'maid_dlg_no_money_response')); end, only=true, { cond=function(s) return have 'flower' end, translate(forest_locale, 'maid_dlg_flower'), function(s) _('maid_dlg').flower = 1; remove('flower', pl); raspberry_pie_status = 2; take('raspberry_pie'); p(translate_now(forest_locale, 'maid_dlg_pie_response')); end }; {translate(forest_locale, 'maid_dlg_flower_agree'), translate(forest_locale, 'maid_dlg_flower_agree_response')}; {translate(forest_locale, 'maid_dlg_flower_think'), translate(forest_locale, 'maid_dlg_flower_think_response')}; }, { translate(forest_locale, 'maid_dlg_pie_ask'), translate(forest_locale, 'maid_dlg_pie_ask_response') } }; { translate(forest_locale, 'maid_dlg_bye'), function(s) p(translate_now(forest_locale, 'maid_dlg_bye_response')); walkout(); end } } } room { nam = 'tavern'; pic = function(s) if raspberry_pie_status == 2 then return 'images/tavern.png'; else return 'images/tavern.png;images/tavern_pie.png@181,124'; end; end; disp = translate(forest_locale, 'tavern'); theme = 'main'; nofollow = true; decor = translate(forest_locale, 'tavern_decor'); way = { path {'#outside', translate(forest_locale, 'transition_out'), 'village_center'}; }; }: with { obj { nam = '#windows'; act = translate(forest_locale, 'tavern_windows'); }; obj { nam = '#tables'; act = translate(forest_locale, 'tavern_tables'); }; obj { nam = '#walls'; act = translate(forest_locale, 'tavern_walls'); }; obj { nam = '#lights'; act = translate(forest_locale, 'tavern_lights'); }; obj { nam = '#fireplace'; act = translate(forest_locale, 'tavern_fireplace'); }; obj { nam = '#cauldron'; act = translate(forest_locale, 'tavern_cauldron'); }; obj { nam = 'tavernkeeper'; dsc = translate(forest_locale, 'tavern_keeper'); act = function(s) walkin 'tavernkeeper_dlg' end; } } dlg { nam = 'tavernkeeper_dlg'; noinv = true; title = translate(forest_locale, 'tavernkeeper_dlg'); pic = 'images/characters/tavernkeeper.png'; theme = 'main'; enter = translate(forest_locale, 'tavernkeeper_dlg_enter'); phr = { {translate(forest_locale, 'common_dlg_greet'), translate(forest_locale, 'tavernkeeper_dlg_greet_response'), {translate(forest_locale, 'tavernkeeper_dlg_money'), translate(forest_locale, 'tavernkeeper_dlg_money_response')}; {translate(forest_locale, 'common_dlg_places'), translate(forest_locale, 'tavernkeeper_dlg_places_response')}; }; {cond=function(s) return raspberry_pie_status == 1; end, translate(forest_locale, 'tavernkeeper_dlg_pie'), translate(forest_locale, 'tavernkeeper_dlg_pie_response'), {translate(forest_locale, 'tavernkeeper_dlg_pie_2'), translate(forest_locale, 'tavernkeeper_dlg_pie_response_2')} }; {true, translate(forest_locale, 'tavernkeeper_dlg_bye'), function(s) p(translate_now(forest_locale, 'tavernkeeper_dlg_bye_response')); walkout(); end}; }; } room { nam = 'townhall'; pic='images/townhall.png'; theme = 'main'; title = translate(forest_locale, 'townhall'); nofollow = true; decor = translate(forest_locale, 'townhall_decor'); onexit = function(s) if have 'oil' then p(translate_now(forest_locale, 'townhall_onexit')); return false; end; end; way = { path {'#out', translate(forest_locale, 'transition_out'), 'village_center'}; }; }: with { obj { nam = '#ceiling'; act = translate(forest_locale, 'townhall_ceiling'); }; obj { nam = '#chandelier'; act = translate(forest_locale, 'townhall_chandelier'); }; obj { nam = '#curtains'; act = translate(forest_locale, 'townhall_curtains'); }; obj { nam = '#table'; act = translate(forest_locale, 'townhall_table'); }; obj { nam = '#chairs'; act = translate(forest_locale, 'townhall_chairs'); }; obj { nam = '#head'; act = translate(forest_locale, 'townhall_head'); }; obj { flask = true; nam = 'cabinet'; dsc = translate(forest_locale, 'townhall_cabinet'); act = function(s) if s.flask then return translate_now(forest_locale, 'townhall_cabinet_act_oil'); else return translate_now(forest_locale, 'townhall_cabinet_act'); end; end; used = function(s, o) if o == _('oil') then s.flask = true; remove(o, pl); put(o, 'townhall'); return translate_now(forest_locale, 'townhall_cabinet_used_oil'); end; end; }:with { obj { nam = 'records'; act = translate(forest_locale, 'townhall_cabinet_records'); }; obj { nam = 'parts'; act = translate(forest_locale, 'townhall_cabinet_parts'); }; obj { nam = 'oil'; disp = translate(forest_locale, 'townhall_cabinet_oil'); tak = function(s) _('cabinet').flask = false; return translate_now(forest_locale, 'townhall_cabinet_oil_tak'); end; inv = translate(forest_locale, 'townhall_cabinet_oil_inv'); }; obj { nam = 'record_player'; act = translate(forest_locale, 'townhall_cabinet_record_player'); }; }; } room { state = false; nofollow = true; nam = 'inside_well'; theme = 'tower'; pic = 'images/oldwell.png'; disp = translate(forest_locale, 'inside_well'); onenter = function(s) if not s.state then p(translate_now(forest_locale, 'inside_well_enter')); return false; end; end; decor = translate(forest_locale, 'inside_well_decor'); way = { path {translate(forest_locale, 'transition_up'), 'village_center'}; } }:with { obj { nam = 'loose_rock'; dsc = translate(forest_locale, 'inside_well_loose_rock'); act = function(s) p(translate_now(forest_locale, 'inside_well_loose_rock_act')); take('hidden_key'); s:disable(); end; } } obj { nam = 'hidden_key'; disp = translate(forest_locale, 'hidden_key_disp'); disp2 = translate(forest_locale, 'hidden_key_disp2'); disp3 = translate(forest_locale, 'hidden_key_disp3'); inv = translate(forest_locale, 'hidden_key_inv'); } room { nam = 'village_north'; pic = 'images/village_north.png'; disp = translate(forest_locale, 'village_north'); theme = 'main'; nofollow = true; decor = function(s) p(translate_now(forest_locale, 'village_north_decor')); p(translate_now(forest_locale, 'village_all_decor')); end; way = { path {'#south', translate(forest_locale, 'transition_south_to_town_hall'), 'village_center'}; path {'#in', translate(forest_locale, 'transition_inside_library'), 'library'}; }; }: with { obj { nam = '#village'; act = translate(forest_locale, 'village_north_village'); }; obj { nam = '#road'; act = translate(forest_locale, 'village_north_road'); }; obj { nam = '#forest'; act = translate(forest_locale, 'village_north_forest'); }; obj { nam = '#library'; act = translate(forest_locale, 'village_north_library'); }; obj { nam = '#mountains'; act = translate(forest_locale, 'village_north_mountains'); }; 'sun_transformed'; 'clouds'; } room { nam = 'library'; pic = 'images/library.png'; disp = translate(forest_locale, 'library'); theme = 'main'; nofollow = true; decor = translate(forest_locale, 'library_decor'); way = { path {'#out', translate(forest_locale, 'transition_out'), 'village_north'}; path {'library_hidden_path', translate(forest_locale, 'library_to_hidden_room'), 'library_hidden_room'}:disable(); }; }:with { obj { nam = 'librarian'; dsc = translate(forest_locale, 'library_librarian'); act = function(s) walkin 'librarian_dlg' end; used = function(s, o) if o^'box' then return translate_now(forest_locale, 'library_librarian_used_box'); else return translate_now(forest_locale, 'library_librarian_used_other'); end; end; }; obj { nam = '#tables'; act = translate(forest_locale, 'library_tables'); }; obj { nam = '#chairs'; act = translate(forest_locale, 'library_chairs'); }; obj { nam = '#lamps'; act = translate(forest_locale, 'library_lamps'); }; obj { nam = '#windows'; act = translate(forest_locale, 'library_windows'); }; obj { state = 0; nam = 'library_shelves'; act = function(s) if s.state == 0 then p(translate_now(forest_locale, 'library_shelves_act_first')); else p(translate_now(forest_locale, 'library_shelves_act')); end; end; }, obj { nam = 'library_the_shelf'; act = function(s) if _'library_shelves'.state == 0 then p(translate_now(forest_locale, 'library_the_shelf_act', {word=library_word})); end; _'library_shelves'.state = 1; walkin('library_shelf_puzzle'); end; }; obj { nam = '#library_notice'; act = function(s) walkin('library_notice_inside') end; } } room { nam = 'library_notice_inside'; pic = 'images/library.png'; disp = translate(forest_locale, 'library'); theme = 'main'; decor = translate(forest_locale, 'library_notice_inside_decor'); way = { path {translate(forest_locale, 'transition_back'), 'library'}; }; } dlg { ring = 0; nam = 'librarian_dlg'; pic = 'images/characters/librarian.png'; theme = 'main'; noinv = true; title = translate(forest_locale, 'librarian_dlg'); enter = function(s) seen_ring_librarian = true; return translate_now(forest_locale, 'librarian_dlg_enter'); end; phr = { {translate(forest_locale, 'common_dlg_greet'), translate(forest_locale, 'librarian_dlg_greet_response'), {translate(forest_locale, 'common_dlg_places'), translate(forest_locale, 'librarian_dlg_places_response'), {translate(forest_locale, 'librarian_dlg_library'), translate(forest_locale, 'librarian_dlg_library_response')} }, {translate(forest_locale, 'librarian_dlg_ring'), translate(forest_locale, 'librarian_dlg_ring_response')} }, {cond=function(s) return seen_ring_box; end, translate(forest_locale, 'librarian_dlg_ring_look'), function(s) _('village_well').known = 1; return translate_now(forest_locale, 'librarian_dlg_ring_look_response'); end}; {true, translate(forest_locale, 'librarian_dlg_bye'), function(s) p(translate_now(forest_locale, 'librarian_dlg_bye_response')); walkout(); end} } } room { nam = 'library_shelf_puzzle'; nofollow = true; disp = translate(forest_locale, 'library'); theme = 'main'; pic = function(s) local pic = 'images/library/library_no_books_bg.png'; for index, book in ipairs(_'shelf'.obj) do pic = pic .. ';images/library/library_book' .. tostring(book.book) .. '.png@' .. tostring(35 * index - 33) .. ',63'; end; return pic; end; way = { path {'#back', translate(forest_locale, 'transition_away_from_bookstand'), 'library'}; }; }:with { obj { nam = 'shelf'; dsc = function(s) local count = #s.obj; if count > 1 then p(translate_now(forest_locale, 'library_shelf_puzzle_shelf_multiple')); elseif count == 1 then p(translate_now(forest_locale, 'library_shelf_puzzle_shelf_single')); else p(translate_now(forest_locale, 'library_shelf_puzzle_shelf_none')); end; end; act = function(s) return translate_now(forest_locale, 'library_shelf_puzzle_shelf_act', {word=library_word}); end; used = function(s, o) pl:need_scene(); if o.book then remove(o, pl); put(o, s); p(translate_now(forest_locale, 'library_shelf_puzzle_used_book')); if #s.obj== 9 then for i = 1, 9 do if library_book_map[s.obj[i].book] ~= i then return; end; end; p(translate_now(forest_locale, 'library_shelf_puzzle_used_book_success')); disable 'library_shelves' enable 'library_hidden_path' walkout() end; else return false; end; end; }:with { obj { book = 1; nam = 'book_1'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=1}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=1}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 2; nam = 'book_2'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=2}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=2}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 3; nam = 'book_3'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=3}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=3}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 4; nam = 'book_4'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=4}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=4}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 5; nam = 'book_5'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=5}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=5}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 6; nam = 'book_6'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=6}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=6}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 7; nam = 'book_7'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=7}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=7}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 8; nam = 'book_8'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=8}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=8}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); }, obj { book = 9; nam = 'book_9'; disp = translate(forest_locale, 'library_shelf_book_disp', {number=9}); dsc = translate(forest_locale, 'library_shelf_book_dsc', {number=9}); tak = translate(forest_locale, 'library_shelf_book_tak'); inv = translate(forest_locale, 'library_shelf_book_inv'); } } } room { nam = 'library_hidden_room'; pic = 'images/library.png'; disp = translate(forest_locale, 'library_hidden_room'); theme = 'main'; nofollow = true; decor = translate(forest_locale, 'library_hidden_room_decor'); way = { path {translate(forest_locale, 'transition_to_main_hall'), 'library'}; }; }:with { obj { nam = '#table'; act = translate(forest_locale, 'library_hidden_room_table'); }; obj { oiled = false; opened = false; lock_taken = false; nam = 'box'; disp = translate(forest_locale, 'box_disp'); disp2 = translate(forest_locale, 'box_disp2'); disp3 = translate(forest_locale, 'box_disp3'); dsc = translate(forest_locale, 'box_dsc'); tak = translate(forest_locale, 'box_tak'); inv = function(s) seen_ring_box = true; if s.lock_taken then p(translate_now(forest_locale, 'box_inv_without_lock')); elseif s.opened then s.lock_taken = true; p(translate_now(forest_locale, 'box_inv_take_lock')); take('lock'); remove('box', pl); else p(translate_now(forest_locale, 'box_inv')); if seen_ring_librarian then p(translate_now(forest_locale, 'box_inv_known')); end; end; end; used = function(s, o) if o^'hidden_key' then if s.oiled then s.opened = true; take('map'); p(translate_now(forest_locale, 'box_used_key_success')); else p(translate_now(forest_locale, 'box_used_key_failed')); end; elseif o^'oil' then if not s.oiled then s.oiled = true; p(translate_now(forest_locale, 'box_used_key_oil')); else p(translate_now(forest_locale, 'box_used_key_oil2')); end; end; end; } } obj { nam = 'map'; disp = translate(forest_locale, 'map_disp'); disp2 = translate(forest_locale, 'map_disp2'); disp3 = translate(forest_locale, 'map_disp3'); inv = function(s) p(translate_now(forest_locale, 'map_inv')); _('fly_west_from_village'):enable(); end; } room { nam = 'inside_crater_glade'; pic = 'images/inside_crater_glade.png'; disp = translate(forest_locale, 'inside_crater_glade'); theme = 'main'; onenter = function(s) if here()^'above_crater' then p(translate_now(forest_locale, 'inside_crater_glade_on_enter')); end; end; decor = translate(forest_locale, 'inside_crater_glade_decor'); way = { path {translate(forest_locale, 'transition_fly'), "above_crater"}; path {translate(forest_locale, 'transition_along_the_path'), "inside_crater_path"}; } }: with { obj { nam = '#forest'; act = translate(forest_locale, 'inside_crater_glade_forest'); }; obj { nam = '#oak'; act = translate(forest_locale, 'inside_crater_glade_oak'); }; obj { nam = '#grass'; act = translate(forest_locale, 'inside_crater_glade_grass'); }; obj { nam = '#path'; act = translate(forest_locale, 'inside_crater_glade_path'); }; obj { nam = '#tower'; act = translate(forest_locale, 'inside_crater_glade_tower'); }; obj { nam = '#crater'; act = translate(forest_locale, 'inside_crater_glade_crater'); }; } room { nam = 'inside_crater_path'; pic = function(s) local p = 'images/inside_crater_path.png'; if here()^where('solarscale') then p = p .. ';images/characters/solarscale_on_rock.png'; end; return p; end; disp = translate(forest_locale, 'inside_crater_path'); theme = 'main'; decor = translate(forest_locale, 'inside_crater_path_decor'); exit = function(s, t) if t^'crater_near_tower' and seen('solarscale', s) then remove('solarscale', where('solarscale')); p(translate_now(forest_locale, 'inside_crater_path_exit')); end; end; way = { path {translate(forest_locale, 'transition_to_glade'), "inside_crater_glade"}; path {translate(forest_locale, 'transition_to_tower'), "crater_near_tower"}; }; }: with { obj { nam = '#grass'; act = translate(forest_locale, 'inside_crater_path_grass'); }; obj { nam = '#crater'; act = translate(forest_locale, 'inside_crater_path_crater') }; obj { nam = '#trees'; act = translate(forest_locale, 'inside_crater_path_trees') }; obj { nam = '#tower'; act = translate(forest_locale, 'inside_crater_path_tower') }; obj { nam = '#stump'; dsc = function(s) if seen('solarscale', here()) then p(translate_now(forest_locale, 'inside_crater_path_stump_solarscale')); else p(translate_now(forest_locale, 'inside_crater_path_stump')); end; end; act = translate(forest_locale, 'inside_crater_path_stump_act'); }; obj { nam = 'solarscale'; act = function(s) walkin('solarscale_dlg'); end; } } dlg { nam = 'solarscale_dlg'; disp = translate(solarscale_locale, 'disp'); theme = 'main'; pic = 'images/inside_crater_path.png;images/characters/solarscale.png'; enter = translate(solarscale_locale, 'first_dlg_enter'); phr = { {'#q1', translate(solarscale_locale, 'first_dlg_question_1'), translate(solarscale_locale, 'first_dlg_question_1_response')}; {'#q2', translate(solarscale_locale, 'first_dlg_question_2'), translate(solarscale_locale, 'first_dlg_question_2_response')}; {cond=function(s) return closed('#q2') end, translate(solarscale_locale, 'first_dlg_tower'), translate(solarscale_locale, 'first_dlg_tower_response')}; {cond=function(s) return closed('#q2'); end; translate(solarscale_locale, 'first_dlg_tower_join'), function(s) walkout(); solarscale_with_me = true; remove('solarscale', where('solarscale')); put('solarscale_ally', here()); lifeon(_'solarscale_ally'); return translate_now(solarscale_locale, 'first_dlg_tower_join_response'); end}; {function(s) if not closed('#q2') then return translate_now(solarscale_locale, 'first_dlg_tower_bye_no_time'); else return translate_now(solarscale_locale, 'first_dlg_tower_bye_thanks'); end; end, function(s) walkout(); remove('solarscale', where('solarscale')); return translate_now(solarscale_locale, 'first_dlg_tower_bye_response'); end}; }; } room { nam = 'crater_near_tower'; pic = 'images/crater_near_tower.png'; disp = translate(forest_locale, 'crater_near_tower'); theme = 'main'; decor = translate(forest_locale, 'crater_near_tower_decor'); enter = function(s) tower_seen = true; end; way = { path {translate(forest_locale, 'transition_along_the_path'), "inside_crater_path"}; path {translate(forest_locale, 'transition_inside_tower'), "tower_level_1"}; }; }:with { obj { nam = '#tower'; act = translate(forest_locale, 'crater_near_tower_tower'); }; obj { nam = '#grass'; act = translate(forest_locale, 'crater_near_tower_grass'); }; obj { nam = '#trees'; act = translate(forest_locale, 'crater_near_tower_trees'); }; obj { nam = '#sun'; act = translate(forest_locale, 'crater_near_tower_sun'); }; }