aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdevtools/tasmrecover/tasm-recover2
-rw-r--r--engines/dreamweb/dreambase.h2
-rw-r--r--engines/dreamweb/dreamgen.cpp98
-rw-r--r--engines/dreamweb/dreamgen.h4
-rw-r--r--engines/dreamweb/print.cpp3
-rw-r--r--engines/dreamweb/sprite.cpp44
-rw-r--r--engines/dreamweb/stubs.cpp7
-rw-r--r--engines/dreamweb/stubs.h2
-rw-r--r--engines/dreamweb/vgafades.cpp4
9 files changed, 59 insertions, 107 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index edc4a60be2..5558a93f7a 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -625,6 +625,8 @@ generator = cpp(context, "DreamGen", blacklist = [
'restoreems',
'restorereels',
'rockstar',
+ 'rollendcredits',
+ 'rollendcredits2',
'roomname',
'runintroseq',
'saveems',
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index 2d5669fa8f..3d5c9ce88b 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -114,6 +114,7 @@ public:
void showReelFrame(Reel *reel);
const Frame *getReelFrameAX(uint16 frame);
void soundOnReels(uint16 reelPointer);
+ void rollEndCredits();
// from stubs.cpp
void crosshair();
@@ -148,6 +149,7 @@ public:
void panelIcons1();
SetObject *getSetAd(uint8 index);
void *getAnyAd(uint8 *value1, uint8 *value2);
+ const uint8 *getTextInFile1(uint16 index);
// from use.cpp
void placeFreeObject(uint8 index);
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 5b96e7cb86..8d1eb4cec9 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -546,99 +546,6 @@ notendseq:
rollEndCredits();
}
-void DreamGenContext::rollEndCredits() {
- STACK_CHECK;
- al = 16;
- ah = 255;
- playChannel0();
- data.byte(kVolume) = 7;
- data.byte(kVolumeto) = 0;
- data.byte(kVolumedirection) = -1;
- cl = 160;
- ch = 160;
- di = 75;
- bx = 20;
- ds = data.word(kMapstore);
- si = 0;
- multiGet();
- es = data.word(kTextfile1);
- si = 3*2;
- ax = es.word(si);
- si = ax;
- _add(si, (66*2));
- cx = 254;
-endcredits1:
- push(cx);
- bx = 10;
- cx = data.word(kLinespacing);
-endcredits2:
- push(cx);
- push(si);
- push(di);
- push(es);
- push(bx);
- vSync();
- cl = 160;
- ch = 160;
- di = 75;
- bx = 20;
- ds = data.word(kMapstore);
- si = 0;
- multiPut();
- vSync();
- bx = pop();
- es = pop();
- di = pop();
- si = pop();
- push(si);
- push(di);
- push(es);
- push(bx);
- cx = 18;
-onelot:
- push(cx);
- di = 75;
- dx = 161;
- ax = 0;
- printDirect();
- _add(bx, data.word(kLinespacing));
- cx = pop();
- if (--cx)
- goto onelot;
- vSync();
- cl = 160;
- ch = 160;
- di = 75;
- bx = 20;
- multiDump();
- bx = pop();
- es = pop();
- di = pop();
- si = pop();
- cx = pop();
- _dec(bx);
- if (--cx)
- goto endcredits2;
- cx = pop();
-looknext:
- al = es.byte(si);
- _inc(si);
- _cmp(al, ':');
- if (flags.z())
- goto gotnext;
- _cmp(al, 0);
- if (flags.z())
- goto gotnext;
- goto looknext;
-gotnext:
- if (--cx)
- goto endcredits1;
- cx = 100;
- hangOn();
- panelToMap();
- fadeScreenUpHalf();
-}
-
void DreamGenContext::checkForExit() {
STACK_CHECK;
cl = data.byte(kRyanx);
@@ -928,11 +835,6 @@ halfend:
data.byte(kNumtofade) = 32;
}
-void DreamGenContext::rollEndCredits2() {
- STACK_CHECK;
- rollEm();
-}
-
void DreamGenContext::rollEm() {
STACK_CHECK;
cl = 160;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 6642803b42..04c5116b83 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -546,14 +546,12 @@ public:
void pickupConts();
void nextColon();
void findInvPos();
- void rollEndCredits();
void getKeyAndLogo();
void selectOb();
void receptionist();
void selectSlot();
void fadeUpMon();
void showDiaryPage();
- void transferToEx();
void reExFromInv();
void businessMan();
void outOfInv();
@@ -587,7 +585,6 @@ public:
void drawItAll();
void useStereo();
void showDiaryKeys();
- void rollEndCredits2();
void useOpened();
void signOn();
void locationPic();
@@ -620,6 +617,7 @@ public:
void swapWithInv();
void useControl();
void adjustRight();
+ void transferToEx();
void updateSymbolTop();
void getPersonText();
void parser();
diff --git a/engines/dreamweb/print.cpp b/engines/dreamweb/print.cpp
index dc7ca8a2f7..0fd596ceac 100644
--- a/engines/dreamweb/print.cpp
+++ b/engines/dreamweb/print.cpp
@@ -122,11 +122,10 @@ uint8 DreamBase::printSlow(const uint8 *string, uint16 x, uint16 y, uint8 maxWid
void DreamGenContext::printDirect() {
uint16 y = bx;
- uint16 initialSi = si;
const uint8 *initialString = es.ptr(si, 0);
const uint8 *string = initialString;
al = DreamBase::printDirect(&string, di, &y, dl, (bool)(dl & 1));
- si = initialSi + (string - initialString);
+ si += (string - initialString);
bx = y;
}
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index f1f3ff5e48..f8f11d8df8 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -759,6 +759,50 @@ void DreamGenContext::intro3Text() {
setupTimedTemp(46, 82, 36, 56, 100, 1);
}
+void DreamBase::rollEndCredits() {
+ playChannel0(16, 255);
+ data.byte(kVolume) = 7;
+ data.byte(kVolumeto) = 0;
+ data.byte(kVolumedirection) = -1;
+
+ multiGet(mapStore(), 75, 20, 160, 160);
+
+ const uint8 *string = getTextInFile1(3);
+ const int linespacing = data.word(kLinespacing);
+
+ for (int i = 0; i < 254; ++i) {
+ // Output the text, initially with an offset of 10 pixels,
+ // then move it up one pixel until we shifted it by a complete
+ // line of text.
+ for (int j = 0; j < linespacing; ++j) {
+ vSync();
+ multiPut(mapStore(), 75, 20, 160, 160);
+ vSync();
+
+ // Output up to 18 lines of text
+ uint16 y = 10 - j;
+ const uint8 *tmp_str = string;
+ for (int k = 0; k < 18; ++j) {
+ DreamBase::printDirect(&tmp_str, 75, &y, 160 + 1, true);
+ y += linespacing;
+ }
+
+ vSync();
+ multiDump(75, 20, 160, 160);
+ }
+
+ // Skip to the next text line
+ byte c;
+ do {
+ c = *string++;
+ } while (c != ':' && c != 0);
+ }
+ hangOn(100);
+ panelToMap();
+ fadeScreenUpHalf();
+}
+
+
void DreamGenContext::monks2text() {
bool isGermanCD = isCD() && engine->getLanguage() == Common::DE_DEU;
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 7e871bd42a..0b3daa861e 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -2482,9 +2482,10 @@ void DreamGenContext::setLocation() {
setLocation(al);
}
-const uint8 *DreamGenContext::getTextInFile1(uint16 index) {
- uint16 offset = getSegment(data.word(kTextfile1)).word(index * 2) + kTextstart;
- const uint8 *string = getSegment(data.word(kTextfile1)).ptr(offset, 0);
+const uint8 *DreamBase::getTextInFile1(uint16 index) {
+ SegmentRef text = getSegment(data.word(kTextfile1));
+ uint16 offset = text.word(index * 2) + kTextstart;
+ const uint8 *string = text.ptr(offset, 0);
return string;
}
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index c73034ce5e..ed1aba957a 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -369,7 +369,6 @@
void getLocation();
void setLocation(uint8 index);
void setLocation();
- const uint8 *getTextInFile1(uint16 index);
void loadTempText();
void loadTempText(const char *fileName);
void loadTravelText();
@@ -568,5 +567,6 @@
void showPuzText(uint16 command, uint16 count);
void showPuzText();
void monkSpeaking();
+ void rollEndCredits2();
#endif
diff --git a/engines/dreamweb/vgafades.cpp b/engines/dreamweb/vgafades.cpp
index 6f5af573c4..ca63b7308c 100644
--- a/engines/dreamweb/vgafades.cpp
+++ b/engines/dreamweb/vgafades.cpp
@@ -248,4 +248,8 @@ void DreamGenContext::showGroup() {
cx = 0;
}
+void DreamGenContext::rollEndCredits2() {
+ rollEm();
+}
+
} // End of namespace DreamGen