function look_pocketwatch(obj) printl("THE_TIME_IS") local am = true local hour = clock_get_hour() local minute = clock_get_minute() if hour >= 12 then am = false end if hour > 12 then hour = hour - 12 end local time = "TIME_AM" if am == false then time = "TIME_PM" end printfl(time, hour, minute) end function look_cannon(obj) if obj.quality ~= 0 then printl("THE_CANNON_WILL_FIRE_STEEL_CANNON_BALLS") end end function look_barrow(obj) if obj.qty == 0 then printl("IT_IS_EMPTY") return end local quality = obj.quality local material if quality == 1 then material = i18n("DIRT") elseif quality == 2 then material = i18n("ROCK") elseif quality == 3 then material = i18n("IRON_ORE") elseif quality == 4 then material = i18n("COAL") end if obj.qty == 1 then printfl("IT_HAS_1_LOAD_OF", material) else printfl("IT_HAS_N_LOADS_OF", obj.qty, material) end end function get_lat_long_string(x, y) local lat_str = "N" local long_str = "W" local lat = math.modf(((y - 512) * 240) / 1024) local long = math.modf(((x - 512) * 360) / 1024) if lat > 0 then lat_str = "S" else if lat == 0 then lat_str = " " end end if long == 180 or long == -180 or long == 0 then long_str = " " else if long < 0 then long_str = "E" end end lat = math.abs(lat) long = 180 - math.abs(long) return lat..lat_str.." "..long..long_str end function look_marker_flag(obj) local names = { [1]="Coprates Chasma", [2]="Arsia Mons", [3]="Pavonis Mons", [4]="Ascraeus Mons", [5]="Alber Tholus", [6]="Elysium Mons", [7]="Hecates Tholus", [8]="Terra Sirenum", [9]="Noctis Labyrinthus", [10]="Deuteronicus Mensae", [11]="Syrtis Major Planum", [12]="Olympus Mons", } if obj.z == 0 then if obj.quality <= 12 then if obj.quality ~= 0 then print(names[obj.quality]) print(" "..get_lat_long_string(obj.x,obj.y).."\n") end else printl("AARGH") end end end function look_broken_strap(obj) local spector = Actor.get(2) Actor.set_talk_flag(spector, 6) Actor.talk(spector) end function look_metal_woman(obj) if obj.quality ~= 0 then printl("IT_HAS_A_HEARTSTONE") end end function look_covered_martian_seed(obj) if obj.frame_n < 4 then local quality = obj.quality if quality == 15 then printl("IT_IS_GROWING") elseif quality == 16 then printl("IT_IS_RIPE") else printl("IT_IS_NOT_GROWING") end end end function look_sprayer_system(obj) local quality = obj.quality if bit32.btest(quality, 1) then local actor = Actor.get(0x3e) if Actor.get_talk_flag(actor, 5) == true then if bit32.btest(quality, 2) then printl("IT_IS_READY_TO_USE") else printl("THE_RUBBER_IN_THE_SPRAYER_SYSTEM_IS_NOT_FLESH_COLORED") end else printl("IT_IS_READY_TO_USE") end else printl("THERE_IS_NO_RUBBER_IN_THE_SPRAYER_SYSTEM") if Actor.get_talk_flag(actor, 5) == true and bit32.btest(quality, 2) == false then printl("IT_IS_ALSO_NOT_FLESH_COLORED") end end end function look_cabinet(obj) local quality = obj.quality if quality == 0 or quality > 7 then printl("YOU_CANNOT_DECIPHER_WHAT_IT_CONTROLS") else printl("CABINET_"..quality) end end function look_tracking_motor(obj) local quality = obj.quality if bit32.btest(quality, 1) and obj.on_map == true then printl("IT_APPEARS_TO_BE_LOOSE") end if bit32.btest(quality, 2) then printl("IT_APPEARS_TO_BE_BROKEN") end end function look_panel(obj) local qty = obj.qty if qty == 0 then local frame_n = obj.frame_n if frame_n == 0 then printl("THESE_APPEAR_TO_BE_MECHANICAL_CONTROLS") elseif frame_n == 1 then printl("THESE_APPEAR_TO_BE_VALVE_CONTROLS") elseif frame_n == 2 then printl("THESE_APPEAR_TO_BE_ELECTRICAL_CONTROLS") end elseif qty == 4 then printl("IT_APPEARS_TO_CONTROL_A_DREAM_MACHINE") elseif qty == 5 then printl("IT_APPEARS_TO_CONTROL_A_SPRAY_SYSTEM") elseif qty == 6 then printl("IT_APPEARS_TO_CONTROL_THE_RUBY_LENS_SYSTEM") elseif qty == 7 then printl("IT_APPEARS_TO_CONTROL_THE_CISTERN_VALVES") else printl("YOU_CANNOT_DECIPHER_ITS_PURPOSE") end local quality = obj.quality if bit32.btest(quality, 1) and obj.on_map == true then printl("THE_PANEL_IS_LOOSE") end if bit32.btest(quality, 2) then printl("THE_PANEL_IS_BROKEN") end end function print_number_of_charges(qty) if qty == 1 then printl("AND_HAS_1_CHARGE_LEFT") else printfl("AND_HAS_N_CHARGES_LEFT", qty) end end function look_portable_sprayer(obj) local contents if obj.quality == 0 then contents = tile_get_description(649) else contents = tile_get_description(640) end printfl("IT_IS_LOADED_WITH", contents) print_number_of_charges(obj.qty) end function get_weapon_mode_string(obj) local mode local quality = obj.quality if quality == 0 then mode = i18n("COMBINATION") elseif quality == 1 then mode = i18n("RIFLE") else mode = i18n("SHOTGUN") end return mode end function look_ray_gun(obj) printfl("IT_IS_SET_TO", get_weapon_mode_string(obj)) print_number_of_charges(obj.qty) end function look_belgian_combine(obj) printfl("IT_IS_SET_TO", get_weapon_mode_string(obj)) print(".\n") end function look_switch_bar(obj) local quality = obj.quality if quality == 1 then printl("IT_SEEMS_TO_BE_LOOSE") elseif quality == 2 then printl("IT_IS_NOT_INSTALLED") end end function look_light_source(obj) local obj_n = obj.obj_n local qty = obj.qty local quality = obj.quality if (obj_n == 109 or obj_n == 110) and qty > 1 then return end if quality > 30 then printl("PLENTY_OF") elseif quality > 6 and quality <= 30 then printfl("IT_HAS_N_MORE_MINUTES_OF", quality) elseif quality > 0 and quality <= 6 then printl("ITS_ALMOST_OUT_OF") elseif obj_n == 115 or obj_n == 117 or obj_n == 116 or obj_n == 118 then printl("NO") else printl("PLENTY_OF") end if obj_n == 115 or obj_n == 117 or obj_n == 116 or obj_n == 118 then printl("FUEL") else printl("WICK") end end function look_door(obj) local quality = obj.quality if quality >= 128 then quality = quality - 128 if quality >= 64 then printl("IT_IS_APPARENTLY_RUSTED_SHUT") else printl("IT_IS_APPARENTLY_LOCKED") end end end function look_obelisk(obj) if obj.quality == 0 then return end local ui_style = game_get_ui_style() canvas_show() canvas_hide_all_sprites() canvas_set_opacity(0xff); canvas_set_update_interval(25) canvas_rotate_game_palette(true) local obelisk = sprite_new(nil, 184, 0, true) local text_sprite --local text_sprite_bg if ui_style == UI_STYLE_ORIG then canvas_set_solid_bg(false) else text_sprite = sprite_new(nil, 8, 164, true) text_sprite.text_align = 2 text_sprite.text_color = 15 text_sprite.text = "Obelisk." obelisk.x = 96 obelisk.y = 41 end obelisk.image = image_load("mdream.lzc", obj.quality-1) local input = nil while input == nil do canvas_update() input = input_poll() if input ~= nil then break end end canvas_set_solid_bg(true) canvas_rotate_game_palette(false) canvas_hide() end local look_usecode = { [45]=look_belgian_combine, [91]=look_pocketwatch, [98]=look_pocketwatch, [109]=look_light_source, -- OBJ_TORCH [110]=look_light_source, -- OBJ_LIT_TORCH [111]=look_light_source, -- OBJ_CANDLESTICK [112]=look_light_source, -- OBJ_LIT_CANDLE [113]=look_light_source, -- OBJ_CANDELABRA [114]=look_light_source, -- OBJ_LIT_CANDELABRA [115]=look_light_source, -- OBJ_OIL_LAMP [116]=look_light_source, -- OBJ_LIT_OIL_LAMP [117]=look_light_source, -- OBJ_LANTERN [118]=look_light_source, -- OBJ_LIT_LANTERN [129]=look_portable_sprayer, --OBJ_WEED_SPRAYER [172]=look_marker_flag, [179]=look_door, --OBJ_CLOSED_DOOR [227]=look_door, --OBJ_DOOR3 [240]=look_ray_gun, --OBJ_HEAT_RAY_GUN [241]=look_ray_gun, --OBJ_FREEZE_RAY_GUN [251]=look_covered_martian_seed, [261]=look_portable_sprayer, --OBJ_SPRAY_GUN [268]=look_barrow, --OBJ_MARTIAN_WHEEL_BARROW [276]=look_sprayer_system, [287]=look_metal_woman, [292]=look_obelisk, [314]=look_tracking_motor, [333]=look_cannon, [410]=look_barrow, --OBJ_RAIL_CAR [411]=look_switch_bar, [457]=look_cabinet, [458]=look_panel, [460]=look_broken_strap, } function look_obj(obj) printfl("YOU_SEE", obj.look_string); --FIXME usecode look description should be lua code. if usecode_look(obj) then print("\n") return false end print(".\n\n"); if look_usecode[obj.obj_n] ~= nil then look_usecode[obj.obj_n](obj) print("\n") end if is_container_obj(obj.obj_n) then search(obj) end return false end