diff options
Diffstat (limited to 'engines/dreamweb')
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 132 | ||||
-rw-r--r-- | engines/dreamweb/stubs.cpp | 148 |
2 files changed, 148 insertions, 132 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 9fa7f16995..fbd7c079e0 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -20062,138 +20062,6 @@ transfer: dx = 6059; } -void DreamGenContext::dreamweb() { - STACK_CHECK; - seecommandtail(); - checkbasemem(); - soundstartup(); - setkeyboardint(); - setupemm(); - allocatebuffers(); - setmouse(); - fadedos(); - gettime(); - clearbuffers(); - clearpalette(); - set16colpalette(); - readsetdata(); - data.byte(kWongame) = 0; - dx = 1909; - loadsample(); - setsoundoff(); - scanfornames(); - _cmp(al, 0); - if (!flags.z()) - goto dodecisions; - setmode(); - loadpalfromiff(); - titles(); - credits(); - goto playgame; -dodecisions: - cls(); - setmode(); - decide(); - _cmp(data.byte(kQuitrequested), 0); - if (!flags.z()) - return /* (exitgame) */; - _cmp(data.byte(kGetback), 4); - if (flags.z()) - goto mainloop; - titles(); - _cmp(data.byte(kQuitrequested), 0); - if (!flags.z()) - return /* (exitgame) */; - credits(); -playgame: - _cmp(data.byte(kQuitrequested), 0); - if (!flags.z()) - return /* (exitgame) */; - clearchanges(); - setmode(); - loadpalfromiff(); - data.byte(kLocation) = 255; - data.byte(kRoomafterdream) = 1; - data.byte(kNewlocation) = 35; - data.byte(kVolume) = 7; - loadroom(); - clearsprites(); - initman(); - entrytexts(); - entryanims(); - data.byte(kDestpos) = 3; - initialinv(); - data.byte(kLastflag) = 32; - startup1(); - data.byte(kVolumeto) = 0; - data.byte(kVolumedirection) = -1; - data.byte(kCommandtype) = 255; - goto mainloop; -loadnew: - clearbeforeload(); - loadroom(); - clearsprites(); - initman(); - entrytexts(); - entryanims(); - data.byte(kNewlocation) = 255; - startup(); - data.byte(kCommandtype) = 255; - worktoscreenm(); - goto mainloop; - data.byte(kNewlocation) = 255; - clearsprites(); - initman(); - startup(); - data.byte(kCommandtype) = 255; -mainloop: - _cmp(data.byte(kQuitrequested), 0); - if (!flags.z()) - return /* (exitgame) */; - screenupdate(); - _cmp(data.byte(kWongame), 0); - if (!flags.z()) - goto endofgame; - _cmp(data.byte(kMandead), 1); - if (flags.z()) - goto gameover; - _cmp(data.byte(kMandead), 2); - if (flags.z()) - goto gameover; - _cmp(data.word(kWatchingtime), 0); - if (flags.z()) - goto notwatching; - al = data.byte(kFinaldest); - _cmp(al, data.byte(kManspath)); - if (!flags.z()) - goto mainloop; - _dec(data.word(kWatchingtime)); - if (!flags.z()) - goto mainloop; -notwatching: - _cmp(data.byte(kMandead), 4); - if (flags.z()) - goto gameover; - _cmp(data.byte(kNewlocation), 255); - if (!flags.z()) - goto loadnew; - goto mainloop; -gameover: - clearbeforeload(); - showgun(); - fadescreendown(); - cx = 100; - hangon(); - goto dodecisions; -endofgame: - clearbeforeload(); - fadescreendowns(); - cx = 200; - hangon(); - endgame(); - { quickquit2(); return; }; -} - void DreamGenContext::__start() { diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 688ad82d92..3aebe02a43 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -26,6 +26,154 @@ namespace DreamGen { +void DreamGenContext::dreamweb() { + STACK_CHECK; + seecommandtail(); + checkbasemem(); + soundstartup(); + setkeyboardint(); + setupemm(); + allocatebuffers(); + setmouse(); + fadedos(); + gettime(); + clearbuffers(); + clearpalette(); + set16colpalette(); + readsetdata(); + data.byte(kWongame) = 0; + + dx = 1909; + loadsample(); + setsoundoff(); + + bool firstLoop = true; + + while (true) { + + scanfornames(); + + bool startNewGame = true; + + if (al == 0 && firstLoop) { + + // no savegames found, and we're not restarting. + + setmode(); + loadpalfromiff(); + + } else { + // "dodecisions" + + // Savegames found, so ask if we should load one. + // (If we're restarting after game over, we also always show these + // options.) + + cls(); + setmode(); + decide(); + if (data.byte(kQuitrequested)) + return; // exit game + + if (data.byte(kGetback) == 4) + startNewGame = false; // savegame has been loaded + + } + + firstLoop = false; + + if (startNewGame) { + // "playgame" + + titles(); + if (data.byte(kQuitrequested)) + return; // exit game + credits(); + + if (data.byte(kQuitrequested)) + return; // exit game + + clearchanges(); + setmode(); + loadpalfromiff(); + data.byte(kLocation) = 255; + data.byte(kRoomafterdream) = 1; + data.byte(kNewlocation) = 35; + data.byte(kVolume) = 7; + loadroom(); + clearsprites(); + initman(); + entrytexts(); + entryanims(); + data.byte(kDestpos) = 3; + initialinv(); + data.byte(kLastflag) = 32; + startup1(); + data.byte(kVolumeto) = 0; + data.byte(kVolumedirection) = -1; + data.byte(kCommandtype) = 255; + + } + + // main loop + while (true) { + + if (data.byte(kQuitrequested)) + return; // exit game + + screenupdate(); + + if (data.byte(kWongame) != 0) { + // "endofgame" + clearbeforeload(); + fadescreendowns(); + cx = 200; + hangon(); + endgame(); + quickquit2(); + return; + } + + if (data.byte(kMandead) == 1 || data.byte(kMandead) == 2) + break; + + if (data.word(kWatchingtime) > 0) { + if (data.byte(kFinaldest) == data.byte(kManspath)) + data.word(kWatchingtime)--; + } + + if (data.word(kWatchingtime) == 0) { + // "notwatching" + + if (data.byte(kMandead) == 4) + break; + + if (data.byte(kNewlocation) != 255) { + // "loadnew" + clearbeforeload(); + loadroom(); + clearsprites(); + initman(); + entrytexts(); + entryanims(); + data.byte(kNewlocation) = 255; + startup(); + data.byte(kCommandtype) = 255; + worktoscreenm(); + } + } + } + + // "gameover" + clearbeforeload(); + showgun(); + fadescreendown(); + cx = 100; + hangon(); + + } +} + Common::String getFilename(Context &context) { uint16 name_ptr = context.dx; Common::String name; |