aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdevtools/tasmrecover/tasm-recover1
-rw-r--r--engines/dreamweb/dreamgen.cpp78
-rw-r--r--engines/dreamweb/sprite.cpp69
3 files changed, 66 insertions, 82 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index e05e58c2f7..376e2dc39f 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -118,5 +118,6 @@ generator = cpp(context, "DreamGen", blacklist = [
'dreamweb',
'backobject',
'mainman',
+ 'madman',
])
generator.generate('dreamweb') #start routine
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 9306acda49..34bb64b58c 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -1694,84 +1694,6 @@ notendtelly:
showgamereel();
}
-void DreamGenContext::madman() {
- STACK_CHECK;
- data.word(kWatchingtime) = 2;
- checkspeed();
- if (!flags.z())
- goto nomadspeed;
- ax = es.word(bx+3);
- _cmp(ax, 364);
- if (!flags.c())
- goto ryansded;
- _cmp(ax, 10);
- if (!flags.z())
- goto notfirstmad;
- push(es);
- push(bx);
- push(ax);
- dx = 2247;
- loadtemptext();
- ax = pop();
- bx = pop();
- es = pop();
- data.byte(kCombatcount) = -1;
- data.byte(kSpeechcount) = 0;
-notfirstmad:
- _inc(ax);
- _cmp(ax, 294);
- if (flags.z())
- goto madmanspoken;
- _cmp(ax, 66);
- if (!flags.z())
- goto nomadspeak;
- _inc(data.byte(kCombatcount));
- push(es);
- push(bx);
- madmantext();
- bx = pop();
- es = pop();
- ax = 53;
- _cmp(data.byte(kCombatcount), 64);
- if (flags.c())
- goto nomadspeak;
- _cmp(data.byte(kCombatcount), 70);
- if (flags.z())
- goto killryan;
- _cmp(data.byte(kLastweapon), 8);
- if (!flags.z())
- goto nomadspeak;
- data.byte(kCombatcount) = 72;
- data.byte(kLastweapon) = -1;
- data.byte(kMadmanflag) = 1;
- ax = 67;
- goto nomadspeak;
-killryan:
- ax = 310;
-nomadspeak:
- es.word(bx+3) = ax;
-nomadspeed:
- showgamereel();
- al = data.byte(kMapx);
- es.byte(bx+1) = al;
- madmode();
- return;
-madmanspoken:
- _cmp(data.byte(kWongame), 1);
- if (flags.z())
- return /* (alreadywon) */;
- data.byte(kWongame) = 1;
- push(es);
- push(bx);
- getridoftemptext();
- bx = pop();
- es = pop();
- return;
-ryansded:
- data.byte(kMandead) = 2;
- showgamereel();
-}
-
void DreamGenContext::madmode() {
STACK_CHECK;
data.word(kWatchingtime) = 2;
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index e01fdca976..0da5faa111 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -768,9 +768,8 @@ void DreamGenContext::madmantext() {
if (isCD()) {
if (data.byte(kSpeechcount) >= 63)
return;
- _cmp(data.byte(kCh1playing), 255);
- if (!flags.z())
- return /* (nomadtext) */;
+ if (data.byte(kCh1playing) != 255)
+ return;
al = data.byte(kSpeechcount);
++data.byte(kSpeechcount);
} else {
@@ -779,11 +778,73 @@ void DreamGenContext::madmantext() {
al = data.byte(kCombatcount);
_and(al, 3);
if (!flags.z())
- return /* (nomadtext) */;
+ return;
al = data.byte(kCombatcount) / 4;
}
setuptimedtemp(47 + al, 82, 72, 80, 90, 1);
}
+void DreamGenContext::madman() {
+ data.word(kWatchingtime) = 2;
+ checkspeed();
+ if (flags.z()) {
+ ax = es.word(bx+3);
+ if (ax >= 364) {
+ data.byte(kMandead) = 2;
+ showgamereel();
+ return;
+ }
+ if (ax == 10) {
+ push(es);
+ push(bx);
+ push(ax);
+ dx = kIntrotextname;
+ loadtemptext();
+ ax = pop();
+ bx = pop();
+ es = pop();
+ data.byte(kCombatcount) = -1;
+ data.byte(kSpeechcount) = 0;
+ }
+ ++ax;
+ if (ax == 294) {
+ if (data.byte(kWongame) == 1)
+ return;
+ data.byte(kWongame) = 1;
+ push(es);
+ push(bx);
+ getridoftemptext();
+ bx = pop();
+ es = pop();
+ return;
+ }
+ if (ax == 66) {
+ ++data.byte(kCombatcount);
+ push(es);
+ push(bx);
+ madmantext();
+ bx = pop();
+ es = pop();
+ ax = 53;
+ if (data.byte(kCombatcount) >= (isCD() ? 64 : 62)) {
+ if (data.byte(kCombatcount) == (isCD() ? 70 : 68))
+ ax = 310;
+ else {
+ if (data.byte(kLastweapon) == 8) {
+ data.byte(kCombatcount) = isCD() ? 72 : 70;
+ data.byte(kLastweapon) = -1;
+ data.byte(kMadmanflag) = 1;
+ ax = 67;
+ }
+ }
+ }
+ }
+ es.word(bx+3) = ax;
+ }
+ showgamereel();
+ es.byte(bx+1) = data.byte(kMapx);
+ madmode();
+}
+
} /*namespace dreamgen */