diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/supernova/NOTES | 35 | ||||
-rw-r--r-- | engines/supernova/console.cpp | 13 | ||||
-rw-r--r-- | engines/supernova/console.h | 6 | ||||
-rw-r--r-- | engines/supernova/detection.cpp | 9 | ||||
-rw-r--r-- | engines/supernova/graphics.cpp | 11 | ||||
-rw-r--r-- | engines/supernova/graphics.h | 24 | ||||
-rw-r--r-- | engines/supernova/msn_def.h | 365 | ||||
-rw-r--r-- | engines/supernova/rooms.h | 784 | ||||
-rw-r--r-- | engines/supernova/supernova.cpp | 89 | ||||
-rw-r--r-- | engines/supernova/supernova.h | 26 |
10 files changed, 1346 insertions, 16 deletions
diff --git a/engines/supernova/NOTES b/engines/supernova/NOTES new file mode 100644 index 0000000000..c207f53172 --- /dev/null +++ b/engines/supernova/NOTES @@ -0,0 +1,35 @@ +Audio +----------- + +There may be several sound effects in one file. +This list shows them and their offsets. + +46: + 0 - Voice "Halt!" + 2510 - + 4020 - + +47: + 0 - Voice "Mission Supernova" + 24010 - Voice "Yeaahh.." + +48: + 0 - + 2510 - + 10520 - electric shock + 13530 - (playing turntable) + +50: + 0 - + 12786 - + +51: + +53: Death sound + +54: + 0 - Alarm + 8010 - + 24020 - Door sound + 30030 - Door open + 31040 - Door close diff --git a/engines/supernova/console.cpp b/engines/supernova/console.cpp index 6a6edfbd04..7ad9c0a2b6 100644 --- a/engines/supernova/console.cpp +++ b/engines/supernova/console.cpp @@ -29,7 +29,18 @@ namespace Supernova { Console::Console(SupernovaEngine *vm) { - //registerCmd(); + registerCmd("test", WRAP_METHOD(Console, cmdTest)); +} + +bool Console::cmdTest(int argc, const char **argv) +{ + if (argc == 2) { + debugPrintf("Success!"); + return true; + } else { + debugPrintf("Failure!"); + return false; + } } } diff --git a/engines/supernova/console.h b/engines/supernova/console.h index 2b2ed2ddfe..89e8a1c2bc 100644 --- a/engines/supernova/console.h +++ b/engines/supernova/console.h @@ -35,8 +35,12 @@ enum { class Console : public GUI::Debugger { public: - Console(SupernovaEngine *vm); + Console(Supernova::SupernovaEngine *vm); virtual ~Console() {} + + bool cmdTest(int argc, const char **argv); +private: + SupernovaEngine *_vm; }; } diff --git a/engines/supernova/detection.cpp b/engines/supernova/detection.cpp index c62adcf8ad..e896ae6ad0 100644 --- a/engines/supernova/detection.cpp +++ b/engines/supernova/detection.cpp @@ -63,7 +63,7 @@ static const ADGameDescription gameDescriptions[] = { class SupernovaMetaEngine: public AdvancedMetaEngine { public: SupernovaMetaEngine() : AdvancedMetaEngine(Supernova::gameDescriptions, sizeof(ADGameDescription), supernovaGames) { - _singleId = "supernova"; +// _singleId = "supernova"; } virtual const char *getName() const { @@ -84,8 +84,11 @@ bool SupernovaMetaEngine::hasFeature(MetaEngineFeature f) const { } bool SupernovaMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const { - // STUB - return false; + if (desc) { + *engine = new Supernova::SupernovaEngine(syst); + } + + return desc != NULL; } #if PLUGIN_ENABLED_DYNAMIC(SUPERNOVA) diff --git a/engines/supernova/graphics.cpp b/engines/supernova/graphics.cpp new file mode 100644 index 0000000000..1daa94b42d --- /dev/null +++ b/engines/supernova/graphics.cpp @@ -0,0 +1,11 @@ +#include "graphics.h" + +MSNImageDecoder::MSNImageDecoder() +{ + +} + +MSNImageDecoder::~MSNImageDecoder() +{ + +} diff --git a/engines/supernova/graphics.h b/engines/supernova/graphics.h new file mode 100644 index 0000000000..2717350ce0 --- /dev/null +++ b/engines/supernova/graphics.h @@ -0,0 +1,24 @@ +#ifndef GRAPHICS_H +#define GRAPHICS_H + +#include "common/stream.h" +#include "image/image_decoder.h" +#include "graphics/surface.h" + +class MSNImageDecoder : public Image::ImageDecoder +{ +public: + MSNImageDecoder(); + virtual ~MSNImageDecoder(); + + virtual void destroy(); + virtual bool loadStream(Common::SeekableReadStream &stream); + virtual const Graphics::Surface *getSurface() const { return _surface; } + virtual const byte *getPalette() const { return _palette; } + +private: + const Graphics::Surface *_surface; + byte *_palette; +}; + +#endif diff --git a/engines/supernova/msn_def.h b/engines/supernova/msn_def.h new file mode 100644 index 0000000000..b8e20b1e14 --- /dev/null +++ b/engines/supernova/msn_def.h @@ -0,0 +1,365 @@ +#ifndef MSN_DEF_H +#define MSN_DEF_H + +namespace Supernova { + +struct obj_struct +{ + char *name,*description,id; + int type; + char click,click2,section; + char exitroom,direction; +}; + +/* msn.c */ +void overlay(int value); +void overlay_init(char *text); +void wait2(int time); +void set_color63(char x); +void fadeout2(); +void fadein2(); +void init_roomlist(); +void anim_on(); +void anim_off(); +char *ltoa(long l); +void test_vga(); +void test_mouse(); +void setmode(char m); +void calculate_palette(); +void palette(); +void palette_5(); +void palette_blend(); +void fadeout(); +void fadein(); +void title_fadein(); +void palette_off(); +void screen_shake(); +void crit_err(); +void init_buffer(); +void get_inf(int seg); +void move(int ziel_seg, int quell_seg, int chunks_16bit); +void disp_puffer(long adr, int ziel, int anz); +void load(char *name); +void getspace(int para); +void load_disk(char *name); +void error_loading(char *name); +void load_sound(char *name); +void load_sound_disk(char *name); +void image(char nr); +void image_remove(char nr); +char invert(char nr); +void show_current_section(); +void text(char *t); +void textxy(int x, int y, char *t, char f); +int width(char *t); +void set_int(); +void restore_int(); +void wait1(int time); +void box(int x, int y, int b, int h, char f); +void hgr_save(int x, int y, int w, int h); +void hgr_restore(int x, int y, int w, int h); +void message(char *text); +void message_p(int pos, char *text); +void message_remove(); +void init_menu(); +void command_box(int bef, bool hell); +void show_menu(); +void exits(); +void mouse_reset(); +void hourglass(); +void arrow(); +void mouse_on(); +void mouse_off(); +void install_event_handler(); +void mouse_input(); +void mouse_input2(); +void mouse_input3(); +void mouse_wait(int time); +void sentence(int nr, bool hell); +void sentence_remove(int sentence, int nr); +void sentence_add(int sentence, int nr); +int dialog(int num, char *rowlength[6], char **text[6], int nr); +void mouse_pos_dialog(int x, int y); +void say(char *t); +void reply(char *t, int aus1, int aus2); +int command_print(); +void mouse_pos(int x, int y); +void maus_pos_weg(); +void mouse_right(); +void input(); +void inventory_object(int nr, bool brightness); +void empty_object(int nr); +void inventory_arrow(int nr, bool brightness); +void show_inventory(); +void take(struct obj_struct *obj); +void inventory_remove(struct obj_struct *obj); +void inventory_remove2(struct obj_struct *obj); +void scroll_up(); +void scroll_down(); +void inventory_seize(); +void insert(char *text, char *character); +void edit(int x, int y, char *t, int length); +bool filecopy(int ziel, int quelle); +void error_temp(); +bool save_game(int nr); +bool load_game(int nr); +void load_overlay(); +void load_overlay_start(); +void load_save(bool speichern, bool abbruch); +void text_up(); +void text_down(); +void list(char *name, bool bestell); +void help(); +void settextspeed(); +void altx(); +bool room_execute(); +char bios_key(); +char number_read(char min, char max, char standard); +void do_setup(); +void main(int argc, char *argv[]); +/* msn_mod.c */ +void init_mod(); +void rechne_note(); +void set_pattern(int p); +void play_sb(); +void play_pc(); +void start_pc_mod(); +void titel_schrift(); +void nur_text(); +/* msn_ovl1.c */ +/* msn_r0.c */ +long systime(); +char *time_tostring(long z); +void save_time(); +void load_time(); +void load_door(); +void door_sound(); +int door_open(); +int door_close(); +void money_take(int amount); +bool combine(struct obj_struct *obj1, struct obj_struct *obj2, int o1, int o2); +void ok(); +bool airless(); +bool helmet_takeoff(); +bool generic_specialcmd(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void shock(); +void alarm(); +void alarm_hearing(); +void outro(); +void dim(int color); +void room_brightness(); +void turnon(); +void turnoff(); +void great(int nr); +void init_rooms(); +void set_section(int room, int section, bool on); +/* msn_r1.c */ +bool sb_corridor(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_hall(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_sleep(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void anim_sleep(); +void once_sleep(); +bool sb_cockpit(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void anim_cockpit(); +bool sb_airlock(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_hold(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_landingmod(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_generator(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void open_locker(struct obj_struct *obj, struct obj_struct *lock, int section); +void close_locker(struct obj_struct *obj, struct obj_struct *lock, int section); +bool sb_cabin_r3(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_cabin_l3(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_cabin_l2(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_bathroom(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void once_cockpit(); +void once_airlock(); +void once_hold(); +/* msn_r1_r.c */ +/* msn_r2.c */ +bool sb_rocks(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void once_rocks(); +bool sb_meetup(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void once_meetup(); +void anim_meetup(); +bool sb_entrance(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void anim_entrance(); +void anim_remaining(); +void shipstart(); +void nova_scroll(); +void supernova(); +bool sb_roger(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void anim_roger(); +void once_roger(); +bool sb_glider(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void anim_glider(); +bool sb_meetup2(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void once_meetup2(); +bool sb_meetup3(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +/* msn_r3.c */ +bool sb_cell(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void anim_cell(); +void once_cell(); +bool sb_corridor4(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void once_corridor(); +void once_corridor4(); +bool sb_corridor5(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_corridor6(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_corridor8(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_corridor9(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void shot(int a, int b); +void guard_shot(); +bool sb_guard(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void guard3_shot(); +bool sb_guard3(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_bgang(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void once_bgang(); +bool sb_office1(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_office2(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_office3(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_office4(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_office5(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void once_office5(); +void walk(int a); +void guard_walk(); +void telomat(int nr); +void search_start(); +void search(int time); +void guard_noticed(); +void busted(int i); +void guard_back(); +bool sb_elevator(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +bool sb_station(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +void taxi(); +bool sb_sign(int verb, struct obj_struct *obj1, struct obj_struct *obj2); +/* msn_s.c */ +void talk(int a1, int a2, int time_remain, int pos, char *t); +void talkf(int a1, int a2, int dauer); +void talk2(int a1, int a2, int b1, int b2, int duration, int pos, char *t); +void title_image(); +void sirene(); +void intro(); +/* msn_snd.c */ +void play_sb_sample(int address); +void wait_soundblaster(); +void call_driver(); +void init_soundblaster(); +void deinit_soundblaster(); +void stop(); +bool keypressed(); +void pc_sound_on(int int8, int int9, char speed); +void pc_sound_off(); +void play_pc_sample(int adr); +void init_sound_tab(bool mod); +void init_sound(); +void deinit_sound(); +void play_music(bool kurz); +void play(int adr); +void sound_on(); +void sound(int counter); +void sound_off(); + + +#define MAX_SECTION 40 +#define MAX_SECTION_ZUS 50 +#define MAX_CLICKFIELD_ZUS 80 +#define MAX_OBJECT 25 +#define MAX_CARRY 30 + +#define ROOMNUM0 1 +#define ROOMNUM1 16 +#define ROOMNUM2 9 +#define ROOMNUM3 21 + +#define NIL 0 + +struct room +{ + char *file; + bool shown[MAX_SECTION]; + bool (*specialcmd)(); + void (*animation)(); + void (*onEntrance)(); + struct obj_struct object[MAX_OBJECT]; +}; + +/* object type */ +#define TAKE 1 +#define OPEN 2 +#define OPENED 4 +#define CLOSED 8 +#define EXIT 16 +#define PRESS 32 +#define COMBINABLE 64 +#define CARRIED 128 +#define UNNECESSARY 256 +#define WORN 512 +#define TALK 1024 +#define OCCUPIED 2048 +#define CAUGHT 4096 + +enum {ACTION_WALK, + ACTION_LOOK, + ACTION_TAKE, + ACTION_OPEN, + ACTION_CLOSE, + ACTION_PRESS, + ACTION_PULL, + ACTION_USE, + ACTION_TALK, + ACTION_GIVE}; + +enum {INTRO,CORRIDOR,HALL,SLEEP,COCKPIT,AIRLOCK, + HOLD,LANDINGMODULE,GENERATOR,OUTSIDE, + CABIN_R1,CABIN_R2,CABIN_R3,CABIN_L1,CABIN_L3,CABIN_L2,BATHROOM, + + ROCKS,CAVE,MEETUP,ENTRANCE,REST,ROGER,GLIDER,MEETUP2,MEETUP3, + + CELL,CORRIDOR1,CORRIDOR2,CORRIDOR3,CORRIDOR4,CORRIDOR5,CORRIDOR6,CORRIDOR7,CORRIDOR8,CORRIDOR9, + BCORRIDOR,GUARD,GUARD3,OFFICE_L1,OFFICE_L2,OFFICE_R1,OFFICE_R2,OFFICE_L, + ELEVATOR,STATION,SIGN}; + +enum {X, + KEYCARD,KNIFE,WATCH, + SOCKET, + BUTTON,HATCH1, + BUTTON1,BUTTON2,MANOMETER,SUIT,HELMET,LIFESUPPORT, + SCRAP_LK,OUTERHATCH_TOP,GENERATOR_TOP,TERMINALSTRIP,LANDINGMOD_OUTERHATCH, + HOLD_WIRE, + LANDINGMOD_BUTTON,LANDINGMOD_SOCKET,LANDINGMOD_WIRE,LANDINGMOD_HATCH,LANDINGMOD_MONITOR, + KEYBOARD, + KEYCARD2,OUTERHATCH,GENERATOR_WIRE,TRAP,SHORT_WIRE,CLIP, + VOLTMETER,LADDER,GENERATOR_ROPE, + KITCHEN_HATCH,SLEEP_SLOT, + MONITOR,INSTRUMENTS, + COMPUTER,CABINS,CABIN, + SLOT_K1,SLOT_K2,SLOT_K3,SLOT_K4, + SHELF1,SHELF2,SHELF3,SHELF4, + ROPE,BOOK,DISCMAN,CHESS, + SLOT_KL1,SLOT_KL2,SLOT_KL3,SLOT_KL4, + SHELF_L1,SHELF_L2,SHELF_L3,SHELF_L4, + PISTOL,BOOK2,SPOOL, + RECORD,TURNTABLE,TURNTABLE_BUTTON,WIRE,WIRE2,PLUG, + PEN, + BATHROOM_DOOR,BATHROOM_EXIT,SHOWER,TOILET, + + STONE, + SPACESHIPS,SPACESHIP,STAR,DOOR,MEETUP_SIGN, + PORTER,BATHROOM_BUTTON,BATHROOM_SIGN,KITCHEN_SIGN,CAR_SLOT, + ARS_BATHROOM,COINS,SCHNUCK,EGG,PILL,PILL_HULL,STAIRCASE, + MEETUP_EXIT, + ROGER_W,WALLET,KEYCARD_R,CUP, + GLIDER_BUTTON1,GLIDER_BUTTON2,GLIDER_BUTTON3,GLIDER_BUTTON4,GLIDER_SLOT,GLIDER_BUTTONS, + GLIDER_DISPLAY,GLIDER_INSTRUMENTS,GLIDER_KEYCARD, + UFO, + + CELL_BUTTON,CELL_TABLE,CELL_WIRE,TRAY,CELL_DOOR,MAGNET, + NEWSPAPER,TABLE, + PILLAR1,PILLAR2,DOOR1,DOOR2,DOOR3,DOOR4, + GUARDIAN,LAMP, + MASTERKEYCARD,PAINTING,MONEY,LOCKER,LETTER, + JUNGLE,SLOT,STATION_SIGN, + + TICKETS}; + +} +#endif // MSN_DEF_H diff --git a/engines/supernova/rooms.h b/engines/supernova/rooms.h new file mode 100644 index 0000000000..cbae30a478 --- /dev/null +++ b/engines/supernova/rooms.h @@ -0,0 +1,784 @@ +#ifndef ROOMS_H +#define ROOMS_H + +#include "msn_def.h" + +namespace Supernova { +/* --- ROOM 0 ----------------------------------- */ + +room roomlist0[ROOMNUM0] = +{ + { + "",{0},NIL,NIL,NIL, + { + {"Keycard","Die Keycard f�r deine Schr�nke.",KEYCARD, + TAKE+CARRIED+COMBINABLE,255,255,0}, + {"Taschenmesser","Es ist nicht mehr das sch�rfste.",KNIFE, + TAKE+CARRIED+COMBINABLE,255,255,0}, + {"Armbanduhr",&description,WATCH,TAKE+COMBINABLE+CARRIED,255,255,8}, + {"Discman","Es ist eine \"Mad Monkeys\"-CD darin.", + DISCMAN,TAKE+COMBINABLE,255,255,0} + } + } +}; + + +room roomlist1[ROOMNUM1] = +{ +/* --- Spaceship --- */ + + { + "017",{1,0,0,0,1},&sb_corridor,NIL,NIL, + { + {"Luke",&description,HATCH1,OPEN+EXIT,0,6,1,CABIN_L1,15}, + {"Luke",&description,0,OPEN+EXIT,1,7,2,CABIN_L2,10}, + {"Luke",&description,0,OPEN+EXIT,2,8,3,CABIN_L3,5}, + {"Luke",&description,0,OPEN+EXIT+OPENED,9,3,4,CABIN_R3,9}, + {"Luke",&description,0,OPEN+EXIT,4,10,5,CABIN_R2,14}, + {"Luke",&description,0,OPEN+EXIT,5,11,6,CABIN_R1,19}, + {"Luke",&description,0,OPEN+CLOSED+EXIT,12,12,0,AIRLOCK,2}, + {"Knopf","Er geh�rt zu der gro�en Luke.",BUTTON,PRESS,13,13,0}, + {"Leiter",&description,0,0,14,14,0}, + {"Ausgang",&description,0,EXIT,15,15,0,HALL,22} + } + }, + { + "015",{1},&sb_hall,NIL,NIL, + { + {"Luke","Sie f�hrt ins Cockpit.",0,OPEN+EXIT,4,5,1,COCKPIT,10}, + {"Luke","Sie f�hrt zur K�che.",KITCHEN_HATCH, + OPEN+EXIT,0,0,0,NIL,1}, + {"Luke","Sie f�hrt zu den Tiefschlafkammern.",0, + OPEN+CLOSED+EXIT,1,1,2,SLEEP,8}, + {"Schlitz","Es ist ein Keycard-Leser.",SLEEP_SLOT,COMBINABLE,2,2,0}, + {"Leiter",&description,0,0,3,3,0}, + {"Gang",&description,0,EXIT,6,6,0,CORRIDOR,19} + } + }, + { + "033",{1},&sb_sleep,&anim_sleep,&once_sleep, + { + {"Luke","Dies ist eine der Tiefschlafkammern.",CABINS,0,0,0,0}, + {"Luke","Dies ist eine der Tiefschlafkammern.",CABIN,0,1,1,0}, + {"Computer",&description,COMPUTER,0,2,2,0}, + {"Ausgang",&description,0,EXIT,255,255,0,HALL,22} + } + }, + { + "009",{1},&sb_cockpit,&anim_cockpit,&once_cockpit, + { + {"Instrumente","Hmm, sieht ziemlich kompliziert aus.", + INSTRUMENTS,0,2,2,0}, + {"Monitor",&description,MONITOR,0,0,0,0}, + {"Monitor","Dieser Monitor sagt dir nichts.",0,1,1,0}, + {"Ausgang",&description,0,EXIT,255,255,0,HALL,22} + } + }, + { + "034",{1,0,0,0,0,0,1},&sb_airlock,NIL,&once_airlock, + { + {"Luke","Das ist eine Luke !!!",0, + EXIT+OPEN+OPENED+CLOSED,0,0,0,CORRIDOR,10}, + {"Luke","Dies ist eine Luke !!!",0, + EXIT+OPEN+CLOSED,1,1,0,HOLD,14}, + {"Knopf",&description,BUTTON1,PRESS,2,2,0}, + {"Knopf",&description,BUTTON2,PRESS,3,3,0}, + {"Helm","Es ist der Helm zum Raumanzug.",HELMET,TAKE,4,4,7}, + {"Raumanzug","Der einzige Raumanzug, den die|anderen hiergelassen haben ...", + SUIT,TAKE,5,5,8}, + {"Versorgung","Es ist der Versorgungsteil zum Raumanzug.", + LIFESUPPORT,TAKE,6,6,9}, + {"Druckmesser",&description,MANOMETER,0,7,7,0} + } + }, + { + "024",{1},&sb_hold,NIL,&once_hold, + { + {"",&description,HOLD_WIRE,COMBINABLE,255,255,0}, + {"Schrott","Da ist eine L�sterklemme dran, die|noch ganz brauchbar aussieht.|Ich nehme sie mit.", + SCRAP_LK,0,4,4,0}, + {"L�sterklemme",&description,TERMINALSTRIP,COMBINABLE,255,255,0}, + {"Schrott","Junge, Junge! Die Explosion hat ein|ganz sch�nes Durcheinander angerichtet.", + 0,0,5,5,0}, + {"Reaktor","Das war einmal der Reaktor.",0,0,6,6,0}, + {"D�se",&description,0,0,7,7,0}, + {"blauer K�rbis","Keine Ahnung, was das ist.",0,0,8,8,0}, + {"Luke",&description,LANDINGMOD_OUTERHATCH,EXIT+OPEN,1,2,2,LANDINGMODULE,6}, + {"Landef�hre","Sie war eigentlich f�r Bodenuntersuchungen|auf Arsano 3 gedacht.", + 0,0,0,0,0}, + {"Ausgang",&description,0,EXIT,255,255,0,AIRLOCK,22}, + {"Luke","Sie f�hrt nach drau�en.", + OUTERHATCH_TOP,EXIT+OPEN+OPENED,3,3,0,GENERATOR,8}, + {"Generator","Er versorgt das Raumschiff mit Strom.", + GENERATOR_TOP,EXIT,12,12,0,GENERATOR,8} + } + }, + { + "025",{1},&sb_landingmod,NIL,NIL, + { + {"Steckdose",&description,LANDINGMOD_SOCKET,COMBINABLE,1,1,0}, + {"Knopf","Es ist ein Sicherheitsknopf.|Er kann nur mit einem spitzen|Gegenstand gedr�ckt werden.", + LANDINGMOD_BUTTON,PRESS+COMBINABLE,2,2,0}, + {"Monitor",&description,LANDINGMOD_MONITOR,0,3,3,0}, + {"Tastatur",&description,KEYBOARD,0,4,4,0}, + {"",&description,LANDINGMOD_WIRE,COMBINABLE,255,255,0}, + {"Luke",&description,LANDINGMOD_HATCH,EXIT+OPEN+OPENED+COMBINABLE, + 0,0,1+128,HOLD,10} + } + }, + { + "018",{1,0,0,0,0,1},&sb_generator,NIL,NIL, + { + {"langes Kabel mit Stecker",&description,GENERATOR_WIRE,COMBINABLE,255,255,0}, + {"leere Kabelrolle",&description,0,UNNECESSARY,255,255,0}, + {"Keycard","Hey, das ist die Keycard des Commanders!|Er mu� sie bei dem �berst�rzten|Aufbruch verloren haben.", + KEYCARD2,COMBINABLE+TAKE,12,12,5+128}, + {"Seil",&description,GENERATOR_ROPE,COMBINABLE,255,255,0}, + {"Luke","Sie f�hrt nach drau�en.", + OUTERHATCH,EXIT+OPEN,1,2,1,OUTSIDE,22}, + {"Luke",&description,0,OPEN+CLOSED,3,3,0}, + {"Schlitz","Es ist ein Keycard-Leser.",0,COMBINABLE,4,4,0}, + {"Klappe",&description,TRAP,OPEN,5,6,2}, + {"Leitung",&description,0,0,7,7,0}, + {"Spannungmessger�t",&description,VOLTMETER,0,9,9,0}, + {"Klemme",&description,CLIP,COMBINABLE,8,8,0}, + {"Leitung","Sie f�hrt vom Generator zum Spannungmessger�t.", + SHORT_WIRE,COMBINABLE,10,10,0}, + {"Leiter",&description,LADDER,EXIT,0,0,0,HOLD,1} + } + }, + { + "004",{1},NIL,NIL,NIL, + { + {"Luke",&description,0,EXIT,0,0,0,GENERATOR,3}, + {"Seil",&description,0,UNNECESSARY,255,255,0} + } + }, + { + "022",{1,1,1},NIL,NIL,NIL, + { + {"Bild","Manche Leute haben schon|einen komischen Geschmack.",0, + UNNECESSARY,5,5,0}, + {"Zeichenger�te", + "Auf dem Zettel sind lauter|unverst�ndliche Skizzen und Berechnungen.|(Jedenfalls f�r dich unverst�ndlich.)", + 0,UNNECESSARY,6,6,0}, + {"Magnete","Damit werden Sachen auf|dem Tisch festgehalten.",0, + UNNECESSARY,7,7,0}, + {"Luke",&description,0,OPEN+OPENED+EXIT,3,3,15+128,CORRIDOR,5}, + {"Schlitz","Es ist ein Keycard-Leser.",0,COMBINABLE,0,0,0}, + {"Schrank",&description,0,OPEN+CLOSED,1,1,0}, + {"Fach",&description,0,OPEN+CLOSED,2,2,0}, + {"Steckdose",&description,SOCKET,COMBINABLE,4,4,0}, + {"Toilette",&description,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22} + } + }, + { + "022",{1,0,0,1,1,1},NIL,NIL,NIL, + { + {"Schachspiel","Es macht wohl Spa�, an|der Decke Schach zu spielen.", + 0,UNNECESSARY,11,11,0}, + {"Tennisschl�ger","Fliegt Boris Becker auch mit?",0,UNNECESSARY,8,8,0}, + {"Tennisball","Toll!",0,UNNECESSARY,9,9,0}, + {"Luke",&description,0,OPEN+OPENED+EXIT,3,3,15+128,CORRIDOR,5}, + {"Schlitz","Es ist ein Keycard-Leser.",0,COMBINABLE,0,0,0}, + {"Schrank",&description,0,OPEN+CLOSED,1,1,0}, + {"Fach",&description,0,OPEN+CLOSED,2,2,0}, + {"Steckdose",&description,SOCKET,COMBINABLE,4,4,0}, + {"Toilette",&description,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22} + } + }, + { + "022",{1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1},&sb_cabin_r3,NIL,NIL, + { + {"Schachspiel","Dein Magnetschachspiel. Schach war|schon immer deine Leidenschaft.", + CHESS,TAKE+COMBINABLE,12,12,7+128}, + {"Bett","Das ist dein Bett. Toll, nicht wahr?",0,0,13,13,0}, + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_K1,COMBINABLE,27,27,0}, + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_K2,COMBINABLE,28,28,0}, + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_K3,COMBINABLE,29,29,0}, + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_K4,COMBINABLE,30,30,0}, + {"Fach","Das ist eins deiner drei F�cher.",SHELF1, + OPEN+CLOSED,14,18,9}, + {"Alben","Deine Briefmarkensammlung.",0,UNNECESSARY,14,14,0}, + {"Fach","Das ist eins deiner drei F�cher.",SHELF2, + OPEN+CLOSED,15,19,10}, + {"Seil","Es ist ungef�hr 10 m lang und 4 cm dick.",ROPE, + TAKE+COMBINABLE,15,15,12}, + {"Schrank","Das ist dein Schrank.",SHELF3,OPEN+CLOSED,16,17,11}, + {"Krimskram","Es ist nichts brauchbares dabei.",0,UNNECESSARY,20,20,0}, + {"Kleider","Es sind Standard-Weltraum-Klamotten.",0,UNNECESSARY,21,21,0}, + {"Unterw�sche",&description,0,UNNECESSARY,22,22,0}, + {"Str�mpfe",&description,0,UNNECESSARY,23,23,0}, + {"Fach","Das ist eins deiner drei F�cher.",SHELF4, + OPEN+CLOSED,24,25,13}, + {"Buch","Es ist|\"Per Anhalter durch die Galaxis\"|von Douglas Adams.", + BOOK,TAKE,26,26,14}, + {"Discman","Es ist eine \"Mad Monkeys\"-CD darin.", + DISCMAN,TAKE+COMBINABLE,33,33,16}, + {"Luke",&description,0,OPEN+EXIT,3,3,15+128,CORRIDOR,5}, + {"Schlitz","Es ist ein Keycard-Leser.",0,COMBINABLE,0,0,0}, + {"Schrank",&description,0,OPEN+CLOSED,1,1,0}, + {"Fach",&description,0,OPEN+CLOSED,2,2,0}, + {"Steckdose",&description,SOCKET,COMBINABLE,4,4,0}, + {"Toilette",&description,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22} + } + }, + { + "021",{1,1,1,1,1,1},NIL,NIL,NIL, + { + {"Bild","Herb!",0,UNNECESSARY,5,5,0}, + {"Bild","Toll!",0,UNNECESSARY,6,6,0}, + {"Bild","Genial!",0,UNNECESSARY,7,7,0}, + {"Magnete","Damit werden Sachen auf|dem Tisch festgehalten.",0, + UNNECESSARY,8,8,0}, + {"Bild","Es scheint noch nicht fertig zu sein.",0,UNNECESSARY,9,9,0}, + {"Stift","Ein Kugelschreiber.",PEN,TAKE+COMBINABLE,10,10,5+128}, + {"Luke",&description,0,OPEN+OPENED+EXIT,3,3,24+128,CORRIDOR,9}, + {"Schlitz","Es ist ein Keycard-Leser.",0,COMBINABLE,0,0,0}, + {"Schrank",&description,0,OPEN+CLOSED,1,1,0}, + {"Fach",&description,0,OPEN+CLOSED,2,2,0}, + {"Steckdose",&description,SOCKET,COMBINABLE,4,4,0}, + {"Toilette",&description,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22} + } + }, + { + "021",{1,0,0,0,0,0,1,1,1,1,0,0,1},&sb_cabin_l3,NIL,NIL, + { + {"Poster","Ein Poster von \"Big Boss\".",0,UNNECESSARY,11,11,0}, + {"Poster","Ein Poster von \"Rock Desaster\".",0,UNNECESSARY,12,12,0}, + {"Box",&description,0,0,13,13,0}, + {"Magnete","Damit werden Sachen auf|dem Tisch festgehalten.",0, + UNNECESSARY,14,14,0}, + {"Schallplatte","Die Platte ist von \"Big Boss\".", + RECORD,TAKE+COMBINABLE,15,15,8+128}, + {"Schallplattenst�nder","Du hast jetzt keine Zeit, in|der Plattensammlung rumzust�bern.", + 0,UNNECESSARY,16,16,0}, + {"Knopf",&description,TURNTABLE_BUTTON,PRESS,22,22,0}, + {"Plattenspieler","Sieht aus, als k�me|er aus dem Museum.", + TURNTABLE,UNNECESSARY+COMBINABLE,17,17,0}, + {"Leitung",&description,WIRE,COMBINABLE,18,18,0}, + {"Leitung",&description,WIRE2,COMBINABLE,19,19,0}, + {"Stecker",&description,PLUG,COMBINABLE,20,20,0}, + {"Luke",&description,0,OPEN+OPENED+EXIT,3,3,24+128,CORRIDOR,9}, + {"Schlitz","Es ist ein Keycard-Leser.",0,COMBINABLE,0,0,0}, + {"Schrank",&description,0,OPEN+CLOSED,1,1,0}, + {"Fach",&description,0,OPEN+CLOSED,2,2,0}, + {"Steckdose",&description,SOCKET,COMBINABLE,4,4,0}, + {"Toilette",&description,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22} + } + }, + { + "021",{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},&sb_cabin_l2,NIL,NIL, + { + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_KL1,COMBINABLE,31,31,0}, + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_KL2,COMBINABLE,32,32,0}, + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_KL3,COMBINABLE,33,33,0}, + {"Schlitz","Es ist ein Keycard-Leser.",SLOT_KL4,COMBINABLE,45,45,0}, + {"Schrank",&description,SHELF_L1,OPEN+CLOSED,25,26,17}, + {"Pistole","Es ist keine Munition drin.",PISTOL,TAKE,39,39,20}, + {"Fach",&description,SHELF_L2,OPEN+CLOSED,27,28,18}, + {"B�cher","Lauter wissenschaftliche B�cher.",0,UNNECESSARY,40,40,0}, + {"Fach",&description,SHELF_L3,OPEN+CLOSED,29,30,19}, + {"Kabelrolle","Da sind mindestens zwanzig Meter drauf.", + SPOOL,TAKE+COMBINABLE,41,41,21}, + {"Fach",&description,SHELF_L4,OPEN+CLOSED,43,44,22}, + {"Buch",&description,BOOK2,TAKE,46,46,23}, + {"Unterw�sche","Ich habe keine Lust, in|der Unterw�sche des|Commanders rumzuw�hlen.", + 0,UNNECESSARY,34,34,0}, + {"Unterw�sche","Ich habe keine Lust, in|der Unterw�sche des|Commanders rumzuw�hlen.", + 0,UNNECESSARY,35,35,0}, + {"Kleider",&description,0,UNNECESSARY,36,36,0}, + {"Krimskram","Es ist nichts brauchbares dabei.",0,UNNECESSARY,37,37,0}, + {"Krimskram","Es ist nichts brauchbares dabei.",0,UNNECESSARY,38,38,0}, + {"Magnete","Damit werden Sachen auf|dem Tisch festgehalten.",0, + UNNECESSARY,23,23,0}, + {"Toilette",&description,BATHROOM_DOOR,EXIT,255,255,0,BATHROOM,22}, + {"Luke",&description,0,OPEN+OPENED+EXIT,3,3,24+128,CORRIDOR,9}, + {"Schlitz","Es ist ein Keycard-Leser.",0,COMBINABLE,0,0,0}, + {"Schrank",&description,0,OPEN+CLOSED,1,1,0}, + {"Fach",&description,0,OPEN+CLOSED,2,2,0}, + {"Steckdose",&description,SOCKET,COMBINABLE,4,4,0}, + {"Ordner","Darauf steht \"Dienstanweisungen|zur Mission Supernova\".|Es steht nichts wichtiges drin.", + 0,UNNECESSARY,49,49,0} + } + }, + { + "023",{1},&sb_bathroom,NIL,NIL, + { + {"Klo","Ein Klo mit Saugmechanismus.",TOILET,0,0,0,0}, + {"Dusche",&description,SHOWER,0,1,1,0}, + {"Ausgang",&description,BATHROOM_EXIT,EXIT,255,255,0,0,22} + } + } +}; + + +/* --- Rooms ------------------------------------ */ + +room roomlist2[ROOMNUM2] = +{ + +/* --- Arsano --- */ + + { + "012",{1},&sb_rocks,NIL,&once_rocks, + { + {"Seil",&description,0,UNNECESSARY+EXIT,0,0,0,GENERATOR,12}, + {"Stein",&description,STONE,0,1,1,0}, + {"Stein",&description,0,0,2,2,0}, + {"Loch","Es scheint eine H�hle zu sein.",0,0,255,255,0,CAVE,1} + } + }, + { + "012",{0},NIL,NIL,NIL, + { + {"Ausgang","Hier bist du gerade hergekommen.", + 0,EXIT,255,255,0,ROCKS,22}, + {"Ausgang",&description,0,EXIT,255,255,0,MEETUP,2} + } + }, + { + "037",{1},&sb_meetup,&anim_meetup,&once_meetup, + { + {"H�hle",&description,0,EXIT,255,255,0,CAVE,22}, + {"Schild","Diese Schrift kannst du nicht lesen.",MEETUP_SIGN,0,0,0,0}, + {"Eingang",&description,DOOR,EXIT,1,1,0,ENTRANCE,7}, + {"Stern",&description,STAR,0,2,2,0}, + {"Raumschiff",&description,SPACESHIPS,COMBINABLE,3,3,0}, + {"Raumschiff",&description,SPACESHIP,COMBINABLE,4,4,0} + } + }, + { + "010",{1},&sb_entrance,&anim_entrance,NIL, + { + {"Portier","Du siehst doch selbst, wie er aussieht.", + PORTER,TALK,0,0,0}, + {"T�r",&description,0,EXIT+OPEN+CLOSED,1,1,0,0,5}, + {"Schild","Diese Schrift kannst du nicht lesen.", + KITCHEN_SIGN,0,2,2,0}, + {"Kaugummi",&description,SCHNUCK,TAKE,255,255,10+128}, + {"Gummib�rchen",&description,SCHNUCK,TAKE,255,255,11+128}, + {"Schokokugel",&description,SCHNUCK,TAKE,255,255,12+128}, + {"�berraschungsei",&description,EGG,TAKE,255,255,13+128}, + {"Lakritz",&description,SCHNUCK,TAKE,255,255,14+128}, + {"Tablette","Die Plastikh�lle zeigt einen|Mund mit einer Sprechblase. Was|darin steht, kannst du nicht lesen.", + PILL,TAKE,255,255,0}, + {"Schlitz",&description,CAR_SLOT,COMBINABLE,6,6,0}, + {"Automat","Sieht aus wie ein Kaugummiautomat.",0,0,5,5,0}, + {"Toilette","Die Toiletten sind denen|auf der Erde sehr �hnlich.", + ARS_BATHROOM,0,255,255,0}, + {"Knopf",&description,BATHROOM_BUTTON,PRESS,3,3,0}, + {"Schild","Diese Schrift kannst du nicht lesen.",BATHROOM_SIGN,0,4,4,0}, + {"Treppe",&description,STAIRCASE,EXIT,8,8,0,REST,3}, + {"Ausgang",&description,MEETUP_EXIT,EXIT,255,255,0,MEETUP,22}, + {"M�nzen","Es sind seltsame|K�pfe darauf abgebildet.", + COINS,TAKE+COMBINABLE,255,255,0}, + {"Tablettenh�lle","Darauf steht:\"Wenn Sie diese|Schrift jetzt lesen k�nnen,|hat die Tablette gewirkt.\"", + PILL_HULL,TAKE,255,255,0} + } + }, + { + "028",{1},NIL,&anim_remaining,NIL, + { + {"Treppe",&description,0,EXIT,0,0,0,ENTRANCE,17}, + {"Stuhl",&description,0,EXIT,1,1,0,ROGER,2}, + {"Schuhe","Wie ist der denn mit|Schuhen hier reingekommen?",0,0,2,2,0} + } + }, + { + "029",{1},&sb_roger,&anim_roger,&once_roger, + { + {"Ausgang",&description,0,EXIT,255,255,0,REST,19}, + {"Froschgesicht",&description,ROGER_W,TALK,0,0,0}, + {"Gekritzel","\"Mr Spock was here\"",0,0,3,3,0}, + {"Brieftasche",&description,WALLET,TAKE,1,1,4}, + {"Speisekarte","\"Heute empfehlen wir:|Fonua Opra mit Ulk.\"",0,UNNECESSARY,2,2,0}, + {"Tasse","Sie enth�lt eine gr�nliche Fl�ssigkeit.",CUP,UNNECESSARY,4,4,0}, + {"Schachspiel",&description,0,UNNECESSARY,255,255,0}, + {"10-Buckazoid-Schein","Nicht gerade sehr viel Geld.", + 0,TAKE+COMBINABLE,255,255,0}, + {"Keycard von Roger",&description,KEYCARD_R,TAKE+COMBINABLE,255,255,0} + } + }, + { + "019",{1},&sb_glider,&anim_glider,NIL, + { + {"Ausgang",&description,0,EXIT,255,255,0,MEETUP,15}, + {"Knopf",&description,GLIDER_BUTTON1,PRESS,0,0,0}, + {"Knopf",&description,GLIDER_BUTTON2,PRESS,1,1,0}, + {"Knopf",&description,GLIDER_BUTTON3,PRESS,2,2,0}, + {"Knopf",&description,GLIDER_BUTTON4,PRESS,3,3,0}, + {"Keycard von Roger",&description,GLIDER_KEYCARD,TAKE+COMBINABLE,255,255,0}, + {"Schlitz",&description,GLIDER_SLOT,COMBINABLE,4,4,0}, + {"Fach",&description,0,OPEN,5,6,6}, + {"Tastatur",&description,GLIDER_BUTTONS,0,7,7,0}, + {"Anzeige","Hmm, seltsame Anzeigen.",GLIDER_DISPLAY,0,8,8,0}, + {"Instrumente","Hmm, seltsame Anzeigen.",GLIDER_INSTRUMENTS,0,9,9,0} + } + }, + { + "038",{1},&sb_meetup2,NIL,&once_meetup2, + { + {"Roger W.",&description,ROGER_W,TALK,255,255,0}, + {"Raumschiff",&description,SPACESHIP,COMBINABLE,255,255,0}, + {"H�hle",&description,0,EXIT,255,255,0,CAVE,22} + } + }, + { + "039",{1},&sb_meetup3,NIL,NIL, + { + {"Ufo","Der Eingang scheint offen zu sein.",UFO,EXIT,0,0,0,0,3}, + {"Stern",&description,STAR,0,1,1,0}, + {"H�hle",&description,0,EXIT,255,255,0,CAVE,22} + } + } +}; +/* --- Rooms ------------------------------------ */ + +room roomlist2[ROOMNUM2] = +{ + +/* --- Arsano --- */ + + { + "012",{1},&sb_rocks,NIL,&once_rocks, + { + {"Seil",&description,0,UNNECESSARY+EXIT,0,0,0,GENERATOR,12}, + {"Stein",&description,STONE,0,1,1,0}, + {"Stein",&description,0,0,2,2,0}, + {"Loch","Es scheint eine Hhle zu sein.",0,0,255,255,0,CAVE,1} + } + }, + { + "012",{0},NIL,NIL,NIL, + { + {"Ausgang","Hier bist du gerade hergekommen.", + 0,EXIT,255,255,0,ROCKS,22}, + {"Ausgang",&description,0,EXIT,255,255,0,MEETUP,2} + } + }, + { + "037",{1},&sb_meetup,&anim_meetup,&once_meetup, + { + {"Hhle",&description,0,EXIT,255,255,0,CAVE,22}, + {"Schild","Diese Schrift kannst du nicht lesen.",MEETUP_SIGN,0,0,0,0}, + {"Eingang",&description,DOOR,EXIT,1,1,0,ENTRANCE,7}, + {"Stern",&description,STAR,0,2,2,0}, + {"Raumschiff",&description,SPACESHIPS,COMBINABLE,3,3,0}, + {"Raumschiff",&description,SPACESHIP,COMBINABLE,4,4,0} + } + }, + { + "010",{1},&sb_entrance,&anim_entrance,NIL, + { + {"Portier","Du siehst doch selbst, wie er aussieht.", + PORTER,TALK,0,0,0}, + {"Tr",&description,0,EXIT+OPEN+CLOSED,1,1,0,0,5}, + {"Schild","Diese Schrift kannst du nicht lesen.", + KITCHEN_SIGN,0,2,2,0}, + {"Kaugummi",&description,SCHNUCK,TAKE,255,255,10+128}, + {"Gummibrchen",&description,SCHNUCK,TAKE,255,255,11+128}, + {"Schokokugel",&description,SCHNUCK,TAKE,255,255,12+128}, + {"berraschungsei",&description,EGG,TAKE,255,255,13+128}, + {"Lakritz",&description,SCHNUCK,TAKE,255,255,14+128}, + {"Tablette","Die Plastikhlle zeigt einen|Mund mit einer Sprechblase. Was|darin steht, kannst du nicht lesen.", + PILL,TAKE,255,255,0}, + {"Schlitz",&description,CAR_SLOT,COMBINABLE,6,6,0}, + {"Automat","Sieht aus wie ein Kaugummiautomat.",0,0,5,5,0}, + {"Toilette","Die Toiletten sind denen|auf der Erde sehr hnlich.", + ARS_BATHROOM,0,255,255,0}, + {"Knopf",&description,BATHROOM_BUTTON,PRESS,3,3,0}, + {"Schild","Diese Schrift kannst du nicht lesen.",BATHROOM_SIGN,0,4,4,0}, + {"Treppe",&description,STAIRCASE,EXIT,8,8,0,REST,3}, + {"Ausgang",&description,MEETUP_EXIT,EXIT,255,255,0,MEETUP,22}, + {"Mnzen","Es sind seltsame|Kpfe darauf abgebildet.", + COINS,TAKE+COMBINABLE,255,255,0}, + {"Tablettenhlle","Darauf steht:\"Wenn Sie diese|Schrift jetzt lesen knnen,|hat die Tablette gewirkt.\"", + PILL_HULL,TAKE,255,255,0} + } + }, + { + "028",{1},NIL,&anim_remaining,NIL, + { + {"Treppe",&description,0,EXIT,0,0,0,ENTRANCE,17}, + {"Stuhl",&description,0,EXIT,1,1,0,ROGER,2}, + {"Schuhe","Wie ist der denn mit|Schuhen hier reingekommen?",0,0,2,2,0} + } + }, + { + "029",{1},&sb_roger,&anim_roger,&once_roger, + { + {"Ausgang",&description,0,EXIT,255,255,0,REST,19}, + {"Froschgesicht",&description,ROGER_W,TALK,0,0,0}, + {"Gekritzel","\"Mr Spock was here\"",0,0,3,3,0}, + {"Brieftasche",&description,WALLET,TAKE,1,1,4}, + {"Speisekarte","\"Heute empfehlen wir:|Fonua Opra mit Ulk.\"",0,UNNECESSARY,2,2,0}, + {"Tasse","Sie enthlt eine grnliche Flssigkeit.",CUP,UNNECESSARY,4,4,0}, + {"Schachspiel",&description,0,UNNECESSARY,255,255,0}, + {"10-Buckazoid-Schein","Nicht gerade sehr viel Geld.", + 0,TAKE+COMBINABLE,255,255,0}, + {"Keycard von Roger",&description,KEYCARD_R,TAKE+COMBINABLE,255,255,0} + } + }, + { + "019",{1},&sb_glider,&anim_glider,NIL, + { + {"Ausgang",&description,0,EXIT,255,255,0,MEETUP,15}, + {"Knopf",&description,GLIDER_BUTTON1,PRESS,0,0,0}, + {"Knopf",&description,GLIDER_BUTTON2,PRESS,1,1,0}, + {"Knopf",&description,GLIDER_BUTTON3,PRESS,2,2,0}, + {"Knopf",&description,GLIDER_BUTTON4,PRESS,3,3,0}, + {"Keycard von Roger",&description,GLIDER_KEYCARD,TAKE+COMBINABLE,255,255,0}, + {"Schlitz",&description,GLIDER_SLOT,COMBINABLE,4,4,0}, + {"Fach",&description,0,OPEN,5,6,6}, + {"Tastatur",&description,GLIDER_BUTTONS,0,7,7,0}, + {"Anzeige","Hmm, seltsame Anzeigen.",GLIDER_DISPLAY,0,8,8,0}, + {"Instrumente","Hmm, seltsame Anzeigen.",GLIDER_INSTRUMENTS,0,9,9,0} + } + }, + { + "038",{1},&sb_meetup2,NIL,&once_meetup2, + { + {"Roger W.",&description,ROGER_W,TALK,255,255,0}, + {"Raumschiff",&description,SPACESHIP,COMBINABLE,255,255,0}, + {"Hhle",&description,0,EXIT,255,255,0,CAVE,22} + } + }, + { + "039",{1},&sb_meetup3,NIL,NIL, + { + {"Ufo","Der Eingang scheint offen zu sein.",UFO,EXIT,0,0,0,0,3}, + {"Stern",&description,STAR,0,1,1,0}, + {"Hhle",&description,0,EXIT,255,255,0,CAVE,22} + } + } +}; + + +/* --- Rooms ------------------------------------ */ + +room roomlist3[ROOMNUM3] = +{ + +/* --- Axacuss --- */ + + { + "043",{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, + &sb_cell,&anim_cell,&once_cell, + { + {"Knopf",&description,CELL_BUTTON,PRESS,1,1,0}, + {"T�r",&description,CELL_DOOR,EXIT+OPEN+CLOSED,0,0,31+128,CORRIDOR4,1}, + {"Tablett","Es ist irgendein Fra� und|etwas zu Trinken darauf.", + TRAY,UNNECESSARY,255,255,0}, + {"Stange","Es scheint eine Lampe zu sein.",0,COMBINABLE,3,3,0}, + {"Augen","Es ist nur ein Bild.",0,0,4,4,0}, + {"Leitung",&description,CELL_WIRE,COMBINABLE+TAKE,6,6,0}, + {"Steckdose","Sieht etwas anders aus als auf der Erde.", + SOCKET,COMBINABLE,5,5,0}, + {"Metallblock","Er ist ziemlich schwer.", + MAGNET,TAKE+COMBINABLE,255,255,30}, + {"Roboter","Den hast du erledigt.",0,0,255,255,0}, + {"Tisch","Ein kleiner Metalltisch.",CELL_TABLE,COMBINABLE,2,2,0} + } + }, + { + "016",{1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1}, + NIL,NIL,&once_corridor, + { + {"Ausgang",&description,0,EXIT,2,2,0,GUARD3,2}, + {"Ausgang",&description,0,EXIT,3,3,0,CORRIDOR2,22} + } + }, + { + "016",{1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1}, + NIL,NIL,&once_corridor, + { + {"Ausgang",&description,0,EXIT,2,2,0,CORRIDOR1,2}, + {"Ausgang",&description,0,EXIT,3,3,0,CORRIDOR3,22}, + {"Ausgang",&description,0,EXIT,1,1,0,CORRIDOR4,14} + } + }, + { + "016",{1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1}, + NIL,NIL,&once_corridor, + { + {"Ausgang",&description,0,EXIT,2,2,0,CORRIDOR2,2} + } + }, + { + "016",{1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1}, + &sb_corridor4,NIL,&once_corridor4, + { + {"Ausgang",&description,0,EXIT,0,0,0,CORRIDOR2,10}, + {"Ausgang",&description,0,EXIT,1,1,0,GUARD,14}, + {"Zellent�r","Hier warst du eingesperrt.", + DOOR,EXIT+OPEN+OPENED+CLOSED,7,7,0,CELL,16}, + {"Laptop",&description,NEWSPAPER,TAKE,6,6,8}, + {"Armbanduhr",&description,WATCH,TAKE+COMBINABLE,255,255,8}, + {"Tisch",&description,TABLE,COMBINABLE,5,5,0} + } + }, + { + "016",{1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1}, + &sb_corridor5,NIL,&once_corridor, + { + {"Ausgang",&description,DOOR,EXIT,2,2,0,0,2}, + {"Ausgang",&description,0,EXIT,3,3,0,CORRIDOR6,22} + } + }, + { + "016",{1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1}, + &sb_corridor6,NIL,&once_corridor, + { + {"Ausgang",&description,0,EXIT,2,2,0,CORRIDOR5,2}, + {"Ausgang",&description,0,EXIT,3,3,0,CORRIDOR7,22}, + {"T�r",&description,DOOR,OPEN+CLOSED,255,255,0,CORRIDOR8,13} + } + }, + { + "016",{1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1}, + NIL,NIL,&once_corridor, + { + {"Ausgang",&description,0,EXIT,2,2,0,CORRIDOR6,2}, + {"Ausgang",&description,0,EXIT,3,3,0,GUARD,22} + } + }, + { + "016",{1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1}, + &sb_corridor8,NIL,&once_corridor, + { + {"T�r",&description,DOOR,EXIT+OPEN,0,0,0,CORRIDOR6,10}, + {"Ausgang",&description,0,EXIT,3,3,0,BCORRIDOR,22} + } + }, + { + "016",{1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1}, + &sb_corridor9,NIL,&once_corridor, + { + {"Ausgang",&description,0,EXIT,2,2,0,BCORRIDOR,2}, + {"T�r",&description,DOOR,EXIT+OPEN,0,0,0,GUARD,10} + } + }, + { + "006",{1,0,0,1},&sb_bgang,NIL,&once_bgang, + { + {"S�ule",&description,PILLAR1,0,4,4,0}, + {"S�ule",&description,PILLAR2,0,5,5,0}, + {"Ausgang",&description,0,EXIT,6,6,0,CORRIDOR8,2}, + {"Ausgang",&description,0,EXIT,7,7,0,CORRIDOR9,22}, + {"T�r","Auf einem Schild an der T�r steht \"Dr. Alab Hansi\".", + DOOR1,EXIT+OPEN+CLOSED+OCCUPIED,0,0,1,OFFICE_L1,6}, + {"T�r","Auf einem Schild an der T�r steht \"Saval Lun\".", + DOOR2,EXIT+OPEN+CLOSED+OCCUPIED,1,1,2,OFFICE_L2,16}, + {"T�r","Auf einem Schild an der T�r steht \"Prof. Dr. Ugnul Tschabb\".", + DOOR3,EXIT+OPEN+OPENED,2,2,3,OFFICE_R1,8}, + {"T�r","Auf einem Schild an der T�r steht \"Alga Hurz Li\".", + DOOR4,EXIT+OPEN+CLOSED+OCCUPIED,3,3,4,OFFICE_R2,18} + } + }, + { + "040",{1},&sb_guard,NIL,NIL, + { + {"Ausgang",&description,0,EXIT,255,255,0,CORRIDOR4,21}, + {"Gang",&description,0,EXIT,3,3,0,CORRIDOR7,5}, + {"T�r",&description,DOOR,EXIT+OPEN,1,1,6,CORRIDOR9,3}, + {"Axacussaner","Du m��test ihn irgendwie ablenken.", + GUARD,TALK,0,0,0}, + {"Bild","Komisches Bild.",0,0,2,2,0}, + {"Karte","Darauf steht: \"Generalkarte\".", + MASTERKEYCARD,TAKE+COMBINABLE,255,255,1} + } + }, + { + "042",{1},&sb_guard3,NIL,NIL, + { + {"Ausgang",&description,0,EXIT,255,255,0,CORRIDOR1,22}, + {"T�r",&description,0,EXIT+OPEN+CLOSED,0,0,0,0,20}, + {"T�r",&description,0,EXIT+OPEN+CLOSED,1,1,0,0,15}, + {"T�r",&description,DOOR,EXIT+OPEN,2,2,11,OFFICE_L,0}, + {"Lampe",&description,LAMP,COMBINABLE,3,3,0}, + {"Axacussaner",&description,GUARD,TALK,5,5,0}, + {"Bild","Seltsam!",0,0,4,4,0} + } + }, + { + "007",{1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1}, + &sb_office1,NIL,NIL, + { + {"T�r",&description,DOOR,EXIT+OPEN+OPENED,6,6,9,BCORRIDOR,9}, + {"Computer",&description,COMPUTER,COMBINABLE,4,4,0}, + {"Geld","Es sind 500 Xa.",TICKETS,TAKE,255,255,0}, + {"Schlie�fach","Es hat ein elektronisches Zahlenschlo�.", + LOCKER,OPEN+CLOSED,5,5,0}, + {"Brief",&description,LETTER,UNNECESSARY,3,3,0} + } + }, + { + "007",{1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1}, + &sb_office2,NIL,NIL, + { + {"T�r",&description,DOOR,EXIT+OPEN+OPENED,6,6,9,BCORRIDOR,9}, + {"Computer",&description,COMPUTER,COMBINABLE,4,4,0}, + {"W�rfel","Sonderbar!",0,0,0,0,0}, + {"Bild","Affenstark!",0,0,1,1,0}, + {"Komisches Ding","Wundersam!",0,UNNECESSARY,2,2,0} + } + }, + { + "008",{1,1,0,1},&sb_office3,NIL,NIL, + { + {"T�r",&description,DOOR,EXIT+OPEN+OPENED,0,0,3,BCORRIDOR,5}, + {"Computer",&description,COMPUTER,COMBINABLE,4,4,0}, + {"Bild","Es ist ein Axacussanerkopf auf dem Bild.",0,UNNECESSARY,1,1,0}, + {"Bild","Es ist ein Axacussanerkopf auf dem Bild.",PAINTING,UNNECESSARY,2,2,0}, + {"Pflanze",&description,0,UNNECESSARY,3,3,0}, + {NIL,&description,MONEY,TAKE+COMBINABLE,255,255,0} + } + }, + { + "008",{1,0,1,1},&sb_office4,NIL,NIL, + { + {"T�r",&description,DOOR,EXIT+OPEN+OPENED,0,0,3,BCORRIDOR,5}, + {"Computer",&description,COMPUTER,COMBINABLE,4,4,0}, + {"Figur","Stark!",0,UNNECESSARY,6,6,0}, + {"Pflanze","Sie ist den Pflanzen auf der Erde sehr �hnlich.", + 0,UNNECESSARY,5,5,0} + } + }, + { + "007",{1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1}, + &sb_office5,NIL,&once_office5, + { + {"T�r",&description,DOOR,EXIT+OPEN+OPENED,6,6,17,GUARD3,9}, + {"Computer","Er funktioniert nicht.",COMPUTER,COMBINABLE,4,4,0}, + {"Graffiti","Seltsamer B�roschmuck!",0,0,7,7,0}, + {"Geld","Es sind 350 Xa.",TICKETS,TAKE,8,8,0} + } + }, + { + "003",{1},&sb_elevator,NIL,NIL, + { + {"Knopf",&description,BUTTON1,PRESS,0,0,0}, + {"Knopf",&description,BUTTON2,PRESS,1,1,0}, + {"Ausgang",&description,DOOR,EXIT,255,255,0,0,22}, + {"Dschungel","Lauter B�ume.",JUNGLE,0,255,255,0,STATION,2} + } + }, + { + "005",{1},&sb_station,NIL,NIL, + { + {"Schild",&description,STATION_SIGN,0,0,0,0}, + {"T�r",&description,DOOR,EXIT+OPEN+CLOSED,1,1,0,0,7} + } + }, + { + "032",{1,1},&sb_sign,NIL,NIL, + { + {"Ausgang",&description,0,EXIT,255,255,0,STATION,22}, + {"Schlitz",&description,SLOT,COMBINABLE,0,0,0} + } + } +}; + +} +#endif // ROOMS_H diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp index b8d8eb8dd7..3d83af1546 100644 --- a/engines/supernova/supernova.cpp +++ b/engines/supernova/supernova.cpp @@ -24,44 +24,113 @@ #include "common/debug.h" #include "common/debug-channels.h" #include "common/error.h" +#include "common/events.h" #include "common/file.h" #include "common/fs.h" - +#include "common/str.h" +#include "common/system.h" #include "engines/util.h" +#include "graphics/cursorman.h" +#include "graphics/surface.h" +#include "graphics/screen.h" +#include "graphics/palette.h" +//#include "graphics/font.h" +//#include "graphics/fontman.h" #include "supernova/supernova.h" + namespace Supernova { SupernovaEngine::SupernovaEngine(OSystem *syst) : Engine(syst) , _console(NULL) { - const Common::FSNode gameDataDir(ConfMan.get("path")); - SearchMan.addSubDirectoryMatching(gameDataDir, "sound"); +// const Common::FSNode gameDataDir(ConfMan.get("path")); +// SearchMan.addSubDirectoryMatching(gameDataDir, "sound"); // setup engine specific debug channels DebugMan.addDebugChannel(kDebugGeneral, "general", "Supernova general debug channel"); _rnd = new Common::RandomSource("supernova"); - - debug("SupernovaEngine::SupernovaEngine"); } SupernovaEngine::~SupernovaEngine() { - debug("SupernovaEngine::~SupernovaEngine"); - - delete _rnd; DebugMan.clearAllDebugChannels(); + + delete _rnd; + delete _console; } Common::Error SupernovaEngine::run() { - initGraphics(320, 200); + initGraphics(kScreenWidth, kScreenHeight); _console = new Console(this); - debug("SupernovaEngine::init"); + initData(); + + bool running = true; + while (running) { + Common::Event event; + while (g_system->getEventManager()->pollEvent(event)) { + switch (event.type) { + case Common::EVENT_QUIT: + case Common::EVENT_RTL: + running = false; + break; + + case Common::EVENT_KEYDOWN: + if (event.kbd.keycode == Common::KEYCODE_d && event.kbd.hasFlags(Common::KBD_CTRL)) { + _console->attach(); + } + if (event.kbd.keycode == Common::KEYCODE_q) { + playSound(48, 13530); + } + + break; + default: + break; + } + } + + _system->updateScreen(); + _system->delayMillis(10); + } + + //deinit timer/sound/.. + stopSound(); return Common::kNoError; } +void SupernovaEngine::initData() { + Common::File f; + if (!f.open("msn_data.047")) { + error("File s could not be read!"); + } + + debug("%s\t%u", f.getName(), f.size()); +} + +void SupernovaEngine::playSound(int filenumber, int offset) { + Common::File *file = new Common::File(); + Common::String filename(Common::String::format("msn_data.0%2d", filenumber)); + if (!file->open(filename)) { + error("File %s could not be read!", filename.c_str()); + } + + file->seek(offset); + Audio::SeekableAudioStream *audioStream = Audio::makeRawStream(file, 11931, Audio::FLAG_UNSIGNED | Audio::FLAG_LITTLE_ENDIAN); + stopSound(); + _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, audioStream); +} + +void SupernovaEngine::stopSound() { + if (_mixer->isSoundHandleActive(_soundHandle)) + _mixer->stopHandle(_soundHandle); +} + +void SupernovaEngine::renderImage(int file, int section) { + // STUB +} + } diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h index 01c91c67f0..4eef366ddd 100644 --- a/engines/supernova/supernova.h +++ b/engines/supernova/supernova.h @@ -23,14 +23,23 @@ #ifndef SUPERNOVA_H #define SUPERNOVA_H -#include "common/scummsys.h" +#include "audio/audiostream.h" +#include "audio/mixer.h" +#include "audio/decoders/raw.h" +#include "common/array.h" #include "common/random.h" +#include "common/scummsys.h" #include "engines/engine.h" #include "supernova/console.h" +#include "supernova/graphics.h" namespace Supernova { +const int kScreenWidth = 320; +const int kScreenHeight = 200; +const int kTextSpeed[] = {19, 14, 10, 7, 4}; + class SupernovaEngine : public Engine { public: SupernovaEngine(OSystem *syst); @@ -41,6 +50,21 @@ public: private: Common::RandomSource *_rnd; Console *_console; + Audio::SoundHandle _soundHandle; + + // name is file ending of msn_data.xxx + // image decoded from file + // sections ?? +// struct imageFile { +// Common::String name; +// MSNImageDecoder image; +// }; +// Common::Array<imageFile> _images; + + void initData(); + void playSound(int filenumber, int offset = 0); + void stopSound(); + void renderImage(int file, int section); }; } |