aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/avalanche/scrolls2.cpp336
-rw-r--r--engines/avalanche/scrolls2.h51
2 files changed, 207 insertions, 180 deletions
diff --git a/engines/avalanche/scrolls2.cpp b/engines/avalanche/scrolls2.cpp
index 57c15a2b8f..a577483463 100644
--- a/engines/avalanche/scrolls2.cpp
+++ b/engines/avalanche/scrolls2.cpp
@@ -25,6 +25,8 @@
* Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
*/
+#include "avalanche/avalanche.h"
+
#include "avalanche/scrolls2.h"
#include "avalanche/gyro2.h"
#include "avalanche/logger2.h"
@@ -41,211 +43,203 @@
namespace Avalanche {
- namespace Scrolls {
+const int16 Scrolls::roman = 0;
+const int16 Scrolls::italic = 1;
- const int16 roman = 0;
- const int16 italic = 1;
+const int16 Scrolls::halficonwidth = 19; /* Half the width of an icon. */
- const int16 halficonwidth = 19; /* Half the width of an icon. */
- int16 dix, diy;
- Gyro::raw ch[2];
- byte cfont; /* Current font */
- int16 dodgex, dodgey;
- byte param; /* For using arguments code */
+Scrolls::Scrolls() : aboutscroll(false) {
+}
- byte use_icon;
+void Scrolls::setParent(AvalancheEngine *vm) {
+ _vm = vm;
+}
- void initialize_scrolls() {
- warning("STUB: Scrolls::initialize_scrolls()");
- }
+void Scrolls::state(byte x) { /* Sets "Ready" light to whatever */
+ byte page_;
- void state(byte x) { /* Sets "Ready" light to whatever */
- byte page_;
-
- if (Gyro::ledstatus == x) return; /* Already like that! */
-
- warning("STUB: Scrolls::state(). Calls of Pascal units need to be removed.");
- //switch (x) {
- //case 0:
- // setfillstyle(1, black);
- // break; /* Off */
- //case 1:
- // setfillstyle(9, green);
- // break; /* Half-on (menus) */
- //case 2:
- // setfillstyle(1, green);
- // break; /* On (kbd) */
- //case 3:
- // setfillstyle(6, green);
- // break; /* Hit a key */
- //}
-
- Gyro::super_off();
-
- /* for (page_ = 0; page_ <= 1; page_ ++) {
- setactivepage(page_);
- bar(419, 195, 438, 197);
- }*/
-
- Gyro::super_on();
- Gyro::ledstatus = x;
- }
+ if (_vm->_gyro.ledstatus == x) return; /* Already like that! */
- void easteregg() {
- uint16 fv, ff;
+ warning("STUB: Scrolls::state(). Calls of Pascal units need to be removed.");
+ //switch (x) {
+ //case 0:
+ // setfillstyle(1, black);
+ // break; /* Off */
+ //case 1:
+ // setfillstyle(9, green);
+ // break; /* Half-on (menus) */
+ //case 2:
+ // setfillstyle(1, green);
+ // break; /* On (kbd) */
+ //case 3:
+ // setfillstyle(6, green);
+ // break; /* Hit a key */
+ //}
- warning("STUB: Scrolls::easteregg(). Calls of Pascal units need to be removed.");
+ _vm->_gyro.super_off();
- /* background(15);
- for (fv = 4; fv <= 100; fv ++)
- for (ff = 0; ff <= 70; ff ++) {
- sound(fv * 100 + ff * 10);
- delay(1);
- }
- nosound;
- setcolor(10);
- settextstyle(0, 0, 3);
- settextjustify(1, 1);
- outtextxy(320, 100, "GIED");
- settextstyle(0, 0, 1);
- settextjustify(0, 2);*/
-
- Gyro::background(0);
- }
+ /* for (page_ = 0; page_ <= 1; page_ ++) {
+ setactivepage(page_);
+ bar(419, 195, 438, 197);
+ }*/
- void say(int16 x, int16 y, Common::String z) { /* Fancy FAST screenwriting */
- const int16 locol = 2;
- byte xx, yy, ox, bit, lz, t;
- int16 yp;
- bool offset;
- byte itw[12][80];
-
- offset = x % 8 == 4;
- x = x / 8;
- lz = z.size();
- ox = 0;
- Logger::log_scrollline();
-
- for (xx = 1; xx <= lz; xx ++) {
- switch (z[xx]) {
- case '\22': {
- cfont = roman;
- Logger::log_roman();
- }
- break;
- case '\6': {
- cfont = italic;
- Logger::log_italic();
- }
- break;
- default: {
- ox += 1;
- for (yy = 1; yy <= 12; yy ++) itw[yy][ox] = ~ ch[cfont][z[xx]][yy + 1];
- Logger::log_scrollchar(Common::String(z[xx]));
- }
- }
+ _vm->_gyro.super_on();
+ _vm->_gyro.ledstatus = x;
+}
+
+void Scrolls::easteregg() {
+ uint16 fv, ff;
+
+ warning("STUB: Scrolls::easteregg(). Calls of Pascal units need to be removed.");
+
+ /* background(15);
+ for (fv = 4; fv <= 100; fv ++)
+ for (ff = 0; ff <= 70; ff ++) {
+ sound(fv * 100 + ff * 10);
+ delay(1);
+ }
+ nosound;
+ setcolor(10);
+ settextstyle(0, 0, 3);
+ settextjustify(1, 1);
+ outtextxy(320, 100, "GIED");
+ settextstyle(0, 0, 1);
+ settextjustify(0, 2);*/
+
+ _vm->_gyro.background(0);
+}
+
+void Scrolls::say(int16 x, int16 y, Common::String z) { /* Fancy FAST screenwriting */
+ const int16 locol = 2;
+ byte xx, yy, ox, bit, lz, t;
+ int16 yp;
+ bool offset;
+ byte itw[12][80];
+
+ offset = x % 8 == 4;
+ x = x / 8;
+ lz = z.size();
+ ox = 0;
+ _vm->_logger.log_scrollline();
+
+ for (xx = 1; xx <= lz; xx ++) {
+ switch (z[xx]) {
+ case '\22': {
+ cfont = roman;
+ _vm->_logger.log_roman();
+ }
+ break;
+ case '\6': {
+ cfont = italic;
+ _vm->_logger.log_italic();
+ }
+ break;
+ default: {
+ ox += 1;
+ for (yy = 1; yy <= 12; yy ++) itw[yy][ox] = ~ ch[cfont][z[xx]][yy + 1];
+ _vm->_logger.log_scrollchar(Common::String(z[xx]));
+ }
}
+ }
- lz = ox;
- if (offset) {
- /* offsetting routine */
- lz += 1;
- for (yy = 1; yy <= 12; yy ++) {
- bit = 240;
- itw[yy][lz] = 255;
- for (xx = 1; xx <= lz; xx ++) {
- t = itw[yy][xx];
- itw[yy][xx] = bit + t / 16;
- bit = t << 4;
- }
+ lz = ox;
+ if (offset) {
+ /* offsetting routine */
+ lz += 1;
+ for (yy = 1; yy <= 12; yy ++) {
+ bit = 240;
+ itw[yy][lz] = 255;
+ for (xx = 1; xx <= lz; xx ++) {
+ t = itw[yy][xx];
+ itw[yy][xx] = bit + t / 16;
+ bit = t << 4;
}
}
- yp = x + y * 80 + (1 - Gyro::cp) * Gyro::pagetop;
- for (yy = 1; yy <= 12; yy ++) {
- yp += 80;
- for (bit = 0; bit <= locol; bit ++) {
- /*port[0x3c4] = 2;
- port[0x3ce] = 4;
- port[0x3c5] = 1 << bit;
- port[0x3cf] = bit;
- move(itw[yy], mem[0xa000 * yp], lz);
+ }
+ yp = x + y * 80 + (1 - _vm->_gyro.cp) * _vm->_gyro.pagetop;
+ for (yy = 1; yy <= 12; yy ++) {
+ yp += 80;
+ for (bit = 0; bit <= locol; bit ++) {
+ /*port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(itw[yy], mem[0xa000 * yp], lz);
- Some old Pascal-ish. To be removed. */
+ Some old Pascal-ish. To be removed. */
- warning("STUB: Scrolls::say()");
- }
+ warning("STUB: Scrolls::say()");
}
-
}
- /* Here are the procedures that Scroll calls */ /* So they must be... */ /*$F+*/
+}
- void normscroll() {
- warning("STUB: Scrolls::normscroll()");
- }
+/* Here are the procedures that Scroll calls */ /* So they must be... */ /*$F+*/
- void dialogue() {
- warning("STUB: Scrolls::dialogue()");
- }
+void Scrolls::normscroll() {
+ warning("STUB: Scrolls::normscroll()");
+}
- void music_scroll();
+void Scrolls::dialogue() {
+ warning("STUB: Scrolls::dialogue()");
+}
- static void store_(byte what, Gyro::tunetype &played) {
- memcpy(played, played+1, sizeof(played) - 1);
- played[30] = what;
- }
+void Scrolls::store_(byte what, tunetype &played) {
+ memcpy(played, played+1, sizeof(played) - 1);
+ played[30] = what;
+}
- static bool they_match(Gyro::tunetype &played) {
- byte fv, mistakes;
- bool they_match_result;
- mistakes = 0;
- for (fv = 1; fv <= sizeof(played); fv ++)
- if (played[fv] != Gyro::tune[fv]) {
- mistakes++;
- }
+bool Scrolls::they_match(tunetype &played) {
+ byte fv, mistakes;
- they_match_result = mistakes < 5;
- return they_match_result;
- }
+ bool they_match_result;
+ mistakes = 0;
- void music_scroll() {
- char r;
- byte value;
-
- byte last_one, this_one;
-
- Gyro::tunetype played;
-
-
- state(3);
- Gyro::seescroll = true;
- Gyro::on();
- Gyro::newpointer(4);
- //do {
- //do {
- // Gyro::check(); /* was "checkclick;" */
- // if (Enhanced::keypressede()) break;
- //} while (!(Gyro::mpress > 0) || buttona1() || buttonb1());
- //
- // Needs joystick - not sure it will be implemented.
-
- //if (Gyro::mpress == 0) {
- // inkey(); Needs Lucerna to proceed.
- //
- //}
- //}
-
- }
+ for (fv = 1; fv <= sizeof(played); fv ++)
+ if (played[fv] != Gyro::tune[fv]) {
+ mistakes++;
+ }
+
+ they_match_result = mistakes < 5;
+ return they_match_result;
+}
+
+void Scrolls::music_scroll() {
+ char r;
+ byte value;
+
+ byte last_one, this_one;
+
+ tunetype played;
+
+
+ state(3);
+ _vm->_gyro.seescroll = true;
+ _vm->_gyro.on();
+ _vm->_gyro.newpointer(4);
+ //do {
+ //do {
+ // Gyro::check(); /* was "checkclick;" */
+ // if (Enhanced::keypressede()) break;
+ //} while (!(Gyro::mpress > 0) || buttona1() || buttonb1());
+ //
+ // Needs joystick - not sure it will be implemented.
+ //if (Gyro::mpress == 0) {
+ // inkey(); Needs Lucerna to proceed.
+ //
+ //}
+ //}
+}
@@ -255,8 +249,6 @@ namespace Avalanche {
-
- } // End of namespace Scrolls
} // End of namespace Avalanche
diff --git a/engines/avalanche/scrolls2.h b/engines/avalanche/scrolls2.h
index 07038335bd..914e463f3f 100644
--- a/engines/avalanche/scrolls2.h
+++ b/engines/avalanche/scrolls2.h
@@ -34,20 +34,23 @@
// #include "avalanche/joystick2.h" - Will be implemented later, if it will be implemented at all...
namespace Avalanche {
+class AvalancheEngine;
- namespace Scrolls {
+class Scrolls {
+public:
+ bool aboutscroll; /* Is this the about box? */
- // Call it where Scrolls are first used.
- // Procuded to replace the initizalization part of the original Pascal unit.
- void initialize_scrolls();
- const bool aboutscroll = false; /* Is this the about box? */
+
+ Scrolls();
+
+ void setParent(AvalancheEngine *vm);
void state(byte x); /* Sets "Ready" light to whatever */
- void drawscroll(Gyro::proc gotoit); /* This is one of the oldest procs in the game. */
+ void drawscroll(proc gotoit); /* This is one of the oldest procs in the game. */
- void bubble(Gyro::proc gotoit);
+ void bubble(proc gotoit);
void resetscroll();
@@ -65,7 +68,39 @@ namespace Avalanche {
void musical_scroll();
- } // End of namespace Scrolls
+private:
+ AvalancheEngine *_vm;
+
+ static const int16 roman;
+ static const int16 italic;
+
+ static const int16 halficonwidth; /* Half the width of an icon. */
+
+ int16 dix, diy;
+ raw ch[2];
+ byte cfont; /* Current font */
+
+ int16 dodgex, dodgey;
+ byte param; /* For using arguments code */
+
+ byte use_icon;
+
+ void easteregg();
+
+ void say(int16 x, int16 y, Common::String z);
+
+ void normscroll();
+
+ void dialogue();
+
+ void store_(byte what, tunetype &played);
+
+ bool they_match(tunetype &played);
+
+ void music_scroll();
+
+
+};
} // End of namespace Avalanche