aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/avalanche/1stoff.cpp92
-rw-r--r--engines/avalanche/access.cpp288
-rw-r--r--engines/avalanche/access.h2
-rw-r--r--engines/avalanche/acci.cpp3201
-rw-r--r--engines/avalanche/acci.h397
-rw-r--r--engines/avalanche/also.cpp2216
-rw-r--r--engines/avalanche/andexor.cpp217
-rw-r--r--engines/avalanche/andexor2.cpp244
-rw-r--r--engines/avalanche/andextst.cpp117
-rw-r--r--engines/avalanche/arch.cpp164
-rw-r--r--engines/avalanche/arch.h2
-rw-r--r--engines/avalanche/avalot9.cpp181
-rw-r--r--engines/avalanche/avbkgrnd.cpp168
-rw-r--r--engines/avalanche/avmenu.cpp478
-rw-r--r--engines/avalanche/avvyans.cpp165
-rw-r--r--engines/avalanche/avvyans2.cpp374
-rw-r--r--engines/avalanche/avvymonk.cpp143
-rw-r--r--engines/avalanche/bakchunk.cpp45
-rw-r--r--engines/avalanche/basher.cpp633
-rw-r--r--engines/avalanche/basher.h20
-rw-r--r--engines/avalanche/cadburys.cpp193
-rw-r--r--engines/avalanche/cadburys.h32
-rw-r--r--engines/avalanche/celer.cpp686
-rw-r--r--engines/avalanche/celer.h40
-rw-r--r--engines/avalanche/ch_egats.cpp71
-rw-r--r--engines/avalanche/charmap.cpp46
-rw-r--r--engines/avalanche/chunker.cpp111
-rw-r--r--engines/avalanche/chunkxf1.cpp139
-rw-r--r--engines/avalanche/chunkxf2.cpp328
-rw-r--r--engines/avalanche/chunkxf3.cpp248
-rw-r--r--engines/avalanche/chunkxf4.cpp511
-rw-r--r--engines/avalanche/chunkxf5.cpp466
-rw-r--r--engines/avalanche/chunkxf6.cpp477
-rw-r--r--engines/avalanche/chunkxf7.cpp451
-rw-r--r--engines/avalanche/chunkxf8.cpp453
-rw-r--r--engines/avalanche/chunkxf9.cpp453
-rw-r--r--engines/avalanche/chunkxfa.cpp459
-rw-r--r--engines/avalanche/chunkxfb.cpp455
-rw-r--r--engines/avalanche/chunkxfc.cpp451
-rw-r--r--engines/avalanche/chunkxfd.cpp451
-rw-r--r--engines/avalanche/chunkxfe.cpp451
-rw-r--r--engines/avalanche/chunkxff.cpp451
-rw-r--r--engines/avalanche/chunkxfg.cpp451
-rw-r--r--engines/avalanche/chunkxfh.cpp453
-rw-r--r--engines/avalanche/chunkxfi.cpp459
-rw-r--r--engines/avalanche/chunkxfj.cpp432
-rw-r--r--engines/avalanche/chunkxfk.cpp432
-rw-r--r--engines/avalanche/chunkxfl.cpp223
-rw-r--r--engines/avalanche/clock.cpp105
-rw-r--r--engines/avalanche/closing.cpp160
-rw-r--r--engines/avalanche/closing.h4
-rw-r--r--engines/avalanche/convert.cpp145
-rw-r--r--engines/avalanche/convmous.cpp149
-rw-r--r--engines/avalanche/credits.cpp149
-rw-r--r--engines/avalanche/displtxt.cpp54
-rw-r--r--engines/avalanche/dropdown.cpp1469
-rw-r--r--engines/avalanche/dropdown.h104
-rw-r--r--engines/avalanche/dwidth.cpp25
-rw-r--r--engines/avalanche/edhead.cpp141
-rw-r--r--engines/avalanche/edna.cpp572
-rw-r--r--engines/avalanche/enhanced.cpp86
-rw-r--r--engines/avalanche/enhanced.h4
-rw-r--r--engines/avalanche/enid.cpp806
-rw-r--r--engines/avalanche/enid.h2
-rw-r--r--engines/avalanche/filer.cpp1495
-rw-r--r--engines/avalanche/fileunit.cpp1991
-rw-r--r--engines/avalanche/fileunit.h2
-rw-r--r--engines/avalanche/filing.cpp252
-rw-r--r--engines/avalanche/folktemp.cpp95
-rw-r--r--engines/avalanche/fontslid.cpp34
-rw-r--r--engines/avalanche/frere.cpp126
-rw-r--r--engines/avalanche/g-room.cpp751
-rw-r--r--engines/avalanche/golden.cpp804
-rw-r--r--engines/avalanche/gyro.cpp976
-rw-r--r--engines/avalanche/gyro.h859
-rw-r--r--engines/avalanche/help.cpp461
-rw-r--r--engines/avalanche/help2.cpp449
-rw-r--r--engines/avalanche/helpbak.cpp273
-rw-r--r--engines/avalanche/helpbak.h2
-rw-r--r--engines/avalanche/helper.cpp506
-rw-r--r--engines/avalanche/helper.h2
-rw-r--r--engines/avalanche/hibits.cpp44
-rw-r--r--engines/avalanche/highs.cpp153
-rw-r--r--engines/avalanche/highs.h6
-rw-r--r--engines/avalanche/hiz.cpp537
-rw-r--r--engines/avalanche/incline.cpp233
-rw-r--r--engines/avalanche/incline.h2
-rw-r--r--engines/avalanche/initxf.cpp43
-rw-r--r--engines/avalanche/inputtes.cpp67
-rw-r--r--engines/avalanche/intro.cpp991
-rw-r--r--engines/avalanche/ints.cpp34
-rw-r--r--engines/avalanche/joysetup.cpp168
-rw-r--r--engines/avalanche/joystick.cpp203
-rw-r--r--engines/avalanche/joystick.h6
-rw-r--r--engines/avalanche/loading.cpp34
-rw-r--r--engines/avalanche/logger.cpp321
-rw-r--r--engines/avalanche/logger.h6
-rw-r--r--engines/avalanche/lucerna.cpp2497
-rw-r--r--engines/avalanche/lucerna.h72
-rw-r--r--engines/avalanche/magic2.cpp59
-rw-r--r--engines/avalanche/magidraw.cpp49
-rw-r--r--engines/avalanche/magishuf.cpp89
-rw-r--r--engines/avalanche/make!.cpp107
-rw-r--r--engines/avalanche/makesez.cpp67
-rw-r--r--engines/avalanche/makevmou.cpp455
-rw-r--r--engines/avalanche/menuxf.cpp75
-rw-r--r--engines/avalanche/minstran.cpp72
-rw-r--r--engines/avalanche/newsprit.cpp196
-rw-r--r--engines/avalanche/nim.cpp741
-rw-r--r--engines/avalanche/nimdraw.cpp181
-rw-r--r--engines/avalanche/nimunit.cpp820
-rw-r--r--engines/avalanche/nimunit.h8
-rw-r--r--engines/avalanche/oldfiler.cpp453
-rw-r--r--engines/avalanche/oldhighs.cpp435
-rw-r--r--engines/avalanche/oldincln.cpp387
-rw-r--r--engines/avalanche/oldincln.h2
-rw-r--r--engines/avalanche/oldtrip.cpp979
-rw-r--r--engines/avalanche/oldtrip.h89
-rw-r--r--engines/avalanche/omtest.cpp312
-rw-r--r--engines/avalanche/oopmenu.cpp506
-rw-r--r--engines/avalanche/oopmenu.h92
-rw-r--r--engines/avalanche/overlap.cpp86
-rw-r--r--engines/avalanche/overscro.cpp107
-rw-r--r--engines/avalanche/particle.cpp459
-rw-r--r--engines/avalanche/pictemp.cpp116
-rw-r--r--engines/avalanche/pictemp2.cpp106
-rw-r--r--engines/avalanche/pingo.cpp369
-rw-r--r--engines/avalanche/pingo.h4
-rw-r--r--engines/avalanche/plottest.cpp75
-rw-r--r--engines/avalanche/preview1.cpp180
-rw-r--r--engines/avalanche/qintro.cpp379
-rw-r--r--engines/avalanche/qstars.cpp425
-rw-r--r--engines/avalanche/rawupd.cpp104
-rw-r--r--engines/avalanche/readsez.cpp130
-rw-r--r--engines/avalanche/reginam.cpp136
-rw-r--r--engines/avalanche/sackb1.cpp47
-rw-r--r--engines/avalanche/sackb1.h2
-rw-r--r--engines/avalanche/sackb3.cpp29
-rw-r--r--engines/avalanche/sackblas.cpp2
-rw-r--r--engines/avalanche/saving.cpp80
-rw-r--r--engines/avalanche/scr_1.cpp162
-rw-r--r--engines/avalanche/scr_2.cpp198
-rw-r--r--engines/avalanche/scr_3.cpp160
-rw-r--r--engines/avalanche/scr_4.cpp150
-rw-r--r--engines/avalanche/scr_5.cpp173
-rw-r--r--engines/avalanche/scr_9.cpp26
-rw-r--r--engines/avalanche/scrolls.cpp1414
-rw-r--r--engines/avalanche/scrolls.h2
-rw-r--r--engines/avalanche/sequence.cpp109
-rw-r--r--engines/avalanche/sequence.h6
-rw-r--r--engines/avalanche/setup.cpp1998
-rw-r--r--engines/avalanche/seu.cpp1597
-rw-r--r--engines/avalanche/seu_avvy.cpp130
-rw-r--r--engines/avalanche/sez.cpp2
-rw-r--r--engines/avalanche/sezedit.cpp783
-rw-r--r--engines/avalanche/sezunit.cpp117
-rw-r--r--engines/avalanche/sezunit.h16
-rw-r--r--engines/avalanche/sezxfr.cpp194
-rw-r--r--engines/avalanche/shell1.cpp51
-rw-r--r--engines/avalanche/shell2.cpp36
-rw-r--r--engines/avalanche/slope.cpp529
-rw-r--r--engines/avalanche/spread.cpp591
-rw-r--r--engines/avalanche/spread2.cpp1771
-rw-r--r--engines/avalanche/squish.cpp575
-rw-r--r--engines/avalanche/ss_blank.cpp60
-rw-r--r--engines/avalanche/ss_clock.cpp151
-rw-r--r--engines/avalanche/stars.cpp1030
-rw-r--r--engines/avalanche/status.cpp62
-rw-r--r--engines/avalanche/sticks.cpp154
-rw-r--r--engines/avalanche/sticks.h4
-rw-r--r--engines/avalanche/sunrise.cpp95
-rw-r--r--engines/avalanche/tempo.cpp112
-rw-r--r--engines/avalanche/test.cpp24
-rw-r--r--engines/avalanche/test2.cpp23
-rw-r--r--engines/avalanche/testblit.cpp74
-rw-r--r--engines/avalanche/testcard.cpp88
-rw-r--r--engines/avalanche/testenh.cpp31
-rw-r--r--engines/avalanche/timeout.cpp1019
-rw-r--r--engines/avalanche/timeout.h94
-rw-r--r--engines/avalanche/travel.cpp100
-rw-r--r--engines/avalanche/trip.cpp252
-rw-r--r--engines/avalanche/trip.h14
-rw-r--r--engines/avalanche/trip3.cpp483
-rw-r--r--engines/avalanche/trip3.h16
-rw-r--r--engines/avalanche/trip42.cpp959
-rw-r--r--engines/avalanche/trip42.h78
-rw-r--r--engines/avalanche/trip5.cpp3366
-rw-r--r--engines/avalanche/trip5.h166
-rw-r--r--engines/avalanche/trip5tst.cpp232
-rw-r--r--engines/avalanche/trip5xf.cpp295
-rw-r--r--engines/avalanche/tripoop.cpp498
-rw-r--r--engines/avalanche/ttmenuxf.cpp227
-rw-r--r--engines/avalanche/unsquish.cpp685
-rw-r--r--engines/avalanche/viewdocs.cpp948
-rw-r--r--engines/avalanche/visa.cpp436
-rw-r--r--engines/avalanche/visa.h2
-rw-r--r--engines/avalanche/visatest.cpp125
-rw-r--r--engines/avalanche/waver.cpp2
-rw-r--r--engines/avalanche/xf_gover.cpp143
-rw-r--r--engines/avalanche/xf_help.cpp107
-rw-r--r--engines/avalanche/xf_visa.cpp244
-rw-r--r--engines/avalanche/xfbutton.cpp101
-rw-r--r--engines/avalanche/xfghost.cpp401
-rw-r--r--engines/avalanche/zapdraw.cpp53
204 files changed, 38190 insertions, 32054 deletions
diff --git a/engines/avalanche/1stoff.cpp b/engines/avalanche/1stoff.cpp
index 0f9e19b940..9748605503 100644
--- a/engines/avalanche/1stoff.cpp
+++ b/engines/avalanche/1stoff.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,55 +30,59 @@
namespace Avalanche {
-matrix<1,7,1,3,byte> cols;
+matrix<1, 7, 1, 3, byte> cols;
byte fv;
-void adjust()
-{
- registers r;
-;
- {;
- ax=0x1012;
- bx=1;
- cx=2;
- es=seg(cols);
- dx=ofs(cols);
+void adjust() {
+ registers r;
+ ;
+ {
+ ;
+ ax = 0x1012;
+ bx = 1;
+ cx = 2;
+ es = seg(cols);
+ dx = ofs(cols);
- }
+ }
- intr(0x10,r);
+ intr(0x10, r);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- textattr=0;
- clrscr;
-
- fillchar(cols,sizeof(cols),'\0');
- adjust();
-
- gotoxy(29,10); textattr=1; output << "Thorsoft of Letchworth";
- gotoxy(36,12); textattr=2; output << "presents";
-
- for( fv=1; fv <= 77; fv ++)
- {;
- delay(77);
- if (fv<64) fillchar(cols[1],3,chr(fv));
- if (fv>14) fillchar(cols[2],3,chr(fv-14));
- adjust();
- }
-
- delay(100);
-
- for( fv=63; fv >= 1; fv --)
- {;
- fillchar(cols,sizeof(cols),chr(fv));
- delay(37);
- adjust();
- }
-
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ textattr = 0;
+ clrscr;
+
+ fillchar(cols, sizeof(cols), '\0');
+ adjust();
+
+ gotoxy(29, 10);
+ textattr = 1;
+ output << "Thorsoft of Letchworth";
+ gotoxy(36, 12);
+ textattr = 2;
+ output << "presents";
+
+ for (fv = 1; fv <= 77; fv ++) {
+ ;
+ delay(77);
+ if (fv < 64) fillchar(cols[1], 3, chr(fv));
+ if (fv > 14) fillchar(cols[2], 3, chr(fv - 14));
+ adjust();
+ }
+
+ delay(100);
+
+ for (fv = 63; fv >= 1; fv --) {
+ ;
+ fillchar(cols, sizeof(cols), chr(fv));
+ delay(37);
+ adjust();
+ }
+
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/access.cpp b/engines/avalanche/access.cpp
index 951bc1c818..abc944f4dc 100644
--- a/engines/avalanche/access.cpp
+++ b/engines/avalanche/access.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -49,148 +49,160 @@ namespace Avalanche {
boolean int_say_went_ok;
void int_say(string filename, boolean bubble)
- /* Internal use ONLY! */
+/* Internal use ONLY! */
{
- untyped_file f;
-;
- /*$I-*/
- assign(f,filename);
- reset(f,1);
- if (ioresult!=0)
- {;
- int_say_went_ok=false;
- return;
- }
- bufsize=filesize(f);
- blockread(f,buffer,bufsize);
- if (bubble)
- {;
- bufsize += 1;
- buffer[bufsize]='\2';
- }
- close(f);
- /*$I+*/
-
- calldrivers;
-
- int_say_went_ok=true;
+ untyped_file f;
+ ;
+ /*$I-*/
+ assign(f, filename);
+ reset(f, 1);
+ if (ioresult != 0) {
+ ;
+ int_say_went_ok = false;
+ return;
+ }
+ bufsize = filesize(f);
+ blockread(f, buffer, bufsize);
+ if (bubble) {
+ ;
+ bufsize += 1;
+ buffer[bufsize] = '\2';
+ }
+ close(f);
+ /*$I+*/
+
+ calldrivers;
+
+ int_say_went_ok = true;
}
-void dixi(char p, byte n)
-{; exit(153);
- int_say(string('s')+p+strf(n)+".raw",false);
+void dixi(char p, byte n) {
+ ;
+ exit(153);
+ int_say(string('s') + p + strf(n) + ".raw", false);
}
-void talkto(byte whom)
-{
- byte fv;
- boolean no_matches;
-; exit(153);
- if (person==pardon)
- {;
- person=chr(subjnumber);
- subjnumber=0;
- }
-
- switch (chr(whom)) {
- case pspludwick:
-
- if ((dna.lustie_is_asleep) & (~ dna.obj[potion]))
- {;
- dixi('q',68);
- dna.obj[potion]=true;
- objectlist; points(3); return;
- } else
- {;
- if (dna.talked_to_crapulus)
- switch (dna.given2spludwick) { /* Spludwick - what does he need? */
- /* 0 - let it through to use normal routine. */
- case RANGE_2(1,2): {;
- display(string("Can you get me ")+
- get_better(spludwick_order[dna.given2spludwick])+", please?"+
- "\232\2");
- return;
- }
- break;
- case 3: {;
- dixi('q',30); /* need any help with the game? */
- return;
- }
- break;
- }
- else dixi('q',42); /* Haven't talked to Crapulus. Go and talk to him. */
- }
- break;
-
- case pibythneth: if (dna.givenbadgetoiby)
- {;
- dixi('q',33); /* Thanks a lot! */
- return; /* And leave the proc. */
- }
- break; /* Or... just continue, 'cos he hasn't got it. */
- case pdogfood: if (dna.wonnim)
- {; /* We've won the game. */
- dixi('q',6); /* "I'm Not Playing!" */
- return; /* Zap back. */
- }
- break;
- case payles: if (~ dna.ayles_is_awake)
- {;
- dixi('q',43); /* He's fast asleep! */
- return;
- }
- break;
- case pgeida: if (dna.geida_given_potion)
- dna.geida_follows=true; else
- {;
- dixi('u',17);
- return;
- }
- break;
- }
-
- if (whom>149) whom -= 149;
-
- no_matches=true;
- for( fv=1; fv <= numtr; fv ++)
- if (tr[fv].a.accinum==whom)
- {;
- display(string('\23')+chr(fv+48)+'\4');
- no_matches=false;
- flush();
- }
-
- if (no_matches) display("\23\23\4");
-
- if (subjnumber==0) /* For the moment... later we'll parse "say". */
- int_say(string("ss")+strf(whom)+".raw",true);
- else
- {;
- int_say(string("ss")+strf(whom)+'-'+strf(subjnumber)+".raw",true);
- if (! int_say_went_ok) /* File not found! */
- dixi('n',whom);
- }
-
- switch (chr(whom+149)) {
- case pcrapulus:
- {; /* Crapulus: get the badge - first time only */
- dna.obj[badge]=true;
- objectlist;
- dixi('q',1); /* Circular from Cardiff. */
- dna.talked_to_crapulus=true;
-
- whereis[pcrapulus]=177; /* Crapulus walks off. */
-
- tr[2].vanishifstill=true;
- tr[2].walkto(4); /* Walks away. */
-
- points(2);
- }
- break;
-
- case payles: dixi('q',44); break; /* Can you get me a pen? */
-
- }
+void talkto(byte whom) {
+ byte fv;
+ boolean no_matches;
+ ;
+ exit(153);
+ if (person == pardon) {
+ ;
+ person = chr(subjnumber);
+ subjnumber = 0;
+ }
+
+ switch (chr(whom)) {
+ case pspludwick:
+
+ if ((dna.lustie_is_asleep) & (~ dna.obj[potion])) {
+ ;
+ dixi('q', 68);
+ dna.obj[potion] = true;
+ objectlist;
+ points(3);
+ return;
+ } else {
+ ;
+ if (dna.talked_to_crapulus)
+ switch (dna.given2spludwick) { /* Spludwick - what does he need? */
+ /* 0 - let it through to use normal routine. */
+ case RANGE_2(1, 2): {
+ ;
+ display(string("Can you get me ") +
+ get_better(spludwick_order[dna.given2spludwick]) + ", please?" +
+ "\232\2");
+ return;
+ }
+ break;
+ case 3: {
+ ;
+ dixi('q', 30); /* need any help with the game? */
+ return;
+ }
+ break;
+ }
+ else dixi('q', 42); /* Haven't talked to Crapulus. Go and talk to him. */
+ }
+ break;
+
+ case pibythneth:
+ if (dna.givenbadgetoiby) {
+ ;
+ dixi('q', 33); /* Thanks a lot! */
+ return; /* And leave the proc. */
+ }
+ break; /* Or... just continue, 'cos he hasn't got it. */
+ case pdogfood:
+ if (dna.wonnim) {
+ ; /* We've won the game. */
+ dixi('q', 6); /* "I'm Not Playing!" */
+ return; /* Zap back. */
+ }
+ break;
+ case payles:
+ if (~ dna.ayles_is_awake) {
+ ;
+ dixi('q', 43); /* He's fast asleep! */
+ return;
+ }
+ break;
+ case pgeida:
+ if (dna.geida_given_potion)
+ dna.geida_follows = true;
+ else {
+ ;
+ dixi('u', 17);
+ return;
+ }
+ break;
+ }
+
+ if (whom > 149) whom -= 149;
+
+ no_matches = true;
+ for (fv = 1; fv <= numtr; fv ++)
+ if (tr[fv].a.accinum == whom) {
+ ;
+ display(string('\23') + chr(fv + 48) + '\4');
+ no_matches = false;
+ flush();
+ }
+
+ if (no_matches) display("\23\23\4");
+
+ if (subjnumber == 0) /* For the moment... later we'll parse "say". */
+ int_say(string("ss") + strf(whom) + ".raw", true);
+ else {
+ ;
+ int_say(string("ss") + strf(whom) + '-' + strf(subjnumber) + ".raw", true);
+ if (! int_say_went_ok) /* File not found! */
+ dixi('n', whom);
+ }
+
+ switch (chr(whom + 149)) {
+ case pcrapulus: {
+ ; /* Crapulus: get the badge - first time only */
+ dna.obj[badge] = true;
+ objectlist;
+ dixi('q', 1); /* Circular from Cardiff. */
+ dna.talked_to_crapulus = true;
+
+ whereis[pcrapulus] = 177; /* Crapulus walks off. */
+
+ tr[2].vanishifstill = true;
+ tr[2].walkto(4); /* Walks away. */
+
+ points(2);
+ }
+ break;
+
+ case payles:
+ dixi('q', 44);
+ break; /* Can you get me a pen? */
+
+ }
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/access.h b/engines/avalanche/access.h
index e985953c7f..2e4a081773 100644
--- a/engines/avalanche/access.h
+++ b/engines/avalanche/access.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/acci.cpp b/engines/avalanche/acci.cpp
index f33d7c2ea0..adaad697d4 100644
--- a/engines/avalanche/acci.cpp
+++ b/engines/avalanche/acci.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -58,42 +58,43 @@ namespace Avalanche {
byte fv;
string wordnum(string x);
-static char whatsit;
-static word fv;
+static char whatsit;
+static word fv;
static boolean gotcha;
-static void checkword(string& x) /* Checks word "fv". */
-{
- {
- vocab& with = words[fv];
+static void checkword(string &x) { /* Checks word "fv". */
+ {
+ vocab &with = words[fv];
- if ((with.w==x) || ((copy(with.w,1,length(x))==x) && ! gotcha))
- whatsit=chr(with.n);
- if (with.w==x) gotcha=true;
- }
+ if ((with.w == x) || ((copy(with.w, 1, length(x)) == x) && ! gotcha))
+ whatsit = chr(with.n);
+ if (with.w == x) gotcha = true;
+ }
}
string wordnum(string x)
{
- string wordnum_result;
- if (x=="") { wordnum_result=""; return wordnum_result; }
- whatsit=pardon; gotcha=false;
- for( fv=nowords; fv >= 1; fv --) checkword(x);
- wordnum_result=whatsit;
- return wordnum_result;
+ string wordnum_result;
+ if (x == "") {
+ wordnum_result = "";
+ return wordnum_result;
+ }
+ whatsit = pardon;
+ gotcha = false;
+ for (fv = nowords; fv >= 1; fv --) checkword(x);
+ wordnum_result = whatsit;
+ return wordnum_result;
}
-void replace(string old1,string new1)
-{
- byte q;
-
- q=pos(old1,thats);
- while (q!=0)
- {
- thats=copy(thats,1,q-1)+new1+copy(thats,q+length(old1),255);
- q=pos(old1,thats);
- }
+void replace(string old1, string new1) {
+ byte q;
+
+ q = pos(old1, thats);
+ while (q != 0) {
+ thats = copy(thats, 1, q - 1) + new1 + copy(thats, q + length(old1), 255);
+ q = pos(old1, thats);
+ }
}
/*procedure ninetydump;
@@ -112,1588 +113,1844 @@ begin
display('Dumped.');
end;*/
-string rank()
-{
- byte fv;
-
- string rank_result;
- for( fv=1; fv <= 8; fv ++)
- if ((dna.score>=ranks[fv].score)
- && (dna.score<ranks[fv+1].score))
- {
- rank_result=ranks[fv].title;
- return rank_result;
- }
- return rank_result;
+string rank() {
+ byte fv;
+
+ string rank_result;
+ for (fv = 1; fv <= 8; fv ++)
+ if ((dna.score >= ranks[fv].score)
+ && (dna.score < ranks[fv + 1].score)) {
+ rank_result = ranks[fv].title;
+ return rank_result;
+ }
+ return rank_result;
}
-string totaltime()
-{
- const real ticks_in_1_sec = (real)(65535)/3600;
- word h,m,s; varying_string<70> a;
-
- /* There are 65535 clock ticks in a second,
- 1092.25 in a minute, and
- 65535 in an hour. */
- string totaltime_result;
- h=trunc(dna.total_time/ticks_in_1_sec); /* No. of seconds. */
- m=h % 3600; h=h / 3600;
- s=m % 60; m=m / 60;
-
- a="You've been playing for ";
-
- if (h>0) a=a+strf(h)+" hours, ";
- if ((m>0) || (h!=0)) a=a+strf(m)+" minutes and ";
- a=a+strf(s)+" seconds.";
-
- totaltime_result=a;
- return totaltime_result;
+string totaltime() {
+ const real ticks_in_1_sec = (real)(65535) / 3600;
+ word h, m, s;
+ varying_string<70> a;
+
+ /* There are 65535 clock ticks in a second,
+ 1092.25 in a minute, and
+ 65535 in an hour. */
+ string totaltime_result;
+ h = trunc(dna.total_time / ticks_in_1_sec); /* No. of seconds. */
+ m = h % 3600;
+ h = h / 3600;
+ s = m % 60;
+ m = m / 60;
+
+ a = "You've been playing for ";
+
+ if (h > 0) a = a + strf(h) + " hours, ";
+ if ((m > 0) || (h != 0)) a = a + strf(m) + " minutes and ";
+ a = a + strf(s) + " seconds.";
+
+ totaltime_result = a;
+ return totaltime_result;
}
void cheatparse(string codes);
-static word num;
+static word num;
static integer e;
-static void number(string& codes)
-{
- val(codes,num,e);
+static void number(string &codes) {
+ val(codes, num, e);
}
-void cheatparse(string codes)
-{
- char cmd;integer se,sx,sy;
-
- if (~ cheat)
- { /* put them off the scent! */
- display("Have you gone dotty\??!");
- return;
- }
- cmd=upcase(codes[2]); Delete(codes,1,2); /* strip header */
- display("\6Ninety: \22\4");
- switch (cmd) {
- case 'R': {
- number(codes); if (e!=0) return;
- display(string("room swap to ")+codes+'.');
- fliproom(num,1);
- }
- break;
- case 'Z': { zonk; display("Zonk OK!"); } break;
- case 'W': { wobble; display("Ow my head!"); } break;
- case 'A': {
- tr[1].done;
- tr[1].init(1,true);
- dna.user_moves_avvy=true;
- alive=true;
- display("Reincat.");
- }
- break;
- case 'B': {
- sx=tr[1].x;
- sy=tr[1].y;
- se=tr[1].face;
- delavvy;
- number(codes);
- {
- void& with = tr[1];
-
- done;
- init(num,true);
- display(string("Become ")+codes+':'+"\r\r"+a.name+'\15'+a.comment);
- appear(sx,sy,se);
- }
- }
- break;
-/* 'D': ninetydump;*/
- case 'G': play_nim; break;
- case '±': display("\232\25"); break;
- default: display("unknown code!");
- }
+void cheatparse(string codes) {
+ char cmd;
+ integer se, sx, sy;
+
+ if (~ cheat) {
+ /* put them off the scent! */
+ display("Have you gone dotty\??!");
+ return;
+ }
+ cmd = upcase(codes[2]);
+ Delete(codes, 1, 2); /* strip header */
+ display("\6Ninety: \22\4");
+ switch (cmd) {
+ case 'R': {
+ number(codes);
+ if (e != 0) return;
+ display(string("room swap to ") + codes + '.');
+ fliproom(num, 1);
+ }
+ break;
+ case 'Z': {
+ zonk;
+ display("Zonk OK!");
+ }
+ break;
+ case 'W': {
+ wobble;
+ display("Ow my head!");
+ }
+ break;
+ case 'A': {
+ tr[1].done;
+ tr[1].init(1, true);
+ dna.user_moves_avvy = true;
+ alive = true;
+ display("Reincat.");
+ }
+ break;
+ case 'B': {
+ sx = tr[1].x;
+ sy = tr[1].y;
+ se = tr[1].face;
+ delavvy;
+ number(codes);
+ {
+ void &with = tr[1];
+
+ done;
+ init(num, true);
+ display(string("Become ") + codes + ':' + "\r\r" + a.name + '\15' + a.comment);
+ appear(sx, sy, se);
+ }
+ }
+ break;
+ /* 'D': ninetydump;*/
+ case 'G':
+ play_nim;
+ break;
+ case '±':
+ display("\232\25");
+ break;
+ default:
+ display("unknown code!");
+ }
}
-void punctustrip(string& x) /* Strips punctuation from x. */
-{
- const varying_string<32> punct = "~`!@#$%^&*()_+-={}[]:\"|;'\\,./<>?";
- byte fv,p;
-
- for( fv=1; fv <= 32; fv ++)
- do {
- p=pos(punct[fv-1],x);
- if (p==0) flush(); /* <<< The first time I've ever used it! */
- Delete(x,p,1);
- } while (!false);
+void punctustrip(string &x) { /* Strips punctuation from x. */
+ const varying_string<32> punct = "~`!@#$%^&*()_+-={}[]:\"|;'\\,./<>?";
+ byte fv, p;
+
+ for (fv = 1; fv <= 32; fv ++)
+ do {
+ p = pos(punct[fv - 1], x);
+ if (p == 0) flush(); /* <<< The first time I've ever used it! */
+ Delete(x, p, 1);
+ } while (!false);
}
boolean do_pronouns();
static boolean ambiguous;
-static void displaywhat(char ch, boolean animate) /* << it's an adjective! */
-{
- byte ff; string z;
-
- if (ch==pardon)
- {
- ambiguous=true;
- if (animate) display("Whom?"); else display("What?");
- } else
- {
- if (animate) display(string("{ ")+getname(ch)+" }");
- else
- {
- z=get_better(ch);
- if (z!="") display(string("{ ")+z+" }");
- }
- }
+static void displaywhat(char ch, boolean animate) { /* << it's an adjective! */
+ byte ff;
+ string z;
+
+ if (ch == pardon) {
+ ambiguous = true;
+ if (animate) display("Whom?");
+ else display("What?");
+ } else {
+ if (animate) display(string("{ ") + getname(ch) + " }");
+ else {
+ z = get_better(ch);
+ if (z != "") display(string("{ ") + z + " }");
+ }
+ }
}
-boolean do_pronouns()
-{
- byte fv;
-
- boolean do_pronouns_result;
- ambiguous=false;
- for( fv=1; fv <= length(thats); fv ++)
- switch (thats[fv]) {
- case '\310': {
- displaywhat(him,true);
- thats[fv]=him;
- }
- break;
- case '\311': {
- displaywhat(her,true);
- thats[fv]=her;
- }
- break;
- case '\312': {
- displaywhat(it,false);
- thats[fv]=it;
- }
- break;
- }
- do_pronouns_result=ambiguous;
- return do_pronouns_result;
+boolean do_pronouns() {
+ byte fv;
+
+ boolean do_pronouns_result;
+ ambiguous = false;
+ for (fv = 1; fv <= length(thats); fv ++)
+ switch (thats[fv]) {
+ case '\310': {
+ displaywhat(him, true);
+ thats[fv] = him;
+ }
+ break;
+ case '\311': {
+ displaywhat(her, true);
+ thats[fv] = her;
+ }
+ break;
+ case '\312': {
+ displaywhat(it, false);
+ thats[fv] = it;
+ }
+ break;
+ }
+ do_pronouns_result = ambiguous;
+ return do_pronouns_result;
}
void store_interrogation(byte interrogation);
-static void lowercase()
-{
- byte fv;
+static void lowercase() {
+ byte fv;
- for( fv=1; fv <= length(current); fv ++)
- if (set::of(range('A','Z'), eos).has(current[fv]))
- current[fv] += 32;
+ for (fv = 1; fv <= length(current); fv ++)
+ if (set::of(range('A', 'Z'), eos).has(current[fv]))
+ current[fv] += 32;
}
-static void propernouns()
-{
- byte fv;
+static void propernouns() {
+ byte fv;
- lowercase();
- for( fv=2; fv <= length(current)-1; fv ++)
- if (current[fv]==' ')
- current[fv+1]=upcase(current[fv+1]);
- current[1]=upcase(current[1]);
+ lowercase();
+ for (fv = 2; fv <= length(current) - 1; fv ++)
+ if (current[fv] == ' ')
+ current[fv + 1] = upcase(current[fv + 1]);
+ current[1] = upcase(current[1]);
}
-static void sayit() /* This makes Avalot say the response. */
-{
- string x;
+static void sayit() { /* This makes Avalot say the response. */
+ string x;
- x=current; x[1]=upcase(x[1]);
- display(string("\231")+x+'.'+'\2'+'\23'+'2');
+ x = current;
+ x[1] = upcase(x[1]);
+ display(string("\231") + x + '.' + '\2' + '\23' + '2');
}
-void store_interrogation(byte interrogation)
-{
- byte fv;
+void store_interrogation(byte interrogation) {
+ byte fv;
- if (current=="") return;
+ if (current == "") return;
- /* Strip current: */
- while ((current[1]==' ') && (current!="")) Delete(current,1,1);
- while ((current[length(current)]==' ') && (current!="")) current[0] -= 1;
+ /* Strip current: */
+ while ((current[1] == ' ') && (current != "")) Delete(current, 1, 1);
+ while ((current[length(current)] == ' ') && (current != "")) current[0] -= 1;
- lose_timer(reason_cardiffsurvey); /* if you want to use any other timer,
+ lose_timer(reason_cardiffsurvey); /* if you want to use any other timer,
put this into the case statement. */
- switch (interrogation) {
- case 1: {
- lowercase(); sayit();
- like2drink=current;
- dna.cardiff_things=2;
- }
- break;
- case 2: {
- propernouns(); sayit();
- favourite_song=current;
- dna.cardiff_things=3;
- }
- break;
- case 3: {
- propernouns(); sayit();
- worst_place_on_earth=current;
- dna.cardiff_things=4;
- }
- break;
- case 4: {
- lowercase(); sayit();
- fillchar(spare_evening,sizeof(spare_evening),'\261');
- spare_evening=current;
- dixi('z',5); /* His closing statement... */
- tr[2].walkto(4); /* The end of the drawbridge */
- tr[2].vanishifstill=true; /* Then go away! */
- magics[2].op=nix;
- dna.cardiff_things=5;
- }
- break;
-
- case 99: store_high(current); break;
- }
- if (interrogation<4) cardiff_survey;
+ switch (interrogation) {
+ case 1: {
+ lowercase();
+ sayit();
+ like2drink = current;
+ dna.cardiff_things = 2;
+ }
+ break;
+ case 2: {
+ propernouns();
+ sayit();
+ favourite_song = current;
+ dna.cardiff_things = 3;
+ }
+ break;
+ case 3: {
+ propernouns();
+ sayit();
+ worst_place_on_earth = current;
+ dna.cardiff_things = 4;
+ }
+ break;
+ case 4: {
+ lowercase();
+ sayit();
+ fillchar(spare_evening, sizeof(spare_evening), '\261');
+ spare_evening = current;
+ dixi('z', 5); /* His closing statement... */
+ tr[2].walkto(4); /* The end of the drawbridge */
+ tr[2].vanishifstill = true; /* Then go away! */
+ magics[2].op = nix;
+ dna.cardiff_things = 5;
+ }
+ break;
+
+ case 99:
+ store_high(current);
+ break;
+ }
+ if (interrogation < 4) cardiff_survey;
}
-void clearwords()
-{
- fillchar(realwords,sizeof(realwords),'\0');
+void clearwords() {
+ fillchar(realwords, sizeof(realwords), '\0');
}
-void parse()
-{
- byte n,fv,ff; string c,cc,thisword; varying_string<1> answer; boolean notfound;
-
- /* first parsing - word identification */
-
- thats=""; c=current+'\40'; n=1; polite=false;
- verb=pardon; thing=pardon; thing2=pardon; person=pardon;
- clearwords();
- if (current[1]=='.')
- { /* a cheat mode attempt */
- cheatparse(current); thats=nowt; return;
- } /* not our department! Otherwise... */
-
- /* Are we being interrogated right now? */
-
- if (interrogation>0)
- {
- store_interrogation(interrogation);
- weirdword=true;
- return;
- }
-
- cc=c; for( fv=1; fv <= length(c); fv ++) c[fv]=upcase(c[fv]);
- while (c!="")
- {
- while ((c[1]=='\40') && (c!=""))
- { Delete(c,1,1); Delete(cc,1,1); }
- thisword=copy(c,1,pos("\40",c)-1);
- realwords[n]=copy(cc,1,pos("\40",cc)-1);
- punctustrip(c);
-
- notfound=true;
-
- if (thisword!="")
- {
- for( ff=1; ff <= 30; ff ++)
- { /* Check Also, FIRST! */
- if (pos(string(',')+thisword,also[ff][0])>0)
- {
- thats=thats+chr(99+ff);
- notfound=false;
- }
- }
- }
-
- if (notfound)
- {
- answer=wordnum(thisword);
- if (answer==pardon)
- {
- notfound=true;
- thats=thats+pardon;
- } else
- thats=thats+wordnum(thisword);
- n += 1;
- }
- Delete(c,1,pos("\40",c)); Delete(cc,1,pos("\40",cc));
- }
-
- if (pos("\376",thats)>0) unknown=realwords[pos("\376",thats)]; else unknown=""; replace("\377",""); /* zap noise words */
- replace(string('\15')+'\342',"\1"); /* "look at" = "examine" */
- replace(string('\15')+'\344',"\1"); /* "look in" = "examine" */
- replace(string('\4')+'\343',"\21"); /* "get up" = "stand" */
- replace(string('\4')+'\347',"\21"); /* "get down" = "stand"... well, why not? */
- replace(string('\22')+'\344',"\2"); /* "go in" = "open [door]" */
- replace(string('\34')+'\345',"\375"); /* "P' off" is a swear word */
- replace(string('\4')+'\6',"\6"); /* "Take inventory" (remember Colossal Adventure?) */
- replace(string('\50')+'\350',"\25"); /* "put on" = "don" */
- replace(string('\4')+'\345',"\24"); /* "take off" = "doff" */
-
- /* Words that could mean more than one person */
- {
- if (room==r__nottspub) replace("\314","\244"); /* Barman = Port */
- else replace("\314","\232"); /* Barman = Malagauche */
- switch (room) {
- case r__aylesoffice: replace("\313","\243"); break; /* Monk = Ayles */
- case r__musicroom: replace("\313","\246"); break; /* Monk = Jacques */
- default: replace("\313","\242"); /* Monk = Ibythneth */
- }
- }
-
- if (do_pronouns())
- {
- weirdword=true;
- thats=nowt;
- return;
- }
-
- /* second parsing - accidence */
-
- subject=""; subjnumber=0; /* Find subject of conversation. */
- for( fv=1; fv <= 11; fv ++)
- if (set::of('`','\'', eos).has(realwords[fv][1]))
- {
- subjnumber=ord(thats[fv]);
- thats[fv]=moved;
- flush(); /* Only the second time I've used that! */
- }
- if (subjnumber==0) /* Still not found. */
- for( fv=1; fv <= 10; fv ++)
- if (thats[fv]=='\374') /* the word is "about", or something similar */
- {
- subjnumber=ord(thats[fv+1]);
- thats[fv+1]='\0';
- flush(); /* ...Third! */
- }
- if (subjnumber==0) /* STILL not found! Must be the word after "say". */
- for( fv=1; fv <= 10; fv ++)
- if ((thats[fv]=='\7') && ! (set::of('\0',range('\341','\345'), eos).has(thats[fv+1])))
- { /* SAY not followed by a preposition */
- subjnumber=ord(thats[fv+1]);
- thats[fv+1]='\0';
- flush(); /* ...Fourth! */
- }
-
- for( fv=length(thats); fv >= 1; fv --) /* Reverse order- so first'll be used */
- switch (thats[fv]) {
- case '\1' ... '\61':case '\375':case '\371': verb=thats[fv]; break;
- case '\62' ... '\225': { thing2=thing; thing=thats[fv]; } break;
- case '\226' ... '\307': person=thats[fv]; break;
- case '\373': polite=true; break;
- }
-
- if ((unknown!="") && !
- (set::of(vb_exam,vb_talk,vb_save,vb_load,vb_dir, eos).has(verb)))
- {
- display(string("Sorry, but I have no idea what `")+unknown+
- "\" means. Can you rephrase it?");
- weirdword=true;
- } else weirdword=false;
- if (thats=="") thats=nowt;
-
- if (thing!=pardon) it=thing;
- if (person!=pardon)
- {
- if (person<'\257') him=person; else her=person;
- }
+void parse() {
+ byte n, fv, ff;
+ string c, cc, thisword;
+ varying_string<1> answer;
+ boolean notfound;
+
+ /* first parsing - word identification */
+
+ thats = "";
+ c = current + '\40';
+ n = 1;
+ polite = false;
+ verb = pardon;
+ thing = pardon;
+ thing2 = pardon;
+ person = pardon;
+ clearwords();
+ if (current[1] == '.') {
+ /* a cheat mode attempt */
+ cheatparse(current);
+ thats = nowt;
+ return;
+ } /* not our department! Otherwise... */
+
+ /* Are we being interrogated right now? */
+
+ if (interrogation > 0) {
+ store_interrogation(interrogation);
+ weirdword = true;
+ return;
+ }
+
+ cc = c;
+ for (fv = 1; fv <= length(c); fv ++) c[fv] = upcase(c[fv]);
+ while (c != "") {
+ while ((c[1] == '\40') && (c != "")) {
+ Delete(c, 1, 1);
+ Delete(cc, 1, 1);
+ }
+ thisword = copy(c, 1, pos("\40", c) - 1);
+ realwords[n] = copy(cc, 1, pos("\40", cc) - 1);
+ punctustrip(c);
+
+ notfound = true;
+
+ if (thisword != "") {
+ for (ff = 1; ff <= 30; ff ++) {
+ /* Check Also, FIRST! */
+ if (pos(string(',') + thisword, also[ff][0]) > 0) {
+ thats = thats + chr(99 + ff);
+ notfound = false;
+ }
+ }
+ }
+
+ if (notfound) {
+ answer = wordnum(thisword);
+ if (answer == pardon) {
+ notfound = true;
+ thats = thats + pardon;
+ } else
+ thats = thats + wordnum(thisword);
+ n += 1;
+ }
+ Delete(c, 1, pos("\40", c));
+ Delete(cc, 1, pos("\40", cc));
+ }
+
+ if (pos("\376", thats) > 0) unknown = realwords[pos("\376", thats)];
+ else unknown = "";
+ replace("\377", ""); /* zap noise words */
+ replace(string('\15') + '\342', "\1"); /* "look at" = "examine" */
+ replace(string('\15') + '\344', "\1"); /* "look in" = "examine" */
+ replace(string('\4') + '\343', "\21"); /* "get up" = "stand" */
+ replace(string('\4') + '\347', "\21"); /* "get down" = "stand"... well, why not? */
+ replace(string('\22') + '\344', "\2"); /* "go in" = "open [door]" */
+ replace(string('\34') + '\345', "\375"); /* "P' off" is a swear word */
+ replace(string('\4') + '\6', "\6"); /* "Take inventory" (remember Colossal Adventure?) */
+ replace(string('\50') + '\350', "\25"); /* "put on" = "don" */
+ replace(string('\4') + '\345', "\24"); /* "take off" = "doff" */
+
+ /* Words that could mean more than one person */
+ {
+ if (room == r__nottspub) replace("\314", "\244"); /* Barman = Port */
+ else replace("\314", "\232"); /* Barman = Malagauche */
+ switch (room) {
+ case r__aylesoffice:
+ replace("\313", "\243");
+ break; /* Monk = Ayles */
+ case r__musicroom:
+ replace("\313", "\246");
+ break; /* Monk = Jacques */
+ default:
+ replace("\313", "\242"); /* Monk = Ibythneth */
+ }
+ }
+
+ if (do_pronouns()) {
+ weirdword = true;
+ thats = nowt;
+ return;
+ }
+
+ /* second parsing - accidence */
+
+ subject = "";
+ subjnumber = 0; /* Find subject of conversation. */
+ for (fv = 1; fv <= 11; fv ++)
+ if (set::of('`', '\'', eos).has(realwords[fv][1])) {
+ subjnumber = ord(thats[fv]);
+ thats[fv] = moved;
+ flush(); /* Only the second time I've used that! */
+ }
+ if (subjnumber == 0) /* Still not found. */
+ for (fv = 1; fv <= 10; fv ++)
+ if (thats[fv] == '\374') { /* the word is "about", or something similar */
+ subjnumber = ord(thats[fv + 1]);
+ thats[fv + 1] = '\0';
+ flush(); /* ...Third! */
+ }
+ if (subjnumber == 0) /* STILL not found! Must be the word after "say". */
+ for (fv = 1; fv <= 10; fv ++)
+ if ((thats[fv] == '\7') && !(set::of('\0', range('\341', '\345'), eos).has(thats[fv + 1]))) {
+ /* SAY not followed by a preposition */
+ subjnumber = ord(thats[fv + 1]);
+ thats[fv + 1] = '\0';
+ flush(); /* ...Fourth! */
+ }
+
+ for (fv = length(thats); fv >= 1; fv --) /* Reverse order- so first'll be used */
+ switch (thats[fv]) {
+ case '\1' ... '\61':
+ case '\375':
+ case '\371':
+ verb = thats[fv];
+ break;
+ case '\62' ... '\225': {
+ thing2 = thing;
+ thing = thats[fv];
+ }
+ break;
+ case '\226' ... '\307':
+ person = thats[fv];
+ break;
+ case '\373':
+ polite = true;
+ break;
+ }
+
+ if ((unknown != "") && !
+ (set::of(vb_exam, vb_talk, vb_save, vb_load, vb_dir, eos).has(verb))) {
+ display(string("Sorry, but I have no idea what `") + unknown +
+ "\" means. Can you rephrase it?");
+ weirdword = true;
+ } else weirdword = false;
+ if (thats == "") thats = nowt;
+
+ if (thing != pardon) it = thing;
+ if (person != pardon) {
+ if (person < '\257') him = person;
+ else her = person;
+ }
}
-void examobj() /* Examine a standard object-thing */
-{
- if (thing!=thinks) thinkabout(thing,a_thing);
- switch (thing) {
- case wine : switch (winestate) {
- /* 4 is perfect wine. 0 is not holding the wine. */
- case 1: dixi('t',1); break; /* Normal examine wine scroll */
- case 2: dixi('d',6); break; /* Bad wine */
- case 3: dixi('d',7); break; /* Vinegar */
- }
- break;
- case onion: if (rotten_onion)
- dixi('q',21); /* Yucky onion. */
- else
- dixi('t',18);
- break; /* Normal onion scroll */
- default:
- dixi('t',ord(thing)); /* <<< Ordinarily */
- }
+void examobj() { /* Examine a standard object-thing */
+ if (thing != thinks) thinkabout(thing, a_thing);
+ switch (thing) {
+ case wine :
+ switch (winestate) {
+ /* 4 is perfect wine. 0 is not holding the wine. */
+ case 1:
+ dixi('t', 1);
+ break; /* Normal examine wine scroll */
+ case 2:
+ dixi('d', 6);
+ break; /* Bad wine */
+ case 3:
+ dixi('d', 7);
+ break; /* Vinegar */
+ }
+ break;
+ case onion:
+ if (rotten_onion)
+ dixi('q', 21); /* Yucky onion. */
+ else
+ dixi('t', 18);
+ break; /* Normal onion scroll */
+ default:
+ dixi('t', ord(thing)); /* <<< Ordinarily */
+ }
}
-boolean personshere() /* Person equivalent of "holding" */
-{
- boolean personshere_result;
- if ((person==pardon) || (person=='\0')
- || (whereis[person]==dna.room)) personshere_result=true;
- else {
- if (person<'\257') display("H\4"); else display("Sh\4");
- display("e isn't around at the moment.");
- personshere_result=false;
- }
- return personshere_result;
+boolean personshere() { /* Person equivalent of "holding" */
+ boolean personshere_result;
+ if ((person == pardon) || (person == '\0')
+ || (whereis[person] == dna.room)) personshere_result = true;
+ else {
+ if (person < '\257') display("H\4");
+ else display("Sh\4");
+ display("e isn't around at the moment.");
+ personshere_result = false;
+ }
+ return personshere_result;
}
-void exampers()
-{
- if (personshere())
- {
- if (thing!=thinks) thinkabout(person,a_person);
- person -= 149;
- switch (person) { /* Special cases */
- case '\13': if (wonnim)
- {
- dixi('Q',8); /* "I'm Not Playing!" */
- return;
- }
- break;
- case '\11': if (lustie_is_asleep)
- { dixi('Q',65); /* He's asleep. (65! Wow!) */ return; }
- break;
- }
- /* Otherwise... */ dixi('p',ord(person));
- } /* And afterwards... */
- switch (person) {
- case '\16': if (~ dna.ayles_is_awake) dixi('Q',13); break; /* u.f.s.? */
- }
+void exampers() {
+ if (personshere()) {
+ if (thing != thinks) thinkabout(person, a_person);
+ person -= 149;
+ switch (person) { /* Special cases */
+ case '\13':
+ if (wonnim) {
+ dixi('Q', 8); /* "I'm Not Playing!" */
+ return;
+ }
+ break;
+ case '\11':
+ if (lustie_is_asleep) {
+ dixi('Q', 65); /* He's asleep. (65! Wow!) */ return;
+ }
+ break;
+ }
+ /* Otherwise... */ dixi('p', ord(person));
+ } /* And afterwards... */
+ switch (person) {
+ case '\16':
+ if (~ dna.ayles_is_awake) dixi('Q', 13);
+ break; /* u.f.s.? */
+ }
}
-boolean holding()
-{
- boolean holding_result;
- if (set::of(range('\63','\143'), eos).has(thing)) { holding_result=true; return holding_result; } /* Also */
- holding_result=false;
- if (thing>'\144') display("Be reasonable!"); else
- if (~ dna.obj[thing]) /* verbs that need "thing" to be in the inventory */
- display("You're not holding it, Avvy."); else
- holding_result=true;
- return holding_result;
+boolean holding() {
+ boolean holding_result;
+ if (set::of(range('\63', '\143'), eos).has(thing)) {
+ holding_result = true; /* Also */
+ return holding_result;
+ }
+ holding_result = false;
+ if (thing > '\144') display("Be reasonable!");
+ else if (~ dna.obj[thing]) /* verbs that need "thing" to be in the inventory */
+ display("You're not holding it, Avvy.");
+ else
+ holding_result = true;
+ return holding_result;
}
void examine();
-static void special(boolean before)
-{
- switch (dna.room) {
- case r__yours: switch (thing) {
- case '\66': if (before) show_one(5); else show_one(6); break;
- }
- break;
- }
+static void special(boolean before) {
+ switch (dna.room) {
+ case r__yours:
+ switch (thing) {
+ case '\66':
+ if (before) show_one(5);
+ else show_one(6);
+ break;
+ }
+ break;
+ }
}
-void examine()
-{
- /* Examine. EITHER it's an object OR it's an Also OR it's a person OR
- it's something else. */
- if ((person==pardon) && (thing!=pardon))
- {
- if (holding())
- switch (thing) { /* remember it's been Slipped- ie subtract 49 */
- case '\1' ... '\61' : examobj(); break; /* Standard object */
- case '\62' ... '\144' : {
- special(true);
- display(also[ord(thing)-50][1]); /* Also thing */
- special(false);
- }
- break;
- }
- } else
- if (person!=pardon) exampers();
- else display("It's just as it looks on the picture."); /* don't know- guess */
+void examine() {
+ /* Examine. EITHER it's an object OR it's an Also OR it's a person OR
+ it's something else. */
+ if ((person == pardon) && (thing != pardon)) {
+ if (holding())
+ switch (thing) { /* remember it's been Slipped- ie subtract 49 */
+ case '\1' ... '\61' :
+ examobj();
+ break; /* Standard object */
+ case '\62' ... '\144' : {
+ special(true);
+ display(also[ord(thing) - 50][1]); /* Also thing */
+ special(false);
+ }
+ break;
+ }
+ } else if (person != pardon) exampers();
+ else display("It's just as it looks on the picture."); /* don't know- guess */
}
-void inv() /* the time-honoured command... */
-{
- char fv; byte q;
-
- q=0; display(string("You're carrying ")+'\4');
- {
- for( fv='\1'; fv <= numobjs; fv ++)
- if (obj[fv])
- {
- q += 1; if (q==carrying) display(string("and ")+'\4');
- display(get_better(fv)+'\4');
- if (fv==wearing) display(string(", which you're wearing")+'\4');
- if (q<carrying) display(string(", ")+'\4');
- }
- if (wearing==nowt) display("...\r\r...and you're stark naked!"); else
- display('.');
- }
+void inv() { /* the time-honoured command... */
+ char fv;
+ byte q;
+
+ q = 0;
+ display(string("You're carrying ") + '\4');
+ {
+ for (fv = '\1'; fv <= numobjs; fv ++)
+ if (obj[fv]) {
+ q += 1;
+ if (q == carrying) display(string("and ") + '\4');
+ display(get_better(fv) + '\4');
+ if (fv == wearing) display(string(", which you're wearing") + '\4');
+ if (q < carrying) display(string(", ") + '\4');
+ }
+ if (wearing == nowt) display("...\r\r...and you're stark naked!");
+ else
+ display('.');
+ }
}
-void swallow() /* Eat something. */
-{
- switch (thing) {
- case wine: switch (dna.winestate) {
- /* 4 is perfect */
- case 1: {
- if (dna.teetotal) { dixi('D',6); return; }
- dixi('U',1); wobble; dixi('U',2);
- dna.obj[wine]=false; objectlist;
- have_a_drink();
- }
- break;
- case 2:case 3: dixi('d',8); break; /* You can't drink it! */
- }
- break;
- case potion: { background(4); dixi('U',3); gameover; background(0); } break;
- case ink: dixi('U',4); break;
- case chastity: dixi('U',5); break;
- case mushroom: {
- dixi('U',6);
- gameover;
- }
- break;
- case onion: if (dna.rotten_onion) dixi('U',11);
- else {
- dixi('U',8);
- dna.obj[onion]=false;
- objectlist;
- }
- break;
- default:
- if (set::of(r__argentpub,r__nottspub, eos).has(dna.room))
- display("Try BUYing things before you drink them!");
- else
- display("The taste of it makes you retch!");
- /* Constant- leave this one */
- }
+void swallow() { /* Eat something. */
+ switch (thing) {
+ case wine:
+ switch (dna.winestate) {
+ /* 4 is perfect */
+ case 1: {
+ if (dna.teetotal) {
+ dixi('D', 6);
+ return;
+ }
+ dixi('U', 1);
+ wobble;
+ dixi('U', 2);
+ dna.obj[wine] = false;
+ objectlist;
+ have_a_drink();
+ }
+ break;
+ case 2:
+ case 3:
+ dixi('d', 8);
+ break; /* You can't drink it! */
+ }
+ break;
+ case potion: {
+ background(4);
+ dixi('U', 3);
+ gameover;
+ background(0);
+ }
+ break;
+ case ink:
+ dixi('U', 4);
+ break;
+ case chastity:
+ dixi('U', 5);
+ break;
+ case mushroom: {
+ dixi('U', 6);
+ gameover;
+ }
+ break;
+ case onion:
+ if (dna.rotten_onion) dixi('U', 11);
+ else {
+ dixi('U', 8);
+ dna.obj[onion] = false;
+ objectlist;
+ }
+ break;
+ default:
+ if (set::of(r__argentpub, r__nottspub, eos).has(dna.room))
+ display("Try BUYing things before you drink them!");
+ else
+ display("The taste of it makes you retch!");
+ /* Constant- leave this one */
+ }
}
void others()
- /* This lists the other people in the room. */
+/* This lists the other people in the room. */
{
- char fv;
- byte num_people,this_person,here;
+ char fv;
+ byte num_people, this_person, here;
- num_people=0;
- this_person=0;
- here=dna.room;
+ num_people = 0;
+ this_person = 0;
+ here = dna.room;
- for( fv='\227'; fv <= '\262'; fv ++) /* Start at 151 so we don't list Avvy himself! */
- if (whereis[fv]==here)
- num_people += 1;
+ for (fv = '\227'; fv <= '\262'; fv ++) /* Start at 151 so we don't list Avvy himself! */
+ if (whereis[fv] == here)
+ num_people += 1;
- /* If nobody's here, we can cut out straight away. */
+ /* If nobody's here, we can cut out straight away. */
- if (num_people==0) return; /* Leave the procedure. */
+ if (num_people == 0) return; /* Leave the procedure. */
- for( fv='\227'; fv <= '\262'; fv ++)
- if (whereis[fv]==here)
- {
- this_person += 1;
- if (this_person==1) /* First on the list. */
- display(getname(fv)+'\4'); else
- if (this_person<num_people) /* The middle... */
- display(string(", ")+getname(fv)+'\4'); else
- display(string(" and ")+getname(fv)+'\4'); /* The end. */
- }
+ for (fv = '\227'; fv <= '\262'; fv ++)
+ if (whereis[fv] == here) {
+ this_person += 1;
+ if (this_person == 1) /* First on the list. */
+ display(getname(fv) + '\4');
+ else if (this_person < num_people) /* The middle... */
+ display(string(", ") + getname(fv) + '\4');
+ else
+ display(string(" and ") + getname(fv) + '\4'); /* The end. */
+ }
- if (num_people==1) display(" is\4"); else display(" are\4");
+ if (num_people == 1) display(" is\4");
+ else display(" are\4");
- display(" here."); /* End and display it. */
+ display(" here."); /* End and display it. */
}
void lookaround()
/* This is called when you say "look." */
{
- display(also[0][1]);
- switch (dna.room) {
- case r__spludwicks: if (dna.avaricius_talk>0) dixi('q',23); else others(); break;
- case r__robins: {
- if (dna.tied_up) dixi('q',38);
- if (dna.mushroom_growing) dixi('q',55);
- }
- break;
- case r__insidecardiffcastle: if (~ dna.taken_pen) dixi('q',49); break;
- case r__lustiesroom: if (dna.lustie_is_asleep) dixi('q',65); break;
- case r__catacombs: switch (dna.cat_y*256+dna.cat_x) {
- case 258 : dixi('q',80); break; /* Inside art gallery */
- case 514 : dixi('q',81); break; /* Outside ditto */
- case 260 : dixi('q',82); break; /* Outside Geida's room. */
- }
- break;
- default: others();
- }
+ display(also[0][1]);
+ switch (dna.room) {
+ case r__spludwicks:
+ if (dna.avaricius_talk > 0) dixi('q', 23);
+ else others();
+ break;
+ case r__robins: {
+ if (dna.tied_up) dixi('q', 38);
+ if (dna.mushroom_growing) dixi('q', 55);
+ }
+ break;
+ case r__insidecardiffcastle:
+ if (~ dna.taken_pen) dixi('q', 49);
+ break;
+ case r__lustiesroom:
+ if (dna.lustie_is_asleep) dixi('q', 65);
+ break;
+ case r__catacombs:
+ switch (dna.cat_y * 256 + dna.cat_x) {
+ case 258 :
+ dixi('q', 80);
+ break; /* Inside art gallery */
+ case 514 :
+ dixi('q', 81);
+ break; /* Outside ditto */
+ case 260 :
+ dixi('q', 82);
+ break; /* Outside Geida's room. */
+ }
+ break;
+ default:
+ others();
+ }
}
-void opendoor() /* so whaddya THINK this does?! */
-{
- byte fv;
-
- switch (dna.room) { /* Special cases. */
- case r__yours: if (infield(2))
- { /* Opening the box. */
- thing='\66'; /* The box. */ person=pardon;
- examine();
- return;
- }
- break;
- case r__spludwicks: if (thing=='\75') {
- dixi('q',85);
- return;
- }
- break;
- }
-
-
- if ((~ dna.user_moves_avvy) & (dna.room!=r__lusties))
- return; /* No doors can open if you can't move Avvy. */
- for( fv=9; fv <= 15; fv ++)
- if (infield(fv))
- {
- { void& with = portals[fv];
- switch (op) {
- case exclaim: { tr[1].bounce; dixi('x',data); } break;
- case transport: fliproom(hi(data),lo(data)); break;
- case unfinished: {
- tr[1].bounce;
- display("\7Sorry.\3\rThis place is not available yet!");
- }
- break;
- case special: call_special(data); break;
- case mopendoor: open_the_door(hi(data),lo(data),fv); break;
- }}
- return;
- }
- if (dna.room==r__map)
- display(string("Avvy, you can complete the whole game without ever going ")+
- "to anywhere other than Argent, Birmingham, Cardiff, "+
- "Nottingham and Norwich.");
- else display("Door? What door?");
+void opendoor() { /* so whaddya THINK this does?! */
+ byte fv;
+
+ switch (dna.room) { /* Special cases. */
+ case r__yours:
+ if (infield(2)) {
+ /* Opening the box. */
+ thing = '\66'; /* The box. */ person = pardon;
+ examine();
+ return;
+ }
+ break;
+ case r__spludwicks:
+ if (thing == '\75') {
+ dixi('q', 85);
+ return;
+ }
+ break;
+ }
+
+
+ if ((~ dna.user_moves_avvy) & (dna.room != r__lusties))
+ return; /* No doors can open if you can't move Avvy. */
+ for (fv = 9; fv <= 15; fv ++)
+ if (infield(fv)) {
+ {
+ void &with = portals[fv];
+ switch (op) {
+ case exclaim: {
+ tr[1].bounce;
+ dixi('x', data);
+ }
+ break;
+ case transport:
+ fliproom(hi(data), lo(data));
+ break;
+ case unfinished: {
+ tr[1].bounce;
+ display("\7Sorry.\3\rThis place is not available yet!");
+ }
+ break;
+ case special:
+ call_special(data);
+ break;
+ case mopendoor:
+ open_the_door(hi(data), lo(data), fv);
+ break;
+ }
+ }
+ return;
+ }
+ if (dna.room == r__map)
+ display(string("Avvy, you can complete the whole game without ever going ") +
+ "to anywhere other than Argent, Birmingham, Cardiff, " +
+ "Nottingham and Norwich.");
+ else display("Door? What door?");
}
void putproc();
-static void silly()
-{
- display("Don't be silly!");
+static void silly() {
+ display("Don't be silly!");
}
-void putproc() /* Called when you call vb_put. */
-{
- char temp;
-
-
- if (! holding()) return;
- thing2 -= 49; /* Slip the second object */
- temp=thing; thing=thing2; if (! holding()) return;
- thing=temp;
-
- /* Thing is the thing which you're putting in. Thing2 is where you're
- putting it. */
- /* Convenience thing. */
- switch (thing2) {
- case wine: if (thing==onion)
- {
- if (dna.rotten_onion)
- display(string("That's a bit like shutting the stable door after the ")+
- "horse has bolted!");
- else { /* Put onion into wine? */
- if (dna.winestate!=3)
- display("\6Oignon au vin\22 is a bit too strong for your tastes!");
- else { /* Put onion into vinegar! Yes! */
- onion_in_vinegar=true;
- points(7);
- dixi('u',9);
- }
- }
- } else silly();
- break;
-
- case '\66': if (room==1) /* Put something into the box. */
- {
- if (box_contents!=nowt)
- display(string("There's something in the box already, Avvy. Try taking")+
- " that out first.");
- else
- switch (thing) {
- case money: display("You'd better keep some ready cash on you!"); break;
- case bell: display("That's a silly place to keep a bell."); break;
- case bodkin: display("But you might need it!"); break;
- case onion: display("Just give it to Spludwick, Avvy!"); break;
- default:
- { /* Put the object into the box... */
- if (wearing==thing)
- display(string("You'd better take ")+get_better(thing)+" off first!");
- else
- {
- show_one(5); /* Open box. */
- box_contents=thing;
- dna.obj[thing]=false;
- objectlist;
- display("OK, it's in the box.");
- show_one(6); /* Shut box. */
- }
- }
- }
- } else silly();
- break;
-
- default: silly();
- }
+void putproc() { /* Called when you call vb_put. */
+ char temp;
+
+
+ if (! holding()) return;
+ thing2 -= 49; /* Slip the second object */
+ temp = thing;
+ thing = thing2;
+ if (! holding()) return;
+ thing = temp;
+
+ /* Thing is the thing which you're putting in. Thing2 is where you're
+ putting it. */
+ /* Convenience thing. */
+ switch (thing2) {
+ case wine:
+ if (thing == onion) {
+ if (dna.rotten_onion)
+ display(string("That's a bit like shutting the stable door after the ") +
+ "horse has bolted!");
+ else { /* Put onion into wine? */
+ if (dna.winestate != 3)
+ display("\6Oignon au vin\22 is a bit too strong for your tastes!");
+ else { /* Put onion into vinegar! Yes! */
+ onion_in_vinegar = true;
+ points(7);
+ dixi('u', 9);
+ }
+ }
+ } else silly();
+ break;
+
+ case '\66':
+ if (room == 1) { /* Put something into the box. */
+ if (box_contents != nowt)
+ display(string("There's something in the box already, Avvy. Try taking") +
+ " that out first.");
+ else
+ switch (thing) {
+ case money:
+ display("You'd better keep some ready cash on you!");
+ break;
+ case bell:
+ display("That's a silly place to keep a bell.");
+ break;
+ case bodkin:
+ display("But you might need it!");
+ break;
+ case onion:
+ display("Just give it to Spludwick, Avvy!");
+ break;
+ default: {
+ /* Put the object into the box... */
+ if (wearing == thing)
+ display(string("You'd better take ") + get_better(thing) + " off first!");
+ else {
+ show_one(5); /* Open box. */
+ box_contents = thing;
+ dna.obj[thing] = false;
+ objectlist;
+ display("OK, it's in the box.");
+ show_one(6); /* Shut box. */
+ }
+ }
+ }
+ } else silly();
+ break;
+
+ default:
+ silly();
+ }
}
boolean give2spludwick();
- /* The result of this fn is whether or not he says "Hey, thanks!" */
-static void not_in_order()
-{
- display(string("Sorry, I need the ingredients in the right order for this potion.")+
- " What I need next is "+
- get_better(spludwick_order[dna.given2spludwick])+".\232\2");
+/* The result of this fn is whether or not he says "Hey, thanks!" */
+static void not_in_order() {
+ display(string("Sorry, I need the ingredients in the right order for this potion.") +
+ " What I need next is " +
+ get_better(spludwick_order[dna.given2spludwick]) + ".\232\2");
}
-static void go_to_cauldron()
-{
- tr[2].call_eachstep=false; /* Stops Geida_Procs. */
- set_up_timer(1,procspludwick_goes_to_cauldron,reason_spludwalk);
- tr[2].walkto(2);
+static void go_to_cauldron() {
+ tr[2].call_eachstep = false; /* Stops Geida_Procs. */
+ set_up_timer(1, procspludwick_goes_to_cauldron, reason_spludwalk);
+ tr[2].walkto(2);
}
boolean give2spludwick()
{
- boolean give2spludwick_result;
- {
-
- give2spludwick_result=false;
-
- if (spludwick_order[given2spludwick]!=thing)
- {
- not_in_order();
- return give2spludwick_result;
- }
-
- switch (thing) {
- case onion:
- {
- obj[onion]=false;
- if (rotten_onion)
- dixi('q',22);
- else {
- given2spludwick += 1;
- dixi('q',20);
- go_to_cauldron();
- points(3);
- }
- objectlist;
- }
- break;
- case ink: {
- obj[ink]=false;
- objectlist;
- given2spludwick += 1;
- dixi('q',24);
- go_to_cauldron();
- points(3);
- }
- break;
- case mushroom: {
- obj[mushroom]=false;
- dixi('q',25);
- points(5);
- given2spludwick += 1;
- go_to_cauldron();
- obj[potion]=true;
- objectlist;
- }
- break;
- default: give2spludwick_result=true;
- }
- }
- return give2spludwick_result;
+ boolean give2spludwick_result;
+ {
+
+ give2spludwick_result = false;
+
+ if (spludwick_order[given2spludwick] != thing) {
+ not_in_order();
+ return give2spludwick_result;
+ }
+
+ switch (thing) {
+ case onion: {
+ obj[onion] = false;
+ if (rotten_onion)
+ dixi('q', 22);
+ else {
+ given2spludwick += 1;
+ dixi('q', 20);
+ go_to_cauldron();
+ points(3);
+ }
+ objectlist;
+ }
+ break;
+ case ink: {
+ obj[ink] = false;
+ objectlist;
+ given2spludwick += 1;
+ dixi('q', 24);
+ go_to_cauldron();
+ points(3);
+ }
+ break;
+ case mushroom: {
+ obj[mushroom] = false;
+ dixi('q', 25);
+ points(5);
+ given2spludwick += 1;
+ go_to_cauldron();
+ obj[potion] = true;
+ objectlist;
+ }
+ break;
+ default:
+ give2spludwick_result = true;
+ }
+ }
+ return give2spludwick_result;
}
-void have_a_drink()
-{
- {
- alcohol += 1;
- if (alcohol==5)
- {
- obj[key]=true; /* Get the key. */
- teetotal=true;
- avvy_is_awake=false;
- avvy_in_bed=true;
- objectlist;
- dusk;
- hang_around_for_a_while;
- fliproom(1,1);
- background(14);
- new_game_for_trippancy; /* Not really */
- }
- }
+void have_a_drink() {
+ {
+ alcohol += 1;
+ if (alcohol == 5) {
+ obj[key] = true; /* Get the key. */
+ teetotal = true;
+ avvy_is_awake = false;
+ avvy_in_bed = true;
+ objectlist;
+ dusk;
+ hang_around_for_a_while;
+ fliproom(1, 1);
+ background(14);
+ new_game_for_trippancy; /* Not really */
+ }
+ }
}
-void cardiff_climbing()
-{
- if (dna.standing_on_dais)
- { /* Clamber up. */
- display("You climb down, back onto the floor.");
- dna.standing_on_dais=false;
- apped(1,3);
- } else
- { /* Clamber down. */
- if (infield(1))
- {
- display("You clamber up onto the dais.");
- dna.standing_on_dais=true;
- apped(1,2);
- } else
- display("Get a bit closer, Avvy.");
- }
+void cardiff_climbing() {
+ if (dna.standing_on_dais) {
+ /* Clamber up. */
+ display("You climb down, back onto the floor.");
+ dna.standing_on_dais = false;
+ apped(1, 3);
+ } else {
+ /* Clamber down. */
+ if (infield(1)) {
+ display("You clamber up onto the dais.");
+ dna.standing_on_dais = true;
+ apped(1, 2);
+ } else
+ display("Get a bit closer, Avvy.");
+ }
}
void stand_up();
- /* Called when you ask Avvy to stand. */
-static void already()
-{
- display("You're already standing!");
+/* Called when you ask Avvy to stand. */
+static void already() {
+ display("You're already standing!");
}
-void stand_up()
-{
- switch (dna.room) {
- case r__yours: /* Avvy isn't asleep. */
- if (avvy_in_bed) /* But he's in bed. */
- {
- if (teetotal)
- {
- dixi('d',12);
- background(0);
- dixi('d',14);
- }
- tr[1].visible=true;
- user_moves_avvy=true;
- apped(1,2);
- dna.rw=left;
- show_one(4); /* Picture of empty pillow. */
- points(1);
- avvy_in_bed=false;
- lose_timer(reason_arkata_shouts);
- } else already();
- break;
-
- case r__insidecardiffcastle: cardiff_climbing(); break;
-
- case r__nottspub: if (sitting_in_pub) {
- show_one(4); /* Not sitting down. */
- tr[1].visible=true; /* But standing up. */
- apped(1,4); /* And walking away. */
- sitting_in_pub=false; /* Really not sitting down. */
- user_moves_avvy=true; /* And ambulant. */
- } else already();
- break;
- default: already();
- }
+void stand_up() {
+ switch (dna.room) {
+ case r__yours: /* Avvy isn't asleep. */
+ if (avvy_in_bed) { /* But he's in bed. */
+ if (teetotal) {
+ dixi('d', 12);
+ background(0);
+ dixi('d', 14);
+ }
+ tr[1].visible = true;
+ user_moves_avvy = true;
+ apped(1, 2);
+ dna.rw = left;
+ show_one(4); /* Picture of empty pillow. */
+ points(1);
+ avvy_in_bed = false;
+ lose_timer(reason_arkata_shouts);
+ } else already();
+ break;
+
+ case r__insidecardiffcastle:
+ cardiff_climbing();
+ break;
+
+ case r__nottspub:
+ if (sitting_in_pub) {
+ show_one(4); /* Not sitting down. */
+ tr[1].visible = true; /* But standing up. */
+ apped(1, 4); /* And walking away. */
+ sitting_in_pub = false; /* Really not sitting down. */
+ user_moves_avvy = true; /* And ambulant. */
+ } else already();
+ break;
+ default:
+ already();
+ }
}
-void getproc(char thing)
-{
- switch (room) {
- case r__yours:
- if (infield(2))
- {
- if (box_contents==thing)
- {
- show_one(5);
- display("OK, I've got it.");
- obj[thing]=true; objectlist;
- box_contents=nowt;
- show_one(6);
- } else
- display(string("I can't see ")+get_better(thing)+" in the box.");
- } else dixi('q',57);
- break;
- case r__insidecardiffcastle:
- switch (thing) {
- case pen:
- {
- if (infield(2))
- { /* Standing on the dais. */
-
- if (dna.taken_pen)
- display("It's not there, Avvy.");
- else
- { /* OK: we're taking the pen, and it's there. */
- show_one(4); /* No pen there now. */
- call_special(3); /* Zap! */
- dna.taken_pen=true;
- dna.obj[pen]=true;
- objectlist;
- display("Taken.");
- }
- } else if (dna.standing_on_dais) dixi('q',53); else dixi('q',51);
- }
- break;
- case bolt: dixi('q',52); break;
- default: dixi('q',57);
- }
- break;
- case r__robins: if ((thing==mushroom) & (infield(1)) & (dna.mushroom_growing))
- {
- show_one(3);
- display("Got it!");
- dna.mushroom_growing=false;
- dna.taken_mushroom=true;
- dna.obj[mushroom]=true;
- objectlist;
- points(3);
- } else dixi('q',57);
- break;
- default: dixi('q',57);
- }
+void getproc(char thing) {
+ switch (room) {
+ case r__yours:
+ if (infield(2)) {
+ if (box_contents == thing) {
+ show_one(5);
+ display("OK, I've got it.");
+ obj[thing] = true;
+ objectlist;
+ box_contents = nowt;
+ show_one(6);
+ } else
+ display(string("I can't see ") + get_better(thing) + " in the box.");
+ } else dixi('q', 57);
+ break;
+ case r__insidecardiffcastle:
+ switch (thing) {
+ case pen: {
+ if (infield(2)) {
+ /* Standing on the dais. */
+
+ if (dna.taken_pen)
+ display("It's not there, Avvy.");
+ else {
+ /* OK: we're taking the pen, and it's there. */
+ show_one(4); /* No pen there now. */
+ call_special(3); /* Zap! */
+ dna.taken_pen = true;
+ dna.obj[pen] = true;
+ objectlist;
+ display("Taken.");
+ }
+ } else if (dna.standing_on_dais) dixi('q', 53);
+ else dixi('q', 51);
+ }
+ break;
+ case bolt:
+ dixi('q', 52);
+ break;
+ default:
+ dixi('q', 57);
+ }
+ break;
+ case r__robins:
+ if ((thing == mushroom) & (infield(1)) & (dna.mushroom_growing)) {
+ show_one(3);
+ display("Got it!");
+ dna.mushroom_growing = false;
+ dna.taken_mushroom = true;
+ dna.obj[mushroom] = true;
+ objectlist;
+ points(3);
+ } else dixi('q', 57);
+ break;
+ default:
+ dixi('q', 57);
+ }
}
-void give_geida_the_lute()
-{
- {
- if (room!=r__lustiesroom)
- {
- display("Not yet. Try later!\232\2");
- return;
- }
- dna.obj[lute]=false;
- objectlist;
- dixi('q',64); /* She plays it. */
-
- /* And the rest has been moved to Timeout... under give_lute_to_Geida. */
-
- set_up_timer(1,procgive_lute_to_geida,reason_geida_sings);
- back_to_bootstrap(4);
- }
+void give_geida_the_lute() {
+ {
+ if (room != r__lustiesroom) {
+ display("Not yet. Try later!\232\2");
+ return;
+ }
+ dna.obj[lute] = false;
+ objectlist;
+ dixi('q', 64); /* She plays it. */
+
+ /* And the rest has been moved to Timeout... under give_lute_to_Geida. */
+
+ set_up_timer(1, procgive_lute_to_geida, reason_geida_sings);
+ back_to_bootstrap(4);
+ }
}
-void play_harp()
-{
- if (infield(7))
- musical_scroll;
- else display("Get a bit closer to it, Avvy!");
+void play_harp() {
+ if (infield(7))
+ musical_scroll;
+ else display("Get a bit closer to it, Avvy!");
}
-void winsequence()
-{
- dixi('q',78);
- first_show(7); then_show(8); then_show(9);
- start_to_close;
- set_up_timer(30,procwinning,reason_winning);
+void winsequence() {
+ dixi('q', 78);
+ first_show(7);
+ then_show(8);
+ then_show(9);
+ start_to_close;
+ set_up_timer(30, procwinning, reason_winning);
}
-void person_speaks()
-{
- boolean found; byte fv; char cfv;
-
-
- if ((person==pardon) || (person=='\0'))
- {
- if ((him==pardon) || (whereis[him]!=dna.room)) person=her;
- else person=him;
- }
-
- if (whereis[person]!=dna.room)
- {
- display("\231\4"); /* Avvy himself! */
- return;
- }
-
- found=false; /* The person we're looking for's code is in Person. */
-
- for( fv=1; fv <= numtr; fv ++)
- if (tr[fv].quick & (chr(tr[fv].a.accinum+149)==person))
- {
- display(string('\23')+chr(fv+48)+'\4');
- found=true;
- }
-
- if (! found)
- for( fv=10; fv <= 25; fv ++)
- { void& with = quasipeds[fv];
- if ((who==person) && (room==dna.room))
- {
- display(string('\23')+chr(fv+55)+'\4');
- }}
+void person_speaks() {
+ boolean found;
+ byte fv;
+ char cfv;
+
+
+ if ((person == pardon) || (person == '\0')) {
+ if ((him == pardon) || (whereis[him] != dna.room)) person = her;
+ else person = him;
+ }
+
+ if (whereis[person] != dna.room) {
+ display("\231\4"); /* Avvy himself! */
+ return;
+ }
+
+ found = false; /* The person we're looking for's code is in Person. */
+
+ for (fv = 1; fv <= numtr; fv ++)
+ if (tr[fv].quick & (chr(tr[fv].a.accinum + 149) == person)) {
+ display(string('\23') + chr(fv + 48) + '\4');
+ found = true;
+ }
+
+ if (! found)
+ for (fv = 10; fv <= 25; fv ++) {
+ void &with = quasipeds[fv];
+ if ((who == person) && (room == dna.room)) {
+ display(string('\23') + chr(fv + 55) + '\4');
+ }
+ }
}
void do_that();
-static void heythanks()
-{
- person_speaks();
- display("Hey, thanks!\2(But now, you've lost it!)");
- dna.obj[thing]=false;
+static void heythanks() {
+ person_speaks();
+ display("Hey, thanks!\2(But now, you've lost it!)");
+ dna.obj[thing] = false;
}
-void do_that()
-{
- const array<'\63','\72',varying_string<6> > booze = {{"Bitter","GIED","Whisky","Cider","","","","Mead"}};
- byte fv,ff; integer sx,sy; boolean ok;
-
-
- if (thats==nowt) { thats=""; return; }
- if (weirdword) return;
- if (thing<'\310') thing -= 49; /* "Slip" */
-
- if ((~ alive) &
- ! (set::of(vb_load,vb_save,vb_quit,vb_info,vb_help,vb_larrypass,
- vb_phaon,vb_boss,vb_cheat,vb_restart,vb_dir,vb_score,
- vb_highscores,vb_smartalec, eos).has(verb)))
- {
- display(string("You're dead, so don't talk. What are you, a ghost ")+
- "or something? Try restarting, or restoring a saved game!"); return;
- }
-
- if ((~ dna.avvy_is_awake) &
- ! (set::of(vb_load,vb_save,vb_quit,vb_info,vb_help,vb_larrypass,
- vb_phaon,vb_boss,vb_cheat,vb_restart,vb_dir,vb_die,vb_score,
- vb_highscores,vb_smartalec,vb_expletive,vb_wake, eos).has(verb)))
- {
- display("Talking in your sleep? Try waking up!"); return;
- }
-
-
- switch (verb) {
- case vb_exam: examine(); break;
- case vb_open: opendoor(); break;
- case vb_pause: display(string("Game paused.")+'\3'+'\15'+'\15'+"Press Enter, Esc, or click "+
- "the mouse on the `O.K.\" box to continue.");
- break;
- case vb_get: {
- if (thing!=pardon)
- { /* Legitimate try to pick something up. */
- if (dna.carrying>=maxobjs) display("You can't carry any more!");
- else getproc(thing);
-
- } else
- { /* Not... ditto. */
- if (person!=pardon)
- display("You can't sweep folk off their feet!"); else
- display("I assure you, you don't need it.");
- }
- }
- break;
- case vb_drop: display(string("Two years ago you dropped a florin in the street. Three days ")+
- "later it was gone! So now you never leave ANYTHING lying around. OK?");
- break;
-/* begin dna.obj[thing]:=false; objectlist; end;*/
- case vb_inv: inv(); break;
- case vb_talk: if (person==pardon)
- {
- if (subjnumber==99) /* They typed "say password". */
- display("Yes, but what \6is\22 the password?");
- else if (set::of(range(1,49),253,249, eos).has(subjnumber))
- {
- Delete(thats,1,1);
- move(realwords[2],realwords[1],sizeof(realwords)-sizeof(realwords[1]));
- verb=chr(subjnumber);
- do_that(); return;
- } else
- {
- person=chr(subjnumber); subjnumber=0;
- if (set::of(pardon,'\0', eos).has(person)) display("Talk to whom?");
- else if (personshere()) talkto(ord(person));
- }
- } else if (person==pardon) display("Talk to whom?");
- else if (personshere()) talkto(ord(person));
- break;
-
- case vb_give: if (holding())
- {
- if (person==pardon) display("Give to whom?"); else
- if (personshere())
- {
- switch (thing) {
- case money : display("You can't bring yourself to give away your moneybag."); break;
- case bodkin:case bell:case clothes:case habit :
- display("Don't give it away, it might be useful!");
- break;
- default: switch (person) {
- case pcrapulus: switch (thing) {
- case wine: {
- display("Crapulus grabs the wine and gulps it down.");
- dna.obj[wine]=false;
- }
- break;
- default: heythanks();
- }
- break;
- case pcwytalot: if (set::of(crossbow,bolt, eos).has(thing))
- display(string("You might be able to influence ")+
- "Cwytalot more if you used it!");
- else heythanks();
- break;
- case pspludwick: if (give2spludwick()) heythanks(); break;
- case pibythneth: if (thing==badge)
- {
- dixi('q',32); /* Thanks! Wow! */
- points(3);
- dna.obj[badge]=false;
- dna.obj[habit]=true;
- dna.givenbadgetoiby=true;
- show_one(8); show_one(9);
- } else heythanks();
- break;
- case payles: if (dna.ayles_is_awake)
- {
- if (thing==pen)
- {
- dna.obj[pen]=false;
- dixi('q',54);
- dna.obj[ink]=true;
- dna.given_pen_to_ayles=true;
- objectlist;
- points(2);
- } else heythanks();
- } else
- display("But he's asleep!");
- break;
- case pgeida: switch (thing) {
- case potion : {
- dna.obj[potion]=false;
- dixi('u',16); /* She drinks it. */
- points(2);
- dna.geida_given_potion=true;
- objectlist;
- }
- break;
- case lute: give_geida_the_lute(); break;
- default: heythanks();
- }
- break;
- case parkata: switch (thing) {
- case potion: if (dna.geida_given_potion)
- winsequence();
- else dixi('q',77);
- break; /* That Geida woman! */
- default: heythanks();
- }
- break;
- default: heythanks();
- }
- }
- }
- objectlist; /* Just in case... */
- }
- break;
-
- case vb_eat:case vb_drink: if (holding()) swallow(); break;
- case vb_load: edna_load(realwords[2]); break;
- case vb_save: if (alive) edna_save(realwords[2]);
- else display("It's a bit late now to save your game!");
- break;
- case vb_pay: display("No money need change hands."); break;
- case vb_look: lookaround(); break;
- case vb_break: display("Vandalism is prohibited within this game!"); break;
- case vb_quit: { /* quit */
- if (demo)
- {
- dixi('q',31);
- close(demofile);
- exit(0); /* Change this later!!! */
- }
- if (! polite) display("How about a `please\", Avvy?"); else
- if (ask("\23C\26Do you really want to quit?")) lmo=true;
- }
- break;
- case vb_go: display("Just use the arrow keys to walk there."); break;
- case vb_info: {
- aboutscroll=true;
-/* display('Thorsoft of Letchworth presents:'+^c+^m+^m+
- 'The medi‘val descendant of'+^m+
- 'Denarius Avaricius Sextus'+^m+'in:'+
- ^m+^m+'LORD AVALOT D''ARGENT'+
- ^m+'version '+vernum+^m+^m+'Copyright ï '
- +copyright+', Mark, Mike and Thomas Thurman.');*/
- display(string("\r\r\r\r\r\r\r")+"LORD AVALOT D'ARGENT"+"\3\r"+
- "The medi‘val descendant of"+'\15'+
- "Denarius Avaricius Sextus"+
- '\15'+'\15'+"version "+vernum+'\15'+'\15'+"Copyright ï "
- +copyright+", Mark, Mike and Thomas Thurman."+'\23'+'Y'+'\26');
- aboutscroll=false;
- }
- break;
- case vb_undress: if (dna.wearing==nowt) display("You're already stark naked!");
- else
- if (dna.avvys_in_the_cupboard)
- {
- display(string("You take off ")+get_better(dna.wearing)+'.');
- dna.wearing=nowt; objectlist;
- } else
- display("Hadn't you better find somewhere more private, Avvy?");
- break;
- case vb_wear: if (holding())
- { /* wear something */
- switch (thing) {
- case chastity: display("Hey, what kind of a weirdo are you\??!"); break;
- case clothes:case habit: { /* Change this! */
- if (dna.wearing!=nowt)
- {
- if (dna.wearing==thing)
- display("You're already wearing that.");
- else
- display(string("You'll be rather warm wearing two ")+
- "sets of clothes!");
- return;
- } else
- dna.wearing=thing; objectlist;
- if (thing==habit) fv=3; else fv=0;
- { void& with = tr[1];
- if (whichsprite!=fv)
- {
- sx=tr[1].x; sy=tr[1].y;
- done;
- init(fv,true);
- appear(sx,sy,left);
- tr[1].visible=false;
- }}
- }
- break;
- default: display(what);
- }
- }
- break;
- case vb_play: if (thing==pardon)
- switch (dna.room) { /* They just typed "play"... */
- case r__argentpub: play_nim; break; /* ...in the pub, => play Nim. */
- case r__musicroom: play_harp(); break;
- }
- else if (holding())
- {
- switch (thing) {
- case lute : {
- dixi('U',7);
- if (whereis[pcwytalot]==dna.room) dixi('U',10);
- if (whereis[pdulustie]==dna.room) dixi('U',15);
- }
- break;
- case '\64' : if (dna.room==r__musicroom) play_harp();
- else display(what);
- break;
- case '\67' : if (dna.room==r__argentpub) play_nim;
- else display(what);
- break;
- default: display(what);
- }
- }
- break;
- case vb_ring: if (holding())
- {
- if (thing==bell)
- {
- display("Ding, dong, ding, dong, ding, dong, ding, dong...");
- if ((dna.ringing_bells) & (flagset('B')))
- display("(Are you trying to join in, Avvy\?\?!)");
- } else display(what);
- }
- break;
- case vb_help: boot_help; break;
- case vb_larrypass: display("Wrong game!"); break;
- case vb_phaon: display("Hello, Phaon!"); break;
- case vb_boss: bosskey; break;
- case vb_pee: if (flagset('P'))
- {
- display("Hmm, I don't think anyone will notice...");
- set_up_timer(4,procurinate,reason_gototoilet);
- } else display("It would be \6VERY\22 unwise to do that here, Avvy!");
- break;
- case vb_cheat: {
- display(string('\6')+"Cheat mode now enabled.");
- cheat=true;
- }
- break;
- case vb_magic: if (dna.avaricius_talk>0)
- dixi('q',19);
- else {
- if ((dna.room==12) & (infield(2)))
- { /* Avaricius appears! */
- dixi('q',17);
- if (whereis['\227']==12)
- dixi('q',18);
- else
- {
- tr[2].init(1,false); /* Avaricius */
- apped(2,4);
- tr[2].walkto(5);
- tr[2].call_eachstep=true;
- tr[2].eachstep=procback_and_forth;
- dna.avaricius_talk=14;
- set_up_timer(177,procavaricius_talks,reason_avariciustalks);
- }
- } else display("Nothing appears to happen...");
- }
- break;
- case vb_smartalec: display("Listen, smart alec, that was just rhetoric."); break;
- case vb_expletive: {
- switch (swore) {
- case 0: display(string("Avvy! Do you mind? There might be kids playing!\r\r")+
- "(I shouldn't say it again, if I were you!)");
- break;
- case 1: display(string("You hear a distant rumble of thunder. Must you always ")+
- "do things I tell you not to?\r\rDon't do it again!");
- break;
- default:
- {
- zonk;
- display(string("A crack of lightning shoots from the sky, ")+
- "and fries you.\r\r(`Such is the anger of the gods, Avvy!\")");
- gameover;
- }
- }
- swore += 1;
- }
- break;
- case vb_listen: if ((dna.ringing_bells) & (flagset('B')))
- display(string("All other noise is drowned out by the ringing of ")+
- "the bells.");
- else
- if (listen=="")
- display("You can't hear anything much at the moment, Avvy.");
- else display(listen);
- break;
- case vb_buy: {
- /* What are they trying to buy? */
- switch (dna.room) {
- case r__argentpub: if (infield(6))
- { /* We're in a pub, and near the bar. */
- switch (thing) {
- case '\63':case '\65':case '\66':case '\72': { /* Beer, whisky, cider or mead */
- if (dna.malagauche==177) /* Already getting us one. */
- { dixi('D',15); return; }
- if (dna.teetotal) { dixi('D',6); return; }
- if (dna.alcohol==0) points(3);
- show_one(12);
- display(booze[thing]+", please.\231\2");
- dna.drinking=thing;
-
- show_one(10);
- dna.malagauche=177;
- set_up_timer(27,procbuydrinks,reason_drinks);
- }
- break;
- case '\64': examine(); break; /* We have a right one here- buy Pepsi??! */
- case wine: if (dna.obj[wine]) /* We've already got the wine! */
- dixi('D',2); /* 1 bottle's shufishent! */
- else {
- if (dna.malagauche==177) /* Already getting us one. */
- { dixi('D',15); return; }
- if (dna.carrying>=maxobjs)
- { display("Your hands are full."); return; }
- show_one(12); display("Wine, please.\231\2");
- if (dna.alcohol==0) points(3);
- show_one(10);
- dna.malagauche=177;
-
- set_up_timer(27,procbuywine,reason_drinks);
- }
- break;
- }
- } else dixi('D',5);
- break; /* Go to the bar! */
-
- case r__outsideducks: if (infield(6))
- {
- if (thing==onion)
- {
- if (dna.obj[onion])
- dixi('D',10); /* not planning to juggle with the things! */
- else
- if (dna.carrying>=maxobjs)
- display("Before you ask, you remember that your hands are full.");
- else
- {
- if (dna.bought_onion)
- dixi('D',11); else
- { dixi('D',9); points(3); }
- pennycheck(3); /* It costs thruppence. */
- dna.obj[onion]=true;
- objectlist;
- dna.bought_onion=true;
- dna.rotten_onion=false; /* It's OK when it leaves the stall! */
- dna.onion_in_vinegar=false;
- }
- } else dixi('D',0);
- } else dixi('D',0);
- break;
-
- case r__nottspub: dixi('n',15); break; /* Can't sell to southerners. */
- default: dixi('D',0); /* Can't buy that. */
- }
- }
- break;
- case vb_attack: {
- if ((dna.room==r__brummieroad) &&
- ((person=='\235') || (thing==crossbow) || (thing==bolt))
- && (whereis['\235']==dna.room))
- {
- switch (ord(dna.obj[bolt])+ord(dna.obj[crossbow])*2) {
- /* 0 = neither, 1 = only bolt, 2 = only crossbow,
- 3 = both. */
- case 0: {
- dixi('Q',10);
- display("(At the very least, don't use your bare hands!)");
- }
- break;
- case 1: display(string("Attack him with only a crossbow bolt? Are you ")+
- "planning on playing darts?!");
- break;
- case 2: display(string("Come on, Avvy! You're not going to get very far ")+
- "with only a crossbow!");
- break;
- case 3: {
- dixi('Q',11);
- dna.cwytalot_gone=true;
- dna.obj[bolt]=false; dna.obj[crossbow]=false;
- objectlist;
- magics[12].op=nix;
- points(7);
- tr[2].walkto(2);
- tr[2].vanishifstill=true;
- tr[2].call_eachstep=false;
- whereis['\235']=177;
- }
- break;
- default: dixi('Q',10); /* Please try not to be so violent! */
- }
- } else dixi('Q',10);
- }
- break;
- case vb_password: if (dna.room!=r__bridge)
- dixi('Q',12); else
- {
- ok=true;
- for( ff=1; ff <= length(thats); ff ++)
- for( fv=1; fv <= length(words[dna.pass_num+first_password].w); fv ++)
- if (words[dna.pass_num+first_password].w[fv] !=
- upcase(realwords[ff][fv]))
- ok=false;
- if (ok)
- {
- if (dna.drawbridge_open!=0)
- display("Contrary to your expectations, the drawbridge fails to close again.");
- else
- {
- points(4);
- display("The drawbridge opens!");
- set_up_timer(7,procopen_drawbridge,reason_drawbridgefalls);
- dna.drawbridge_open=1;
- }
- } else dixi('Q',12);
- }
- break;
- case vb_dir: dir(realwords[2]); break;
- case vb_die: gameover; break;
- case vb_score: display(string("Your score is ")+strf(dna.score)+",\3\rout of a "+
- "possible 128.\r\rThis gives you a rank of "+rank()+
- ".\r\r"+totaltime());
- break;
- case vb_put: putproc(); break;
- case vb_stand: stand_up(); break;
-
- case vb_kiss: if (person==pardon)
- display("Kiss whom?");
- else if (personshere())
- switch (person) {
- case '\226' ... '\256': display("Hey, what kind of a weirdo are you??"); break;
- case parkata: dixi('U',12); break;
- case pgeida: dixi('U',13); break;
- case pwisewoman: dixi('U',14); break;
- default: dixi('U',5); /* You WHAT? */
- }
- break;
-
- case vb_climb: if (dna.room==r__insidecardiffcastle) cardiff_climbing();
- else /* In the wrong room! */
- display("Not with your head for heights, Avvy!");
- break;
-
- case vb_jump: {
- set_up_timer(1,procjump,reason_jumping);
- dna.user_moves_avvy=false;
- }
- break;
-
- case vb_highscores: show_highs; break;
-
- case vb_wake: if (personshere())
- switch (person) {
- case pardon:case pavalot:case '\0': if (~ avvy_is_awake)
- {
- avvy_is_awake=true;
- points(1);
- avvy_in_bed=true;
- show_one(3); /* Picture of Avvy, awake in bed. */
- if (teetotal) dixi('d',13);
- } else display("You're already awake, Avvy!");
- break;
- case payles: if (~ ayles_is_awake) display("You can't seem to wake him by yourself."); break;
- case pjacques: display(string("Brother Jacques, Brother Jacques, are you asleep?\231\2")+
- "Hmmm... that doesn't seem to do any good...");
- break;
- default: display("It's difficult to awaken people who aren't asleep...!");
- }
- break;
-
- case vb_sit: if (dna.room==r__nottspub)
- {
- if (dna.sitting_in_pub)
- display("You're already sitting!");
- else
- {
- tr[1].walkto(4); /* Move Avvy to the place, and sit him down. */
- set_up_timer(1,procavvy_sit_down,reason_sitting_down);
- }
- } else
- { /* Default doodah. */
- dusk;
- hang_around_for_a_while;
- dawn;
- display("A few hours later...\20nothing much has happened...");
- }
- break;
-
- case vb_restart: if (ask("Restart game and lose changes?")) {
- dusk;
- newgame;
- dawn;
- }
- break;
-
- case pardon: display("Hey, a verb would be helpful!"); break;
-
- case vb_hello: { person_speaks(); display("Hello.\2"); } break;
- case vb_thanks: { person_speaks(); display("That's OK.\2"); } break;
- default: display(string('\7')+"Parser bug!");
- }
+void do_that() {
+ const array < '\63', '\72', varying_string<6> > booze = {{"Bitter", "GIED", "Whisky", "Cider", "", "", "", "Mead"}};
+ byte fv, ff;
+ integer sx, sy;
+ boolean ok;
+
+
+ if (thats == nowt) {
+ thats = "";
+ return;
+ }
+ if (weirdword) return;
+ if (thing < '\310') thing -= 49; /* "Slip" */
+
+ if ((~ alive) &
+ !(set::of(vb_load, vb_save, vb_quit, vb_info, vb_help, vb_larrypass,
+ vb_phaon, vb_boss, vb_cheat, vb_restart, vb_dir, vb_score,
+ vb_highscores, vb_smartalec, eos).has(verb))) {
+ display(string("You're dead, so don't talk. What are you, a ghost ") +
+ "or something? Try restarting, or restoring a saved game!");
+ return;
+ }
+
+ if ((~ dna.avvy_is_awake) &
+ !(set::of(vb_load, vb_save, vb_quit, vb_info, vb_help, vb_larrypass,
+ vb_phaon, vb_boss, vb_cheat, vb_restart, vb_dir, vb_die, vb_score,
+ vb_highscores, vb_smartalec, vb_expletive, vb_wake, eos).has(verb))) {
+ display("Talking in your sleep? Try waking up!");
+ return;
+ }
+
+
+ switch (verb) {
+ case vb_exam:
+ examine();
+ break;
+ case vb_open:
+ opendoor();
+ break;
+ case vb_pause:
+ display(string("Game paused.") + '\3' + '\15' + '\15' + "Press Enter, Esc, or click " +
+ "the mouse on the `O.K.\" box to continue.");
+ break;
+ case vb_get: {
+ if (thing != pardon) {
+ /* Legitimate try to pick something up. */
+ if (dna.carrying >= maxobjs) display("You can't carry any more!");
+ else getproc(thing);
+
+ } else {
+ /* Not... ditto. */
+ if (person != pardon)
+ display("You can't sweep folk off their feet!");
+ else
+ display("I assure you, you don't need it.");
+ }
+ }
+ break;
+ case vb_drop:
+ display(string("Two years ago you dropped a florin in the street. Three days ") +
+ "later it was gone! So now you never leave ANYTHING lying around. OK?");
+ break;
+ /* begin dna.obj[thing]:=false; objectlist; end;*/
+ case vb_inv:
+ inv();
+ break;
+ case vb_talk:
+ if (person == pardon) {
+ if (subjnumber == 99) /* They typed "say password". */
+ display("Yes, but what \6is\22 the password?");
+ else if (set::of(range(1, 49), 253, 249, eos).has(subjnumber)) {
+ Delete(thats, 1, 1);
+ move(realwords[2], realwords[1], sizeof(realwords) - sizeof(realwords[1]));
+ verb = chr(subjnumber);
+ do_that();
+ return;
+ } else {
+ person = chr(subjnumber);
+ subjnumber = 0;
+ if (set::of(pardon, '\0', eos).has(person)) display("Talk to whom?");
+ else if (personshere()) talkto(ord(person));
+ }
+ } else if (person == pardon) display("Talk to whom?");
+ else if (personshere()) talkto(ord(person));
+ break;
+
+ case vb_give:
+ if (holding()) {
+ if (person == pardon) display("Give to whom?");
+ else if (personshere()) {
+ switch (thing) {
+ case money :
+ display("You can't bring yourself to give away your moneybag.");
+ break;
+ case bodkin:
+ case bell:
+ case clothes:
+ case habit :
+ display("Don't give it away, it might be useful!");
+ break;
+ default:
+ switch (person) {
+ case pcrapulus:
+ switch (thing) {
+ case wine: {
+ display("Crapulus grabs the wine and gulps it down.");
+ dna.obj[wine] = false;
+ }
+ break;
+ default:
+ heythanks();
+ }
+ break;
+ case pcwytalot:
+ if (set::of(crossbow, bolt, eos).has(thing))
+ display(string("You might be able to influence ") +
+ "Cwytalot more if you used it!");
+ else heythanks();
+ break;
+ case pspludwick:
+ if (give2spludwick()) heythanks();
+ break;
+ case pibythneth:
+ if (thing == badge) {
+ dixi('q', 32); /* Thanks! Wow! */
+ points(3);
+ dna.obj[badge] = false;
+ dna.obj[habit] = true;
+ dna.givenbadgetoiby = true;
+ show_one(8);
+ show_one(9);
+ } else heythanks();
+ break;
+ case payles:
+ if (dna.ayles_is_awake) {
+ if (thing == pen) {
+ dna.obj[pen] = false;
+ dixi('q', 54);
+ dna.obj[ink] = true;
+ dna.given_pen_to_ayles = true;
+ objectlist;
+ points(2);
+ } else heythanks();
+ } else
+ display("But he's asleep!");
+ break;
+ case pgeida:
+ switch (thing) {
+ case potion : {
+ dna.obj[potion] = false;
+ dixi('u', 16); /* She drinks it. */
+ points(2);
+ dna.geida_given_potion = true;
+ objectlist;
+ }
+ break;
+ case lute:
+ give_geida_the_lute();
+ break;
+ default:
+ heythanks();
+ }
+ break;
+ case parkata:
+ switch (thing) {
+ case potion:
+ if (dna.geida_given_potion)
+ winsequence();
+ else dixi('q', 77);
+ break; /* That Geida woman! */
+ default:
+ heythanks();
+ }
+ break;
+ default:
+ heythanks();
+ }
+ }
+ }
+ objectlist; /* Just in case... */
+ }
+ break;
+
+ case vb_eat:
+ case vb_drink:
+ if (holding()) swallow();
+ break;
+ case vb_load:
+ edna_load(realwords[2]);
+ break;
+ case vb_save:
+ if (alive) edna_save(realwords[2]);
+ else display("It's a bit late now to save your game!");
+ break;
+ case vb_pay:
+ display("No money need change hands.");
+ break;
+ case vb_look:
+ lookaround();
+ break;
+ case vb_break:
+ display("Vandalism is prohibited within this game!");
+ break;
+ case vb_quit: { /* quit */
+ if (demo) {
+ dixi('q', 31);
+ close(demofile);
+ exit(0); /* Change this later!!! */
+ }
+ if (! polite) display("How about a `please\", Avvy?");
+ else if (ask("\23C\26Do you really want to quit?")) lmo = true;
+ }
+ break;
+ case vb_go:
+ display("Just use the arrow keys to walk there.");
+ break;
+ case vb_info: {
+ aboutscroll = true;
+ /* display('Thorsoft of Letchworth presents:'+^c+^m+^m+
+ 'The medi‘val descendant of'+^m+
+ 'Denarius Avaricius Sextus'+^m+'in:'+
+ ^m+^m+'LORD AVALOT D''ARGENT'+
+ ^m+'version '+vernum+^m+^m+'Copyright ï '
+ +copyright+', Mark, Mike and Thomas Thurman.');*/
+ display(string("\r\r\r\r\r\r\r") + "LORD AVALOT D'ARGENT" + "\3\r" +
+ "The medi‘val descendant of" + '\15' +
+ "Denarius Avaricius Sextus" +
+ '\15' + '\15' + "version " + vernum + '\15' + '\15' + "Copyright ï "
+ + copyright + ", Mark, Mike and Thomas Thurman." + '\23' + 'Y' + '\26');
+ aboutscroll = false;
+ }
+ break;
+ case vb_undress:
+ if (dna.wearing == nowt) display("You're already stark naked!");
+ else if (dna.avvys_in_the_cupboard) {
+ display(string("You take off ") + get_better(dna.wearing) + '.');
+ dna.wearing = nowt;
+ objectlist;
+ } else
+ display("Hadn't you better find somewhere more private, Avvy?");
+ break;
+ case vb_wear:
+ if (holding()) {
+ /* wear something */
+ switch (thing) {
+ case chastity:
+ display("Hey, what kind of a weirdo are you\??!");
+ break;
+ case clothes:
+ case habit: { /* Change this! */
+ if (dna.wearing != nowt) {
+ if (dna.wearing == thing)
+ display("You're already wearing that.");
+ else
+ display(string("You'll be rather warm wearing two ") +
+ "sets of clothes!");
+ return;
+ } else
+ dna.wearing = thing;
+ objectlist;
+ if (thing == habit) fv = 3;
+ else fv = 0;
+ {
+ void &with = tr[1];
+ if (whichsprite != fv) {
+ sx = tr[1].x;
+ sy = tr[1].y;
+ done;
+ init(fv, true);
+ appear(sx, sy, left);
+ tr[1].visible = false;
+ }
+ }
+ }
+ break;
+ default:
+ display(what);
+ }
+ }
+ break;
+ case vb_play:
+ if (thing == pardon)
+ switch (dna.room) { /* They just typed "play"... */
+ case r__argentpub:
+ play_nim;
+ break; /* ...in the pub, => play Nim. */
+ case r__musicroom:
+ play_harp();
+ break;
+ }
+ else if (holding()) {
+ switch (thing) {
+ case lute : {
+ dixi('U', 7);
+ if (whereis[pcwytalot] == dna.room) dixi('U', 10);
+ if (whereis[pdulustie] == dna.room) dixi('U', 15);
+ }
+ break;
+ case '\64' :
+ if (dna.room == r__musicroom) play_harp();
+ else display(what);
+ break;
+ case '\67' :
+ if (dna.room == r__argentpub) play_nim;
+ else display(what);
+ break;
+ default:
+ display(what);
+ }
+ }
+ break;
+ case vb_ring:
+ if (holding()) {
+ if (thing == bell) {
+ display("Ding, dong, ding, dong, ding, dong, ding, dong...");
+ if ((dna.ringing_bells) & (flagset('B')))
+ display("(Are you trying to join in, Avvy\?\?!)");
+ } else display(what);
+ }
+ break;
+ case vb_help:
+ boot_help;
+ break;
+ case vb_larrypass:
+ display("Wrong game!");
+ break;
+ case vb_phaon:
+ display("Hello, Phaon!");
+ break;
+ case vb_boss:
+ bosskey;
+ break;
+ case vb_pee:
+ if (flagset('P')) {
+ display("Hmm, I don't think anyone will notice...");
+ set_up_timer(4, procurinate, reason_gototoilet);
+ } else display("It would be \6VERY\22 unwise to do that here, Avvy!");
+ break;
+ case vb_cheat: {
+ display(string('\6') + "Cheat mode now enabled.");
+ cheat = true;
+ }
+ break;
+ case vb_magic:
+ if (dna.avaricius_talk > 0)
+ dixi('q', 19);
+ else {
+ if ((dna.room == 12) & (infield(2))) {
+ /* Avaricius appears! */
+ dixi('q', 17);
+ if (whereis['\227'] == 12)
+ dixi('q', 18);
+ else {
+ tr[2].init(1, false); /* Avaricius */
+ apped(2, 4);
+ tr[2].walkto(5);
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procback_and_forth;
+ dna.avaricius_talk = 14;
+ set_up_timer(177, procavaricius_talks, reason_avariciustalks);
+ }
+ } else display("Nothing appears to happen...");
+ }
+ break;
+ case vb_smartalec:
+ display("Listen, smart alec, that was just rhetoric.");
+ break;
+ case vb_expletive: {
+ switch (swore) {
+ case 0:
+ display(string("Avvy! Do you mind? There might be kids playing!\r\r") +
+ "(I shouldn't say it again, if I were you!)");
+ break;
+ case 1:
+ display(string("You hear a distant rumble of thunder. Must you always ") +
+ "do things I tell you not to?\r\rDon't do it again!");
+ break;
+ default: {
+ zonk;
+ display(string("A crack of lightning shoots from the sky, ") +
+ "and fries you.\r\r(`Such is the anger of the gods, Avvy!\")");
+ gameover;
+ }
+ }
+ swore += 1;
+ }
+ break;
+ case vb_listen:
+ if ((dna.ringing_bells) & (flagset('B')))
+ display(string("All other noise is drowned out by the ringing of ") +
+ "the bells.");
+ else if (listen == "")
+ display("You can't hear anything much at the moment, Avvy.");
+ else display(listen);
+ break;
+ case vb_buy: {
+ /* What are they trying to buy? */
+ switch (dna.room) {
+ case r__argentpub:
+ if (infield(6)) {
+ /* We're in a pub, and near the bar. */
+ switch (thing) {
+ case '\63':
+ case '\65':
+ case '\66':
+ case '\72': { /* Beer, whisky, cider or mead */
+ if (dna.malagauche == 177) { /* Already getting us one. */
+ dixi('D', 15);
+ return;
+ }
+ if (dna.teetotal) {
+ dixi('D', 6);
+ return;
+ }
+ if (dna.alcohol == 0) points(3);
+ show_one(12);
+ display(booze[thing] + ", please.\231\2");
+ dna.drinking = thing;
+
+ show_one(10);
+ dna.malagauche = 177;
+ set_up_timer(27, procbuydrinks, reason_drinks);
+ }
+ break;
+ case '\64':
+ examine();
+ break; /* We have a right one here- buy Pepsi??! */
+ case wine:
+ if (dna.obj[wine]) /* We've already got the wine! */
+ dixi('D', 2); /* 1 bottle's shufishent! */
+ else {
+ if (dna.malagauche == 177) { /* Already getting us one. */
+ dixi('D', 15);
+ return;
+ }
+ if (dna.carrying >= maxobjs) {
+ display("Your hands are full.");
+ return;
+ }
+ show_one(12);
+ display("Wine, please.\231\2");
+ if (dna.alcohol == 0) points(3);
+ show_one(10);
+ dna.malagauche = 177;
+
+ set_up_timer(27, procbuywine, reason_drinks);
+ }
+ break;
+ }
+ } else dixi('D', 5);
+ break; /* Go to the bar! */
+
+ case r__outsideducks:
+ if (infield(6)) {
+ if (thing == onion) {
+ if (dna.obj[onion])
+ dixi('D', 10); /* not planning to juggle with the things! */
+ else if (dna.carrying >= maxobjs)
+ display("Before you ask, you remember that your hands are full.");
+ else {
+ if (dna.bought_onion)
+ dixi('D', 11);
+ else {
+ dixi('D', 9);
+ points(3);
+ }
+ pennycheck(3); /* It costs thruppence. */
+ dna.obj[onion] = true;
+ objectlist;
+ dna.bought_onion = true;
+ dna.rotten_onion = false; /* It's OK when it leaves the stall! */
+ dna.onion_in_vinegar = false;
+ }
+ } else dixi('D', 0);
+ } else dixi('D', 0);
+ break;
+
+ case r__nottspub:
+ dixi('n', 15);
+ break; /* Can't sell to southerners. */
+ default:
+ dixi('D', 0); /* Can't buy that. */
+ }
+ }
+ break;
+ case vb_attack: {
+ if ((dna.room == r__brummieroad) &&
+ ((person == '\235') || (thing == crossbow) || (thing == bolt))
+ && (whereis['\235'] == dna.room)) {
+ switch (ord(dna.obj[bolt]) + ord(dna.obj[crossbow]) * 2) {
+ /* 0 = neither, 1 = only bolt, 2 = only crossbow,
+ 3 = both. */
+ case 0: {
+ dixi('Q', 10);
+ display("(At the very least, don't use your bare hands!)");
+ }
+ break;
+ case 1:
+ display(string("Attack him with only a crossbow bolt? Are you ") +
+ "planning on playing darts?!");
+ break;
+ case 2:
+ display(string("Come on, Avvy! You're not going to get very far ") +
+ "with only a crossbow!");
+ break;
+ case 3: {
+ dixi('Q', 11);
+ dna.cwytalot_gone = true;
+ dna.obj[bolt] = false;
+ dna.obj[crossbow] = false;
+ objectlist;
+ magics[12].op = nix;
+ points(7);
+ tr[2].walkto(2);
+ tr[2].vanishifstill = true;
+ tr[2].call_eachstep = false;
+ whereis['\235'] = 177;
+ }
+ break;
+ default:
+ dixi('Q', 10); /* Please try not to be so violent! */
+ }
+ } else dixi('Q', 10);
+ }
+ break;
+ case vb_password:
+ if (dna.room != r__bridge)
+ dixi('Q', 12);
+ else {
+ ok = true;
+ for (ff = 1; ff <= length(thats); ff ++)
+ for (fv = 1; fv <= length(words[dna.pass_num + first_password].w); fv ++)
+ if (words[dna.pass_num + first_password].w[fv] !=
+ upcase(realwords[ff][fv]))
+ ok = false;
+ if (ok) {
+ if (dna.drawbridge_open != 0)
+ display("Contrary to your expectations, the drawbridge fails to close again.");
+ else {
+ points(4);
+ display("The drawbridge opens!");
+ set_up_timer(7, procopen_drawbridge, reason_drawbridgefalls);
+ dna.drawbridge_open = 1;
+ }
+ } else dixi('Q', 12);
+ }
+ break;
+ case vb_dir:
+ dir(realwords[2]);
+ break;
+ case vb_die:
+ gameover;
+ break;
+ case vb_score:
+ display(string("Your score is ") + strf(dna.score) + ",\3\rout of a " +
+ "possible 128.\r\rThis gives you a rank of " + rank() +
+ ".\r\r" + totaltime());
+ break;
+ case vb_put:
+ putproc();
+ break;
+ case vb_stand:
+ stand_up();
+ break;
+
+ case vb_kiss:
+ if (person == pardon)
+ display("Kiss whom?");
+ else if (personshere())
+ switch (person) {
+ case '\226' ... '\256':
+ display("Hey, what kind of a weirdo are you??");
+ break;
+ case parkata:
+ dixi('U', 12);
+ break;
+ case pgeida:
+ dixi('U', 13);
+ break;
+ case pwisewoman:
+ dixi('U', 14);
+ break;
+ default:
+ dixi('U', 5); /* You WHAT? */
+ }
+ break;
+
+ case vb_climb:
+ if (dna.room == r__insidecardiffcastle) cardiff_climbing();
+ else /* In the wrong room! */
+ display("Not with your head for heights, Avvy!");
+ break;
+
+ case vb_jump: {
+ set_up_timer(1, procjump, reason_jumping);
+ dna.user_moves_avvy = false;
+ }
+ break;
+
+ case vb_highscores:
+ show_highs;
+ break;
+
+ case vb_wake:
+ if (personshere())
+ switch (person) {
+ case pardon:
+ case pavalot:
+ case '\0':
+ if (~ avvy_is_awake) {
+ avvy_is_awake = true;
+ points(1);
+ avvy_in_bed = true;
+ show_one(3); /* Picture of Avvy, awake in bed. */
+ if (teetotal) dixi('d', 13);
+ } else display("You're already awake, Avvy!");
+ break;
+ case payles:
+ if (~ ayles_is_awake) display("You can't seem to wake him by yourself.");
+ break;
+ case pjacques:
+ display(string("Brother Jacques, Brother Jacques, are you asleep?\231\2") +
+ "Hmmm... that doesn't seem to do any good...");
+ break;
+ default:
+ display("It's difficult to awaken people who aren't asleep...!");
+ }
+ break;
+
+ case vb_sit:
+ if (dna.room == r__nottspub) {
+ if (dna.sitting_in_pub)
+ display("You're already sitting!");
+ else {
+ tr[1].walkto(4); /* Move Avvy to the place, and sit him down. */
+ set_up_timer(1, procavvy_sit_down, reason_sitting_down);
+ }
+ } else {
+ /* Default doodah. */
+ dusk;
+ hang_around_for_a_while;
+ dawn;
+ display("A few hours later...\20nothing much has happened...");
+ }
+ break;
+
+ case vb_restart:
+ if (ask("Restart game and lose changes?")) {
+ dusk;
+ newgame;
+ dawn;
+ }
+ break;
+
+ case pardon:
+ display("Hey, a verb would be helpful!");
+ break;
+
+ case vb_hello: {
+ person_speaks();
+ display("Hello.\2");
+ }
+ break;
+ case vb_thanks: {
+ person_speaks();
+ display("That's OK.\2");
+ }
+ break;
+ default:
+ display(string('\7') + "Parser bug!");
+ }
}
-void verbopt(char n, string& answer, char& anskey)
-{
- switch (n) {
- case vb_exam: { answer="Examine"; anskey='x'; } break; /* the ubiqutous one */
- /* vb_give isn't dealt with by this procedure, but by ddm__with */
- case vb_drink: { answer="Drink"; anskey='D'; } break;
- case vb_wear: { answer="Wear"; anskey='W'; } break;
- case vb_ring: { answer="Ring"; anskey='R'; } break; /* only the bell! */
- case vb_play: { answer="Play"; anskey='P'; } break;
- case vb_eat: { answer="Eat"; anskey='E'; } break;
- default: { answer="? Unknown!"; anskey='?'; } /* Bug! */
- }
+void verbopt(char n, string &answer, char &anskey) {
+ switch (n) {
+ case vb_exam: {
+ answer = "Examine";
+ anskey = 'x';
+ }
+ break; /* the ubiqutous one */
+ /* vb_give isn't dealt with by this procedure, but by ddm__with */
+ case vb_drink: {
+ answer = "Drink";
+ anskey = 'D';
+ }
+ break;
+ case vb_wear: {
+ answer = "Wear";
+ anskey = 'W';
+ }
+ break;
+ case vb_ring: {
+ answer = "Ring";
+ anskey = 'R';
+ }
+ break; /* only the bell! */
+ case vb_play: {
+ answer = "Play";
+ anskey = 'P';
+ }
+ break;
+ case vb_eat: {
+ answer = "Eat";
+ anskey = 'E';
+ }
+ break;
+ default: {
+ answer = "? Unknown!"; /* Bug! */
+ anskey = '?';
+ }
+ }
}
class unit_acci_initialize {
- public: unit_acci_initialize();
+public:
+ unit_acci_initialize();
};
static unit_acci_initialize acci_constructor;
unit_acci_initialize::unit_acci_initialize() {
- weirdword=false;
+ weirdword = false;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/acci.h b/engines/avalanche/acci.h
index 6734f6658e..c80f09d9b9 100644
--- a/engines/avalanche/acci.h
+++ b/engines/avalanche/acci.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,28 +31,67 @@
namespace Avalanche {
/* verb codes */
-const char vb_exam = '\1'; const char vb_open = '\2'; const char vb_pause = '\3'; const char vb_get = '\4'; const char vb_drop = '\5';
-const char vb_inv = '\6'; const char vb_talk = '\7'; const char vb_give = '\10'; const char vb_drink = '\11'; const char vb_load = '\12';
-const char vb_save = '\13'; const char vb_pay = '\14'; const char vb_look = '\15'; const char vb_break = '\16'; const char vb_quit = '\17';
-const char vb_sit = '\20'; const char vb_stand = '\21'; const char vb_go = '\22'; const char vb_info = '\23'; const char vb_undress = '\24';
-const char vb_wear = '\25'; const char vb_play = '\26'; const char vb_ring = '\27'; const char vb_help = '\30';
-const char vb_larrypass = '\31'; const char vb_phaon = '\32'; const char vb_boss = '\33'; const char vb_pee = '\34';
-const char vb_cheat = '\35'; const char vb_magic = '\36'; const char vb_restart = '\37'; const char vb_eat = '\40';
-const char vb_listen = '\41'; const char vb_buy = '\42'; const char vb_attack = '\43'; const char vb_password = '\44';
-const char vb_dir = '\45'; const char vb_die = '\46'; const char vb_score = '\47'; const char vb_put = '\50';
-const char vb_kiss = '\51'; const char vb_climb = '\52'; const char vb_jump = '\53'; const char vb_highscores = '\54';
-const char vb_wake = '\55'; const char vb_hello = '\56'; const char vb_thanks = '\57';
-
-const char vb_smartalec = '\371'; const char vb_expletive = '\375';
+const char vb_exam = '\1';
+const char vb_open = '\2';
+const char vb_pause = '\3';
+const char vb_get = '\4';
+const char vb_drop = '\5';
+const char vb_inv = '\6';
+const char vb_talk = '\7';
+const char vb_give = '\10';
+const char vb_drink = '\11';
+const char vb_load = '\12';
+const char vb_save = '\13';
+const char vb_pay = '\14';
+const char vb_look = '\15';
+const char vb_break = '\16';
+const char vb_quit = '\17';
+const char vb_sit = '\20';
+const char vb_stand = '\21';
+const char vb_go = '\22';
+const char vb_info = '\23';
+const char vb_undress = '\24';
+const char vb_wear = '\25';
+const char vb_play = '\26';
+const char vb_ring = '\27';
+const char vb_help = '\30';
+const char vb_larrypass = '\31';
+const char vb_phaon = '\32';
+const char vb_boss = '\33';
+const char vb_pee = '\34';
+const char vb_cheat = '\35';
+const char vb_magic = '\36';
+const char vb_restart = '\37';
+const char vb_eat = '\40';
+const char vb_listen = '\41';
+const char vb_buy = '\42';
+const char vb_attack = '\43';
+const char vb_password = '\44';
+const char vb_dir = '\45';
+const char vb_die = '\46';
+const char vb_score = '\47';
+const char vb_put = '\50';
+const char vb_kiss = '\51';
+const char vb_climb = '\52';
+const char vb_jump = '\53';
+const char vb_highscores = '\54';
+const char vb_wake = '\55';
+const char vb_hello = '\56';
+const char vb_thanks = '\57';
+
+const char vb_smartalec = '\371';
+const char vb_expletive = '\375';
const char pardon = '\376'; /* =didn't understand / wasn't given. */
struct vocab {
- byte n; varying_string<11> w;
+ byte n;
+ varying_string<11> w;
};
struct ranktype {
- word score; varying_string<12> title;
+ word score;
+ varying_string<12> title;
};
@@ -63,167 +102,171 @@ const char moved = '\0'; /* This word was moved. (Usually because it was the sub
const integer first_password = 89; /* Words[first_password] should equal "TIROS". */
-const array<1,nowords,vocab> words =
-
-/* Verbs, 1-49 */
-{{{1, "EXAMINE"}, {1, "READ"}, {1, "XAM"}, /* short */
- {2, "OPEN"}, {2, "LEAVE"}, {2, "UNLOCK"},
- {3, "PAUSE"}, {47, "TA"}, /* Early to avoid Take and Talk. */
- {4, "TAKE"}, {4, "GET"}, {4, "PICK"},
- {5, "DROP"}, {6, "INVENTORY"}, {7, "TALK"},
- {7, "SAY"}, {7, "ASK"},
- {8, "GIVE"}, {9, "DRINK"}, {9, "IMBIBE"},
- {9, "DRAIN"}, {10, "LOAD"}, {10, "RESTORE"},
- {11, "SAVE"}, {12, "BRIBE"}, {12, "PAY"},
- {13, "LOOK"}, {14, "BREAK"}, {15, "QUIT"},
- {15, "EXIT"}, {16, "SIT"}, {16, "SLEEP"},
- {17, "STAND"},
-
- {18, "GO"}, {19, "INFO"}, {20, "UNDRESS"},
- {20, "DOFF"},
- {21, "DRESS"}, {21, "WEAR"}, {21, "DON"},
- {22, "PLAY"},
- {22, "STRUM"}, {23, "RING"}, {24, "HELP"},
- {25, "KENDAL"}, {26, "CAPYBARA"}, {27, "BOSS"},
- {255,"NINET"}, /* block for NINETY */
- {28, "URINATE"}, {28, "MINGITE"}, {29, "NINETY"},
- {30,"ABRACADABRA"},{30, "PLUGH"}, {30, "XYZZY"},
- {30, "HOCUS"}, {30, "POCUS"}, {30, "IZZY"},
- {30, "WIZZY"}, {30, "PLOVER"},
- {30,"MELENKURION"},{30, "ZORTON"}, {30, "BLERBI"},
- {30, "THURB"}, {30, "SNOEZE"}, {30, "SAMOHT"},
- {30, "NOSIDE"}, {30, "PHUGGG"}, {30, "KNERL"},
- {30, "MAGIC"}, {30, "KLAETU"}, {30, "VODEL"},
- {30, "BONESCROLLS"},{30, "RADOF"},
-
- {31, "RESTART"},
- {32, "SWALLOW"}, {32, "EAT"}, {33, "LISTEN"},
- {33, "HEAR"}, {34, "BUY"}, {34, "PURCHASE"},
- {34, "ORDER"}, {34, "DEMAND"},
- {35, "ATTACK"}, {35, "HIT"}, {35, "KILL"},
- {35, "PUNCH"}, {35, "KICK"}, {35, "SHOOT"},
- {35, "FIRE"},
-
- /* Passwords, 36: */
-
- {36, "TIROS"}, {36, "WORDY"}, {36, "STACK"},
- {36, "SHADOW"}, {36, "OWL"}, {36, "ACORN"},
- {36, "DOMESDAY"}, {36, "FLOPPY"}, {36, "DIODE"},
- {36, "FIELD"}, {36, "COWSLIP"}, {36, "OSBYTE"},
- {36, "OSCLI"}, {36, "TIMBER"}, {36, "ADVAL"},
- {36, "NEUTRON"}, {36, "POSITRON"}, {36, "ELECTRON"},
- {36, "CIRCUIT"}, {36, "AURUM"}, {36, "PETRIFY"},
- {36, "EBBY"}, {36, "CATAPULT"}, {36, "GAMERS"},
- {36, "FUDGE"}, {36, "CANDLE"}, {36, "BEEB"},
- {36, "MICRO"}, {36, "SESAME"}, {36, "LORDSHIP"},
-
- {37, "DIR"}, {37, "LS"}, {38, "DIE"},
- {39, "SCORE"},
- {40, "PUT"}, {40, "INSERT"}, {41, "KISS"},
- {41, "SNOG"}, {41, "CUDDLE"}, {42, "CLIMB"},
- {42, "CLAMBER"}, {43, "JUMP"}, {44, "HIGHSCORES"},
- {44, "HISCORES"}, {45, "WAKEN"}, {45, "AWAKEN"},
- {46, "HELLO"}, {46, "HI"}, {46, "YO"},
- {47, "THANKS"}, /* = 47, "ta", which was defined earlier. */
-
-
-/* Nouns - Objects: 50-100. */
-
- {50, "WINE"}, {50, "BOOZE"}, {50,"NASTY"},
- {50, "VINEGAR"}, {51, "MONEYBAG"},
- {51, "BAG"}, {51, "CASH"}, {51,"DOSH"},
- {51, "WALLET"},
- {52, "BODKIN"}, {52, "DAGGER"}, {53,"POTION"},
- {54, "CHASTITY"}, {54, "BELT"}, {55,"BOLT"},
- {55, "ARROW"}, {55, "DART"},
- {56, "CROSSBOW"}, {56, "BOW"}, {57,"LUTE"},
- {58, "PILGRIM"}, {58, "BADGE"}, {59,"MUSHROOMS"},
- {59, "TOADSTOOLS"},{60, "KEY"}, {61,"BELL"},
- {62, "PRESCRIPT"}, {62, "SCROLL"}, {62,"MESSAGE"},
- {63, "PEN"}, {63, "QUILL"}, {64,"INK"},
- {64, "INKPOT"}, {65, "CLOTHES"}, {66,"HABIT"},
- {66, "DISGUISE"}, {67, "ONION"},
-
- {99,"PASSWORD"},
-
-/* Objects from Also are placed between 101 and 131. */
-
-/* Nouns - People - Male, 150-174 */
- {150, "AVVY"}, {150,"AVALOT"}, {150,"YOURSELF"},
- {150, "ME"}, {150,"MYSELF"}, {151,"SPLUDWICK"},
- {151, "THOMAS"}, {151,"ALCHEMIST"}, {151,"CHEMIST"},
- {152, "CRAPULUS"}, {152,"SERF"}, {152,"SLAVE"},
- {158, "DU"}, /* <<< Put in early for Baron DU Lustie to save confusion with Duck & Duke.*/
- {152, "CRAPPY"}, {153,"DUCK"}, {153,"DOCTOR"},
- {154, "MALAGAUCHE"},
- {155, "FRIAR"}, {155,"TUCK"}, {156,"ROBIN"},
- {156, "HOOD"}, {157,"CWYTALOT"}, {157,"GUARD"},
- {157, "BRIDGEKEEP"},{158,"BARON"}, {158,"LUSTIE"},
- {159, "DUKE"}, {159,"GRACE"}, {160,"DOGFOOD"},
- {160, "MINSTREL"}, {161,"TRADER"}, {161,"SHOPKEEPER"},
- {161,"STALLHOLDER"},
- {162, "PILGRIM"}, {162,"IBYTHNETH"}, {163,"ABBOT"},
- {163, "AYLES"}, {164,"PORT"}, {165,"SPURGE"},
- {166, "JACQUES"}, {166,"SLEEPER"}, {166,"RINGER"},
-
-/* Nouns- People - Female: 175-199 */
- {175, "WIFE"}, {175,"ARKATA"}, {176,"GEDALODAVA"},
- {176, "GEIDA"}, {176,"PRINCESS"}, {178,"WISE"},
- {178, "WITCH"},
-
-/* Pronouns, 200-224 */
- {200, "HIM"}, {200,"MAN"}, {200,"GUY"},
- {200, "DUDE"}, {200,"CHAP"}, {200,"FELLOW"},
- {201, "HER"}, {201,"GIRL"}, {201,"WOMAN"},
- {202, "IT"}, {202,"THING"},
-
- {203,"MONK"}, {204,"BARMAN"}, {204,"BARTENDER"},
-
-/* Prepositions, 225-249 */
- {225, "TO"}, {226,"AT"}, {227,"UP"},
- {228, "INTO"}, {228,"INSIDE"}, {229,"OFF"},
- {230, "UP"}, {231,"DOWN"}, {232,"ON"},
-
-
-/* Please, 251 */
- {251, "PLEASE"},
-
-/* About, 252 */
- {252, "ABOUT"}, {252, "CONCERNING"},
-
-/* Swear words, 253 */
- /* I M P O R T A N T M E S S A G E
-
- DO *NOT* READ THE LINES BELOW IF YOU ARE OF A SENSITIVE
- DISPOSITION. THOMAS IS *NOT* RESPONSIBLE FOR THEM.
- GOODNESS KNOWS WHO WROTE THEM.
- READ THEM AT YOUR OWN RISK. BETTER STILL, DON'T READ THEM.
- WHY ARE YOU SNOOPING AROUND IN MY PROGRAM, ANYWAY? */
-
- {253, "SHIT"}, {28 ,"PISS"}, {28 ,"PEE"},
- {253, "FART"}, {253,"FUCK"}, {253,"BALLS"},
- {253, "BLAST"}, {253,"BUGGER"}, {253,"KNICKERS"},
- {253, "BLOODY"}, {253,"HELL"}, {253,"DAMN"},
- {253, "SMEG"},
- /* and other even ruder words. You didn't read them, did you? Good. */
-
-/* Answer-back smart-alec words, 249 */
- {249, "YES"}, {249,"NO"}, {249,"BECAUSE"},
-
-/* Noise words, 255 */
- {255, "THE"}, {255,'A'}, {255,"NOW"},
- {255, "SOME"}, {255,"AND"}, {255,"THAT"},
- {255, "POCUS"}, {255,"HIS"},
- {255, "THIS"}, {255,"SENTINEL"}}}; /* for "Ken SENT Me" */
+const array<1, nowords, vocab> words =
+
+ /* Verbs, 1-49 */
+{ { {1, "EXAMINE"}, {1, "READ"}, {1, "XAM"}, /* short */
+ {2, "OPEN"}, {2, "LEAVE"}, {2, "UNLOCK"},
+ {3, "PAUSE"}, {47, "TA"}, /* Early to avoid Take and Talk. */
+ {4, "TAKE"}, {4, "GET"}, {4, "PICK"},
+ {5, "DROP"}, {6, "INVENTORY"}, {7, "TALK"},
+ {7, "SAY"}, {7, "ASK"},
+ {8, "GIVE"}, {9, "DRINK"}, {9, "IMBIBE"},
+ {9, "DRAIN"}, {10, "LOAD"}, {10, "RESTORE"},
+ {11, "SAVE"}, {12, "BRIBE"}, {12, "PAY"},
+ {13, "LOOK"}, {14, "BREAK"}, {15, "QUIT"},
+ {15, "EXIT"}, {16, "SIT"}, {16, "SLEEP"},
+ {17, "STAND"},
+
+ {18, "GO"}, {19, "INFO"}, {20, "UNDRESS"},
+ {20, "DOFF"},
+ {21, "DRESS"}, {21, "WEAR"}, {21, "DON"},
+ {22, "PLAY"},
+ {22, "STRUM"}, {23, "RING"}, {24, "HELP"},
+ {25, "KENDAL"}, {26, "CAPYBARA"}, {27, "BOSS"},
+ {255, "NINET"}, /* block for NINETY */
+ {28, "URINATE"}, {28, "MINGITE"}, {29, "NINETY"},
+ {30, "ABRACADABRA"}, {30, "PLUGH"}, {30, "XYZZY"},
+ {30, "HOCUS"}, {30, "POCUS"}, {30, "IZZY"},
+ {30, "WIZZY"}, {30, "PLOVER"},
+ {30, "MELENKURION"}, {30, "ZORTON"}, {30, "BLERBI"},
+ {30, "THURB"}, {30, "SNOEZE"}, {30, "SAMOHT"},
+ {30, "NOSIDE"}, {30, "PHUGGG"}, {30, "KNERL"},
+ {30, "MAGIC"}, {30, "KLAETU"}, {30, "VODEL"},
+ {30, "BONESCROLLS"}, {30, "RADOF"},
+
+ {31, "RESTART"},
+ {32, "SWALLOW"}, {32, "EAT"}, {33, "LISTEN"},
+ {33, "HEAR"}, {34, "BUY"}, {34, "PURCHASE"},
+ {34, "ORDER"}, {34, "DEMAND"},
+ {35, "ATTACK"}, {35, "HIT"}, {35, "KILL"},
+ {35, "PUNCH"}, {35, "KICK"}, {35, "SHOOT"},
+ {35, "FIRE"},
+
+ /* Passwords, 36: */
+
+ {36, "TIROS"}, {36, "WORDY"}, {36, "STACK"},
+ {36, "SHADOW"}, {36, "OWL"}, {36, "ACORN"},
+ {36, "DOMESDAY"}, {36, "FLOPPY"}, {36, "DIODE"},
+ {36, "FIELD"}, {36, "COWSLIP"}, {36, "OSBYTE"},
+ {36, "OSCLI"}, {36, "TIMBER"}, {36, "ADVAL"},
+ {36, "NEUTRON"}, {36, "POSITRON"}, {36, "ELECTRON"},
+ {36, "CIRCUIT"}, {36, "AURUM"}, {36, "PETRIFY"},
+ {36, "EBBY"}, {36, "CATAPULT"}, {36, "GAMERS"},
+ {36, "FUDGE"}, {36, "CANDLE"}, {36, "BEEB"},
+ {36, "MICRO"}, {36, "SESAME"}, {36, "LORDSHIP"},
+
+ {37, "DIR"}, {37, "LS"}, {38, "DIE"},
+ {39, "SCORE"},
+ {40, "PUT"}, {40, "INSERT"}, {41, "KISS"},
+ {41, "SNOG"}, {41, "CUDDLE"}, {42, "CLIMB"},
+ {42, "CLAMBER"}, {43, "JUMP"}, {44, "HIGHSCORES"},
+ {44, "HISCORES"}, {45, "WAKEN"}, {45, "AWAKEN"},
+ {46, "HELLO"}, {46, "HI"}, {46, "YO"},
+ {47, "THANKS"}, /* = 47, "ta", which was defined earlier. */
+
+
+ /* Nouns - Objects: 50-100. */
+
+ {50, "WINE"}, {50, "BOOZE"}, {50, "NASTY"},
+ {50, "VINEGAR"}, {51, "MONEYBAG"},
+ {51, "BAG"}, {51, "CASH"}, {51, "DOSH"},
+ {51, "WALLET"},
+ {52, "BODKIN"}, {52, "DAGGER"}, {53, "POTION"},
+ {54, "CHASTITY"}, {54, "BELT"}, {55, "BOLT"},
+ {55, "ARROW"}, {55, "DART"},
+ {56, "CROSSBOW"}, {56, "BOW"}, {57, "LUTE"},
+ {58, "PILGRIM"}, {58, "BADGE"}, {59, "MUSHROOMS"},
+ {59, "TOADSTOOLS"}, {60, "KEY"}, {61, "BELL"},
+ {62, "PRESCRIPT"}, {62, "SCROLL"}, {62, "MESSAGE"},
+ {63, "PEN"}, {63, "QUILL"}, {64, "INK"},
+ {64, "INKPOT"}, {65, "CLOTHES"}, {66, "HABIT"},
+ {66, "DISGUISE"}, {67, "ONION"},
+
+ {99, "PASSWORD"},
+
+ /* Objects from Also are placed between 101 and 131. */
+
+ /* Nouns - People - Male, 150-174 */
+ {150, "AVVY"}, {150, "AVALOT"}, {150, "YOURSELF"},
+ {150, "ME"}, {150, "MYSELF"}, {151, "SPLUDWICK"},
+ {151, "THOMAS"}, {151, "ALCHEMIST"}, {151, "CHEMIST"},
+ {152, "CRAPULUS"}, {152, "SERF"}, {152, "SLAVE"},
+ {158, "DU"}, /* <<< Put in early for Baron DU Lustie to save confusion with Duck & Duke.*/
+ {152, "CRAPPY"}, {153, "DUCK"}, {153, "DOCTOR"},
+ {154, "MALAGAUCHE"},
+ {155, "FRIAR"}, {155, "TUCK"}, {156, "ROBIN"},
+ {156, "HOOD"}, {157, "CWYTALOT"}, {157, "GUARD"},
+ {157, "BRIDGEKEEP"}, {158, "BARON"}, {158, "LUSTIE"},
+ {159, "DUKE"}, {159, "GRACE"}, {160, "DOGFOOD"},
+ {160, "MINSTREL"}, {161, "TRADER"}, {161, "SHOPKEEPER"},
+ {161, "STALLHOLDER"},
+ {162, "PILGRIM"}, {162, "IBYTHNETH"}, {163, "ABBOT"},
+ {163, "AYLES"}, {164, "PORT"}, {165, "SPURGE"},
+ {166, "JACQUES"}, {166, "SLEEPER"}, {166, "RINGER"},
+
+ /* Nouns- People - Female: 175-199 */
+ {175, "WIFE"}, {175, "ARKATA"}, {176, "GEDALODAVA"},
+ {176, "GEIDA"}, {176, "PRINCESS"}, {178, "WISE"},
+ {178, "WITCH"},
+
+ /* Pronouns, 200-224 */
+ {200, "HIM"}, {200, "MAN"}, {200, "GUY"},
+ {200, "DUDE"}, {200, "CHAP"}, {200, "FELLOW"},
+ {201, "HER"}, {201, "GIRL"}, {201, "WOMAN"},
+ {202, "IT"}, {202, "THING"},
+
+ {203, "MONK"}, {204, "BARMAN"}, {204, "BARTENDER"},
+
+ /* Prepositions, 225-249 */
+ {225, "TO"}, {226, "AT"}, {227, "UP"},
+ {228, "INTO"}, {228, "INSIDE"}, {229, "OFF"},
+ {230, "UP"}, {231, "DOWN"}, {232, "ON"},
+
+
+ /* Please, 251 */
+ {251, "PLEASE"},
+
+ /* About, 252 */
+ {252, "ABOUT"}, {252, "CONCERNING"},
+
+ /* Swear words, 253 */
+ /* I M P O R T A N T M E S S A G E
+
+ DO *NOT* READ THE LINES BELOW IF YOU ARE OF A SENSITIVE
+ DISPOSITION. THOMAS IS *NOT* RESPONSIBLE FOR THEM.
+ GOODNESS KNOWS WHO WROTE THEM.
+ READ THEM AT YOUR OWN RISK. BETTER STILL, DON'T READ THEM.
+ WHY ARE YOU SNOOPING AROUND IN MY PROGRAM, ANYWAY? */
+
+ {253, "SHIT"}, {28 , "PISS"}, {28 , "PEE"},
+ {253, "FART"}, {253, "FUCK"}, {253, "BALLS"},
+ {253, "BLAST"}, {253, "BUGGER"}, {253, "KNICKERS"},
+ {253, "BLOODY"}, {253, "HELL"}, {253, "DAMN"},
+ {253, "SMEG"},
+ /* and other even ruder words. You didn't read them, did you? Good. */
+
+ /* Answer-back smart-alec words, 249 */
+ {249, "YES"}, {249, "NO"}, {249, "BECAUSE"},
+
+ /* Noise words, 255 */
+ {255, "THE"}, {255, 'A'}, {255, "NOW"},
+ {255, "SOME"}, {255, "AND"}, {255, "THAT"},
+ {255, "POCUS"}, {255, "HIS"},
+ {255, "THIS"}, {255, "SENTINEL"}
+ }
+}; /* for "Ken SENT Me" */
const char what[] = "That's not possible!";
-const array<1,9,ranktype> ranks =
-{{{0, "Beginner"}, {10, "Novice"},
-{20, "Improving"}, {35, "Not bad"},
-{50, "Passable"}, {65, "Good"},
-{80, "Experienced"}, {108, "The BEST!"},
-{maxint, "copyright'93"}}};
+const array<1, 9, ranktype> ranks = {
+ { {0, "Beginner"}, {10, "Novice"},
+ {20, "Improving"}, {35, "Not bad"},
+ {50, "Passable"}, {65, "Good"},
+ {80, "Experienced"}, {108, "The BEST!"},
+ {maxint, "copyright'93"}
+ }
+};
#ifdef __acci_implementation__
@@ -233,8 +276,8 @@ const array<1,9,ranktype> ranks =
EXTERN varying_string<11> thats;
EXTERN varying_string<20> unknown;
-EXTERN array<1,11,varying_string<20> > realwords;
-EXTERN char verb,person,thing,thing2;
+EXTERN array<1, 11, varying_string<20> > realwords;
+EXTERN char verb, person, thing, thing2;
EXTERN boolean polite;
#undef EXTERN
#define EXTERN extern
@@ -245,7 +288,7 @@ void parse();
void lookaround();
void opendoor();
void do_that();
-void verbopt(char n, string& answer, char& anskey);
+void verbopt(char n, string &answer, char &anskey);
void have_a_drink();
} // End of namespace Avalanche.
diff --git a/engines/avalanche/also.cpp b/engines/avalanche/also.cpp
index 83dce5241b..3f3e32a09a 100644
--- a/engines/avalanche/also.cpp
+++ b/engines/avalanche/also.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,28 +33,37 @@
namespace Avalanche {
-typedef matrix<0,255,0,15,byte> fonttype;
+typedef matrix<0, 255, 0, 15, byte> fonttype;
class fieldtype {
public:
- integer x1,y1,x2,y2;
+ integer x1, y1, x2, y2;
};
class linetype : public fieldtype {
public:
- byte col;
+ byte col;
};
struct pedtype {
- integer x,y; byte dir;
+ integer x, y;
+ byte dir;
};
struct magictype {
- byte op; /* one of the operations */
- word data; /* data for them */
+ byte op; /* one of the operations */
+ word data; /* data for them */
};
-const integer numlines = 50; const integer up = 0; const integer right = 1; const integer down = 2; const integer left = 3; const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7;
+const integer numlines = 50;
+const integer up = 0;
+const integer right = 1;
+const integer down = 2;
+const integer left = 3;
+const integer ur = 4;
+const integer dr = 5;
+const integer dl = 6;
+const integer ul = 7;
const integer still = 8;
const integer nay = maxint;
@@ -69,988 +78,1455 @@ const integer nay = maxint;
/*S*/ const integer special = 5; /* special call */
/*O*/ const integer opendoor = 6; /* slowly opening door. */
-integer gd,gm;
-array<1,numlines,linetype> lines;
-array<1,numlines,fieldtype> fields;
+integer gd, gm;
+array<1, numlines, linetype> lines;
+array<1, numlines, fieldtype> fields;
boolean do1;
byte current;
string n;
-matrix<0,29,1,2,string> names;
+matrix<0, 29, 1, 2, string> names;
file<fonttype> f;
fonttype skinny;
-byte tx,ty;
-matrix<0,79,0,22,char> chars;
+byte tx, ty;
+matrix<0, 79, 0, 22, char> chars;
byte cursorflash;
-array<1,15,pedtype> peds;
-array<1,15,magictype> magics;
-array<9,15,magictype> portals;
+array<1, 15, pedtype> peds;
+array<1, 15, magictype> magics;
+array<9, 15, magictype> portals;
varying_string<26> flags;
string listen;
-const graphcursmasktype crosshairs =
-{
- ((63551,63807,63807,63807,61727,257,897,32765,897,257,61727,63807,63807,63807,63551,65535),
- (4368,21140,8840,53910,640,640,31868,33026,31868,640,640,53910,8840,21140,4368,0)),
- 7,
- 7};
-
-const graphcursmasktype hook =
-{
- ((32831,32831,49279,49279,57599,61695,61471,61447,63491,57089,36801,32771,49159,57375,63743,65535),
- (0,16256,7936,7936,3584,1536,1792,2016,248,28,8220,12344,8160,1792,0,0)),
- 2,
- 9};
-
-const graphcursmasktype tthand =
-{
- ((62463,57855,57855,57855,57471,49167,32769,0,0,0,0,32768,49152,57344,61441,61443),
- (3072,4608,4608,4608,4992,12912,21070,36937,36873,36865,32769,16385,8193,4097,2050,4092)),
- 4,
- 0};
-
-string strf(longint x)
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
+const graphcursmasktype crosshairs = {
+ ((63551, 63807, 63807, 63807, 61727, 257, 897, 32765, 897, 257, 61727, 63807, 63807, 63807, 63551, 65535),
+ (4368, 21140, 8840, 53910, 640, 640, 31868, 33026, 31868, 640, 640, 53910, 8840, 21140, 4368, 0)),
+ 7,
+ 7
+};
+
+const graphcursmasktype hook = {
+ ((32831, 32831, 49279, 49279, 57599, 61695, 61471, 61447, 63491, 57089, 36801, 32771, 49159, 57375, 63743, 65535),
+ (0, 16256, 7936, 7936, 3584, 1536, 1792, 2016, 248, 28, 8220, 12344, 8160, 1792, 0, 0)),
+ 2,
+ 9
+};
+
+const graphcursmasktype tthand = {
+ ((62463, 57855, 57855, 57855, 57471, 49167, 32769, 0, 0, 0, 0, 32768, 49152, 57344, 61441, 61443),
+ (3072, 4608, 4608, 4608, 4992, 12912, 21070, 36937, 36873, 36865, 32769, 16385, 8193, 4097, 2050, 4092)),
+ 4,
+ 0
+};
+
+string strf(longint x) {
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
+}
+
+void glimpse(byte ret) { /* glimpse of screen 3 */
+ char sink;
+ ;
+ hidemousecursor;
+ setvisualpage(3);
+ setcrtpagenumber(3);
+ showmousecursor;
+ do {
+ ;
+ } while (!(~ anymousekeypressed));
+ do {
+ ;
+ } while (!anymousekeypressed);
+ hidemousecursor;
+ setvisualpage(ret);
+ setcrtpagenumber(ret);
+ showmousecursor;
+ while (keypressed()) sink = readkey();
}
-void glimpse(byte ret) /* glimpse of screen 3 */
-{
- char sink;
-;
- hidemousecursor; setvisualpage(3); setcrtpagenumber(3); showmousecursor;
- do {; } while (!(~ anymousekeypressed));
- do {; } while (!anymousekeypressed);
- hidemousecursor; setvisualpage(ret); setcrtpagenumber(ret); showmousecursor;
- while (keypressed()) sink=readkey();
+void newline(byte t, integer p, integer q, integer r, integer s, byte c) {
+ ;
+ {
+ linetype &with = lines[t];
+ ;
+ x1 = p;
+ y1 = q;
+ x2 = r;
+ y2 = s;
+ with.col = c;
+ }
}
-void newline(byte t, integer p,integer q,integer r,integer s, byte c)
-{;
- {
- linetype& with = lines[t];
- ;
- x1=p; y1=q; x2=r; y2=s; with.col=c;
- }
+void newfield(byte t, integer p, integer q, integer r, integer s) {
+ ;
+ {
+ fieldtype &with = fields[t]; ;
+ with.x1 = p;
+ with.y1 = q;
+ with.x2 = r;
+ with.y2 = s;
+ }
}
-void newfield(byte t, integer p,integer q,integer r,integer s)
-{; {
- fieldtype& with = fields[t]; ; with.x1=p; with.y1=q; with.x2=r; with.y2=s; } }
-
-void drawped(byte p)
-{;
- { pedtype& with = peds[p];
- if (with.dir<177)
- {;
- setcolor(p); circle(with.x,with.y,5); moveto(with.x,with.y);
- switch (with.dir) {
- case up: linerel(0,-5); break; case down: linerel(0,5); break;
- case left: linerel(-7,0); break; case right: linerel(7,0); break;
- case ul: linerel(-7,-5); break; case dl: linerel(-7, 5); break;
- case ur: linerel( 7,-5); break; case dr: linerel( 7, 5); break;
- }
- }}
+void drawped(byte p) {
+ ;
+ {
+ pedtype &with = peds[p];
+ if (with.dir < 177) {
+ ;
+ setcolor(p);
+ circle(with.x, with.y, 5);
+ moveto(with.x, with.y);
+ switch (with.dir) {
+ case up:
+ linerel(0, -5);
+ break;
+ case down:
+ linerel(0, 5);
+ break;
+ case left:
+ linerel(-7, 0);
+ break;
+ case right:
+ linerel(7, 0);
+ break;
+ case ul:
+ linerel(-7, -5);
+ break;
+ case dl:
+ linerel(-7, 5);
+ break;
+ case ur:
+ linerel(7, -5);
+ break;
+ case dr:
+ linerel(7, 5);
+ break;
+ }
+ }
+ }
}
-void drawup()
-{
- byte fv;
-;
- cleardevice();
- for( fv=1; fv <= numlines; fv ++)
- { linetype& with = lines[fv];
- if (x1!=nay)
- {;
- setcolor(with.col);
- line(x1,y1,x2,y2);
- }}
- for( fv=1; fv <= numlines; fv ++)
- { fieldtype& with = fields[fv];
- if (with.x1!=nay)
- {;
- setcolor(fv);
- rectangle(with.x1,with.y1,with.x2,with.y2);
- }}
- for( fv=1; fv <= 15; fv ++) drawped(fv);
+void drawup() {
+ byte fv;
+ ;
+ cleardevice();
+ for (fv = 1; fv <= numlines; fv ++) {
+ linetype &with = lines[fv];
+ if (x1 != nay) {
+ ;
+ setcolor(with.col);
+ line(x1, y1, x2, y2);
+ }
+ }
+ for (fv = 1; fv <= numlines; fv ++) {
+ fieldtype &with = fields[fv];
+ if (with.x1 != nay) {
+ ;
+ setcolor(fv);
+ rectangle(with.x1, with.y1, with.x2, with.y2);
+ }
+ }
+ for (fv = 1; fv <= 15; fv ++) drawped(fv);
}
-void addped()
-{
- byte n,fv;
-;
- n=0; do { n += 1; } while (!((n==16) || (peds[n].dir==177)));
- setcrtpagenumber(0); setactivepage(0); setvisualpage(0);
- drawup(); setgraphicscursor(tthand); showmousecursor;
- do {
- if (rightmousekeypressed) return;
- if (keypressed()) glimpse(0);
- } while (!leftmousekeypressed);
- hidemousecursor;
- {
- pedtype& with = peds[n];
- ;
- with.x=mousex; with.y=mousey;
- }
- cleardevice(); setfillstyle(6,9); for( fv=1; fv <= 3; fv ++) bar(200*fv,0,200*fv,200);
- for( fv=1; fv <= 2; fv ++) bar(0,60*fv,640,60*fv);
- showmousecursor;
- do { if (rightmousekeypressed) return; } while (!leftmousekeypressed);
- hidemousecursor;
- { pedtype& with = peds[n];
- switch (((mousex / 200)*10)+(mousey / 60)) {
- case 0: with.dir=ul; break; case 10: with.dir=up; break; case 20: with.dir=ur; break;
- case 1: with.dir=left; break; case 11: with.dir=still; break; case 21: with.dir=right; break;
- case 2: with.dir=dl; break; case 12: with.dir=down; break; case 22: with.dir=dr; break;
- }}
+void addped() {
+ byte n, fv;
+ ;
+ n = 0;
+ do {
+ n += 1;
+ } while (!((n == 16) || (peds[n].dir == 177)));
+ setcrtpagenumber(0);
+ setactivepage(0);
+ setvisualpage(0);
+ drawup();
+ setgraphicscursor(tthand);
+ showmousecursor;
+ do {
+ if (rightmousekeypressed) return;
+ if (keypressed()) glimpse(0);
+ } while (!leftmousekeypressed);
+ hidemousecursor;
+ {
+ pedtype &with = peds[n];
+ ;
+ with.x = mousex;
+ with.y = mousey;
+ }
+ cleardevice();
+ setfillstyle(6, 9);
+ for (fv = 1; fv <= 3; fv ++) bar(200 * fv, 0, 200 * fv, 200);
+ for (fv = 1; fv <= 2; fv ++) bar(0, 60 * fv, 640, 60 * fv);
+ showmousecursor;
+ do {
+ if (rightmousekeypressed) return;
+ } while (!leftmousekeypressed);
+ hidemousecursor;
+ {
+ pedtype &with = peds[n];
+ switch (((mousex / 200) * 10) + (mousey / 60)) {
+ case 0:
+ with.dir = ul;
+ break;
+ case 10:
+ with.dir = up;
+ break;
+ case 20:
+ with.dir = ur;
+ break;
+ case 1:
+ with.dir = left;
+ break;
+ case 11:
+ with.dir = still;
+ break;
+ case 21:
+ with.dir = right;
+ break;
+ case 2:
+ with.dir = dl;
+ break;
+ case 12:
+ with.dir = down;
+ break;
+ case 22:
+ with.dir = dr;
+ break;
+ }
+ }
}
-void addline(byte ccc)
-{
- byte fv;
-;
- do {
- for( fv=1; fv <= numlines; fv ++)
- { linetype& with = lines[fv];
- if (x1==nay)
- {;
- x1=fv*17; x2=x1; y1=200; y2=190; with.col=ccc;
- return; /* bad style! */
- }}
- } while (!false);
+void addline(byte ccc) {
+ byte fv;
+ ;
+ do {
+ for (fv = 1; fv <= numlines; fv ++) {
+ linetype &with = lines[fv];
+ if (x1 == nay) {
+ ;
+ x1 = fv * 17;
+ x2 = x1;
+ y1 = 200;
+ y2 = 190;
+ with.col = ccc;
+ return; /* bad style! */
+ }
+ }
+ } while (!false);
}
-byte colour()
-{
- byte fv;
-byte colour_result;
-;
- setactivepage(0); setvisualpage(0); setcrtpagenumber(0);
- outtextxy(0,0,"Select a colour, please...");
- for( fv=1; fv <= 15; fv ++)
- {;
- setfillstyle(1,fv);
- bar(fv*40,27,39+fv*40,200);
- }
- showmousecursor;
- do {
- if (rightmousekeypressed) {; hidemousecursor; return colour_result; }
- if (keypressed()) glimpse(2);
- } while (!leftmousekeypressed);
- hidemousecursor;
- colour_result=getpixel(mousex,mousey); cleardevice();
-return colour_result;
+byte colour() {
+ byte fv;
+ byte colour_result;
+ ;
+ setactivepage(0);
+ setvisualpage(0);
+ setcrtpagenumber(0);
+ outtextxy(0, 0, "Select a colour, please...");
+ for (fv = 1; fv <= 15; fv ++) {
+ ;
+ setfillstyle(1, fv);
+ bar(fv * 40, 27, 39 + fv * 40, 200);
+ }
+ showmousecursor;
+ do {
+ if (rightmousekeypressed) {
+ ;
+ hidemousecursor;
+ return colour_result;
+ }
+ if (keypressed()) glimpse(2);
+ } while (!leftmousekeypressed);
+ hidemousecursor;
+ colour_result = getpixel(mousex, mousey);
+ cleardevice();
+ return colour_result;
}
-void addfield()
-{
- byte fv; boolean ok;
-;
- do {
- fv=colour();
- ok=fields[fv].x1==nay;
- if (! ok) output << '\7';
- } while (!ok);
- {
- fieldtype& with = fields[fv];
- ;
- with.x1=300+fv*17; with.x2=with.x1+1; with.y1=200; with.y2=177;
- }
+void addfield() {
+ byte fv;
+ boolean ok;
+ ;
+ do {
+ fv = colour();
+ ok = fields[fv].x1 == nay;
+ if (! ok) output << '\7';
+ } while (!ok);
+ {
+ fieldtype &with = fields[fv];
+ ;
+ with.x1 = 300 + fv * 17;
+ with.x2 = with.x1 + 1;
+ with.y1 = 200;
+ with.y2 = 177;
+ }
}
-byte checkline()
-{
- byte fv,ans;
-byte checkline_result;
-;
- setgraphicscursor(crosshairs);
- setcrtpagenumber(0); setactivepage(0); setvisualpage(0); drawup();
- do {
- showmousecursor;
- do {
- if (rightmousekeypressed) {; checkline_result=255; return checkline_result; }
- if (keypressed()) glimpse(0);
- } while (!leftmousekeypressed);
- hidemousecursor;
- setactivepage(1); ans=177;
- for( fv=1; fv <= numlines; fv ++) /* */
- {;
- { linetype& with = lines[fv];
- if (x1!=nay)
- {;
- setcolor( 9); line(x1,y1,x2,y2);
- if (getpixel(mousex,mousey)==9) ans=fv;
- setcolor( 0); line(x1,y1,x2,y2);
- }}
- { fieldtype& with = fields[fv];
- if (with.x1!=nay)
- {;
- setcolor( 9); rectangle(with.x1,with.y1,with.x2,with.y2);
- if (getpixel(mousex,mousey)==9) ans=fv+100;
- setcolor( 0); rectangle(with.x1,with.y1,with.x2,with.y2);
- }}
- }
- setactivepage(0);
- } while (!(ans!=177));
- checkline_result=ans;
-return checkline_result;
+byte checkline() {
+ byte fv, ans;
+ byte checkline_result;
+ ;
+ setgraphicscursor(crosshairs);
+ setcrtpagenumber(0);
+ setactivepage(0);
+ setvisualpage(0);
+ drawup();
+ do {
+ showmousecursor;
+ do {
+ if (rightmousekeypressed) {
+ ;
+ checkline_result = 255;
+ return checkline_result;
+ }
+ if (keypressed()) glimpse(0);
+ } while (!leftmousekeypressed);
+ hidemousecursor;
+ setactivepage(1);
+ ans = 177;
+ for (fv = 1; fv <= numlines; fv ++) { /* */
+ ;
+ {
+ linetype &with = lines[fv];
+ if (x1 != nay) {
+ ;
+ setcolor(9);
+ line(x1, y1, x2, y2);
+ if (getpixel(mousex, mousey) == 9) ans = fv;
+ setcolor(0);
+ line(x1, y1, x2, y2);
+ }
+ }
+ {
+ fieldtype &with = fields[fv];
+ if (with.x1 != nay) {
+ ;
+ setcolor(9);
+ rectangle(with.x1, with.y1, with.x2, with.y2);
+ if (getpixel(mousex, mousey) == 9) ans = fv + 100;
+ setcolor(0);
+ rectangle(with.x1, with.y1, with.x2, with.y2);
+ }
+ }
+ }
+ setactivepage(0);
+ } while (!(ans != 177));
+ checkline_result = ans;
+ return checkline_result;
}
void chooseside();
-static boolean itsaline;
-
-static void plotline()
-{;
- if (itsaline)
- { linetype& with = lines[gd];
- if (do1) line(mousex,mousey,x2,y2); else
- line(x1,y1,mousex,mousey);}
- else
- { fieldtype& with = fields[gd];
- if (do1) rectangle(mousex,mousey,with.x2,with.y2); else
- rectangle(with.x1,with.y1,mousex,mousey);}
+static boolean itsaline;
+
+static void plotline() {
+ ;
+ if (itsaline) {
+ linetype &with = lines[gd];
+ if (do1) line(mousex, mousey, x2, y2);
+ else
+ line(x1, y1, mousex, mousey);
+ } else {
+ fieldtype &with = fields[gd];
+ if (do1) rectangle(mousex, mousey, with.x2, with.y2);
+ else
+ rectangle(with.x1, with.y1, mousex, mousey);
+ }
}
-void chooseside()
-{
- byte clicol,savelcol;fieldtype current; integer temp;
-;
- do {
- gd=checkline(); itsaline=gd<100;
- if (gd==255) {; hidemousecursor; return; }
- if (! itsaline) gd -= 100;
- setactivepage(2); setvisualpage(2); cleardevice();
- setgraphicscursor(tthand); setcrtpagenumber(2);
- if (itsaline)
- {;
- current=lines[gd];
- savelcol=lines[gd].col;
- } else current=fields[gd];
- {;
- setcolor(9);
- if (itsaline) line(current.x1,current.y1,current.x2,current.y2); else rectangle(current.x1,current.y1,current.x2,current.y2);
- setcolor(9);
- setfillstyle(1,red); bar(current.x1-3,current.y1-3,current.x1+3,current.y1+3);
- setfillstyle(1,green); bar(current.x2-3,current.y2-3,current.x2+3,current.y2+3);
- do {; } while (!(~ anymousekeypressed));
- clicol=177; showmousecursor;
- do {
- if (anymousekeypressed)
- {;
- hidemousecursor;
- clicol=getpixel(mousex,mousey);
- showmousecursor;
- }
- if (rightmousekeypressed)
- {; hidemousecursor; return; }
- if (keypressed()) glimpse(2);
- } while (!(set::of(red,green, eos).has(clicol)));
- do1=clicol==red; hidemousecursor;
- setgraphicscursor(hook); setcrtpagenumber(0);
- setactivepage(0); setvisualpage(0); setcolor(0);
- if (itsaline)
- {
- linetype& with1 = lines[gd]; ; line(current.x1,current.y1,current.x2,current.y2); setcolor(with1.col); } else
- {
- fieldtype& with1 = fields[gd]; ; rectangle(with1.x1,with1.y1,with1.x2,with1.y2); setcolor(gd); }
- setwritemode(xorput);
- while (~ anymousekeypressed)
- {;
- plotline();
- showmousecursor; delay(1); hidemousecursor;
- plotline();
- if (rightmousekeypressed) {; hidemousecursor; return; }
- if (keypressed()) glimpse(0);
- }
- /* update "current" rec */
- if (do1) {; current.x1=mousex; current.y1=mousey; }
- else {; current.x2=mousex; current.y2=mousey; }
- if (! itsaline)
- {;
- if (current.x1>current.x2) {; temp=current.x2; current.x2=current.x1; current.x1=temp; }
- if (current.y1>current.y2) {; temp=current.y2; current.y2=current.y1; current.y1=temp; }
- }
- /* copy "current" to line/field */
- if (itsaline)
- {
- linetype& with1 = lines[gd];
- ;
- current.x1=current.x1; current.x2=current.x2; current.y1=current.y1; current.y2=current.y2;
- with1.col=savelcol;
- } else fields[gd]=current;
- }
- setwritemode(0);
- } while (!false);
+void chooseside() {
+ byte clicol, savelcol;
+ fieldtype current;
+ integer temp;
+ ;
+ do {
+ gd = checkline();
+ itsaline = gd < 100;
+ if (gd == 255) {
+ ;
+ hidemousecursor;
+ return;
+ }
+ if (! itsaline) gd -= 100;
+ setactivepage(2);
+ setvisualpage(2);
+ cleardevice();
+ setgraphicscursor(tthand);
+ setcrtpagenumber(2);
+ if (itsaline) {
+ ;
+ current = lines[gd];
+ savelcol = lines[gd].col;
+ } else current = fields[gd];
+ {
+ ;
+ setcolor(9);
+ if (itsaline) line(current.x1, current.y1, current.x2, current.y2);
+ else rectangle(current.x1, current.y1, current.x2, current.y2);
+ setcolor(9);
+ setfillstyle(1, red);
+ bar(current.x1 - 3, current.y1 - 3, current.x1 + 3, current.y1 + 3);
+ setfillstyle(1, green);
+ bar(current.x2 - 3, current.y2 - 3, current.x2 + 3, current.y2 + 3);
+ do {
+ ;
+ } while (!(~ anymousekeypressed));
+ clicol = 177;
+ showmousecursor;
+ do {
+ if (anymousekeypressed) {
+ ;
+ hidemousecursor;
+ clicol = getpixel(mousex, mousey);
+ showmousecursor;
+ }
+ if (rightmousekeypressed) {
+ ;
+ hidemousecursor;
+ return;
+ }
+ if (keypressed()) glimpse(2);
+ } while (!(set::of(red, green, eos).has(clicol)));
+ do1 = clicol == red;
+ hidemousecursor;
+ setgraphicscursor(hook);
+ setcrtpagenumber(0);
+ setactivepage(0);
+ setvisualpage(0);
+ setcolor(0);
+ if (itsaline) {
+ linetype &with1 = lines[gd]; ;
+ line(current.x1, current.y1, current.x2, current.y2);
+ setcolor(with1.col);
+ } else {
+ fieldtype &with1 = fields[gd]; ;
+ rectangle(with1.x1, with1.y1, with1.x2, with1.y2);
+ setcolor(gd);
+ }
+ setwritemode(xorput);
+ while (~ anymousekeypressed) {
+ ;
+ plotline();
+ showmousecursor;
+ delay(1);
+ hidemousecursor;
+ plotline();
+ if (rightmousekeypressed) {
+ ;
+ hidemousecursor;
+ return;
+ }
+ if (keypressed()) glimpse(0);
+ }
+ /* update "current" rec */
+ if (do1) {
+ ;
+ current.x1 = mousex;
+ current.y1 = mousey;
+ } else {
+ ;
+ current.x2 = mousex;
+ current.y2 = mousey;
+ }
+ if (! itsaline) {
+ ;
+ if (current.x1 > current.x2) {
+ ;
+ temp = current.x2;
+ current.x2 = current.x1;
+ current.x1 = temp;
+ }
+ if (current.y1 > current.y2) {
+ ;
+ temp = current.y2;
+ current.y2 = current.y1;
+ current.y1 = temp;
+ }
+ }
+ /* copy "current" to line/field */
+ if (itsaline) {
+ linetype &with1 = lines[gd];
+ ;
+ current.x1 = current.x1;
+ current.x2 = current.x2;
+ current.y1 = current.y1;
+ current.y2 = current.y2;
+ with1.col = savelcol;
+ } else fields[gd] = current;
+ }
+ setwritemode(0);
+ } while (!false);
}
-void delped()
-{;
- setcrtpagenumber(0); setactivepage(0); setvisualpage(0);
- drawup(); setgraphicscursor(tthand); showmousecursor;
- do {; } while (!leftmousekeypressed); peds[colour()].dir=177;
+void delped() {
+ ;
+ setcrtpagenumber(0);
+ setactivepage(0);
+ setvisualpage(0);
+ drawup();
+ setgraphicscursor(tthand);
+ showmousecursor;
+ do {
+ ;
+ } while (!leftmousekeypressed);
+ peds[colour()].dir = 177;
}
byte menu();
-static void say(byte y, string x)
-{;
- setfillstyle(1,y);
- bar(0,y*17,100,y*17+15); outtextxy(123,y*17,x);
+static void say(byte y, string x) {
+ ;
+ setfillstyle(1, y);
+ bar(0, y * 17, 100, y * 17 + 15);
+ outtextxy(123, y * 17, x);
}
-byte menu()
-{
- byte clicol;
-byte menu_result;
-;
- setcolor(15); settextstyle(0,0,2); clicol=0; setgraphicscursor(tthand);
- setvisualpage(2); setactivepage(2); setcrtpagenumber(2); cleardevice();
- say(3,"Move lines around");
- say(4,"Add a new line");
- say(5,"Delete a line");
- say(6,"Add a ped");
- say(7,"Delete a ped");
- say(8,"Add a field");
- say(10,"Return to Also.");
- showmousecursor;
- do {
- if (leftmousekeypressed)
- {;
- hidemousecursor;
- clicol=getpixel(mousex,mousey);
- showmousecursor;
- }
- if (rightmousekeypressed) {; hidemousecursor; return menu_result; }
- if (keypressed()) glimpse(2);
- } while (!(clicol>0));
- do {; } while (!(~ anymousekeypressed));
- hidemousecursor;
- menu_result=clicol;
-return menu_result;
+byte menu() {
+ byte clicol;
+ byte menu_result;
+ ;
+ setcolor(15);
+ settextstyle(0, 0, 2);
+ clicol = 0;
+ setgraphicscursor(tthand);
+ setvisualpage(2);
+ setactivepage(2);
+ setcrtpagenumber(2);
+ cleardevice();
+ say(3, "Move lines around");
+ say(4, "Add a new line");
+ say(5, "Delete a line");
+ say(6, "Add a ped");
+ say(7, "Delete a ped");
+ say(8, "Add a field");
+ say(10, "Return to Also.");
+ showmousecursor;
+ do {
+ if (leftmousekeypressed) {
+ ;
+ hidemousecursor;
+ clicol = getpixel(mousex, mousey);
+ showmousecursor;
+ }
+ if (rightmousekeypressed) {
+ ;
+ hidemousecursor;
+ return menu_result;
+ }
+ if (keypressed()) glimpse(2);
+ } while (!(clicol > 0));
+ do {
+ ;
+ } while (!(~ anymousekeypressed));
+ hidemousecursor;
+ menu_result = clicol;
+ return menu_result;
}
-void removeline()
-{;
- gd=checkline(); if (gd==255) {; hidemousecursor; return; }
- if (gd>100)
- fields[gd-100].x1=nay;
- else lines[gd].x1=nay; /* cancels it out */
- cleardevice(); drawup();
+void removeline() {
+ ;
+ gd = checkline();
+ if (gd == 255) {
+ ;
+ hidemousecursor;
+ return;
+ }
+ if (gd > 100)
+ fields[gd - 100].x1 = nay;
+ else lines[gd].x1 = nay; /* cancels it out */
+ cleardevice();
+ drawup();
}
-void lino()
-{;
- resetmouse;
- do {
- switch (menu()) {
- case 3: chooseside(); break;
- case 4: addline(colour()); break;
- case 5: removeline(); break;
- case 6: addped(); break;
- case 7: delped(); break;
- case 8: addfield(); break;
- case 10: return; break;
- }
- } while (!false);
+void lino() {
+ ;
+ resetmouse;
+ do {
+ switch (menu()) {
+ case 3:
+ chooseside();
+ break;
+ case 4:
+ addline(colour());
+ break;
+ case 5:
+ removeline();
+ break;
+ case 6:
+ addped();
+ break;
+ case 7:
+ delped();
+ break;
+ case 8:
+ addfield();
+ break;
+ case 10:
+ return;
+ break;
+ }
+ } while (!false);
}
-void loadscreen() /* load2 */
-{
- byte a /*absolute $A000:246560*/;
- byte bit;
- untyped_file f;
-;
- setactivepage(3); setvisualpage(3);
- assign(f,string("c:\\avalot\\place")+n+".avd"); reset(f,1); seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,12080);
- }
- close(f);
- setvisualpage(0);
- outtextxy(0,190,"Look carefully, and then press any key...");
- setactivepage(0);
+void loadscreen() { /* load2 */
+ byte a /*absolute $A000:246560*/;
+ byte bit;
+ untyped_file f;
+ ;
+ setactivepage(3);
+ setvisualpage(3);
+ assign(f, string("c:\\avalot\\place") + n + ".avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 12080);
+ }
+ close(f);
+ setvisualpage(0);
+ outtextxy(0, 190, "Look carefully, and then press any key...");
+ setactivepage(0);
}
-void ctrlsout(string& x) /* Replace real ctrls with caret codes */
-{
- byte fv; string xx;
-;
- xx="";
- for( fv=1; fv <= length(x); fv ++)
- if (x[fv]>'\37') xx=xx+x[fv]; else xx=xx+'^'+chr(ord(x[fv])+64);
- x=xx;
+void ctrlsout(string &x) { /* Replace real ctrls with caret codes */
+ byte fv;
+ string xx;
+ ;
+ xx = "";
+ for (fv = 1; fv <= length(x); fv ++)
+ if (x[fv] > '\37') xx = xx + x[fv];
+ else xx = xx + '^' + chr(ord(x[fv]) + 64);
+ x = xx;
}
-void ctrlsin(string& x) /* Opposite of ctrlsout */
-{
- byte fv; string xx; boolean ctrlwas;
-;
- xx=""; ctrlwas=false;
- for( fv=1; fv <= length(x); fv ++)
- if (ctrlwas) /* last char was a caret */
- {;
- xx=xx+chr(ord(upcase(x[fv]))-64);
- ctrlwas=false;
- }
- else
- {; /* last char wasn't a caret... */
- if (x[fv]=='^') ctrlwas=true; else /* ...but this one is */
- xx=xx+x[fv]; /* ...but this one isn't */
- }
- x=xx;
+void ctrlsin(string &x) { /* Opposite of ctrlsout */
+ byte fv;
+ string xx;
+ boolean ctrlwas;
+ ;
+ xx = "";
+ ctrlwas = false;
+ for (fv = 1; fv <= length(x); fv ++)
+ if (ctrlwas) { /* last char was a caret */
+ ;
+ xx = xx + chr(ord(upcase(x[fv])) - 64);
+ ctrlwas = false;
+ } else {
+ ; /* last char wasn't a caret... */
+ if (x[fv] == '^') ctrlwas = true;
+ else /* ...but this one is */
+ xx = xx + x[fv]; /* ...but this one isn't */
+ }
+ x = xx;
}
-void flipover() /* temp view other screen */
-{
- char r;
-;
- setvisualpage(3); r=readkey(); setvisualpage(0);
+void flipover() { /* temp view other screen */
+ char r;
+ ;
+ setvisualpage(3);
+ r = readkey();
+ setvisualpage(0);
}
-void plotchar(byte x,byte y, char n)
-{
- byte fv;
-;
- if (chars[x][y]==n) return;
- for( fv=0; fv <= 15; fv ++)
- mem[0xa000*y*1200+(fv+3)*80+x]=skinny[ord(n)][fv];
- chars[x][y]=n;
+void plotchar(byte x, byte y, char n) {
+ byte fv;
+ ;
+ if (chars[x][y] == n) return;
+ for (fv = 0; fv <= 15; fv ++)
+ mem[0xa000 * y * 1200 + (fv + 3) * 80 + x] = skinny[ord(n)][fv];
+ chars[x][y] = n;
}
-void cursor()
-{
- byte fv;
-;
- cursorflash += 1;
- switch (cursorflash) {
- case 1:case 127: for( fv=12; fv <= 14; fv ++)
- mem[0xa000*ty*1200+(3+fv)*80+tx]=~(mem[0xa000*ty*1200+(3+fv)*80+tx]);
- break;
- case 255: cursorflash=0; break;
- }
+void cursor() {
+ byte fv;
+ ;
+ cursorflash += 1;
+ switch (cursorflash) {
+ case 1:
+ case 127:
+ for (fv = 12; fv <= 14; fv ++)
+ mem[0xa000 * ty * 1200 + (3 + fv) * 80 + tx] = ~(mem[0xa000 * ty * 1200 + (3 + fv) * 80 + tx]);
+ break;
+ case 255:
+ cursorflash = 0;
+ break;
+ }
}
-void losecursor()
-{;
- if (cursorflash<127) {; cursorflash=126; cursor(); }
- cursorflash=0;
+void losecursor() {
+ ;
+ if (cursorflash < 127) {
+ ;
+ cursorflash = 126;
+ cursor();
+ }
+ cursorflash = 0;
}
-void gwrite(string x)
-{
- byte fv;
-;
- for( fv=1; fv <= length(x); fv ++)
- {;
- plotchar(tx,ty,x[fv]);
- tx += 1;
- if (tx==80) {; ty += 1; tx=0; }
- }
+void gwrite(string x) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= length(x); fv ++) {
+ ;
+ plotchar(tx, ty, x[fv]);
+ tx += 1;
+ if (tx == 80) {
+ ;
+ ty += 1;
+ tx = 0;
+ }
+ }
}
-string typein(string x)
-{
- const char marker = '\2';
- byte p; char r;
-string typein_result;
-;
- setvisualpage(0); setactivepage(0); cleardevice();
- settextstyle(0,0,1); setcolor(15);
- outtextxy( 0, 0,"Press TAB to see the room...");
- outtextxy( 0, 20,"You may use any of these Control Codes:");
- outtextxy(30, 30,"Anywhere: ^M = new line, ^P = new scroll, |1 fix to speaker 1.");
- outtextxy(90, 40,"^B = new bubble");
- outtextxy(30, 50,"At end of line: ^C = centre line, ^L = left justify.");
- outtextxy(30, 60,"At end of scroll: ^D = Don't add automatic ^P here.");
- outtextxy( 0, 80,"(Use by typing in (eg for ^P) ^ then P, not Ctrl-P.)");
- p=0; ctrlsout(x); fillchar(chars,sizeof(chars),'\40');
- do {
- tx=0; ty=6; gwrite(x+'\4'+'\40');
- tx=(p % 80); ty=(p / 80)+6;
- while (! keypressed()) {; delay(1); cursor(); } losecursor();
- r=readkey();
- switch (r) {
- case '\10': if (p>0) {; x=copy(x,1,p-1)+copy(x,p+1,255); p -= 1; } break; /* backspace */
- case '\11': flipover(); break;
- case '\40' ... '\377': {; x=copy(x,1,p)+r+copy(x,p+1,255); p += 1; } break;
- case '\0': switch (readkey()) { /* extd. keystroke */
- case 'G': p=0; break; /* Home */
- case 'K': if (p>0) p -= 1; break; /* left */
- case 'M': if (p<length(x)) p += 1; break; /* right */
- case 'H': if (p>80) p -= 80; break; /* up */
- case 'P': if (p<length(x)-80) p += 80; break; /* down */
- case 'O': p=length(x); break; /* End */
- case 'S': x=copy(x,1,p)+copy(x,p+2,255); break; /* Del */
- }
- break;
- }
- } while (!(r=='\15'));
- ctrlsin(x); typein_result=x;
-return typein_result;
+string typein(string x) {
+ const char marker = '\2';
+ byte p;
+ char r;
+ string typein_result;
+ ;
+ setvisualpage(0);
+ setactivepage(0);
+ cleardevice();
+ settextstyle(0, 0, 1);
+ setcolor(15);
+ outtextxy(0, 0, "Press TAB to see the room...");
+ outtextxy(0, 20, "You may use any of these Control Codes:");
+ outtextxy(30, 30, "Anywhere: ^M = new line, ^P = new scroll, |1 fix to speaker 1.");
+ outtextxy(90, 40, "^B = new bubble");
+ outtextxy(30, 50, "At end of line: ^C = centre line, ^L = left justify.");
+ outtextxy(30, 60, "At end of scroll: ^D = Don't add automatic ^P here.");
+ outtextxy(0, 80, "(Use by typing in (eg for ^P) ^ then P, not Ctrl-P.)");
+ p = 0;
+ ctrlsout(x);
+ fillchar(chars, sizeof(chars), '\40');
+ do {
+ tx = 0;
+ ty = 6;
+ gwrite(x + '\4' + '\40');
+ tx = (p % 80);
+ ty = (p / 80) + 6;
+ while (! keypressed()) {
+ ;
+ delay(1);
+ cursor();
+ }
+ losecursor();
+ r = readkey();
+ switch (r) {
+ case '\10':
+ if (p > 0) {
+ ;
+ x = copy(x, 1, p - 1) + copy(x, p + 1, 255);
+ p -= 1;
+ }
+ break; /* backspace */
+ case '\11':
+ flipover();
+ break;
+ case '\40' ... '\377': {
+ ;
+ x = copy(x, 1, p) + r + copy(x, p + 1, 255);
+ p += 1;
+ }
+ break;
+ case '\0':
+ switch (readkey()) { /* extd. keystroke */
+ case 'G':
+ p = 0;
+ break; /* Home */
+ case 'K':
+ if (p > 0) p -= 1;
+ break; /* left */
+ case 'M':
+ if (p < length(x)) p += 1;
+ break; /* right */
+ case 'H':
+ if (p > 80) p -= 80;
+ break; /* up */
+ case 'P':
+ if (p < length(x) - 80) p += 80;
+ break; /* down */
+ case 'O':
+ p = length(x);
+ break; /* End */
+ case 'S':
+ x = copy(x, 1, p) + copy(x, p + 2, 255);
+ break; /* Del */
+ }
+ break;
+ }
+ } while (!(r == '\15'));
+ ctrlsin(x);
+ typein_result = x;
+ return typein_result;
}
-byte typeno(string title)
-{
- varying_string<2> x; char r; integer e; word p;
-byte typeno_result;
-;
- cleardevice(); x="000";
- settextstyle(0,0,3); setcolor(9); outtextxy(0,0,title);
- setfillstyle(1,0); setcolor(10); fillchar(chars,sizeof(chars),'\40');
- do {
- bar(100,100,150,125);
- outtextxy(100,100,x);
- do { r=readkey(); } while (!(set::of(range('0','9'),'\33','\15', eos).has(r)));
- if (r=='\33') {; typeno_result=255; return typeno_result; }
- if (r!='\15') x=string(x[2])+r;
- } while (!(r=='\15'));
- val(x,p,e); typeno_result=p;
-return typeno_result;
+byte typeno(string title) {
+ varying_string<2> x;
+ char r;
+ integer e;
+ word p;
+ byte typeno_result;
+ ;
+ cleardevice();
+ x = "000";
+ settextstyle(0, 0, 3);
+ setcolor(9);
+ outtextxy(0, 0, title);
+ setfillstyle(1, 0);
+ setcolor(10);
+ fillchar(chars, sizeof(chars), '\40');
+ do {
+ bar(100, 100, 150, 125);
+ outtextxy(100, 100, x);
+ do {
+ r = readkey();
+ } while (!(set::of(range('0', '9'), '\33', '\15', eos).has(r)));
+ if (r == '\33') {
+ ;
+ typeno_result = 255;
+ return typeno_result;
+ }
+ if (r != '\15') x = string(x[2]) + r;
+ } while (!(r == '\15'));
+ val(x, p, e);
+ typeno_result = p;
+ return typeno_result;
}
-void showallnames()
-{
- byte fv; varying_string<2> s; char r;
-;
- settextstyle(0,0,2); cleardevice(); setcolor(13); outtextxy(0,0,"Descriptions start...");
- settextstyle(0,0,1); setcolor(7);
- for( fv=1; fv <= 29; fv ++)
- {;
- str(fv,2,s);
- outtextxy((fv / 15)*320,((fv % 15)*10)+30,s+'='+copy(names[fv][1],0,33));
- }
- setcolor(15); outtextxy(500,190,"Press any key...");
- r=readkey();
+void showallnames() {
+ byte fv;
+ varying_string<2> s;
+ char r;
+ ;
+ settextstyle(0, 0, 2);
+ cleardevice();
+ setcolor(13);
+ outtextxy(0, 0, "Descriptions start...");
+ settextstyle(0, 0, 1);
+ setcolor(7);
+ for (fv = 1; fv <= 29; fv ++) {
+ ;
+ str(fv, 2, s);
+ outtextxy((fv / 15) * 320, ((fv % 15) * 10) + 30, s + '=' + copy(names[fv][1], 0, 33));
+ }
+ setcolor(15);
+ outtextxy(500, 190, "Press any key...");
+ r = readkey();
}
void showallassoc();
-static void saascreen()
-{;
- settextstyle(0,0,2); cleardevice(); setcolor(10); outtextxy(0,0,"Everything...");
- settextstyle(0,0,1); setcolor(2);
- outtextxy(17,20,"(Format: <number> : <start of names> : <start of desc.>)");
+static void saascreen() {
+ ;
+ settextstyle(0, 0, 2);
+ cleardevice();
+ setcolor(10);
+ outtextxy(0, 0, "Everything...");
+ settextstyle(0, 0, 1);
+ setcolor(2);
+ outtextxy(17, 20, "(Format: <number> : <start of names> : <start of desc.>)");
}
-void showallassoc()
-{
- byte fv; varying_string<2> s; char r;
-
-;
- saascreen();
- for( fv=1; fv <= 30; fv ++)
- {;
- str(fv-1,2,s);
- outtextxy(0,(((fv-1) % 10)*10)+30,
- s+':'+copy(names[fv-1][1],1,7)+':'+copy(names[fv-1][2],1,70));
- if ((fv % 10)==0) {; r=readkey(); saascreen(); }
- }
- setcolor(15); outtextxy(500,190,"Press any key...");
- r=readkey();
+void showallassoc() {
+ byte fv;
+ varying_string<2> s;
+ char r;
+
+ ;
+ saascreen();
+ for (fv = 1; fv <= 30; fv ++) {
+ ;
+ str(fv - 1, 2, s);
+ outtextxy(0, (((fv - 1) % 10) * 10) + 30,
+ s + ':' + copy(names[fv - 1][1], 1, 7) + ':' + copy(names[fv - 1][2], 1, 70));
+ if ((fv % 10) == 0) {
+ ;
+ r = readkey();
+ saascreen();
+ }
+ }
+ setcolor(15);
+ outtextxy(500, 190, "Press any key...");
+ r = readkey();
}
-void clear()
-{
- byte fv;
-;
- fillchar(names ,sizeof(names ), '\0');
- for( fv=1; fv <= numlines; fv ++) {; lines[fv].x1=nay; fields[fv].x1=nay; }
- fillchar(peds ,sizeof(peds ),'\261');
+void clear() {
+ byte fv;
+ ;
+ fillchar(names , sizeof(names), '\0');
+ for (fv = 1; fv <= numlines; fv ++) {
+ ;
+ lines[fv].x1 = nay;
+ fields[fv].x1 = nay;
+ }
+ fillchar(peds , sizeof(peds), '\261');
}
void scramble();
-static void scram1(string& x)
-{
- byte fz;
-;
- for( fz=1; fz <= length(x); fz ++)
- x[fz]=chr(ord(x[fz]) ^ 177);
+static void scram1(string &x) {
+ byte fz;
+ ;
+ for (fz = 1; fz <= length(x); fz ++)
+ x[fz] = chr(ord(x[fz]) ^ 177);
}
-void scramble() /* Works both ways. */
-{
- byte fv,ff;
-;
- for( fv=0; fv <= 29; fv ++)
- for( ff=1; ff <= 2; ff ++)
- scram1(names[fv][ff]);
- scram1(listen);
- scram1(flags);
+void scramble() { /* Works both ways. */
+ byte fv, ff;
+ ;
+ for (fv = 0; fv <= 29; fv ++)
+ for (ff = 1; ff <= 2; ff ++)
+ scram1(names[fv][ff]);
+ scram1(listen);
+ scram1(flags);
}
-void save()
-{
- string x; untyped_file f; byte minnames,minlines,minpeds,minfields,fv,ff;
-;
- minnames =0; for( fv=0; fv <= 29; fv ++) if (names[fv][1]!="") minnames =fv;
- minlines =0; for( fv=1; fv <= numlines; fv ++)
- if (lines[fv].x1!=nay) minlines =fv;
- minpeds =0; for( fv=1; fv <= 15; fv ++) if (peds[fv].dir<177) minpeds =fv;
- minfields=0; for( fv=1; fv <= 30; fv ++) if (fields[fv].x1!=nay) minfields=fv;
- assign(f,string("c:\\avalot\\also")+n+".avd");
- rewrite(f,1);
- x=string("This is an Also .AVD file, which belongs to AVALOT.EXE. Its contents")+
- '\15'+'\12'+"are subject to copyright, so there. Have fun!"+'\32'+" *Minstrel* ";
- blockwrite(f,x[1],128);
- scramble();
- blockwrite(f,minnames,1);
- for( fv=0; fv <= minnames; fv ++)
- for( ff=1; ff <= 2; ff ++)
- blockwrite(f,names[fv][ff],length(names[fv][ff])+1);
- blockwrite(f,minlines,1);
- blockwrite(f,lines,sizeof(lines[1])*minlines);
- blockwrite(f,minpeds,1);
- blockwrite(f,peds,sizeof(peds[1])*minpeds);
- blockwrite(f,minfields,1);
- blockwrite(f,fields,sizeof(fields[1])*minfields);
- blockwrite(f,magics,sizeof(magics));
- blockwrite(f,portals,sizeof(portals));
- blockwrite(f,flags,sizeof(flags));
- blockwrite(f,listen[0],1);
- blockwrite(f,listen[1],length(listen));
- close(f);
- scramble();
+void save() {
+ string x;
+ untyped_file f;
+ byte minnames, minlines, minpeds, minfields, fv, ff;
+ ;
+ minnames = 0;
+ for (fv = 0; fv <= 29; fv ++) if (names[fv][1] != "") minnames = fv;
+ minlines = 0;
+ for (fv = 1; fv <= numlines; fv ++)
+ if (lines[fv].x1 != nay) minlines = fv;
+ minpeds = 0;
+ for (fv = 1; fv <= 15; fv ++) if (peds[fv].dir < 177) minpeds = fv;
+ minfields = 0;
+ for (fv = 1; fv <= 30; fv ++) if (fields[fv].x1 != nay) minfields = fv;
+ assign(f, string("c:\\avalot\\also") + n + ".avd");
+ rewrite(f, 1);
+ x = string("This is an Also .AVD file, which belongs to AVALOT.EXE. Its contents") +
+ '\15' + '\12' + "are subject to copyright, so there. Have fun!" + '\32' + " *Minstrel* ";
+ blockwrite(f, x[1], 128);
+ scramble();
+ blockwrite(f, minnames, 1);
+ for (fv = 0; fv <= minnames; fv ++)
+ for (ff = 1; ff <= 2; ff ++)
+ blockwrite(f, names[fv][ff], length(names[fv][ff]) + 1);
+ blockwrite(f, minlines, 1);
+ blockwrite(f, lines, sizeof(lines[1])*minlines);
+ blockwrite(f, minpeds, 1);
+ blockwrite(f, peds, sizeof(peds[1])*minpeds);
+ blockwrite(f, minfields, 1);
+ blockwrite(f, fields, sizeof(fields[1])*minfields);
+ blockwrite(f, magics, sizeof(magics));
+ blockwrite(f, portals, sizeof(portals));
+ blockwrite(f, flags, sizeof(flags));
+ blockwrite(f, listen[0], 1);
+ blockwrite(f, listen[1], length(listen));
+ close(f);
+ scramble();
}
void load();
-static untyped_file f;
-
-
-static string nextstring()
-{
- byte l; string x;
-string nextstring_result;
-;
- x=""; blockread(f,l,1); blockread(f,x[1],l); x[0]=chr(l); nextstring_result=x;
-return nextstring_result;
+static untyped_file f;
+
+
+static string nextstring() {
+ byte l;
+ string x;
+ string nextstring_result;
+ ;
+ x = "";
+ blockread(f, l, 1);
+ blockread(f, x[1], l);
+ x[0] = chr(l);
+ nextstring_result = x;
+ return nextstring_result;
}
-void load()
-{
- byte minnames,minlines,minpeds,minfields; byte ff,fv;
-
-;
- clear();
- assign(f,string("c:\\avalot\\also")+n+".avd");
-/*$I-*/ reset(f,1); /*$I+*/ if (ioresult!=0) return; /* no Also file */
- seek(f,128); blockread(f,minnames,1);
- for( fv=0; fv <= minnames; fv ++)
- for( ff=1; ff <= 2; ff ++)
- names[fv][ff]=nextstring();
- blockread(f,minlines,1);
- blockread(f,lines,sizeof(lines[1])*minlines);
- blockread(f,minpeds,1);
- blockread(f,peds,sizeof(peds[1])*minpeds);
- blockread(f,minfields,1);
- blockread(f,fields,sizeof(fields[1])*minfields);
- blockread(f,magics,sizeof(magics));
- blockread(f,portals,sizeof(portals));
- blockread(f,flags,sizeof(flags));
- blockread(f,listen[0],1);
- blockread(f,listen[1],length(listen));
- close(f);
- scramble();
+void load() {
+ byte minnames, minlines, minpeds, minfields;
+ byte ff, fv;
+
+ ;
+ clear();
+ assign(f, string("c:\\avalot\\also") + n + ".avd");
+ /*$I-*/ reset(f, 1); /*$I+*/ if (ioresult != 0) return; /* no Also file */
+ seek(f, 128);
+ blockread(f, minnames, 1);
+ for (fv = 0; fv <= minnames; fv ++)
+ for (ff = 1; ff <= 2; ff ++)
+ names[fv][ff] = nextstring();
+ blockread(f, minlines, 1);
+ blockread(f, lines, sizeof(lines[1])*minlines);
+ blockread(f, minpeds, 1);
+ blockread(f, peds, sizeof(peds[1])*minpeds);
+ blockread(f, minfields, 1);
+ blockread(f, fields, sizeof(fields[1])*minfields);
+ blockread(f, magics, sizeof(magics));
+ blockread(f, portals, sizeof(portals));
+ blockread(f, flags, sizeof(flags));
+ blockread(f, listen[0], 1);
+ blockread(f, listen[1], length(listen));
+ close(f);
+ scramble();
}
void editmagics();
-const array<1,15,char> codes = "123456789ABCDEF";
+const array<1, 15, char> codes = "123456789ABCDEF";
static integer y;
-static void display()
-{
- byte fv;
-;
- cleardevice();
- settextstyle(0,0,2); setcolor(15); outtextxy(0,0,"Magics.");
- settextstyle(0,0,1);
- for( fv=1; fv <= 15; fv ++)
- {;
- y=23+fv*10;
- setcolor(fv); outtextxy(100,y,string('$')+codes[fv-1]);
- {
- magictype& with = magics[fv];
- ;
- switch (with.op) {
- case nix: {; setcolor(8); outtextxy(140,y,"Nix"); } break;
- case bounce: {; setcolor(10); outtextxy(143,y,"Bounce!"); } break;
- case exclaim: {;
- setcolor(14); outtextxy(143,y,string("Exclaim: ")+strf(with.data));
- }
- break;
- case transport: {;
- setcolor(12);
- outtextxy(143,y,string("Transport to ")+strf(hi(with.data))+
- ", ped "+strf(lo(with.data)));
- }
- break;
- case unfinished: {;
- setcolor(15); outtextxy(143,y,"*** UNFINISHED! ***");
- }
- break;
- case special: {;
- setcolor(6); outtextxy(143,y,string("Special call no. ")+strf(with.data));
- }
- break;
- case opendoor: {;
- setcolor(11);
- outtextxy(143,y,string("Opening door to ")+strf(hi(with.data))+
- ", ped "+strf(lo(with.data)));
- }
- break;
- }
- }
- }
- outtextxy(177,190,"Which do you want to change\? (Esc=Exit) $");
+static void display() {
+ byte fv;
+ ;
+ cleardevice();
+ settextstyle(0, 0, 2);
+ setcolor(15);
+ outtextxy(0, 0, "Magics.");
+ settextstyle(0, 0, 1);
+ for (fv = 1; fv <= 15; fv ++) {
+ ;
+ y = 23 + fv * 10;
+ setcolor(fv);
+ outtextxy(100, y, string('$') + codes[fv - 1]);
+ {
+ magictype &with = magics[fv];
+ ;
+ switch (with.op) {
+ case nix: {
+ ;
+ setcolor(8);
+ outtextxy(140, y, "Nix");
+ }
+ break;
+ case bounce: {
+ ;
+ setcolor(10);
+ outtextxy(143, y, "Bounce!");
+ }
+ break;
+ case exclaim: {
+ ;
+ setcolor(14);
+ outtextxy(143, y, string("Exclaim: ") + strf(with.data));
+ }
+ break;
+ case transport: {
+ ;
+ setcolor(12);
+ outtextxy(143, y, string("Transport to ") + strf(hi(with.data)) +
+ ", ped " + strf(lo(with.data)));
+ }
+ break;
+ case unfinished: {
+ ;
+ setcolor(15);
+ outtextxy(143, y, "*** UNFINISHED! ***");
+ }
+ break;
+ case special: {
+ ;
+ setcolor(6);
+ outtextxy(143, y, string("Special call no. ") + strf(with.data));
+ }
+ break;
+ case opendoor: {
+ ;
+ setcolor(11);
+ outtextxy(143, y, string("Opening door to ") + strf(hi(with.data)) +
+ ", ped " + strf(lo(with.data)));
+ }
+ break;
+ }
+ }
+ }
+ outtextxy(177, 190, "Which do you want to change\? (Esc=Exit) $");
}
-static word ask(string x)
-{
- string q; word thomaswashere; integer e;
-word ask_result;
-;
- cleardevice();
- setcolor(10); settextstyle(0,0,3); outtextxy(0,100,x);
- do {
- input >> q >> NL; val(q,thomaswashere,e);
- } while (!(e==0)); ask_result=thomaswashere;
-return ask_result;
+static word ask(string x) {
+ string q;
+ word thomaswashere;
+ integer e;
+ word ask_result;
+ ;
+ cleardevice();
+ setcolor(10);
+ settextstyle(0, 0, 3);
+ outtextxy(0, 100, x);
+ do {
+ input >> q >> NL;
+ val(q, thomaswashere, e);
+ } while (!(e == 0));
+ ask_result = thomaswashere;
+ return ask_result;
}
-void editmagics()
-{
- char r,rr; byte p;
-
-;
- do {
- display();
- do {
- r=upcase(readkey());
- if (r=='\33') return;
- p=pos(r,codes); /* which are we editing? */
- } while (!(p>0)); /* it must BE there... */
- setcolor(p); cleardevice();
- outtextxy(177,17,string("Editing magic $")+r+'.');
- outtextxy(0,30,"New operation ( (N)ix, (B)ounce, (E)xclaim, (T)ransport, (U)nfinished),");
- outtextxy(30,40,"(S)pecial, (O)pening Door?");
- do { rr=upcase(readkey()); } while (!(set::of('N','B','E','T','U','S','O','\33', eos).has(rr)));
- { magictype& with = magics[p];
- switch (rr) {
- case '\33': return; break; /* cancelling code */
- case 'N': with.op=nix; break;
- case 'B': with.op=bounce; break;
- case 'E': {; with.op=exclaim; with.data=ask("Which scroll?"); } break;
- case 'T': {; with.op=transport; with.data=ask("Ped no.?")+ask("Whither?")*256; } break;
- case 'U': with.op=unfinished; break;
- case 'S': {; with.op=special; with.data=ask("Which call?"); } break;
- case 'O': {; with.op=opendoor; with.data=ask("Ped no.?")+ask("Whither?")*256; } break;
- }}
- } while (!false);
+void editmagics() {
+ char r, rr;
+ byte p;
+
+ ;
+ do {
+ display();
+ do {
+ r = upcase(readkey());
+ if (r == '\33') return;
+ p = pos(r, codes); /* which are we editing? */
+ } while (!(p > 0)); /* it must BE there... */
+ setcolor(p);
+ cleardevice();
+ outtextxy(177, 17, string("Editing magic $") + r + '.');
+ outtextxy(0, 30, "New operation ( (N)ix, (B)ounce, (E)xclaim, (T)ransport, (U)nfinished),");
+ outtextxy(30, 40, "(S)pecial, (O)pening Door?");
+ do {
+ rr = upcase(readkey());
+ } while (!(set::of('N', 'B', 'E', 'T', 'U', 'S', 'O', '\33', eos).has(rr)));
+ {
+ magictype &with = magics[p];
+ switch (rr) {
+ case '\33':
+ return;
+ break; /* cancelling code */
+ case 'N':
+ with.op = nix;
+ break;
+ case 'B':
+ with.op = bounce;
+ break;
+ case 'E': {
+ ;
+ with.op = exclaim;
+ with.data = ask("Which scroll?");
+ }
+ break;
+ case 'T': {
+ ;
+ with.op = transport;
+ with.data = ask("Ped no.?") + ask("Whither?") * 256;
+ }
+ break;
+ case 'U':
+ with.op = unfinished;
+ break;
+ case 'S': {
+ ;
+ with.op = special;
+ with.data = ask("Which call?");
+ }
+ break;
+ case 'O': {
+ ;
+ with.op = opendoor;
+ with.data = ask("Ped no.?") + ask("Whither?") * 256;
+ }
+ break;
+ }
+ }
+ } while (!false);
}
void editportals();
-const array<9,15,char> codes1 = "9ABCDEF";
+const array<9, 15, char> codes1 = "9ABCDEF";
static integer y2;
-static void display1()
-{
- byte fv;
-;
- cleardevice();
- settextstyle(0,0,2); setcolor(15); outtextxy(0,0,"Portals.");
- settextstyle(0,0,1);
- for( fv=9; fv <= 15; fv ++)
- {;
- y2=fv*10-53;
- setcolor(fv); outtextxy(100,y2,string('$')+codes1[fv-1]);
- {
- magictype& with = portals[fv];
- ;
- switch (with.op) {
- case nix: {; setcolor(8); outtextxy(140,y2,"Nix"); } break;
- case exclaim: {;
- setcolor(14); outtextxy(143,y2,string("Exclaim: ")+strf(with.data));
- }
- break;
- case transport: {;
- setcolor(12);
- outtextxy(143,y2,string("Transport to ")+strf(hi(with.data))+
- ", ped "+strf(lo(with.data)));
- }
- break;
- case unfinished: {;
- setcolor(15); outtextxy(143,y2,"*** UNFINISHED! ***");
- }
- break;
- case special: {;
- setcolor(6); outtextxy(143,y2,string("Special call no. ")+strf(with.data));
- }
- break;
- case opendoor: {;
- setcolor(11);
- outtextxy(143,y2,string("Opening door to ")+strf(hi(with.data))+
- ", ped "+strf(lo(with.data)));
- }
- break;
- }
- }
- }
- outtextxy(177,190,"Which do you want to change\? (Esc=Exit) $");
+static void display1() {
+ byte fv;
+ ;
+ cleardevice();
+ settextstyle(0, 0, 2);
+ setcolor(15);
+ outtextxy(0, 0, "Portals.");
+ settextstyle(0, 0, 1);
+ for (fv = 9; fv <= 15; fv ++) {
+ ;
+ y2 = fv * 10 - 53;
+ setcolor(fv);
+ outtextxy(100, y2, string('$') + codes1[fv - 1]);
+ {
+ magictype &with = portals[fv];
+ ;
+ switch (with.op) {
+ case nix: {
+ ;
+ setcolor(8);
+ outtextxy(140, y2, "Nix");
+ }
+ break;
+ case exclaim: {
+ ;
+ setcolor(14);
+ outtextxy(143, y2, string("Exclaim: ") + strf(with.data));
+ }
+ break;
+ case transport: {
+ ;
+ setcolor(12);
+ outtextxy(143, y2, string("Transport to ") + strf(hi(with.data)) +
+ ", ped " + strf(lo(with.data)));
+ }
+ break;
+ case unfinished: {
+ ;
+ setcolor(15);
+ outtextxy(143, y2, "*** UNFINISHED! ***");
+ }
+ break;
+ case special: {
+ ;
+ setcolor(6);
+ outtextxy(143, y2, string("Special call no. ") + strf(with.data));
+ }
+ break;
+ case opendoor: {
+ ;
+ setcolor(11);
+ outtextxy(143, y2, string("Opening door to ") + strf(hi(with.data)) +
+ ", ped " + strf(lo(with.data)));
+ }
+ break;
+ }
+ }
+ }
+ outtextxy(177, 190, "Which do you want to change\? (Esc=Exit) $");
}
-static word ask1(string x)
-{
- string q; word thomaswashere; integer e;
-word ask1_result;
-;
- cleardevice();
- setcolor(10); settextstyle(0,0,3); outtextxy(0,100,x);
- do {
- input >> q >> NL; val(q,thomaswashere,e);
- } while (!(e==0)); ask1_result=thomaswashere;
-return ask1_result;
+static word ask1(string x) {
+ string q;
+ word thomaswashere;
+ integer e;
+ word ask1_result;
+ ;
+ cleardevice();
+ setcolor(10);
+ settextstyle(0, 0, 3);
+ outtextxy(0, 100, x);
+ do {
+ input >> q >> NL;
+ val(q, thomaswashere, e);
+ } while (!(e == 0));
+ ask1_result = thomaswashere;
+ return ask1_result;
}
-void editportals() /* much t'same as editmagics */
-{
- char r,rr; byte p;
-
-;
- do {
- display1();
- do {
- r=upcase(readkey());
- if (r=='\33') return;
- p=pos(r,codes1); /* which are we editing? */
- } while (!(p>0)); /* it must BE there... */
- p += 8; setcolor(p); cleardevice();
- outtextxy(177,17,string("Editing portal $")+r+'.');
- outtextxy(0,30,"New operation ( (N)ix, (E)xclaim, (T)ransport, (U)nfinished),");
- outtextxy(30,40,"(S)pecial, (O)pening Door?");
- do { rr=upcase(readkey()); } while (!(set::of('N','E','T','U','S','O','\33', eos).has(rr)));
- { magictype& with = portals[p];
- switch (rr) {
- case '\33': return; break; /* cancelling code */
- case 'N': with.op=nix; break;
- case 'E': {; with.op=exclaim; with.data=ask1("Which scroll?"); } break;
- case 'T': {; with.op=transport; with.data=ask1("Ped no.?")+ask1("Whither?")*256; } break;
- case 'U': with.op=unfinished; break;
- case 'S': {; with.op=special; with.data=ask1("Which call?"); } break;
- case 'O': {; with.op=opendoor; with.data=ask1("Ped no.?")+ask1("Whither?")*256; } break;
- }}
- } while (!false);
+void editportals() { /* much t'same as editmagics */
+ char r, rr;
+ byte p;
+
+ ;
+ do {
+ display1();
+ do {
+ r = upcase(readkey());
+ if (r == '\33') return;
+ p = pos(r, codes1); /* which are we editing? */
+ } while (!(p > 0)); /* it must BE there... */
+ p += 8;
+ setcolor(p);
+ cleardevice();
+ outtextxy(177, 17, string("Editing portal $") + r + '.');
+ outtextxy(0, 30, "New operation ( (N)ix, (E)xclaim, (T)ransport, (U)nfinished),");
+ outtextxy(30, 40, "(S)pecial, (O)pening Door?");
+ do {
+ rr = upcase(readkey());
+ } while (!(set::of('N', 'E', 'T', 'U', 'S', 'O', '\33', eos).has(rr)));
+ {
+ magictype &with = portals[p];
+ switch (rr) {
+ case '\33':
+ return;
+ break; /* cancelling code */
+ case 'N':
+ with.op = nix;
+ break;
+ case 'E': {
+ ;
+ with.op = exclaim;
+ with.data = ask1("Which scroll?");
+ }
+ break;
+ case 'T': {
+ ;
+ with.op = transport;
+ with.data = ask1("Ped no.?") + ask1("Whither?") * 256;
+ }
+ break;
+ case 'U':
+ with.op = unfinished;
+ break;
+ case 'S': {
+ ;
+ with.op = special;
+ with.data = ask1("Which call?");
+ }
+ break;
+ case 'O': {
+ ;
+ with.op = opendoor;
+ with.data = ask1("Ped no.?") + ask1("Whither?") * 256;
+ }
+ break;
+ }
+ }
+ } while (!false);
}
-void editflags()
-{
- char r;
-;
- cleardevice();
- settextstyle(0,0,2); setcolor(15); outtextxy(0,0,"Flags.");
- settextstyle(0,0,1); setcolor(10);
- outtextxy(100,30,"Press the letter of the flag you want to toggle.");
- outtextxy(100,40,"Tab = flip screens, Esc/Enter = return to menu.");
- setcolor(14); setfillstyle(1,0);
- for( r='A'; r <= 'Z'; r ++)
- if (pos(r,flags)>0) outtextxy(ord(r)*20-1223,77,r);
- do {
- do { r=upcase(readkey()); } while (!(set::of(range('A','Z'),'\33','\15','\11', eos).has(r)));
- switch (r) {
- case RANGE_26('A','Z'): {;
- if (pos(r,flags)>0)
- {; /* flag is on- switch it off */
- Delete(flags,pos(r,flags),1);
- bar(ord(r)*20-1223,77,ord(r)*20-1213,87);
- sound(1777); delay(7); nosound;
- } else
- {; /* flag is off- switch it on */
- flags=flags+r;
- outtextxy(ord(r)*20-1223,77,r);
- sound(177); delay(7); nosound;
- }
- }
- break;
- case '\33':case '\15': return; break;
- case '\11': flipover(); break;
- }
- } while (!false);
+void editflags() {
+ char r;
+ ;
+ cleardevice();
+ settextstyle(0, 0, 2);
+ setcolor(15);
+ outtextxy(0, 0, "Flags.");
+ settextstyle(0, 0, 1);
+ setcolor(10);
+ outtextxy(100, 30, "Press the letter of the flag you want to toggle.");
+ outtextxy(100, 40, "Tab = flip screens, Esc/Enter = return to menu.");
+ setcolor(14);
+ setfillstyle(1, 0);
+ for (r = 'A'; r <= 'Z'; r ++)
+ if (pos(r, flags) > 0) outtextxy(ord(r) * 20 - 1223, 77, r);
+ do {
+ do {
+ r = upcase(readkey());
+ } while (!(set::of(range('A', 'Z'), '\33', '\15', '\11', eos).has(r)));
+ switch (r) {
+ case RANGE_26('A', 'Z'): {
+ ;
+ if (pos(r, flags) > 0) {
+ ; /* flag is on- switch it off */
+ Delete(flags, pos(r, flags), 1);
+ bar(ord(r) * 20 - 1223, 77, ord(r) * 20 - 1213, 87);
+ sound(1777);
+ delay(7);
+ nosound;
+ } else {
+ ; /* flag is off- switch it on */
+ flags = flags + r;
+ outtextxy(ord(r) * 20 - 1223, 77, r);
+ sound(177);
+ delay(7);
+ nosound;
+ }
+ }
+ break;
+ case '\33':
+ case '\15':
+ return;
+ break;
+ case '\11':
+ flipover();
+ break;
+ }
+ } while (!false);
}
-void alsomenu()
-{
- char r; byte t;
-;
- do {
- setactivepage(0); setvisualpage(0);
- cleardevice(); setcolor(15); settextstyle(0,0,2);
- outtextxy(0,0,"Also... Main Menu");
- settextstyle(0,0,1); setcolor(10);
- outtextxy(100, 40,"1) Edit the names of an object");
- outtextxy(100, 50,"2) View all names");
- outtextxy(100, 60,"3) Edit the description of this object");
- outtextxy(100, 70,"4) View all associations.");
- outtextxy(100, 80,"5) Enter Lino mode.");
- outtextxy(100, 90,"6) Edit magics.");
- outtextxy(100,100,"7) Edit portals.");
- outtextxy(100,110,"8) Edit flags.");
- outtextxy(100,120,"9) Edit listen field.");
- outtextxy(100,160,"S) Save");
- outtextxy(100,170,"L) Load");
- outtextxy( 80,180,"Tab) View other screen");
- if (current==0) outtextxy(0,140,"< Main description of room >"); else
- outtextxy(0,140,string('<')+names[current][1]+'>');
- do {
- r=upcase(readkey()); if (r=='\11') flipover();
- } while (!(set::of(range('1','9'),'S','L','\0', eos).has(r)));
- switch (r) {
- case '1': {;
- do {
- t=typeno("Which object\? (0-30)");
- } while (!((t<30) || (t==255)));
- if ((t!=255) && (t!=0)) names[t][1]=typein(names[t][1]);
- current=t;
- }
- break;
- case '2': showallnames(); break;
- case '3': names[current][2]=typein(names[current][2]); break;
- case '4': showallassoc(); break;
- case '5': lino(); break;
- case '6': editmagics(); break;
- case '7': editportals(); break;
- case '8': editflags(); break;
- case '9': listen=typein(listen); break;
- case 'S': save(); break;
- case 'L': load(); break;
- case '\0': if (readkey()=='\55') return; break;
- }
- } while (!false);
+void alsomenu() {
+ char r;
+ byte t;
+ ;
+ do {
+ setactivepage(0);
+ setvisualpage(0);
+ cleardevice();
+ setcolor(15);
+ settextstyle(0, 0, 2);
+ outtextxy(0, 0, "Also... Main Menu");
+ settextstyle(0, 0, 1);
+ setcolor(10);
+ outtextxy(100, 40, "1) Edit the names of an object");
+ outtextxy(100, 50, "2) View all names");
+ outtextxy(100, 60, "3) Edit the description of this object");
+ outtextxy(100, 70, "4) View all associations.");
+ outtextxy(100, 80, "5) Enter Lino mode.");
+ outtextxy(100, 90, "6) Edit magics.");
+ outtextxy(100, 100, "7) Edit portals.");
+ outtextxy(100, 110, "8) Edit flags.");
+ outtextxy(100, 120, "9) Edit listen field.");
+ outtextxy(100, 160, "S) Save");
+ outtextxy(100, 170, "L) Load");
+ outtextxy(80, 180, "Tab) View other screen");
+ if (current == 0) outtextxy(0, 140, "< Main description of room >");
+ else
+ outtextxy(0, 140, string('<') + names[current][1] + '>');
+ do {
+ r = upcase(readkey());
+ if (r == '\11') flipover();
+ } while (!(set::of(range('1', '9'), 'S', 'L', '\0', eos).has(r)));
+ switch (r) {
+ case '1': {
+ ;
+ do {
+ t = typeno("Which object\? (0-30)");
+ } while (!((t < 30) || (t == 255)));
+ if ((t != 255) && (t != 0)) names[t][1] = typein(names[t][1]);
+ current = t;
+ }
+ break;
+ case '2':
+ showallnames();
+ break;
+ case '3':
+ names[current][2] = typein(names[current][2]);
+ break;
+ case '4':
+ showallassoc();
+ break;
+ case '5':
+ lino();
+ break;
+ case '6':
+ editmagics();
+ break;
+ case '7':
+ editportals();
+ break;
+ case '8':
+ editflags();
+ break;
+ case '9':
+ listen = typein(listen);
+ break;
+ case 'S':
+ save();
+ break;
+ case 'L':
+ load();
+ break;
+ case '\0':
+ if (readkey() == '\55') return;
+ break;
+ }
+ } while (!false);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- output << "*** ALSO ***" << NL;
- output << NL;
- output << "No. of screen to edit?"; input >> n >> NL; load();
- assign(f,"v:avalot.fnt"); reset(f); f >> skinny; close(f);
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); current=0;
- loadscreen();
- alsomenu();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ output << "*** ALSO ***" << NL;
+ output << NL;
+ output << "No. of screen to edit?";
+ input >> n >> NL;
+ load();
+ assign(f, "v:avalot.fnt");
+ reset(f);
+ f >> skinny;
+ close(f);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ current = 0;
+ loadscreen();
+ alsomenu();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/andexor.cpp b/engines/avalanche/andexor.cpp
index df654117b8..b57585d3c6 100644
--- a/engines/avalanche/andexor.cpp
+++ b/engines/avalanche/andexor.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,119 +33,128 @@ namespace Avalanche {
const integer taboo = cyan;
struct adxtype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of all the pictures */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of all the pictures */
};
-integer gd,gm;
+integer gd, gm;
adxtype adx;
-matrix<1,24,0,1,pointer> adxpic; /* the pictures themselves */
-untyped_file f; string x; byte n;
-
-void load(string nam)
-{
- byte z;
- array<1,4,pointer> a;
- untyped_file f; word s;
- varying_string<40> xxx;
- string check;
-
-;
- assign(f,nam);
- reset(f,1);
- blockread(f,xxx,41);
- blockread(f,check,13);
- blockread(f,check,31);
- s=imagesize(0,0,getmaxx(),75);
- for( z=1; z <= 2; z ++)
- {;
- getmem(a[z],s);
- blockread(f,a[z],s);
- putimage(0,15+(z-1)*75,a[z],0);
- freemem(a[z],s);
- }
- close(f);
+matrix<1, 24, 0, 1, pointer> adxpic; /* the pictures themselves */
+untyped_file f;
+string x;
+byte n;
+
+void load(string nam) {
+ byte z;
+ array<1, 4, pointer> a;
+ untyped_file f;
+ word s;
+ varying_string<40> xxx;
+ string check;
+
+ ;
+ assign(f, nam);
+ reset(f, 1);
+ blockread(f, xxx, 41);
+ blockread(f, check, 13);
+ blockread(f, check, 31);
+ s = imagesize(0, 0, getmaxx(), 75);
+ for (z = 1; z <= 2; z ++) {
+ ;
+ getmem(a[z], s);
+ blockread(f, a[z], s);
+ putimage(0, 15 + (z - 1) * 75, a[z], 0);
+ freemem(a[z], s);
+ }
+ close(f);
}
-void silhouette()
-{
- byte x,y,c;
-;
- setvisualpage(1); setactivepage(1); setfillstyle(1,15);
- for( gm=0; gm <= 3; gm ++)
- for( gd=1; gd <= 6; gd ++)
- {; /* 26,15 */
-/* bar((gm div 2)*320+gd*40,20+(gm mod 2)*40,(gm div 2)*320+gd*40+35,(gm mod 2)*40+60); */
- for( y=1; y <= adx.yl; y ++)
- for( x=1; x <= adx.xl; x ++)
- {;
- setactivepage(0);
- c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y);
- setactivepage(1);
-/* if c<>taboo then putpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y,0); */
- if (c==taboo) putpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y,15);
- }
- getmem(adxpic[gm*6+gd][0],adx.size);
- getimage((gm / 2)*320+gd*40+1,20+(gm % 2)*40+1,
- (gm / 2)*320+gd*40+adx.xl,20+(gm % 2)*40+adx.yl,
- adxpic[gm*6+gd][0]);
- }
+void silhouette() {
+ byte x, y, c;
+ ;
+ setvisualpage(1);
+ setactivepage(1);
+ setfillstyle(1, 15);
+ for (gm = 0; gm <= 3; gm ++)
+ for (gd = 1; gd <= 6; gd ++) {
+ ; /* 26,15 */
+ /* bar((gm div 2)*320+gd*40,20+(gm mod 2)*40,(gm div 2)*320+gd*40+35,(gm mod 2)*40+60); */
+ for (y = 1; y <= adx.yl; y ++)
+ for (x = 1; x <= adx.xl; x ++) {
+ ;
+ setactivepage(0);
+ c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y);
+ setactivepage(1);
+ /* if c<>taboo then putpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y,0); */
+ if (c == taboo) putpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y, 15);
+ }
+ getmem(adxpic[gm * 6 + gd][0], adx.size);
+ getimage((gm / 2) * 320 + gd * 40 + 1, 20 + (gm % 2) * 40 + 1,
+ (gm / 2) * 320 + gd * 40 + adx.xl, 20 + (gm % 2) * 40 + adx.yl,
+ adxpic[gm * 6 + gd][0]);
+ }
}
-void standard()
-{
- byte x,y,c;
-;
- setvisualpage(2); setactivepage(2);
- for( gm=0; gm <= 3; gm ++)
- for( gd=1; gd <= 6; gd ++)
- {; /* 26,15 */
- for( y=1; y <= adx.yl; y ++)
- for( x=1; x <= adx.xl; x ++)
- {;
- setactivepage(0);
- c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y);
- setactivepage(2);
- if (c!=taboo) putpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y,c);
- }
- getmem(adxpic[gm*6+gd][1],adx.size);
- getimage((gm / 2)*320+gd*40+1,20+(gm % 2)*40+1,
- (gm / 2)*320+gd*40+adx.xl,20+(gm % 2)*40+adx.yl,
- adxpic[gm*6+gd][1]);
- }
+void standard() {
+ byte x, y, c;
+ ;
+ setvisualpage(2);
+ setactivepage(2);
+ for (gm = 0; gm <= 3; gm ++)
+ for (gd = 1; gd <= 6; gd ++) {
+ ; /* 26,15 */
+ for (y = 1; y <= adx.yl; y ++)
+ for (x = 1; x <= adx.xl; x ++) {
+ ;
+ setactivepage(0);
+ c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y);
+ setactivepage(2);
+ if (c != taboo) putpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y, c);
+ }
+ getmem(adxpic[gm * 6 + gd][1], adx.size);
+ getimage((gm / 2) * 320 + gd * 40 + 1, 20 + (gm % 2) * 40 + 1,
+ (gm / 2) * 320 + gd * 40 + adx.xl, 20 + (gm % 2) * 40 + adx.yl,
+ adxpic[gm * 6 + gd][1]);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,""); fillchar(adxpic,sizeof(adxpic),'\261');
- load("v:avalots.avd");
-/* getmem(adxpic[1,1,1],adx.size); getimage(40,20,75,60,adxpic[1,1,1]^);
- putimage(100,100,adxpic[1,1,1]^,0); */
- {;
- adx.name="Avalot";
- adx.num=24; adx.seq=6;
- adx.xl=32; adx.yl=35; /* 35,40 */
-
- adx.size=imagesize(40,20,40+adx.xl,60+adx.yl);
- }
- silhouette();
- standard();
- x=string("Sprite file for Avvy - Trippancy IV. Subject to copyright.")+'\32';
- assign(f,"v:sprite1.avd");
- rewrite(f,1);
- blockwrite(f,x[1],59);
- blockwrite(f,adx,sizeof(adx));
- for( gd=1; gd <= adx.num; gd ++)
- for( gm=0; gm <= 1; gm ++)
- blockwrite(f,adxpic[gd][gm],adx.size); /* next image */
- close(f);
- closegraph();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ fillchar(adxpic, sizeof(adxpic), '\261');
+ load("v:avalots.avd");
+ /* getmem(adxpic[1,1,1],adx.size); getimage(40,20,75,60,adxpic[1,1,1]^);
+ putimage(100,100,adxpic[1,1,1]^,0); */
+ {
+ ;
+ adx.name = "Avalot";
+ adx.num = 24;
+ adx.seq = 6;
+ adx.xl = 32;
+ adx.yl = 35; /* 35,40 */
+
+ adx.size = imagesize(40, 20, 40 + adx.xl, 60 + adx.yl);
+ }
+ silhouette();
+ standard();
+ x = string("Sprite file for Avvy - Trippancy IV. Subject to copyright.") + '\32';
+ assign(f, "v:sprite1.avd");
+ rewrite(f, 1);
+ blockwrite(f, x[1], 59);
+ blockwrite(f, adx, sizeof(adx));
+ for (gd = 1; gd <= adx.num; gd ++)
+ for (gm = 0; gm <= 1; gm ++)
+ blockwrite(f, adxpic[gd][gm], adx.size); /* next image */
+ close(f);
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/andexor2.cpp b/engines/avalanche/andexor2.cpp
index 136f719afe..605a185343 100644
--- a/engines/avalanche/andexor2.cpp
+++ b/engines/avalanche/andexor2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,130 +33,144 @@ namespace Avalanche {
const integer taboo = cyan;
struct adxtype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of all the pictures */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of all the pictures */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
-integer gd,gm;
+integer gd, gm;
adxtype adx;
-array<0,1,pointer> adxpic; /* the pictures themselves */
-untyped_file f; string x; byte n; integer side2; word bigsize;
-
-void load(string n)
-{
- byte z;
- array<1,4,pointer> a;
- untyped_file f; word s;
- varying_string<40> xxx;
- string check;
-
-;
- assign(f,n);
- reset(f,1);
- blockread(f,xxx,41);
- blockread(f,check,13);
- blockread(f,check,31);
- s=imagesize(0,0,getmaxx(),75);
- for( z=1; z <= 2; z ++)
- {;
- getmem(a[z],s);
- blockread(f,a[z],s);
- putimage(0,15+(z-1)*75,a[z],0);
- freemem(a[z],s);
- }
- close(f);
+array<0, 1, pointer> adxpic; /* the pictures themselves */
+untyped_file f;
+string x;
+byte n;
+integer side2;
+word bigsize;
+
+void load(string n) {
+ byte z;
+ array<1, 4, pointer> a;
+ untyped_file f;
+ word s;
+ varying_string<40> xxx;
+ string check;
+
+ ;
+ assign(f, n);
+ reset(f, 1);
+ blockread(f, xxx, 41);
+ blockread(f, check, 13);
+ blockread(f, check, 31);
+ s = imagesize(0, 0, getmaxx(), 75);
+ for (z = 1; z <= 2; z ++) {
+ ;
+ getmem(a[z], s);
+ blockread(f, a[z], s);
+ putimage(0, 15 + (z - 1) * 75, a[z], 0);
+ freemem(a[z], s);
+ }
+ close(f);
}
-void silhouette()
-{
- byte x,y,c;
-;
- setvisualpage(1); setactivepage(1); setfillstyle(1,15);
- {;
- for( gm=0; gm <= 3; gm ++)
- for( gd=1; gd <= 6; gd ++)
- {; /* 26,15 */
- side2=adx.xl*6;
- for( y=1; y <= adx.yl; y ++)
- for( x=1; x <= adx.xl; x ++)
- {;
- setactivepage(0);
- c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y);
- setactivepage(1);
- if (c==taboo)
- putpixel((gm / 2)*side2+gd*adx.xl+x,20+(gm % 2)*adx.yl+y,15);
- }
- }
- bigsize=imagesize(adx.xl+1,21,adx.xl*13,20+adx.yl*2);
- getmem(adxpic[0],bigsize);
- getimage(adx.xl+1,21,adx.xl*13,20+adx.yl*2,adxpic[0]);
- putimage(adx.xl+1,21,adxpic[0],notput);
- }
+void silhouette() {
+ byte x, y, c;
+ ;
+ setvisualpage(1);
+ setactivepage(1);
+ setfillstyle(1, 15);
+ {
+ ;
+ for (gm = 0; gm <= 3; gm ++)
+ for (gd = 1; gd <= 6; gd ++) {
+ ; /* 26,15 */
+ side2 = adx.xl * 6;
+ for (y = 1; y <= adx.yl; y ++)
+ for (x = 1; x <= adx.xl; x ++) {
+ ;
+ setactivepage(0);
+ c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y);
+ setactivepage(1);
+ if (c == taboo)
+ putpixel((gm / 2)*side2 + gd * adx.xl + x, 20 + (gm % 2)*adx.yl + y, 15);
+ }
+ }
+ bigsize = imagesize(adx.xl + 1, 21, adx.xl * 13, 20 + adx.yl * 2);
+ getmem(adxpic[0], bigsize);
+ getimage(adx.xl + 1, 21, adx.xl * 13, 20 + adx.yl * 2, adxpic[0]);
+ putimage(adx.xl + 1, 21, adxpic[0], notput);
+ }
}
-void standard()
-{
- byte x,y,c;
-;
- setvisualpage(2); setactivepage(2);
- {;
- for( gm=0; gm <= 3; gm ++)
- for( gd=1; gd <= 6; gd ++)
- {; /* 26,15 */
- for( y=1; y <= adx.yl; y ++)
- for( x=1; x <= adx.xl; x ++)
- {;
- setactivepage(0);
- c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y);
- setactivepage(2);
- if (c!=taboo)
- putpixel((gm / 2)*side2+gd*adx.xl+x,20+(gm % 2)*adx.yl+y,c);
- }
-/* getmem(adxpic[gm*6+gd,1],adx.size);
- getimage((gm div 2)*side2+gd*xl+x,20+(gm mod 2)*yl+y,
- (gm div 2)*side2+gd*xl*2+x,20+(gm mod 2)*yl*2+y,
- adxpic[gm*6+gd,1]^); */
- }
- getmem(adxpic[1],bigsize);
- getimage(adx.xl+1,21,adx.xl*13,20+adx.yl*2,adxpic[1]);
- putimage(adx.xl+1,21,adxpic[1],notput);
- }
+void standard() {
+ byte x, y, c;
+ ;
+ setvisualpage(2);
+ setactivepage(2);
+ {
+ ;
+ for (gm = 0; gm <= 3; gm ++)
+ for (gd = 1; gd <= 6; gd ++) {
+ ; /* 26,15 */
+ for (y = 1; y <= adx.yl; y ++)
+ for (x = 1; x <= adx.xl; x ++) {
+ ;
+ setactivepage(0);
+ c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y);
+ setactivepage(2);
+ if (c != taboo)
+ putpixel((gm / 2)*side2 + gd * adx.xl + x, 20 + (gm % 2)*adx.yl + y, c);
+ }
+ /* getmem(adxpic[gm*6+gd,1],adx.size);
+ getimage((gm div 2)*side2+gd*xl+x,20+(gm mod 2)*yl+y,
+ (gm div 2)*side2+gd*xl*2+x,20+(gm mod 2)*yl*2+y,
+ adxpic[gm*6+gd,1]^); */
+ }
+ getmem(adxpic[1], bigsize);
+ getimage(adx.xl + 1, 21, adx.xl * 13, 20 + adx.yl * 2, adxpic[1]);
+ putimage(adx.xl + 1, 21, adxpic[1], notput);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,""); fillchar(adxpic,sizeof(adxpic),'\261');
- load("v:avalots.avd");
- {;
- adx.name="Avalot";
- adx.num=24; adx.seq=6;
- adx.xl=33; adx.yl=35; /* 35,40 */
- adx.fgc=yellow; adx.bgc=red;
-
- adx.size=imagesize(40,20,40+adx.xl,60+adx.yl);
- }
- silhouette();
- standard();
- x=string("Sprite file for Avvy - Trippancy IV. Subject to copyright.")+'\32';
- assign(f,"v:sprite1.avd");
- rewrite(f,1);
- blockwrite(f,x[1],59);
- blockwrite(f,adx,sizeof(adx));
- blockwrite(f,bigsize,2);
- for( gm=0; gm <= 1; gm ++)
- {;
- putimage(0,0,adxpic[gm],0);
- blockwrite(f,adxpic[gm],bigsize); /* next image */
- }
- close(f);
- closegraph();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ fillchar(adxpic, sizeof(adxpic), '\261');
+ load("v:avalots.avd");
+ {
+ ;
+ adx.name = "Avalot";
+ adx.num = 24;
+ adx.seq = 6;
+ adx.xl = 33;
+ adx.yl = 35; /* 35,40 */
+ adx.fgc = yellow;
+ adx.bgc = red;
+
+ adx.size = imagesize(40, 20, 40 + adx.xl, 60 + adx.yl);
+ }
+ silhouette();
+ standard();
+ x = string("Sprite file for Avvy - Trippancy IV. Subject to copyright.") + '\32';
+ assign(f, "v:sprite1.avd");
+ rewrite(f, 1);
+ blockwrite(f, x[1], 59);
+ blockwrite(f, adx, sizeof(adx));
+ blockwrite(f, bigsize, 2);
+ for (gm = 0; gm <= 1; gm ++) {
+ ;
+ putimage(0, 0, adxpic[gm], 0);
+ blockwrite(f, adxpic[gm], bigsize); /* next image */
+ }
+ close(f);
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/andextst.cpp b/engines/avalanche/andextst.cpp
index 2cfe410b98..b5e1d9a5ba 100644
--- a/engines/avalanche/andextst.cpp
+++ b/engines/avalanche/andextst.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,63 +29,78 @@
namespace Avalanche {
-typedef matrix<1,24,0,1,pointer> adxtype;
+typedef matrix<1, 24, 0, 1, pointer> adxtype;
-integer gd,gm;
-word s; untyped_file f; byte n,anim,cp,t;
-array<0,0,adxtype> adx;
-array<0,1,pointer> back;
+integer gd, gm;
+word s;
+untyped_file f;
+byte n, anim, cp, t;
+array<0, 0, adxtype> adx;
+array<0, 1, pointer> back;
integer x;
-array<0,1,integer> ox;
+array<0, 1, integer> ox;
-void andex(integer x,integer y, byte n,byte num)
-{;
- putimage(x,y,adx[num][n][0],andput);
- putimage(x,y,adx[num][n][1],xorput);
+void andex(integer x, integer y, byte n, byte num) {
+ ;
+ putimage(x, y, adx[num][n][0], andput);
+ putimage(x, y, adx[num][n][1], xorput);
}
-void loadadx(byte num, string x)
-{
- byte n;
-;
- assign(f,x);
- reset(f,1); seek(f,59);
- blockread(f,n,1); /* No. of images... */
- for( gd=1; gd <= n; gd ++)
- for( gm=0; gm <= 1; gm ++)
- {;
- blockread(f,s,2); /* size of next image... */
- getmem(adx[num][gd][gm],s);
- blockread(f,adx[num][gd][gm],s); /* next image */
- }
- close(f);
+void loadadx(byte num, string x) {
+ byte n;
+ ;
+ assign(f, x);
+ reset(f, 1);
+ seek(f, 59);
+ blockread(f, n, 1); /* No. of images... */
+ for (gd = 1; gd <= n; gd ++)
+ for (gm = 0; gm <= 1; gm ++) {
+ ;
+ blockread(f, s, 2); /* size of next image... */
+ getmem(adx[num][gd][gm], s);
+ blockread(f, adx[num][gd][gm], s); /* next image */
+ }
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- loadadx(0,"d:sprite0.avd");
- loadadx(1,"d:sprite0.avd");
- gd=3; gm=0; initgraph(gd,gm,"");
- for( gd=0; gd <= 1; gd ++)
- {;
- setactivepage(gd); setfillstyle(6,1); bar(0,0,640,200);
- getmem(back[gd],s);
- }
- x=0; anim=1; cp=0; t=2; setactivepage(0);
- do {
- setactivepage(cp); setvisualpage(1-cp);
- for( gm=0; gm <= 1; gm ++)
- {;
- if (t>0) t -= 1; else
- putimage(ox[cp],77,back[cp],copyput);
- getimage(x,77,x+31,77+35,back[cp]);
- andex(x,177,anim+6,gm);
- ox[gm][cp]=x; x += 5;
- }
- anim += 1; if (anim==7) anim=1;cp=1-cp;
- } while (!false);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ loadadx(0, "d:sprite0.avd");
+ loadadx(1, "d:sprite0.avd");
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ for (gd = 0; gd <= 1; gd ++) {
+ ;
+ setactivepage(gd);
+ setfillstyle(6, 1);
+ bar(0, 0, 640, 200);
+ getmem(back[gd], s);
+ }
+ x = 0;
+ anim = 1;
+ cp = 0;
+ t = 2;
+ setactivepage(0);
+ do {
+ setactivepage(cp);
+ setvisualpage(1 - cp);
+ for (gm = 0; gm <= 1; gm ++) {
+ ;
+ if (t > 0) t -= 1;
+ else
+ putimage(ox[cp], 77, back[cp], copyput);
+ getimage(x, 77, x + 31, 77 + 35, back[cp]);
+ andex(x, 177, anim + 6, gm);
+ ox[gm][cp] = x;
+ x += 5;
+ }
+ anim += 1;
+ if (anim == 7) anim = 1;
+ cp = 1 - cp;
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/arch.cpp b/engines/avalanche/arch.cpp
index 815018df8a..2172a574a0 100644
--- a/engines/avalanche/arch.cpp
+++ b/engines/avalanche/arch.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,7 +33,7 @@
ENID Edna's manager. */
#define __arch_implementation__
- /* Loads/ saves files. */
+/* Loads/ saves files. */
#include "arch.h"
@@ -44,105 +44,105 @@
namespace Avalanche {
struct ednahead { /* Edna header */
- /* This header starts at byte offset 177 in the .ASG file. */
- array<1,9,char> id; /* signature */
- word revision; /* EDNA revision, here 2 (1=dna256) */
- varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
- varying_string<15> shortname; /* Short name, eg Avalot */
- word number; /* Game's code number, here 2 */
- word ver; /* Version number as integer (eg 1.00 = 100) */
- varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
- varying_string<12> filename; /* Filename, eg AVALOT.EXE */
- byte os; /* Saving OS (here 1=DOS. See below for others.) */
-
- /* Info on this particular game */
-
- varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
- byte d,m; /* D, M, Y are the Day, Month & Year this game was... */
- word y; /* ...saved on. */
- varying_string<40> desc; /* Description of game (same as in Avaricius!) */
- word len; /* Length of DNA (it's not going to be above 65535!) */
-
- /* Quick reference & miscellaneous */
-
- word saves; /* no. of times this game has been saved */
- integer cash; /* contents of your wallet in numerical form */
- varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
- word points; /* your score */
-
- /* DNA values follow, then footer (which is ignored) */
+ /* This header starts at byte offset 177 in the .ASG file. */
+ array<1, 9, char> id; /* signature */
+ word revision; /* EDNA revision, here 2 (1=dna256) */
+ varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
+ varying_string<15> shortname; /* Short name, eg Avalot */
+ word number; /* Game's code number, here 2 */
+ word ver; /* Version number as integer (eg 1.00 = 100) */
+ varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
+ varying_string<12> filename; /* Filename, eg AVALOT.EXE */
+ byte os; /* Saving OS (here 1=DOS. See below for others.) */
+
+ /* Info on this particular game */
+
+ varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
+ byte d, m; /* D, M, Y are the Day, Month & Year this game was... */
+ word y; /* ...saved on. */
+ varying_string<40> desc; /* Description of game (same as in Avaricius!) */
+ word len; /* Length of DNA (it's not going to be above 65535!) */
+
+ /* Quick reference & miscellaneous */
+
+ word saves; /* no. of times this game has been saved */
+ integer cash; /* contents of your wallet in numerical form */
+ varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
+ word points; /* your score */
+
+ /* DNA values follow, then footer (which is ignored) */
};
- /* Possible values of edhead.os:
- 1 = DOS 4 = Mac
- 2 = Windows 5 = Amiga
- 3 = OS/2 6 = ST */
-const string crlf = string('\15')+'\12';
-
-const array<1,177,char> ednafirst =
- string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!")+crlf+
- '\32'+ /* 67 bytes... */
- crlf+crlf+ /* 71 bytes... */
- "12345678901234567890123456789012345678901234567890"+
- "12345678901234567890123456789012345678901234567890"+
- "123456";
+/* Possible values of edhead.os:
+ 1 = DOS 4 = Mac
+ 2 = Windows 5 = Amiga
+ 3 = OS/2 6 = ST */
+const string crlf = string('\15') + '\12';
+
+const array<1, 177, char> ednafirst =
+ string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!") + crlf +
+ '\32' + /* 67 bytes... */
+ crlf + crlf + /* 71 bytes... */
+ "12345678901234567890123456789012345678901234567890" +
+ "12345678901234567890123456789012345678901234567890" +
+ "123456";
const char months[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
-const string ednaid = string("TT")+'\261'+'\60'+'\1'+'\165'+'\261'+'\231'+'\261';
+const string ednaid = string("TT") + '\261' + '\60' + '\1' + '\165' + '\261' + '\231' + '\261';
const integer ttage = 18;
const char ttwashere[] = "Thomas was here ";
-void save(string name)
-{
- untyped_file f;
- edhead eh;
- word groi;
- string groi2;
-;
- fillchar(eh,sizeof(eh),'\261'); /* Fill up the edhead */
+void save(string name) {
+ untyped_file f;
+ edhead eh;
+ word groi;
+ string groi2;
+ ;
+ fillchar(eh, sizeof(eh), '\261'); /* Fill up the edhead */
- dna.saves += 1; /* It's been saved one more time... */
+ dna.saves += 1; /* It's been saved one more time... */
- {;
+ {
+ ;
- /* Info about this program */
+ /* Info about this program */
- id=ednaid; /* Edna's signature */
- revision=2; /* Second revision of .ASG format */
- game="Lord Avalot d'Argent"; /* Title of game */
- shortname="Avalot";
- number=2; /* Second Avvy game */
- ver=100; /* Version 1.00 */
- verstr="1.00"; /* ditto */
- filename="AVALOT.EXE"; /* program's filename */
- os=1; /* Saved under DOS */
+ id = ednaid; /* Edna's signature */
+ revision = 2; /* Second revision of .ASG format */
+ game = "Lord Avalot d'Argent"; /* Title of game */
+ shortname = "Avalot";
+ number = 2; /* Second Avvy game */
+ ver = 100; /* Version 1.00 */
+ verstr = "1.00"; /* ditto */
+ filename = "AVALOT.EXE"; /* program's filename */
+ os = 1; /* Saved under DOS */
- /* Info on this particular game */
+ /* Info on this particular game */
- fsplit(name,groi2,fn,groi2); /* fn = filename of this game */
- getdate(d,m,y,groi); /* Day, month & year when the game was saved */
- desc=roomname; /* Description of game (same as in Avaricius!) */
- len=sizeof(dna); /* Length of DNA (it's not going to be above 65535!) */
+ fsplit(name, groi2, fn, groi2); /* fn = filename of this game */
+ getdate(d, m, y, groi); /* Day, month & year when the game was saved */
+ desc = roomname; /* Description of game (same as in Avaricius!) */
+ len = sizeof(dna); /* Length of DNA (it's not going to be above 65535!) */
- /* Quick reference & miscellaneous */
+ /* Quick reference & miscellaneous */
- saves=dna.saves; /* no. of times this game has been saved */
- cash=dna.pence; /* contents of your wallet in numerical form */
- money=lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/
- points=dna.score; /* your score */
- }
+ saves = dna.saves; /* no. of times this game has been saved */
+ cash = dna.pence; /* contents of your wallet in numerical form */
+ money = lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/
+ points = dna.score; /* your score */
+ }
- assign(f,name);
- rewrite(f,1);
+ assign(f, name);
+ rewrite(f, 1);
- blockwrite(f,ednafirst,177);
- blockwrite(f,eh,sizeof(eh));
- blockwrite(f,dna,sizeof(dna));
+ blockwrite(f, ednafirst, 177);
+ blockwrite(f, eh, sizeof(eh));
+ blockwrite(f, dna, sizeof(dna));
- for( groi=1; groi <= ttage; groi ++)
- blockwrite(f,ttwashere,sizeof(ttwashere));
+ for (groi = 1; groi <= ttage; groi ++)
+ blockwrite(f, ttwashere, sizeof(ttwashere));
- close(f);
+ close(f);
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/arch.h b/engines/avalanche/arch.h
index 840ceb446e..3bff07ad2c 100644
--- a/engines/avalanche/arch.h
+++ b/engines/avalanche/arch.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/avalot9.cpp b/engines/avalanche/avalot9.cpp
index f793fa5402..7351d08060 100644
--- a/engines/avalanche/avalot9.cpp
+++ b/engines/avalanche/avalot9.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -53,89 +53,120 @@
namespace Avalanche {
-void setup()
-{
- integer gd,gm;
-
- checkbreak=false; visible=m_no; to_do=0; lmo=false; resetscroll;
- Randomize(); setup_vmc; on_virtual;
- gd=3; gm=0; initgraph(gd,gm,"");
- holdthedawn=true; dusk;
- cmp=177; mouse_init; /*on;*/ dropsok=true; ctrl=ckey; oldjw=177;
- mousetext=""; c=999; settextjustify(0,0); ddmnow=false; load_digits;
- cheat=false; cp=0; curpos=1;
- quote=true; ledstatus=177; defaultled=2;
-/* TSkellern:=0; { Replace with a more local variable sometime }*/
- dna.rw=stopped; enid_filename=""; /* undefined. */
- toolbar; state(2); copy03; lastscore="TJA";
-
-/* for gd:=0 to 1 do
- begin
- setactivepage(gd); outtextxy(7,177,chr(48+gd));
- end;*/
-
- loadtrip;
-
- if ((filetoload=="") & (~ reloaded))
- newgame; /* no game was requested- load the default */
- else {
- if (~ reloaded) avvy_background;
- standard_bar; sprite_run;
- if (reloaded) edna_reload; else
- { /* Filename given on the command line (or loadfirst) */
- edna_load(filetoload);
- if (there_was_a_problem)
- {
- display("So let's start from the beginning instead...");
- holdthedawn=true; dusk; newgame;
- }
- }
- }
-
- if (~ reloaded)
- {
- soundfx=~ soundfx; fxtoggle;
- thinkabout(money,a_thing);
- }
-
- get_back_loretta; gm=getpixel(0,0); setcolor(7);
- holdthedawn=false; dawn; cursoron=false; cursor_on; newspeed;
-
- if (~ reloaded)
- dixi('q',83); /* Info on the game, etc. */
+void setup() {
+ integer gd, gm;
+
+ checkbreak = false;
+ visible = m_no;
+ to_do = 0;
+ lmo = false;
+ resetscroll;
+ Randomize();
+ setup_vmc;
+ on_virtual;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ holdthedawn = true;
+ dusk;
+ cmp = 177;
+ mouse_init; /*on;*/ dropsok = true;
+ ctrl = ckey;
+ oldjw = 177;
+ mousetext = "";
+ c = 999;
+ settextjustify(0, 0);
+ ddmnow = false;
+ load_digits;
+ cheat = false;
+ cp = 0;
+ curpos = 1;
+ quote = true;
+ ledstatus = 177;
+ defaultled = 2;
+ /* TSkellern:=0; { Replace with a more local variable sometime }*/
+ dna.rw = stopped;
+ enid_filename = ""; /* undefined. */
+ toolbar;
+ state(2);
+ copy03;
+ lastscore = "TJA";
+
+ /* for gd:=0 to 1 do
+ begin
+ setactivepage(gd); outtextxy(7,177,chr(48+gd));
+ end;*/
+
+ loadtrip;
+
+ if ((filetoload == "") & (~ reloaded))
+ newgame; /* no game was requested- load the default */
+ else {
+ if (~ reloaded) avvy_background;
+ standard_bar;
+ sprite_run;
+ if (reloaded) edna_reload;
+ else {
+ /* Filename given on the command line (or loadfirst) */
+ edna_load(filetoload);
+ if (there_was_a_problem) {
+ display("So let's start from the beginning instead...");
+ holdthedawn = true;
+ dusk;
+ newgame;
+ }
+ }
+ }
+
+ if (~ reloaded) {
+ soundfx = ~ soundfx;
+ fxtoggle;
+ thinkabout(money, a_thing);
+ }
+
+ get_back_loretta;
+ gm = getpixel(0, 0);
+ setcolor(7);
+ holdthedawn = false;
+ dawn;
+ cursoron = false;
+ cursor_on;
+ newspeed;
+
+ if (~ reloaded)
+ dixi('q', 83); /* Info on the game, etc. */
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- setup();
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ setup();
- do {
+ do {
- clock;
- keyboard_link;
- menu_link;
- readstick;
- force_numlock;
- get_back_loretta;
- trippancy_link;
- pics_link;
- checkclick;
+ clock;
+ keyboard_link;
+ menu_link;
+ readstick;
+ force_numlock;
+ get_back_loretta;
+ trippancy_link;
+ pics_link;
+ checkclick;
- if (visible==m_virtual) plot_vmc(mx,my,cp);
- flip_page; /* <<<! */
- slowdown;
- if (visible==m_virtual) wipe_vmc(cp);
+ if (visible == m_virtual) plot_vmc(mx, my, cp);
+ flip_page; /* <<<! */
+ slowdown;
+ if (visible == m_virtual) wipe_vmc(cp);
- one_tick;
+ one_tick;
- } while (!lmo);
+ } while (!lmo);
- restorecrtmode();
- if (logging) close(logfile);
+ restorecrtmode();
+ if (logging) close(logfile);
- end_of_program;
- return EXIT_SUCCESS;
+ end_of_program;
+ return EXIT_SUCCESS;
}
/* typein; commanded; last:=current; */
diff --git a/engines/avalanche/avbkgrnd.cpp b/engines/avalanche/avbkgrnd.cpp
index 0ca6b721a0..7ab263049b 100644
--- a/engines/avalanche/avbkgrnd.cpp
+++ b/engines/avalanche/avbkgrnd.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,88 +30,90 @@
namespace Avalanche {
-integer gd,gm;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- /* Screen size: Starts at $A000:$320 (coords 0,10).
- Length: 12000 (150*80) bytes.
- If we divide it into sets of 5 lines (400 bytes) each, there are 30.
- There are 40 words on a line.
-
- Patterns:
- 4AAA = "AVVY"
- AAAE
- EAA4
- A444
-
- A4AA = "YAVV"
- AEAA
- 4EAA
- 4A44 */
-/*
- asm
- mov bx,$A000;
- mov es,bx; { The segment to copy it to... }
- mov di,$370; { The offset (10 pixels down, plus 1 offset.) }
-
- mov cx,10;
- mov ax,$AA4A; call @sameline; { Print "AVVY" }
- mov ax,$AEAA; call @sameline;
- mov ax,$A4EA; call @sameline;
- mov ax,$44A4; call @sameline;
-
- mov cx,9;
- mov ax,$AAA4; call @sameline; { Print "YAVV" }
- mov ax,$AAEA; call @sameline;
- mov ax,$AA4E; call @sameline;
- mov ax,$444A; call @sameline;
-
- mov ax,$4AAA; call @sameline; { Print "VYAV" }
- mov ax,$AAAE; call @sameline;
- mov ax,$EAA4; call @sameline;
- mov ax,$A444; call @sameline;
-
- mov ax,$A4AA; call @sameline; { Print "VVYA" }
- mov ax,$EAAA; call @sameline;
- mov ax,$4EAA; call @sameline;
- mov ax,$4A44; call @sameline;
-
- jmp @the_end;
-
- { Replicate the same line many times. }
-
- @sameline:
- { Requires:
- what to copy in AX,
- how many lines in CX, and
- original offset in DI. }
- push cx;
- push di;
-
- @samelineloop:
-
- push cx;
- mov cx,40; { No. of times to repeat it on one line. }
-
- repz stosw; { Fast word-copying }
-
- pop cx;
-
- add di,1200; { The next one will be 16 lines down. }
-
- loop @samelineloop;
- pop di;
- add di,80;
- pop cx;
-
- ret;
-
- @the_end:
- end;
-*/
-return EXIT_SUCCESS;
+integer gd, gm;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ /* Screen size: Starts at $A000:$320 (coords 0,10).
+ Length: 12000 (150*80) bytes.
+ If we divide it into sets of 5 lines (400 bytes) each, there are 30.
+ There are 40 words on a line.
+
+ Patterns:
+ 4AAA = "AVVY"
+ AAAE
+ EAA4
+ A444
+
+ A4AA = "YAVV"
+ AEAA
+ 4EAA
+ 4A44 */
+ /*
+ asm
+ mov bx,$A000;
+ mov es,bx; { The segment to copy it to... }
+ mov di,$370; { The offset (10 pixels down, plus 1 offset.) }
+
+ mov cx,10;
+ mov ax,$AA4A; call @sameline; { Print "AVVY" }
+ mov ax,$AEAA; call @sameline;
+ mov ax,$A4EA; call @sameline;
+ mov ax,$44A4; call @sameline;
+
+ mov cx,9;
+ mov ax,$AAA4; call @sameline; { Print "YAVV" }
+ mov ax,$AAEA; call @sameline;
+ mov ax,$AA4E; call @sameline;
+ mov ax,$444A; call @sameline;
+
+ mov ax,$4AAA; call @sameline; { Print "VYAV" }
+ mov ax,$AAAE; call @sameline;
+ mov ax,$EAA4; call @sameline;
+ mov ax,$A444; call @sameline;
+
+ mov ax,$A4AA; call @sameline; { Print "VVYA" }
+ mov ax,$EAAA; call @sameline;
+ mov ax,$4EAA; call @sameline;
+ mov ax,$4A44; call @sameline;
+
+ jmp @the_end;
+
+ { Replicate the same line many times. }
+
+ @sameline:
+ { Requires:
+ what to copy in AX,
+ how many lines in CX, and
+ original offset in DI. }
+ push cx;
+ push di;
+
+ @samelineloop:
+
+ push cx;
+ mov cx,40; { No. of times to repeat it on one line. }
+
+ repz stosw; { Fast word-copying }
+
+ pop cx;
+
+ add di,1200; { The next one will be 16 lines down. }
+
+ loop @samelineloop;
+ pop di;
+ add di,80;
+ pop cx;
+
+ ret;
+
+ @the_end:
+ end;
+ */
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/avmenu.cpp b/engines/avalanche/avmenu.cpp
index 31c26929b6..9e956f9b23 100644
--- a/engines/avalanche/avmenu.cpp
+++ b/engines/avalanche/avmenu.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,310 +31,318 @@
namespace Avalanche {
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
fonttype font;
-word storage_seg,storage_ofs;
+word storage_seg, storage_ofs;
byte result;
string registrant;
-void icons()
-{
- untyped_file f;
- word gd,gm; byte bit;
- byte v;
-
- assign(f,"menu.avd");
- reset(f,1);
-
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( gd=70; gd <= 266; gd ++)
- blockread(f,mem[0xa000*gd*80+6],9);
-
- for( gd=0; gd <= 32; gd ++)
- {
- blockread(f,v,1);
- for( gm=0; gm <= 5; gm ++)
- mem[0xa000*73+((70+gd+gm*33)*80)]=v; /* 79 */
- }
-
- }
- close(f);
-
- bit=getpixel(0,0);
-
- setfillstyle(1, 7); for( gd=0; gd <= 5; gd ++) bar(114, 73+gd*33,583, 99+gd*33);
- setfillstyle(1,15); for( gd=0; gd <= 5; gd ++) bar(114, 70+gd*33,583, 72+gd*33);
- setfillstyle(1, 8); for( gd=0; gd <= 5; gd ++) bar(114,100+gd*33,583,102+gd*33);
+void icons() {
+ untyped_file f;
+ word gd, gm;
+ byte bit;
+ byte v;
+
+ assign(f, "menu.avd");
+ reset(f, 1);
+
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (gd = 70; gd <= 266; gd ++)
+ blockread(f, mem[0xa000 * gd * 80 + 6], 9);
+
+ for (gd = 0; gd <= 32; gd ++) {
+ blockread(f, v, 1);
+ for (gm = 0; gm <= 5; gm ++)
+ mem[0xa000 * 73 + ((70 + gd + gm * 33) * 80)] = v; /* 79 */
+ }
+
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ setfillstyle(1, 7);
+ for (gd = 0; gd <= 5; gd ++) bar(114, 73 + gd * 33, 583, 99 + gd * 33);
+ setfillstyle(1, 15);
+ for (gd = 0; gd <= 5; gd ++) bar(114, 70 + gd * 33, 583, 72 + gd * 33);
+ setfillstyle(1, 8);
+ for (gd = 0; gd <= 5; gd ++) bar(114, 100 + gd * 33, 583, 102 + gd * 33);
}
void load_regi_info();
-static char decode1(char c)
-{
- byte b;
+static char decode1(char c) {
+ byte b;
- char decode1_result;
- b=ord(c)-32;
- decode1_result=chr(( (b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4));
- return decode1_result;
+ char decode1_result;
+ b = ord(c) - 32;
+ decode1_result = chr(((b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4));
+ return decode1_result;
}
-static char decode2(char c)
-{
- char decode2_result;
- decode2_result=chr( ((ord(c) & 0xf) << 2) + 0x43);
- return decode2_result;
+static char decode2(char c) {
+ char decode2_result;
+ decode2_result = chr(((ord(c) & 0xf) << 2) + 0x43);
+ return decode2_result;
}
-static boolean checker(string proper,string check)
-{
- byte fv; boolean ok;
+static boolean checker(string proper, string check) {
+ byte fv;
+ boolean ok;
- boolean checker_result;
- ok=true;
- for( fv=1; fv <= length(proper); fv ++)
- if ((ord(proper[fv]) & 0xf)!=((cardinal)(ord(check[fv])-0x43) >> 2))
- ok=false;
+ boolean checker_result;
+ ok = true;
+ for (fv = 1; fv <= length(proper); fv ++)
+ if ((ord(proper[fv]) & 0xf) != ((cardinal)(ord(check[fv]) - 0x43) >> 2))
+ ok = false;
- checker_result=ok;
- return checker_result;
+ checker_result = ok;
+ return checker_result;
}
-void load_regi_info()
-{
- text t;
- byte fv;
- string x;
- byte namelen,numlen;
- string namechk,numchk;
- string reginum;
+void load_regi_info() {
+ text t;
+ byte fv;
+ string x;
+ byte namelen, numlen;
+ string namechk, numchk;
+ string reginum;
- /*$I-*/
- assign(t,"register.dat"); reset(t);
- /*$I+*/
+ /*$I-*/
+ assign(t, "register.dat");
+ reset(t);
+ /*$I+*/
- if (ioresult!=0)
- {
- registrant="(Unregistered evaluation copy.)";
- return;
- }
+ if (ioresult != 0) {
+ registrant = "(Unregistered evaluation copy.)";
+ return;
+ }
- for( fv=1; fv <= 53; fv ++) t >> NL;
- t >> x >> NL;
- close(t);
+ for (fv = 1; fv <= 53; fv ++) t >> NL;
+ t >> x >> NL;
+ close(t);
- namelen=107-ord(x[1]); numlen=107-ord(x[2]);
+ namelen = 107 - ord(x[1]);
+ numlen = 107 - ord(x[2]);
- registrant=copy(x,3,namelen);
- reginum=copy(x,4+namelen,numlen);
- namechk=copy(x,4+namelen+numlen,namelen);
- numchk=copy(x,4+namelen+numlen+namelen,numlen);
+ registrant = copy(x, 3, namelen);
+ reginum = copy(x, 4 + namelen, numlen);
+ namechk = copy(x, 4 + namelen + numlen, namelen);
+ numchk = copy(x, 4 + namelen + numlen + namelen, numlen);
- for( fv=1; fv <= namelen; fv ++) registrant[fv]=decode1(registrant[fv]);
- for( fv=1; fv <= numlen; fv ++) reginum[fv]=decode1(reginum[fv]);
+ for (fv = 1; fv <= namelen; fv ++) registrant[fv] = decode1(registrant[fv]);
+ for (fv = 1; fv <= numlen; fv ++) reginum[fv] = decode1(reginum[fv]);
- if ((! checker(registrant,namechk)) || (! checker(reginum,numchk)))
- registrant="\?\"!\? ((.)";
- else
- registrant=registrant+" ("+reginum+").";
+ if ((! checker(registrant, namechk)) || (! checker(reginum, numchk)))
+ registrant = "\?\"!\? ((.)";
+ else
+ registrant = registrant + " (" + reginum + ").";
}
-void flesh_colours() {; /* assembler;
+void flesh_colours() {
+ ; /* assembler;
asm
mov ax,$1012;
mov bx,21; { 21 = light pink (why?) */
- /* mov cx,1;
- mov dx,seg @flesh;
- mov es,dx;
- mov dx,offset @flesh;
- int $10;
+ /* mov cx,1;
+ mov dx,seg @flesh;
+ mov es,dx;
+ mov dx,offset @flesh;
+ int $10;
- mov dx,seg @darkflesh;
- mov es,dx;
- mov dx,offset @darkflesh;
- mov bx,5; { 5 = dark pink. */
- /*int $10;
+ mov dx,seg @darkflesh;
+ mov es,dx;
+ mov dx,offset @darkflesh;
+ mov bx,5; { 5 = dark pink. */
+ /*int $10;
- jmp @TheEnd;
+ jmp @TheEnd;
- @flesh:
- db 56,35,35;
+ @flesh:
+ db 56,35,35;
- @darkflesh:
- db 43,22,22;
+ @darkflesh:
+ db 43,22,22;
- @TheEnd: */
- }
+ @TheEnd: */
+}
-void setup()
-{
- integer gd,gm;
- file<fonttype> ff;
+void setup() {
+ integer gd, gm;
+ file<fonttype> ff;
- if (paramstr(1)!="jsb") exit(255);
- checkbreak=false;
- val(paramstr(2),storage_seg,gd);
- val(paramstr(3),storage_ofs,gd);
+ if (paramstr(1) != "jsb") exit(255);
+ checkbreak = false;
+ val(paramstr(2), storage_seg, gd);
+ val(paramstr(3), storage_ofs, gd);
- assign(ff,"avalot.fnt");
- reset(ff); ff >> font; close(ff);
+ assign(ff, "avalot.fnt");
+ reset(ff);
+ ff >> font;
+ close(ff);
- gd=3; gm=1; initgraph(gd,gm,"");
- setvisualpage(1);
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ setvisualpage(1);
- icons();
+ icons();
}
-void big(word x,word y, string z, boolean notted);
-static word start,image;
+void big(word x, word y, string z, boolean notted);
+static word start, image;
-static void generate(byte from, boolean& notted)
-{
- byte fv;
+static void generate(byte from, boolean &notted) {
+ byte fv;
- image=0;
- for( fv=0; fv <= 7; fv ++)
- image += (from & (1 << fv)) << fv;
+ image = 0;
+ for (fv = 0; fv <= 7; fv ++)
+ image += (from & (1 << fv)) << fv;
- image += image << 1;
- image=hi(image)+lo(image)*256;
- if (notted) image=~ image;
+ image += image << 1;
+ image = hi(image) + lo(image) * 256;
+ if (notted) image = ~ image;
}
-void big(word x,word y, string z, boolean notted)
-{
- byte fv,ff;byte bit;
-
- start=x+y*80;
-
- for( fv=1; fv <= length(z); fv ++)
- {
- for( ff=1; ff <= 12; ff ++)
- {
- generate(font[z[fv]][ff+1], notted);
- for( bit=0; bit <= 2; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- memw[0xa000*start+ ff*160]=image;
- memw[0xa000*start+80+ff*160]=image;
- }
- }
- start += 2;
- }
- bit=getpixel(0,0);
+void big(word x, word y, string z, boolean notted) {
+ byte fv, ff;
+ byte bit;
+
+ start = x + y * 80;
+
+ for (fv = 1; fv <= length(z); fv ++) {
+ for (ff = 1; ff <= 12; ff ++) {
+ generate(font[z[fv]][ff + 1], notted);
+ for (bit = 0; bit <= 2; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ memw[0xa000 * start + ff * 160] = image;
+ memw[0xa000 * start + 80 + ff * 160] = image;
+ }
+ }
+ start += 2;
+ }
+ bit = getpixel(0, 0);
}
-void centre(integer y, string z)
-{
- big(40-(length(z)),y,z,false);
+void centre(integer y, string z) {
+ big(40 - (length(z)), y, z, false);
}
-void option(byte which, string what)
-{
- big(16,41+which*33,string((char)(which+48))+')',true);
- big(24,41+which*33,what,true);
+void option(byte which, string what) {
+ big(16, 41 + which * 33, string((char)(which + 48)) + ')', true);
+ big(24, 41 + which * 33, what, true);
}
-void invert(integer x1,integer y1,integer x2,integer y2)
-{
- word s; pointer p;
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
- putimage(x1,y1,p,4);
- sound(y1); delay(30);
- sound(600-y2); delay(20);
- nosound; delay(200);
- putimage(x1,y1,p,0);
- delay(250);
+void invert(integer x1, integer y1, integer x2, integer y2) {
+ word s;
+ pointer p;
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+ putimage(x1, y1, p, 4);
+ sound(y1);
+ delay(30);
+ sound(600 - y2);
+ delay(20);
+ nosound;
+ delay(200);
+ putimage(x1, y1, p, 0);
+ delay(250);
}
-void wait()
-{
- word x; char r; boolean pressed;
-
- x=0; pressed=false;
- do {
- setfillstyle(6,15); bar(x ,330,x-1,337);
- setfillstyle(1, 0); bar(x-2,330,x-3,337);
- delay(40); x += 1;
-
- if (keypressed())
- {
- r=readkey();
- if (r=='\0')
- {
- r=readkey(); /* and...? */
- } else
- { /* Not an extended keystroke. */
- if (set::of(range('1','6'),cspace,cescape,creturn, eos).has(r)) pressed=true;
- }
- }
-
- } while (!((x==640) || pressed));
-
- if ((r==cspace) || (r==creturn)) r='1';
- if (r==cescape) r='6';
- if (pressed)
- {
- result=ord(r)-48;
- invert(48,37+result*33,114,69+result*33);
- } else result=177;
+void wait() {
+ word x;
+ char r;
+ boolean pressed;
+
+ x = 0;
+ pressed = false;
+ do {
+ setfillstyle(6, 15);
+ bar(x , 330, x - 1, 337);
+ setfillstyle(1, 0);
+ bar(x - 2, 330, x - 3, 337);
+ delay(40);
+ x += 1;
+
+ if (keypressed()) {
+ r = readkey();
+ if (r == '\0') {
+ r = readkey(); /* and...? */
+ } else {
+ /* Not an extended keystroke. */
+ if (set::of(range('1', '6'), cspace, cescape, creturn, eos).has(r)) pressed = true;
+ }
+ }
+
+ } while (!((x == 640) || pressed));
+
+ if ((r == cspace) || (r == creturn)) r = '1';
+ if (r == cescape) r = '6';
+ if (pressed) {
+ result = ord(r) - 48;
+ invert(48, 37 + result * 33, 114, 69 + result * 33);
+ } else result = 177;
}
-void show_up()
-{
- setvisualpage(0);
+void show_up() {
+ setvisualpage(0);
}
-void loadmenu()
-{
- untyped_file f; byte bit;
-
- assign(f,"mainmenu.avd");
- reset(f,1);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,mem[0xa000*0],59*80);
- }
- close(f);
- bit=getpixel(0,0);
+void loadmenu() {
+ untyped_file f;
+ byte bit;
+
+ assign(f, "mainmenu.avd");
+ reset(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, mem[0xa000 * 0], 59 * 80);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- setup();
- loadmenu();
- load_regi_info();
- option(1,"Play the game.");
- option(2,"Read the background.");
- option(3,"Preview... perhaps...");
- option(4,"View the documentation.");
- option(5,"Registration info.");
- option(6,"Exit back to DOS.");
- centre(275,registrant);
- centre(303,"Make your choice, or wait for the demo.");
-
- show_up();
- wait();
- mem[storage_seg*storage_ofs]=result;
- closegraph();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ setup();
+ loadmenu();
+ load_regi_info();
+ option(1, "Play the game.");
+ option(2, "Read the background.");
+ option(3, "Preview... perhaps...");
+ option(4, "View the documentation.");
+ option(5, "Registration info.");
+ option(6, "Exit back to DOS.");
+ centre(275, registrant);
+ centre(303, "Make your choice, or wait for the demo.");
+
+ show_up();
+ wait();
+ mem[storage_seg * storage_ofs] = result;
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/avvyans.cpp b/engines/avalanche/avvyans.cpp
index fa70ca1751..f91435fef2 100644
--- a/engines/avalanche/avvyans.cpp
+++ b/engines/avalanche/avvyans.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,83 +30,106 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
untyped_file f;
-array<1,16000,byte> aa;
-matrix<0,27,0,35,byte> cols;
+array<1, 16000, byte> aa;
+matrix<0, 27, 0, 35, byte> cols;
text t;
string x;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- fillchar(cols,sizeof(cols),'\0');
- assign(f,"v:avvypic.ptx");
- reset(f,1);
- blockread(f,aa,filesize(f));
- close(f);
- putimage(0,0,aa,0);
- for( gd=0; gd <= 27; gd ++)
- for( gm=0; gm <= 34; gm ++)
- cols[gd][gm+1]=getpixel(gd,gm);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ fillchar(cols, sizeof(cols), '\0');
+ assign(f, "v:avvypic.ptx");
+ reset(f, 1);
+ blockread(f, aa, filesize(f));
+ close(f);
+ putimage(0, 0, aa, 0);
+ for (gd = 0; gd <= 27; gd ++)
+ for (gm = 0; gm <= 34; gm ++)
+ cols[gd][gm + 1] = getpixel(gd, gm);
- restorecrtmode();
-/*
- asm
- mov ax,$1003
- mov bl,0
- int $10
- end;
-*/
- for( gm=0; gm <= 17; gm ++)
- for( gd=0; gd <= 27; gd ++)
- {;
- gotoxy(gd+1,gm+1);
- if (cols[gd][2*gm]==cols[gd][2*gm+1])
- {;
- textattr=cols[gd][2*gm]; output << 'Û';
- } else
- if ((cols[gd][2*gm]>7) && (cols[gd][2*gm+1]<8))
- {;
- textattr=cols[gd][2*gm]+cols[gd][2*gm+1]*16;
- output << 'ß';
- } else
- {;
- textattr=cols[gd][2*gm]*16+cols[gd][2*gm+1];
- if (textattr>blink) textattr -= blink;
- output << 'Ü';
- }
- }
- gotoxy(23,5); textattr=red; output << 'ß';
+ restorecrtmode();
+ /*
+ asm
+ mov ax,$1003
+ mov bl,0
+ int $10
+ end;
+ */
+ for (gm = 0; gm <= 17; gm ++)
+ for (gd = 0; gd <= 27; gd ++) {
+ ;
+ gotoxy(gd + 1, gm + 1);
+ if (cols[gd][2 * gm] == cols[gd][2 * gm + 1]) {
+ ;
+ textattr = cols[gd][2 * gm];
+ output << 'Û';
+ } else if ((cols[gd][2 * gm] > 7) && (cols[gd][2 * gm + 1] < 8)) {
+ ;
+ textattr = cols[gd][2 * gm] + cols[gd][2 * gm + 1] * 16;
+ output << 'ß';
+ } else {
+ ;
+ textattr = cols[gd][2 * gm] * 16 + cols[gd][2 * gm + 1];
+ if (textattr > blink) textattr -= blink;
+ output << 'Ü';
+ }
+ }
+ gotoxy(23, 5);
+ textattr = red;
+ output << 'ß';
- assign(t,"v:avalot.txt"); reset(t);
- textattr=9; gm=2;
- do {
- gm += 1;
- t >> x >> NL;
- gotoxy(30,gm);
- output << x << NL;
- } while (!(eof(t)));
+ assign(t, "v:avalot.txt");
+ reset(t);
+ textattr = 9;
+ gm = 2;
+ do {
+ gm += 1;
+ t >> x >> NL;
+ gotoxy(30, gm);
+ output << x << NL;
+ } while (!(eof(t)));
- textattr=7; gotoxy(35,2); output << "Back in good old A.D. ";
- textattr=15; output << "1176"; textattr=7; output << "...";
- textattr=9; gotoxy(40,4); output << "Lord";
- gotoxy(67,9); output << "d'Argent";
- textattr=yellow;
- gotoxy(37,12); output << "He's back...";
- gotoxy(47,14); output << "And this time,";
- gotoxy(52,15); output << "he's wearing tights...";
- textattr=4;
- gotoxy(36,17); output << "A Thorsoft of Letchworth game. * Requires EGA";
- gotoxy(38,18); output << "and HD. * By Mike, Mark and Thomas Thurman.";
- gotoxy(40,19); output << "Sfx archive- ";
- textattr=9; output << "Download ";
- textattr=14; output << "AVLT10.EXE";
- textattr=9; output << " now!";
- gotoxy(1,1);
- input >> NL;
-return EXIT_SUCCESS;
+ textattr = 7;
+ gotoxy(35, 2);
+ output << "Back in good old A.D. ";
+ textattr = 15;
+ output << "1176";
+ textattr = 7;
+ output << "...";
+ textattr = 9;
+ gotoxy(40, 4);
+ output << "Lord";
+ gotoxy(67, 9);
+ output << "d'Argent";
+ textattr = yellow;
+ gotoxy(37, 12);
+ output << "He's back...";
+ gotoxy(47, 14);
+ output << "And this time,";
+ gotoxy(52, 15);
+ output << "he's wearing tights...";
+ textattr = 4;
+ gotoxy(36, 17);
+ output << "A Thorsoft of Letchworth game. * Requires EGA";
+ gotoxy(38, 18);
+ output << "and HD. * By Mike, Mark and Thomas Thurman.";
+ gotoxy(40, 19);
+ output << "Sfx archive- ";
+ textattr = 9;
+ output << "Download ";
+ textattr = 14;
+ output << "AVLT10.EXE";
+ textattr = 9;
+ output << " now!";
+ gotoxy(1, 1);
+ input >> NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/avvyans2.cpp b/engines/avalanche/avvyans2.cpp
index b7f96a5b5d..a4fb34aad6 100644
--- a/engines/avalanche/avvyans2.cpp
+++ b/engines/avalanche/avvyans2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,183 +31,227 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
untyped_file f;
-array<1,16000,byte> aa;
-matrix<0,27,0,35,byte> cols;
+array<1, 16000, byte> aa;
+matrix<0, 27, 0, 35, byte> cols;
text t;
string x;
byte n;
byte spaces;
-byte cfg,cbg; /* Current foreground & background. */
-byte ofg,obg; /* Old fg & bg. */
-
-void do_spaces()
-{;
- if (spaces==0) return;
- along(spaces);
- spaces=0;
+byte cfg, cbg; /* Current foreground & background. */
+byte ofg, obg; /* Old fg & bg. */
+
+void do_spaces() {
+ ;
+ if (spaces == 0) return;
+ along(spaces);
+ spaces = 0;
}
void finishline();
-static byte wx,wy;
+static byte wx, wy;
-static void jumpto(byte xx)
-{;
- along(xx-wx);
+static void jumpto(byte xx) {
+ ;
+ along(xx - wx);
}
-void finishline()
-{;
- wx=29-spaces; wy=gm+1;
- switch (wy) {
- case 1: {;
- sgr(7); jumpto(35); output << "Back in good old A.D. ";
- sgr(15); output << "1189"; sgr(7); output << "..." << NL; cfg=7;
- }
- break;
- case RANGE_5(3,7): {;
- t >> x >> NL;
- while (x[length(x)]=='\40') x[0] -= 1;
- if (x!="")
- {;
- jumpto(30);
- sgr(9);
- spaces=0;
- while (x!="")
- {;
- if (x[1]==' ')
- spaces += 1;
- else
- {;
- do_spaces();
- output << x[1];
- }
- Delete(x,1,1);
- }
- if (wy==7) close(t);
- output << NL;
- }
- }
- break;
- case 8: {;
- jumpto(67); sgr(9); output << "d'Argent" << NL; cfg=9;
- }
- break;
- case 11: {;
- jumpto(37); sgr(14); output << "He's back..." << NL;
- }
- break;
- case 13: {;
- jumpto(47); sgr(14); output << "And this time," << NL;
- }
- break;
- case 14: {;
- jumpto(52); sgr(14); output << "he's wearing tights..." << NL;
- }
- break;
- case 16: {;
- jumpto(35); sgr(4);
- output << "A Thorsoft of Letchworth game. * Requires EGA" << NL;
- }
- break;
- case 17: {;
- jumpto(37); sgr(4);
- output << "and HD. * By Mike, Mark and Thomas Thurman." << NL;
- }
- break;
- case 18: {;
- jumpto(39);
- sgr( 4); output << "Sfx archive- ";
- sgr( 9); output << "Download ";
- sgr(14); output << "AVLT10.EXE";
- sgr( 9); output << " now!";
- }
- break;
- default: output << NL;
- }
+void finishline() {
+ ;
+ wx = 29 - spaces;
+ wy = gm + 1;
+ switch (wy) {
+ case 1: {
+ ;
+ sgr(7);
+ jumpto(35);
+ output << "Back in good old A.D. ";
+ sgr(15);
+ output << "1189";
+ sgr(7);
+ output << "..." << NL;
+ cfg = 7;
+ }
+ break;
+ case RANGE_5(3, 7): {
+ ;
+ t >> x >> NL;
+ while (x[length(x)] == '\40') x[0] -= 1;
+ if (x != "") {
+ ;
+ jumpto(30);
+ sgr(9);
+ spaces = 0;
+ while (x != "") {
+ ;
+ if (x[1] == ' ')
+ spaces += 1;
+ else {
+ ;
+ do_spaces();
+ output << x[1];
+ }
+ Delete(x, 1, 1);
+ }
+ if (wy == 7) close(t);
+ output << NL;
+ }
+ }
+ break;
+ case 8: {
+ ;
+ jumpto(67);
+ sgr(9);
+ output << "d'Argent" << NL;
+ cfg = 9;
+ }
+ break;
+ case 11: {
+ ;
+ jumpto(37);
+ sgr(14);
+ output << "He's back..." << NL;
+ }
+ break;
+ case 13: {
+ ;
+ jumpto(47);
+ sgr(14);
+ output << "And this time," << NL;
+ }
+ break;
+ case 14: {
+ ;
+ jumpto(52);
+ sgr(14);
+ output << "he's wearing tights..." << NL;
+ }
+ break;
+ case 16: {
+ ;
+ jumpto(35);
+ sgr(4);
+ output << "A Thorsoft of Letchworth game. * Requires EGA" << NL;
+ }
+ break;
+ case 17: {
+ ;
+ jumpto(37);
+ sgr(4);
+ output << "and HD. * By Mike, Mark and Thomas Thurman." << NL;
+ }
+ break;
+ case 18: {
+ ;
+ jumpto(39);
+ sgr(4);
+ output << "Sfx archive- ";
+ sgr(9);
+ output << "Download ";
+ sgr(14);
+ output << "AVLT10.EXE";
+ sgr(9);
+ output << " now!";
+ }
+ break;
+ default:
+ output << NL;
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- fillchar(cols,sizeof(cols),'\0');
- assign(f,"v:avvypic.ptx");
- reset(f,1);
- blockread(f,aa,filesize(f));
- close(f);
- putimage(0,0,aa,0);
- for( gd=0; gd <= 27; gd ++)
- for( gm=0; gm <= 34; gm ++)
- cols[gd][gm+1]=getpixel(gd,gm);
-
- restorecrtmode();
-
- assign(output,"v:avalot.ans"); rewrite(output); normal; ed;
-/* assign(output,''); rewrite(output); normal; ed;*/
- assign(t,"v:avalot.txt"); reset(t);
-
- for( gm=0; gm <= 17; gm ++)
- {;
- spaces=0;
- for( gd=0; gd <= 27; gd ++)
- {;
- if ((gd==22) && (gm==4))
- {;
- do_spaces();
- sgr(red); output << 'ß';
- } else
- {;
- if (cols[gd][2*gm]==cols[gd][2*gm+1])
- {;
- if (cols[gd][2*gm]==0)
- spaces += 1; /* a blank space */
- else {;
- do_spaces();
-
- if (cfg==cols[gd][2*gm]) output << 'Û'; else
- if (cbg==cols[gd][2*gm]) output << ' '; else
- {;
- sgr((cols[gd][2*gm])+(cbg*16));
- cfg=cols[gd][2*gm];
- output << 'Û';
- }
- }
- } else
- if ((cols[gd][2*gm]>7) && (cols[gd][2*gm+1]<8))
- {;
- do_spaces();
- sgr(cols[gd][2*gm]+cols[gd][2*gm+1]*16);
- cfg=cols[gd][2*gm]; cbg=cols[gd][2*gm+1]*16;
- output << 'ß';
- } else
- {;
- do_spaces();
-
- ofg=cfg; obg=cbg;
- cbg=cols[gd][2*gm]; cfg=cols[gd][2*gm+1];
-
- if ((cbg==ofg) && (cfg==obg))
- {;
- n=cfg*16+cbg;
- if (n>128) n -= 128;
- output << 'ß';
- } else
- {;
- n=cbg*16+cfg;
- if (n>128) n -= 128;
- if ((cfg!=ofg) || (cbg!=obg)) sgr(n);
- output << 'Ü';
- }
-
- }
- }
- } finishline();
- }
- output << NL;
- normal;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ fillchar(cols, sizeof(cols), '\0');
+ assign(f, "v:avvypic.ptx");
+ reset(f, 1);
+ blockread(f, aa, filesize(f));
+ close(f);
+ putimage(0, 0, aa, 0);
+ for (gd = 0; gd <= 27; gd ++)
+ for (gm = 0; gm <= 34; gm ++)
+ cols[gd][gm + 1] = getpixel(gd, gm);
+
+ restorecrtmode();
+
+ assign(output, "v:avalot.ans");
+ rewrite(output);
+ normal;
+ ed;
+ /* assign(output,''); rewrite(output); normal; ed;*/
+ assign(t, "v:avalot.txt");
+ reset(t);
+
+ for (gm = 0; gm <= 17; gm ++) {
+ ;
+ spaces = 0;
+ for (gd = 0; gd <= 27; gd ++) {
+ ;
+ if ((gd == 22) && (gm == 4)) {
+ ;
+ do_spaces();
+ sgr(red);
+ output << 'ß';
+ } else {
+ ;
+ if (cols[gd][2 * gm] == cols[gd][2 * gm + 1]) {
+ ;
+ if (cols[gd][2 * gm] == 0)
+ spaces += 1; /* a blank space */
+ else {
+ ;
+ do_spaces();
+
+ if (cfg == cols[gd][2 * gm]) output << 'Û';
+ else if (cbg == cols[gd][2 * gm]) output << ' ';
+ else {
+ ;
+ sgr((cols[gd][2 * gm]) + (cbg * 16));
+ cfg = cols[gd][2 * gm];
+ output << 'Û';
+ }
+ }
+ } else if ((cols[gd][2 * gm] > 7) && (cols[gd][2 * gm + 1] < 8)) {
+ ;
+ do_spaces();
+ sgr(cols[gd][2 * gm] + cols[gd][2 * gm + 1] * 16);
+ cfg = cols[gd][2 * gm];
+ cbg = cols[gd][2 * gm + 1] * 16;
+ output << 'ß';
+ } else {
+ ;
+ do_spaces();
+
+ ofg = cfg;
+ obg = cbg;
+ cbg = cols[gd][2 * gm];
+ cfg = cols[gd][2 * gm + 1];
+
+ if ((cbg == ofg) && (cfg == obg)) {
+ ;
+ n = cfg * 16 + cbg;
+ if (n > 128) n -= 128;
+ output << 'ß';
+ } else {
+ ;
+ n = cbg * 16 + cfg;
+ if (n > 128) n -= 128;
+ if ((cfg != ofg) || (cbg != obg)) sgr(n);
+ output << 'Ü';
+ }
+
+ }
+ }
+ }
+ finishline();
+ }
+ output << NL;
+ normal;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/avvymonk.cpp b/engines/avalanche/avvymonk.cpp
index 25fc83e405..4f150e33d7 100644
--- a/engines/avalanche/avvymonk.cpp
+++ b/engines/avalanche/avvymonk.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,72 +29,89 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
byte z;
-array<1,4,pointer> a;
-untyped_file f; word s;
+array<1, 4, pointer> a;
+untyped_file f;
+word s;
string check;
-integer x,y;
-void savesc()
-{
- varying_string<40> adf; untyped_file f; byte z; array<1,2,pointer> c; word s;
-varying_string<14> nam; varying_string<30> screenname;
-;
- nam="v:avvymonk.avd";
- adf=string("aved as a stuff file, so there! TJAT.")+'\15'+'\12'+'\32';
- adf[0]='S';
- screenname="Avalot in a monk's costume";
- assign(f,nam); /* not scrambled */
- rewrite(f,1);
- blockwrite(f,adf,41);
- blockwrite(f,nam,13);
- blockwrite(f,screenname,31);
- s=imagesize(0,0,getmaxx(),75);
- for( z=1; z <= 2; z ++)
- {;
- getmem(c[z],s);
- getimage(0,15+(z-1)*75,getmaxx(),15+(z)*75,c[z]);
- blockwrite(f,c[z],s);
- freemem(c[z],s);
- }
+integer x, y;
+void savesc() {
+ varying_string<40> adf;
+ untyped_file f;
+ byte z;
+ array<1, 2, pointer> c;
+ word s;
+ varying_string<14> nam;
+ varying_string<30> screenname;
+ ;
+ nam = "v:avvymonk.avd";
+ adf = string("aved as a stuff file, so there! TJAT.") + '\15' + '\12' + '\32';
+ adf[0] = 'S';
+ screenname = "Avalot in a monk's costume";
+ assign(f, nam); /* not scrambled */
+ rewrite(f, 1);
+ blockwrite(f, adf, 41);
+ blockwrite(f, nam, 13);
+ blockwrite(f, screenname, 31);
+ s = imagesize(0, 0, getmaxx(), 75);
+ for (z = 1; z <= 2; z ++) {
+ ;
+ getmem(c[z], s);
+ getimage(0, 15 + (z - 1) * 75, getmaxx(), 15 + (z) * 75, c[z]);
+ blockwrite(f, c[z], s);
+ freemem(c[z], s);
+ }
}
-void loadscreen(string nam)
-{;
- assign(f,nam);
- reset(f,1);
- blockread(f,check,41);
- blockread(f,check,13);
- blockread(f,check,31);
- s=imagesize(0,0,getmaxx(),75);
- for( z=1; z <= 2; z ++)
- {;
- getmem(a[z],s);
- blockread(f,a[z],s);
- setactivepage(0);
- putimage(0,15+(z-1)*75,a[z],0);
- freemem(a[z],s);
- }
- close(f);
+void loadscreen(string nam) {
+ ;
+ assign(f, nam);
+ reset(f, 1);
+ blockread(f, check, 41);
+ blockread(f, check, 13);
+ blockread(f, check, 31);
+ s = imagesize(0, 0, getmaxx(), 75);
+ for (z = 1; z <= 2; z ++) {
+ ;
+ getmem(a[z], s);
+ blockread(f, a[z], s);
+ setactivepage(0);
+ putimage(0, 15 + (z - 1) * 75, a[z], 0);
+ freemem(a[z], s);
+ }
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0;
- x=0; y=0;
- initgraph(gd,gm,"o:");
- loadscreen("v:legion.avd");
- while (y<100)
- {;
- switch (getpixel(x,y)) {
- case 7: putpixel(x,y,0); break;
- case 8: putpixel(x,y,0); break;
- case 9: putpixel(x,y,15); break;
- }
- x += 1;
- if (x>640) {; y += 1; x=0; }
- }
- savesc();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ x = 0;
+ y = 0;
+ initgraph(gd, gm, "o:");
+ loadscreen("v:legion.avd");
+ while (y < 100) {
+ ;
+ switch (getpixel(x, y)) {
+ case 7:
+ putpixel(x, y, 0);
+ break;
+ case 8:
+ putpixel(x, y, 0);
+ break;
+ case 9:
+ putpixel(x, y, 15);
+ break;
+ }
+ x += 1;
+ if (x > 640) {
+ ;
+ y += 1;
+ x = 0;
+ }
+ }
+ savesc();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/bakchunk.cpp b/engines/avalanche/bakchunk.cpp
index fabda148f7..94e00da557 100644
--- a/engines/avalanche/bakchunk.cpp
+++ b/engines/avalanche/bakchunk.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,26 +31,29 @@
namespace Avalanche {
-integer gd,gm;
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gd=3; gm=0; initgraph(gd,gm,"");
- setvisualpage(3);
- load_chunks('1');
-
- for( gd=0; gd <= num_chunks; gd ++)
- show_one_at(gd,0,gd*40);
-
- mblit(0,0,79,200,3,0);
-
- gd=getpixel(0,0);
- setvisualpage(0); setactivepage(0);
-
- settextstyle(0,0,4); setcolor(15);
- outtextxy(100,50,"Chunk1");
- input >> NL;
- return EXIT_SUCCESS;
+integer gd, gm;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ setvisualpage(3);
+ load_chunks('1');
+
+ for (gd = 0; gd <= num_chunks; gd ++)
+ show_one_at(gd, 0, gd * 40);
+
+ mblit(0, 0, 79, 200, 3, 0);
+
+ gd = getpixel(0, 0);
+ setvisualpage(0);
+ setactivepage(0);
+
+ settextstyle(0, 0, 4);
+ setcolor(15);
+ outtextxy(100, 50, "Chunk1");
+ input >> NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/basher.cpp b/engines/avalanche/basher.cpp
index b4ceeb389a..dcab52540e 100644
--- a/engines/avalanche/basher.cpp
+++ b/engines/avalanche/basher.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -35,9 +35,9 @@
#define __basher_implementation__
- /* Note: this unit can record keystrokes, for the demo. If you want it
- to do this, define the o.c.c. RECORD. Setting gyro.demo to True will
- cause them to be played back. */
+/* Note: this unit can record keystrokes, for the demo. If you want it
+ to do this, define the o.c.c. RECORD. Setting gyro.demo to True will
+ cause them to be played back. */
#include "basher.h"
@@ -59,36 +59,36 @@ namespace Avalanche {
boolean entering_filename;
byte left_margin;
-void plottext()
-{
- const array<0,2,byte> p = {{0,1,3}};
- byte x,y,n;
-
- x=0; if (mouse_near_text()) super_off();
- cursor_off();
- for( n=0; n <= 2; n ++)
- for( y=0; y <= 7; y ++)
- {
- for( x=1; x <= length(current); x ++)
- mem[0xa000*p[n]*pagetop+12882+y*80+x]=little[current[x]][y];
- fillchar(mem[0xa000*p[n]*pagetop+12883+y*80+x],77-x,'\0');
- }
- cursor_on();
- super_on();
+void plottext() {
+ const array<0, 2, byte> p = {{0, 1, 3}};
+ byte x, y, n;
+
+ x = 0;
+ if (mouse_near_text()) super_off();
+ cursor_off();
+ for (n = 0; n <= 2; n ++)
+ for (y = 0; y <= 7; y ++) {
+ for (x = 1; x <= length(current); x ++)
+ mem[0xa000 * p[n]*pagetop + 12882 + y * 80 + x] = little[current[x]][y];
+ fillchar(mem[0xa000 * p[n]*pagetop + 12883 + y * 80 + x], 77 - x, '\0');
+ }
+ cursor_on();
+ super_on();
}
-void wipetext()
-{
- const array<0,2,byte> n = {{0,1,3}};
- byte y,p;
-
- if (mouse_near_text()) super_off();
- cursor_off();
- for( y=0; y <= 7; y ++)
- for( p=0; p <= 2; p ++)
- fillchar(mem[0xa000*n[p]*pagetop+12883+y*80],77,'\0');
- quote=true; curpos=1; cursor_on();
- super_on();
+void wipetext() {
+ const array<0, 2, byte> n = {{0, 1, 3}};
+ byte y, p;
+
+ if (mouse_near_text()) super_off();
+ cursor_off();
+ for (y = 0; y <= 7; y ++)
+ for (p = 0; p <= 2; p ++)
+ fillchar(mem[0xa000 * n[p]*pagetop + 12883 + y * 80], 77, '\0');
+ quote = true;
+ curpos = 1;
+ cursor_on();
+ super_on();
}
/*procedure cursor;
@@ -104,49 +104,49 @@ begin
end else dec(curflash);
end;*/
-void do_cursor()
-{
- bytefield bf;
- byte fv;
-
- mem[0xac00*13442+curpos]=~ mem[0xac00*13442+curpos];
- {
- bf.x1=curpos+1; bf.x2=curpos+2; bf.y1=168; bf.y2=168;
- }
- for( fv=0; fv <= 1; fv ++) getset[fv].remember(bf);
+void do_cursor() {
+ bytefield bf;
+ byte fv;
+
+ mem[0xac00 * 13442 + curpos] = ~ mem[0xac00 * 13442 + curpos];
+ {
+ bf.x1 = curpos + 1;
+ bf.x2 = curpos + 2;
+ bf.y1 = 168;
+ bf.y2 = 168;
+ }
+ for (fv = 0; fv <= 1; fv ++) getset[fv].remember(bf);
}
-void cursor_on()
-{
- if (cursoron) return;
- do_cursor(); cursoron=true;
+void cursor_on() {
+ if (cursoron) return;
+ do_cursor();
+ cursoron = true;
}
-void cursor_off()
-{
- if (! cursoron) return;
- do_cursor(); cursoron=false;
+void cursor_off() {
+ if (! cursoron) return;
+ do_cursor();
+ cursoron = false;
}
-void get_demorec()
-{
- demofile >> demo_rec;
- inchar=demo_rec.key;
- extd=demo_rec.extd;
- demo_rec.delay -= 1;
+void get_demorec() {
+ demofile >> demo_rec;
+ inchar = demo_rec.key;
+ extd = demo_rec.extd;
+ demo_rec.delay -= 1;
}
#ifdef RECORD
- void record_one()
- {
- demo_rec.delay=count;
- demo_rec.key=inchar;
- demo_rec.extd=extd;
-
- demofile << demo_rec;
- count=0;
- }
+void record_one() {
+ demo_rec.delay = count;
+ demo_rec.key = inchar;
+ demo_rec.extd = extd;
+
+ demofile << demo_rec;
+ count = 0;
+}
#endif
/*
procedure storeline(whatwhat:string);
@@ -178,235 +178,324 @@ end;
*/
void typein();
-static char firstchar(string x) { char firstchar_result;
- firstchar_result=x[1]; return firstchar_result;
- }
+static char firstchar(string x) {
+ char firstchar_result;
+ firstchar_result = x[1];
+ return firstchar_result;
+}
-static void try_dd() /* This asks the Parsekey proc in Dropdown if it knows it. */
-{
- parsekey(inchar,extd);
+static void try_dd() { /* This asks the Parsekey proc in Dropdown if it knows it. */
+ parsekey(inchar, extd);
}
-void typein()
-{
- byte w;
-
- inkey();
- #ifdef RECORD record_one(); #endif
-
- switch (inchar) {
- case RANGE_15('\40','\56'):case '\60' ... '\337':case '\341' ... '\377': if (ddm_o.menunow)
- {
- parsekey(inchar,extd);
- } else
- {
- if (length(current)<76)
- {
- if ((inchar=='"') || (inchar=='`'))
- {
- if (quote) inchar='`'; else inchar='"';
- quote=! quote; /* Quote- Unquote... */
- }
- insert(inchar,current,curpos);
- curpos += 1;
- plottext();
- } else blip();
- }
- break;
- case '\10': if (! ddm_o.menunow)
- {
- if (curpos>left_margin)
- {
- curpos -= 1;
- if (set::of('"','`', eos).has(current[curpos])) quote=! quote;
- Delete(current,curpos,1);
- plottext();
- } else blip();
- }
- break;
- case '\0':case '\340': {
- switch (extd) {
- /* Function keys: */
- case cf1: callverb(vb_help); break; /* f1 - help (obviously) */
- case cf2: fxtoggle(); break; /* f2 - sound */
- case ccf2:case cf11: { clearwords(); callverb(vb_save); } break; /* ^f2 - save */
- case cf3: if (length(current)<length(/*previous^[20]*/last)) /* f3 - rec last */
- {
- current=current+copy( /*previous^[20]*/last,length(current)+1,255);
- curpos=length(current)+1;
- plottext();
- }
- break;
- case ccf3:case cf12: { clearwords(); callverb(vb_load); } break; /* ^f3 - load */
- case cf4: callverb(vb_restart); break; /* f4 - restart game */
- case cf5: {
- person=pardon; thing=pardon;
- callverb(firstchar(f5_does())); /* f5 - get up/ whatever */
- }
- break;
- case cf6: callverb(vb_pause); break; /* f6 - pause */
- case cf7: callverb(vb_open); break; /* f7 - open door */
- case cf8: callverb(vb_look); break; /* f8 - look */
- case cf9: callverb(vb_score); break; /* f9 - score */
- case ccf7: major_redraw(); break; /* ^f7 - open door */
- case cf10:case c_ax:case caf4: {
- #ifdef RECORD
- display("Hi. You have just finished recording. GIED.");
- close(demofile); exit(0);
- #endif
- callverb(vb_quit); /* f10, alt-X, alt-f4 - quit */
- }
- break;
- case ccf5: back_to_bootstrap(2); break; /* ^f5 - Dos shell. */
- case csf10: callverb(vb_info); break; /* sf10 - version */
-
- case c_ab: callverb(vb_boss); break; /* alt-B */
- case c_ad: display("Wrong game!"); break; /* alt-D */
- case ccleft: if (curpos>left_margin)
- { cursor_off(); curpos -= 1; cursor_on(); }
- break; /* ^left */
- case ccright: if (curpos<=length(current)) /* ^right */
- { cursor_off(); curpos += 1; cursor_on(); }
- break;
- case cchome: { cursor_off(); curpos=1; cursor_on(); } break; /* ^home */
- case ccend: { cursor_off(); curpos=length(current)+1; cursor_on(); } break; /* ^end */
- case c_ar: oh=177; break; /* alt-R = repeater (re-chime) */
- case cup:case cdown:case cleft:case cright:case cpgup:case cpgdn:case chome:case cend: if (ddm_o.menunow) try_dd();
- else tripkey(extd);
- break; /* Up/Down/Left/Right/PgUp/PgDn */
- case cnum5: tripkey(extd); break; /* Numeric 5 */
- case cdel: if (! ddm_o.menunow)
- {
- if (curpos<=length(current))
- {
- if (set::of('"','`', eos).has(current[curpos])) quote=! quote;
- Delete(current,curpos,1);
- plottext();
- } else blip();
- }
- break;
- default: try_dd();
- }
- }
- break;
- case cescape:case '/': if (ddm_o.menunow) /* Escape */
- { ddm_o.wipe(); } else
- if (entering_filename)
- { normal_edit(); wipetext(); } else
- ddm_m.getcertain(ddm_o.menunum);
- break;
- case creturn: if (ddm_o.menunow) try_dd(); /* Return */
- else {
- log_command(current);
- if (entering_filename)
- {
- edna_save(copy(current,24,255));
- normal_edit(); wipetext();
- } else
- {
- if (current!="") last=current;
- parse(); do_that();
- if (! entering_filename)
- {
- current="";
- wipetext();
- }
- }
- }
- break;
- case '\11': callverb(vb_inv); break; /* Ctrl-I= inventory */
- case '\7': errorled(); break;
- case '\25': {
- current="";
- wipetext();
- }
- break;
-
- case '\27': { tr[1].xs=walk; newspeed(); } break;
- case '\22': { tr[1].xs=run; newspeed(); } break;
-
- case '\2': bosskey(); break;
- case '\12': ctrl=cjoy; break; /* Joystick */
- case '\13': ctrl=ckey; break; /* Keyboard */
- case '\3': callverb(vb_quit); break; /* Ctrl-C= request to quit */
-
- }
- showrw();
-
- if (demo) get_demorec();
+void typein() {
+ byte w;
+
+ inkey();
+#ifdef RECORD record_one(); #endif
+
+ switch (inchar) {
+ case RANGE_15('\40', '\56'):
+ case '\60' ... '\337':
+ case '\341' ... '\377':
+ if (ddm_o.menunow) {
+ parsekey(inchar, extd);
+ } else {
+ if (length(current) < 76) {
+ if ((inchar == '"') || (inchar == '`')) {
+ if (quote) inchar = '`';
+ else inchar = '"';
+ quote = ! quote; /* Quote- Unquote... */
+ }
+ insert(inchar, current, curpos);
+ curpos += 1;
+ plottext();
+ } else blip();
+ }
+ break;
+ case '\10':
+ if (! ddm_o.menunow) {
+ if (curpos > left_margin) {
+ curpos -= 1;
+ if (set::of('"', '`', eos).has(current[curpos])) quote = ! quote;
+ Delete(current, curpos, 1);
+ plottext();
+ } else blip();
+ }
+ break;
+ case '\0':
+ case '\340': {
+ switch (extd) {
+ /* Function keys: */
+ case cf1:
+ callverb(vb_help);
+ break; /* f1 - help (obviously) */
+ case cf2:
+ fxtoggle();
+ break; /* f2 - sound */
+ case ccf2:
+ case cf11: {
+ clearwords();
+ callverb(vb_save);
+ }
+ break; /* ^f2 - save */
+ case cf3:
+ if (length(current) < length(/*previous^[20]*/last)) { /* f3 - rec last */
+ current = current + copy(/*previous^[20]*/last, length(current) + 1, 255);
+ curpos = length(current) + 1;
+ plottext();
+ }
+ break;
+ case ccf3:
+ case cf12: {
+ clearwords();
+ callverb(vb_load);
+ }
+ break; /* ^f3 - load */
+ case cf4:
+ callverb(vb_restart);
+ break; /* f4 - restart game */
+ case cf5: {
+ person = pardon;
+ thing = pardon;
+ callverb(firstchar(f5_does())); /* f5 - get up/ whatever */
+ }
+ break;
+ case cf6:
+ callverb(vb_pause);
+ break; /* f6 - pause */
+ case cf7:
+ callverb(vb_open);
+ break; /* f7 - open door */
+ case cf8:
+ callverb(vb_look);
+ break; /* f8 - look */
+ case cf9:
+ callverb(vb_score);
+ break; /* f9 - score */
+ case ccf7:
+ major_redraw();
+ break; /* ^f7 - open door */
+ case cf10:
+ case c_ax:
+ case caf4: {
+#ifdef RECORD
+ display("Hi. You have just finished recording. GIED.");
+ close(demofile);
+ exit(0);
+#endif
+ callverb(vb_quit); /* f10, alt-X, alt-f4 - quit */
+ }
+ break;
+ case ccf5:
+ back_to_bootstrap(2);
+ break; /* ^f5 - Dos shell. */
+ case csf10:
+ callverb(vb_info);
+ break; /* sf10 - version */
+
+ case c_ab:
+ callverb(vb_boss);
+ break; /* alt-B */
+ case c_ad:
+ display("Wrong game!");
+ break; /* alt-D */
+ case ccleft:
+ if (curpos > left_margin) {
+ cursor_off();
+ curpos -= 1;
+ cursor_on();
+ }
+ break; /* ^left */
+ case ccright:
+ if (curpos <= length(current)) { /* ^right */
+ cursor_off();
+ curpos += 1;
+ cursor_on();
+ }
+ break;
+ case cchome: {
+ cursor_off();
+ curpos = 1;
+ cursor_on();
+ }
+ break; /* ^home */
+ case ccend: {
+ cursor_off();
+ curpos = length(current) + 1;
+ cursor_on();
+ }
+ break; /* ^end */
+ case c_ar:
+ oh = 177;
+ break; /* alt-R = repeater (re-chime) */
+ case cup:
+ case cdown:
+ case cleft:
+ case cright:
+ case cpgup:
+ case cpgdn:
+ case chome:
+ case cend:
+ if (ddm_o.menunow) try_dd();
+ else tripkey(extd);
+ break; /* Up/Down/Left/Right/PgUp/PgDn */
+ case cnum5:
+ tripkey(extd);
+ break; /* Numeric 5 */
+ case cdel:
+ if (! ddm_o.menunow) {
+ if (curpos <= length(current)) {
+ if (set::of('"', '`', eos).has(current[curpos])) quote = ! quote;
+ Delete(current, curpos, 1);
+ plottext();
+ } else blip();
+ }
+ break;
+ default:
+ try_dd();
+ }
+ }
+ break;
+ case cescape:
+ case '/':
+ if (ddm_o.menunow) { /* Escape */
+ ddm_o.wipe();
+ } else if (entering_filename) {
+ normal_edit();
+ wipetext();
+ } else
+ ddm_m.getcertain(ddm_o.menunum);
+ break;
+ case creturn:
+ if (ddm_o.menunow) try_dd(); /* Return */
+ else {
+ log_command(current);
+ if (entering_filename) {
+ edna_save(copy(current, 24, 255));
+ normal_edit();
+ wipetext();
+ } else {
+ if (current != "") last = current;
+ parse();
+ do_that();
+ if (! entering_filename) {
+ current = "";
+ wipetext();
+ }
+ }
+ }
+ break;
+ case '\11':
+ callverb(vb_inv);
+ break; /* Ctrl-I= inventory */
+ case '\7':
+ errorled();
+ break;
+ case '\25': {
+ current = "";
+ wipetext();
+ }
+ break;
+
+ case '\27': {
+ tr[1].xs = walk;
+ newspeed();
+ }
+ break;
+ case '\22': {
+ tr[1].xs = run;
+ newspeed();
+ }
+ break;
+
+ case '\2':
+ bosskey();
+ break;
+ case '\12':
+ ctrl = cjoy;
+ break; /* Joystick */
+ case '\13':
+ ctrl = ckey;
+ break; /* Keyboard */
+ case '\3':
+ callverb(vb_quit);
+ break; /* Ctrl-C= request to quit */
+
+ }
+ showrw();
+
+ if (demo) get_demorec();
}
/* 'x'..'z': begin setvisualpage(ord(extd)-63); write(#7); inkey; end;
'': begin setvisualpage(0); write(#7); inkey; end;*/
-void keyboard_link()
-{
- state(defaultled); /* if defaultled=1 then on; { For the menus }*/
- joykeys(); /* Test joystick buttons- I know that's not keyboard. */
-
- if (demo)
- {
- if (keypressede()) exit(0);
- if (demo_rec.delay>0)
- demo_rec.delay -= 1;
- else typein();
- return;
- }
-
- #ifdef RECORD count += 1; #endif
-
- if (! keypressede()) return;
- if (keyboardclick) click();
- typein();
+void keyboard_link() {
+ state(defaultled); /* if defaultled=1 then on; { For the menus }*/
+ joykeys(); /* Test joystick buttons- I know that's not keyboard. */
+
+ if (demo) {
+ if (keypressede()) exit(0);
+ if (demo_rec.delay > 0)
+ demo_rec.delay -= 1;
+ else typein();
+ return;
+ }
+
+#ifdef RECORD count += 1; #endif
+
+ if (! keypressede()) return;
+ if (keyboardclick) click();
+ typein();
}
-boolean demo_ready()
-{
- boolean demo_ready_result;
- if (demo_rec.delay>0)
- {
- slowdown();
- demo_rec.delay -= 1;
- }
- demo_ready_result=demo_rec.delay==0;
- return demo_ready_result;
+boolean demo_ready() {
+ boolean demo_ready_result;
+ if (demo_rec.delay > 0) {
+ slowdown();
+ demo_rec.delay -= 1;
+ }
+ demo_ready_result = demo_rec.delay == 0;
+ return demo_ready_result;
}
-void filename_edit()
-{
- entering_filename=true;
- current="Filename\? (Esc=cancel):";
- left_margin=24; curpos=24;
- plottext();
+void filename_edit() {
+ entering_filename = true;
+ current = "Filename\? (Esc=cancel):";
+ left_margin = 24;
+ curpos = 24;
+ plottext();
}
-void normal_edit()
-{
- entering_filename=false;
- current="";
- left_margin=1; curpos=1;
+void normal_edit() {
+ entering_filename = false;
+ current = "";
+ left_margin = 1;
+ curpos = 1;
}
class unit_basher_initialize {
- public: unit_basher_initialize();
+public:
+ unit_basher_initialize();
};
static unit_basher_initialize basher_constructor;
unit_basher_initialize::unit_basher_initialize() {
-/* new(previous);*/ last=""; normal_edit();
-
- if (demo)
- {
- assign(demofile,"demo.avd");
- reset(demofile);
- }
-
- #ifdef RECORD
- count=0;
- assign(demofile,"demo.avd");
- rewrite(demofile);
- #endif
+ /* new(previous);*/ last = "";
+ normal_edit();
+
+ if (demo) {
+ assign(demofile, "demo.avd");
+ reset(demofile);
+ }
+
+#ifdef RECORD
+ count = 0;
+ assign(demofile, "demo.avd");
+ rewrite(demofile);
+#endif
}
diff --git a/engines/avalanche/basher.h b/engines/avalanche/basher.h
index ba26d926a9..1cc42b5b6c 100644
--- a/engines/avalanche/basher.h
+++ b/engines/avalanche/basher.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -47,22 +47,22 @@ EXTERN word count;
#endif
- void plottext();
+void plottext();
- void keyboard_link();
+void keyboard_link();
- void cursor_on();
+void cursor_on();
- void get_demorec();
+void get_demorec();
- boolean demo_ready();
+boolean demo_ready();
- void cursor_off();
+void cursor_off();
- void filename_edit();
- void normal_edit();
+void filename_edit();
+void normal_edit();
#ifdef RECORD
- void record_one();
+void record_one();
#endif
} // End of namespace Avalanche.
diff --git a/engines/avalanche/cadburys.cpp b/engines/avalanche/cadburys.cpp
index 8d1e0c33ad..f653ad8924 100644
--- a/engines/avalanche/cadburys.cpp
+++ b/engines/avalanche/cadburys.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -35,100 +35,111 @@
namespace Avalanche {
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/cadburys.h b/engines/avalanche/cadburys.h
index 325bd35e47..6afb4532f2 100644
--- a/engines/avalanche/cadburys.h
+++ b/engines/avalanche/cadburys.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,20 +32,20 @@ namespace Avalanche {
const integer arraysize = 12000;
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
@@ -54,17 +54,17 @@ struct chunkblocktype {
#define EXTERN
#endif
-EXTERN array<0,arraysize,byte> aa;
-EXTERN byte num_chunks,this_chunk;
-EXTERN integer gd,gm;
-EXTERN array<1,30,longint> offsets;
+EXTERN array<0, arraysize, byte> aa;
+EXTERN byte num_chunks, this_chunk;
+EXTERN integer gd, gm;
+EXTERN array<1, 30, longint> offsets;
EXTERN untyped_file f;
#undef EXTERN
#define EXTERN extern
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat);
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat);
} // End of namespace Avalanche.
diff --git a/engines/avalanche/celer.cpp b/engines/avalanche/celer.cpp
index 1038e6f777..d444845cef 100644
--- a/engines/avalanche/celer.cpp
+++ b/engines/avalanche/celer.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -48,222 +48,296 @@ untyped_file f; /* Private variable- not accessible from elsewhere. */
const integer on_disk = -1; /* Value of memos[fv].x when it's not in memory. */
-void pics_link()
-{
- byte xx;
-
- if (ddmnow) return; /* No animation when the menus are up. */
-
- { dnatype& with = dna;
- switch (with.room) {
-
- case r__outsideargentpub: {
- if ((roomtime % longint(12))==0)
- show_one(longint(1)+(roomtime / longint(12)) % longint(4));
- }
- break;
-
- case r__brummieroad: if ((roomtime % longint(2))==0)
- show_one(longint(1)+(roomtime / longint(2)) % longint(4));
- break;
-
- case r__bridge: if ((roomtime % longint(2))==0)
- show_one(longint(4)+(roomtime / longint(2)) % longint(4));
- break;
-
- case r__yours: if ((! with.avvy_is_awake) && ((roomtime % longint(4))==0))
- show_one(longint(1)+(roomtime / longint(12)) % longint(2));
- break;
-
- case r__argentpub: {
- if (((roomtime % longint(7))==1) && (dna.malagauche!=177))
- { /* Malagauche cycle */
- dna.malagauche += 1;
- switch (dna.malagauche) {
- case 1:case 11:case 21: show_one(12); break; /* Looks forwards. */
- case 8:case 18:case 28:case 32: show_one(11); break; /* Looks at you. */
- case 30: show_one(13); break; /* Winks. */
- case 33: dna.malagauche=0; break;
- }
- }
-
- switch (roomtime % longint(200)) {
- case 179:case 197: show_one(5); break; /* Dogfood's drinking cycle */
- case 182:case 194: show_one(6); break;
- case 185: show_one(7); break;
- case 199: dna.dogfoodpos=177; break; /* Impossible value for this. */
- case 0 ... 178: { /* Normally. */
- switch (bearing(2)) {/* Bearing of Avvy from Dogfood. */
- case 1 ... 90:case RANGE_3(358,360): xx=3; break;
- case 293 ... 357: xx=2; break;
- case 271 ... 292: xx=4; break;
- }
- if (xx!=dna.dogfoodpos) /* Only if it's changed.*/
- {
- show_one(xx);
- dna.dogfoodpos=xx;
- }
- }
- break;
- }
- }
- break;
-
- case r__westhall: if ((roomtime % longint(3))==0)
- switch ((roomtime / longint(3)) % longint(6)) {
- case 4: show_one(1); break;
- case 1:case 3:case 5: show_one(2); break;
- case 0:case 2: show_one(3); break;
- }
- break;
- case r__lustiesroom: if (! (dna.lustie_is_asleep)) {
- if ((roomtime % longint(45))>42) xx=4; /* du Lustie blinks */
- else
- switch (bearing(2)) {/* Bearing of Avvy from du Lustie. */
- case 0 ... 45:case 315 ... 360: xx=1; break; /* Middle. */
- case 45 ... 180: xx=2; break; /* Left. */
- case 181 ... 314: xx=3; break; /* Right. */
- }
- if (xx!=dna.dogfoodpos) /* Only if it's changed.*/
- {
- show_one(xx);
- dna.dogfoodpos=xx; /* We use DogfoodPos here too- why not? */
- }
- }
- break;
-
- case r__aylesoffice: if ((! dna.ayles_is_awake) && (roomtime % longint(14)==0))
- {
- switch ((roomtime / longint(14)) % longint(2)) {
- case 0: show_one(1); break; /* Frame 2: EGA. */
- case 1: show_one(3); break; /* Frame 1: Natural. */
- }
- }
- break;
-
- case r__robins: if (dna.tied_up)
- switch (roomtime % longint(54)) {
- case 20: show_one(4); break; /* Frame 4: Avalot blinks. */
- case 23: show_one(2); break; /* Frame 1: Back to normal. */
- }
- break;
-
- case r__nottspub: {
- switch (bearing(5)) { /* Bearing of Avvy from Port. */
- case 0 ... 45:case 315 ... 360: xx=2; break; /* Middle. */
- case 45 ... 180: xx=6; break; /* Left. */
- case 181 ... 314: xx=8; break; /* Right. */
- }
-
- if ((roomtime % longint(60))>57) xx -= 1; /* Blinks */
-
- if (xx!=dna.dogfoodpos) /* Only if it's changed.*/
- {
- show_one(xx);
- dna.dogfoodpos=xx; /* We use DogfoodPos here too- why not? */
- }
-
- switch (roomtime % longint(50)) {
- case 45 : show_one(9); break; /* Spurge blinks */
- case 49 : show_one(10); break;
- }
- }
- break;
-
- case r__ducks: {
- if ((roomtime % longint(3))==0) /* The fire flickers */
- show_one(longint(1)+(roomtime / longint(3)) % longint(3));
-
- switch (bearing(2)) {/* Bearing of Avvy from Duck. */
- case 0 ... 45:case 315 ... 360: xx=4; break; /* Middle. */
- case 45 ... 180: xx=6; break; /* Left. */
- case 181 ... 314: xx=8; break; /* Right. */
- }
-
- if ((roomtime % longint(45))>42) xx += 1; /* Duck blinks */
-
- if (xx!=dna.dogfoodpos) /* Only if it's changed.*/
- {
- show_one(xx);
- dna.dogfoodpos=xx; /* We use DogfoodPos here too- why not? */
- }
- }
- break;
-
- }}
-
- if ((dna.ringing_bells) && (flagset('B')))
- /* They're ringing the bells. */
- switch (roomtime % longint(4)) {
- case 1: {
- dnatype& with = dna;
-
- if (with.nextbell<5) with.nextbell=12;
- with.nextbell -= 1;
- note(notes[with.nextbell]);
- }
- break;
- case 2: nosound; break;
- }
+void pics_link() {
+ byte xx;
+
+ if (ddmnow) return; /* No animation when the menus are up. */
+
+ {
+ dnatype &with = dna;
+ switch (with.room) {
+
+ case r__outsideargentpub: {
+ if ((roomtime % longint(12)) == 0)
+ show_one(longint(1) + (roomtime / longint(12)) % longint(4));
+ }
+ break;
+
+ case r__brummieroad:
+ if ((roomtime % longint(2)) == 0)
+ show_one(longint(1) + (roomtime / longint(2)) % longint(4));
+ break;
+
+ case r__bridge:
+ if ((roomtime % longint(2)) == 0)
+ show_one(longint(4) + (roomtime / longint(2)) % longint(4));
+ break;
+
+ case r__yours:
+ if ((! with.avvy_is_awake) && ((roomtime % longint(4)) == 0))
+ show_one(longint(1) + (roomtime / longint(12)) % longint(2));
+ break;
+
+ case r__argentpub: {
+ if (((roomtime % longint(7)) == 1) && (dna.malagauche != 177)) {
+ /* Malagauche cycle */
+ dna.malagauche += 1;
+ switch (dna.malagauche) {
+ case 1:
+ case 11:
+ case 21:
+ show_one(12);
+ break; /* Looks forwards. */
+ case 8:
+ case 18:
+ case 28:
+ case 32:
+ show_one(11);
+ break; /* Looks at you. */
+ case 30:
+ show_one(13);
+ break; /* Winks. */
+ case 33:
+ dna.malagauche = 0;
+ break;
+ }
+ }
+
+ switch (roomtime % longint(200)) {
+ case 179:
+ case 197:
+ show_one(5);
+ break; /* Dogfood's drinking cycle */
+ case 182:
+ case 194:
+ show_one(6);
+ break;
+ case 185:
+ show_one(7);
+ break;
+ case 199:
+ dna.dogfoodpos = 177;
+ break; /* Impossible value for this. */
+ case 0 ... 178: { /* Normally. */
+ switch (bearing(2)) {/* Bearing of Avvy from Dogfood. */
+ case 1 ... 90:
+ case RANGE_3(358, 360):
+ xx = 3;
+ break;
+ case 293 ... 357:
+ xx = 2;
+ break;
+ case 271 ... 292:
+ xx = 4;
+ break;
+ }
+ if (xx != dna.dogfoodpos) { /* Only if it's changed.*/
+ show_one(xx);
+ dna.dogfoodpos = xx;
+ }
+ }
+ break;
+ }
+ }
+ break;
+
+ case r__westhall:
+ if ((roomtime % longint(3)) == 0)
+ switch ((roomtime / longint(3)) % longint(6)) {
+ case 4:
+ show_one(1);
+ break;
+ case 1:
+ case 3:
+ case 5:
+ show_one(2);
+ break;
+ case 0:
+ case 2:
+ show_one(3);
+ break;
+ }
+ break;
+ case r__lustiesroom:
+ if (!(dna.lustie_is_asleep)) {
+ if ((roomtime % longint(45)) > 42) xx = 4; /* du Lustie blinks */
+ else
+ switch (bearing(2)) {/* Bearing of Avvy from du Lustie. */
+ case 0 ... 45:
+ case 315 ... 360:
+ xx = 1;
+ break; /* Middle. */
+ case 45 ... 180:
+ xx = 2;
+ break; /* Left. */
+ case 181 ... 314:
+ xx = 3;
+ break; /* Right. */
+ }
+ if (xx != dna.dogfoodpos) { /* Only if it's changed.*/
+ show_one(xx);
+ dna.dogfoodpos = xx; /* We use DogfoodPos here too- why not? */
+ }
+ }
+ break;
+
+ case r__aylesoffice:
+ if ((! dna.ayles_is_awake) && (roomtime % longint(14) == 0)) {
+ switch ((roomtime / longint(14)) % longint(2)) {
+ case 0:
+ show_one(1);
+ break; /* Frame 2: EGA. */
+ case 1:
+ show_one(3);
+ break; /* Frame 1: Natural. */
+ }
+ }
+ break;
+
+ case r__robins:
+ if (dna.tied_up)
+ switch (roomtime % longint(54)) {
+ case 20:
+ show_one(4);
+ break; /* Frame 4: Avalot blinks. */
+ case 23:
+ show_one(2);
+ break; /* Frame 1: Back to normal. */
+ }
+ break;
+
+ case r__nottspub: {
+ switch (bearing(5)) { /* Bearing of Avvy from Port. */
+ case 0 ... 45:
+ case 315 ... 360:
+ xx = 2;
+ break; /* Middle. */
+ case 45 ... 180:
+ xx = 6;
+ break; /* Left. */
+ case 181 ... 314:
+ xx = 8;
+ break; /* Right. */
+ }
+
+ if ((roomtime % longint(60)) > 57) xx -= 1; /* Blinks */
+
+ if (xx != dna.dogfoodpos) { /* Only if it's changed.*/
+ show_one(xx);
+ dna.dogfoodpos = xx; /* We use DogfoodPos here too- why not? */
+ }
+
+ switch (roomtime % longint(50)) {
+ case 45 :
+ show_one(9);
+ break; /* Spurge blinks */
+ case 49 :
+ show_one(10);
+ break;
+ }
+ }
+ break;
+
+ case r__ducks: {
+ if ((roomtime % longint(3)) == 0) /* The fire flickers */
+ show_one(longint(1) + (roomtime / longint(3)) % longint(3));
+
+ switch (bearing(2)) {/* Bearing of Avvy from Duck. */
+ case 0 ... 45:
+ case 315 ... 360:
+ xx = 4;
+ break; /* Middle. */
+ case 45 ... 180:
+ xx = 6;
+ break; /* Left. */
+ case 181 ... 314:
+ xx = 8;
+ break; /* Right. */
+ }
+
+ if ((roomtime % longint(45)) > 42) xx += 1; /* Duck blinks */
+
+ if (xx != dna.dogfoodpos) { /* Only if it's changed.*/
+ show_one(xx);
+ dna.dogfoodpos = xx; /* We use DogfoodPos here too- why not? */
+ }
+ }
+ break;
+
+ }
+ }
+
+ if ((dna.ringing_bells) && (flagset('B')))
+ /* They're ringing the bells. */
+ switch (roomtime % longint(4)) {
+ case 1: {
+ dnatype &with = dna;
+
+ if (with.nextbell < 5) with.nextbell = 12;
+ with.nextbell -= 1;
+ note(notes[with.nextbell]);
+ }
+ break;
+ case 2:
+ nosound;
+ break;
+ }
}
-void load_chunks(string xx)
-{
- chunkblocktype ch;
- byte fv;
-
- /*$I-*/
- assign(f,string("chunk")+xx+".avd"); /* strf is done for us by Lucerna. */
- reset(f,1);
- if (ioresult!=0) return; /* no Chunk file. */
- seek(f,44);
- blockread(f,num_chunks,1);
- blockread(f,offsets,num_chunks*4);
-
- for( fv=1; fv <= num_chunks; fv ++)
- {
- seek(f,offsets[fv]);
- blockread(f,ch,sizeof(ch));
- {
- if (ch.memorise)
- {
-
- {
- memotype& with1 = memos[fv];
-
- with1.x=ch.x; with1.xl=ch.xl;
- with1.y=ch.y; with1.yl=ch.yl;
- with1.flavour=ch.flavour;
- with1.size=ch.size;
- }
-
- getmem(memory[fv],ch.size);
-
- if (ch.natural)
- {
- getimage(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl,memory[fv]);
- } else
- blockread(f,memory[fv],ch.size);
- } else memos[fv].x=on_disk;
- }
- }
-
- close(f);
- /*$I+*/
+void load_chunks(string xx) {
+ chunkblocktype ch;
+ byte fv;
+
+ /*$I-*/
+ assign(f, string("chunk") + xx + ".avd"); /* strf is done for us by Lucerna. */
+ reset(f, 1);
+ if (ioresult != 0) return; /* no Chunk file. */
+ seek(f, 44);
+ blockread(f, num_chunks, 1);
+ blockread(f, offsets, num_chunks * 4);
+
+ for (fv = 1; fv <= num_chunks; fv ++) {
+ seek(f, offsets[fv]);
+ blockread(f, ch, sizeof(ch));
+ {
+ if (ch.memorise) {
+
+ {
+ memotype &with1 = memos[fv];
+
+ with1.x = ch.x;
+ with1.xl = ch.xl;
+ with1.y = ch.y;
+ with1.yl = ch.yl;
+ with1.flavour = ch.flavour;
+ with1.size = ch.size;
+ }
+
+ getmem(memory[fv], ch.size);
+
+ if (ch.natural) {
+ getimage(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl, memory[fv]);
+ } else
+ blockread(f, memory[fv], ch.size);
+ } else memos[fv].x = on_disk;
+ }
+ }
+
+ close(f);
+ /*$I+*/
}
-void forget_chunks()
-{
- byte fv;
+void forget_chunks() {
+ byte fv;
- for( fv=1; fv <= num_chunks; fv ++)
- if (memos[fv].x>on_disk)
- freemem(memory[fv],memos[fv].size);
- fillchar(memos,sizeof(memos),'\377'); /* x=-1, => on disk. */
+ for (fv = 1; fv <= num_chunks; fv ++)
+ if (memos[fv].x > on_disk)
+ freemem(memory[fv], memos[fv].size);
+ fillchar(memos, sizeof(memos), '\377'); /* x=-1, => on disk. */
}
-void mdrop(integer x,integer y,integer xl,integer yl, pointer p) /* assembler;
+void mdrop(integer x, integer y, integer xl, integer yl, pointer p) /* assembler;
asm
push ds; { Strictly speaking, we shouldn't modify DS, so we'll save it.}
push bp; { Nor BP! }
@@ -357,143 +431,149 @@ asm
pop bp;
pop ds; { Get DS back again. }
*/
-{;
+{
+ ;
}
void show_one(byte which);
static bytefield r;
-static void display_it(integer x,integer y,integer xl,integer yl, flavourtype flavour, pointer p)
-{
- {
- switch (flavour) {
- case ch_bgi : {
- putimage(x*8,y,p,0);
- r.x1=x; r.y1=y;
- r.x2=x+xl+1; r.y2=y+yl;
- }
- break;
- case ch_ega : {
- mdrop(x,y,xl,yl,p); blitfix();
- r.x1=x; r.y1=y; r.x2=x+xl; r.y2=y+yl;
- }
- break;
- }
-}
+static void display_it(integer x, integer y, integer xl, integer yl, flavourtype flavour, pointer p) {
+ {
+ switch (flavour) {
+ case ch_bgi : {
+ putimage(x * 8, y, p, 0);
+ r.x1 = x;
+ r.y1 = y;
+ r.x2 = x + xl + 1;
+ r.y2 = y + yl;
+ }
+ break;
+ case ch_ega : {
+ mdrop(x, y, xl, yl, p);
+ blitfix();
+ r.x1 = x;
+ r.y1 = y;
+ r.x2 = x + xl;
+ r.y2 = y + yl;
+ }
+ break;
+ }
+ }
}
-void show_one(byte which)
-{
- chunkblocktype ch;
- pointer p;
- byte fv;
+void show_one(byte which) {
+ chunkblocktype ch;
+ pointer p;
+ byte fv;
- setactivepage(3);
+ setactivepage(3);
- {
- memotype& with = memos[which];
+ {
+ memotype &with = memos[which];
- if (with.x>on_disk)
- {
- display_it(with.x,with.y,with.xl,with.yl,with.flavour,memory[which]);
- } else
- {
- reset(f,1);
- seek(f,offsets[which]);
- blockread(f,ch,sizeof(ch));
+ if (with.x > on_disk) {
+ display_it(with.x, with.y, with.xl, with.yl, with.flavour, memory[which]);
+ } else {
+ reset(f, 1);
+ seek(f, offsets[which]);
+ blockread(f, ch, sizeof(ch));
- {
- getmem(p,ch.size);
- blockread(f,p,ch.size);
+ {
+ getmem(p, ch.size);
+ blockread(f, p, ch.size);
- display_it(ch.x,ch.y,ch.xl,ch.yl,ch.flavour,p);
- freemem(p,ch.size);
+ display_it(ch.x, ch.y, ch.xl, ch.yl, ch.flavour, p);
+ freemem(p, ch.size);
- close(f);
- }
+ close(f);
+ }
- }
+ }
- setactivepage(1-cp);
+ setactivepage(1 - cp);
- for( fv=0; fv <= 1; fv ++)
- getset[fv].remember(r);
- }
+ for (fv = 0; fv <= 1; fv ++)
+ getset[fv].remember(r);
+ }
}
-void show_one_at(byte which, integer xxx,integer yyy);
+void show_one_at(byte which, integer xxx, integer yyy);
static bytefield r1;
-static void display_it1(integer xl,integer yl, flavourtype flavour, pointer p, integer& xxx, integer& yyy)
-{
- {
- switch (flavour) {
- case ch_bgi : {
- putimage(xxx,yyy,p,0);
- r1.x1=xxx; r1.y1=yyy;
- r1.x2=xxx+xl+1; r1.y2=yyy+yl;
- }
- break;
- case ch_ega : {
- mdrop(xxx / 8,yyy,xl,yl,p); blitfix();
- r1.x1=xxx / 8; r1.y1=yyy; r1.x2=(xxx / 8)+xl; r1.y2=yyy+yl;
- }
- break;
- }
-}
+static void display_it1(integer xl, integer yl, flavourtype flavour, pointer p, integer &xxx, integer &yyy) {
+ {
+ switch (flavour) {
+ case ch_bgi : {
+ putimage(xxx, yyy, p, 0);
+ r1.x1 = xxx;
+ r1.y1 = yyy;
+ r1.x2 = xxx + xl + 1;
+ r1.y2 = yyy + yl;
+ }
+ break;
+ case ch_ega : {
+ mdrop(xxx / 8, yyy, xl, yl, p);
+ blitfix();
+ r1.x1 = xxx / 8;
+ r1.y1 = yyy;
+ r1.x2 = (xxx / 8) + xl;
+ r1.y2 = yyy + yl;
+ }
+ break;
+ }
+ }
}
-void show_one_at(byte which, integer xxx,integer yyy)
-{
- chunkblocktype ch;
- pointer p;
- byte fv;
+void show_one_at(byte which, integer xxx, integer yyy) {
+ chunkblocktype ch;
+ pointer p;
+ byte fv;
- setactivepage(3);
+ setactivepage(3);
- {
- memotype& with = memos[which];
+ {
+ memotype &with = memos[which];
- if (with.x>on_disk)
- {
- display_it1(with.xl,with.yl,with.flavour,memory[which], xxx, yyy);
- } else
- {
- reset(f,1);
- seek(f,offsets[which]);
- blockread(f,ch,sizeof(ch));
+ if (with.x > on_disk) {
+ display_it1(with.xl, with.yl, with.flavour, memory[which], xxx, yyy);
+ } else {
+ reset(f, 1);
+ seek(f, offsets[which]);
+ blockread(f, ch, sizeof(ch));
- {
- getmem(p,ch.size);
- blockread(f,p,ch.size);
+ {
+ getmem(p, ch.size);
+ blockread(f, p, ch.size);
- display_it1(ch.xl,ch.yl,ch.flavour,p, xxx, yyy);
- freemem(p,ch.size);
+ display_it1(ch.xl, ch.yl, ch.flavour, p, xxx, yyy);
+ freemem(p, ch.size);
- close(f);
- }
+ close(f);
+ }
- }
+ }
- setactivepage(1-cp);
+ setactivepage(1 - cp);
- for( fv=0; fv <= 1; fv ++)
- getset[fv].remember(r1);
- }
+ for (fv = 0; fv <= 1; fv ++)
+ getset[fv].remember(r1);
+ }
}
class unit_celer_initialize {
- public: unit_celer_initialize();
+public:
+ unit_celer_initialize();
};
static unit_celer_initialize celer_constructor;
unit_celer_initialize::unit_celer_initialize() {
- num_chunks=0;
+ num_chunks = 0;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/celer.h b/engines/avalanche/celer.h
index c48bb468e7..9db53b57eb 100644
--- a/engines/avalanche/celer.h
+++ b/engines/avalanche/celer.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -35,23 +35,23 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
struct memotype {
- integer x,y;
- integer xl,yl;
- flavourtype flavour;
- word size;
+ integer x, y;
+ integer xl, yl;
+ flavourtype flavour;
+ word size;
};
@@ -60,23 +60,23 @@ struct memotype {
#define EXTERN
#endif
-EXTERN array<1,40,longint> offsets;
+EXTERN array<1, 40, longint> offsets;
EXTERN byte num_chunks;
-EXTERN array<1,40,memotype> memos;
-EXTERN array<1,40,pointer> memory;
+EXTERN array<1, 40, memotype> memos;
+EXTERN array<1, 40, pointer> memory;
#undef EXTERN
#define EXTERN extern
- void pics_link();
+void pics_link();
- void load_chunks(string xx);
+void load_chunks(string xx);
- void forget_chunks();
+void forget_chunks();
- void show_one(byte which);
+void show_one(byte which);
- void show_one_at(byte which, integer xxx,integer yyy);
+void show_one_at(byte which, integer xxx, integer yyy);
} // End of namespace Avalanche.
diff --git a/engines/avalanche/ch_egats.cpp b/engines/avalanche/ch_egats.cpp
index a109127664..98ea2a51e4 100644
--- a/engines/avalanche/ch_egats.cpp
+++ b/engines/avalanche/ch_egats.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,26 +29,26 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
untyped_file f;
longint offset;
chunkblocktype ch;
-integer gd,gm;
+integer gd, gm;
byte bit;
pointer p;
-void mdrop(integer x,integer y,integer xl,integer yl, pointer p) /* assembler;
+void mdrop(integer x, integer y, integer xl, integer yl, pointer p) /* assembler;
asm
push ds; { Strictly speaking, we shouldn't modify DS, so we'll save it.}
push bp; { Nor BP! }
@@ -142,41 +142,44 @@ asm
pop bp;
pop ds; { Get DS back again. }
*/
-{;
+{
+ ;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- assign(f,"chunk21.avd");
- reset(f,1);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ assign(f, "chunk21.avd");
+ reset(f, 1);
- seek(f,49);
- blockread(f,offset,4);
+ seek(f, 49);
+ blockread(f, offset, 4);
- seek(f,offset);
+ seek(f, offset);
- blockread(f,ch,sizeof(ch));
+ blockread(f, ch, sizeof(ch));
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
- getmem(p,ch.size);
- blockread(f,p,ch.size);
-/* putimage(0,0,p^,0);*/
+ getmem(p, ch.size);
+ blockread(f, p, ch.size);
+ /* putimage(0,0,p^,0);*/
-/* with ch do
- for bit:=0 to 3 do
- begin;
- port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1 shl bit; port[$3CF]:=bit;
- for gm:=0 to yl do
- blockread(f,mem[$A000*gm*80],(ch.xl+7) div 8);
- end;*/
+ /* with ch do
+ for bit:=0 to 3 do
+ begin;
+ port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1 shl bit; port[$3CF]:=bit;
+ for gm:=0 to yl do
+ blockread(f,mem[$A000*gm*80],(ch.xl+7) div 8);
+ end;*/
- mdrop(ch.x,ch.y,ch.xl,ch.yl,p);
+ mdrop(ch.x, ch.y, ch.xl, ch.yl, p);
- close(f);
-return EXIT_SUCCESS;
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/charmap.cpp b/engines/avalanche/charmap.cpp
index 985bbf0707..d599ef5881 100644
--- a/engines/avalanche/charmap.cpp
+++ b/engines/avalanche/charmap.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,29 +30,33 @@
namespace Avalanche {
struct infotype {
- matrix<128,255,1,8,byte> chars;
- string data;
+ matrix<128, 255, 1, 8, byte> chars;
+ string data;
};
infotype table;
pointer where;
-byte w,fv,ff,num;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- getintvec(0x1f,where); move(where,table,1024);
- for( w=128; w <= 255; w ++)
- {; output << w << NL;
- for( fv=1; fv <= 8; fv ++)
- {;
- num=table.chars[w][fv];
- for( ff=1; ff <= 8; ff ++)
- {;
- if ((num & 128)==0) output << " "; else output << "ÛÛ";
- num=num << 1;
- }
- output << NL;
- } }
-return EXIT_SUCCESS;
+byte w, fv, ff, num;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ getintvec(0x1f, where);
+ move(where, table, 1024);
+ for (w = 128; w <= 255; w ++) {
+ ;
+ output << w << NL;
+ for (fv = 1; fv <= 8; fv ++) {
+ ;
+ num = table.chars[w][fv];
+ for (ff = 1; ff <= 8; ff ++) {
+ ;
+ if ((num & 128) == 0) output << " ";
+ else output << "ÛÛ";
+ num = num << 1;
+ }
+ output << NL;
+ }
+ }
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunker.cpp b/engines/avalanche/chunker.cpp
index 4b7dd0e9fd..68d269def9 100644
--- a/engines/avalanche/chunker.cpp
+++ b/engines/avalanche/chunker.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -27,87 +27,84 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
untyped_file f;
string fn;
-byte num_chunks,fv;
+byte num_chunks, fv;
longint offset;
chunkblocktype ch;
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- output << NL;
- output << "CHUNKER 12/3/1995 TT" << NL;
- output << NL;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ output << NL;
+ output << "CHUNKER 12/3/1995 TT" << NL;
+ output << NL;
- if (paramcount!=1)
- {
- output << "which chunk file?" << NL;
- exit(0);
- }
+ if (paramcount != 1) {
+ output << "which chunk file?" << NL;
+ exit(0);
+ }
- fn=paramstr(1);
- assign(f,fn);
- reset(f,1);
- output << "----- In chunk file " << fn << ", there are: -----" << NL;
+ fn = paramstr(1);
+ assign(f, fn);
+ reset(f, 1);
+ output << "----- In chunk file " << fn << ", there are: -----" << NL;
- seek(f,44);
- blockread(f,num_chunks,1);
- output << format(num_chunks,4) << " chunks:" << NL;
+ seek(f, 44);
+ blockread(f, num_chunks, 1);
+ output << format(num_chunks, 4) << " chunks:" << NL;
- output << " No Hdr Offset Flvr Mem Nat X Y Width Height Size of image" << NL;
+ output << " No Hdr Offset Flvr Mem Nat X Y Width Height Size of image" << NL;
- for( fv=1; fv <= num_chunks; fv ++)
- {
+ for (fv = 1; fv <= num_chunks; fv ++) {
- output << "Ch" << format(fv,2) << ':';
+ output << "Ch" << format(fv, 2) << ':';
- seek(f,41+fv*4);
+ seek(f, 41 + fv * 4);
- output << format(41+fv*4,4);
- blockread(f,offset,4);
- output << format(offset,10);
+ output << format(41 + fv * 4, 4);
+ blockread(f, offset, 4);
+ output << format(offset, 10);
- seek(f,offset);
- blockread(f,ch,sizeof(ch));
- {
- if (ch.flavour==ch_bgi)
- output << " ch_BGI";
- else
- output << " ch_EGA";
+ seek(f, offset);
+ blockread(f, ch, sizeof(ch));
+ {
+ if (ch.flavour == ch_bgi)
+ output << " ch_BGI";
+ else
+ output << " ch_EGA";
- if (ch.memorise)
- output << " yes";
- else
- output << " no ";
+ if (ch.memorise)
+ output << " yes";
+ else
+ output << " no ";
- if (ch.natural)
- output << " yes";
- else
- output << " no ";
+ if (ch.natural)
+ output << " yes";
+ else
+ output << " no ";
- output << format(ch.x,7) << format(ch.y,7) << format(ch.xl,7) << format(ch.yl,7) << format(ch.size,10);
- }
+ output << format(ch.x, 7) << format(ch.y, 7) << format(ch.xl, 7) << format(ch.yl, 7) << format(ch.size, 10);
+ }
- output << NL;
- }
+ output << NL;
+ }
- output << "---ENDS---" << NL;
+ output << "---ENDS---" << NL;
- close(f);
- return EXIT_SUCCESS;
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf1.cpp b/engines/avalanche/chunkxf1.cpp
index 5118d7d916..ba6ab57bf3 100644
--- a/engines/avalanche/chunkxf1.cpp
+++ b/engines/avalanche/chunkxf1.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -43,61 +43,68 @@ namespace Avalanche {
memorise:boolean; { Hold it in memory? }
end;*/
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
/* arraysize = 12000;*/
/* offsets:array[1..30] of longint;*/
byte num_chunks/*,this_chunk*/;
-integer gd,gm;
+integer gd, gm;
/* f:file;*/
/* aa:array[0..arraysize] of byte;*/
-void load()
-{
- byte a0 /*absolute $A000:800*/;
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
- assign(f,"chunkbit.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- assign(f,"place21.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
+void load() {
+ byte a0 /*absolute $A000:800*/;
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, "chunkbit.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ assign(f, "place21.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
}
-void open_chunk()
-{;
- assign(f,"chunk21.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk21.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
/*
procedure mgrab(x1,y1,x2,y2:integer; size:word);
@@ -193,7 +200,7 @@ end;*/
/*procedure grab(x1,y1,x2,y2,realx,realy:integer; flav:flavourtype;
mem,nat:boolean);*/
- /* yes, I *do* know how to spell "really"! */
+/* yes, I *do* know how to spell "really"! */
/*var
s:word;
p:pointer;
@@ -260,27 +267,29 @@ begin;
(* rectangle(x1,y1,x2,y2);*)
end;*/
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- setwritemode(xorput);
-
- num_chunks=7;
-
- open_chunk();
-
- grab( 98,10,181,41,247,82,ch_ega,false,false); /* Drawbridge... */
- grab(223,10,320,41,233,82,ch_ega,false,false);
- grab(361,10,458,64,233,82,ch_ega,false,false);
-
- grab( 11,10, 39,22,172,17,ch_bgi,true,true);
- grab( 11,38, 39,50,172,17,ch_ega,true,false); /* Flag. */
- grab( 11,24, 39,36,172,17,ch_ega,true,false);
- grab( 11,10, 39,22,172,17,ch_ega,true,false);
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ setwritemode(xorput);
+
+ num_chunks = 7;
+
+ open_chunk();
+
+ grab(98, 10, 181, 41, 247, 82, ch_ega, false, false); /* Drawbridge... */
+ grab(223, 10, 320, 41, 233, 82, ch_ega, false, false);
+ grab(361, 10, 458, 64, 233, 82, ch_ega, false, false);
+
+ grab(11, 10, 39, 22, 172, 17, ch_bgi, true, true);
+ grab(11, 38, 39, 50, 172, 17, ch_ega, true, false); /* Flag. */
+ grab(11, 24, 39, 36, 172, 17, ch_ega, true, false);
+ grab(11, 10, 39, 22, 172, 17, ch_ega, true, false);
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf2.cpp b/engines/avalanche/chunkxf2.cpp
index 3b6caa78e7..781f798d17 100644
--- a/engines/avalanche/chunkxf2.cpp
+++ b/engines/avalanche/chunkxf2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,191 +29,205 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 32000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void load()
-{
- byte a0 /*absolute $A000:800*/;
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place9.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
+array<0, arraysize, byte> aa;
+
+void load() {
+ byte a0 /*absolute $A000:800*/;
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place9.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
}
-void load_temp(string which)
-{
- byte a0 /*absolute $A000:800*/;
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
- assign(f,which); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
- bit=getpixel(0,0);
+void load_temp(string which) {
+ byte a0 /*absolute $A000:800*/;
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, which);
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-void open_chunk()
-{;
- assign(f,"chunk9.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk9.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2, integer realx, integer realy, boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- if (nat)
- ch.flavour=ch_bgi;
- else ch.flavour=ch_ega; /* At the moment, Celer can't handle natural ch_EGAs. */
- ch.x=realx;
- ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- freemem(p,s);
- {;
- if (ch.flavour==ch_bgi) s=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- else s=4*((x2-x1+7) / 8)*(y2-y1+1);
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- if (! nat) blockwrite(f,aa,s);
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ if (nat)
+ ch.flavour = ch_bgi;
+ else ch.flavour = ch_ega; /* At the moment, Celer can't handle natural ch_EGAs. */
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ freemem(p, s);
+ {
+ ;
+ if (ch.flavour == ch_bgi) s = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ else s = 4 * ((x2 - x1 + 7) / 8) * (y2 - y1 + 1);
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ if (! nat) blockwrite(f, aa, s);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- load_temp("d:chunkbit.avd");
- setwritemode(xorput);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ load_temp("d:chunkbit.avd");
+ setwritemode(xorput);
- num_chunks=7;
+ num_chunks = 7;
- open_chunk();
+ open_chunk();
- grab( 78, 78,232,102,212, 10,true,false); /* 154 across */
- grab(235, 78,389,102,212, 10,true,false);
- grab(392, 78,546,102,212, 10,true,false);
- grab(392, 78,546,102,212, 10,true,true);
+ grab(78, 78, 232, 102, 212, 10, true, false); /* 154 across */
+ grab(235, 78, 389, 102, 212, 10, true, false);
+ grab(392, 78, 546, 102, 212, 10, true, false);
+ grab(392, 78, 546, 102, 212, 10, true, true);
- load_temp("d:chunkbi3.avd");
+ load_temp("d:chunkbi3.avd");
- grab(437, 51,475, 78,147,120,false,false); /* 5 = door half-open. */
- grab(397, 51,435, 78,147,120,false,false); /* 6 = door open. */
- grab(397, 51,435, 78,147,120,true,true); /* 7 = door shut. */
+ grab(437, 51, 475, 78, 147, 120, false, false); /* 5 = door half-open. */
+ grab(397, 51, 435, 78, 147, 120, false, false); /* 6 = door open. */
+ grab(397, 51, 435, 78, 147, 120, true, true); /* 7 = door shut. */
- close_chunk();
-return EXIT_SUCCESS;
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf3.cpp b/engines/avalanche/chunkxf3.cpp
index ab27863f3b..b0bb23242f 100644
--- a/engines/avalanche/chunkxf3.cpp
+++ b/engines/avalanche/chunkxf3.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -58,100 +58,135 @@ var
f:file;
aa:array[0..arraysize] of byte;*/
-string strf(longint x)
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
+string strf(longint x) {
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
}
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void loadtemp(string n)
-{
- byte a0 /*absolute $A000:800*/;
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
- assign(f,n); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
- bit=getpixel(0,0);
- finder();
+void loadtemp(string n) {
+ byte a0 /*absolute $A000:800*/;
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, n);
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
+ finder();
}
-void load()
-{
- byte a0 /*absolute $A000:800*/;
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
- assign(f,"place22.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setactivepage(1); setvisualpage(1); finder();
- setactivepage(0); setvisualpage(0);
+void load() {
+ byte a0 /*absolute $A000:800*/;
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, "place22.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setactivepage(1);
+ setvisualpage(1);
+ finder();
+ setactivepage(0);
+ setvisualpage(0);
}
-void open_chunk()
-{;
- assign(f,"chunk22.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk22.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
/*procedure mgrab(x1,y1,x2,y2:integer; size:word);
@@ -243,35 +278,38 @@ begin;
{ rectangle(x1,y1,x2,y2);}
end;*/
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- loadtemp("chunkbit.avd"); load();
- setwritemode(xorput);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ loadtemp("chunkbit.avd");
+ load();
+ setwritemode(xorput);
- num_chunks=9;
+ num_chunks = 9;
- open_chunk();
+ open_chunk();
- grab( 0,103,169,159, 72,86,ch_ega,false,false); /* Stairs... */
- grab(172,103,341,159, 72,86,ch_ega,false,false);
+ grab(0, 103, 169, 159, 72, 86, ch_ega, false, false); /* Stairs... */
+ grab(172, 103, 341, 159, 72, 86, ch_ega, false, false);
- loadtemp("chunkbi3.avd");
+ loadtemp("chunkbi3.avd");
- grab( 0,130, 79,157,341,94,ch_bgi,true ,true );
- grab( 0,130, 79,157,341,94,ch_ega,false,false);
- grab( 0,102, 79,129,341,94,ch_ega,false,false);
- grab( 0, 74, 79,101,341,94,ch_ega,false,false); /* Far door. */
+ grab(0, 130, 79, 157, 341, 94, ch_bgi, true , true);
+ grab(0, 130, 79, 157, 341, 94, ch_ega, false, false);
+ grab(0, 102, 79, 129, 341, 94, ch_ega, false, false);
+ grab(0, 74, 79, 101, 341, 94, ch_ega, false, false); /* Far door. */
- loadtemp("chunkbi2.avd");
+ loadtemp("chunkbi2.avd");
- grab(393, 92,451,137,512,98,ch_bgi,true ,true ); /* Right-hand door. */
- grab(393, 92,451,137,512,98,ch_ega,false,false);
- grab(453, 92,511,137,512,98,ch_ega,false,false);
+ grab(393, 92, 451, 137, 512, 98, ch_bgi, true , true); /* Right-hand door. */
+ grab(393, 92, 451, 137, 512, 98, ch_ega, false, false);
+ grab(453, 92, 511, 137, 512, 98, ch_ega, false, false);
- close_chunk();
-return EXIT_SUCCESS;
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf4.cpp b/engines/avalanche/chunkxf4.cpp
index 0ac2e1f85c..8648964d9e 100644
--- a/engines/avalanche/chunkxf4.cpp
+++ b/engines/avalanche/chunkxf4.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,282 +31,315 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-enum kind {walled,unwalled, last_kind};
+enum kind {walled, unwalled, last_kind};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-const kind w = walled; const kind uw = unwalled;
+const kind w = walled;
+const kind uw = unwalled;
-array<1,50,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 50, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void rdln()
-{
- char r;
- return;
- do { r=readkey(); } while (!(! keypressed()));
+array<0, arraysize, byte> aa;
+
+void rdln() {
+ char r;
+ return;
+ do {
+ r = readkey();
+ } while (!(! keypressed()));
}
-void load(kind k)
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
+void load(kind k) {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
- if (k==unwalled) assign(f,"place29.avd");
- else assign(f,"walled.avd");
+ if (k == unwalled) assign(f, "place29.avd");
+ else assign(f, "walled.avd");
- reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
- close(f);
- bit=getpixel(0,0);
+ close(f);
+ bit = getpixel(0, 0);
}
-void finder()
-{
- char r; integer x,y;
- return;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+void finder() {
+ char r;
+ integer x, y;
+ return;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void loadtemp(string which)
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
+void loadtemp(string which) {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
- assign(f,string("corr")+which+"tmp.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
+ assign(f, string("corr") + which + "tmp.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
- bit=getpixel(0,0);
+ bit = getpixel(0, 0);
- finder();
+ finder();
}
-void open_chunk()
-{
- assign(f,"chunk29.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ assign(f, "chunk29.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-
- if (size>arraysize)
- {
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+
+ if (size > arraysize) {
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat, kind k)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat, kind k)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- load(k);
-
- setvisualpage(1);
- setactivepage(1);
- rdln();
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- rdln();
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ load(k);
+
+ setvisualpage(1);
+ setactivepage(1);
+ rdln();
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ rdln();
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- setwritemode(xorput);
-
- loadtemp("2");
-
- num_chunks=32;
-
- open_chunk();
-
- grab( 0, 11,100,104,260,41,ch_ega,false,false,uw); /*1 Geida's door. */
- grab(103, 12,203, 55,207,61,ch_ega,false,false,uw); /*2 "Ite mingite" sign. */
- grab(123, 59,185,103,254,90,ch_ega,false,false,uw); /*3 Normal N door (rt handle)*/
- grab(227, 10,289, 56,254,88,ch_ega,false,false,uw); /*4 Normal N door (lt handle)*/
- grab(207, 63,294,105, 9,47,ch_ega,false,false, w); /*5 Window in left wall. */
- grab(312, 10,416, 56,233,88,ch_ega,false,false,uw); /*6 North archway */
- grab(331, 78,384,101, 32,64,ch_ega,false,false, w); /*7 2 torches, L wall. */
- grab(607,142,621,157,233,88,ch_ega,false,false,uw); /*8 1 torch, N wall. */
- grab(417, 11,577, 59,311,61,ch_ega,false,false,uw); /*9 "The Wrong Way!" sign. */
-
- loadtemp("3");
-
- grab( 0, 11, 62, 63,557,108,ch_ega,false,false, w); /*10 Near right candle */
- grab( 64, 11,120, 63, 18,108,ch_ega,false,false, w); /*11 Near left candle */
- grab(122, 11,169, 55, 93,100,ch_ega,false,false, w); /*12 Far left candle */
- grab(171, 11,222, 52,500,100,ch_ega,false,false, w); /*13 Far right candle */
- grab( 32, 68, 84,104,285, 70,ch_ega,false,false,uw); /*14 Far window */
- grab(138, 65,190, 92,233, 88,ch_ega,false,false,uw); /*15 Baron du Lustie pic 1 */
- grab(244, 65,296, 92,103, 51,ch_ega,false,false,uw); /*16 Baron du Lustie pic 2 */
- grab(172, 54,280, 63,233, 88,ch_ega,false,false,uw); /*17 "Art Gallery" sign */
- grab(341, 18,402, 47,563, 48,ch_ega,false,false, w); /*18 Right wall torches */
- grab(528, 10,639,160,528, 10,ch_ega,false,false,uw); /*19 Right wall */
- grab(430, 50,526, 88,543, 50,ch_ega,false,false, w); /*20 Window in right wall */
- grab(451, 91,494,152,566, 91,ch_ega,false,false, w); /*21 Door in right wall */
- grab(238, 10,307, 14,484,156,ch_ega,false,false, w); /*22 Near wall door: right */
- grab(239, 16,300, 20,300,156,ch_ega,false,false, w); /*23 Near wall door: middle */
- grab(234, 22,306, 26,100,156,ch_ega,false,false, w); /*24 Near wall door: left */
- grab( 25,113, 87,156,254, 90,ch_ega,false,false, w); /*25 Far door opening stage 1 */
- grab(131,113,193,156,254, 90,ch_ega,false,false, w); /*26 Far door opening stage 2 */
- grab(237,113,299,156,254, 90,ch_ega,false,false, w); /*27 Far door opening stage 3 */
-
- loadtemp("4");
-
- grab( 0, 11,112,160, 0, 11,ch_ega,false,false,uw); /*28 Left wall */
- grab(144, 44,197, 76, 30, 44,ch_ega,false,false, w); /*29 Shield on L wall. */
- grab(149, 90,192,152, 35, 90,ch_ega,false,false, w); /*30 Door in L wall. */
- grab(463, 28,527, 43,252,100,ch_ega,false,false, w); /*31 Archway x 2 */
- grab(463, 79,527, 94,252,100,ch_ega,false,false, w); /*32 Archway x 3 */
-
- close_chunk();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ setwritemode(xorput);
+
+ loadtemp("2");
+
+ num_chunks = 32;
+
+ open_chunk();
+
+ grab(0, 11, 100, 104, 260, 41, ch_ega, false, false, uw); /*1 Geida's door. */
+ grab(103, 12, 203, 55, 207, 61, ch_ega, false, false, uw); /*2 "Ite mingite" sign. */
+ grab(123, 59, 185, 103, 254, 90, ch_ega, false, false, uw); /*3 Normal N door (rt handle)*/
+ grab(227, 10, 289, 56, 254, 88, ch_ega, false, false, uw); /*4 Normal N door (lt handle)*/
+ grab(207, 63, 294, 105, 9, 47, ch_ega, false, false, w); /*5 Window in left wall. */
+ grab(312, 10, 416, 56, 233, 88, ch_ega, false, false, uw); /*6 North archway */
+ grab(331, 78, 384, 101, 32, 64, ch_ega, false, false, w); /*7 2 torches, L wall. */
+ grab(607, 142, 621, 157, 233, 88, ch_ega, false, false, uw); /*8 1 torch, N wall. */
+ grab(417, 11, 577, 59, 311, 61, ch_ega, false, false, uw); /*9 "The Wrong Way!" sign. */
+
+ loadtemp("3");
+
+ grab(0, 11, 62, 63, 557, 108, ch_ega, false, false, w); /*10 Near right candle */
+ grab(64, 11, 120, 63, 18, 108, ch_ega, false, false, w); /*11 Near left candle */
+ grab(122, 11, 169, 55, 93, 100, ch_ega, false, false, w); /*12 Far left candle */
+ grab(171, 11, 222, 52, 500, 100, ch_ega, false, false, w); /*13 Far right candle */
+ grab(32, 68, 84, 104, 285, 70, ch_ega, false, false, uw); /*14 Far window */
+ grab(138, 65, 190, 92, 233, 88, ch_ega, false, false, uw); /*15 Baron du Lustie pic 1 */
+ grab(244, 65, 296, 92, 103, 51, ch_ega, false, false, uw); /*16 Baron du Lustie pic 2 */
+ grab(172, 54, 280, 63, 233, 88, ch_ega, false, false, uw); /*17 "Art Gallery" sign */
+ grab(341, 18, 402, 47, 563, 48, ch_ega, false, false, w); /*18 Right wall torches */
+ grab(528, 10, 639, 160, 528, 10, ch_ega, false, false, uw); /*19 Right wall */
+ grab(430, 50, 526, 88, 543, 50, ch_ega, false, false, w); /*20 Window in right wall */
+ grab(451, 91, 494, 152, 566, 91, ch_ega, false, false, w); /*21 Door in right wall */
+ grab(238, 10, 307, 14, 484, 156, ch_ega, false, false, w); /*22 Near wall door: right */
+ grab(239, 16, 300, 20, 300, 156, ch_ega, false, false, w); /*23 Near wall door: middle */
+ grab(234, 22, 306, 26, 100, 156, ch_ega, false, false, w); /*24 Near wall door: left */
+ grab(25, 113, 87, 156, 254, 90, ch_ega, false, false, w); /*25 Far door opening stage 1 */
+ grab(131, 113, 193, 156, 254, 90, ch_ega, false, false, w); /*26 Far door opening stage 2 */
+ grab(237, 113, 299, 156, 254, 90, ch_ega, false, false, w); /*27 Far door opening stage 3 */
+
+ loadtemp("4");
+
+ grab(0, 11, 112, 160, 0, 11, ch_ega, false, false, uw); /*28 Left wall */
+ grab(144, 44, 197, 76, 30, 44, ch_ega, false, false, w); /*29 Shield on L wall. */
+ grab(149, 90, 192, 152, 35, 90, ch_ega, false, false, w); /*30 Door in L wall. */
+ grab(463, 28, 527, 43, 252, 100, ch_ega, false, false, w); /*31 Archway x 2 */
+ grab(463, 79, 527, 94, 252, 100, ch_ega, false, false, w); /*32 Archway x 3 */
+
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf5.cpp b/engines/avalanche/chunkxf5.cpp
index c4041d67f4..72cc0c39b7 100644
--- a/engines/avalanche/chunkxf5.cpp
+++ b/engines/avalanche/chunkxf5.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,241 +31,287 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"v:place1.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
-
- setvisualpage(1); setactivepage(1);
- finder();
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "v:place1.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"chunkbi9.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- setvisualpage(0); setactivepage(0);
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "chunkbi9.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ setvisualpage(0);
+ setactivepage(0);
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk1.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk1.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- if (! nat) putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2+7) / 8)-(x1 / 8))*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ if (! nat) putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 + 7) / 8) - (x1 / 8)) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=9;
-
- open_chunk();
-
- grab( 48, 42, 94, 66,400,105,ch_ega, true,false); /*1 Avvy asleep. */
- grab(100, 42,146, 66,400,105,ch_ega, true,false); /*2 Avvy asleep again. */
- grab(152, 42,198, 66,400,105,ch_ega,false,false); /*3 Avvy awake in bed. */
- grab(106,113,152,137,400,105,ch_bgi,true ,true ); /*4 No Avvy in bed. */
-
- grab(206, 42,279, 75,150, 91,ch_ega,false,false); /*5 Open trunk. */
- grab(206, 42,287, 75,150, 91,ch_bgi,true, true); /*6 Shut trunk. */
-
- grab( 69, 70,102, 88,431,100,ch_ega,false,false); /*7 Arkata 1. */
- grab(118, 70,151, 88,431,100,ch_ega,false,false); /*8 Arkata 2. */
- grab(167, 70,200, 88,431,100,ch_ega,false,false); /*9 Arkata 3. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 9;
+
+ open_chunk();
+
+ grab(48, 42, 94, 66, 400, 105, ch_ega, true, false); /*1 Avvy asleep. */
+ grab(100, 42, 146, 66, 400, 105, ch_ega, true, false); /*2 Avvy asleep again. */
+ grab(152, 42, 198, 66, 400, 105, ch_ega, false, false); /*3 Avvy awake in bed. */
+ grab(106, 113, 152, 137, 400, 105, ch_bgi, true , true); /*4 No Avvy in bed. */
+
+ grab(206, 42, 279, 75, 150, 91, ch_ega, false, false); /*5 Open trunk. */
+ grab(206, 42, 287, 75, 150, 91, ch_bgi, true, true); /*6 Shut trunk. */
+
+ grab(69, 70, 102, 88, 431, 100, ch_ega, false, false); /*7 Arkata 1. */
+ grab(118, 70, 151, 88, 431, 100, ch_ega, false, false); /*8 Arkata 2. */
+ grab(167, 70, 200, 88, 431, 100, ch_ega, false, false); /*9 Arkata 3. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf6.cpp b/engines/avalanche/chunkxf6.cpp
index b2c6cf4b02..b02a9d2e24 100644
--- a/engines/avalanche/chunkxf6.cpp
+++ b/engines/avalanche/chunkxf6.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,248 +31,297 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
const integer x_ofs = 165;
const integer y_ofs = 58;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"v:place19.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "v:place19.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"d:temp1.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
-/* finder;*/
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "d:temp1.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ /* finder;*/
}
-void open_chunk()
-{;
- assign(f,"chunk19.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk19.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
- x1 -= x_ofs; x2 -= x_ofs;
- y1 -= y_ofs; y2 -= y_ofs;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
-/* readln;*/
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
-/* readln;*/
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ x1 -= x_ofs;
+ x2 -= x_ofs;
+ y1 -= y_ofs;
+ y2 -= y_ofs;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ /* readln;*/
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ /* readln;*/
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=13;
-
- open_chunk();
-
- grab(165, 68,207, 87,127,105,ch_ega,false,false); /*1 The settle with no lute*/
- grab(209, 68,255, 96,159, 84,ch_bgi, true, true); /*2 Dogfood looks right. */
- grab(209, 68,255, 96,159, 84,ch_ega, true,false); /*3 Dogfood- straight ahead. */
- grab(257, 68,303, 96,159, 84,ch_ega, true,false); /*4 Dogfood- left. */
- grab(305, 68,351, 96,159, 84,ch_ega, true,false); /*5 DF drinks: stage 1. */
- grab(353, 68,399, 96,159, 84,ch_ega, true,false); /*6 DF drinks: stage 2. */
- grab(401, 68,447, 96,159, 84,ch_ega, true,false); /*7 DF drinks: stage 3. */
- grab(449, 84,465, 94,392, 87,ch_ega, true,false); /*8 Ibythneth smiles. */
- grab(449, 75,488, 82,341,123,ch_ega, true,false); /*9 No habit under the settle. */
- grab(508, 68,580,106,485,105,ch_ega, true,false); /*10 M gets your drink. */
- grab(508, 68,580,106,485,105,ch_bgi, true, true); /*11 M gets up again. */
- grab(470, 84,486, 91,510,108,ch_ega, true,false); /*12 M looks right. */
- grab(488, 84,504, 91,510,108,ch_ega, true,false); /*13 M winks. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 13;
+
+ open_chunk();
+
+ grab(165, 68, 207, 87, 127, 105, ch_ega, false, false); /*1 The settle with no lute*/
+ grab(209, 68, 255, 96, 159, 84, ch_bgi, true, true); /*2 Dogfood looks right. */
+ grab(209, 68, 255, 96, 159, 84, ch_ega, true, false); /*3 Dogfood- straight ahead. */
+ grab(257, 68, 303, 96, 159, 84, ch_ega, true, false); /*4 Dogfood- left. */
+ grab(305, 68, 351, 96, 159, 84, ch_ega, true, false); /*5 DF drinks: stage 1. */
+ grab(353, 68, 399, 96, 159, 84, ch_ega, true, false); /*6 DF drinks: stage 2. */
+ grab(401, 68, 447, 96, 159, 84, ch_ega, true, false); /*7 DF drinks: stage 3. */
+ grab(449, 84, 465, 94, 392, 87, ch_ega, true, false); /*8 Ibythneth smiles. */
+ grab(449, 75, 488, 82, 341, 123, ch_ega, true, false); /*9 No habit under the settle. */
+ grab(508, 68, 580, 106, 485, 105, ch_ega, true, false); /*10 M gets your drink. */
+ grab(508, 68, 580, 106, 485, 105, ch_bgi, true, true); /*11 M gets up again. */
+ grab(470, 84, 486, 91, 510, 108, ch_ega, true, false); /*12 M looks right. */
+ grab(488, 84, 504, 91, 510, 108, ch_ega, true, false); /*13 M winks. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
diff --git a/engines/avalanche/chunkxf7.cpp b/engines/avalanche/chunkxf7.cpp
index c1f189b2ce..6137bc3056 100644
--- a/engines/avalanche/chunkxf7.cpp
+++ b/engines/avalanche/chunkxf7.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,233 +31,280 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place25.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place25.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"chunkbi3.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "chunkbi3.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk25.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk25.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=3;
-
- open_chunk();
-
- grab( 16, 24,101, 45,448,116,ch_ega, true,false); /*2 The fire again. */
- grab(118, 20,203, 45,448,112,ch_bgi, true, true); /*1 The natural fire. */
- grab(118, 20,203, 45,448,112,ch_ega, true,false); /*3 Third stage of the fire. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 3;
+
+ open_chunk();
+
+ grab(16, 24, 101, 45, 448, 116, ch_ega, true, false); /*2 The fire again. */
+ grab(118, 20, 203, 45, 448, 112, ch_bgi, true, true); /*1 The natural fire. */
+ grab(118, 20, 203, 45, 448, 112, ch_ega, true, false); /*3 Third stage of the fire. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf8.cpp b/engines/avalanche/chunkxf8.cpp
index 97b9502dc3..a3a8b14b3e 100644
--- a/engines/avalanche/chunkxf8.cpp
+++ b/engines/avalanche/chunkxf8.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,240 +31,287 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place23.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place23.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp(string x)
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,x); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp(string x) {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, x);
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk23.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk23.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp("chunkbi3.avd");
- setwritemode(xorput);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp("chunkbi3.avd");
+ setwritemode(xorput);
- num_chunks=6;
+ num_chunks = 6;
- open_chunk();
+ open_chunk();
- grab(226, 21,242, 29,348, 96,ch_bgi, true,true ); /*1 Looking forwards. */
- grab(226, 21,242, 29,348, 96,ch_ega, true,false); /*2 Looking left. */
- grab(253, 21,269, 29,348, 96,ch_ega, true,false); /*3 Looking right. */
- grab(240, 11,256, 19,348, 96,ch_ega, true,false); /*4 Blinking. */
+ grab(226, 21, 242, 29, 348, 96, ch_bgi, true, true); /*1 Looking forwards. */
+ grab(226, 21, 242, 29, 348, 96, ch_ega, true, false); /*2 Looking left. */
+ grab(253, 21, 269, 29, 348, 96, ch_ega, true, false); /*3 Looking right. */
+ grab(240, 11, 256, 19, 348, 96, ch_ega, true, false); /*4 Blinking. */
- loadtemp("chunkbi4.avd");
+ loadtemp("chunkbi4.avd");
- grab( 48, 83,110,126,324, 96,ch_ega,false,false); /*5 Eyes shut... */
- grab(112, 83,173,126,325, 96,ch_ega,false,false); /*6 Asleep. */
+ grab(48, 83, 110, 126, 324, 96, ch_ega, false, false); /*5 Eyes shut... */
+ grab(112, 83, 173, 126, 325, 96, ch_ega, false, false); /*6 Asleep. */
- close_chunk();
-return EXIT_SUCCESS;
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxf9.cpp b/engines/avalanche/chunkxf9.cpp
index ddf079c7af..dbd342ada2 100644
--- a/engines/avalanche/chunkxf9.cpp
+++ b/engines/avalanche/chunkxf9.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,234 +31,281 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place42.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place42.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"a:chunkbi3.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "a:chunkbi3.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk42.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk42.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=4;
-
- open_chunk();
-
- grab(276, 36,329, 73, 94, 97,ch_bgi, true,true ); /*1 Not tied to the tree.*/
- grab(276, 36,329, 73, 94, 97,ch_ega,false,false); /*2 Tied to the tree. */
- grab(182, 80,226, 88,311,132,ch_ega,false,false); /*3 Mushrooms have gone! */
- grab(253, 75,267, 82,114, 98,ch_ega,false,false); /*4 Avalot blinks. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 4;
+
+ open_chunk();
+
+ grab(276, 36, 329, 73, 94, 97, ch_bgi, true, true); /*1 Not tied to the tree.*/
+ grab(276, 36, 329, 73, 94, 97, ch_ega, false, false); /*2 Tied to the tree. */
+ grab(182, 80, 226, 88, 311, 132, ch_ega, false, false); /*3 Mushrooms have gone! */
+ grab(253, 75, 267, 82, 114, 98, ch_ega, false, false); /*4 Avalot blinks. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfa.cpp b/engines/avalanche/chunkxfa.cpp
index b2faafe4d5..622e6be2db 100644
--- a/engines/avalanche/chunkxfa.cpp
+++ b/engines/avalanche/chunkxfa.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,237 +31,284 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place7.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
-/* finder;*/
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place7.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ /* finder;*/
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"chunkbi3.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
-/* finder;*/
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "chunkbi3.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ /* finder;*/
}
-void open_chunk()
-{;
- assign(f,"chunk7.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk7.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=7;
-
- open_chunk();
-
- grab(220, 32,269, 62,370,115,ch_ega,false,false); /*1 Jacques awake... */
- grab(400, 12,450, 48,369,112,ch_ega,false,false); /*2 Jacques gone! */
- grab(116, 47,176, 98,393, 87,ch_ega,false,false); /*3 Jacques going... */
- grab(333, 31,393, 82,393, 87,ch_ega,false,false); /*4 The open door. */
- grab(396, 80,452,135, 39, 91,ch_ega,false,false); /*5 The left door opening. */
- grab(455, 80,510,135, 39, 91,ch_ega,false,false); /*6 The left door open. */
- grab(455, 80,510,135, 39, 91,ch_bgi,true ,true ); /*7 The left door shut. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 7;
+
+ open_chunk();
+
+ grab(220, 32, 269, 62, 370, 115, ch_ega, false, false); /*1 Jacques awake... */
+ grab(400, 12, 450, 48, 369, 112, ch_ega, false, false); /*2 Jacques gone! */
+ grab(116, 47, 176, 98, 393, 87, ch_ega, false, false); /*3 Jacques going... */
+ grab(333, 31, 393, 82, 393, 87, ch_ega, false, false); /*4 The open door. */
+ grab(396, 80, 452, 135, 39, 91, ch_ega, false, false); /*5 The left door opening. */
+ grab(455, 80, 510, 135, 39, 91, ch_ega, false, false); /*6 The left door open. */
+ grab(455, 80, 510, 135, 39, 91, ch_bgi, true , true); /*7 The left door shut. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfb.cpp b/engines/avalanche/chunkxfb.cpp
index 5249e6c6f5..820bd7816c 100644
--- a/engines/avalanche/chunkxfb.cpp
+++ b/engines/avalanche/chunkxfb.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,235 +31,282 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place71.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place71.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"d:chunkbi2.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "d:chunkbi2.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk71.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk71.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=5;
-
- open_chunk();
-
- grab( 54, 57,124,116,188, 94,ch_ega,false,false); /*1 Door half-shut. */
- grab(144, 57,203,116,188, 94,ch_ega,false,false); /*2 Door shut. */
- grab(513, 92,572,151,188, 94,ch_ega,false,false); /*3 Door with arrow. */
- grab(610, 94,627,106,367,122,ch_ega,false,false); /*4 Holder with no pen. */
- grab( 54, 57,124,116,188, 94,ch_bgi,true ,true ); /*5 Door wide open. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 5;
+
+ open_chunk();
+
+ grab(54, 57, 124, 116, 188, 94, ch_ega, false, false); /*1 Door half-shut. */
+ grab(144, 57, 203, 116, 188, 94, ch_ega, false, false); /*2 Door shut. */
+ grab(513, 92, 572, 151, 188, 94, ch_ega, false, false); /*3 Door with arrow. */
+ grab(610, 94, 627, 106, 367, 122, ch_ega, false, false); /*4 Holder with no pen. */
+ grab(54, 57, 124, 116, 188, 94, ch_bgi, true , true); /*5 Door wide open. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfc.cpp b/engines/avalanche/chunkxfc.cpp
index 4c2e58b6ed..da5ffc531f 100644
--- a/engines/avalanche/chunkxfc.cpp
+++ b/engines/avalanche/chunkxfc.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,233 +31,280 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place2.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place2.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"d:chunkbi2.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "d:chunkbi2.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk2.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk2.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=3;
-
- open_chunk();
-
- grab( 59, 15,166, 55,226, 86,ch_ega,false,false); /*1 Door half-shut. */
- grab(171, 15,278, 55,226, 86,ch_ega,false,false); /*2 Door half-open. */
- grab(283, 15,390, 55,226, 86,ch_ega,false,false); /*3 Door open. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 3;
+
+ open_chunk();
+
+ grab(59, 15, 166, 55, 226, 86, ch_ega, false, false); /*1 Door half-shut. */
+ grab(171, 15, 278, 55, 226, 86, ch_ega, false, false); /*2 Door half-open. */
+ grab(283, 15, 390, 55, 226, 86, ch_ega, false, false); /*3 Door open. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfd.cpp b/engines/avalanche/chunkxfd.cpp
index efc94acfee..11aa04c3d8 100644
--- a/engines/avalanche/chunkxfd.cpp
+++ b/engines/avalanche/chunkxfd.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,233 +31,280 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place15.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place15.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"d:chunkbi3.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "d:chunkbi3.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk15.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk15.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=3;
-
- open_chunk();
-
- grab(535, 11,633, 74, 46, 97,ch_ega,false,false); /*1 Door half-open. */
- grab(539, 76,637,139, 46, 97,ch_ega,false,false); /*2 Door open. */
- grab(539, 76,637,139, 46, 97,ch_bgi,true ,true ); /*3 Door shut. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 3;
+
+ open_chunk();
+
+ grab(535, 11, 633, 74, 46, 97, ch_ega, false, false); /*1 Door half-open. */
+ grab(539, 76, 637, 139, 46, 97, ch_ega, false, false); /*2 Door open. */
+ grab(539, 76, 637, 139, 46, 97, ch_bgi, true , true); /*3 Door shut. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfe.cpp b/engines/avalanche/chunkxfe.cpp
index 16e4aa1d04..0b2757a7b4 100644
--- a/engines/avalanche/chunkxfe.cpp
+++ b/engines/avalanche/chunkxfe.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,233 +31,280 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place5.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place5.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"chunkbi2.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "chunkbi2.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk5.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk5.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=3;
-
- open_chunk();
-
- grab(252, 57,375,132,501, 85,ch_ega,false,false); /*1 Door half-open. */
- grab(418, 15,553, 90,504, 85,ch_ega,false,false); /*2 Door open. */
- grab(252, 57,375,132,504, 85,ch_bgi,true ,true ); /*3 Door shut. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 3;
+
+ open_chunk();
+
+ grab(252, 57, 375, 132, 501, 85, ch_ega, false, false); /*1 Door half-open. */
+ grab(418, 15, 553, 90, 504, 85, ch_ega, false, false); /*2 Door open. */
+ grab(252, 57, 375, 132, 504, 85, ch_bgi, true , true); /*3 Door shut. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxff.cpp b/engines/avalanche/chunkxff.cpp
index fa9224be0f..0ff578ba5e 100644
--- a/engines/avalanche/chunkxff.cpp
+++ b/engines/avalanche/chunkxff.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,233 +31,280 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place13.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place13.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"chunkbi3.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "chunkbi3.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk13.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk13.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=3;
-
- open_chunk();
-
- grab(323, 84,393,123,266, 72,ch_ega,false,false); /*1 Door half-open. */
- grab(251, 84,321,123,266, 72,ch_ega,false,false); /*2 Door open. */
- grab(251, 84,321,123,266, 72,ch_bgi,true ,true ); /*3 Door shut. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 3;
+
+ open_chunk();
+
+ grab(323, 84, 393, 123, 266, 72, ch_ega, false, false); /*1 Door half-open. */
+ grab(251, 84, 321, 123, 266, 72, ch_ega, false, false); /*2 Door open. */
+ grab(251, 84, 321, 123, 266, 72, ch_bgi, true , true); /*3 Door shut. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfg.cpp b/engines/avalanche/chunkxfg.cpp
index cc43d7d933..ead50a6e9c 100644
--- a/engines/avalanche/chunkxfg.cpp
+++ b/engines/avalanche/chunkxfg.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,233 +31,280 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place16.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place16.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"chunkbi3.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "chunkbi3.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk16.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk16.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=3;
-
- open_chunk();
-
- grab(336, 12,365, 28,187, 89,ch_ega,false,false); /*1 Ayles asleep frame 2. */
- grab(368, 12,397, 28,187, 89,ch_ega,false,false); /*2 Ayles awake. */
- grab(336, 12,365, 28,187, 89,ch_bgi,true ,true ); /*3 Ayles asleep frame 1. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 3;
+
+ open_chunk();
+
+ grab(336, 12, 365, 28, 187, 89, ch_ega, false, false); /*1 Ayles asleep frame 2. */
+ grab(368, 12, 397, 28, 187, 89, ch_ega, false, false); /*2 Ayles awake. */
+ grab(336, 12, 365, 28, 187, 89, ch_bgi, true , true); /*3 Ayles asleep frame 1. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfh.cpp b/engines/avalanche/chunkxfh.cpp
index 9ebdbfa614..6d8c0e8278 100644
--- a/engines/avalanche/chunkxfh.cpp
+++ b/engines/avalanche/chunkxfh.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,234 +31,281 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place46.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place46.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"d:chunkbi4.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "d:chunkbi4.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk46.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk46.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=4;
-
- open_chunk();
-
- grab(136, 11,216, 49,288,104,ch_ega,false,false); /*1 Door opening, frame 1.*/
- grab( 45, 11,124, 49,289,104,ch_ega,false,false); /*2 Door opening, frame 2.*/
- grab(227, 11,306, 49,289,104,ch_ega,false,false); /*3 Door opening, frame 3.*/
- grab(227, 11,306, 49,289,104,ch_bgi,true ,true ); /*4 Natural frame. */
- close_chunk();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 4;
+
+ open_chunk();
+
+ grab(136, 11, 216, 49, 288, 104, ch_ega, false, false); /*1 Door opening, frame 1.*/
+ grab(45, 11, 124, 49, 289, 104, ch_ega, false, false); /*2 Door opening, frame 2.*/
+ grab(227, 11, 306, 49, 289, 104, ch_ega, false, false); /*3 Door opening, frame 3.*/
+ grab(227, 11, 306, 49, 289, 104, ch_bgi, true , true); /*4 Natural frame. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfi.cpp b/engines/avalanche/chunkxfi.cpp
index 3dd81b2491..b28add0bb7 100644
--- a/engines/avalanche/chunkxfi.cpp
+++ b/engines/avalanche/chunkxfi.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,243 +31,290 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"place47.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "place47.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-;
-
- assign(f,"chunkbi9.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
-
- bit=getpixel(0,0);
-
- finder();
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+ ;
+
+ assign(f, "chunkbi9.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+
+ bit = getpixel(0, 0);
+
+ finder();
}
-void open_chunk()
-{;
- assign(f,"chunk47.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ ;
+ assign(f, "chunk47.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{;
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ ;
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-;
- if (size>arraysize)
- {;
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {;
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+ ;
+ if (size > arraysize) {
+ ;
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-;
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {;
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
-
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {;
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {;
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl / 8)+2;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {;
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {;
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+ ;
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ;
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ ;
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ;
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl / 8) + 2;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ;
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ ;
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
- num_chunks=10;
+ num_chunks = 10;
- open_chunk();
+ open_chunk();
- grab(323, 35,340, 43,337, 93,ch_ega,true ,false); /*1 Port blinks */
- grab(323, 35,340, 43,337, 93,ch_bgi,true ,true ); /*2 Port normally */
- grab(421, 22,511, 71,474,101,ch_ega,false,false); /*3 Avalot & Spurge */
- grab(421, 22,511, 71,474,101,ch_bgi,true ,true ); /*4 Just Spurge. */
+ grab(323, 35, 340, 43, 337, 93, ch_ega, true , false); /*1 Port blinks */
+ grab(323, 35, 340, 43, 337, 93, ch_bgi, true , true); /*2 Port normally */
+ grab(421, 22, 511, 71, 474, 101, ch_ega, false, false); /*3 Avalot & Spurge */
+ grab(421, 22, 511, 71, 474, 101, ch_bgi, true , true); /*4 Just Spurge. */
- grab(524, 40,540, 47,337, 93,ch_ega,true ,false); /*5 Port L blinks */
- grab(524, 22,540, 29,337, 93,ch_ega,true ,false); /*6 Port L */
- grab(563, 40,579, 47,337, 93,ch_ega,true ,false); /*7 Port R blinks */
- grab(563, 22,579, 29,337, 93,ch_ega,true ,false); /*8 Port R */
+ grab(524, 40, 540, 47, 337, 93, ch_ega, true , false); /*5 Port L blinks */
+ grab(524, 22, 540, 29, 337, 93, ch_ega, true , false); /*6 Port L */
+ grab(563, 40, 579, 47, 337, 93, ch_ega, true , false); /*7 Port R blinks */
+ grab(563, 22, 579, 29, 337, 93, ch_ega, true , false); /*8 Port R */
- grab(307, 38,310, 38,493,104,ch_ega,true ,false); /*9 Spurge blinks */
- grab(307, 38,310, 38,493,104,ch_bgi,true ,true ); /*10 Spurge doesn't blink */
+ grab(307, 38, 310, 38, 493, 104, ch_ega, true , false); /*9 Spurge blinks */
+ grab(307, 38, 310, 38, 493, 104, ch_bgi, true , true); /*10 Spurge doesn't blink */
- close_chunk();
-return EXIT_SUCCESS;
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfj.cpp b/engines/avalanche/chunkxfj.cpp
index 4c37792546..83c379d926 100644
--- a/engines/avalanche/chunkxfj.cpp
+++ b/engines/avalanche/chunkxfj.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,234 +31,268 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-
-
- assign(f,"place20.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+
+
+ assign(f, "place20.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
- assign(f,"chunkbit.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
+ assign(f, "chunkbit.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
- bit=getpixel(0,0);
+ bit = getpixel(0, 0);
- finder();
+ finder();
}
-void open_chunk()
-{
- assign(f,"chunk20.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ assign(f, "chunk20.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-
- if (size>arraysize)
- {
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+
+ if (size > arraysize) {
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=4;
-
- open_chunk();
-
- grab( 57, 11, 72, 18,399, 13,ch_ega,true ,false); /* 1 - all numbers are */
- grab( 57, 21, 72, 28,399, 13,ch_ega,true ,false); /* 2 flags. */
- grab( 56, 31, 71, 38,399, 13,ch_ega,true ,false); /* 3 */
- grab( 56, 31, 71, 38,399, 13,ch_bgi,true ,true ); /* 4, the natural one. */
- close_chunk();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 4;
+
+ open_chunk();
+
+ grab(57, 11, 72, 18, 399, 13, ch_ega, true , false); /* 1 - all numbers are */
+ grab(57, 21, 72, 28, 399, 13, ch_ega, true , false); /* 2 flags. */
+ grab(56, 31, 71, 38, 399, 13, ch_ega, true , false); /* 3 */
+ grab(56, 31, 71, 38, 399, 13, ch_bgi, true , true); /* 4, the natural one. */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfk.cpp b/engines/avalanche/chunkxfk.cpp
index 505c4fd8c2..5779d27b41 100644
--- a/engines/avalanche/chunkxfk.cpp
+++ b/engines/avalanche/chunkxfk.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,234 +31,268 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
- boolean natural;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ boolean natural;
- boolean memorise; /* Hold it in memory? */
+ boolean memorise; /* Hold it in memory? */
};
-const array<1,44,char> chunkheader =
-string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer arraysize = 12000;
-array<1,30,longint> offsets;
-byte num_chunks,this_chunk;
-integer gd,gm;
+array<1, 30, longint> offsets;
+byte num_chunks, this_chunk;
+integer gd, gm;
untyped_file f;
-array<0,arraysize,byte> aa;
-
-void finder()
-{
- char r; integer x,y;
-
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+array<0, arraysize, byte> aa;
+
+void finder() {
+ char r;
+ integer x, y;
+
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-
-
- assign(f,"place50.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+
+
+ assign(f, "place50.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
- assign(f,"chunkbi4.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
+ assign(f, "chunkbi4.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
- bit=getpixel(0,0);
+ bit = getpixel(0, 0);
- finder();
+ finder();
}
-void open_chunk()
-{
- assign(f,"chunk50.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ assign(f, "chunk50.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-void mgrab(integer x1,integer y1,integer x2,integer y2, word size)
-{
- integer yy; word aapos; byte length,bit;
-
- if (size>arraysize)
- {
- restorecrtmode();
- output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
- output << " than " << size << '.' << NL;
- exit(0);
- }
-
- aapos=0;
-
- length=x2-x1;
-
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( yy=y1; yy <= y2; yy ++)
- {
- move(mem[0xa400*yy*80+x1],aa[aapos],length);
- aapos += length;
- }
- }
- bit=getpixel(0,0);
+void mgrab(integer x1, integer y1, integer x2, integer y2, word size) {
+ integer yy;
+ word aapos;
+ byte length, bit;
+
+ if (size > arraysize) {
+ restorecrtmode();
+ output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL;
+ output << " than " << size << '.' << NL;
+ exit(0);
+ }
+
+ aapos = 0;
+
+ length = x2 - x1;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (yy = y1; yy <= y2; yy ++) {
+ move(mem[0xa400 * yy * 80 + x1], aa[aapos], length);
+ aapos += length;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav,
- boolean mem,boolean nat)
- /* yes, I *do* know how to spell "really"! */
+void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav,
+ boolean mem, boolean nat)
+/* yes, I *do* know how to spell "really"! */
{
- word s;
- pointer p;
- chunkblocktype ch;
-
-/* rectangle(x1,y1,x2,y2); exit;*/
- this_chunk += 1;
- offsets[this_chunk]=filepos(f);
-
-
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
-
- {
- ch.flavour=flav;
- ch.x=realx; ch.y=realy;
-
- ch.xl=x2-x1;
- ch.yl=y2-y1;
- ch.size=s;
- ch.memorise=mem;
- ch.natural=nat;
- }
-
- setvisualpage(1);
- setactivepage(1);
- input >> NL;
- putimage(ch.x,ch.y,p,0);
-
- if (flav==ch_ega)
- {
- freemem(p,s);
- s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1);
- {
- ch.size=s;
- ch.x=ch.x / 8;
- ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8;
- mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s);
- }
- } else
- /* For BGI pictures. */
- {
- ch.x=ch.x / 8;
- ch.xl=(ch.xl+7) / 8;
- ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl);
- }
-
- input >> NL;
- setvisualpage(0);
- setactivepage(0);
-
- blockwrite(f,ch,sizeof(ch));
-
- switch (flav) {
- case ch_ega : if (! nat) blockwrite(f,aa,s); break;
- case ch_bgi : {
- if (! nat) blockwrite(f,p,s);
- freemem(p,s);
- }
- break;
- }
-/* rectangle(x1,y1,x2,y2);*/
+ word s;
+ pointer p;
+ chunkblocktype ch;
+
+ /* rectangle(x1,y1,x2,y2); exit;*/
+ this_chunk += 1;
+ offsets[this_chunk] = filepos(f);
+
+
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+
+ {
+ ch.flavour = flav;
+ ch.x = realx;
+ ch.y = realy;
+
+ ch.xl = x2 - x1;
+ ch.yl = y2 - y1;
+ ch.size = s;
+ ch.memorise = mem;
+ ch.natural = nat;
+ }
+
+ setvisualpage(1);
+ setactivepage(1);
+ input >> NL;
+ putimage(ch.x, ch.y, p, 0);
+
+ if (flav == ch_ega) {
+ freemem(p, s);
+ s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1);
+ {
+ ch.size = s;
+ ch.x = ch.x / 8;
+ ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8;
+ mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s);
+ }
+ } else
+ /* For BGI pictures. */
+ {
+ ch.x = ch.x / 8;
+ ch.xl = (ch.xl + 7) / 8;
+ ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl);
+ }
+
+ input >> NL;
+ setvisualpage(0);
+ setactivepage(0);
+
+ blockwrite(f, ch, sizeof(ch));
+
+ switch (flav) {
+ case ch_ega :
+ if (! nat) blockwrite(f, aa, s);
+ break;
+ case ch_bgi : {
+ if (! nat) blockwrite(f, p, s);
+ freemem(p, s);
+ }
+ break;
+ }
+ /* rectangle(x1,y1,x2,y2);*/
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
-
- num_chunks=4;
-
- open_chunk();
-
- grab( 46, 53,107, 81,246, 88,ch_ega,false,false); /*1 - all numbers are */
- grab(115, 53,175, 81,248, 88,ch_ega,false,false); /*2 door stages. */
- grab(180, 53,241, 81,246, 88,ch_ega,false,false); /*3 */
- grab(180, 53,246, 84,246, 88,ch_bgi,true ,true ); /*4 */
- close_chunk();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
+
+ num_chunks = 4;
+
+ open_chunk();
+
+ grab(46, 53, 107, 81, 246, 88, ch_ega, false, false); /*1 - all numbers are */
+ grab(115, 53, 175, 81, 248, 88, ch_ega, false, false); /*2 door stages. */
+ grab(180, 53, 241, 81, 246, 88, ch_ega, false, false); /*3 */
+ grab(180, 53, 246, 84, 246, 88, ch_bgi, true , true); /*4 */
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/chunkxfl.cpp b/engines/avalanche/chunkxfl.cpp
index 4091890bef..935245002a 100644
--- a/engines/avalanche/chunkxfl.cpp
+++ b/engines/avalanche/chunkxfl.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,123 +32,154 @@
namespace Avalanche {
-void finder()
-{
- char r; integer x,y;
-
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+void finder() {
+ char r;
+ integer x, y;
+
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-void load()
-{
- byte a1 /*absolute $A400:800*/;
- byte bit;
- untyped_file f;
-
-
- assign(f,"place51.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a1,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
- setvisualpage(1); setactivepage(1);
- finder();
- setvisualpage(0); setactivepage(0);
+void load() {
+ byte a1 /*absolute $A400:800*/;
+ byte bit;
+ untyped_file f;
+
+
+ assign(f, "place51.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a1, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+ setvisualpage(1);
+ setactivepage(1);
+ finder();
+ setvisualpage(0);
+ setactivepage(0);
}
-void loadtemp()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
+void loadtemp() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
- assign(f,"chunkbi4.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
+ assign(f, "chunkbi4.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
- bit=getpixel(0,0);
+ bit = getpixel(0, 0);
- finder();
+ finder();
}
-void open_chunk()
-{
- assign(f,"chunk51.avd");
- rewrite(f,1);
- blockwrite(f,chunkheader,sizeof(chunkheader));
- blockwrite(f,num_chunks,1);
- blockwrite(f,offsets,num_chunks*4);
+void open_chunk() {
+ assign(f, "chunk51.avd");
+ rewrite(f, 1);
+ blockwrite(f, chunkheader, sizeof(chunkheader));
+ blockwrite(f, num_chunks, 1);
+ blockwrite(f, offsets, num_chunks * 4);
- this_chunk=0;
+ this_chunk = 0;
}
-void close_chunk()
-{
- seek(f,45);
- blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */
- close(f);
+void close_chunk() {
+ seek(f, 45);
+ blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */
+ close(f);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
- loadtemp();
- setwritemode(xorput);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
+ loadtemp();
+ setwritemode(xorput);
- num_chunks=9;
+ num_chunks = 9;
- open_chunk();
+ open_chunk();
- grab(346,119,404,154,539,116,ch_ega,true ,false); /*1 fire */
- grab(435,119,490,154,541,116,ch_ega,true ,false); /*2 fire */
- grab(435,119,490,154,541,116,ch_bgi,true ,true ); /*3 natural fire */
+ grab(346, 119, 404, 154, 539, 116, ch_ega, true , false); /*1 fire */
+ grab(435, 119, 490, 154, 541, 116, ch_ega, true , false); /*2 fire */
+ grab(435, 119, 490, 154, 541, 116, ch_bgi, true , true); /*3 natural fire */
- grab(300, 58,315, 68,258, 95,ch_ega,true ,false); /*6 Duck's head 2 */
- grab(246, 52,259, 62,258, 95,ch_ega,true ,false); /*5 Duck blinks 1 */
+ grab(300, 58, 315, 68, 258, 95, ch_ega, true , false); /*6 Duck's head 2 */
+ grab(246, 52, 259, 62, 258, 95, ch_ega, true , false); /*5 Duck blinks 1 */
- grab(300, 58,315, 68,258, 95,ch_bgi,true ,true ); /*4 Duck's head 1 */
- grab(262, 52,278, 62,257, 95,ch_ega,true ,false); /*7 Duck blinks 2 */
+ grab(300, 58, 315, 68, 258, 95, ch_bgi, true , true); /*4 Duck's head 1 */
+ grab(262, 52, 278, 62, 257, 95, ch_ega, true , false); /*7 Duck blinks 2 */
- grab(333, 58,347, 68,258, 95,ch_ega,true ,false); /*8 Duck's head 3 */
- grab(250, 63,265, 73,258, 95,ch_ega,true ,false); /*9 Duck blinks 3 */
+ grab(333, 58, 347, 68, 258, 95, ch_ega, true , false); /*8 Duck's head 3 */
+ grab(250, 63, 265, 73, 258, 95, ch_ega, true , false); /*9 Duck blinks 3 */
- close_chunk();
- return EXIT_SUCCESS;
+ close_chunk();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/clock.cpp b/engines/avalanche/clock.cpp
index fb05ad5497..3cec288819 100644
--- a/engines/avalanche/clock.cpp
+++ b/engines/avalanche/clock.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,58 +31,71 @@
namespace Avalanche {
-const integer xm = 511; const integer ym = 184;
-integer gd,gm;
-word oh,om,/*os,*/h,m,s,s1; char r;
+const integer xm = 511;
+const integer ym = 184;
+integer gd, gm;
+word oh, om,/*os,*/h, m, s, s1;
+char r;
-void hand(word ang,word length, byte colour)
-{
- arccoordstype a;
-;
- if (ang>900) return;
- setcolor(colour);
- arc(xm,ym,449-ang,450-ang,length);
- getarccoords(a);
- line(xm,ym,a.xend,a.yend); /* "With a do-line???!", Liz said */
+void hand(word ang, word length, byte colour) {
+ arccoordstype a;
+ ;
+ if (ang > 900) return;
+ setcolor(colour);
+ arc(xm, ym, 449 - ang, 450 - ang, length);
+ getarccoords(a);
+ line(xm, ym, a.xend, a.yend); /* "With a do-line???!", Liz said */
}
-void chime()
-{
- integer gd,gm,fv;
-;
- if (oh>177) return; /* too high- must be first time around */
- fv=h / 30; if (fv==0) fv=12;
- for( gd=1; gd <= fv; gd ++)
- {;
- for( gm=1; gm <= 3; gm ++)
- {;
- sound(140-gm*30); delay(50-gm*3);
- }
- nosound; if ((cardinal)gd!=oh) delay(100);
- }
+void chime() {
+ integer gd, gm, fv;
+ ;
+ if (oh > 177) return; /* too high- must be first time around */
+ fv = h / 30;
+ if (fv == 0) fv = 12;
+ for (gd = 1; gd <= fv; gd ++) {
+ ;
+ for (gm = 1; gm <= 3; gm ++) {
+ ;
+ sound(140 - gm * 30);
+ delay(50 - gm * 3);
+ }
+ nosound;
+ if ((cardinal)gd != oh) delay(100);
+ }
}
-void plothands()
-{;
- hand(oh,17,brown);
- hand(h,17,yellow);
- hand(om*6,20,brown);
- hand(m*6,20,yellow);
+void plothands() {
+ ;
+ hand(oh, 17, brown);
+ hand(h, 17, yellow);
+ hand(om * 6, 20, brown);
+ hand(m * 6, 20, yellow);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- setfillstyle(1,6); bar(0,0,640,200); oh=17717; om=17717;
- do {
- gettime(h,m,s,s1);
- h=(h % 12)*30+m / 2;
- if (oh!=h) {; plothands(); chime(); }
- if (om!=m) plothands();
- oh=h; om=m;
- } while (!false);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ setfillstyle(1, 6);
+ bar(0, 0, 640, 200);
+ oh = 17717;
+ om = 17717;
+ do {
+ gettime(h, m, s, s1);
+ h = (h % 12) * 30 + m / 2;
+ if (oh != h) {
+ ;
+ plothands();
+ chime();
+ }
+ if (om != m) plothands();
+ oh = h;
+ om = m;
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/closing.cpp b/engines/avalanche/closing.cpp
index bc3134b2e0..ddd31fc34b 100644
--- a/engines/avalanche/closing.cpp
+++ b/engines/avalanche/closing.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -45,103 +45,123 @@
namespace Avalanche {
-typedef array<1,3840,char> scrtype;
+typedef array<1, 3840, char> scrtype;
scrtype q /*absolute $B8FA:0*/; /* Nobody's using the graphics memory now. */
file<scrtype> f;
pointer exitsave;
-void get_screen(byte which)
-{;
- closegraph();
- textattr=0; clrscr;
- assign(f,string("text")+strf(which)+".scr"); reset(f); f >> q; close(f);
+void get_screen(byte which) {
+ ;
+ closegraph();
+ textattr = 0;
+ clrscr;
+ assign(f, string("text") + strf(which) + ".scr");
+ reset(f);
+ f >> q;
+ close(f);
}
-void show_screen()
-{
- byte fv,ff,fq, tl,bl;
- scrtype a /*absolute $B800:0*/;
-;
- for( fv=1; fv <= 40; fv ++)
- {;
- if (fv>36) {; tl=1; bl=24; }
- else {; tl=12-fv / 3; bl=12+fv / 3; }
- for( fq=tl; fq <= bl; fq ++)
- for( ff=80-fv*2; ff <= 80+fv*2; ff ++)
- a[fq*160-ff]=q[fq*160-ff];
- delay(5);
- }
- gotoxy(1,25); textattr=31; clreol; gotoxy(1,24);
+void show_screen() {
+ byte fv, ff, fq, tl, bl;
+ scrtype a /*absolute $B800:0*/;
+ ;
+ for (fv = 1; fv <= 40; fv ++) {
+ ;
+ if (fv > 36) {
+ ;
+ tl = 1;
+ bl = 24;
+ } else {
+ ;
+ tl = 12 - fv / 3;
+ bl = 12 + fv / 3;
+ }
+ for (fq = tl; fq <= bl; fq ++)
+ for (ff = 80 - fv * 2; ff <= 80 + fv * 2; ff ++)
+ a[fq * 160 - ff] = q[fq * 160 - ff];
+ delay(5);
+ }
+ gotoxy(1, 25);
+ textattr = 31;
+ clreol;
+ gotoxy(1, 24);
}
-void quit_with(byte which,byte errorlev)
-{;
- dusk();
- get_screen(which);
- show_screen(); /* No changes. */
- exit(errorlev);
+void quit_with(byte which, byte errorlev) {
+ ;
+ dusk();
+ get_screen(which);
+ show_screen(); /* No changes. */
+ exit(errorlev);
}
-void put_in(string x, word where)
-{
- word fv;
-;
- for( fv=1; fv <= length(x); fv ++)
- q[1+(where+fv)*2]=x[fv];
+void put_in(string x, word where) {
+ word fv;
+ ;
+ for (fv = 1; fv <= length(x); fv ++)
+ q[1 + (where + fv) * 2] = x[fv];
}
void end_of_program()
{
- const array<0,11,varying_string<11> > nouns =
- {{"sackbut","harpsichord","camel","conscience","ice-cream","serf",
- "abacus","castle","carrots","megaphone","manticore","drawbridge"}};
-
- const array<0,11,varying_string<9> > verbs =
- {{"haunt","daunt","tickle","gobble","erase","provoke","surprise",
- "ignore","stare at","shriek at","frighten","quieten"}};
-
- string result;
-;
- nosound;
- get_screen(scr_nagscreen);
- result=nouns[Random(12)]+" will "+verbs[Random(12)]+" you";
- put_in(result,1628);
- show_screen(); /* No halt- it's already set up. */
+ const array<0, 11, varying_string<11> > nouns = {
+ {
+ "sackbut", "harpsichord", "camel", "conscience", "ice-cream", "serf",
+ "abacus", "castle", "carrots", "megaphone", "manticore", "drawbridge"
+ }
+ };
+
+ const array<0, 11, varying_string<9> > verbs = {
+ {
+ "haunt", "daunt", "tickle", "gobble", "erase", "provoke", "surprise",
+ "ignore", "stare at", "shriek at", "frighten", "quieten"
+ }
+ };
+
+ string result;
+ ;
+ nosound;
+ get_screen(scr_nagscreen);
+ result = nouns[Random(12)] + " will " + verbs[Random(12)] + " you";
+ put_in(result, 1628);
+ show_screen(); /* No halt- it's already set up. */
}
/*$F+*/
-void bug_handler()
-{;
- exitproc=exitsave;
-
- if (erroraddr!=nil)
- {; /* An error occurred! */
- if (exitcode==203)
- get_screen(scr_ramcram);
- else
- {;
- get_screen(scr_bugalert);
- put_in(strf(exitcode),678); /* 678 = [38,8]. */
- put_in(strf(seg(erroraddr))+':'+strf(ofs(erroraddr)),758); /* 758 = [38,9]. */
- }
- show_screen();
- erroraddr=nil;
- }
+void bug_handler() {
+ ;
+ exitproc = exitsave;
+
+ if (erroraddr != nil) {
+ ; /* An error occurred! */
+ if (exitcode == 203)
+ get_screen(scr_ramcram);
+ else {
+ ;
+ get_screen(scr_bugalert);
+ put_in(strf(exitcode), 678); /* 678 = [38,8]. */
+ put_in(strf(seg(erroraddr)) + ':' + strf(ofs(erroraddr)), 758); /* 758 = [38,9]. */
+ }
+ show_screen();
+ erroraddr = nil;
+ }
}
/*$F-*/
class unit_closing_initialize {
- public: unit_closing_initialize();
+public:
+ unit_closing_initialize();
};
static unit_closing_initialize closing_constructor;
-unit_closing_initialize::unit_closing_initialize() {;
- exitsave=exitproc;
- exitproc=&bug_handler;
+unit_closing_initialize::unit_closing_initialize() {
+ ;
+ exitsave = exitproc;
+ exitproc = &bug_handler;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/closing.h b/engines/avalanche/closing.h
index a4d539fe7b..3e63e36815 100644
--- a/engines/avalanche/closing.h
+++ b/engines/avalanche/closing.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -36,7 +36,7 @@ const integer scr_nagscreen = 3;
const integer scr_twocopies = 5;
-void quit_with(byte which,byte errorlev);
+void quit_with(byte which, byte errorlev);
void end_of_program();
diff --git a/engines/avalanche/convert.cpp b/engines/avalanche/convert.cpp
index b8d986d73e..f7ae1ecf77 100644
--- a/engines/avalanche/convert.cpp
+++ b/engines/avalanche/convert.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,79 +29,92 @@
namespace Avalanche {
-integer gd,gm;
-string fn1,fn2;
+integer gd, gm;
+string fn1, fn2;
varying_string<30> desc;
-void loadscreen(string nam)
-{
- byte z;
- array<1,4,pointer> a;
- untyped_file f; word s;
- string check;
-;
- assign(f,nam);
- reset(f,1);
- blockread(f,check,41);
- blockread(f,check,13);
- blockread(f,check,31);
- s=imagesize(0,0,getmaxx(),75);
- for( z=1; z <= 2; z ++)
- {;
- getmem(a[z],s);
- blockread(f,a[z],s);
- setactivepage(0);
- putimage(0,15+(z-1)*75,a[z],0);
- freemem(a[z],s);
- }
- close(f);
+void loadscreen(string nam) {
+ byte z;
+ array<1, 4, pointer> a;
+ untyped_file f;
+ word s;
+ string check;
+ ;
+ assign(f, nam);
+ reset(f, 1);
+ blockread(f, check, 41);
+ blockread(f, check, 13);
+ blockread(f, check, 31);
+ s = imagesize(0, 0, getmaxx(), 75);
+ for (z = 1; z <= 2; z ++) {
+ ;
+ getmem(a[z], s);
+ blockread(f, a[z], s);
+ setactivepage(0);
+ putimage(0, 15 + (z - 1) * 75, a[z], 0);
+ freemem(a[z], s);
+ }
+ close(f);
}
-void load2(string name)
-{
- byte a /*absolute $A000:1200*/;
- byte bit;
- untyped_file f;
-;
- assign(f,name); reset(f,1); seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,12080);
- }
- close(f);
+void load2(string name) {
+ byte a /*absolute $A000:1200*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, name);
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 12080);
+ }
+ close(f);
}
-void save2(string name)
-{
- const string header =
- string("This is a file from an Avvy game, and its contents are subject to ")+
- "copyright."+'\15'+'\12'+'\15'+'\12'+"Have fun!"+'\32';
- byte a /*absolute $A000:1200*/;
- byte bit;
- untyped_file f;
-;
- assign(f,name); rewrite(f,1); blockwrite(f,header[1],146); /* really 90 */
- blockwrite(f,desc,31);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,a,12080);
- }
- close(f);
+void save2(string name) {
+ const string header =
+ string("This is a file from an Avvy game, and its contents are subject to ") +
+ "copyright." + '\15' + '\12' + '\15' + '\12' + "Have fun!" + '\32';
+ byte a /*absolute $A000:1200*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, name);
+ rewrite(f, 1);
+ blockwrite(f, header[1], 146); /* really 90 */
+ blockwrite(f, desc, 31);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, a, 12080);
+ }
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- output << "Filename?"; input >> fn1 >> NL;
- output << "New name?"; input >> fn2 >> NL;
- output << "Describe?"; input >> desc >> NL;
- gd=3; gm=0; initgraph(gd,gm,"");
- loadscreen(fn1);
- save2(fn2);
- closegraph();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ output << "Filename?";
+ input >> fn1 >> NL;
+ output << "New name?";
+ input >> fn2 >> NL;
+ output << "Describe?";
+ input >> desc >> NL;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ loadscreen(fn1);
+ save2(fn2);
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/convmous.cpp b/engines/avalanche/convmous.cpp
index 97da69a4d3..6316b61c3d 100644
--- a/engines/avalanche/convmous.cpp
+++ b/engines/avalanche/convmous.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,77 +31,106 @@
namespace Avalanche {
- /* ...gogogoch */struct cursor {
- matrix<0,1,0,15,word> mask;
- integer horzhotspot,verthotspot;
- };
-typedef /* ha ha */matrix<0,1,0,15,varying_string<16> > precursor;
+/* ...gogogoch */struct cursor {
+ matrix<0, 1, 0, 15, word> mask;
+ integer horzhotspot, verthotspot;
+};
+typedef /* ha ha */matrix<0, 1, 0, 15, varying_string<16> > precursor;
-const array<0,3,byte> colours = {{darkgray,blue,white,green}};
+const array<0, 3, byte> colours = {{darkgray, blue, white, green}};
cursor c_current;
boolean usepointer;
precursor cpc;
-byte hhs,vhs;
-string fn,desc;
-integer gd,gm;
+byte hhs, vhs;
+string fn, desc;
+integer gd, gm;
-void recalc()
-{
- byte a,b;
-;
- {;
- for( a=0; a <= 1; a ++)
- for( b=0; b <= 15; b ++)
- c_current.mask[a][b]=bintoword(cpc[a][b]);
- c_current.horzhotspot=hhs; c_current.verthotspot=vhs;
- }
+void recalc() {
+ byte a, b;
+ ;
+ {
+ ;
+ for (a = 0; a <= 1; a ++)
+ for (b = 0; b <= 15; b ++)
+ c_current.mask[a][b] = bintoword(cpc[a][b]);
+ c_current.horzhotspot = hhs;
+ c_current.verthotspot = vhs;
+ }
}
-void load()
-{
- text t; string x; byte a,b;
-;
- assign(t,fn);
- reset(t);
- do { t >> x >> NL; } while (!(x=='|')); /* bypass junk */
- t >> desc >> NL;
- for( a=0; a <= 1; a ++)
- for( b=0; b <= 15; b ++)
- t >> cpc[a][b] >> NL;
- t >> hhs >> NL; t >> vhs >> NL;
- close(t); recalc();
+void load() {
+ text t;
+ string x;
+ byte a, b;
+ ;
+ assign(t, fn);
+ reset(t);
+ do {
+ t >> x >> NL;
+ } while (!(x == '|')); /* bypass junk */
+ t >> desc >> NL;
+ for (a = 0; a <= 1; a ++)
+ for (b = 0; b <= 15; b ++)
+ t >> cpc[a][b] >> NL;
+ t >> hhs >> NL;
+ t >> vhs >> NL;
+ close(t);
+ recalc();
}
-void display()
-{
- const integer o0 = ord('0'); const integer o1 = ord('1');
- byte x,y,p1,p2;
-;
- for( y=0; y <= 15; y ++)
- {;
- for( x=1; x <= 16; x ++)
- {;
- switch (ord(cpc[0][y][x])*2+ord(cpc[1][y][x])) {
- case o0*2+o0: {; p1= 0; p2= 0; } break; /* p1= silhouette, p2= real */
- case o0*2+o1: {; p1= 0; p2=15; } break;
- case o1*2+o0: {; p1=15; p2= 0; } break;
- case o1*2+o1: {; p1= 9; p2= 9; } break; /* invalid- can't use this */
- }
- putpixel(x-1,y,p1); putpixel(x+99,y,p2);
- }
- output << NL;
- }
+void display() {
+ const integer o0 = ord('0');
+ const integer o1 = ord('1');
+ byte x, y, p1, p2;
+ ;
+ for (y = 0; y <= 15; y ++) {
+ ;
+ for (x = 1; x <= 16; x ++) {
+ ;
+ switch (ord(cpc[0][y][x]) * 2 + ord(cpc[1][y][x])) {
+ case o0*2+o0: {
+ ;
+ p1 = 0;
+ p2 = 0;
+ }
+ break; /* p1= silhouette, p2= real */
+ case o0*2+o1: {
+ ;
+ p1 = 0;
+ p2 = 15;
+ }
+ break;
+ case o1*2+o0: {
+ ;
+ p1 = 15;
+ p2 = 0;
+ }
+ break;
+ case o1*2+o1: {
+ ;
+ p1 = 9;
+ p2 = 9;
+ }
+ break; /* invalid- can't use this */
+ }
+ putpixel(x - 1, y, p1);
+ putpixel(x + 99, y, p2);
+ }
+ output << NL;
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=1; initgraph(gd,gm,"");
- fn="d:screwdri.inc";
- load();
- display();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ fn = "d:screwdri.inc";
+ load();
+ display();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/credits.cpp b/engines/avalanche/credits.cpp
index b3db08e392..377c34c7bf 100644
--- a/engines/avalanche/credits.cpp
+++ b/engines/avalanche/credits.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,85 +32,98 @@
namespace Avalanche {
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-integer gd,gm;
+integer gd, gm;
text t;
-array<1,2,fonttype> f;
+array<1, 2, fonttype> f;
file<fonttype> ff;
-array<1,80,byte> l;
+array<1, 80, byte> l;
varying_string<80> x;
-void do_one(byte z)
-{
- byte a /*absolute $A000:0*/;
- byte aa /*absolute $A000:80*/;
- byte az /*absolute $A000:27921*/;
-;
- a=getpixel(0,0);
- move(l,az,z);
+void do_one(byte z) {
+ byte a /*absolute $A000:0*/;
+ byte aa /*absolute $A000:80*/;
+ byte az /*absolute $A000:27921*/;
+ ;
+ a = getpixel(0, 0);
+ move(l, az, z);
- port[0x3c5]=8; port[0x3cf]=0;
- move(aa,a,27920);
+ port[0x3c5] = 8;
+ port[0x3cf] = 0;
+ move(aa, a, 27920);
}
-void background()
-{
- byte y;
-;
- for( y=1; y <= 15; y ++)
- {;
- setcolor(y);
- outtextxy(17,y*12,"Jesus is Lord!");
- }
+void background() {
+ byte y;
+ ;
+ for (y = 1; y <= 15; y ++) {
+ ;
+ setcolor(y);
+ outtextxy(17, y * 12, "Jesus is Lord!");
+ }
}
-void scroll(string z)
-{
- byte x,y,lz; char c;
-;
- fillchar(l,80,'\0');
- if (z=="")
- for( y=1; y <= 12; y ++) do_one(0);
- c=z[1]; Delete(z,1,1);
- lz=length(z);
- switch (c) {
- case '*': for( y=0; y <= 15; y ++)
- {;
- for( x=1; x <= lz; x ++)
- l[x]=f[2][z[x]][y];
- do_one(lz);
- }
- break;
- case '>': {;
- lz += 7;
- for( y=0; y <= 13; y ++)
- {;
- for( x=1; x <= lz; x ++)
- l[x+7]=f[1][z[x]][y];
- do_one(lz); do_one(lz); /* double-height characters */
- }
- }
- break;
- }
+void scroll(string z) {
+ byte x, y, lz;
+ char c;
+ ;
+ fillchar(l, 80, '\0');
+ if (z == "")
+ for (y = 1; y <= 12; y ++) do_one(0);
+ c = z[1];
+ Delete(z, 1, 1);
+ lz = length(z);
+ switch (c) {
+ case '*':
+ for (y = 0; y <= 15; y ++) {
+ ;
+ for (x = 1; x <= lz; x ++)
+ l[x] = f[2][z[x]][y];
+ do_one(lz);
+ }
+ break;
+ case '>': {
+ ;
+ lz += 7;
+ for (y = 0; y <= 13; y ++) {
+ ;
+ for (x = 1; x <= lz; x ++)
+ l[x + 7] = f[1][z[x]][y];
+ do_one(lz);
+ do_one(lz); /* double-height characters */
+ }
+ }
+ break;
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=1; initgraph(gd,gm,"");
- port[0x3c4]=2; port[0x3cf]=4;
- assign(ff,"avalot.fnt"); reset(ff); ff >> f[1]; close(ff);
- assign(ff,"avitalic.fnt"); reset(ff); ff >> f[2]; close(ff);
- assign(t,"credits.txt"); reset(t);
- background();
- for( gd=8; gd <= 15; gd ++) setpalette(gd,62);
- do {
- t >> x >> NL;
- scroll(x);
- } while (!(eof(t) || keypressed()));
- close(t);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ port[0x3c4] = 2;
+ port[0x3cf] = 4;
+ assign(ff, "avalot.fnt");
+ reset(ff);
+ ff >> f[1];
+ close(ff);
+ assign(ff, "avitalic.fnt");
+ reset(ff);
+ ff >> f[2];
+ close(ff);
+ assign(t, "credits.txt");
+ reset(t);
+ background();
+ for (gd = 8; gd <= 15; gd ++) setpalette(gd, 62);
+ do {
+ t >> x >> NL;
+ scroll(x);
+ } while (!(eof(t) || keypressed()));
+ close(t);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/displtxt.cpp b/engines/avalanche/displtxt.cpp
index 0db15d55c7..41ebe4434c 100644
--- a/engines/avalanche/displtxt.cpp
+++ b/engines/avalanche/displtxt.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,31 +31,45 @@ namespace Avalanche {
const char fn[] = "text3.scr";
-typedef array<1,3840,char> atype;
+typedef array<1, 3840, char> atype;
file<atype> f;
-word fv,ff,fq,st;
+word fv, ff, fq, st;
char r;
-byte tl,bl;
+byte tl, bl;
atype q;
atype a /*absolute $B800:0*/;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- textattr=0; clrscr;
- assign(f,fn); reset(f); f >> q; close(f);
- for( fv=1; fv <= 40; fv ++)
- {;
- if (fv>36) {; tl=1; bl=24; }
- else {; tl=12-fv / 3; bl=12+fv / 3; }
- for( fq=tl; fq <= bl; fq ++)
- for( ff=80-fv*2; ff <= 80+fv*2; ff ++)
- a[fq*160-ff]=q[fq*160-ff];
- delay(5);
- }
- gotoxy(1,25); textattr=31; clreol; gotoxy(1,24);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ textattr = 0;
+ clrscr;
+ assign(f, fn);
+ reset(f);
+ f >> q;
+ close(f);
+ for (fv = 1; fv <= 40; fv ++) {
+ ;
+ if (fv > 36) {
+ ;
+ tl = 1;
+ bl = 24;
+ } else {
+ ;
+ tl = 12 - fv / 3;
+ bl = 12 + fv / 3;
+ }
+ for (fq = tl; fq <= bl; fq ++)
+ for (ff = 80 - fv * 2; ff <= 80 + fv * 2; ff ++)
+ a[fq * 160 - ff] = q[fq * 160 - ff];
+ delay(5);
+ }
+ gotoxy(1, 25);
+ textattr = 31;
+ clreol;
+ gotoxy(1, 24);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/dropdown.cpp b/engines/avalanche/dropdown.cpp
index 5637401259..0f3d078f12 100644
--- a/engines/avalanche/dropdown.cpp
+++ b/engines/avalanche/dropdown.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -71,76 +71,108 @@ const integer disabled = darkgray;
char r;
byte fv;
-void find_what_you_can_do_with_it()
-{;
- switch (thinks) {
- case wine:case ink: verbstr=string(vb_exam)+vb_drink; break;
- case bell: verbstr=string(vb_exam)+vb_ring; break;
- case potion:case wine: verbstr=string(vb_exam)+vb_drink; break;
- case chastity: verbstr=string(vb_exam)+vb_wear; break;
- case lute: verbstr=string(vb_exam)+vb_play; break;
- case mushroom:case onion: verbstr=string(vb_exam)+vb_eat; break;
- case clothes: verbstr=string(vb_exam)+vb_wear; break;
- default: verbstr=vb_exam; /* anything else */
- }
-}
-
-void chalk(integer x,integer y, char t, string z, boolean valid)
-{
- byte fv,ff,p,bit;
- word pageseg;
- byte ander;
-;
-
- pageseg=0xa000+cp*0x400;
-
- if (valid) ander=255; else ander=170;
-
- for( fv=1; fv <= length(z); fv ++)
- for( ff=0; ff <= 7; ff ++)
- for( bit=0; bit <= 2; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- mem[pageseg*x+fv-1+(y+ff)*80]=~ (little[z[fv]][ff] & ander);
- }
-
- for( ff=0; ff <= 8; ff ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << 3; port[0x3cf]=3;
- fillchar(mem[pageseg*x+(y+ff)*80],length(z),'\0'); /* blank it out. */
- }
-
- p=pos(t,z); if (p==0) return; p -= 1;
-
- for( bit=0; bit <= 2; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- mem[pageseg*x+p+(y+8)*80]=~ ander;
- }
+void find_what_you_can_do_with_it() {
+ ;
+ switch (thinks) {
+ case wine:
+ case ink:
+ verbstr = string(vb_exam) + vb_drink;
+ break;
+ case bell:
+ verbstr = string(vb_exam) + vb_ring;
+ break;
+ case potion:
+ case wine:
+ verbstr = string(vb_exam) + vb_drink;
+ break;
+ case chastity:
+ verbstr = string(vb_exam) + vb_wear;
+ break;
+ case lute:
+ verbstr = string(vb_exam) + vb_play;
+ break;
+ case mushroom:
+ case onion:
+ verbstr = string(vb_exam) + vb_eat;
+ break;
+ case clothes:
+ verbstr = string(vb_exam) + vb_wear;
+ break;
+ default:
+ verbstr = vb_exam; /* anything else */
+ }
+}
- blitfix();
+void chalk(integer x, integer y, char t, string z, boolean valid) {
+ byte fv, ff, p, bit;
+ word pageseg;
+ byte ander;
+ ;
+
+ pageseg = 0xa000 + cp * 0x400;
+
+ if (valid) ander = 255;
+ else ander = 170;
+
+ for (fv = 1; fv <= length(z); fv ++)
+ for (ff = 0; ff <= 7; ff ++)
+ for (bit = 0; bit <= 2; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ mem[pageseg * x + fv - 1 + (y + ff) * 80] = ~(little[z[fv]][ff] & ander);
+ }
+
+ for (ff = 0; ff <= 8; ff ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << 3;
+ port[0x3cf] = 3;
+ fillchar(mem[pageseg * x + (y + ff) * 80], length(z), '\0'); /* blank it out. */
+ }
+
+ p = pos(t, z);
+ if (p == 0) return;
+ p -= 1;
+
+ for (bit = 0; bit <= 2; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ mem[pageseg * x + p + (y + 8) * 80] = ~ ander;
+ }
+
+ blitfix();
}
-void hlchalk(integer x,integer y, char t, string z, boolean valid)
- /* Highlighted. */
+void hlchalk(integer x, integer y, char t, string z, boolean valid)
+/* Highlighted. */
{
- byte fv,ff,p;
- word pageseg;
- byte ander;
-;
+ byte fv, ff, p;
+ word pageseg;
+ byte ander;
+ ;
- pageseg=0xa000+cp*0x400;
+ pageseg = 0xa000 + cp * 0x400;
- if (valid) ander=255; else ander=170;
+ if (valid) ander = 255;
+ else ander = 170;
- for( fv=1; fv <= length(z); fv ++)
- for( ff=0; ff <= 7; ff ++)
- mem[pageseg*x+fv-1+(y+ff)*80]=little[z[fv]][ff] & ander;
+ for (fv = 1; fv <= length(z); fv ++)
+ for (ff = 0; ff <= 7; ff ++)
+ mem[pageseg * x + fv - 1 + (y + ff) * 80] = little[z[fv]][ff] & ander;
- p=pos(t,z); if (p==0) return; p -= 1;
+ p = pos(t, z);
+ if (p == 0) return;
+ p -= 1;
- mem[pageseg*x+p+(y+8)*80]=ander;
- blitfix();
+ mem[pageseg * x + p + (y + 8) * 80] = ander;
+ blitfix();
}
/*procedure say(x,y:integer; t:char; z:string; f,b:byte);
@@ -150,475 +182,539 @@ begin;
chalk(x,y,t,z);
end;*/
-void bleep()
-{;
- sound(177); delay(7); nosound;
+void bleep() {
+ ;
+ sound(177);
+ delay(7);
+ nosound;
}
-void onemenu::start_afresh()
-{;
- number=0; width=0; firstlix=false; oldy=0; highlightnum=0;
+void onemenu::start_afresh() {
+ ;
+ number = 0;
+ width = 0;
+ firstlix = false;
+ oldy = 0;
+ highlightnum = 0;
}
-onemenu* onemenu::init()
-{;
- menunow=false; ddmnow=false; menunum=1;
- return this;
+onemenu *onemenu::init() {
+ ;
+ menunow = false;
+ ddmnow = false;
+ menunum = 1;
+ return this;
}
-void onemenu::opt(string n, char tr, string key, boolean val)
-{
- integer l;
-;
- number += 1;
- l=length(n+key)+3; if (width<l) width=l;
- {
- optiontype& with = oo[number];
- ;
- with.title=n;
- with.trigger=tr;
- with.shortcut=key;
- with.valid=val;
- }
-}
-
-void onemenu::displayopt(byte y, boolean highlit)
-{
- string data;
-;
- {
- optiontype& with = oo[y];
- ;
+void onemenu::opt(string n, char tr, string key, boolean val) {
+ integer l;
+ ;
+ number += 1;
+ l = length(n + key) + 3;
+ if (width < l) width = l;
+ {
+ optiontype &with = oo[number];
+ ;
+ with.title = n;
+ with.trigger = tr;
+ with.shortcut = key;
+ with.valid = val;
+ }
+}
+
+void onemenu::displayopt(byte y, boolean highlit) {
+ string data;
+ ;
+ {
+ optiontype &with = oo[y];
+ ;
- if (highlit)
- setfillstyle(1,0);
- else
- setfillstyle(1,7);
- bar((flx1+1)*8,3+y*10,(flx2+1)*8,12+y*10);
+ if (highlit)
+ setfillstyle(1, 0);
+ else
+ setfillstyle(1, 7);
+ bar((flx1 + 1) * 8, 3 + y * 10, (flx2 + 1) * 8, 12 + y * 10);
-/* settextjustify(2,2);
- if shortcut>'' then outtextxy(flx2,4+y*10,shortcut);*/
+ /* settextjustify(2,2);
+ if shortcut>'' then outtextxy(flx2,4+y*10,shortcut);*/
- data=with.title;
+ data = with.title;
- while (length(data+with.shortcut)<width)
- data=data+' '; /* Pad with spaces. */
+ while (length(data + with.shortcut) < width)
+ data = data + ' '; /* Pad with spaces. */
- data=data+with.shortcut;
+ data = data + with.shortcut;
- if (highlit)
- hlchalk(left,4+y*10,with.trigger,data,with.valid);
- else
- chalk(left,4+y*10,with.trigger,data,with.valid);
+ if (highlit)
+ hlchalk(left, 4 + y * 10, with.trigger, data, with.valid);
+ else
+ chalk(left, 4 + y * 10, with.trigger, data, with.valid);
- }
+ }
}
-void onemenu::display()
-{
- byte y;
-;
- off();
- setactivepage(cp); setvisualpage(cp);
- setfillstyle(1,menu_b); setcolor(menu_border);
- firstlix=true;
- flx1=left-2; flx2=left+width; fly=14+number*10;
- menunow=true; ddmnow=true;
+void onemenu::display() {
+ byte y;
+ ;
+ off();
+ setactivepage(cp);
+ setvisualpage(cp);
+ setfillstyle(1, menu_b);
+ setcolor(menu_border);
+ firstlix = true;
+ flx1 = left - 2;
+ flx2 = left + width;
+ fly = 14 + number * 10;
+ menunow = true;
+ ddmnow = true;
+
+ bar((flx1 + 1) * 8, 12, (flx2 + 1) * 8, fly);
+ rectangle((flx1 + 1) * 8 - 1, 11, (flx2 + 1) * 8 + 1, fly + 1);
+
+ displayopt(1, true);
+ for (y = 2; y <= number; y ++) {
+ optiontype &with = oo[y];
+ displayopt(y, false);
+ }
+ defaultled = 1;
+ cmp = 177;
+ mousepage(cp);
+ on(); /* 4= fletch */
+}
- bar((flx1+1)*8,12,(flx2+1)*8,fly);
- rectangle((flx1+1)*8-1,11,(flx2+1)*8+1,fly+1);
+void onemenu::wipe() {
+ bytefield r;
+ ;
+ setactivepage(cp);
+ off();
+ {
+ headtype &with = ddm_m.ddms[ddm_o.menunum];
+ chalk(with.xpos, 1, with.trigger, with.title, true);
+ }
+ /* mblit((flx1-3) div 8,11,((flx2+1) div 8)+1,fly+1,3,cp);*/
+
+ /* with r do
+ begin;
+ x1:=flx1;
+ y1:=11;
+ x2:=flx2+1;
+ y2:=fly+1;
+ end;
+ getset[cp].remember(r);*/
+
+ mblit(flx1, 11, flx2 + 1, fly + 1, 3, cp);
+ blitfix();
+ menunow = false;
+ ddmnow = false;
+ firstlix = false;
+ defaultled = 2;
+ on_virtual();
+}
- displayopt(1,true);
- for( y=2; y <= number; y ++)
- { optiontype& with = oo[y]; displayopt(y,false);}
- defaultled=1; cmp=177; mousepage(cp); on(); /* 4= fletch */
+void onemenu::movehighlight(shortint add) {
+ shortint hn;
+ ;
+ if (add != 0) {
+ ;
+ hn = highlightnum + add;
+ if ((hn < 0) || (hn >= (unsigned char)number)) return;
+ highlightnum = hn;
+ }
+ setactivepage(cp);
+ off();
+ displayopt(oldy + 1, false);
+ displayopt(highlightnum + 1, true);
+ setactivepage(1 - cp);
+ oldy = highlightnum;
+ on();
}
-void onemenu::wipe()
-{
- bytefield r;
-;
- setactivepage(cp);
- off();
- { headtype& with = ddm_m.ddms[ddm_o.menunum];
- chalk(with.xpos,1,with.trigger,with.title,true);}
-/* mblit((flx1-3) div 8,11,((flx2+1) div 8)+1,fly+1,3,cp);*/
-
-/* with r do
- begin;
- x1:=flx1;
- y1:=11;
- x2:=flx2+1;
- y2:=fly+1;
- end;
- getset[cp].remember(r);*/
+void onemenu::lightup() { /* This makes the menu highlight follow the mouse.*/
+ ;
+ if ((mx < (cardinal)flx1 * 8) || (mx > (cardinal)flx2 * 8) || (my <= 12) || (my > (cardinal)fly - 3)) return;
+ highlightnum = (my - 13) / 10;
+ if (highlightnum == oldy) return;
+ movehighlight(0);
+}
+
+void onemenu::select(byte n) { /* Choose which one you want. */
+ ;
+ if (! oo[n + 1].valid) return;
+ choicenum = n;
+ wipe();
- mblit(flx1,11,flx2+1,fly+1,3,cp); blitfix();
- menunow=false; ddmnow=false; firstlix=false; defaultled=2;
- on_virtual();
+ if (choicenum == number) choicenum -= 1; /* Off the bottom. */
+ if (choicenum > number) choicenum = 0; /* Off the top, I suppose. */
+
+ ddm_m.ddms[menunum].do_choose();
}
-void onemenu::movehighlight(shortint add)
-{
- shortint hn;
-;
- if (add!=0)
- {;
- hn=highlightnum+add;
- if ((hn<0) || (hn>=(unsigned char)number)) return;
- highlightnum=hn;
- }
- setactivepage(cp); off();
- displayopt(oldy+1,false);
- displayopt(highlightnum+1,true);
- setactivepage(1-cp);
- oldy=highlightnum; on();
+void onemenu::keystroke(char c) {
+ byte fv;
+ boolean found;
+ ;
+ c = upcase(c);
+ found = false;
+ for (fv = 1; fv <= number; fv ++) {
+ optiontype &with = oo[fv];
+ if ((upcase(with.trigger) == c) && with.valid) {
+ ;
+ select(fv - 1);
+ found = true;
+ }
+ }
+ if (! found) blip();
}
-void onemenu::lightup() /* This makes the menu highlight follow the mouse.*/
-{;
- if ((mx<(cardinal)flx1*8) || (mx>(cardinal)flx2*8) || (my<=12) || (my>(cardinal)fly-3)) return;
- highlightnum=(my-13) / 10;
- if (highlightnum==oldy) return;
- movehighlight(0);
+headtype *headtype::init
+(char trig, char alttrig, string name, byte p, proc dw, proc dc) {
+ ;
+ trigger = trig;
+ alttrigger = alttrig;
+ title = name;
+ position = p;
+ xpos = (position - 1) * spacing + indent;
+ xright = position * spacing + indent;
+ do_setup = dw;
+ do_choose = dc;
+ return this;
}
-void onemenu::select(byte n) /* Choose which one you want. */
-{;
- if (! oo[n+1].valid) return;
- choicenum=n; wipe();
+void headtype::display() {
+ ;
+ off(); /*MT*/
+ chalk(xpos, 1, trigger, title, true);
+ on(); /*MT*/
+}
- if (choicenum==number) choicenum -= 1; /* Off the bottom. */
- if (choicenum>number) choicenum=0; /* Off the top, I suppose. */
+void headtype::highlight() {
+ ;
+ off();
+ off_virtual();
+ nosound;
+ setactivepage(cp);
+ hlchalk(xpos, 1, trigger, title, true);
+ {
+ ;
+ ddm_o.left = xpos;
+ ddm_o.menunow = true;
+ ddmnow = true;
+ ddm_o.menunum = position;
+ }
+ cmp = 177; /* Force redraw of cursor. */
+}
- ddm_m.ddms[menunum].do_choose();
+boolean headtype::extdparse(char c) {
+ boolean extdparse_result;
+ ;
+ if (c != alttrigger) {
+ ;
+ extdparse_result = true;
+ return extdparse_result;
+ }
+ extdparse_result = false;
+ return extdparse_result;
}
-void onemenu::keystroke(char c)
-{
- byte fv; boolean found;
-;
- c=upcase(c); found=false;
- for( fv=1; fv <= number; fv ++)
- { optiontype& with = oo[fv];
- if ((upcase(with.trigger)==c) && with.valid)
- {;
- select(fv-1);
- found=true;
- }}
- if (! found) blip();
-}
-
- headtype* headtype::init
- (char trig,char alttrig, string name, byte p, proc dw,proc dc)
- {;
- trigger=trig; alttrigger=alttrig; title=name;
- position=p; xpos=(position-1)*spacing+indent;
- xright=position*spacing+indent;
- do_setup=dw; do_choose=dc;
- return this;
- }
-
- void headtype::display()
- {;
- off(); /*MT*/
- chalk(xpos,1,trigger,title,true);
- on(); /*MT*/
- }
-
- void headtype::highlight()
- {;
- off(); off_virtual(); nosound;
- setactivepage(cp);
- hlchalk(xpos,1,trigger,title,true);
- {;
- ddm_o.left=xpos;
- ddm_o.menunow=true; ddmnow=true; ddm_o.menunum=position;
- }
- cmp=177; /* Force redraw of cursor. */
- }
-
- boolean headtype::extdparse(char c)
- {boolean extdparse_result;
- ;
- if (c!=alttrigger) {; extdparse_result=true; return extdparse_result; }
- extdparse_result=false;
- return extdparse_result;
- }
-
- menuset* menuset::init()
- {;
- howmany=0;
- return this;
- }
-
- void menuset::create(char t, string n, char alttrig, proc dw,proc dc)
- {;
- howmany += 1;
- ddms[howmany].init(t,alttrig,n,howmany,dw,dc);
- }
-
- void menuset::update()
- {
- const bytefield menuspace = {0, 0, 80, 9};
- byte fv,page_,savecp;
- ;
- setactivepage(3);
- setfillstyle(1,menu_b); bar(0, 0,640, 9);
- savecp=cp; cp=3;
-
- for( fv=1; fv <= howmany; fv ++)
- ddms[fv].display();
-
- for( page_=0; page_ <= 1; page_ ++)
- getset[page_].remember(menuspace);
-
- cp=savecp;
- }
-
- void menuset::extd(char c)
- {
- byte fv;
- ;
- fv=1;
- while ((fv<=howmany) && (ddms[fv].extdparse(c))) fv += 1;
- if (fv>howmany) return; getcertain(fv);
- }
-
- void menuset::getcertain(byte fv)
- {;
- { headtype& with = ddms[fv];
- {;
- if (ddm_o.menunow)
- {;
- wipe(); /* get rid of menu */
- if (ddm_o.menunum==with.position) return; /* clicked on own highlight */
- }
- highlight(); do_setup();
- }}
- }
-
- void menuset::getmenu(integer x)
- {
- byte fv;
- ;
- fv=0;
- do {
- fv += 1;
- if ((x>ddms[fv].xpos*8) && (x<ddms[fv].xright*8))
- {;
- getcertain(fv);
- return;
- }
- } while (!(fv>howmany));
- }
-
-void parsekey(char r,char re)
-{;
- switch (r) {
- case '\0':case '\340': {;
- switch (re) {
- case 'K': if (ddm_o.menunum>1) {;
- wipe();
- ddm_m.getcertain(ddm_o.menunum-1);
- } else
- {; /* Get menu on the left-hand side */
- wipe();
- ddm_m.getmenu((ddm_m.howmany-1)*spacing+indent);
- }
- break;
- case 'M': if (ddm_o.menunum<ddm_m.howmany) {;
- wipe();
- ddm_m.getcertain(ddm_o.menunum+1);
- } else
- {; /* Get menu on the far right-hand side */
- wipe();
- ddm_m.getmenu(indent);
- }
- break;
- case 'H': movehighlight(-1); break;
- case 'P': movehighlight(1); break;
- default: ddm_m.extd(re);
- }
- }
- break;
- case '\15': select(ddm_o.highlightnum); break;
- default:
- {;
- if (ddm_o.menunow) keystroke(r);
- }
- }
+menuset *menuset::init() {
+ ;
+ howmany = 0;
+ return this;
+}
+
+void menuset::create(char t, string n, char alttrig, proc dw, proc dc) {
+ ;
+ howmany += 1;
+ ddms[howmany].init(t, alttrig, n, howmany, dw, dc);
+}
+
+void menuset::update() {
+ const bytefield menuspace = {0, 0, 80, 9};
+ byte fv, page_, savecp;
+ ;
+ setactivepage(3);
+ setfillstyle(1, menu_b);
+ bar(0, 0, 640, 9);
+ savecp = cp;
+ cp = 3;
+
+ for (fv = 1; fv <= howmany; fv ++)
+ ddms[fv].display();
+
+ for (page_ = 0; page_ <= 1; page_ ++)
+ getset[page_].remember(menuspace);
+
+ cp = savecp;
+}
+
+void menuset::extd(char c) {
+ byte fv;
+ ;
+ fv = 1;
+ while ((fv <= howmany) && (ddms[fv].extdparse(c))) fv += 1;
+ if (fv > howmany) return;
+ getcertain(fv);
+}
+
+void menuset::getcertain(byte fv) {
+ ;
+ {
+ headtype &with = ddms[fv];
+ {
+ ;
+ if (ddm_o.menunow) {
+ ;
+ wipe(); /* get rid of menu */
+ if (ddm_o.menunum == with.position) return; /* clicked on own highlight */
+ }
+ highlight();
+ do_setup();
+ }
+ }
+}
+
+void menuset::getmenu(integer x) {
+ byte fv;
+ ;
+ fv = 0;
+ do {
+ fv += 1;
+ if ((x > ddms[fv].xpos * 8) && (x < ddms[fv].xright * 8)) {
+ ;
+ getcertain(fv);
+ return;
+ }
+ } while (!(fv > howmany));
+}
+
+void parsekey(char r, char re) {
+ ;
+ switch (r) {
+ case '\0':
+ case '\340': {
+ ;
+ switch (re) {
+ case 'K':
+ if (ddm_o.menunum > 1) {
+ ;
+ wipe();
+ ddm_m.getcertain(ddm_o.menunum - 1);
+ } else {
+ ; /* Get menu on the left-hand side */
+ wipe();
+ ddm_m.getmenu((ddm_m.howmany - 1)*spacing + indent);
+ }
+ break;
+ case 'M':
+ if (ddm_o.menunum < ddm_m.howmany) {
+ ;
+ wipe();
+ ddm_m.getcertain(ddm_o.menunum + 1);
+ } else {
+ ; /* Get menu on the far right-hand side */
+ wipe();
+ ddm_m.getmenu(indent);
+ }
+ break;
+ case 'H':
+ movehighlight(-1);
+ break;
+ case 'P':
+ movehighlight(1);
+ break;
+ default:
+ ddm_m.extd(re);
+ }
+ }
+ break;
+ case '\15':
+ select(ddm_o.highlightnum);
+ break;
+ default: {
+ ;
+ if (ddm_o.menunow) keystroke(r);
+ }
+ }
}
/*$F+ *** Here follow all the ddm__ and do__ procedures for the DDM system. */
-void ddm__game()
-{;
- {;
- start_afresh();
- opt("Help...",'H',"f1",true);
- opt("Boss Key",'B',"alt-B",true);
- opt("Untrash screen",'U',"ctrl-f7",true);
- opt("Score and rank",'S',"f9",true);
- opt("About Avvy...",'A',"shift-f10",true);
- display();
- }
-}
-
-void ddm__file()
-{;
- {;
- start_afresh();
- opt("New game",'N',"f4",true);
- opt("Load...",'L',"^f3",true);
- opt("Save",'S',"^f2",alive);
- opt("Save As...",'v',"",alive);
- opt("DOS Shell",'D',atkey+'1',true);
- opt("Quit",'Q',"alt-X",true);
- display();
- }
-}
-
-void ddm__action()
-{
- string n;
-;
- n=copy(f5_does(),2,255);
-
- {;
- start_afresh();
- if (n=="")
- opt("Do something",'D',"f5",false);
- else
- opt(copy(n,2,255),n[1],"f5",true);
- opt("Pause game",'P',"f6",true);
- if (dna.room==99)
- opt("Journey thither",'J',"f7",neardoor());
- else
- opt("Open the door",'O',"f7",neardoor());
- opt("Look around",'L',"f8",true);
- opt("Inventory",'I',"Tab",true);
- if (tr[1].xs==walk)
- opt("Run fast",'R',"^R",true);
- else
- opt("Walk slowly",'W',"^W",true);
- display();
- }
-}
-
-void ddm__people()
-{
- byte here; char fv;
-;
+void ddm__game() {
+ ;
+ {
+ ;
+ start_afresh();
+ opt("Help...", 'H', "f1", true);
+ opt("Boss Key", 'B', "alt-B", true);
+ opt("Untrash screen", 'U', "ctrl-f7", true);
+ opt("Score and rank", 'S', "f9", true);
+ opt("About Avvy...", 'A', "shift-f10", true);
+ display();
+ }
+}
- people="";
- here=dna.room;
+void ddm__file() {
+ ;
+ {
+ ;
+ start_afresh();
+ opt("New game", 'N', "f4", true);
+ opt("Load...", 'L', "^f3", true);
+ opt("Save", 'S', "^f2", alive);
+ opt("Save As...", 'v', "", alive);
+ opt("DOS Shell", 'D', atkey + '1', true);
+ opt("Quit", 'Q', "alt-X", true);
+ display();
+ }
+}
- {;
- start_afresh();
- for( fv='\226'; fv <= '\262'; fv ++)
- if (whereis[fv]==here)
- {;
- opt(getname(fv),getnamechar(fv),"",true);
- people=people+fv;
- }
- display();
- }
+void ddm__action() {
+ string n;
+ ;
+ n = copy(f5_does(), 2, 255);
+
+ {
+ ;
+ start_afresh();
+ if (n == "")
+ opt("Do something", 'D', "f5", false);
+ else
+ opt(copy(n, 2, 255), n[1], "f5", true);
+ opt("Pause game", 'P', "f6", true);
+ if (dna.room == 99)
+ opt("Journey thither", 'J', "f7", neardoor());
+ else
+ opt("Open the door", 'O', "f7", neardoor());
+ opt("Look around", 'L', "f8", true);
+ opt("Inventory", 'I', "Tab", true);
+ if (tr[1].xs == walk)
+ opt("Run fast", 'R', "^R", true);
+ else
+ opt("Walk slowly", 'W', "^W", true);
+ display();
+ }
}
-void ddm__objects()
-{
- char fv;
-;
- {;
- start_afresh();
- for( fv='\1'; fv <= numobjs; fv ++)
- if (dna.obj[fv])
- opt(get_thing(fv),get_thingchar(fv),"",true);
- display();
- }
+void ddm__people() {
+ byte here;
+ char fv;
+ ;
+
+ people = "";
+ here = dna.room;
+
+ {
+ ;
+ start_afresh();
+ for (fv = '\226'; fv <= '\262'; fv ++)
+ if (whereis[fv] == here) {
+ ;
+ opt(getname(fv), getnamechar(fv), "", true);
+ people = people + fv;
+ }
+ display();
+ }
}
-string himher(char x) /* Returns "im" for boys, and "er" for girls.*/
-{string himher_result;
-;
- if (x<'\257') himher_result="im"; else himher_result="er";
-return himher_result;
+void ddm__objects() {
+ char fv;
+ ;
+ {
+ ;
+ start_afresh();
+ for (fv = '\1'; fv <= numobjs; fv ++)
+ if (dna.obj[fv])
+ opt(get_thing(fv), get_thingchar(fv), "", true);
+ display();
+ }
}
-void ddm__with()
-{
- byte fv; varying_string<7> verb; char vbchar; boolean n;
-;
- {;
- start_afresh();
-
- if (thinkthing)
- {;
-
- find_what_you_can_do_with_it();
-
- for( fv=1; fv <= length(verbstr); fv ++)
- {;
- verbopt(verbstr[fv],verb,vbchar);
- opt(verb,vbchar,"",true);
- }
-
- /* We disable the "give" option if: (a), you haven't selected anybody,
- (b), the person you've selected isn't in the room,
- or (c), the person you've selected is YOU! */
-
- if ((set::of(nowt,pavalot, eos).has(last_person)) ||
- (whereis[last_person]!=dna.room))
- opt("Give to...",'G',"",false); /* Not here. */ else
- {;
- opt(string("Give to ")+getname(last_person),'G',"",true);
- verbstr=verbstr+vb_give;
- }
-
- } else
- {;
- opt("Examine",'x',"",true);
- opt(string("Talk to h")+himher(thinks),'T',"",true);
- verbstr=string(vb_exam)+vb_talk;
- switch (thinks) {
-
- case pgeida:case parkata:
- {;
- opt("Kiss her",'K',"",true);
- verbstr=verbstr+vb_kiss;
- }
- break;
-
- case pdogfood:
- {;
- opt("Play his game",'P',"",! dna.wonnim); /* True if you HAVEN'T won. */
- verbstr=verbstr+vb_play;
- }
- break;
-
- case pmalagauche:
- {;
- n=! dna.teetotal;
- opt("Buy some wine",'w',"",! dna.obj[wine]);
- opt("Buy some beer",'b',"",n);
- opt("Buy some whisky",'h',"",n); opt("Buy some cider",'c',"",n);
- opt("Buy some mead",'m',"",n);
- verbstr=verbstr+'\145'+'\144'+'\146'+'\147'+'\150';
- }
- break;
-
- case ptrader:
- {;
- opt("Buy an onion",'o',"",! dna.obj[onion]);
- verbstr=verbstr+'\151';
- }
- break;
-
- }
- }
- display();
- }
+string himher(char x) { /* Returns "im" for boys, and "er" for girls.*/
+ string himher_result;
+ ;
+ if (x < '\257') himher_result = "im";
+ else himher_result = "er";
+ return himher_result;
+}
+
+void ddm__with() {
+ byte fv;
+ varying_string<7> verb;
+ char vbchar;
+ boolean n;
+ ;
+ {
+ ;
+ start_afresh();
+
+ if (thinkthing) {
+ ;
+
+ find_what_you_can_do_with_it();
+
+ for (fv = 1; fv <= length(verbstr); fv ++) {
+ ;
+ verbopt(verbstr[fv], verb, vbchar);
+ opt(verb, vbchar, "", true);
+ }
+
+ /* We disable the "give" option if: (a), you haven't selected anybody,
+ (b), the person you've selected isn't in the room,
+ or (c), the person you've selected is YOU! */
+
+ if ((set::of(nowt, pavalot, eos).has(last_person)) ||
+ (whereis[last_person] != dna.room))
+ opt("Give to...", 'G', "", false); /* Not here. */ else {
+ ;
+ opt(string("Give to ") + getname(last_person), 'G', "", true);
+ verbstr = verbstr + vb_give;
+ }
+
+ } else {
+ ;
+ opt("Examine", 'x', "", true);
+ opt(string("Talk to h") + himher(thinks), 'T', "", true);
+ verbstr = string(vb_exam) + vb_talk;
+ switch (thinks) {
+
+ case pgeida:
+ case parkata: {
+ ;
+ opt("Kiss her", 'K', "", true);
+ verbstr = verbstr + vb_kiss;
+ }
+ break;
+
+ case pdogfood: {
+ ;
+ opt("Play his game", 'P', "", ! dna.wonnim); /* True if you HAVEN'T won. */
+ verbstr = verbstr + vb_play;
+ }
+ break;
+
+ case pmalagauche: {
+ ;
+ n = ! dna.teetotal;
+ opt("Buy some wine", 'w', "", ! dna.obj[wine]);
+ opt("Buy some beer", 'b', "", n);
+ opt("Buy some whisky", 'h', "", n);
+ opt("Buy some cider", 'c', "", n);
+ opt("Buy some mead", 'm', "", n);
+ verbstr = verbstr + '\145' + '\144' + '\146' + '\147' + '\150';
+ }
+ break;
+
+ case ptrader: {
+ ;
+ opt("Buy an onion", 'o', "", ! dna.obj[onion]);
+ verbstr = verbstr + '\151';
+ }
+ break;
+
+ }
+ }
+ display();
+ }
}
/*procedure ddm__map;
@@ -647,113 +743,188 @@ begin;
end;
end;*/
-void do__game()
-{;
- switch (ddm_o.choicenum) {
- /* Help, boss, untrash screen. */
- case 0: callverb(vb_help); break;
- case 1: callverb(vb_boss); break;
- case 2: major_redraw(); break;
- case 3: callverb(vb_score); break;
- case 4: callverb(vb_info); break;
- }
-}
-
-void do__file()
-{;
- switch (ddm_o.choicenum) {
- /* New game, load, save, save as, DOS shell, about, quit. */
- case 0: callverb(vb_restart); break;
- case 1: {; realwords[2]=""; callverb(vb_load); } break;
- case 2: {; realwords[2]=""; callverb(vb_save); } break;
- case 3: filename_edit(); break;
- case 4: back_to_bootstrap(2); break;
- case 5: callverb(vb_quit); break;
- }
-}
-
-void do__action()
-{
- string n;
-;
- switch (ddm_o.choicenum) {
- /* Get up/pause game/open door/look/inv/walk-run */
- case 0: {
- person=pardon; thing=pardon;
- n=f5_does(); callverb(n[1]);
- }
- break;
- case 1: callverb(vb_pause); break;
- case 2: callverb(vb_open); break;
- case 3: callverb(vb_look); break;
- case 4: callverb(vb_inv); break;
- case 5: {
- if (tr[1].xs==walk) tr[1].xs=run;
- else tr[1].xs=walk;
- newspeed();
- }
- break;
- }
-}
-
-void do__objects()
-{;
- thinkabout(objlist[ddm_o.choicenum+1],a_thing);
-}
-
-void do__people()
-{;
- thinkabout(people[ddm_o.choicenum+1],a_person);
- last_person=people[ddm_o.choicenum+1];
-}
-
-void do__with()
-{;
- thing=thinks;
-
- if (thinkthing)
- {;
-
- thing += 49;
-
- if (verbstr[ddm_o.choicenum+1]==vb_give)
- person=last_person;
- else
- person='\376';
-
- } else
- {;
- switch (verbstr[ddm_o.choicenum+1]) {
- case '\144': {; thing='\144'; callverb(vb_buy); return; } break; /* Beer */
- case '\145': {; thing= '\62'; callverb(vb_buy); return; } break; /* Wine */
- case '\146': {; thing='\146'; callverb(vb_buy); return; } break; /* Whisky */
- case '\147': {; thing='\147'; callverb(vb_buy); return; } break; /* Cider */
- case '\150': {; thing='\153'; callverb(vb_buy); return; } break; /* Mead */
- case '\151': {; thing= '\103'; callverb(vb_buy); return; } break; /* Onion (trader) */
- default:
- {;
- person=thing;
- thing='\376';
- }
- }
- }
- callverb(verbstr[ddm_o.choicenum+1]);
+void do__game() {
+ ;
+ switch (ddm_o.choicenum) {
+ /* Help, boss, untrash screen. */
+ case 0:
+ callverb(vb_help);
+ break;
+ case 1:
+ callverb(vb_boss);
+ break;
+ case 2:
+ major_redraw();
+ break;
+ case 3:
+ callverb(vb_score);
+ break;
+ case 4:
+ callverb(vb_info);
+ break;
+ }
+}
+
+void do__file() {
+ ;
+ switch (ddm_o.choicenum) {
+ /* New game, load, save, save as, DOS shell, about, quit. */
+ case 0:
+ callverb(vb_restart);
+ break;
+ case 1: {
+ ;
+ realwords[2] = "";
+ callverb(vb_load);
+ }
+ break;
+ case 2: {
+ ;
+ realwords[2] = "";
+ callverb(vb_save);
+ }
+ break;
+ case 3:
+ filename_edit();
+ break;
+ case 4:
+ back_to_bootstrap(2);
+ break;
+ case 5:
+ callverb(vb_quit);
+ break;
+ }
+}
+
+void do__action() {
+ string n;
+ ;
+ switch (ddm_o.choicenum) {
+ /* Get up/pause game/open door/look/inv/walk-run */
+ case 0: {
+ person = pardon;
+ thing = pardon;
+ n = f5_does();
+ callverb(n[1]);
+ }
+ break;
+ case 1:
+ callverb(vb_pause);
+ break;
+ case 2:
+ callverb(vb_open);
+ break;
+ case 3:
+ callverb(vb_look);
+ break;
+ case 4:
+ callverb(vb_inv);
+ break;
+ case 5: {
+ if (tr[1].xs == walk) tr[1].xs = run;
+ else tr[1].xs = walk;
+ newspeed();
+ }
+ break;
+ }
+}
+
+void do__objects() {
+ ;
+ thinkabout(objlist[ddm_o.choicenum + 1], a_thing);
+}
+
+void do__people() {
+ ;
+ thinkabout(people[ddm_o.choicenum + 1], a_person);
+ last_person = people[ddm_o.choicenum + 1];
+}
+
+void do__with() {
+ ;
+ thing = thinks;
+
+ if (thinkthing) {
+ ;
+
+ thing += 49;
+
+ if (verbstr[ddm_o.choicenum + 1] == vb_give)
+ person = last_person;
+ else
+ person = '\376';
+
+ } else {
+ ;
+ switch (verbstr[ddm_o.choicenum + 1]) {
+ case '\144': {
+ ;
+ thing = '\144';
+ callverb(vb_buy);
+ return;
+ }
+ break; /* Beer */
+ case '\145': {
+ ;
+ thing = '\62';
+ callverb(vb_buy);
+ return;
+ }
+ break; /* Wine */
+ case '\146': {
+ ;
+ thing = '\146';
+ callverb(vb_buy);
+ return;
+ }
+ break; /* Whisky */
+ case '\147': {
+ ;
+ thing = '\147';
+ callverb(vb_buy);
+ return;
+ }
+ break; /* Cider */
+ case '\150': {
+ ;
+ thing = '\153';
+ callverb(vb_buy);
+ return;
+ }
+ break; /* Mead */
+ case '\151': {
+ ;
+ thing = '\103';
+ callverb(vb_buy);
+ return;
+ }
+ break; /* Onion (trader) */
+ default: {
+ ;
+ person = thing;
+ thing = '\376';
+ }
+ }
+ }
+ callverb(verbstr[ddm_o.choicenum + 1]);
}
/*$F- That's all. Now for the ...bar procs. */
-void standard_bar() /* Standard menu bar */
-{;
- ddm_m.init(); ddm_o.init();
- {; /* Set up menus */
- create('F',"File",'!',ddm__file,do__file); /* same ones in map_bar, below, */
- create('G',"Game",'\42',ddm__game,do__game); /* Don't forget to change the */
- create('A',"Action",'\36',ddm__action,do__action); /* if you change them */
- create('O',"Objects",'\30',ddm__objects,do__objects); /* here... */
- create('P',"People",'\31',ddm__people,do__people);
- create('W',"With",'\21',ddm__with,do__with);
- update();
- }
+void standard_bar() { /* Standard menu bar */
+ ;
+ ddm_m.init();
+ ddm_o.init();
+ {
+ ; /* Set up menus */
+ create('F', "File", '!', ddm__file, do__file); /* same ones in map_bar, below, */
+ create('G', "Game", '\42', ddm__game, do__game); /* Don't forget to change the */
+ create('A', "Action", '\36', ddm__action, do__action); /* if you change them */
+ create('O', "Objects", '\30', ddm__objects, do__objects); /* here... */
+ create('P', "People", '\31', ddm__people, do__people);
+ create('W', "With", '\21', ddm__with, do__with);
+ update();
+ }
}
/*procedure map_bar; { Special menu bar for the map (screen 99) }
@@ -769,61 +940,65 @@ begin;
end;
end;*/
-void checkclick() /* only for when the menu's displayed */
-{;
- if (mpress>0)
- {;
- if (mpy>10)
- {;
- if (! ((ddm_o.firstlix) &&
- ((mpx>=(cardinal)ddm_o.flx1*8) && (mpx<=(cardinal)ddm_o.flx2*8) &&
- (mpy>=12) && (mpy<=(cardinal)ddm_o.fly))))
- {; /* Clicked OUTSIDE the menu. */
- if (ddm_o.menunow) wipe();
- } /* No "else"- clicking on menu has no effect (only releasing) */
- } else
- {; /* Clicked on menu bar */
- ddm_m.getmenu(mpx);
- }
- } else
- {; /* NOT clicked button... */
- if (mrelease>0)
- {;
- if ((ddm_o.firstlix) &&
- ((mrx>=(cardinal)ddm_o.flx1*8) && (mrx<=(cardinal)ddm_o.flx2*8) &&
- (mry>=12) && (mry<=(cardinal)ddm_o.fly)))
- select((mry-13) / 10);
- }
- }
-}
-
-void menu_link()
-{;
- {;
- if (! ddm_o.menunow) return;
-
- check(); /* find mouse coords & click information */
- checkclick(); /* work out click codes */
-
- /* Change arrow... */
-
- switch (my) {
- case RANGE_11(0, 10): newpointer(1);
- break; /* up-arrow */
- case 11 ... 169: {;
- if ((mx>=(cardinal)ddm_o.flx1*8) && (mx<=(cardinal)ddm_o.flx2*8) && (my>10) && (my<=(cardinal)ddm_o.fly))
- newpointer(3); /* right-arrow */
- else newpointer(4); /* fletch */
- }
- break;
- case RANGE_32(169,200): newpointer(2);
- break; /* screwdriver */
- }
-
- if (! ddm_o.menunow) return;
-
- lightup();
- }
+void checkclick() { /* only for when the menu's displayed */
+ ;
+ if (mpress > 0) {
+ ;
+ if (mpy > 10) {
+ ;
+ if (!((ddm_o.firstlix) &&
+ ((mpx >= (cardinal)ddm_o.flx1 * 8) && (mpx <= (cardinal)ddm_o.flx2 * 8) &&
+ (mpy >= 12) && (mpy <= (cardinal)ddm_o.fly)))) {
+ ; /* Clicked OUTSIDE the menu. */
+ if (ddm_o.menunow) wipe();
+ } /* No "else"- clicking on menu has no effect (only releasing) */
+ } else {
+ ; /* Clicked on menu bar */
+ ddm_m.getmenu(mpx);
+ }
+ } else {
+ ; /* NOT clicked button... */
+ if (mrelease > 0) {
+ ;
+ if ((ddm_o.firstlix) &&
+ ((mrx >= (cardinal)ddm_o.flx1 * 8) && (mrx <= (cardinal)ddm_o.flx2 * 8) &&
+ (mry >= 12) && (mry <= (cardinal)ddm_o.fly)))
+ select((mry - 13) / 10);
+ }
+ }
+}
+
+void menu_link() {
+ ;
+ {
+ ;
+ if (! ddm_o.menunow) return;
+
+ check(); /* find mouse coords & click information */
+ checkclick(); /* work out click codes */
+
+ /* Change arrow... */
+
+ switch (my) {
+ case RANGE_11(0, 10):
+ newpointer(1);
+ break; /* up-arrow */
+ case 11 ... 169: {
+ ;
+ if ((mx >= (cardinal)ddm_o.flx1 * 8) && (mx <= (cardinal)ddm_o.flx2 * 8) && (my > 10) && (my <= (cardinal)ddm_o.fly))
+ newpointer(3); /* right-arrow */
+ else newpointer(4); /* fletch */
+ }
+ break;
+ case RANGE_32(169, 200):
+ newpointer(2);
+ break; /* screwdriver */
+ }
+
+ if (! ddm_o.menunow) return;
+
+ lightup();
+ }
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/dropdown.h b/engines/avalanche/dropdown.h
index 4eae8982ed..e39e6f1d67 100644
--- a/engines/avalanche/dropdown.h
+++ b/engines/avalanche/dropdown.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,62 +34,62 @@ typedef void(*proc)();
class headtype {
public:
- varying_string<8> title;
- char trigger,alttrigger;
- byte position;
- integer xpos,xright;
- proc do_setup,do_choose;
-
- headtype* init
- (char trig,char alttrig, string name, byte p, proc dw,proc dc);
- void display();
- void highlight();
- boolean extdparse(char c);
+ varying_string<8> title;
+ char trigger, alttrigger;
+ byte position;
+ integer xpos, xright;
+ proc do_setup, do_choose;
+
+ headtype *init
+ (char trig, char alttrig, string name, byte p, proc dw, proc dc);
+ void display();
+ void highlight();
+ boolean extdparse(char c);
};
struct optiontype {
- string title;
- char trigger;
- varying_string<9> shortcut;
- boolean valid;
+ string title;
+ char trigger;
+ varying_string<9> shortcut;
+ boolean valid;
};
class onemenu {
public:
- array<1,12,optiontype> oo;
- byte number;
- integer width,left;
- boolean firstlix;
- integer flx1,flx2,fly;
- byte oldy; /* used by Lightup */
- boolean menunow; /* Is there a menu now? */
- byte menunum; /* And if so, which is it? */
- byte choicenum; /* Your choice? */
- byte highlightnum;
-
- void start_afresh();
- void opt(string n, char tr, string key, boolean val);
- void display();
- void wipe();
- void lightup();
- void displayopt(byte y, boolean highlit);
- void movehighlight(shortint add);
- void select(byte n);
- void keystroke(char c);
- onemenu* init();
+ array<1, 12, optiontype> oo;
+ byte number;
+ integer width, left;
+ boolean firstlix;
+ integer flx1, flx2, fly;
+ byte oldy; /* used by Lightup */
+ boolean menunow; /* Is there a menu now? */
+ byte menunum; /* And if so, which is it? */
+ byte choicenum; /* Your choice? */
+ byte highlightnum;
+
+ void start_afresh();
+ void opt(string n, char tr, string key, boolean val);
+ void display();
+ void wipe();
+ void lightup();
+ void displayopt(byte y, boolean highlit);
+ void movehighlight(shortint add);
+ void select(byte n);
+ void keystroke(char c);
+ onemenu *init();
};
class menuset {
public:
- array<1,8,headtype> ddms;
- byte howmany;
-
- menuset* init();
- void create(char t, string n, char alttrig, proc dw,proc dc);
- void update();
- void extd(char c);
- void getcertain(byte fv);
- void getmenu(integer x);
+ array<1, 8, headtype> ddms;
+ byte howmany;
+
+ menuset *init();
+ void create(char t, string n, char alttrig, proc dw, proc dc);
+ void update();
+ void extd(char c);
+ void getcertain(byte fv);
+ void getmenu(integer x);
};
@@ -108,16 +108,16 @@ EXTERN varying_string<5> people;
- void find_what_you_can_do_with_it();
+void find_what_you_can_do_with_it();
- void parsekey(char r,char re);
+void parsekey(char r, char re);
- void menu_link();
+void menu_link();
- /* DDM menu-bar procs */
+/* DDM menu-bar procs */
- void standard_bar();
- /*procedure map_bar;*/
+void standard_bar();
+/*procedure map_bar;*/
} // End of namespace Avalanche.
diff --git a/engines/avalanche/dwidth.cpp b/engines/avalanche/dwidth.cpp
index 450ee7b532..56bf5093b7 100644
--- a/engines/avalanche/dwidth.cpp
+++ b/engines/avalanche/dwidth.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,19 +29,24 @@
namespace Avalanche {
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-integer gd,gm;
+integer gd, gm;
fonttype f;
file<fonttype> ff;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- assign(ff,"v:avalot.fnt"); reset(ff); ff >> f; close(ff);
- gd=3; gm=0; initgraph(gd,gm,"");
- for( gd=0; gd <= 15; gd ++) mem[0xa000*gd*80]=f['A'][gd];
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ assign(ff, "v:avalot.fnt");
+ reset(ff);
+ ff >> f;
+ close(ff);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ for (gd = 0; gd <= 15; gd ++) mem[0xa000 * gd * 80] = f['A'][gd];
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/edhead.cpp b/engines/avalanche/edhead.cpp
index ab7b1b8b3d..3aed1a3713 100644
--- a/engines/avalanche/edhead.cpp
+++ b/engines/avalanche/edhead.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -28,86 +28,87 @@
namespace Avalanche {
const char months[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
-const string ednaid = string("TT")+'\261'+'\36'+'\1'+'\113'+'\261'+'\231'+'\261';
+const string ednaid = string("TT") + '\261' + '\36' + '\1' + '\113' + '\261' + '\231' + '\261';
struct edhead { /* Edna header */
- /* This header starts at byte offset 177 in the .ASG file. */
- array<1,9,char> id; /* signature */
- word revision; /* EDNA revision, here 2 (1=dna256) */
- varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
- varying_string<15> shortname; /* Short name, eg Avalot */
- word number; /* Game's code number, here 2 */
- word ver; /* Version number as integer (eg 1.00 = 100) */
- varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
- varying_string<12> filename; /* Filename, eg AVALOT.EXE */
- byte os; /* Saving OS (here 1=DOS. See below for others.) */
-
- /* Info on this particular game */
-
- varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
- byte d,m; /* D, M, Y are the Day, Month & Year this game was... */
- word y; /* ...saved on. */
- varying_string<40> desc; /* Description of game (same as in Avaricius!) */
- word len; /* Length of DNA (it's not going to be above 65535!) */
-
- /* Quick reference & miscellaneous */
-
- word saves; /* no. of times this game has been saved */
- integer cash; /* contents of your wallet in numerical form */
- varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
- word points; /* your score */
-
- /* DNA values follow, then footer (which is ignored) */
+ /* This header starts at byte offset 177 in the .ASG file. */
+ array<1, 9, char> id; /* signature */
+ word revision; /* EDNA revision, here 2 (1=dna256) */
+ varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
+ varying_string<15> shortname; /* Short name, eg Avalot */
+ word number; /* Game's code number, here 2 */
+ word ver; /* Version number as integer (eg 1.00 = 100) */
+ varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
+ varying_string<12> filename; /* Filename, eg AVALOT.EXE */
+ byte os; /* Saving OS (here 1=DOS. See below for others.) */
+
+ /* Info on this particular game */
+
+ varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
+ byte d, m; /* D, M, Y are the Day, Month & Year this game was... */
+ word y; /* ...saved on. */
+ varying_string<40> desc; /* Description of game (same as in Avaricius!) */
+ word len; /* Length of DNA (it's not going to be above 65535!) */
+
+ /* Quick reference & miscellaneous */
+
+ word saves; /* no. of times this game has been saved */
+ integer cash; /* contents of your wallet in numerical form */
+ varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
+ word points; /* your score */
+
+ /* DNA values follow, then footer (which is ignored) */
};
- /* Possible values of edhead.os:
- 1 = DOS 4 = Mac
- 2 = Windows 5 = Amiga
- 3 = OS/2 6 = ST */
+/* Possible values of edhead.os:
+ 1 = DOS 4 = Mac
+ 2 = Windows 5 = Amiga
+ 3 = OS/2 6 = ST */
untyped_file f;
byte fv;
-array<1,255,word> dna256;
+array<1, 255, word> dna256;
boolean ok;
edhead e;
-void info(string x) /* info on .ASG files */
-{
- varying_string<40> describe;
-;
- assign(f,x);
- /*$I-*/ reset(f,1);
- seek(f,47);
- blockread(f,describe,40);
- blockread(f,dna256,sizeof(dna256));
- close(f); /*$I+*/
- e.revision=1;
- game="Denarius Avaricius Sextus";
- shortname="Avaricius";
- number=1;
- verstr="[?]";
- filename="AVVY.EXE";
- os=1;
- fn=x;
- d=dna256[7]; m=dna256[8]; y=dna256[9];
- desc=describe;
- len=512;
- saves=dna256[6];
- /*money:string[20]; { ditto in string form (eg 5/-, or 1 denarius)*/
- /*points:word; { your score */
+void info(string x) { /* info on .ASG files */
+ varying_string<40> describe;
+ ;
+ assign(f, x);
+ /*$I-*/ reset(f, 1);
+ seek(f, 47);
+ blockread(f, describe, 40);
+ blockread(f, dna256, sizeof(dna256));
+ close(f); /*$I+*/
+ e.revision = 1;
+ game = "Denarius Avaricius Sextus";
+ shortname = "Avaricius";
+ number = 1;
+ verstr = "[?]";
+ filename = "AVVY.EXE";
+ os = 1;
+ fn = x;
+ d = dna256[7];
+ m = dna256[8];
+ y = dna256[9];
+ desc = describe;
+ len = 512;
+ saves = dna256[6];
+ /*money:string[20]; { ditto in string form (eg 5/-, or 1 denarius)*/
+ /*points:word; { your score */
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- info("tt.asg");
-
- output << "Filename: " << x << NL;
- output << "Description: " << desc << NL;
- output << "Cash: " << dna256[30] << NL;
- output << "Score: " << dna256[36] << NL;
- output << "Date: " << dna256[7] << ' ' << copy(months,dna256[8]*3-2,3) << ' ' << dna256[9] << NL;
- output << "Number of saves: " << dna256[6] << NL;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ info("tt.asg");
+
+ output << "Filename: " << x << NL;
+ output << "Description: " << desc << NL;
+ output << "Cash: " << dna256[30] << NL;
+ output << "Score: " << dna256[36] << NL;
+ output << "Date: " << dna256[7] << ' ' << copy(months, dna256[8] * 3 - 2, 3) << ' ' << dna256[9] << NL;
+ output << "Number of saves: " << dna256[6] << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/edna.cpp b/engines/avalanche/edna.cpp
index 1c4d8d76b5..7299f7c7aa 100644
--- a/engines/avalanche/edna.cpp
+++ b/engines/avalanche/edna.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,34 +33,34 @@
namespace Avalanche {
struct ednahead { /* Edna header */
- /* This header starts at byte offset 177 in the .ASG file. */
- array<1,9,char> id; /* signature */
- word revision; /* EDNA revision, here 2 (1=dna256) */
- varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
- varying_string<15> shortname; /* Short name, eg Avalot */
- word number; /* Game's code number, here 2 */
- word ver; /* Version number as integer (eg 1.00 = 100) */
- varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
- varying_string<12> filename; /* Filename, eg AVALOT.EXE */
- byte osbyte; /* Saving OS (here 1=DOS. See below for others.*/
- varying_string<5> os; /* Saving OS in text format. */
-
- /* Info on this particular game */
-
- varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
- byte d,m; /* D, M, Y are the Day, Month & Year this game was... */
- word y; /* ...saved on. */
- varying_string<40> desc; /* Description of game (same as in Avaricius!) */
- word len; /* Length of DNA (it's not going to be above 65535!) */
-
- /* Quick reference & miscellaneous */
-
- word saves; /* no. of times this game has been saved */
- integer cash; /* contents of your wallet in numerical form */
- varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
- word points; /* your score */
-
- /* DNA values follow, then footer (which is ignored) */
+ /* This header starts at byte offset 177 in the .ASG file. */
+ array<1, 9, char> id; /* signature */
+ word revision; /* EDNA revision, here 2 (1=dna256) */
+ varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
+ varying_string<15> shortname; /* Short name, eg Avalot */
+ word number; /* Game's code number, here 2 */
+ word ver; /* Version number as integer (eg 1.00 = 100) */
+ varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
+ varying_string<12> filename; /* Filename, eg AVALOT.EXE */
+ byte osbyte; /* Saving OS (here 1=DOS. See below for others.*/
+ varying_string<5> os; /* Saving OS in text format. */
+
+ /* Info on this particular game */
+
+ varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
+ byte d, m; /* D, M, Y are the Day, Month & Year this game was... */
+ word y; /* ...saved on. */
+ varying_string<40> desc; /* Description of game (same as in Avaricius!) */
+ word len; /* Length of DNA (it's not going to be above 65535!) */
+
+ /* Quick reference & miscellaneous */
+
+ word saves; /* no. of times this game has been saved */
+ integer cash; /* contents of your wallet in numerical form */
+ varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
+ word points; /* your score */
+
+ /* DNA values follow, then footer (which is ignored) */
};
/* Possible values of edhead.os:
@@ -69,18 +69,18 @@ struct ednahead { /* Edna header */
3 = OS/2 6 = ST
7 = Archimedes */
-typedef array<1,4,char> fourtype;
+typedef array<1, 4, char> fourtype;
struct avaricius_dna {
- varying_string<39> desc;
- array<1,256,integer> dna;
+ varying_string<39> desc;
+ array<1, 256, integer> dna;
};
-const string ednaid = string("TT")+'\261'+'\60'+'\1'+'\165'+'\261'+'\231'+'\261';
+const string ednaid = string("TT") + '\261' + '\60' + '\1' + '\165' + '\261' + '\231' + '\261';
const fourtype avaricius_file = "Avvy";
string filename;
-boolean quiet,info;
+boolean quiet, info;
ednahead eh;
boolean avaricius;
@@ -92,274 +92,290 @@ boolean ok;
string first_dir;
-void explain()
-{
- output << "EDNA Bucket v1.0 (c) 1993 Thomas Thurman." << NL;
- output << " To load Avvy files." << NL;
- output << NL;
- output << "Associate .ASG files with EDNA.EXE to load them directly." << NL;
- output << NL;
- output << "Switches:" << NL;
- output << " /q (quiet) will stop EDNA from printing text to the screen." << NL;
- output << " /i (info) will print info about the file, but won't load it." << NL;
- output << NL;
- exit(1);
+void explain() {
+ output << "EDNA Bucket v1.0 (c) 1993 Thomas Thurman." << NL;
+ output << " To load Avvy files." << NL;
+ output << NL;
+ output << "Associate .ASG files with EDNA.EXE to load them directly." << NL;
+ output << NL;
+ output << "Switches:" << NL;
+ output << " /q (quiet) will stop EDNA from printing text to the screen." << NL;
+ output << " /i (info) will print info about the file, but won't load it." << NL;
+ output << NL;
+ exit(1);
}
-void fix_filename()
-{
- string p,n,groi;
+void fix_filename() {
+ string p, n, groi;
- fsplit(filename,p,n,groi);
- filename=p+n+".ASG";
+ fsplit(filename, p, n, groi);
+ filename = p + n + ".ASG";
}
-void error(string x)
-{
- output << "EDNA : " << x << NL;
- exit(255);
+void error(string x) {
+ output << "EDNA : " << x << NL;
+ exit(255);
}
-void paramparse()
-{
- byte fv;
- string x;
+void paramparse() {
+ byte fv;
+ string x;
- if (paramcount==0) explain();
+ if (paramcount == 0) explain();
- filename="";
- quiet=false; info=false;
+ filename = "";
+ quiet = false;
+ info = false;
- for( fv=1; fv <= paramcount; fv ++)
- {
- x=paramstr(fv);
+ for (fv = 1; fv <= paramcount; fv ++) {
+ x = paramstr(fv);
- if ((x[1]=='/') || (x[1]=='-'))
- switch (upcase(x[2])) { /* Parse switches */
- case 'Q': quiet=! quiet; break;
- case 'I': info=! info; break;
- default: error(string("Unknown switch! (")+x[2]+')');
- }
- else
- if (filename=="") filename=x;
- else error("Please, only one filename at a time!");
- }
+ if ((x[1] == '/') || (x[1] == '-'))
+ switch (upcase(x[2])) { /* Parse switches */
+ case 'Q':
+ quiet = ! quiet;
+ break;
+ case 'I':
+ info = ! info;
+ break;
+ default:
+ error(string("Unknown switch! (") + x[2] + ')');
+ }
+ else if (filename == "") filename = x;
+ else error("Please, only one filename at a time!");
+ }
- if (quiet && info) error("How can you give info quietly??");
+ if (quiet && info) error("How can you give info quietly??");
- if (filename=="") error("No filename given! Use EDNA alone for help.");
+ if (filename == "") error("No filename given! Use EDNA alone for help.");
- fix_filename();
+ fix_filename();
}
-void getfile()
-{
- untyped_file f;
-
- assign(f,filename);
- /*$I-*/
- reset(f,1);
- /*$I+*/
- if (ioresult!=0) error(string("Can't read file \"")+filename+"\".");
-
- seek(f,11); blockread(f,id4,4);
- avaricius=id4==avaricius_file;
-
- if (avaricius)
- {
- seek(f,47);
- blockread(f,av_eh,sizeof(av_eh));
- av_ver[0]='\4'; seek(f,31); blockread(f,av_ver[1],4);
- } else
- {
- seek(f,177);
- blockread(f,eh,sizeof(eh));
- }
-
- close(f);
+void getfile() {
+ untyped_file f;
+
+ assign(f, filename);
+ /*$I-*/
+ reset(f, 1);
+ /*$I+*/
+ if (ioresult != 0) error(string("Can't read file \"") + filename + "\".");
+
+ seek(f, 11);
+ blockread(f, id4, 4);
+ avaricius = id4 == avaricius_file;
+
+ if (avaricius) {
+ seek(f, 47);
+ blockread(f, av_eh, sizeof(av_eh));
+ av_ver[0] = '\4';
+ seek(f, 31);
+ blockread(f, av_ver[1], 4);
+ } else {
+ seek(f, 177);
+ blockread(f, eh, sizeof(eh));
+ }
+
+ close(f);
}
-string plural(byte x)
-{
- string plural_result;
- if (x==1) plural_result=""; else plural_result='s';
- return plural_result;
+string plural(byte x) {
+ string plural_result;
+ if (x == 1) plural_result = "";
+ else plural_result = 's';
+ return plural_result;
}
-void show_info()
-{
- string _game,_shortname,_verstr,_filename,_os,_fn,_desc,_money;
- integer _revision,_number,_d,_m,_y,_saves,_points;
- boolean readable,understandable;
-
- output << "Info on file " << filename << ':' << NL;
- output << NL;
- if (avaricius)
- { /* DNA-256 file. */
- _verstr=av_ver;
- _game="Denarius Avaricius Sextus"; _shortname="Avaricius";
- _filename="AVVY.EXE"; _os="DOS"; _desc=av_eh.desc;
- _revision=1; _number=1; _fn="(as above)";
-
- _money=strf(av_eh.dna[30])+" denari";
- if (av_eh.dna[30]==1) _money=_money+"us"; else _money=_money+'i';
- _d=av_eh.dna[7]; _m=av_eh.dna[8]; _y=av_eh.dna[9];
- _saves=av_eh.dna[6]; _points=av_eh.dna[36];
-
- readable=true; understandable=true;
- } else
- {
- if (eh.id==ednaid)
- { /* EDNA file. */
- _game=eh.game;
- _shortname=eh.shortname;
- _verstr=eh.verstr;
- _filename=eh.filename;
- _os=eh.os; _fn=eh.fn; _desc=eh.desc;
- _money=eh.money; _revision=eh.revision;
- _number=eh.number; _d=eh.d; _m=eh.m; _y=eh.y;
- _saves=eh.saves; _points=eh.points;
-
- readable=true; understandable=eh.revision==2;
- } else
- {
- output << "Unknown format." << NL;
- readable=false;
- }
- }
-
- if (_desc=="") _desc="<none>";
-
- if (readable)
- {
- output << "Signature is valid." << NL;
- output << "Revision of .ASG format: " << _revision << NL;
- output << NL;
- if (understandable)
- {
- output << "The file was saved by " << _game << '.' << NL;
- output << "Game number " << _number << " (" << _shortname << "), version " <<
- _verstr << ", filename " << _filename << '.' << NL;
- output << "Saved under " << _os << '.' << NL;
- output << NL;
- output << "This is " << _fn << ".ASG, saved on " << _d << '/' << _m << '/' << _y << " (d/m/y)." << NL;
- output << "Description: " << _desc << NL;
- output << "It has been saved " << _saves << " time" << plural(_saves) <<
- ". You have " << _points << " point" << plural(_points) << ',' << NL;
- output << "and " << _money << " in cash." << NL;
- } else output << "Nothing else can be discovered." << NL;
- }
-
- exit(2);
+void show_info() {
+ string _game, _shortname, _verstr, _filename, _os, _fn, _desc, _money;
+ integer _revision, _number, _d, _m, _y, _saves, _points;
+ boolean readable, understandable;
+
+ output << "Info on file " << filename << ':' << NL;
+ output << NL;
+ if (avaricius) {
+ /* DNA-256 file. */
+ _verstr = av_ver;
+ _game = "Denarius Avaricius Sextus";
+ _shortname = "Avaricius";
+ _filename = "AVVY.EXE";
+ _os = "DOS";
+ _desc = av_eh.desc;
+ _revision = 1;
+ _number = 1;
+ _fn = "(as above)";
+
+ _money = strf(av_eh.dna[30]) + " denari";
+ if (av_eh.dna[30] == 1) _money = _money + "us";
+ else _money = _money + 'i';
+ _d = av_eh.dna[7];
+ _m = av_eh.dna[8];
+ _y = av_eh.dna[9];
+ _saves = av_eh.dna[6];
+ _points = av_eh.dna[36];
+
+ readable = true;
+ understandable = true;
+ } else {
+ if (eh.id == ednaid) {
+ /* EDNA file. */
+ _game = eh.game;
+ _shortname = eh.shortname;
+ _verstr = eh.verstr;
+ _filename = eh.filename;
+ _os = eh.os;
+ _fn = eh.fn;
+ _desc = eh.desc;
+ _money = eh.money;
+ _revision = eh.revision;
+ _number = eh.number;
+ _d = eh.d;
+ _m = eh.m;
+ _y = eh.y;
+ _saves = eh.saves;
+ _points = eh.points;
+
+ readable = true;
+ understandable = eh.revision == 2;
+ } else {
+ output << "Unknown format." << NL;
+ readable = false;
+ }
+ }
+
+ if (_desc == "") _desc = "<none>";
+
+ if (readable) {
+ output << "Signature is valid." << NL;
+ output << "Revision of .ASG format: " << _revision << NL;
+ output << NL;
+ if (understandable) {
+ output << "The file was saved by " << _game << '.' << NL;
+ output << "Game number " << _number << " (" << _shortname << "), version " <<
+ _verstr << ", filename " << _filename << '.' << NL;
+ output << "Saved under " << _os << '.' << NL;
+ output << NL;
+ output << "This is " << _fn << ".ASG, saved on " << _d << '/' << _m << '/' << _y << " (d/m/y)." << NL;
+ output << "Description: " << _desc << NL;
+ output << "It has been saved " << _saves << " time" << plural(_saves) <<
+ ". You have " << _points << " point" << plural(_points) << ',' << NL;
+ output << "and " << _money << " in cash." << NL;
+ } else output << "Nothing else can be discovered." << NL;
+ }
+
+ exit(2);
}
-void load_file()
-{
- string progname,gamename,shortname,listname,exname,prog_dir;
-
- string localdir,groi;
-
- string x,y;
-
- text t;
-
- integer i,ii;
-
- gamename=fexpand(filename);
- fsplit(fexpand(paramstr(0)),localdir,groi,groi);
- listname=localdir+"EDNA.DAT";
-
- if (avaricius)
- { shortname="Avaricius"; exname="AVVY"; }
- else { shortname=eh.shortname; fsplit(eh.filename,groi,exname,groi); }
-
- assign(t,listname);
- /*$I-*/
- reset(t);
- /*$I+*/
- progname="";
- if (ioresult==0)
- {
- do {
- t >> x >> NL; t >> y >> NL;
- if (x==shortname)
- {
- progname=y;
- flush();
- }
- } while (!(eof(t)));
- }
-
- if (progname=="")
- { /* No entry in EDNA.DAT */
- output << "This file was saved by " << shortname << '.' << NL;
- output << "However, no entry was found in EDNA.DAT for that game." << NL;
- output << NL;
- output << "Please give the full path to that game, or press Enter to cancel." << NL;
- output << string("(Example: C:\\")+exname+'\\'+exname+".EXE)" << NL;
- output << NL;
- input >> progname >> NL;
- if (progname=="") exit(254); /* Quick exit! */
-
- /*$I-*/
- append(t);
- if (ioresult!=0) rewrite(t);
-
- t << shortname << NL;
- t << progname << NL;
-
- if (ioresult!=0)
- {
- output << "Strange... could not write to EDNA.DAT. (Disk read-only or full?)" << NL;
- output << "The path will be used this time only." << NL;
- output << "Press Enter..."; input >> NL;
- }
- close(t);
- /*$I+*/
- }
-
- if (! quiet) output << "Running " << shortname << ": " << progname << "..." << NL;
-
- fsplit(fexpand(progname),prog_dir,groi,groi);
- if (prog_dir[length(prog_dir)]=='\\') prog_dir[0] -= 1;
-
- /*$I-*/
- chdir(prog_dir); i=ioresult;
- swapvectors;
- exec(progname,gamename); ii=ioresult;
- swapvectors;
- chdir(first_dir);
- /*$I+*/
-
- if ((i!=0) || (ii!=0))
- {
- output << "WARNING: DOS reported an error. This probably means that the entry" << NL;
- output << "for this game in " << listname << " is wrong." << NL;
- output << NL;
- output << "Please edit this file, using" << NL;
- output << NL;
- if (lo(dosversion)<0x5)
- output << " edlin " << listname << " (or similar)" << NL;
- else
- output << " edit " << listname << NL;
- output << NL;
- output << "and change the line after \"" << shortname << "\" to show the correct path." << NL;
- output << NL;
- output << "More info is in the Avvy documentation. Good luck!" << NL;
- output << NL;
- output << "Press Enter..."; input >> NL;
- }
+void load_file() {
+ string progname, gamename, shortname, listname, exname, prog_dir;
+
+ string localdir, groi;
+
+ string x, y;
+
+ text t;
+
+ integer i, ii;
+
+ gamename = fexpand(filename);
+ fsplit(fexpand(paramstr(0)), localdir, groi, groi);
+ listname = localdir + "EDNA.DAT";
+
+ if (avaricius) {
+ shortname = "Avaricius";
+ exname = "AVVY";
+ } else {
+ shortname = eh.shortname;
+ fsplit(eh.filename, groi, exname, groi);
+ }
+
+ assign(t, listname);
+ /*$I-*/
+ reset(t);
+ /*$I+*/
+ progname = "";
+ if (ioresult == 0) {
+ do {
+ t >> x >> NL;
+ t >> y >> NL;
+ if (x == shortname) {
+ progname = y;
+ flush();
+ }
+ } while (!(eof(t)));
+ }
+
+ if (progname == "") {
+ /* No entry in EDNA.DAT */
+ output << "This file was saved by " << shortname << '.' << NL;
+ output << "However, no entry was found in EDNA.DAT for that game." << NL;
+ output << NL;
+ output << "Please give the full path to that game, or press Enter to cancel." << NL;
+ output << string("(Example: C:\\") + exname + '\\' + exname + ".EXE)" << NL;
+ output << NL;
+ input >> progname >> NL;
+ if (progname == "") exit(254); /* Quick exit! */
+
+ /*$I-*/
+ append(t);
+ if (ioresult != 0) rewrite(t);
+
+ t << shortname << NL;
+ t << progname << NL;
+
+ if (ioresult != 0) {
+ output << "Strange... could not write to EDNA.DAT. (Disk read-only or full?)" << NL;
+ output << "The path will be used this time only." << NL;
+ output << "Press Enter...";
+ input >> NL;
+ }
+ close(t);
+ /*$I+*/
+ }
+
+ if (! quiet) output << "Running " << shortname << ": " << progname << "..." << NL;
+
+ fsplit(fexpand(progname), prog_dir, groi, groi);
+ if (prog_dir[length(prog_dir)] == '\\') prog_dir[0] -= 1;
+
+ /*$I-*/
+ chdir(prog_dir);
+ i = ioresult;
+ swapvectors;
+ exec(progname, gamename);
+ ii = ioresult;
+ swapvectors;
+ chdir(first_dir);
+ /*$I+*/
+
+ if ((i != 0) || (ii != 0)) {
+ output << "WARNING: DOS reported an error. This probably means that the entry" << NL;
+ output << "for this game in " << listname << " is wrong." << NL;
+ output << NL;
+ output << "Please edit this file, using" << NL;
+ output << NL;
+ if (lo(dosversion) < 0x5)
+ output << " edlin " << listname << " (or similar)" << NL;
+ else
+ output << " edit " << listname << NL;
+ output << NL;
+ output << "and change the line after \"" << shortname << "\" to show the correct path." << NL;
+ output << NL;
+ output << "More info is in the Avvy documentation. Good luck!" << NL;
+ output << NL;
+ output << "Press Enter...";
+ input >> NL;
+ }
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- getdir(0,first_dir);
- paramparse();
- getfile();
- if (info) show_info();
- load_file();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ getdir(0, first_dir);
+ paramparse();
+ getfile();
+ if (info) show_info();
+ load_file();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/enhanced.cpp b/engines/avalanche/enhanced.cpp
index 212e6fe6a1..bfe4274191 100644
--- a/engines/avalanche/enhanced.cpp
+++ b/engines/avalanche/enhanced.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -40,28 +40,29 @@
namespace Avalanche {
-boolean isenh()
-{
- byte statefrom16;
- registers r;
-
- boolean isenh_result;
- isenh_result = false;
- {;
- ah=0x12;
- intr(0x16,r);
- statefrom16=al;
- }
- if (statefrom16 != shiftstate) return isenh_result;
- shiftstate = shiftstate ^ 0x20;
- {;
- ah=0x12;
- intr(0x16,r);
- statefrom16=al;
- }
- isenh_result = statefrom16 == shiftstate;
- shiftstate = shiftstate ^ 0x20;
- return isenh_result;
+boolean isenh() {
+ byte statefrom16;
+ registers r;
+
+ boolean isenh_result;
+ isenh_result = false;
+ {
+ ;
+ ah = 0x12;
+ intr(0x16, r);
+ statefrom16 = al;
+ }
+ if (statefrom16 != shiftstate) return isenh_result;
+ shiftstate = shiftstate ^ 0x20;
+ {
+ ;
+ ah = 0x12;
+ intr(0x16, r);
+ statefrom16 = al;
+ }
+ isenh_result = statefrom16 == shiftstate;
+ shiftstate = shiftstate ^ 0x20;
+ return isenh_result;
}
void readkeye()
@@ -73,13 +74,14 @@ void readkeye()
$CD/ $16); { INT 16 }
*/
{
- registers r; word fs;
-;
- if (atbios)
- fs=fancystuff; /* We're using an AT */
- else fs=notfancystuff; /* ditto, an XT */
- inchar=chr(lo(fs));
- extd=chr(hi(fs));
+ registers r;
+ word fs;
+ ;
+ if (atbios)
+ fs = fancystuff; /* We're using an AT */
+ else fs = notfancystuff; /* ditto, an XT */
+ inchar = chr(lo(fs));
+ extd = chr(hi(fs));
}
boolean keypressede()
@@ -92,23 +94,25 @@ boolean keypressede()
$40); { INC AX }
*/
{
- registers r;
-boolean keypressede_result;
-;
- if (atbios)
- keypressede_result=fancystuff; /* ATs get the fancy stuff */
- else keypressede_result=keypressed(); /* XTs get the usual primitive... */
-return keypressede_result;
+ registers r;
+ boolean keypressede_result;
+ ;
+ if (atbios)
+ keypressede_result = fancystuff; /* ATs get the fancy stuff */
+ else keypressede_result = keypressed(); /* XTs get the usual primitive... */
+ return keypressede_result;
}
class unit_enhanced_initialize {
- public: unit_enhanced_initialize();
+public:
+ unit_enhanced_initialize();
};
static unit_enhanced_initialize enhanced_constructor;
-unit_enhanced_initialize::unit_enhanced_initialize() {;
- /* determine bios type */
- atbios=isenh();
+unit_enhanced_initialize::unit_enhanced_initialize() {
+ ;
+ /* determine bios type */
+ atbios = isenh();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/enhanced.h b/engines/avalanche/enhanced.h
index c7bd48f8a1..13885f3c1a 100644
--- a/engines/avalanche/enhanced.h
+++ b/engines/avalanche/enhanced.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -37,7 +37,7 @@ namespace Avalanche {
EXTERN byte shiftstate;/*ABSOLUTE $40:$17;*/
EXTERN boolean atbios;
-EXTERN char inchar,extd;
+EXTERN char inchar, extd;
#undef EXTERN
#define EXTERN extern
diff --git a/engines/avalanche/enid.cpp b/engines/avalanche/enid.cpp
index 7305d94d03..08c37796ca 100644
--- a/engines/avalanche/enid.cpp
+++ b/engines/avalanche/enid.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,7 +33,7 @@
ENID Edna's manager. */
#define __enid_implementation__
- /* Loads/ saves files. */
+/* Loads/ saves files. */
/*$V-*/
@@ -52,198 +52,228 @@
namespace Avalanche {
-const string crlf = string('\15')+'\12';
+const string crlf = string('\15') + '\12';
const char tab = '\11';
const char eof_ = '\32';
-const array<1,177,char> ednafirst =
- string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!")+ /*64*/
- crlf+eof_+crlf+crlf+ /*7*/
- tab+"Glory to God in the highest,"+crlf+ /*31*/
- tab+"and on earth peace, goodwill toward men."+ /*42*/
- crlf+tab+tab+tab+tab+ /*6*/
- "Luke 2:14."+ /*10*/
- crlf+crlf+crlf+ /* 6 */
- "1234567890"+crlf; /*11*/
+const array<1, 177, char> ednafirst =
+ string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!") + /*64*/
+ crlf + eof_ + crlf + crlf + /*7*/
+ tab + "Glory to God in the highest," + crlf + /*31*/
+ tab + "and on earth peace, goodwill toward men." + /*42*/
+ crlf + tab + tab + tab + tab + /*6*/
+ "Luke 2:14." + /*10*/
+ crlf + crlf + crlf + /* 6 */
+ "1234567890" +crlf; /*11*/
-const string ednaid = string("TT")+'\261'+'\60'+'\1'+'\165'+'\261'+'\231'+'\261';
+const string ednaid = string("TT") + '\261' + '\60' + '\1' + '\165' + '\261' + '\231' + '\261';
const integer ttage = 18;
-const array<1,16,char> ttwashere = "Thomas was here ";
+const array<1, 16, char> ttwashere = "Thomas was here ";
boolean bug;
-string expanddate(byte d,byte m, word y);
+string expanddate(byte d, byte m, word y);
-const array<1,12,varying_string<7> > months =
-{{"Jan#","Febr#","March","April","May","June","July","August",
-"Septem*","Octo*","Novem*","Decem*"}};
+const array<1, 12, varying_string<7> > months = {
+ {
+ "Jan#", "Febr#", "March", "April", "May", "June", "July", "August",
+ "Septem*", "Octo*", "Novem*", "Decem*"
+ }
+};
static varying_string<10> month;
-static void addon(string x) { month[0] -= 1; month=month+x; }
-
-string expanddate(byte d,byte m, word y)
-{
- varying_string<4> day;
-
-
- string expanddate_result;
- month=months[m];
- switch (month[length(month)]) {
- case '#': addon("uary"); break;
- case '*': addon("ber"); break;
- }
-
- day=strf(d);
-
- if (set::of(range(1,9),range(21,31), eos).has(d))
- switch (d % 10) {
- case 1: day=day+"st"; break;
- case 2: day=day+"nd"; break;
- case 3: day=day+"rd"; break;
- default: day=day+"th";
- }
+static void addon(string x) {
+ month[0] -= 1;
+ month = month + x;
+}
- expanddate_result=day+' '+month+' '+strf(y);
- return expanddate_result;
+string expanddate(byte d, byte m, word y) {
+ varying_string<4> day;
+
+
+ string expanddate_result;
+ month = months[m];
+ switch (month[length(month)]) {
+ case '#':
+ addon("uary");
+ break;
+ case '*':
+ addon("ber");
+ break;
+ }
+
+ day = strf(d);
+
+ if (set::of(range(1, 9), range(21, 31), eos).has(d))
+ switch (d % 10) {
+ case 1:
+ day = day + "st";
+ break;
+ case 2:
+ day = day + "nd";
+ break;
+ case 3:
+ day = day + "rd";
+ break;
+ default:
+ day = day + "th";
+ }
+
+ expanddate_result = day + ' ' + month + ' ' + strf(y);
+ return expanddate_result;
}
void edna_save(string name);
-static void show_bug(char icon, string strn)
-{ display(string("\7\6\23")+icon+"\26\r"+strn+'\15'); }
+static void show_bug(char icon, string strn) {
+ display(string("\7\6\23") + icon + "\26\r" + strn + '\15');
+}
-static boolean test_bug(byte what)
-{
- boolean test_bug_result;
- if (what==0) { test_bug_result=false; return test_bug_result; }
- switch (what) {
- case 2: show_bug('7',"Error in filename!"); break;
- case 101: show_bug('6',"Disk full!"); break;
- case 150: show_bug('4',"Disk is write-protected!"); break;
- default: show_bug('B',"Saving error!");
- }
- test_bug_result=true;
- return test_bug_result;
+static boolean test_bug(byte what) {
+ boolean test_bug_result;
+ if (what == 0) {
+ test_bug_result = false;
+ return test_bug_result;
+ }
+ switch (what) {
+ case 2:
+ show_bug('7', "Error in filename!");
+ break;
+ case 101:
+ show_bug('6', "Disk full!");
+ break;
+ case 150:
+ show_bug('4', "Disk is write-protected!");
+ break;
+ default:
+ show_bug('B', "Saving error!");
+ }
+ test_bug_result = true;
+ return test_bug_result;
}
-void edna_save(string name)
-{
- untyped_file f;
- ednahead eh;
- word groi;
- string groi2,path;
- word tempd,tempm;
+void edna_save(string name) {
+ untyped_file f;
+ ednahead eh;
+ word groi;
+ string groi2, path;
+ word tempd, tempm;
- if (name=="")
- { /* We were given no name. Do we have a default? */
- if (enid_filename=="")
- { /* No */
- filename_edit(); /* Request one. */
- return;
- } else /* Yes */
- name=enid_filename;
- }
+ if (name == "") {
+ /* We were given no name. Do we have a default? */
+ if (enid_filename == "") {
+ /* No */
+ filename_edit(); /* Request one. */
+ return;
+ } else /* Yes */
+ name = enid_filename;
+ }
- wait(); /* Put up hourglass pointer */
+ wait(); /* Put up hourglass pointer */
- fillchar(eh,sizeof(eh),'\261'); /* Fill up the edhead */
+ fillchar(eh, sizeof(eh), '\261'); /* Fill up the edhead */
- dna.saves += 1; /* It's been saved one more time... */
+ dna.saves += 1; /* It's been saved one more time... */
- {
+ {
- /* Info about this program */
+ /* Info about this program */
- eh.id=ednaid; /* Edna's signature */
- eh.revision=thisgamecode; /* 2- second revision of .ASG format */
- eh.game="Lord Avalot d'Argent"; /* Title of game */
- eh.shortname="Avalot";
- eh.number=2; /* Second Avvy game */
- eh.ver=thisvercode; /* Version 1.00 */
- eh.verstr=vernum; /* ditto */
- eh.filename="AVALOT.EXE"; /* program's filename */
- eh.osbyte=1; /* Saved under DOS */
- eh.os="DOS";
+ eh.id = ednaid; /* Edna's signature */
+ eh.revision = thisgamecode; /* 2- second revision of .ASG format */
+ eh.game = "Lord Avalot d'Argent"; /* Title of game */
+ eh.shortname = "Avalot";
+ eh.number = 2; /* Second Avvy game */
+ eh.ver = thisvercode; /* Version 1.00 */
+ eh.verstr = vernum; /* ditto */
+ eh.filename = "AVALOT.EXE"; /* program's filename */
+ eh.osbyte = 1; /* Saved under DOS */
+ eh.os = "DOS";
- /* Info on this particular game */
+ /* Info on this particular game */
- fsplit(name,path,eh.fn,groi2); /* fn = filename of this game */
- getdate(eh.y,tempm,tempd,groi); /* Day, month & year when the game was saved */
- eh.d=tempd; eh.m=tempm;
- eh.desc=roomname; /* Description of game (same as in Avaricius!) */
- eh.len=sizeof(dna); /* Length of DNA. */
+ fsplit(name, path, eh.fn, groi2); /* fn = filename of this game */
+ getdate(eh.y, tempm, tempd, groi); /* Day, month & year when the game was saved */
+ eh.d = tempd;
+ eh.m = tempm;
+ eh.desc = roomname; /* Description of game (same as in Avaricius!) */
+ eh.len = sizeof(dna); /* Length of DNA. */
- /* Quick reference & miscellaneous */
+ /* Quick reference & miscellaneous */
- eh.saves=dna.saves; /* no. of times this game has been saved */
- eh.cash=dna.pence; /* contents of your wallet in numerical form */
- eh.money=lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/
- eh.points=dna.score; /* your score */
+ eh.saves = dna.saves; /* no. of times this game has been saved */
+ eh.cash = dna.pence; /* contents of your wallet in numerical form */
+ eh.money = lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/
+ eh.points = dna.score; /* your score */
- name=path+eh.fn+".ASG";
- }
+ name = path + eh.fn + ".ASG";
+ }
- assign(f,name);
- /*$I-*/
- rewrite(f,1);
- if (test_bug(ioresult)) return;
+ assign(f, name);
+ /*$I-*/
+ rewrite(f, 1);
+ if (test_bug(ioresult)) return;
- blockwrite(f,ednafirst,177); if (test_bug(ioresult)) return;
- blockwrite(f,eh,sizeof(eh)); if (test_bug(ioresult)) return;
- blockwrite(f,dna,sizeof(dna)); if (test_bug(ioresult)) return;
+ blockwrite(f, ednafirst, 177);
+ if (test_bug(ioresult)) return;
+ blockwrite(f, eh, sizeof(eh));
+ if (test_bug(ioresult)) return;
+ blockwrite(f, dna, sizeof(dna));
+ if (test_bug(ioresult)) return;
- for( groi=1; groi <= numtr; groi ++)
- { triptype& with = tr[groi];
- if (with.quick)
- {
- blockwrite(f,groi,1); if (test_bug(ioresult)) return;
- savedata(f); if (test_bug(ioresult)) return;
- }}
+ for (groi = 1; groi <= numtr; groi ++) {
+ triptype &with = tr[groi];
+ if (with.quick) {
+ blockwrite(f, groi, 1);
+ if (test_bug(ioresult)) return;
+ savedata(f);
+ if (test_bug(ioresult)) return;
+ }
+ }
- groi=177; blockwrite(f,groi,1);
+ groi = 177;
+ blockwrite(f, groi, 1);
- blockwrite(f,times,sizeof(times)); /* Timeout.times: Timers. */
+ blockwrite(f, times, sizeof(times)); /* Timeout.times: Timers. */
- if (test_bug(ioresult)) return;
+ if (test_bug(ioresult)) return;
- blockwrite(f,seq,sizeof(seq)); /* Sequencer information. */
+ blockwrite(f, seq, sizeof(seq)); /* Sequencer information. */
- if (test_bug(ioresult)) return;
+ if (test_bug(ioresult)) return;
- for( groi=1; groi <= ttage; groi ++)
- blockwrite(f,ttwashere[1-1],16);
+ for (groi = 1; groi <= ttage; groi ++)
+ blockwrite(f, ttwashere[1 - 1], 16);
- if (test_bug(ioresult)) return;
+ if (test_bug(ioresult)) return;
- close(f);
- if (test_bug(ioresult)) return;
- /*$I+*/
+ close(f);
+ if (test_bug(ioresult)) return;
+ /*$I+*/
- display(string('\6')+"Saved: "+'\22'+name+'.');
- enid_filename=name;
+ display(string('\6') + "Saved: " + '\22' + name + '.');
+ enid_filename = name;
}
-void loaderror(string x, char icon)
-{
- if (holdthedawn)
- {
- holdthedawn=false;
- dawn();
- }
- display(string('\7')+'\6'+'\23'+icon+'\26'+"Loading error: "+"\r\r\22"+x);
- bug=true;
+void loaderror(string x, char icon) {
+ if (holdthedawn) {
+ holdthedawn = false;
+ dawn();
+ }
+ display(string('\7') + '\6' + '\23' + icon + '\26' + "Loading error: " + "\r\r\22" + x);
+ bug = true;
}
-typedef array<1,4,char> fourtype;
+typedef array<1, 4, char> fourtype;
@@ -252,172 +282,171 @@ const fourtype avaricius_file = "Avvy";
void edna_load(string name)
{
- untyped_file f;
- ednahead eh;
- byte fv;
- byte io;
- string path,fn,groi;
- fourtype id4;
+ untyped_file f;
+ ednahead eh;
+ byte fv;
+ byte io;
+ string path, fn, groi;
+ fourtype id4;
- word len2load;
+ word len2load;
- if (name=="")
- { /* No filename specified, so let's call the filer. */
- name=do_filer();
- if (name=="") return; /* STILL no filename, so they must have cancelled. */
- }
+ if (name == "") {
+ /* No filename specified, so let's call the filer. */
+ name = do_filer();
+ if (name == "") return; /* STILL no filename, so they must have cancelled. */
+ }
- bug=false;
+ bug = false;
- wait(); /* Put up hourglass pointer */
+ wait(); /* Put up hourglass pointer */
- fsplit(name,path,fn,groi);
- name=path+fn+".ASG";
+ fsplit(name, path, fn, groi);
+ name = path + fn + ".ASG";
- /* Load the file into memory */
+ /* Load the file into memory */
- /*$I-*/
- assign(f,name);
- reset(f,1);
+ /*$I-*/
+ assign(f, name);
+ reset(f, 1);
- io=ioresult;
- if (io!=0)
- switch (io) {
- case 2: loaderror("File not found!",'8'); break;
- case 3: loaderror("Directory not found!",'3'); break;
- default: loaderror(string("Error no.")+strf(io),'1');
- }
+ io = ioresult;
+ if (io != 0)
+ switch (io) {
+ case 2:
+ loaderror("File not found!", '8');
+ break;
+ case 3:
+ loaderror("Directory not found!", '3');
+ break;
+ default:
+ loaderror(string("Error no.") + strf(io), '1');
+ }
- if (bug) return;
+ if (bug) return;
- seek(f,11); blockread(f,id4,4);
- if (id4==avaricius_file)
- {
- loaderror("That's an Avaricius file!",'1');
- close(f);
- return;
- }
+ seek(f, 11);
+ blockread(f, id4, 4);
+ if (id4 == avaricius_file) {
+ loaderror("That's an Avaricius file!", '1');
+ close(f);
+ return;
+ }
- seek(f,177); /* bypass ednafirst */
+ seek(f, 177); /* bypass ednafirst */
- blockread(f,eh,sizeof(eh)); /* load ednahead */
+ blockread(f, eh, sizeof(eh)); /* load ednahead */
- /* Check ednahead for errors */
+ /* Check ednahead for errors */
- {
- if ((eh.id!=ednaid) || (eh.revision!=2)) loaderror("Not an EDNA file!",'7'); else
- if (eh.number!=2) loaderror(string("That file was saved by ")+eh.shortname+'!','1');
- }
+ {
+ if ((eh.id != ednaid) || (eh.revision != 2)) loaderror("Not an EDNA file!", '7');
+ else if (eh.number != 2) loaderror(string("That file was saved by ") + eh.shortname + '!', '1');
+ }
- if (bug)
- {
- close(f);
- return;
- }
+ if (bug) {
+ close(f);
+ return;
+ }
- len2load=eh.len;
+ len2load = eh.len;
- if (eh.len!=(cardinal)sizeof(dna))
- {
- if (holdthedawn)
- {
- holdthedawn=false;
- dawn();
- }
- display("\233\26Warning: \3\rEDNA size doesn't match.\f");
- if (eh.len>(cardinal)sizeof(dna))
- len2load=sizeof(dna); /* BIGGER than ours */
- else fillchar(dna,sizeof(dna),'\0'); /* Otherwise, smaller. */
- }
+ if (eh.len != (cardinal)sizeof(dna)) {
+ if (holdthedawn) {
+ holdthedawn = false;
+ dawn();
+ }
+ display("\233\26Warning: \3\rEDNA size doesn't match.\f");
+ if (eh.len > (cardinal)sizeof(dna))
+ len2load = sizeof(dna); /* BIGGER than ours */
+ else fillchar(dna, sizeof(dna), '\0'); /* Otherwise, smaller. */
+ }
- blockread(f,dna,len2load);
+ blockread(f, dna, len2load);
- for( fv=1; fv <= numtr; fv ++)
- { triptype& with = tr[fv];
- if (with.quick) done();} /* Deallocate sprite */
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick) done();
+ } /* Deallocate sprite */
- do {
- blockread(f,fv,1);
- if (fv!=177) tr[fv].loaddata(f);
- } while (!(fv==177));
+ do {
+ blockread(f, fv, 1);
+ if (fv != 177) tr[fv].loaddata(f);
+ } while (!(fv == 177));
- blockread(f,times,sizeof(times)); /* Timeout.times: Timers. */
+ blockread(f, times, sizeof(times)); /* Timeout.times: Timers. */
- blockread(f,seq,sizeof(seq)); /* Sequencer information. */
+ blockread(f, seq, sizeof(seq)); /* Sequencer information. */
- close(f);
+ close(f);
- seescroll=true; /* This prevents display of the new sprites before the
+ seescroll = true; /* This prevents display of the new sprites before the
new picture is loaded. */
- if (holdthedawn)
- {
- holdthedawn=false;
- dawn();
- }
+ if (holdthedawn) {
+ holdthedawn = false;
+ dawn();
+ }
- display(string('\6')+"Loaded: "+'\22'+name+'\3'+"\r\r"+eh.desc+"\r\r"+"saved on "+
- expanddate(eh.d,eh.m,eh.y)+'.');
+ display(string('\6') + "Loaded: " + '\22' + name + '\3' + "\r\r" + eh.desc + "\r\r" + "saved on " +
+ expanddate(eh.d, eh.m, eh.y) + '.');
- forget_chunks();
+ forget_chunks();
- minor_redraw();
+ minor_redraw();
- whereis[pavalot]=dna.room;
-/* showscore;*/
- alive=true;
+ whereis[pavalot] = dna.room;
+ /* showscore;*/
+ alive = true;
- objectlist();
-/*$I+*/
+ objectlist();
+ /*$I+*/
- enid_filename=name;
+ enid_filename = name;
}
void dir(string where);
-static string path,groi;
+static string path, groi;
-static void showheader()
-{
- display(string("Dir: ")+path+"\r\r\4");
+static void showheader() {
+ display(string("Dir: ") + path + "\r\r\4");
}
void dir(string where)
- /* OK, it worked in Avaricius, let's do it in Avalot! */
+/* OK, it worked in Avaricius, let's do it in Avalot! */
{
- searchrec s;
- byte count;
+ searchrec s;
+ byte count;
- if ((where!="") && (!(set::of('\\',':', eos).has(where[length(where)]))))
- where=where+'\\';
- fsplit(where,path,groi,groi);
- path=path+"*.asg";
- count=0;
+ if ((where != "") && (!(set::of('\\', ':', eos).has(where[length(where)]))))
+ where = where + '\\';
+ fsplit(where, path, groi, groi);
+ path = path + "*.asg";
+ count = 0;
- findfirst(path,anyfile,s);
- showheader();
+ findfirst(path, anyfile, s);
+ showheader();
- while (doserror==0)
- {
- count += 1;
- if (count==11)
- {
- display("\r\nPress Enter...");
- showheader();
- count=1;
- }
+ while (doserror == 0) {
+ count += 1;
+ if (count == 11) {
+ display("\r\nPress Enter...");
+ showheader();
+ count = 1;
+ }
- display(s.name+"\r\4");
+ display(s.name + "\r\4");
- findnext(s);
- }
+ findnext(s);
+ }
- if (count==0)
- display("No files found!");
- else display("\nThat's all!");
+ if (count == 0)
+ display("No files found!");
+ else display("\nThat's all!");
}
@@ -425,183 +454,178 @@ void avvy_background() /* Not really a filing procedure,
but it's only called just before edna_load, so I thought I'd put it
in Enid instead of, say, Lucerna. */
{
-/* port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1; port[$3CF]:=1; { Blue. }*/
-/*
- asm
- mov dx,$3c4; mov al,2; out dx,al; { Set up the VGA to use the "blue" }
- mov dx,$3ce; mov al,4; out dx,al; { register. }
- mov dx,$3c5; mov al,1; out dx,al;
- mov dx,$3cf; out dx,al;
+ /* port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1; port[$3CF]:=1; { Blue. }*/
+ /*
+ asm
+ mov dx,$3c4; mov al,2; out dx,al; { Set up the VGA to use the "blue" }
+ mov dx,$3ce; mov al,4; out dx,al; { register. }
+ mov dx,$3c5; mov al,1; out dx,al;
+ mov dx,$3cf; out dx,al;
- mov bx,$A000; call far ptr @drawup;
- mov bx,$A400; call far ptr @drawup;
+ mov bx,$A000; call far ptr @drawup;
+ mov bx,$A400; call far ptr @drawup;
- jmp @the_end;
+ jmp @the_end;
- @drawup:
+ @drawup:
- mov es,bx; { The segment to copy it to... }
- mov di,$370; { The offset (10 pixels down, plus 1 offset.) }
+ mov es,bx; { The segment to copy it to... }
+ mov di,$370; { The offset (10 pixels down, plus 1 offset.) }
- mov cx,10;
- mov ax,$AA4A; call far ptr @sameline; { Print "AVVY" }
- mov ax,$AEAA; call far ptr @sameline;
- mov ax,$A4EA; call far ptr @sameline;
- mov ax,$44A4; call far ptr @sameline;
+ mov cx,10;
+ mov ax,$AA4A; call far ptr @sameline; { Print "AVVY" }
+ mov ax,$AEAA; call far ptr @sameline;
+ mov ax,$A4EA; call far ptr @sameline;
+ mov ax,$44A4; call far ptr @sameline;
- mov cx,9;
- mov ax,$AAA4; call far ptr @sameline; { Print "YAVV" }
- mov ax,$AAEA; call far ptr @sameline;
- mov ax,$AA4E; call far ptr @sameline;
- mov ax,$444A; call far ptr @sameline;
+ mov cx,9;
+ mov ax,$AAA4; call far ptr @sameline; { Print "YAVV" }
+ mov ax,$AAEA; call far ptr @sameline;
+ mov ax,$AA4E; call far ptr @sameline;
+ mov ax,$444A; call far ptr @sameline;
- mov ax,$4AAA; call far ptr @sameline; { Print "VYAV" }
- mov ax,$AAAE; call far ptr @sameline;
- mov ax,$EAA4; call far ptr @sameline;
- mov ax,$A444; call far ptr @sameline;
+ mov ax,$4AAA; call far ptr @sameline; { Print "VYAV" }
+ mov ax,$AAAE; call far ptr @sameline;
+ mov ax,$EAA4; call far ptr @sameline;
+ mov ax,$A444; call far ptr @sameline;
- mov ax,$A4AA; call far ptr @sameline; { Print "VVYA" }
- mov ax,$EAAA; call far ptr @sameline;
- mov ax,$4EAA; call far ptr @sameline;
- mov ax,$4A44; call far ptr @sameline;
+ mov ax,$A4AA; call far ptr @sameline; { Print "VVYA" }
+ mov ax,$EAAA; call far ptr @sameline;
+ mov ax,$4EAA; call far ptr @sameline;
+ mov ax,$4A44; call far ptr @sameline;
- ret;
+ ret;
- { Replicate the same line many times. }
+ { Replicate the same line many times. }
- @sameline:
- { Requires:
- what to copy in AX,
- how many lines in CX, and
- original offset in DI. }
- push cx;
- push di;
+ @sameline:
+ { Requires:
+ what to copy in AX,
+ how many lines in CX, and
+ original offset in DI. }
+ push cx;
+ push di;
- @samelineloop:
+ @samelineloop:
- push cx;
- mov cx,40; { No. of times to repeat it on one line. }
+ push cx;
+ mov cx,40; { No. of times to repeat it on one line. }
- repz stosw; { Fast word-copying }
+ repz stosw; { Fast word-copying }
- pop cx;
+ pop cx;
- add di,1200; { The next one will be 16 lines down. }
+ add di,1200; { The next one will be 16 lines down. }
- loop @samelineloop;
- pop di;
- add di,80;
- pop cx;
+ loop @samelineloop;
+ pop di;
+ add di,80;
+ pop cx;
- ret;
+ ret;
- @the_end:
- end;
-*/
-blitfix();
+ @the_end:
+ end;
+ */
+ blitfix();
}
-void to_sundry(sundry& sund)
-{
- {
- sund.qenid_filename=enid_filename;
- sund.qsoundfx=soundfx;
- sund.qthinks=thinks;
- sund.qthinkthing=thinkthing;
- }
+void to_sundry(sundry &sund) {
+ {
+ sund.qenid_filename = enid_filename;
+ sund.qsoundfx = soundfx;
+ sund.qthinks = thinks;
+ sund.qthinkthing = thinkthing;
+ }
}
-void from_sundry(sundry sund)
-{
- {
- enid_filename=sund.qenid_filename;
- soundfx=sund.qsoundfx;
- thinks=sund.qthinks;
- thinkthing=sund.qthinkthing;
- }
+void from_sundry(sundry sund) {
+ {
+ enid_filename = sund.qenid_filename;
+ soundfx = sund.qsoundfx;
+ thinks = sund.qthinks;
+ thinkthing = sund.qthinkthing;
+ }
}
-void restore_dna()
-{
- word here,fv;
- sundry sund;
-
- move(mem[storage_seg*storage_ofs+3],dna,sizeof(dna));
- move(mem[storage_seg*storage_ofs+3+sizeof(dna)],times,sizeof(times));
- move(mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)],
- seq,sizeof(seq));
- move(mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)],
- sund,sizeof(sund));
- from_sundry(sund);
-
- here=storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)+sizeof(sund);
- do {
- fv=mem[storage_seg*here]; here += 1;
- if (fv!=177) tr[fv].load_data_from_mem(here);
- } while (!(fv==177));
+void restore_dna() {
+ word here, fv;
+ sundry sund;
+
+ move(mem[storage_seg * storage_ofs + 3], dna, sizeof(dna));
+ move(mem[storage_seg * storage_ofs + 3 + sizeof(dna)], times, sizeof(times));
+ move(mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times)],
+ seq, sizeof(seq));
+ move(mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq)],
+ sund, sizeof(sund));
+ from_sundry(sund);
+
+ here = storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq) + sizeof(sund);
+ do {
+ fv = mem[storage_seg * here];
+ here += 1;
+ if (fv != 177) tr[fv].load_data_from_mem(here);
+ } while (!(fv == 177));
}
-void edna_reload()
-{
+void edna_reload() {
- restore_dna();
+ restore_dna();
- seescroll=true; /* This prevents display of the new sprites before the
+ seescroll = true; /* This prevents display of the new sprites before the
new picture is loaded. */
- major_redraw();
+ major_redraw();
- whereis[pavalot]=dna.room;
+ whereis[pavalot] = dna.room;
- alive=true;
+ alive = true;
- objectlist();
+ objectlist();
- if (holdthedawn)
- {
- holdthedawn=false;
- dawn();
- }
+ if (holdthedawn) {
+ holdthedawn = false;
+ dawn();
+ }
}
-void back_to_bootstrap(byte what)
-{
- byte fv;
- word here;
- sundry sund;
-
- mem[storage_seg*storage_ofs]=what; /* Save the operation code. */
- to_sundry(sund); /* Save the sundry information. */
-
- /* Save the DNA, times and sequencer info: */
- move(dna,mem[storage_seg*storage_ofs+3],sizeof(dna));
- move(times,mem[storage_seg*storage_ofs+3+sizeof(dna)],sizeof(times));
- move(seq,mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)],
- sizeof(seq));
- move(sund,
- mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)],
- sizeof(sund));
-
- here=storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)+sizeof(sund);
-
- for( fv=1; fv <= numtr; fv ++)
- { triptype& with = tr[fv];
- if (with.quick)
- {
- mem[storage_seg*here]=fv; here += 1;
- save_data_to_mem(here);
- }}
- mem[storage_seg*here]=177;
-
- exit(77); /* Code to return to the Bootstrap. */
+void back_to_bootstrap(byte what) {
+ byte fv;
+ word here;
+ sundry sund;
+
+ mem[storage_seg * storage_ofs] = what; /* Save the operation code. */
+ to_sundry(sund); /* Save the sundry information. */
+
+ /* Save the DNA, times and sequencer info: */
+ move(dna, mem[storage_seg * storage_ofs + 3], sizeof(dna));
+ move(times, mem[storage_seg * storage_ofs + 3 + sizeof(dna)], sizeof(times));
+ move(seq, mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times)],
+ sizeof(seq));
+ move(sund,
+ mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq)],
+ sizeof(sund));
+
+ here = storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq) + sizeof(sund);
+
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick) {
+ mem[storage_seg * here] = fv;
+ here += 1;
+ save_data_to_mem(here);
+ }
+ }
+ mem[storage_seg * here] = 177;
+
+ exit(77); /* Code to return to the Bootstrap. */
}
-boolean there_was_a_problem()
-{
- boolean there_was_a_problem_result;
- there_was_a_problem_result=bug;
- return there_was_a_problem_result;
+boolean there_was_a_problem() {
+ boolean there_was_a_problem_result;
+ there_was_a_problem_result = bug;
+ return there_was_a_problem_result;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/enid.h b/engines/avalanche/enid.h
index d9f0a5416f..95b03b7749 100644
--- a/engines/avalanche/enid.h
+++ b/engines/avalanche/enid.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/filer.cpp b/engines/avalanche/filer.cpp
index c96f445bde..b8e3c8bfe0 100644
--- a/engines/avalanche/filer.cpp
+++ b/engines/avalanche/filer.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -36,64 +36,66 @@
namespace Avalanche {
struct windowtype {
- integer x1,y1,x2,y2;
- varying_string<20> title;
+ integer x1, y1, x2, y2;
+ varying_string<20> title;
};
- struct ednahead { /* Edna header */
- /* This header starts at byte offset 177 in the .ASG file. */
- array<1,9,char> id; /* signature */
- word revision; /* EDNA revision, here 2 (1=dna256) */
- varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
- varying_string<15> shortname; /* Short name, eg Avalot */
- word number; /* Game's code number, here 2 */
- word ver; /* Version number as integer (eg 1.00 = 100) */
- varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
- varying_string<12> filename; /* Filename, eg AVALOT.EXE */
- byte osbyte; /* Saving OS (here 1=DOS. See below for others.*/
- varying_string<5> os; /* Saving OS (here 1=DOS. See below for others.*/
-
- /* Info on this particular game */
-
- varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
- byte d,m; /* D, M, Y are the Day, Month & Year this game was... */
- word y; /* ...saved on. */
- varying_string<40> desc; /* Description of game (same as in Avaricius!) */
- word len; /* Length of DNA (it's not going to be above 65535!) */
-
- /* Quick reference & miscellaneous */
-
- word saves; /* no. of times this game has been saved */
- integer cash; /* contents of your wallet in numerical form */
- varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
- word points; /* your score */
-
- /* DNA values follow, then footer (which is ignored) */
- };
+struct ednahead { /* Edna header */
+ /* This header starts at byte offset 177 in the .ASG file. */
+ array<1, 9, char> id; /* signature */
+ word revision; /* EDNA revision, here 2 (1=dna256) */
+ varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
+ varying_string<15> shortname; /* Short name, eg Avalot */
+ word number; /* Game's code number, here 2 */
+ word ver; /* Version number as integer (eg 1.00 = 100) */
+ varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
+ varying_string<12> filename; /* Filename, eg AVALOT.EXE */
+ byte osbyte; /* Saving OS (here 1=DOS. See below for others.*/
+ varying_string<5> os; /* Saving OS (here 1=DOS. See below for others.*/
+
+ /* Info on this particular game */
+
+ varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
+ byte d, m; /* D, M, Y are the Day, Month & Year this game was... */
+ word y; /* ...saved on. */
+ varying_string<40> desc; /* Description of game (same as in Avaricius!) */
+ word len; /* Length of DNA (it's not going to be above 65535!) */
+
+ /* Quick reference & miscellaneous */
+
+ word saves; /* no. of times this game has been saved */
+ integer cash; /* contents of your wallet in numerical form */
+ varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
+ word points; /* your score */
+
+ /* DNA values follow, then footer (which is ignored) */
+};
const integer border = 1; /* size of border on shadowboxes */
-const array<1,4,varying_string<7> > buttons = {{"Okay","Wipe","Cancel","Info..."}};
+const array<1, 4, varying_string<7> > buttons = {{"Okay", "Wipe", "Cancel", "Info..."}};
const integer files = 3;
const integer dirs = 4;
const integer drlen = 15; /* no. of drives on one line */
-const array<1,4,windowtype> threewins =
- {{{155, 12, 630, 22, "Name"},
- {15, 25, 410, 70, "Drives"},
- {15, 83, 480, 179, "Files (*.ASG)"},
- {490, 83, 630, 179, "Subdirectories"}}};
+const array<1, 4, windowtype> threewins = {
+ { {155, 12, 630, 22, "Name"},
+ {15, 25, 410, 70, "Drives"},
+ {15, 83, 480, 179, "Files (*.ASG)"},
+ {490, 83, 630, 179, "Subdirectories"}
+ }
+};
const integer name_win = 1;
const integer drive_win = 2;
const integer file_win = 3;
const integer subdir_win = 4;
-matrix<3,4,1,77,varying_string<12> > lists;
-array<1,77,varying_string<40> > descs;
-array<3,4,byte> nums,where,top;
+matrix<3, 4, 1, 77, varying_string<12> > lists;
+array<1, 77, varying_string<40> > descs;
+array<3, 4, byte> nums, where, top;
searchrec s;
boolean loading;
varying_string<26> drives;
@@ -104,716 +106,847 @@ varying_string<17> doing;
pathstr filename;
boolean filefound;
-void shadow(integer x1,integer y1,integer x2,integer y2, byte hc,byte sc)
-{
- byte fv;
-;
- for( fv=0; fv <= border; fv ++)
- {;
- setfillstyle(1,hc);
- bar(x1+fv,y1+fv,x1+fv,y2-fv);
- bar(x1+fv,y1+fv,x2-fv,y1+fv);
-
- setfillstyle(1,sc);
- bar(x2-fv,y1+fv,x2-fv,y2-fv);
- bar(x1+fv,y2-fv,x2-fv,y2-fv);
- }
-}
-
-void shbox(integer x1,integer y1,integer x2,integer y2, string t)
-{
- const integer fc = 7;
-;
- shadow(x1,y1,x2,y2,15,8);
- setfillstyle(1,fc);
- bar(x1+border+1,y1+border+1,x2-border-1,y2-border-1);
- setcolor(1); x1=(x2-x1) / 2+x1; y1=(y2-y1) / 2+y1;
- outtextxy(x1,y1,t);
- if (length(t)>1)
- {;
- fillchar(t[2],length(t)-1,'\40'); t[1]='_';
- outtextxy(x1-1,y1+1,t);
- }
-}
-
-void show_drives()
-{
- byte fv;
-;
- settextjustify(1,1);
- for( fv=0; fv <= length(drives)-1; fv ++)
- shbox((fv % drlen)*25+25,(fv / drlen)*19+31,
- (fv % drlen)*25+40,45+(fv / drlen)*19,drives[fv+1]);
- setcolor(11);
- settextjustify(0,2);
-}
-
-void box(integer x1,integer y1,integer x2,integer y2, string z)
-{;
- rectangle(x1,y1,x2,y2);
- outtextxy(x1+1,y1-10,z+':');
- outtextxy(x1,y1-9,"_");
-}
-
-string lowstr(string x)
-{
- byte fv;
-string lowstr_result;
-;
- for( fv=1; fv <= length(x); fv ++)
- if (set::of(range('A','Z'), eos).has(x[fv])) x[fv] += 32;
- lowstr_result=x;
-return lowstr_result;
-}
-
-char lowchar(char x)
-{
- char lowchar_result;
- if (set::of(range('A','Z'), eos).has(x)) x -= 32;
- lowchar_result=x;
- return lowchar_result;
-}
-
-void getcurrent()
-{;
- current=lowstr(fexpand("*.asg"));
-}
-
-void setup()
-{
- integer gd,gm;
- registers r;
- byte floppies;
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- dusk();
- setfillstyle(1,1); bar(2,2,637,197); shadow(0,0,639,199,15,7);
-
- if (loading) doing="LOAD"; else doing="SAV";
- doing=doing+"ING a file...";
-
- /* Now... find all drives that exist. */
- drives="";
- intr(0x11,r); floppies=(((cardinal)r.ax >> 6) & 0x3)+1; /* useful bit of code! */
- for( gm=1; gm <= floppies; gm ++) drives=drives+chr(64+gm);
- /* Winchesters, etc., can be found the easy way... */
- for( gd=3; gd <= 26; gd ++) /* C: to Z: */
- if (disksize(gd)>-1) drives=drives+chr(64+gd);
-
- fillchar(where,sizeof(where),'\1');
- fillchar(top,sizeof(top),'\1');
-
- settextstyle(0,0,0);
- settextjustify(1,1);
- for( gd=1; gd <= 2; gd ++)
- for( gm=0; gm <= 1; gm ++)
- shbox(420+gm*110,gd*25,520+gm*110,gd*25+20,buttons[gm*2+gd]);
- shbox(15,182,350,196,"Help... (press f1)");
- settextjustify(0,2); setcolor(11);
- setcolor(15); outtextxy(15,5,"The Avvy Filer...");
- setcolor(11); outtextxy(317,3,string('(')+doing+')');
- outtextxy(357,185,"Copyright (c) 1993, Thomas Thurman.");
-
- /* Draw the boxes and names */
- setcolor(3);
- for( gm=1; gm <= 4; gm ++)
- { windowtype& with = threewins[gm];
- box(with.x1,with.y1,with.x2,with.y2,with.title);}
- nowwin=1; getcurrent();
+void shadow(integer x1, integer y1, integer x2, integer y2, byte hc, byte sc) {
+ byte fv;
+ ;
+ for (fv = 0; fv <= border; fv ++) {
+ ;
+ setfillstyle(1, hc);
+ bar(x1 + fv, y1 + fv, x1 + fv, y2 - fv);
+ bar(x1 + fv, y1 + fv, x2 - fv, y1 + fv);
+
+ setfillstyle(1, sc);
+ bar(x2 - fv, y1 + fv, x2 - fv, y2 - fv);
+ bar(x1 + fv, y2 - fv, x2 - fv, y2 - fv);
+ }
+}
+
+void shbox(integer x1, integer y1, integer x2, integer y2, string t) {
+ const integer fc = 7;
+ ;
+ shadow(x1, y1, x2, y2, 15, 8);
+ setfillstyle(1, fc);
+ bar(x1 + border + 1, y1 + border + 1, x2 - border - 1, y2 - border - 1);
+ setcolor(1);
+ x1 = (x2 - x1) / 2 + x1;
+ y1 = (y2 - y1) / 2 + y1;
+ outtextxy(x1, y1, t);
+ if (length(t) > 1) {
+ ;
+ fillchar(t[2], length(t) - 1, '\40');
+ t[1] = '_';
+ outtextxy(x1 - 1, y1 + 1, t);
+ }
+}
+
+void show_drives() {
+ byte fv;
+ ;
+ settextjustify(1, 1);
+ for (fv = 0; fv <= length(drives) - 1; fv ++)
+ shbox((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
+ (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, drives[fv + 1]);
+ setcolor(11);
+ settextjustify(0, 2);
+}
+
+void box(integer x1, integer y1, integer x2, integer y2, string z) {
+ ;
+ rectangle(x1, y1, x2, y2);
+ outtextxy(x1 + 1, y1 - 10, z + ':');
+ outtextxy(x1, y1 - 9, "_");
+}
+
+string lowstr(string x) {
+ byte fv;
+ string lowstr_result;
+ ;
+ for (fv = 1; fv <= length(x); fv ++)
+ if (set::of(range('A', 'Z'), eos).has(x[fv])) x[fv] += 32;
+ lowstr_result = x;
+ return lowstr_result;
+}
+
+char lowchar(char x) {
+ char lowchar_result;
+ if (set::of(range('A', 'Z'), eos).has(x)) x -= 32;
+ lowchar_result = x;
+ return lowchar_result;
+}
+
+void getcurrent() {
+ ;
+ current = lowstr(fexpand("*.asg"));
+}
+
+void setup() {
+ integer gd, gm;
+ registers r;
+ byte floppies;
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ dusk();
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ shadow(0, 0, 639, 199, 15, 7);
+
+ if (loading) doing = "LOAD";
+ else doing = "SAV";
+ doing = doing + "ING a file...";
+
+ /* Now... find all drives that exist. */
+ drives = "";
+ intr(0x11, r);
+ floppies = (((cardinal)r.ax >> 6) & 0x3) + 1; /* useful bit of code! */
+ for (gm = 1; gm <= floppies; gm ++) drives = drives + chr(64 + gm);
+ /* Winchesters, etc., can be found the easy way... */
+ for (gd = 3; gd <= 26; gd ++) /* C: to Z: */
+ if (disksize(gd) > -1) drives = drives + chr(64 + gd);
+
+ fillchar(where, sizeof(where), '\1');
+ fillchar(top, sizeof(top), '\1');
+
+ settextstyle(0, 0, 0);
+ settextjustify(1, 1);
+ for (gd = 1; gd <= 2; gd ++)
+ for (gm = 0; gm <= 1; gm ++)
+ shbox(420 + gm * 110, gd * 25, 520 + gm * 110, gd * 25 + 20, buttons[gm * 2 + gd]);
+ shbox(15, 182, 350, 196, "Help... (press f1)");
+ settextjustify(0, 2);
+ setcolor(11);
+ setcolor(15);
+ outtextxy(15, 5, "The Avvy Filer...");
+ setcolor(11);
+ outtextxy(317, 3, string('(') + doing + ')');
+ outtextxy(357, 185, "Copyright (c) 1993, Thomas Thurman.");
+
+ /* Draw the boxes and names */
+ setcolor(3);
+ for (gm = 1; gm <= 4; gm ++) {
+ windowtype &with = threewins[gm];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ nowwin = 1;
+ getcurrent();
}
void quicksort(byte whichlist, integer lo, integer hi);
-static void sort(integer l, integer r, byte& whichlist)
-{
- integer i, j;
- varying_string<12> x, y;
-
- i = l; j = r; x = lists[whichlist][(l+r) / 2];
- do {
- while (lists[whichlist][i] < x) i = i + 1;
- while (x < lists[whichlist][j]) j = j - 1;
- if (i <= j)
- {
- y = lists[whichlist][i];
- lists[whichlist][i] = lists[whichlist][j];
- lists[whichlist][j] = y;
- i = i + 1; j = j - 1;
- }
- } while (!(i > j));
- if (l < j) sort(l, j, whichlist);
- if (i < r) sort(i, r, whichlist);
+static void sort(integer l, integer r, byte &whichlist) {
+ integer i, j;
+ varying_string<12> x, y;
+
+ i = l;
+ j = r;
+ x = lists[whichlist][(l + r) / 2];
+ do {
+ while (lists[whichlist][i] < x) i = i + 1;
+ while (x < lists[whichlist][j]) j = j - 1;
+ if (i <= j) {
+ y = lists[whichlist][i];
+ lists[whichlist][i] = lists[whichlist][j];
+ lists[whichlist][j] = y;
+ i = i + 1;
+ j = j - 1;
+ }
+ } while (!(i > j));
+ if (l < j) sort(l, j, whichlist);
+ if (i < r) sort(i, r, whichlist);
}
void quicksort(byte whichlist, integer lo, integer hi)
-{ /*QuickSort*/;
- sort(lo,hi, whichlist);
-}
-
-void scandir()
-{
- pathstr nix;
- namestr name;
- untyped_file f;
- ednahead eh;
- array<1,4,char> dna_type;
-
-;
- nums[files]=0;
- findfirst("*.asg",archive+hidden+readonly,s);
-
- while (doserror==0)
- {;
- fsplit(s.name,nix,name,nix);
- nums[files] += 1;
- lists[files][nums[files]]=lowstr(name);
-
- assign(f,s.name);
- reset(f,1);
- seek(f,11);
- blockread(f,dna_type,4);
-
- if (dna_type=="Avvy")
- {; /* A DNA256 file. */
- descs[nums[files]]="* Saved by Avaricius!";
- } else
- {; /* EDNA-based files. */
- if (dna_type=="EDNA")
- {;
- seek(f,177);
- blockread(f,eh,sizeof(eh));
-
- if (eh.revision!=2)
- descs[nums[files]]="* Unknown EDNA type!";
- else
- {;
-
- if (eh.number!=2)
- descs[nums[files]]=string("* Saved by ")+eh.shortname+'!';
- else
- {; /* Well... everything seems to have gone OK! */
- descs[nums[files]]=eh.desc;
- }
- }
- } else
- descs[nums[files]]="* Not an Avvy saved game!";
- }
- close(f);
- findnext(s);
- }
- nums[dirs]=0; findfirst("*.*",directory,s);
- while (doserror==0)
- {;
- if (((s.attr & directory)>0) && ((length(s.name))>1))
- {;
- nums[dirs] += 1;
- lists[dirs][nums[dirs]]=lowstr(s.name);
- }
- findnext(s);
- }
-
- /* Now sort 'em! */
-
- quicksort ( dirs,1,nums[ dirs]);
- quicksort (files,1,nums[files]);
-
- where[dirs]=1; where[files]=1;
- top[dirs]=1; top[files]=1;
-}
-
-void show_file(integer x,integer y, byte which)
-{
- varying_string<58> z;
-;
- fillchar(z[1],13,'\40');
- z=lists[files][which]+".asg";
- z[0]='\15'; z=z+descs[which];
-
- if (descs[which][1]=='*') /* Can't load these! */
- setcolor(red);
- else
- setcolor(lightcyan);
-
- outtextxy(x,y,z);
-}
-
-void showfiles()
-{
- byte fv;
-;
- if (loading) setcolor(11); else setcolor(3);
- if (nums[3]==0)
- {;
- outtextxy(22,86,"(None here!)");
- return;
- }
- for( fv=0; fv <= 8; fv ++)
- if (where[3]+fv<=nums[3])
- show_file(19,87+fv*10,where[3]+fv);
-}
-
-void showdirs()
-{
- byte fv;
-;
- setcolor(11);
- for( fv=0; fv <= 8; fv ++)
- if (where[4]+fv<=nums[4])
- outtextxy(497,87+fv*10,string('[')+lists[dirs][fv+where[4]]+']');
-}
-
-void show()
-{
- byte fv;
- dirstr d; namestr n; extstr e;
-;
- setfillstyle(1,1);
- for( fv=1; fv <= 4; fv ++)
- if (fv!=2)
- { windowtype& with = threewins[fv];
- bar(with.x1+1,with.y1+1,with.x2-1,with.y2-1);}
- showfiles();
- showdirs();
- setcolor(7); outtextxy(159,14,current);
-}
-
-void blip()
-{;
- sound(177); delay(77); nosound;
-}
-
-void invert(integer x1,integer y1,integer x2,integer y2)
-{
- pointer p,restore; word s;
-;
- s=imagesize(x1,y1,x2,y2);
- mark(restore); getmem(p,s);
- getimage(x1,y1,x2,y2,p);
- putimage(x1,y1,p,notput);
- release(restore);
-}
-
-void changedrive(char drive)
-{
- byte fv;
-;
- fv=pos(drive,drives);
- if (fv==0) {; blip(); return; }
- fv -= 1;
- shadow((fv % drlen)*25+25,(fv / drlen)*19+31,
- (fv % drlen)*25+40,45+(fv / drlen)*19,8,7);
- chdir(string(drive)+':');
- getcurrent(); scandir(); show();
- shadow((fv % drlen)*25+25,(fv / drlen)*19+31,
- (fv % drlen)*25+40,45+(fv / drlen)*19,15,8);
-}
-
-void highlight(byte win,byte line)
-{;
- switch (win) {
- case 3: invert(16,75+line*10,479,85+line*10); break;
- case 4: invert(491,75+line*10,619,85+line*10); break;
- }
-}
-
-void repaint(byte whichwindow)
-{
- setfillstyle(1,1);
- { windowtype& with = threewins[whichwindow];
- bar(with.x1+1,with.y1+1,with.x2-1,with.y2-1);}
- switch (whichwindow) {
- case file_win: showfiles(); break;
- case subdir_win: showdirs(); break;
- }
- highlight(whichwindow,1);
- top[whichwindow]=where[whichwindow];
-}
-
-void fileblit(word xpos,word xlen,word y1,word y2, shortint dir, word ylen)
-{
- word fv; byte bit;
-;
- for( bit=0; bit <= 3; bit ++)
- {;
- fv=0;
- while (fv<ylen)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(mem[0xa000*(y1+fv*dir)*80+xpos],mem[0xa000*(y2+fv*dir)*80+xpos],xlen);
- fv += 1;
- }
- }
- bit=getpixel(0,0);
-}
-
-void seekthrough(byte whichlist, byte& wherenow, char whatfor)
-{
- byte startedat;
-
- startedat=wherenow;
- do {
- wherenow += 1;
- if (wherenow>nums[whichlist]) wherenow=1;
- } while (!((startedat==wherenow) || (lists[whichlist][wherenow][1]==whatfor)));
- repaint(whichlist);
-}
-
-void gotohome(byte whichlist)
-{
- where[whichlist]=1;
- repaint(whichlist);
-}
-
-void gotoend(byte whichlist)
-{
- where[whichlist]=nums[whichlist];
- repaint(whichlist);
-}
-
-void pageup(byte whichlist)
-{
- if (where[whichlist]>9)
- {
- where[whichlist] -= 9;
- repaint(whichlist);
- }
-}
-
-void pagedown(byte whichlist)
{
- if (where[whichlist]<nums[whichlist]-9)
- {
- where[whichlist] += 9;
- repaint(whichlist);
- }
+ /*QuickSort*/;
+ sort(lo, hi, whichlist);
+}
+
+void scandir() {
+ pathstr nix;
+ namestr name;
+ untyped_file f;
+ ednahead eh;
+ array<1, 4, char> dna_type;
+
+ ;
+ nums[files] = 0;
+ findfirst("*.asg", archive + hidden + readonly, s);
+
+ while (doserror == 0) {
+ ;
+ fsplit(s.name, nix, name, nix);
+ nums[files] += 1;
+ lists[files][nums[files]] = lowstr(name);
+
+ assign(f, s.name);
+ reset(f, 1);
+ seek(f, 11);
+ blockread(f, dna_type, 4);
+
+ if (dna_type == "Avvy") {
+ ; /* A DNA256 file. */
+ descs[nums[files]] = "* Saved by Avaricius!";
+ } else {
+ ; /* EDNA-based files. */
+ if (dna_type == "EDNA") {
+ ;
+ seek(f, 177);
+ blockread(f, eh, sizeof(eh));
+
+ if (eh.revision != 2)
+ descs[nums[files]] = "* Unknown EDNA type!";
+ else {
+ ;
+
+ if (eh.number != 2)
+ descs[nums[files]] = string("* Saved by ") + eh.shortname + '!';
+ else {
+ ; /* Well... everything seems to have gone OK! */
+ descs[nums[files]] = eh.desc;
+ }
+ }
+ } else
+ descs[nums[files]] = "* Not an Avvy saved game!";
+ }
+ close(f);
+ findnext(s);
+ }
+ nums[dirs] = 0;
+ findfirst("*.*", directory, s);
+ while (doserror == 0) {
+ ;
+ if (((s.attr & directory) > 0) && ((length(s.name)) > 1)) {
+ ;
+ nums[dirs] += 1;
+ lists[dirs][nums[dirs]] = lowstr(s.name);
+ }
+ findnext(s);
+ }
+
+ /* Now sort 'em! */
+
+ quicksort(dirs, 1, nums[ dirs]);
+ quicksort(files, 1, nums[files]);
+
+ where[dirs] = 1;
+ where[files] = 1;
+ top[dirs] = 1;
+ top[files] = 1;
+}
+
+void show_file(integer x, integer y, byte which) {
+ varying_string<58> z;
+ ;
+ fillchar(z[1], 13, '\40');
+ z = lists[files][which] + ".asg";
+ z[0] = '\15';
+ z = z + descs[which];
+
+ if (descs[which][1] == '*') /* Can't load these! */
+ setcolor(red);
+ else
+ setcolor(lightcyan);
+
+ outtextxy(x, y, z);
+}
+
+void showfiles() {
+ byte fv;
+ ;
+ if (loading) setcolor(11);
+ else setcolor(3);
+ if (nums[3] == 0) {
+ ;
+ outtextxy(22, 86, "(None here!)");
+ return;
+ }
+ for (fv = 0; fv <= 8; fv ++)
+ if (where[3] + fv <= nums[3])
+ show_file(19, 87 + fv * 10, where[3] + fv);
+}
+
+void showdirs() {
+ byte fv;
+ ;
+ setcolor(11);
+ for (fv = 0; fv <= 8; fv ++)
+ if (where[4] + fv <= nums[4])
+ outtextxy(497, 87 + fv * 10, string('[') + lists[dirs][fv + where[4]] + ']');
+}
+
+void show() {
+ byte fv;
+ dirstr d;
+ namestr n;
+ extstr e;
+ ;
+ setfillstyle(1, 1);
+ for (fv = 1; fv <= 4; fv ++)
+ if (fv != 2) {
+ windowtype &with = threewins[fv];
+ bar(with.x1 + 1, with.y1 + 1, with.x2 - 1, with.y2 - 1);
+ }
+ showfiles();
+ showdirs();
+ setcolor(7);
+ outtextxy(159, 14, current);
+}
+
+void blip() {
+ ;
+ sound(177);
+ delay(77);
+ nosound;
+}
+
+void invert(integer x1, integer y1, integer x2, integer y2) {
+ pointer p, restore;
+ word s;
+ ;
+ s = imagesize(x1, y1, x2, y2);
+ mark(restore);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+ putimage(x1, y1, p, notput);
+ release(restore);
+}
+
+void changedrive(char drive) {
+ byte fv;
+ ;
+ fv = pos(drive, drives);
+ if (fv == 0) {
+ ;
+ blip();
+ return;
+ }
+ fv -= 1;
+ shadow((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
+ (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, 8, 7);
+ chdir(string(drive) + ':');
+ getcurrent();
+ scandir();
+ show();
+ shadow((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
+ (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, 15, 8);
+}
+
+void highlight(byte win, byte line) {
+ ;
+ switch (win) {
+ case 3:
+ invert(16, 75 + line * 10, 479, 85 + line * 10);
+ break;
+ case 4:
+ invert(491, 75 + line * 10, 619, 85 + line * 10);
+ break;
+ }
+}
+
+void repaint(byte whichwindow) {
+ setfillstyle(1, 1);
+ {
+ windowtype &with = threewins[whichwindow];
+ bar(with.x1 + 1, with.y1 + 1, with.x2 - 1, with.y2 - 1);
+ }
+ switch (whichwindow) {
+ case file_win:
+ showfiles();
+ break;
+ case subdir_win:
+ showdirs();
+ break;
+ }
+ highlight(whichwindow, 1);
+ top[whichwindow] = where[whichwindow];
+}
+
+void fileblit(word xpos, word xlen, word y1, word y2, shortint dir, word ylen) {
+ word fv;
+ byte bit;
+ ;
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ fv = 0;
+ while (fv < ylen) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(mem[0xa000 * (y1 + fv * dir) * 80 + xpos], mem[0xa000 * (y2 + fv * dir) * 80 + xpos], xlen);
+ fv += 1;
+ }
+ }
+ bit = getpixel(0, 0);
+}
+
+void seekthrough(byte whichlist, byte &wherenow, char whatfor) {
+ byte startedat;
+
+ startedat = wherenow;
+ do {
+ wherenow += 1;
+ if (wherenow > nums[whichlist]) wherenow = 1;
+ } while (!((startedat == wherenow) || (lists[whichlist][wherenow][1] == whatfor)));
+ repaint(whichlist);
+}
+
+void gotohome(byte whichlist) {
+ where[whichlist] = 1;
+ repaint(whichlist);
+}
+
+void gotoend(byte whichlist) {
+ where[whichlist] = nums[whichlist];
+ repaint(whichlist);
+}
+
+void pageup(byte whichlist) {
+ if (where[whichlist] > 9) {
+ where[whichlist] -= 9;
+ repaint(whichlist);
+ }
+}
+
+void pagedown(byte whichlist) {
+ if (where[whichlist] < nums[whichlist] - 9) {
+ where[whichlist] += 9;
+ repaint(whichlist);
+ }
}
void subdirparse(string r);
-static void movehl(byte which, shortint howmuch)
-{;
- highlight(4,where[4]-top[4]+1);
- if (((where[which]+howmuch)>0) && ((where[which]+howmuch)<=(unsigned char)nums[4]))
- where[which]=where[which]+howmuch;
- highlight(4,where[4]-top[4]+1);
+static void movehl(byte which, shortint howmuch) {
+ ;
+ highlight(4, where[4] - top[4] + 1);
+ if (((where[which] + howmuch) > 0) && ((where[which] + howmuch) <= (unsigned char)nums[4]))
+ where[which] = where[which] + howmuch;
+ highlight(4, where[4] - top[4] + 1);
}
-static void change_dir()
-{;
- dusk();
- /*$I-*/ chdir(lists[4][where[4]]);
- /*$I+*/
- if (ioresult!=0) {; dawn(); blip(); return; }
- where[4]=1; top[4]=1;
- getcurrent(); scandir(); show();
- highlight(4,1);
- dawn();
+static void change_dir() {
+ ;
+ dusk();
+ /*$I-*/ chdir(lists[4][where[4]]);
+ /*$I+*/
+ if (ioresult != 0) {
+ ;
+ dawn();
+ blip();
+ return;
+ }
+ where[4] = 1;
+ top[4] = 1;
+ getcurrent();
+ scandir();
+ show();
+ highlight(4, 1);
+ dawn();
}
void subdirparse(string r)
-{;
- switch (r[1]) {
- case creturn: change_dir(); break;
-
- case '\0': switch (r[2]) {
- case cup: if (where[4]-top[4]>0) /* Up */
- movehl(4,-1); /* Within range */
- else if (top[4]>1)
- {; /* Outside range- must scroll */
- highlight(4,1);
- top[4] -= 1; where[4] -= 1;
- fileblit(61,18,166,176,-1,80);
- setfillstyle(1,1); bar(490,85,630,95); setcolor(11);
- outtextxy(497,87,string('[')+lists[dirs][where[4]]+']');
- highlight(4,1);
- }
- break;
- case cdown:
- if (where[4]-top[4]<8) /* Down */
- movehl(4,1);
- else if (top[4]+8<nums[4])
- {;
- highlight(4,9);
- top[4] += 1; where[4] += 1;
- fileblit(60,18,97,87,1,80);
- setfillstyle(1,1); bar(490,165,630,175); setcolor(11);
- outtextxy(497,167,string('[')+lists[dirs][where[4]]+']');
- highlight(4,9);
- }
- break;
- case chome: gotohome(4); break;
- case cend: gotoend(4); break;
- case cpgup: pageup(4); break;
- case cpgdn: pagedown(4); break;
- case c_ao: change_dir(); break;
- }
- break;
- default: seekthrough(4,where[4],lowchar(r[1]));
- }
+{
+ ;
+ switch (r[1]) {
+ case creturn:
+ change_dir();
+ break;
+
+ case '\0':
+ switch (r[2]) {
+ case cup:
+ if (where[4] - top[4] > 0) /* Up */
+ movehl(4, -1); /* Within range */
+ else if (top[4] > 1) {
+ ; /* Outside range- must scroll */
+ highlight(4, 1);
+ top[4] -= 1;
+ where[4] -= 1;
+ fileblit(61, 18, 166, 176, -1, 80);
+ setfillstyle(1, 1);
+ bar(490, 85, 630, 95);
+ setcolor(11);
+ outtextxy(497, 87, string('[') + lists[dirs][where[4]] + ']');
+ highlight(4, 1);
+ }
+ break;
+ case cdown:
+ if (where[4] - top[4] < 8) /* Down */
+ movehl(4, 1);
+ else if (top[4] + 8 < nums[4]) {
+ ;
+ highlight(4, 9);
+ top[4] += 1;
+ where[4] += 1;
+ fileblit(60, 18, 97, 87, 1, 80);
+ setfillstyle(1, 1);
+ bar(490, 165, 630, 175);
+ setcolor(11);
+ outtextxy(497, 167, string('[') + lists[dirs][where[4]] + ']');
+ highlight(4, 9);
+ }
+ break;
+ case chome:
+ gotohome(4);
+ break;
+ case cend:
+ gotoend(4);
+ break;
+ case cpgup:
+ pageup(4);
+ break;
+ case cpgdn:
+ pagedown(4);
+ break;
+ case c_ao:
+ change_dir();
+ break;
+ }
+ break;
+ default:
+ seekthrough(4, where[4], lowchar(r[1]));
+ }
}
void fileinfo(byte which);
-static void display(integer y, string left,string right)
-{;
- y=17+y*12;
- settextjustify(2,1); setcolor(11); outtextxy(315,y,left);
- settextjustify(0,1); setcolor(15); outtextxy(325,y,right);
+static void display(integer y, string left, string right) {
+ ;
+ y = 17 + y * 12;
+ settextjustify(2, 1);
+ setcolor(11);
+ outtextxy(315, y, left);
+ settextjustify(0, 1);
+ setcolor(15);
+ outtextxy(325, y, right);
}
void fileinfo(byte which)
- /* This gives information on the file whose name is in lists[files,which]. */
+/* This gives information on the file whose name is in lists[files,which]. */
{
- ednahead eh;
- untyped_file f;
- varying_string<4> os;
- char r;
+ ednahead eh;
+ untyped_file f;
+ varying_string<4> os;
+ char r;
-;
+ ;
- /* Firstly, we must check whether or not it's an Avalot file. This is easily
- done, since the descriptions of all others always begin with a star. */
+ /* Firstly, we must check whether or not it's an Avalot file. This is easily
+ done, since the descriptions of all others always begin with a star. */
- if ((descs[which][1]=='*') || (descs[which][1]=='('))
- {; /* it is. */
- blip(); /* Naaaarghh! */
- return;
- }
+ if ((descs[which][1] == '*') || (descs[which][1] == '(')) {
+ ; /* it is. */
+ blip(); /* Naaaarghh! */
+ return;
+ }
- /* Anyway... it wasn't. */
+ /* Anyway... it wasn't. */
- assign(f,lists[files][which]+".asg");
- reset(f,1);
- seek(f,177);
- blockread(f,eh,sizeof(eh));
- close(f);
+ assign(f, lists[files][which] + ".asg");
+ reset(f, 1);
+ seek(f, 177);
+ blockread(f, eh, sizeof(eh));
+ close(f);
- /* We now hold its EDNA record. */
+ /* We now hold its EDNA record. */
- setfillstyle(1,1); bar(2,2,637,197); /* Interesting information coming up! */
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197); /* Interesting information coming up! */
- {;
- display(2,"Saved by:", eh.game);
- display(3,"version:", eh.verstr);
+ {
+ ;
+ display(2, "Saved by:", eh.game);
+ display(3, "version:", eh.verstr);
-/* display(4,'under', os);*/
+ /* display(4,'under', os);*/
- display(6,"Saved on ",strf(eh.d)+'-'+strf(eh.m)+'-'+strf(eh.y));
+ display(6, "Saved on ", strf(eh.d) + '-' + strf(eh.m) + '-' + strf(eh.y));
- display(9,"No. of times saved:",strf(eh.saves));
+ display(9, "No. of times saved:", strf(eh.saves));
- display(11,"Money:",eh.money);
- display(12,"Score:",strf(eh.points));
- }
+ display(11, "Money:", eh.money);
+ display(12, "Score:", strf(eh.points));
+ }
- shbox(500,177,650,200,"Press any key...");
- r=readkey();
+ shbox(500, 177, 650, 200, "Press any key...");
+ r = readkey();
- setfillstyle(1,1); bar(2,2,637,197);
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
}
void filer_help()
- /* This gives general help. */
+/* This gives general help. */
{
- char r;
-;
- outtextxy(100,100,"Just general help here.");
- shbox(500,177,650,200,"Press any key...");
- r=readkey();
+ char r;
+ ;
+ outtextxy(100, 100, "Just general help here.");
+ shbox(500, 177, 650, 200, "Press any key...");
+ r = readkey();
- setfillstyle(1,1); bar(2,2,637,197);
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
}
void wipe()
- /* This allows you to delete files. */
+/* This allows you to delete files. */
{
- char r;
-;
- outtextxy(100,100,"Are you sure you want to delete \"foo.bar\"?");
- shbox(500,177,650,200,"[Y/N]");
- r=readkey();
+ char r;
+ ;
+ outtextxy(100, 100, "Are you sure you want to delete \"foo.bar\"?");
+ shbox(500, 177, 650, 200, "[Y/N]");
+ r = readkey();
- setfillstyle(1,1); bar(2,2,637,197);
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
}
void filesparse(string r);
-static void movehl1(byte which, shortint howmuch)
-{;
- highlight(3,where[3]-top[3]+1);
- if (((where[which]+howmuch)>0) && ((where[which]+howmuch)<=(unsigned char)nums[3]))
- where[which]=where[which]+howmuch;
- highlight(3,where[3]-top[3]+1);
+static void movehl1(byte which, shortint howmuch) {
+ ;
+ highlight(3, where[3] - top[3] + 1);
+ if (((where[which] + howmuch) > 0) && ((where[which] + howmuch) <= (unsigned char)nums[3]))
+ where[which] = where[which] + howmuch;
+ highlight(3, where[3] - top[3] + 1);
}
-static boolean selected_file()
-{boolean selected_file_result;
-;
- if (descs[where[file_win]][1]=='*')
- {
- blip();
- selected_file_result=false;
- } else
- {
- filename=lists[file_win][where[file_win]];
- filefound=true;
- selected_file_result=true;
- }
-return selected_file_result;
+static boolean selected_file() {
+ boolean selected_file_result;
+ ;
+ if (descs[where[file_win]][1] == '*') {
+ blip();
+ selected_file_result = false;
+ } else {
+ filename = lists[file_win][where[file_win]];
+ filefound = true;
+ selected_file_result = true;
+ }
+ return selected_file_result;
}
void filesparse(string r)
-{;
- switch (r[1]) {
- case creturn: if (selected_file()) return; break;
- case '\0': switch (r[2]) {
- case cup: if (where[3]-top[3]>0) /* Up */
- movehl1(3,-1); /* Within range */
- else if (top[3]>1)
- {; /* Outside range- must scroll */
- highlight(3,1);
- top[3] -= 1; where[3] -= 1;
- fileblit(1,59,166,176,-1,80);
- setfillstyle(1,1); bar( 15,85,480,95);
- show_file( 19,87,where[3]);
- highlight(3,1);
- }
- break;
- case cdown: if (where[3]-top[3]<8) /* Down */
- movehl1(3,1);
- else if (top[3]+8<nums[3])
- {;
- highlight(3,9);
- top[3] += 1; where[3] += 1;
- fileblit(1,59,97,87,1,80);
- setfillstyle(1,1); bar( 15,165,480,175);
- show_file( 19,167,where[3]);
- highlight(3,9);
- }
- break;
- case c_ai: fileinfo(where[3]); break; /* alt-I: information. */
- case c_ah:case c_f1: filer_help(); break; /* alt-I: information. */
- case chome: gotohome(3); break;
- case cend: gotoend(3); break;
- case cpgup: pageup(3); break;
- case cpgdn: pagedown(3); break;
- case c_ao: if (selected_file()) return; break;
- }
- break;
- default: seekthrough(3,where[3],lowchar(r[1]));
- }
+{
+ ;
+ switch (r[1]) {
+ case creturn:
+ if (selected_file()) return;
+ break;
+ case '\0':
+ switch (r[2]) {
+ case cup:
+ if (where[3] - top[3] > 0) /* Up */
+ movehl1(3, -1); /* Within range */
+ else if (top[3] > 1) {
+ ; /* Outside range- must scroll */
+ highlight(3, 1);
+ top[3] -= 1;
+ where[3] -= 1;
+ fileblit(1, 59, 166, 176, -1, 80);
+ setfillstyle(1, 1);
+ bar(15, 85, 480, 95);
+ show_file(19, 87, where[3]);
+ highlight(3, 1);
+ }
+ break;
+ case cdown:
+ if (where[3] - top[3] < 8) /* Down */
+ movehl1(3, 1);
+ else if (top[3] + 8 < nums[3]) {
+ ;
+ highlight(3, 9);
+ top[3] += 1;
+ where[3] += 1;
+ fileblit(1, 59, 97, 87, 1, 80);
+ setfillstyle(1, 1);
+ bar(15, 165, 480, 175);
+ show_file(19, 167, where[3]);
+ highlight(3, 9);
+ }
+ break;
+ case c_ai:
+ fileinfo(where[3]);
+ break; /* alt-I: information. */
+ case c_ah:
+ case c_f1:
+ filer_help();
+ break; /* alt-I: information. */
+ case chome:
+ gotohome(3);
+ break;
+ case cend:
+ gotoend(3);
+ break;
+ case cpgup:
+ pageup(3);
+ break;
+ case cpgdn:
+ pagedown(3);
+ break;
+ case c_ao:
+ if (selected_file()) return;
+ break;
+ }
+ break;
+ default:
+ seekthrough(3, where[3], lowchar(r[1]));
+ }
}
string playaround();
-static void changewin(byte i)
-{;
- switch (nowwin) {
- case 3:case 4: highlight(nowwin,where[nowwin]-top[nowwin]+1); break;
- }
- setcolor(3); { windowtype& with = threewins[nowwin]; box(with.x1,with.y1,with.x2,with.y2,with.title);}
- nowwin=i;
- if (nowwin<1) nowwin=4; if (nowwin>4) nowwin=1;
- switch (nowwin) {
- case 3:case 4: highlight(nowwin,where[nowwin]-top[nowwin]+1); break;
- }
-}
-
-string playaround()
-{
- char r,r2;
-string playaround_result;
-;
- filefound=false; dawn();
-
- do {
- setcolor(14); { windowtype& with = threewins[nowwin]; box(with.x1,with.y1,with.x2,with.y2,with.title);}
- r=readkey();
- switch (r) {
- case ctab: changewin(nowwin+1); break;
- case cescape: {;
- playaround_result="";
- return playaround_result;
- }
- break;
- case '\0': {; /* parse extd keystroke */
- r2=readkey();
- switch (r2) {
- case cs_tab: changewin(nowwin-1); break;
- case c_an: changewin(1); break;
- case c_ad: changewin(2); break;
- case c_af: changewin(3); break;
- case c_as: changewin(4); break;
- case c_ac: {;
- playaround_result="";
- return playaround_result;
- }
- break;
- default:
- switch (nowwin) {
- case 3: filesparse(string('\0')+r2); break;
- case 4: subdirparse(string('\0')+r2); break;
- }
- }
- }
- break;
- default:
- {; /* Pass keystroke to current window */
- switch (nowwin) {
- case 2: changedrive(upcase(r)); break;
- case 4: subdirparse(r); break;
- case 3: filesparse(r); break;
- default: blip();
- }
- }
-
- }
-
- if (filefound)
- {;
- dusk();
- playaround_result=filename;
- return playaround_result;
- }
- } while (!false);
-return playaround_result;
-}
-
-void do_filer()
-{
- pathstr p;
-void do_filer_result;
-;
- loading=true;
- setup();
- scandir();
- show(); show_drives();
- p=playaround();
- if (p!="") p=fexpand(p+".ASG");
- do_filer_result=p;
-return do_filer_result;
-}
-
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- filename=do_filer();
- closegraph();
- if (filename=="")
- output << "*** CANCELLED! ***" << NL;
- else
- output << "Selected: " << filename << NL;
- input >> NL;
-return EXIT_SUCCESS;
+static void changewin(byte i) {
+ ;
+ switch (nowwin) {
+ case 3:
+ case 4:
+ highlight(nowwin, where[nowwin] - top[nowwin] + 1);
+ break;
+ }
+ setcolor(3);
+ {
+ windowtype &with = threewins[nowwin];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ nowwin = i;
+ if (nowwin < 1) nowwin = 4;
+ if (nowwin > 4) nowwin = 1;
+ switch (nowwin) {
+ case 3:
+ case 4:
+ highlight(nowwin, where[nowwin] - top[nowwin] + 1);
+ break;
+ }
+}
+
+string playaround() {
+ char r, r2;
+ string playaround_result;
+ ;
+ filefound = false;
+ dawn();
+
+ do {
+ setcolor(14);
+ {
+ windowtype &with = threewins[nowwin];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ r = readkey();
+ switch (r) {
+ case ctab:
+ changewin(nowwin + 1);
+ break;
+ case cescape: {
+ ;
+ playaround_result = "";
+ return playaround_result;
+ }
+ break;
+ case '\0': {
+ ; /* parse extd keystroke */
+ r2 = readkey();
+ switch (r2) {
+ case cs_tab:
+ changewin(nowwin - 1);
+ break;
+ case c_an:
+ changewin(1);
+ break;
+ case c_ad:
+ changewin(2);
+ break;
+ case c_af:
+ changewin(3);
+ break;
+ case c_as:
+ changewin(4);
+ break;
+ case c_ac: {
+ ;
+ playaround_result = "";
+ return playaround_result;
+ }
+ break;
+ default:
+ switch (nowwin) {
+ case 3:
+ filesparse(string('\0') + r2);
+ break;
+ case 4:
+ subdirparse(string('\0') + r2);
+ break;
+ }
+ }
+ }
+ break;
+ default: {
+ ; /* Pass keystroke to current window */
+ switch (nowwin) {
+ case 2:
+ changedrive(upcase(r));
+ break;
+ case 4:
+ subdirparse(r);
+ break;
+ case 3:
+ filesparse(r);
+ break;
+ default:
+ blip();
+ }
+ }
+
+ }
+
+ if (filefound) {
+ ;
+ dusk();
+ playaround_result = filename;
+ return playaround_result;
+ }
+ } while (!false);
+ return playaround_result;
+}
+
+void do_filer() {
+ pathstr p;
+ void do_filer_result;
+ ;
+ loading = true;
+ setup();
+ scandir();
+ show();
+ show_drives();
+ p = playaround();
+ if (p != "") p = fexpand(p + ".ASG");
+ do_filer_result = p;
+ return do_filer_result;
+}
+
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ filename = do_filer();
+ closegraph();
+ if (filename == "")
+ output << "*** CANCELLED! ***" << NL;
+ else
+ output << "Selected: " << filename << NL;
+ input >> NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/fileunit.cpp b/engines/avalanche/fileunit.cpp
index 00c19ede68..6b1c9b196b 100644
--- a/engines/avalanche/fileunit.cpp
+++ b/engines/avalanche/fileunit.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -26,7 +26,7 @@
*/
#define __fileunit_implementation__
- /* v:filer.pas - "avvyfiler" - in unit form. */
+/* v:filer.pas - "avvyfiler" - in unit form. */
#include "fileunit.h"
@@ -44,24 +44,26 @@
namespace Avalanche {
struct windowtype {
- integer x1,y1,x2,y2;
- varying_string<20> title;
+ integer x1, y1, x2, y2;
+ varying_string<20> title;
};
const integer border = 1; /* size of border on shadowboxes */
-const array<1,4,string> buttons = {{"Okay","Wipe","Cancel","Info..."}};
+const array<1, 4, string> buttons = {{"Okay", "Wipe", "Cancel", "Info..."}};
const integer files = 3;
const integer dirs = 4;
const integer drlen = 15; /* no. of drives on one line */
-const array<1,4,windowtype> threewins =
- {{{155, 12, 630, 22, "Name"},
- {15, 25, 410, 70, "Drives"},
- {15, 83, 480, 179, "Files (*.ASG)"},
- {490, 83, 630, 179, "Subdirectories"}}};
+const array<1, 4, windowtype> threewins = {
+ { {155, 12, 630, 22, "Name"},
+ {15, 25, 410, 70, "Drives"},
+ {15, 83, 480, 179, "Files (*.ASG)"},
+ {490, 83, 630, 179, "Subdirectories"}
+ }
+};
const integer name_win = 1;
const integer drive_win = 2;
@@ -70,9 +72,9 @@ const integer subdir_win = 4;
const integer filer_page = 3;
-matrix<3,4,1,77,varying_string<12> > lists;
-array<1,77,varying_string<40> > descs;
-array<3,4,byte> nums,where,top,thumb_pos,thumb_len;
+matrix<3, 4, 1, 77, varying_string<12> > lists;
+array<1, 77, varying_string<40> > descs;
+array<3, 4, byte> nums, where, top, thumb_pos, thumb_len;
searchrec s;
boolean loading;
varying_string<26> drives;
@@ -84,1062 +86,1219 @@ boolean filefound;
boolean cancelled;
-void shadow(integer x1,integer y1,integer x2,integer y2, byte hc,byte sc)
-{
- byte fv;
-
- for( fv=0; fv <= border; fv ++)
- {
- setfillstyle(1,hc);
- bar(x1+fv,y1+fv,x1+fv,y2-fv);
- bar(x1+fv,y1+fv,x2-fv,y1+fv);
-
- setfillstyle(1,sc);
- bar(x2-fv,y1+fv,x2-fv,y2-fv);
- bar(x1+fv,y2-fv,x2-fv,y2-fv);
- }
+void shadow(integer x1, integer y1, integer x2, integer y2, byte hc, byte sc) {
+ byte fv;
+
+ for (fv = 0; fv <= border; fv ++) {
+ setfillstyle(1, hc);
+ bar(x1 + fv, y1 + fv, x1 + fv, y2 - fv);
+ bar(x1 + fv, y1 + fv, x2 - fv, y1 + fv);
+
+ setfillstyle(1, sc);
+ bar(x2 - fv, y1 + fv, x2 - fv, y2 - fv);
+ bar(x1 + fv, y2 - fv, x2 - fv, y2 - fv);
+ }
}
-void shbox(integer x1,integer y1,integer x2,integer y2, string t)
-{
- const integer fc = 7;
-
- shadow(x1,y1,x2,y2,15,8);
- setfillstyle(1,fc);
- bar(x1+border+1,y1+border+1,x2-border-1,y2-border-1);
- setcolor(1); x1=(x2-x1) / 2+x1; y1=(y2-y1) / 2+y1;
- outtextxy(x1,y1,t);
- if ((t[1]!='[') && (length(t)>1))
- {
- fillchar(t[2],length(t)-1,'\40'); t[1]='_';
- outtextxy(x1-1,y1+1,t);
- }
+void shbox(integer x1, integer y1, integer x2, integer y2, string t) {
+ const integer fc = 7;
+
+ shadow(x1, y1, x2, y2, 15, 8);
+ setfillstyle(1, fc);
+ bar(x1 + border + 1, y1 + border + 1, x2 - border - 1, y2 - border - 1);
+ setcolor(1);
+ x1 = (x2 - x1) / 2 + x1;
+ y1 = (y2 - y1) / 2 + y1;
+ outtextxy(x1, y1, t);
+ if ((t[1] != '[') && (length(t) > 1)) {
+ fillchar(t[2], length(t) - 1, '\40');
+ t[1] = '_';
+ outtextxy(x1 - 1, y1 + 1, t);
+ }
}
-void show_drives()
-{
- byte fv;
-
- settextjustify(1,1);
- for( fv=0; fv <= length(drives)-1; fv ++)
- shbox((fv % drlen)*25+25,(fv / drlen)*19+31,
- (fv % drlen)*25+40,45+(fv / drlen)*19,drives[fv+1]);
- setcolor(11);
- settextjustify(0,2);
+void show_drives() {
+ byte fv;
+
+ settextjustify(1, 1);
+ for (fv = 0; fv <= length(drives) - 1; fv ++)
+ shbox((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
+ (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, drives[fv + 1]);
+ setcolor(11);
+ settextjustify(0, 2);
}
-char which_drive(integer x,integer y)
-{
- char which_drive_result;
- x=(x-25) / 25; y=(y-32) / 19;
+char which_drive(integer x, integer y) {
+ char which_drive_result;
+ x = (x - 25) / 25;
+ y = (y - 32) / 19;
- which_drive_result= drives[1+x+y*drlen];
- return which_drive_result;
+ which_drive_result = drives[1 + x + y * drlen];
+ return which_drive_result;
}
-void box(integer x1,integer y1,integer x2,integer y2, string z)
-{
- rectangle(x1,y1,x2,y2);
- outtextxy(x1+1,y1-10,z+':');
- outtextxy(x1,y1-9,"_");
+void box(integer x1, integer y1, integer x2, integer y2, string z) {
+ rectangle(x1, y1, x2, y2);
+ outtextxy(x1 + 1, y1 - 10, z + ':');
+ outtextxy(x1, y1 - 9, "_");
}
-string lowstr(string x)
-{
- byte fv;
+string lowstr(string x) {
+ byte fv;
- string lowstr_result;
- for( fv=1; fv <= length(x); fv ++)
- if (set::of(range('A','Z'), eos).has(x[fv])) x[fv] += 32;
- lowstr_result=x;
- return lowstr_result;
+ string lowstr_result;
+ for (fv = 1; fv <= length(x); fv ++)
+ if (set::of(range('A', 'Z'), eos).has(x[fv])) x[fv] += 32;
+ lowstr_result = x;
+ return lowstr_result;
}
-char lowchar(char x)
-{
- char lowchar_result;
- if (set::of(range('A','Z'), eos).has(x)) x -= 32;
- lowchar_result=x;
- return lowchar_result;
+char lowchar(char x) {
+ char lowchar_result;
+ if (set::of(range('A', 'Z'), eos).has(x)) x -= 32;
+ lowchar_result = x;
+ return lowchar_result;
}
-void getcurrent()
-{
- current=lowstr(fexpand("*.asg"));
+void getcurrent() {
+ current = lowstr(fexpand("*.asg"));
}
-void firstsetup()
-{
- integer gd,gm;
- registers r;
- byte floppies;
-
- /* Now... find all drives that exist. */
- drives="";
- intr(0x11,r); floppies=(((cardinal)r.ax >> 6) & 0x3)+1; /* useful bit of code! */
- for( gm=1; gm <= floppies; gm ++) drives=drives+chr(64+gm);
- /* Winchesters, etc., can be found the easy way... */
- for( gd=3; gd <= 26; gd ++) /* C: to Z: */
- if (disksize(gd)>-1) drives=drives+chr(64+gd);
-
- fillchar(where,sizeof(where),'\1');
- fillchar(top,sizeof(top),'\1');
-
- /* Set up mouse. */
- off_virtual();
- oncandopageswap=false;
- newpointer(2);
+void firstsetup() {
+ integer gd, gm;
+ registers r;
+ byte floppies;
+
+ /* Now... find all drives that exist. */
+ drives = "";
+ intr(0x11, r);
+ floppies = (((cardinal)r.ax >> 6) & 0x3) + 1; /* useful bit of code! */
+ for (gm = 1; gm <= floppies; gm ++) drives = drives + chr(64 + gm);
+ /* Winchesters, etc., can be found the easy way... */
+ for (gd = 3; gd <= 26; gd ++) /* C: to Z: */
+ if (disksize(gd) > -1) drives = drives + chr(64 + gd);
+
+ fillchar(where, sizeof(where), '\1');
+ fillchar(top, sizeof(top), '\1');
+
+ /* Set up mouse. */
+ off_virtual();
+ oncandopageswap = false;
+ newpointer(2);
}
-void draw_scroll_bar(byte which)
-{
- setcolor(1);
- {
- windowtype& with = threewins[which];
-
- setfillstyle(1,7);
- bar(with.x2-7,with.y1+10,with.x2-1,with.y2-10);
- setfillstyle(1,3);
- bar(with.x2-7,with.y1+ 1,with.x2-1,with.y1+9);
- bar(with.x2-7,with.y2- 9,with.x2-1,with.y2-1);
- outtextxy(with.x2-7,with.y1+2,"\30");
- outtextxy(with.x2-7,with.y2-8,"\31");
- }
+void draw_scroll_bar(byte which) {
+ setcolor(1);
+ {
+ windowtype &with = threewins[which];
+
+ setfillstyle(1, 7);
+ bar(with.x2 - 7, with.y1 + 10, with.x2 - 1, with.y2 - 10);
+ setfillstyle(1, 3);
+ bar(with.x2 - 7, with.y1 + 1, with.x2 - 1, with.y1 + 9);
+ bar(with.x2 - 7, with.y2 - 9, with.x2 - 1, with.y2 - 1);
+ outtextxy(with.x2 - 7, with.y1 + 2, "\30");
+ outtextxy(with.x2 - 7, with.y2 - 8, "\31");
+ }
}
-void setup()
-{
- integer gd,gm;
- registers r;
- byte floppies;
-
- setactivepage(filer_page); setvisualpage(filer_page);
- setfillstyle(1,1); bar(2,2,637,197); shadow(0,0,639,199,15,7);
-
- settextstyle(0,0,0);
- settextjustify(1,1);
- for( gd=1; gd <= 2; gd ++)
- for( gm=0; gm <= 1; gm ++)
- shbox(420+gm*110,gd*25,520+gm*110,gd*25+20,buttons[gm*2+gd]);
- shbox(15,182,350,196,"Help... (press f1)");
- settextjustify(0,2); setcolor(11);
- setcolor(15); outtextxy(15,5,"The Avvy Filer...");
- setcolor(11); outtextxy(317,3,"Select a file to load.");
- outtextxy(357,185,"Copyright (c) 1993, Thomas Thurman.");
-
- /* Draw the boxes and names */
- setcolor(3);
- for( gm=1; gm <= 4; gm ++)
- { windowtype& with = threewins[gm];
- box(with.x1,with.y1,with.x2,with.y2,with.title);}
-
- /* Draw the scroll bars. */
-
- for( gm=3; gm <= 4; gm ++) draw_scroll_bar(gm);
+void setup() {
+ integer gd, gm;
+ registers r;
+ byte floppies;
+
+ setactivepage(filer_page);
+ setvisualpage(filer_page);
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ shadow(0, 0, 639, 199, 15, 7);
+
+ settextstyle(0, 0, 0);
+ settextjustify(1, 1);
+ for (gd = 1; gd <= 2; gd ++)
+ for (gm = 0; gm <= 1; gm ++)
+ shbox(420 + gm * 110, gd * 25, 520 + gm * 110, gd * 25 + 20, buttons[gm * 2 + gd]);
+ shbox(15, 182, 350, 196, "Help... (press f1)");
+ settextjustify(0, 2);
+ setcolor(11);
+ setcolor(15);
+ outtextxy(15, 5, "The Avvy Filer...");
+ setcolor(11);
+ outtextxy(317, 3, "Select a file to load.");
+ outtextxy(357, 185, "Copyright (c) 1993, Thomas Thurman.");
+
+ /* Draw the boxes and names */
+ setcolor(3);
+ for (gm = 1; gm <= 4; gm ++) {
+ windowtype &with = threewins[gm];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+
+ /* Draw the scroll bars. */
+
+ for (gm = 3; gm <= 4; gm ++) draw_scroll_bar(gm);
}
-void thumb(byte whichwin)
-{
- word length,the_top;
-
- if (nums[whichwin]<9)
- {
- length=76;
- the_top=0;
- } else
- {
- length=trunc(76*((real)(8)/nums[whichwin]));
- the_top=trunc(((real)(where[whichwin])/nums[whichwin])*(76-length));
- }
-
- the_top += 93; /* Top of both the scrollbars. */
-
- setfillstyle(1,7);
- { windowtype& with = threewins[whichwin];
- bar(with.x2-6,thumb_pos[whichwin],with.x2-3,thumb_pos[whichwin]+length);}
- setfillstyle(1,1);
- { windowtype& with = threewins[whichwin];
- bar(with.x2-6,the_top,with.x2-3,the_top+length);}
-
- thumb_pos[whichwin]=the_top;
- thumb_len[whichwin]=length;
+void thumb(byte whichwin) {
+ word length, the_top;
+
+ if (nums[whichwin] < 9) {
+ length = 76;
+ the_top = 0;
+ } else {
+ length = trunc(76 * ((real)(8) / nums[whichwin]));
+ the_top = trunc(((real)(where[whichwin]) / nums[whichwin]) * (76 - length));
+ }
+
+ the_top += 93; /* Top of both the scrollbars. */
+
+ setfillstyle(1, 7);
+ {
+ windowtype &with = threewins[whichwin];
+ bar(with.x2 - 6, thumb_pos[whichwin], with.x2 - 3, thumb_pos[whichwin] + length);
+ }
+ setfillstyle(1, 1);
+ {
+ windowtype &with = threewins[whichwin];
+ bar(with.x2 - 6, the_top, with.x2 - 3, the_top + length);
+ }
+
+ thumb_pos[whichwin] = the_top;
+ thumb_len[whichwin] = length;
}
void quicksort(byte whichlist, integer lo, integer hi);
-static void sort(integer l, integer r, byte& whichlist)
-{
- integer i, j;
- varying_string<12> x, y;
- varying_string<40> d;
-
- i = l; j = r; x = lists[whichlist][(l+r) / 2];
- do {
- while (lists[whichlist][i] < x) i = i + 1;
- while (x < lists[whichlist][j]) j = j - 1;
- if (i <= j)
- {
- y = lists[whichlist][i];
- lists[whichlist][i] = lists[whichlist][j];
- lists[whichlist][j] = y;
-
- d = descs[i];
- descs[i] = descs[j];
- descs[j] = d;
-
- i = i + 1; j = j - 1;
- }
- } while (!(i > j));
-
-/* if j<1 then j:=1;
- if r<1 then r:=1;*/
-
- if (l < j) sort(l, j, whichlist);
- if (i < r) sort(i, r, whichlist);
+static void sort(integer l, integer r, byte &whichlist) {
+ integer i, j;
+ varying_string<12> x, y;
+ varying_string<40> d;
+
+ i = l;
+ j = r;
+ x = lists[whichlist][(l + r) / 2];
+ do {
+ while (lists[whichlist][i] < x) i = i + 1;
+ while (x < lists[whichlist][j]) j = j - 1;
+ if (i <= j) {
+ y = lists[whichlist][i];
+ lists[whichlist][i] = lists[whichlist][j];
+ lists[whichlist][j] = y;
+
+ d = descs[i];
+ descs[i] = descs[j];
+ descs[j] = d;
+
+ i = i + 1;
+ j = j - 1;
+ }
+ } while (!(i > j));
+
+ /* if j<1 then j:=1;
+ if r<1 then r:=1;*/
+
+ if (l < j) sort(l, j, whichlist);
+ if (i < r) sort(i, r, whichlist);
}
void quicksort(byte whichlist, integer lo, integer hi)
-{ /*QuickSort*/;
- sort(lo,hi, whichlist);
+{
+ /*QuickSort*/;
+ sort(lo, hi, whichlist);
}
-void scandir()
-{
- pathstr nix;
- namestr name;
- untyped_file f;
- ednahead eh;
- array<1,4,char> dna_type;
-
-
- nums[files]=0;
- findfirst("*.asg",archive+hidden+readonly,s);
-
- while ((doserror==0) && (nums[files]<77))
- {
- fsplit(s.name,nix,name,nix);
- nums[files] += 1;
- lists[files][nums[files]]=lowstr(name);
-
- assign(f,s.name);
- reset(f,1);
- seek(f,11);
- blockread(f,dna_type,4);
-
- if (dna_type=="Avvy")
- { /* A DNA256 file. */
- descs[nums[files]]="* Saved by Avaricius!";
- } else
- { /* EDNA-based files. */
- if (dna_type=="EDNA")
- {
- seek(f,177);
- blockread(f,eh,sizeof(eh));
-
- if (eh.revision!=2)
- descs[nums[files]]="* Unknown EDNA type!";
- else
- {
-
- if (eh.number!=2)
- descs[nums[files]]=string("% Saved by ")+eh.shortname+'!';
- else
- { /* Well... everything seems to have gone OK! */
- descs[nums[files]]=eh.desc;
- }
- }
- } else
- descs[nums[files]]="* Not an Avvy saved game!";
- }
- close(f);
- findnext(s);
- }
- nums[dirs]=0; findfirst("*.*",directory,s);
- while ((doserror==0) && (nums[dirs]<77))
- {
- if (((s.attr & directory)>0) && ((length(s.name))>1))
- {
- nums[dirs] += 1;
- lists[dirs][nums[dirs]]=lowstr(s.name);
- }
- findnext(s);
- }
-
- /* Now sort 'em! */
-
- if (nums[dirs ]!=0) quicksort ( dirs,1,nums[ dirs]);
- if (nums[files]!=0) quicksort (files,1,nums[files]);
-
- where[dirs]=1; where[files]=1;
- top[dirs]=1; top[files]=1;
-
- thumb_pos[3]=93; thumb_pos[4]=93;
+void scandir() {
+ pathstr nix;
+ namestr name;
+ untyped_file f;
+ ednahead eh;
+ array<1, 4, char> dna_type;
+
+
+ nums[files] = 0;
+ findfirst("*.asg", archive + hidden + readonly, s);
+
+ while ((doserror == 0) && (nums[files] < 77)) {
+ fsplit(s.name, nix, name, nix);
+ nums[files] += 1;
+ lists[files][nums[files]] = lowstr(name);
+
+ assign(f, s.name);
+ reset(f, 1);
+ seek(f, 11);
+ blockread(f, dna_type, 4);
+
+ if (dna_type == "Avvy") {
+ /* A DNA256 file. */
+ descs[nums[files]] = "* Saved by Avaricius!";
+ } else {
+ /* EDNA-based files. */
+ if (dna_type == "EDNA") {
+ seek(f, 177);
+ blockread(f, eh, sizeof(eh));
+
+ if (eh.revision != 2)
+ descs[nums[files]] = "* Unknown EDNA type!";
+ else {
+
+ if (eh.number != 2)
+ descs[nums[files]] = string("% Saved by ") + eh.shortname + '!';
+ else {
+ /* Well... everything seems to have gone OK! */
+ descs[nums[files]] = eh.desc;
+ }
+ }
+ } else
+ descs[nums[files]] = "* Not an Avvy saved game!";
+ }
+ close(f);
+ findnext(s);
+ }
+ nums[dirs] = 0;
+ findfirst("*.*", directory, s);
+ while ((doserror == 0) && (nums[dirs] < 77)) {
+ if (((s.attr & directory) > 0) && ((length(s.name)) > 1)) {
+ nums[dirs] += 1;
+ lists[dirs][nums[dirs]] = lowstr(s.name);
+ }
+ findnext(s);
+ }
+
+ /* Now sort 'em! */
+
+ if (nums[dirs ] != 0) quicksort(dirs, 1, nums[ dirs]);
+ if (nums[files] != 0) quicksort(files, 1, nums[files]);
+
+ where[dirs] = 1;
+ where[files] = 1;
+ top[dirs] = 1;
+ top[files] = 1;
+
+ thumb_pos[3] = 93;
+ thumb_pos[4] = 93;
}
-void show_file(integer x,integer y, byte which)
-{
- varying_string<58> z;
+void show_file(integer x, integer y, byte which) {
+ varying_string<58> z;
- fillchar(z[1],13,'\40');
- z=lists[files][which]+".asg";
- z[0]='\15'; z=z+descs[which];
+ fillchar(z[1], 13, '\40');
+ z = lists[files][which] + ".asg";
+ z[0] = '\15';
+ z = z + descs[which];
- if (set::of('*','%', eos).has(descs[which][1])) /* Can't load these! */
- setcolor(red);
- else
- setcolor(lightcyan);
+ if (set::of('*', '%', eos).has(descs[which][1])) /* Can't load these! */
+ setcolor(red);
+ else
+ setcolor(lightcyan);
- outtextxy(x,y,z);
+ outtextxy(x, y, z);
}
-void showfiles()
-{
- byte fv;
-
- if (loading) setcolor(11); else setcolor(3);
- if (nums[3]==0)
- {
- outtextxy(22,86,"(None here!)");
- return;
- }
- for( fv=0; fv <= 8; fv ++)
- if (top[3]+fv<=nums[3])
- show_file(19,87+fv*10,top[3]+fv);
-
- draw_scroll_bar(files);
+void showfiles() {
+ byte fv;
+
+ if (loading) setcolor(11);
+ else setcolor(3);
+ if (nums[3] == 0) {
+ outtextxy(22, 86, "(None here!)");
+ return;
+ }
+ for (fv = 0; fv <= 8; fv ++)
+ if (top[3] + fv <= nums[3])
+ show_file(19, 87 + fv * 10, top[3] + fv);
+
+ draw_scroll_bar(files);
}
-void showdirs()
-{
- byte fv;
+void showdirs() {
+ byte fv;
- setcolor(11);
- for( fv=0; fv <= 8; fv ++)
- if (top[4]+fv<=nums[4])
- outtextxy(497,87+fv*10,string('[')+lists[dirs][fv+top[4]]+']');
- draw_scroll_bar(dirs);
+ setcolor(11);
+ for (fv = 0; fv <= 8; fv ++)
+ if (top[4] + fv <= nums[4])
+ outtextxy(497, 87 + fv * 10, string('[') + lists[dirs][fv + top[4]] + ']');
+ draw_scroll_bar(dirs);
}
-void show()
-{
- byte fv;
- dirstr d; namestr n; extstr e;
-
- setfillstyle(1,1);
- for( fv=1; fv <= 4; fv ++)
- if (fv!=2)
- { windowtype& with = threewins[fv];
- bar(with.x1+1,with.y1+1,with.x2-8,with.y2-1);}
- showfiles();
- showdirs();
- setcolor(7); outtextxy(159,14,current);
- for( fv=3; fv <= 4; fv ++) thumb(fv);
+void show() {
+ byte fv;
+ dirstr d;
+ namestr n;
+ extstr e;
+
+ setfillstyle(1, 1);
+ for (fv = 1; fv <= 4; fv ++)
+ if (fv != 2) {
+ windowtype &with = threewins[fv];
+ bar(with.x1 + 1, with.y1 + 1, with.x2 - 8, with.y2 - 1);
+ }
+ showfiles();
+ showdirs();
+ setcolor(7);
+ outtextxy(159, 14, current);
+ for (fv = 3; fv <= 4; fv ++) thumb(fv);
}
-void blip()
-{
- sound(177); delay(77); nosound;
+void blip() {
+ sound(177);
+ delay(77);
+ nosound;
}
-void invert(integer x1,integer y1,integer x2,integer y2)
-{
- pointer p,restore; word s;
+void invert(integer x1, integer y1, integer x2, integer y2) {
+ pointer p, restore;
+ word s;
- s=imagesize(x1,y1,x2,y2);
- mark(restore); getmem(p,s);
- getimage(x1,y1,x2,y2,p);
- putimage(x1,y1,p,notput);
- release(restore);
+ s = imagesize(x1, y1, x2, y2);
+ mark(restore);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+ putimage(x1, y1, p, notput);
+ release(restore);
}
-void changedrive(char drive)
-{
- byte fv;
-
- fv=pos(drive,drives);
- if (fv==0) { blip(); return; }
- off();
- fv -= 1;
- shadow((fv % drlen)*25+25,(fv / drlen)*19+31,
- (fv % drlen)*25+40,45+(fv / drlen)*19,8,7);
- chdir(string(drive)+':');
- getcurrent(); scandir(); show();
- shadow((fv % drlen)*25+25,(fv / drlen)*19+31,
- (fv % drlen)*25+40,45+(fv / drlen)*19,15,8);
- on();
+void changedrive(char drive) {
+ byte fv;
+
+ fv = pos(drive, drives);
+ if (fv == 0) {
+ blip();
+ return;
+ }
+ off();
+ fv -= 1;
+ shadow((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
+ (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, 8, 7);
+ chdir(string(drive) + ':');
+ getcurrent();
+ scandir();
+ show();
+ shadow((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
+ (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, 15, 8);
+ on();
}
-void highlight(byte win,byte line)
-{
- switch (win) {
- case 3: invert(16,75+line*10,470,85+line*10); break;
- case 4: invert(491,75+line*10,620,85+line*10); break;
- }
- thumb(win);
+void highlight(byte win, byte line) {
+ switch (win) {
+ case 3:
+ invert(16, 75 + line * 10, 470, 85 + line * 10);
+ break;
+ case 4:
+ invert(491, 75 + line * 10, 620, 85 + line * 10);
+ break;
+ }
+ thumb(win);
}
-void repaint(byte whichwindow)
-{
- setfillstyle(1,1);
- { windowtype& with = threewins[whichwindow];
- bar(with.x1+1,with.y1+1,with.x2-8,with.y2-1);}
- top[whichwindow]=where[whichwindow];
- switch (whichwindow) {
- case file_win: showfiles(); break;
- case subdir_win: showdirs(); break;
- }
- thumb(whichwindow);
+void repaint(byte whichwindow) {
+ setfillstyle(1, 1);
+ {
+ windowtype &with = threewins[whichwindow];
+ bar(with.x1 + 1, with.y1 + 1, with.x2 - 8, with.y2 - 1);
+ }
+ top[whichwindow] = where[whichwindow];
+ switch (whichwindow) {
+ case file_win:
+ showfiles();
+ break;
+ case subdir_win:
+ showdirs();
+ break;
+ }
+ thumb(whichwindow);
}
-void fileblit(word xpos,word xlen,word y1,word y2, shortint dir, word ylen)
-{
- word fv; byte bit;
-
- for( bit=0; bit <= 3; bit ++)
- {
- fv=0;
- while (fv<ylen)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(mem[0xac00*(y1+fv*dir)*80+xpos],mem[0xac00*(y2+fv*dir)*80+xpos],xlen);
- fv += 1;
- }
- }
- bit=getpixel(0,0);
+void fileblit(word xpos, word xlen, word y1, word y2, shortint dir, word ylen) {
+ word fv;
+ byte bit;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ fv = 0;
+ while (fv < ylen) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(mem[0xac00 * (y1 + fv * dir) * 80 + xpos], mem[0xac00 * (y2 + fv * dir) * 80 + xpos], xlen);
+ fv += 1;
+ }
+ }
+ bit = getpixel(0, 0);
}
-void seekthrough(byte whichlist, byte& wherenow, char whatfor)
-{
- byte startedat;
-
- startedat=wherenow;
- do {
- wherenow += 1;
- if (wherenow>nums[whichlist]) wherenow=1;
- } while (!((startedat==wherenow) || (lists[whichlist][wherenow][1]==whatfor)));
- off();
- repaint(whichlist);
- on();
+void seekthrough(byte whichlist, byte &wherenow, char whatfor) {
+ byte startedat;
+
+ startedat = wherenow;
+ do {
+ wherenow += 1;
+ if (wherenow > nums[whichlist]) wherenow = 1;
+ } while (!((startedat == wherenow) || (lists[whichlist][wherenow][1] == whatfor)));
+ off();
+ repaint(whichlist);
+ on();
}
-void gotohome(byte whichlist)
-{
- off();
- where[whichlist]=1;
- repaint(whichlist);
- highlight(whichlist,1);
- on();
+void gotohome(byte whichlist) {
+ off();
+ where[whichlist] = 1;
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ on();
}
-void gotoend(byte whichlist)
-{
- off();
- where[whichlist]=nums[whichlist];
- repaint(whichlist);
- highlight(whichlist,1);
- on();
+void gotoend(byte whichlist) {
+ off();
+ where[whichlist] = nums[whichlist];
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ on();
}
-void pageup(byte whichlist)
-{
- off();
- if (where[whichlist]>9)
- {
- where[whichlist] -= 9;
- repaint(whichlist);
- highlight(whichlist,1);
- } else gotohome(whichlist);
- on();
+void pageup(byte whichlist) {
+ off();
+ if (where[whichlist] > 9) {
+ where[whichlist] -= 9;
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ } else gotohome(whichlist);
+ on();
}
-void pagedown(byte whichlist)
-{
- off();
- if (where[whichlist]<nums[whichlist]-9)
- {
- where[whichlist] += 9;
- repaint(whichlist);
- highlight(whichlist,1);
- } else gotoend(whichlist);
- on();
+void pagedown(byte whichlist) {
+ off();
+ if (where[whichlist] < nums[whichlist] - 9) {
+ where[whichlist] += 9;
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ } else gotoend(whichlist);
+ on();
}
void subdirparse(string r);
-static void movehl(byte which, shortint howmuch)
-{
- off();
- highlight(4,where[4]-top[4]+1);
- if (((where[which]+howmuch)>0) && ((where[which]+howmuch)<=(unsigned char)nums[4]))
- where[which]=where[which]+howmuch;
- highlight(4,where[4]-top[4]+1);
- on();
+static void movehl(byte which, shortint howmuch) {
+ off();
+ highlight(4, where[4] - top[4] + 1);
+ if (((where[which] + howmuch) > 0) && ((where[which] + howmuch) <= (unsigned char)nums[4]))
+ where[which] = where[which] + howmuch;
+ highlight(4, where[4] - top[4] + 1);
+ on();
}
-static void change_dir()
-{
- off(); dusk();
- /*$I-*/ chdir(lists[4][where[4]]);
- /*$I+*/
- if (ioresult!=0) { dawn(); blip(); return; }
- where[4]=1; top[4]=1;
- getcurrent(); scandir(); show();
- highlight(4,1);
- dawn(); on();
+static void change_dir() {
+ off();
+ dusk();
+ /*$I-*/ chdir(lists[4][where[4]]);
+ /*$I+*/
+ if (ioresult != 0) {
+ dawn();
+ blip();
+ return;
+ }
+ where[4] = 1;
+ top[4] = 1;
+ getcurrent();
+ scandir();
+ show();
+ highlight(4, 1);
+ dawn();
+ on();
}
void subdirparse(string r)
{
- switch (r[1]) {
- case creturn: change_dir(); break;
-
- case '\0': switch (r[2]) {
- case cup: if (where[4]-top[4]>0) /* Up */
- movehl(4,-1); /* Within range */
- else if (top[4]>1)
- { /* Outside range- must scroll */
- off();
- highlight(4,1);
- top[4] -= 1; where[4] -= 1;
- fileblit(61,17,166,176,-1,80);
- setfillstyle(1,1); bar(490,85,622,95); setcolor(11);
- outtextxy(497,87,string('[')+lists[dirs][where[4]]+']');
- highlight(4,1);
- on();
- }
- break;
- case cdown:
- if (where[4]-top[4]<8) /* Down */
- movehl(4,1);
- else if (top[4]+8<nums[4])
- {
- off();
- highlight(4,9);
- top[4] += 1; where[4] += 1;
- fileblit(60,17,97,87,1,80);
- setfillstyle(1,1); bar(490,165,622,175); setcolor(11);
- outtextxy(497,167,string('[')+lists[dirs][where[4]]+']');
- highlight(4,9);
- on();
- }
- break;
- case chome: gotohome(4); break;
- case cend: gotoend(4); break;
- case cpgup: pageup(4); break;
- case cpgdn: pagedown(4); break;
- case c_ao: change_dir(); break;
- }
- break;
- default: {
- off();
- seekthrough(4,where[4],lowchar(r[1]));
- highlight(4,1);
- on();
- }
- }
+ switch (r[1]) {
+ case creturn:
+ change_dir();
+ break;
+
+ case '\0':
+ switch (r[2]) {
+ case cup:
+ if (where[4] - top[4] > 0) /* Up */
+ movehl(4, -1); /* Within range */
+ else if (top[4] > 1) {
+ /* Outside range- must scroll */
+ off();
+ highlight(4, 1);
+ top[4] -= 1;
+ where[4] -= 1;
+ fileblit(61, 17, 166, 176, -1, 80);
+ setfillstyle(1, 1);
+ bar(490, 85, 622, 95);
+ setcolor(11);
+ outtextxy(497, 87, string('[') + lists[dirs][where[4]] + ']');
+ highlight(4, 1);
+ on();
+ }
+ break;
+ case cdown:
+ if (where[4] - top[4] < 8) /* Down */
+ movehl(4, 1);
+ else if (top[4] + 8 < nums[4]) {
+ off();
+ highlight(4, 9);
+ top[4] += 1;
+ where[4] += 1;
+ fileblit(60, 17, 97, 87, 1, 80);
+ setfillstyle(1, 1);
+ bar(490, 165, 622, 175);
+ setcolor(11);
+ outtextxy(497, 167, string('[') + lists[dirs][where[4]] + ']');
+ highlight(4, 9);
+ on();
+ }
+ break;
+ case chome:
+ gotohome(4);
+ break;
+ case cend:
+ gotoend(4);
+ break;
+ case cpgup:
+ pageup(4);
+ break;
+ case cpgdn:
+ pagedown(4);
+ break;
+ case c_ao:
+ change_dir();
+ break;
+ }
+ break;
+ default: {
+ off();
+ seekthrough(4, where[4], lowchar(r[1]));
+ highlight(4, 1);
+ on();
+ }
+ }
}
-void fileinfo(byte which);
-void filer_help();
-void wipe(byte which);
-
-void in_name_box(string x)
-{
- off();
- setfillstyle(1,1); bar(156,13,629,21);
- setcolor(7); outtextxy(159,14,x);
- on();
+void fileinfo(byte which);
+void filer_help();
+void wipe(byte which);
+
+void in_name_box(string x) {
+ off();
+ setfillstyle(1, 1);
+ bar(156, 13, 629, 21);
+ setcolor(7);
+ outtextxy(159, 14, x);
+ on();
}
void filesparse(string r);
-static void movehl1(byte which, shortint howmuch)
-{
- off();
- highlight(3,where[3]-top[3]+1);
- if (((where[which]+howmuch)>0) && ((where[which]+howmuch)<=(unsigned char)nums[3]))
- where[which]=where[which]+howmuch;
- highlight(3,where[3]-top[3]+1);
- on();
+static void movehl1(byte which, shortint howmuch) {
+ off();
+ highlight(3, where[3] - top[3] + 1);
+ if (((where[which] + howmuch) > 0) && ((where[which] + howmuch) <= (unsigned char)nums[3]))
+ where[which] = where[which] + howmuch;
+ highlight(3, where[3] - top[3] + 1);
+ on();
}
-static boolean selected_file()
-{
- boolean selected_file_result;
- if ((set::of('*','%', eos).has(descs[where[file_win]][1])) || (nums[3]==0))
- {
- blip();
- selected_file_result=false;
- } else
- {
- filename=lists[file_win][where[file_win]];
- filefound=true;
- selected_file_result=true;
- }
- return selected_file_result;
+static boolean selected_file() {
+ boolean selected_file_result;
+ if ((set::of('*', '%', eos).has(descs[where[file_win]][1])) || (nums[3] == 0)) {
+ blip();
+ selected_file_result = false;
+ } else {
+ filename = lists[file_win][where[file_win]];
+ filefound = true;
+ selected_file_result = true;
+ }
+ return selected_file_result;
}
void filesparse(string r)
{
- switch (r[1]) {
- case creturn: if (selected_file()) return; break;
- case '\0': switch (r[2]) {
- case cup: if (where[3]-top[3]>0) /* Up */
- movehl1(3,-1); /* Within range */
- else if (top[3]>1)
- { /* Outside range- must scroll */
- off();
- highlight(3,1);
- top[3] -= 1; where[3] -= 1;
- fileblit(1,58,166,176,-1,80);
- setfillstyle(1,1); bar( 15,85,472,95);
- show_file( 19,87,where[3]);
- highlight(3,1);
- on();
- }
- break;
- case cdown: if (where[3]-top[3]<8) /* Down */
- movehl1(3,1);
- else if (top[3]+8<nums[3])
- {
- off();
- highlight(3,9);
- top[3] += 1; where[3] += 1;
- fileblit(1,58,97,87,1,80);
- setfillstyle(1,1); bar( 15,165,472,175);
- show_file( 19,167,where[3]);
- highlight(3,9);
- on();
- }
- break;
- case c_ai: fileinfo(where[3]); break; /* alt-I: information. */
- case c_aw: wipe(where[3]); break; /* alt-W: wipe. */
- case chome: gotohome(3); break;
- case cend: gotoend(3); break;
- case cpgup: pageup(3); break;
- case cpgdn: pagedown(3); break;
- case c_ao: if (selected_file()) return; break;
- }
- break;
- default: {
- off();
- seekthrough(3,where[3],lowchar(r[1]));
- highlight(3,1);
- on();
- }
- }
- in_name_box(lists[files][where[3]]+".asg");
+ switch (r[1]) {
+ case creturn:
+ if (selected_file()) return;
+ break;
+ case '\0':
+ switch (r[2]) {
+ case cup:
+ if (where[3] - top[3] > 0) /* Up */
+ movehl1(3, -1); /* Within range */
+ else if (top[3] > 1) {
+ /* Outside range- must scroll */
+ off();
+ highlight(3, 1);
+ top[3] -= 1;
+ where[3] -= 1;
+ fileblit(1, 58, 166, 176, -1, 80);
+ setfillstyle(1, 1);
+ bar(15, 85, 472, 95);
+ show_file(19, 87, where[3]);
+ highlight(3, 1);
+ on();
+ }
+ break;
+ case cdown:
+ if (where[3] - top[3] < 8) /* Down */
+ movehl1(3, 1);
+ else if (top[3] + 8 < nums[3]) {
+ off();
+ highlight(3, 9);
+ top[3] += 1;
+ where[3] += 1;
+ fileblit(1, 58, 97, 87, 1, 80);
+ setfillstyle(1, 1);
+ bar(15, 165, 472, 175);
+ show_file(19, 167, where[3]);
+ highlight(3, 9);
+ on();
+ }
+ break;
+ case c_ai:
+ fileinfo(where[3]);
+ break; /* alt-I: information. */
+ case c_aw:
+ wipe(where[3]);
+ break; /* alt-W: wipe. */
+ case chome:
+ gotohome(3);
+ break;
+ case cend:
+ gotoend(3);
+ break;
+ case cpgup:
+ pageup(3);
+ break;
+ case cpgdn:
+ pagedown(3);
+ break;
+ case c_ao:
+ if (selected_file()) return;
+ break;
+ }
+ break;
+ default: {
+ off();
+ seekthrough(3, where[3], lowchar(r[1]));
+ highlight(3, 1);
+ on();
+ }
+ }
+ in_name_box(lists[files][where[3]] + ".asg");
}
-void entername(char r)
-{
- switch (r) {
- case '\10': if (filename[0]!='\0') filename[0] -= 1; break;
- case '\15': filefound=true; break;
- case '\40':; break; /* ignore spaces. */
- default:
- {
- if (length(filename)<55) filename=filename+r;
-
- if (length(filename)==1)
- {
- where[3]=1;
- seekthrough(3,where[3],filename[1]);
- }
- }
- }
-
- in_name_box(filename+".asg");
+void entername(char r) {
+ switch (r) {
+ case '\10':
+ if (filename[0] != '\0') filename[0] -= 1;
+ break;
+ case '\15':
+ filefound = true;
+ break;
+ case '\40':
+ ;
+ break; /* ignore spaces. */
+ default: {
+ if (length(filename) < 55) filename = filename + r;
+
+ if (length(filename) == 1) {
+ where[3] = 1;
+ seekthrough(3, where[3], filename[1]);
+ }
+ }
+ }
+
+ in_name_box(filename + ".asg");
}
-void changewin(byte i)
-{
- off();
- switch (nowwin) {
- case 3:case 4: highlight(nowwin,where[nowwin]-top[nowwin]+1); break;
- }
- setcolor(3); { windowtype& with = threewins[nowwin]; box(with.x1,with.y1,with.x2,with.y2,with.title);}
- nowwin=i;
- if (nowwin<1) nowwin=4; if (nowwin>4) nowwin=1;
- switch (nowwin) {
- case 3:case 4: highlight(nowwin,where[nowwin]-top[nowwin]+1); break;
- }
- on();
+void changewin(byte i) {
+ off();
+ switch (nowwin) {
+ case 3:
+ case 4:
+ highlight(nowwin, where[nowwin] - top[nowwin] + 1);
+ break;
+ }
+ setcolor(3);
+ {
+ windowtype &with = threewins[nowwin];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ nowwin = i;
+ if (nowwin < 1) nowwin = 4;
+ if (nowwin > 4) nowwin = 1;
+ switch (nowwin) {
+ case 3:
+ case 4:
+ highlight(nowwin, where[nowwin] - top[nowwin] + 1);
+ break;
+ }
+ on();
}
void checkmouse();
-static void relevant(string x)
-{
- setcolor(14); off(); { windowtype& with = threewins[nowwin]; box(with.x1,with.y1,with.x2,with.y2,with.title);}
- on(); if (nowwin==3) filesparse(x); else subdirparse(x);
+static void relevant(string x) {
+ setcolor(14);
+ off();
+ {
+ windowtype &with = threewins[nowwin];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ on();
+ if (nowwin == 3) filesparse(x);
+ else subdirparse(x);
}
-void checkmouse()
-{
- byte fv,new,waswin;
-
- check();
- if (mrelease>0)
- { /* Where did they click? */
- for( fv=1; fv <= 4; fv ++)
- { windowtype& with = threewins[fv];
- if (((cardinal)with.x1<=mx) && ((cardinal)with.x2>=mx) && ((cardinal)with.y1<=my) && ((cardinal)with.y2>=my))
- {
- waswin=nowwin;
-
- if (nowwin!=fv)
- {
- changewin(fv);
- off();
- setcolor(14); { windowtype& with1 = threewins[nowwin]; box(with1.x1,with1.y1,with1.x2,with1.y2,with1.title);}
- on();
- }
- /* Now... individual windows should do their own checkclicking. */
-
- switch (fv) {
- /* 1: no effect. */
- case 2: changedrive(which_drive(mx,my)); break; /* Change drive w/mouse. */
- case 3:case 4: if (my<175) { /* Click on highlight users. */
- if (mx>(cardinal)threewins[nowwin].x2-9)
- { /* Scroll bar. */
- if (my<(cardinal)threewins[nowwin].y1+10)
- relevant(null+cup); /* scroll up */
- else if (my>(cardinal)threewins[nowwin].y2-10)
- relevant(null+cdown); /* scroll down. */
- else if (my<(unsigned char)thumb_pos[nowwin])
- relevant(null+cpgup); /* above thumb-- page up. */
- else if (my>(unsigned char)thumb_pos[nowwin]+thumb_len[nowwin])
- relevant(null+cpgdn); /* above thumb-- page up. */
- else { /* On the thumb. */
- blip();
- }
- } else
- {
- new=top[fv]+(my-75) / 10-1;
-
- if ((new==where[fv]) && (nowwin==waswin))
- { /* Double-clicked, --> "OK" */
- /* filefound:=true;
- filename:=lists[fv,new];*/
- if (fv==3) filesparse("\15"); else subdirparse("\15");
- } else
- { /* Single-clicked, --> move highlight */
- off();
- highlight(fv,where[fv]-top[fv]+1);
- if ((new>0) && (new<=nums[fv]))
- where[fv]=new;
- highlight(fv,where[fv]-top[fv]+1);
- on();
- }
- }
- }
- break;
- }
-
- return; /* Since they've clicked in a window... */
- }}
-
- /* Righto, they must have clicked on a button. Which? */
-
- switch (my) {
- case 25 ... 45: /* Top row: Okay, Cancel. */
- switch (mx) {
- case 420 ... 520: switch (nowwin) {
- case 1: entername('\15'); break;
- case 3: filesparse("\15"); break;
- case 4: subdirparse("\15"); break;
- default: blip();
- }
- break;
- case 530 ... 630: cancelled=true; break;
- }
- break;
- case 50 ... 95: /* Bottom row: Wipe, Info. */
- switch (mx) {
- case 420 ... 520: if (nowwin==3) wipe(where[3]); else blip(); break;
- case 530 ... 630: if (nowwin==3) fileinfo(where[3]); else blip(); break;
- }
- break;
- case 180 ... 200: filer_help(); break; /* The "help" button. */
- }
- }
+void checkmouse() {
+ byte fv, new, waswin;
+
+ check();
+ if (mrelease > 0) {
+ /* Where did they click? */
+ for (fv = 1; fv <= 4; fv ++) {
+ windowtype &with = threewins[fv];
+ if (((cardinal)with.x1 <= mx) && ((cardinal)with.x2 >= mx) && ((cardinal)with.y1 <= my) && ((cardinal)with.y2 >= my)) {
+ waswin = nowwin;
+
+ if (nowwin != fv) {
+ changewin(fv);
+ off();
+ setcolor(14);
+ {
+ windowtype &with1 = threewins[nowwin];
+ box(with1.x1, with1.y1, with1.x2, with1.y2, with1.title);
+ }
+ on();
+ }
+ /* Now... individual windows should do their own checkclicking. */
+
+ switch (fv) {
+ /* 1: no effect. */
+ case 2:
+ changedrive(which_drive(mx, my));
+ break; /* Change drive w/mouse. */
+ case 3:
+ case 4:
+ if (my < 175) { /* Click on highlight users. */
+ if (mx > (cardinal)threewins[nowwin].x2 - 9) {
+ /* Scroll bar. */
+ if (my < (cardinal)threewins[nowwin].y1 + 10)
+ relevant(null + cup); /* scroll up */
+ else if (my > (cardinal)threewins[nowwin].y2 - 10)
+ relevant(null + cdown); /* scroll down. */
+ else if (my < (unsigned char)thumb_pos[nowwin])
+ relevant(null + cpgup); /* above thumb-- page up. */
+ else if (my > (unsigned char)thumb_pos[nowwin] + thumb_len[nowwin])
+ relevant(null + cpgdn); /* above thumb-- page up. */
+ else { /* On the thumb. */
+ blip();
+ }
+ } else {
+ new = top[fv] + (my - 75) / 10 - 1;
+
+ if ((new == where[fv]) && (nowwin == waswin)) {
+ /* Double-clicked, --> "OK" */
+ /* filefound:=true;
+ filename:=lists[fv,new];*/
+ if (fv == 3) filesparse("\15");
+ else subdirparse("\15");
+ } else {
+ /* Single-clicked, --> move highlight */
+ off();
+ highlight(fv, where[fv] - top[fv] + 1);
+ if ((new > 0) && (new <= nums[fv]))
+ where[fv] = new;
+ highlight(fv, where[fv] - top[fv] + 1);
+ on();
+ }
+ }
+ }
+ break;
+ }
+
+ return; /* Since they've clicked in a window... */
+ }
+ }
+
+ /* Righto, they must have clicked on a button. Which? */
+
+ switch (my) {
+ case 25 ... 45: /* Top row: Okay, Cancel. */
+ switch (mx) {
+ case 420 ... 520:
+ switch (nowwin) {
+ case 1:
+ entername('\15');
+ break;
+ case 3:
+ filesparse("\15");
+ break;
+ case 4:
+ subdirparse("\15");
+ break;
+ default:
+ blip();
+ }
+ break;
+ case 530 ... 630:
+ cancelled = true;
+ break;
+ }
+ break;
+ case 50 ... 95: /* Bottom row: Wipe, Info. */
+ switch (mx) {
+ case 420 ... 520:
+ if (nowwin == 3) wipe(where[3]);
+ else blip();
+ break;
+ case 530 ... 630:
+ if (nowwin == 3) fileinfo(where[3]);
+ else blip();
+ break;
+ }
+ break;
+ case 180 ... 200:
+ filer_help();
+ break; /* The "help" button. */
+ }
+ }
}
-string playaround()
-{
- char r,r2;
-
- string playaround_result;
- filefound=false; dawn();
-
- do {
- setcolor(14); off(); { windowtype& with = threewins[nowwin]; box(with.x1,with.y1,with.x2,with.y2,with.title);} on();
- do { checkmouse(); } while (!(keypressed() || filefound || cancelled));
- if (! (filefound || cancelled))
- {
- r=readkey();
- switch (r) {
- case ctab: changewin(nowwin+1); break;
- case cescape: {
- playaround_result="";
- return playaround_result;
- }
- break;
- case '\0': { /* parse extd keystroke */
- r2=readkey();
- switch (r2) {
- case cs_tab: changewin(nowwin-1); break;
- case c_an: changewin(1); break;
- case c_ad: changewin(2); break;
- case c_af: changewin(3); break;
- case c_as: changewin(4); break;
- case c_ac: cancelled=false; break;
- case c_ah:case cf1: filer_help(); break; /* alt-H: help. */
- default:
- switch (nowwin) {
- case 3: filesparse(string('\0')+r2); break;
- case 4: subdirparse(string('\0')+r2); break;
- }
- }
- }
- break;
- default:
- { /* Pass keystroke to current window */
- switch (nowwin) {
- case 1: entername(r); break;
- case 2: changedrive(upcase(r)); break;
- case 4: subdirparse(r); break;
- case 3: filesparse(r); break;
- default: blip();
- }
- }
- }
-
- }
-
- if (filefound)
- {
- dusk();
- playaround_result=filename;
- return playaround_result;
- }
-
- if (cancelled)
- {
- dusk();
- playaround_result="";
- return playaround_result;
- }
- } while (!false);
- return playaround_result;
+string playaround() {
+ char r, r2;
+
+ string playaround_result;
+ filefound = false;
+ dawn();
+
+ do {
+ setcolor(14);
+ off();
+ {
+ windowtype &with = threewins[nowwin];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ on();
+ do {
+ checkmouse();
+ } while (!(keypressed() || filefound || cancelled));
+ if (!(filefound || cancelled)) {
+ r = readkey();
+ switch (r) {
+ case ctab:
+ changewin(nowwin + 1);
+ break;
+ case cescape: {
+ playaround_result = "";
+ return playaround_result;
+ }
+ break;
+ case '\0': { /* parse extd keystroke */
+ r2 = readkey();
+ switch (r2) {
+ case cs_tab:
+ changewin(nowwin - 1);
+ break;
+ case c_an:
+ changewin(1);
+ break;
+ case c_ad:
+ changewin(2);
+ break;
+ case c_af:
+ changewin(3);
+ break;
+ case c_as:
+ changewin(4);
+ break;
+ case c_ac:
+ cancelled = false;
+ break;
+ case c_ah:
+ case cf1:
+ filer_help();
+ break; /* alt-H: help. */
+ default:
+ switch (nowwin) {
+ case 3:
+ filesparse(string('\0') + r2);
+ break;
+ case 4:
+ subdirparse(string('\0') + r2);
+ break;
+ }
+ }
+ }
+ break;
+ default: {
+ /* Pass keystroke to current window */
+ switch (nowwin) {
+ case 1:
+ entername(r);
+ break;
+ case 2:
+ changedrive(upcase(r));
+ break;
+ case 4:
+ subdirparse(r);
+ break;
+ case 3:
+ filesparse(r);
+ break;
+ default:
+ blip();
+ }
+ }
+ }
+
+ }
+
+ if (filefound) {
+ dusk();
+ playaround_result = filename;
+ return playaround_result;
+ }
+
+ if (cancelled) {
+ dusk();
+ playaround_result = "";
+ return playaround_result;
+ }
+ } while (!false);
+ return playaround_result;
}
-void drawup()
-{
- off();
- loading=true;
- setup();
- show(); show_drives();
- on();
+void drawup() {
+ off();
+ loading = true;
+ setup();
+ show();
+ show_drives();
+ on();
}
-void little_cls()
-{
- setfillstyle(1,1); bar(2,2,637,197); /* Interesting information coming up! */
+void little_cls() {
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197); /* Interesting information coming up! */
}
-void wait_for_keypress_or_mouse_click()
-{
- char r;
+void wait_for_keypress_or_mouse_click() {
+ char r;
- do { check(); } while (!((mrelease>0) || keypressed()));
- while (keypressed()) r=readkey();
+ do {
+ check();
+ } while (!((mrelease > 0) || keypressed()));
+ while (keypressed()) r = readkey();
}
void fileinfo(byte which);
-static void display(integer y, string left,string right)
-{
- y=17+y*12;
- settextjustify(2,1); setcolor(11); outtextxy(315,y,left);
- settextjustify(0,1); setcolor(15); outtextxy(325,y,right);
+static void display(integer y, string left, string right) {
+ y = 17 + y * 12;
+ settextjustify(2, 1);
+ setcolor(11);
+ outtextxy(315, y, left);
+ settextjustify(0, 1);
+ setcolor(15);
+ outtextxy(325, y, right);
}
void fileinfo(byte which)
- /* This gives information on the file whose name is in lists[files,which]. */
+/* This gives information on the file whose name is in lists[files,which]. */
{
- ednahead eh;
- untyped_file f;
- varying_string<4> os;
+ ednahead eh;
+ untyped_file f;
+ varying_string<4> os;
- /* Firstly, we must check whether or not it's an Avalot file. This is easily
- done, since the descriptions of all others always begin with a star. */
+ /* Firstly, we must check whether or not it's an Avalot file. This is easily
+ done, since the descriptions of all others always begin with a star. */
- if ((descs[which][1]=='*') || (nums[3]==0))
- { /* it is. */
- blip(); /* Naaaarghh! */
- return;
- }
+ if ((descs[which][1] == '*') || (nums[3] == 0)) {
+ /* it is. */
+ blip(); /* Naaaarghh! */
+ return;
+ }
- /* Anyway... it wasn't. */
+ /* Anyway... it wasn't. */
- assign(f,lists[files][which]+".asg");
- reset(f,1);
- seek(f,177);
- blockread(f,eh,sizeof(eh));
- close(f);
+ assign(f, lists[files][which] + ".asg");
+ reset(f, 1);
+ seek(f, 177);
+ blockread(f, eh, sizeof(eh));
+ close(f);
- /* We now hold its EDNA record. */
+ /* We now hold its EDNA record. */
- off();
- little_cls(); /* Interesting information coming up! */
+ off();
+ little_cls(); /* Interesting information coming up! */
- {
- display(0,"File:",eh.fn);
- display(1,"Description:",eh.desc);
- display(2,"Saved by:", eh.game);
- display(3,"version:", eh.verstr);
+ {
+ display(0, "File:", eh.fn);
+ display(1, "Description:", eh.desc);
+ display(2, "Saved by:", eh.game);
+ display(3, "version:", eh.verstr);
- display(4,"under", eh.os);
+ display(4, "under", eh.os);
- display(6,"Saved on:",strf(eh.d)+'-'+strf(eh.m)+'-'+strf(eh.y));
+ display(6, "Saved on:", strf(eh.d) + '-' + strf(eh.m) + '-' + strf(eh.y));
- display(9,"No. of times saved:",strf(eh.saves));
+ display(9, "No. of times saved:", strf(eh.saves));
- display(11,"Money:",eh.money);
- display(12,"Score:",strf(eh.points));
- }
+ display(11, "Money:", eh.money);
+ display(12, "Score:", strf(eh.points));
+ }
- settextjustify(1,1);
- shbox(400,177,600,195,"[Press any key...]");
- settextjustify(0,2); on();
- wait_for_keypress_or_mouse_click();
+ settextjustify(1, 1);
+ shbox(400, 177, 600, 195, "[Press any key...]");
+ settextjustify(0, 2);
+ on();
+ wait_for_keypress_or_mouse_click();
- off(); setfillstyle(1,1); bar(2,2,637,197);
- drawup();
- off(); highlight(3,where[3]-top[3]+1); on();
+ off();
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ drawup();
+ off();
+ highlight(3, where[3] - top[3] + 1);
+ on();
}
void filer_help()
- /* Just some general help... */
+/* Just some general help... */
{
- off(); little_cls();
-
- setcolor(15);
- outtextxy(10, 10,"To change to a particular pane:");
- outtextxy(10, 50,"To choose a file:");
- outtextxy(10,100,"To change drives:");
- outtextxy(10,140,"Finally...");
-
- setcolor(14);
- outtextxy(20, 20,"Press Alt and the initial letter simultaneously.");
- outtextxy(20, 30,"(e.g. to change to the Name pane, press Alt-N.)");
- outtextxy(20, 60,"Either type its name in the Name pane or choose it");
- outtextxy(20, 70,"from the list in the Files pane. You may either use");
- outtextxy(20, 80,"a mouse or the keyboard to do this.");
- outtextxy(20,110,"Move into the Drives pane and press the letter of the");
- outtextxy(20,120,"drive you want.");
- outtextxy(20,150,"Either select OK to load the file, or Cancel to back out.");
-
- settextjustify(1,1);
- shbox(400,177,600,195,"[Press any key...]");
- settextjustify(0,2); on();
- wait_for_keypress_or_mouse_click();
-
- off(); setfillstyle(1,1); bar(2,2,637,197);
- drawup(); off();
- if (set::of(3,4, eos).has(nowwin)) highlight(nowwin,where[nowwin]-top[nowwin]+1);
- on();
+ off();
+ little_cls();
+
+ setcolor(15);
+ outtextxy(10, 10, "To change to a particular pane:");
+ outtextxy(10, 50, "To choose a file:");
+ outtextxy(10, 100, "To change drives:");
+ outtextxy(10, 140, "Finally...");
+
+ setcolor(14);
+ outtextxy(20, 20, "Press Alt and the initial letter simultaneously.");
+ outtextxy(20, 30, "(e.g. to change to the Name pane, press Alt-N.)");
+ outtextxy(20, 60, "Either type its name in the Name pane or choose it");
+ outtextxy(20, 70, "from the list in the Files pane. You may either use");
+ outtextxy(20, 80, "a mouse or the keyboard to do this.");
+ outtextxy(20, 110, "Move into the Drives pane and press the letter of the");
+ outtextxy(20, 120, "drive you want.");
+ outtextxy(20, 150, "Either select OK to load the file, or Cancel to back out.");
+
+ settextjustify(1, 1);
+ shbox(400, 177, 600, 195, "[Press any key...]");
+ settextjustify(0, 2);
+ on();
+ wait_for_keypress_or_mouse_click();
+
+ off();
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ drawup();
+ off();
+ if (set::of(3, 4, eos).has(nowwin)) highlight(nowwin, where[nowwin] - top[nowwin] + 1);
+ on();
}
void wipe(byte which)
- /* This wipes the file whose name is in lists[files,which]. */
+/* This wipes the file whose name is in lists[files,which]. */
{
- char r;
- untyped_file f;
-
-
- off(); little_cls();
-
- settextjustify(1,1);
- outtextxy(320,100,string("Are you sure you want to delete \"")+
- lists[files][which]+".asg\"?");
- shbox(400,177,600,195,"[Y/N]");
-
- do {
- r=upcase(readkey());
- if (r=='Y')
- {
- assign(f,lists[files][which]+".asg"); /*$I-*/ erase(f); /*$I+*/
-
- setcolor(14);
- if (ioresult==0)
- {
- scandir();
- outtextxy(100,140,"Deleted.");
- } else
- outtextxy(100,140,"Not deleted (some problem...)");
-
- shbox(400,177,600,195,"[Press any key...]");
- on();
- wait_for_keypress_or_mouse_click(); off();
- }
- } while (!(set::of('Y','N', eos).has(r)));
-
- settextjustify(0,2); setcolor(14);
- setfillstyle(1,1); bar(2,2,637,197);
- drawup();
- off(); highlight(3,where[3]-top[3]+1); on();
+ char r;
+ untyped_file f;
+
+
+ off();
+ little_cls();
+
+ settextjustify(1, 1);
+ outtextxy(320, 100, string("Are you sure you want to delete \"") +
+ lists[files][which] + ".asg\"?");
+ shbox(400, 177, 600, 195, "[Y/N]");
+
+ do {
+ r = upcase(readkey());
+ if (r == 'Y') {
+ assign(f, lists[files][which] + ".asg"); /*$I-*/ erase(f); /*$I+*/
+
+ setcolor(14);
+ if (ioresult == 0) {
+ scandir();
+ outtextxy(100, 140, "Deleted.");
+ } else
+ outtextxy(100, 140, "Not deleted (some problem...)");
+
+ shbox(400, 177, 600, 195, "[Press any key...]");
+ on();
+ wait_for_keypress_or_mouse_click();
+ off();
+ }
+ } while (!(set::of('Y', 'N', eos).has(r)));
+
+ settextjustify(0, 2);
+ setcolor(14);
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ drawup();
+ off();
+ highlight(3, where[3] - top[3] + 1);
+ on();
}
-string do_filer()
-{
- pathstr p; byte groi; dirstr original_directory;
-
- string do_filer_result;
- getdir(0,original_directory);
- dusk();
- oncandopageswap=false; cancelled=false;
- copypage(3,1-cp); /* Store old screen. */ groi=getpixel(0,0);
- off();
-
- firstsetup();
- scandir();
- nowwin=1; getcurrent();
- firstsetup(); drawup();
- on();
- mousepage(filer_page);
-
- p=playaround();
- if (p!="") p=fexpand(p+".ASG");
- do_filer_result=p;
- filename="";
-
- mousepage(cp);
- dusk(); off();
- oncandopageswap=true;
- copypage(1-cp,3); /* Restore old screen. */ groi=getpixel(0,0);
- on_virtual(); dawn(); fix_flashers();
-
- setvisualpage(cp);
- setactivepage(1-cp);
- chdir(original_directory);
-
- return do_filer_result;
+string do_filer() {
+ pathstr p;
+ byte groi;
+ dirstr original_directory;
+
+ string do_filer_result;
+ getdir(0, original_directory);
+ dusk();
+ oncandopageswap = false;
+ cancelled = false;
+ copypage(3, 1 - cp); /* Store old screen. */ groi = getpixel(0, 0);
+ off();
+
+ firstsetup();
+ scandir();
+ nowwin = 1;
+ getcurrent();
+ firstsetup();
+ drawup();
+ on();
+ mousepage(filer_page);
+
+ p = playaround();
+ if (p != "") p = fexpand(p + ".ASG");
+ do_filer_result = p;
+ filename = "";
+
+ mousepage(cp);
+ dusk();
+ off();
+ oncandopageswap = true;
+ copypage(1 - cp, 3); /* Restore old screen. */ groi = getpixel(0, 0);
+ on_virtual();
+ dawn();
+ fix_flashers();
+
+ setvisualpage(cp);
+ setactivepage(1 - cp);
+ chdir(original_directory);
+
+ return do_filer_result;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/fileunit.h b/engines/avalanche/fileunit.h
index 034d1e5914..e891ff90e2 100644
--- a/engines/avalanche/fileunit.h
+++ b/engines/avalanche/fileunit.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/filing.cpp b/engines/avalanche/filing.cpp
index 51c9334b7d..78abec7e41 100644
--- a/engines/avalanche/filing.cpp
+++ b/engines/avalanche/filing.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -41,132 +41,164 @@
namespace Avalanche {
-const array<1,12,varying_string<6> > months =
- {{"Jan*","Feb*","March","April","May","June","July","August",
- "Sept&","Oct&","Nov&","Dec&"}};
-const string ednaid = string("TT")+'\261'+'\36'+'\1'+'\113'+'\261'+'\231'+'\261';
-const array<1,6,varying_string<7> > systems =
- {{"DOS","Windows","OS/2","Mac","Amiga","ST"}};
+const array<1, 12, varying_string<6> > months = {
+ {
+ "Jan*", "Feb*", "March", "April", "May", "June", "July", "August",
+ "Sept&", "Oct&", "Nov&", "Dec&"
+ }
+};
+const string ednaid = string("TT") + '\261' + '\36' + '\1' + '\113' + '\261' + '\231' + '\261';
+const array<1, 6, varying_string<7> > systems =
+{{"DOS", "Windows", "OS/2", "Mac", "Amiga", "ST"}};
struct edhead { /* Edna header */
- /* This header starts at byte offset 177 in the .ASG file. */
- array<1,9,char> id; /* signature */
- word revision; /* EDNA revision, here 2 (1=dna256) */
- varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
- varying_string<15> shortname; /* Short name, eg Avalot */
- word number; /* Game's code number, here 2 */
- word ver; /* Version number as integer (eg 1.00 = 100) */
- varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
- varying_string<12> filename; /* Filename, eg AVALOT.EXE */
- byte os; /* Saving OS (here 1=DOS). See below for others.*/
-
- /* Info on this particular game */
-
- varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
- byte d,m; /* D, M, Y are the Day, Month & Year this game was... */
- word y; /* ...saved on. */
- varying_string<40> desc; /* Description of game (same as in Avaricius!) */
- word len; /* Length of DNA (it's not going to be above 65535!) */
-
- /* Quick reference & miscellaneous */
-
- word saves; /* no. of times this game has been saved */
- integer cash; /* contents of your wallet in numerical form */
- varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
- word points; /* your score */
-
- /* DNA values follow, then footer (which is ignored) */
+ /* This header starts at byte offset 177 in the .ASG file. */
+ array<1, 9, char> id; /* signature */
+ word revision; /* EDNA revision, here 2 (1=dna256) */
+ varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
+ varying_string<15> shortname; /* Short name, eg Avalot */
+ word number; /* Game's code number, here 2 */
+ word ver; /* Version number as integer (eg 1.00 = 100) */
+ varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
+ varying_string<12> filename; /* Filename, eg AVALOT.EXE */
+ byte os; /* Saving OS (here 1=DOS). See below for others.*/
+
+ /* Info on this particular game */
+
+ varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
+ byte d, m; /* D, M, Y are the Day, Month & Year this game was... */
+ word y; /* ...saved on. */
+ varying_string<40> desc; /* Description of game (same as in Avaricius!) */
+ word len; /* Length of DNA (it's not going to be above 65535!) */
+
+ /* Quick reference & miscellaneous */
+
+ word saves; /* no. of times this game has been saved */
+ integer cash; /* contents of your wallet in numerical form */
+ varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
+ word points; /* your score */
+
+ /* DNA values follow, then footer (which is ignored) */
};
- /* Possible values of edhead.os:
- 1 = DOS 4 = Mac
- 2 = Windows 5 = Amiga
- 3 = OS/2 6 = ST */
+/* Possible values of edhead.os:
+ 1 = DOS 4 = Mac
+ 2 = Windows 5 = Amiga
+ 3 = OS/2 6 = ST */
/*implementation*/
untyped_file f;
byte fv;
-array<1,255,word> dna256;
+array<1, 255, word> dna256;
boolean ok;
edhead e;
-void info256(string x) /* info on dna256 *.ASG files */
-{
- varying_string<40> describe;
-;
- assign(f,x);
- /*$I-*/ reset(f,1);
- seek(f,47);
- blockread(f,describe,40);
- blockread(f,dna256,sizeof(dna256));
- close(f); /*$I+*/
- {;
- e.revision=1;
- e.game="Denarius Avaricius Sextus";
- e.shortname="Avaricius";
- e.number=1;
- e.verstr="[?]";
- e.filename="AVVY.EXE";
- e.os=1; /* Dos */
- e.fn=x;
- e.d=dna256[7]; e.m=dna256[8]; e.y=dna256[9];
- e.desc=describe;
- e.len=512;
- e.saves=dna256[6];
- e.cash=dna256[30];
- e.money=strf(e.cash)+" denari";
- if (e.cash==1) e.money=e.money+"us"; else e.money=e.money+'i';
- e.points=dna256[36];
- }
+void info256(string x) { /* info on dna256 *.ASG files */
+ varying_string<40> describe;
+ ;
+ assign(f, x);
+ /*$I-*/ reset(f, 1);
+ seek(f, 47);
+ blockread(f, describe, 40);
+ blockread(f, dna256, sizeof(dna256));
+ close(f); /*$I+*/
+ {
+ ;
+ e.revision = 1;
+ e.game = "Denarius Avaricius Sextus";
+ e.shortname = "Avaricius";
+ e.number = 1;
+ e.verstr = "[?]";
+ e.filename = "AVVY.EXE";
+ e.os = 1; /* Dos */
+ e.fn = x;
+ e.d = dna256[7];
+ e.m = dna256[8];
+ e.y = dna256[9];
+ e.desc = describe;
+ e.len = 512;
+ e.saves = dna256[6];
+ e.cash = dna256[30];
+ e.money = strf(e.cash) + " denari";
+ if (e.cash == 1) e.money = e.money + "us";
+ else e.money = e.money + 'i';
+ e.points = dna256[36];
+ }
}
-string enlarge(string x)
-{string enlarge_result;
-;
- switch (x[length(x)]) {
- case '*': {; x[0] -= 1; x=x+"uary"; } break;
- case '&': {; x[0] -= 1; x=x+"ember"; } break;
- }
- enlarge_result=x;
-return enlarge_result;
+string enlarge(string x) {
+ string enlarge_result;
+ ;
+ switch (x[length(x)]) {
+ case '*': {
+ ;
+ x[0] -= 1;
+ x = x + "uary";
+ }
+ break;
+ case '&': {
+ ;
+ x[0] -= 1;
+ x = x + "ember";
+ }
+ break;
+ }
+ enlarge_result = x;
+ return enlarge_result;
}
-string th(byte x)
-{
- varying_string<4> n;
-string th_result;
-;
- n=strf(x);
- switch (x) {
- case 1:case 21:case 31: n=n+"st"; break;
- case 2:case 22: n=n+"nd"; break;
- case 3:case 23: n=n+"rd"; break;
- default: n=n+"th";
- }
- th_result=n;
-return th_result;
+string th(byte x) {
+ varying_string<4> n;
+ string th_result;
+ ;
+ n = strf(x);
+ switch (x) {
+ case 1:
+ case 21:
+ case 31:
+ n = n + "st";
+ break;
+ case 2:
+ case 22:
+ n = n + "nd";
+ break;
+ case 3:
+ case 23:
+ n = n + "rd";
+ break;
+ default:
+ n = n + "th";
+ }
+ th_result = n;
+ return th_result;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- info256("t:justb4.asg");
-
- {;
- output << "DNA coding: ";
- switch (e.revision) {
- case 1: output << "dna256" << NL; break;
- case 2: output << "E.D.N.A." << NL; break;
- default: output << "Unknown!" << NL;
- }
- output << "Filename: " << e.game << " (version " << e.verstr << ')' << NL;
- output << "Description: " << e.desc << NL;
- output << "Cash: " << e.money << NL;
- output << "Score: " << e.points << NL;
- output << "Date: " << th(e.d) << ' ' << enlarge(months[e.m]) << ' ' << e.y << NL;
- output << "Number of saves: " << e.saves << NL;
- }
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ info256("t:justb4.asg");
+
+ {
+ ;
+ output << "DNA coding: ";
+ switch (e.revision) {
+ case 1:
+ output << "dna256" << NL;
+ break;
+ case 2:
+ output << "E.D.N.A." << NL;
+ break;
+ default:
+ output << "Unknown!" << NL;
+ }
+ output << "Filename: " << e.game << " (version " << e.verstr << ')' << NL;
+ output << "Description: " << e.desc << NL;
+ output << "Cash: " << e.money << NL;
+ output << "Score: " << e.points << NL;
+ output << "Date: " << th(e.d) << ' ' << enlarge(months[e.m]) << ' ' << e.y << NL;
+ output << "Number of saves: " << e.saves << NL;
+ }
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/folktemp.cpp b/engines/avalanche/folktemp.cpp
index 4745d959d0..03da49f375 100644
--- a/engines/avalanche/folktemp.cpp
+++ b/engines/avalanche/folktemp.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,14 +33,17 @@ namespace Avalanche {
const integer picsize = 966;
const integer number_of_objects = 19;
-const array<1,65,char> thinks_header =
- string("This is an Avalot file, which is subject to copyright. Have fun.")+'\32';
+const array<1, 65, char> thinks_header =
+ string("This is an Avalot file, which is subject to copyright. Have fun.") + '\32';
-const array<0,19,byte> order =
- {{ 4, 19, 1, 18, 15, 9, 12, 13, 17, 10, 2, 6, 3, 5, 7, 14,
- 16,
+const array<0, 19, byte> order = {
+ {
+ 4, 19, 1, 18, 15, 9, 12, 13, 17, 10, 2, 6, 3, 5, 7, 14,
+ 16,
- 0, 11, 8}};
+ 0, 11, 8
+ }
+};
/*
pAvalot=#150; pSpludwick=#151; pCrapulus=#152; pDrDuck=#153;
@@ -52,56 +55,64 @@ const array<0,19,byte> order =
pArkata=#175; pGeida=#176; pWiseWoman=#178;
*/
-integer gd,gm;
+integer gd, gm;
untyped_file f;
pointer p;
byte noo;
-void load()
-{
- byte a0 /*absolute $A000:1200*/;
- byte bit;
- untyped_file f;
-;
- assign(f,"d:folk.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f); bit=getpixel(0,0);
+void load() {
+ byte a0 /*absolute $A000:1200*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, "d:folk.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-void get_one()
-{;
+void get_one() {
+ ;
- gd=((order[noo] % 9)*70+10);
- gm=((order[noo] / 9)*40+20);
+ gd = ((order[noo] % 9) * 70 + 10);
+ gm = ((order[noo] / 9) * 40 + 20);
- getimage(gd,gm,gd+59,gm+29,p);
- putimage(gd,gm,p,notput);
- blockwrite(f,p,picsize);
+ getimage(gd, gm, gd + 59, gm + 29, p);
+ putimage(gd, gm, p, notput);
+ blockwrite(f, p, picsize);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
- load(); noo=0;
+ load();
+ noo = 0;
- assign(f,"folk.avd");
- getmem(p,picsize);
- rewrite(f,1);
- blockwrite(f,thinks_header,65);
+ assign(f, "folk.avd");
+ getmem(p, picsize);
+ rewrite(f, 1);
+ blockwrite(f, thinks_header, 65);
- for( noo=0; noo <= number_of_objects; noo ++)
- get_one();
+ for (noo = 0; noo <= number_of_objects; noo ++)
+ get_one();
- close(f); freemem(p,picsize);
-return EXIT_SUCCESS;
+ close(f);
+ freemem(p, picsize);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/fontslid.cpp b/engines/avalanche/fontslid.cpp
index 8955546b03..3173c6921c 100644
--- a/engines/avalanche/fontslid.cpp
+++ b/engines/avalanche/fontslid.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,25 +29,31 @@
namespace Avalanche {
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
fonttype font1;
byte fv;
char r;
file<fonttype> f;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- assign(f,"v:avalot.fnt"); reset(f); f >> font1; close(f);
- for( r='\0'; r <= '\377'; r ++)
- {;
- for( fv= 0; fv <= 3; fv ++) font1[r][fv]=(cardinal)font1[r][fv] >> 1;
- for( fv= 7; fv <= 8; fv ++) font1[r][fv]=font1[r][fv] << 1;
- for( fv= 9; fv <= 14; fv ++) font1[r][fv]=font1[r][fv] << 2;
- }
- assign(f,"v:avitalic.fnt"); rewrite(f); f << font1; close(f);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ assign(f, "v:avalot.fnt");
+ reset(f);
+ f >> font1;
+ close(f);
+ for (r = '\0'; r <= '\377'; r ++) {
+ ;
+ for (fv = 0; fv <= 3; fv ++) font1[r][fv] = (cardinal)font1[r][fv] >> 1;
+ for (fv = 7; fv <= 8; fv ++) font1[r][fv] = font1[r][fv] << 1;
+ for (fv = 9; fv <= 14; fv ++) font1[r][fv] = font1[r][fv] << 2;
+ }
+ assign(f, "v:avitalic.fnt");
+ rewrite(f);
+ f << font1;
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/frere.cpp b/engines/avalanche/frere.cpp
index ddd622cb9a..257e2b342c 100644
--- a/engines/avalanche/frere.cpp
+++ b/engines/avalanche/frere.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,23 +29,26 @@
namespace Avalanche {
-typedef array<1,31,byte> tunetype;
+typedef array<1, 31, byte> tunetype;
const integer lower = 0;
- const integer same = 1;
+const integer same = 1;
const integer higher = 2;
-const array<1,12,char> keys = "QWERTYUIOP[]";
-const array<1,12,word> notes =
-{{196,220,247,262,294,330,350,392,440,494,523,587}};
+const array<1, 12, char> keys = "QWERTYUIOP[]";
+const array<1, 12, word> notes =
+{{196, 220, 247, 262, 294, 330, 350, 392, 440, 494, 523, 587}};
-const tunetype tune =
-{{higher,higher,lower,same,higher,higher,lower,higher,higher,higher,
- lower,higher,higher,
- same,higher,lower,lower,lower,lower,higher,higher,lower,lower,lower,
- lower,same,lower,higher,same,lower,higher}};
+const tunetype tune = {
+ {
+ higher, higher, lower, same, higher, higher, lower, higher, higher, higher,
+ lower, higher, higher,
+ same, higher, lower, lower, lower, lower, higher, higher, lower, lower, lower,
+ lower, same, lower, higher, same, lower, higher
+ }
+};
-byte this_one,last_one;
+byte this_one, last_one;
char pressed;
@@ -53,77 +56,82 @@ byte value;
tunetype played;
-void store_(byte what)
-{;
+void store_(byte what) {
+ ;
- move(played[2],played[1],sizeof(played)-1);
+ move(played[2], played[1], sizeof(played) - 1);
- played[31]=what;
+ played[31] = what;
}
-boolean they_match()
-{
- byte fv;
-boolean they_match_result;
-;
+boolean they_match() {
+ byte fv;
+ boolean they_match_result;
+ ;
- for( fv=1; fv <= sizeof(played); fv ++)
- if (played[fv]!=tune[fv])
- {;
- they_match_result=false;
- return they_match_result;
- }
+ for (fv = 1; fv <= sizeof(played); fv ++)
+ if (played[fv] != tune[fv]) {
+ ;
+ they_match_result = false;
+ return they_match_result;
+ }
- they_match_result=true;
+ they_match_result = true;
-return they_match_result;
+ return they_match_result;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
- textattr=30; clrscr; output << NL;
+ textattr = 30;
+ clrscr;
+ output << NL;
- do {
+ do {
- pressed=upcase(readkey());
+ pressed = upcase(readkey());
- value=pos(pressed,keys);
+ value = pos(pressed, keys);
- if (value>0)
- {;
+ if (value > 0) {
+ ;
- last_one=this_one;
- this_one=value;
+ last_one = this_one;
+ this_one = value;
- sound(notes[this_one]);
- delay(100);
- nosound;
+ sound(notes[this_one]);
+ delay(100);
+ nosound;
- if (this_one<last_one)
- store_(lower); else
+ if (this_one < last_one)
+ store_(lower);
+ else
- if (this_one==last_one)
- store_(same); else
+ if (this_one == last_one)
+ store_(same);
+ else
- store_(higher);
+ store_(higher);
- if (they_match())
- {;
- textattr=94; clrscr; output << NL;
- output << string('\7')+"It matches!" << NL;
- input >> NL;
- exit(0);
- }
+ if (they_match()) {
+ ;
+ textattr = 94;
+ clrscr;
+ output << NL;
+ output << string('\7') + "It matches!" << NL;
+ input >> NL;
+ exit(0);
+ }
- }
+ }
- } while (!(pressed=='\33'));
+ } while (!(pressed == '\33'));
- output << "*** PROGRAM STOPPED! ***" << NL;
-return EXIT_SUCCESS;
+ output << "*** PROGRAM STOPPED! ***" << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/g-room.cpp b/engines/avalanche/g-room.cpp
index c1e81e0525..8f84e53100 100644
--- a/engines/avalanche/g-room.cpp
+++ b/engines/avalanche/g-room.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,410 +32,447 @@
namespace Avalanche {
-const array<1,5,shortint> adjustment = {{7,0,7,7,7}};
+const array<1, 5, shortint> adjustment = {{7, 0, 7, 7, 7}};
-const array<0,3,byte> plane_to_use = {{2,2,2,3}};
+const array<0, 3, byte> plane_to_use = {{2, 2, 2, 3}};
-const array<1,5,byte> waveorder = {{5,1,2,3,4}};
+const array<1, 5, byte> waveorder = {{5, 1, 2, 3, 4}};
-const array<1,26,byte> glerkfade =
- {{1,1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,3,3,2,2,1}};
+const array<1, 26, byte> glerkfade =
+{{1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 1}};
-const array<1,18,byte> greldetfade = {{1,2,3,4,5,6,6,6,5,5,4,4,3,3,2,2,1,1}};
+const array<1, 18, byte> greldetfade = {{1, 2, 3, 4, 5, 6, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1}};
-enum flavourtype {ch_ega,ch_bgi,ch_natural,ch_two,ch_one, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, ch_natural, ch_two, ch_one, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
};
-typedef array<1,6,0,3,0,34,1,9,byte> glerktype;
+typedef array<1, 6, 0, 3, 0, 34, 1, 9, byte> glerktype;
untyped_file f;
chunkblocktype cb;
-array<1,5,2,3,0,65,0,25,byte> ghost;
+array<1, 5, 2, 3, 0, 65, 0, 25, byte> ghost;
byte fv;
pointer memlevel;
-byte y,yy,bit,xofs;
+byte y, yy, bit, xofs;
-array<0,1,pointer> eyes;
+array<0, 1, pointer> eyes;
pointer exclamation;
-array<1,6,pointer> aargh;
-array<1,3,pointer> bat;
-glerktype* glerk;
-array<1,5,pointer> green_eyes;
-matrix<1,6,false,true,pointer> greldet;
+array<1, 6, pointer> aargh;
+array<1, 3, pointer> bat;
+glerktype *glerk;
+array<1, 5, pointer> green_eyes;
+matrix<1, 6, false, true, pointer> greldet;
-array<1,6,pointtype> aargh_where;
+array<1, 6, pointtype> aargh_where;
-integer gd,gm; boolean gb;
+integer gd, gm;
+boolean gb;
byte glerkstage;
-integer bat_x,bat_y; word bat_count; shortint aargh_count;
+integer bat_x, bat_y;
+word bat_count;
+shortint aargh_count;
-integer greldet_x,greldet_y; byte greldet_count; boolean red_greldet;
+integer greldet_x, greldet_y;
+byte greldet_count;
+boolean red_greldet;
void plain_grab()
- /* Just grabs the next one and puts it where it's told to. */
+/* Just grabs the next one and puts it where it's told to. */
{
- integer xx,yy,xofs;
-;
- blockread(f,cb,sizeof(cb));
-
- switch (cb.flavour) {
- case ch_one: {;
- xofs=cb.x / 8;
- bit=3;
- for( yy=0; yy <= cb.yl; yy ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- blockread(f,mem[0xa000*(yy+cb.y)*80+xofs],cb.xl / 8);
- }
- }
- break;
- case ch_ega: {;
- xofs=cb.x / 8;
- bit=3;
- for( bit=0; bit <= 3; bit ++)
- for( yy=0; yy <= cb.yl; yy ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- blockread(f,mem[0xa000*(yy+cb.y)*80+xofs],cb.xl / 8);
- }
- }
- break;
- }
+ integer xx, yy, xofs;
+ ;
+ blockread(f, cb, sizeof(cb));
+
+ switch (cb.flavour) {
+ case ch_one: {
+ ;
+ xofs = cb.x / 8;
+ bit = 3;
+ for (yy = 0; yy <= cb.yl; yy ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ blockread(f, mem[0xa000 * (yy + cb.y) * 80 + xofs], cb.xl / 8);
+ }
+ }
+ break;
+ case ch_ega: {
+ ;
+ xofs = cb.x / 8;
+ bit = 3;
+ for (bit = 0; bit <= 3; bit ++)
+ for (yy = 0; yy <= cb.yl; yy ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ blockread(f, mem[0xa000 * (yy + cb.y) * 80 + xofs], cb.xl / 8);
+ }
+ }
+ break;
+ }
}
-void get_me(pointer& p)
-{;
- blockread(f,cb,sizeof(cb));
- /* Take it for granted that cb.flavour = ch_BGI! */
+void get_me(pointer &p) {
+ ;
+ blockread(f, cb, sizeof(cb));
+ /* Take it for granted that cb.flavour = ch_BGI! */
- {;
- getmem(p,cb.size);
- blockread(f,p,cb.size);
- }
+ {
+ ;
+ getmem(p, cb.size);
+ blockread(f, p, cb.size);
+ }
}
-void get_me_aargh(byte which)
-{;
- blockread(f,cb,sizeof(cb));
- /* Take it for granted that cb.flavour = ch_BGI! */
+void get_me_aargh(byte which) {
+ ;
+ blockread(f, cb, sizeof(cb));
+ /* Take it for granted that cb.flavour = ch_BGI! */
- {;
- getmem(aargh[which],cb.size);
- blockread(f,aargh[which],cb.size);
- }
+ {
+ ;
+ getmem(aargh[which], cb.size);
+ blockread(f, aargh[which], cb.size);
+ }
- {
- pointtype& with = aargh_where[which];
+ {
+ pointtype &with = aargh_where[which];
- with.x=cb.x;
- with.y=cb.y;
- }
+ with.x = cb.x;
+ with.y = cb.y;
+ }
}
-void wait(word how_long)
-{
- word i; char r;
-
- for( i=1; i <= how_long; i ++)
- if (keypressed())
- {
- sound(6177);
- while (keypressed()) r=readkey();
- delay(1);
- nosound;
- } else
- delay(1);
+void wait(word how_long) {
+ word i;
+ char r;
+
+ for (i = 1; i <= how_long; i ++)
+ if (keypressed()) {
+ sound(6177);
+ while (keypressed()) r = readkey();
+ delay(1);
+ nosound;
+ } else
+ delay(1);
}
void do_bat();
-static byte batimage;
+static byte batimage;
static pointtype batsize;
-static void super_blank()
-{
- pointtype oldsize;
+static void super_blank() {
+ pointtype oldsize;
- move(bat[batimage-1],oldsize,4);
- bar(bat_x+batsize.x,bat_y,bat_x+oldsize.x,bat_y+oldsize.y);
+ move(bat[batimage - 1], oldsize, 4);
+ bar(bat_x + batsize.x, bat_y, bat_x + oldsize.x, bat_y + oldsize.y);
}
-void do_bat()
-{
- shortint dx,iy;
-
- bat_count += 1;
-
- if (odd(bat_count))
- {
- switch (bat_count) {
- case 1 ... 90: { dx=2; iy=1; batimage=1; } break;
- case 91 ... 240: { dx=1; iy=1; batimage=2; } break;
- case 241 ... 260: { dx=1; iy=4; batimage=3; } break;
- }
-
- move(bat[batimage],batsize,4);
-
- if ((bat_count==91) || (bat_count==241))
- super_blank(); /* When the bat changes, blank out the old one. */
-
- bar(bat_x,bat_y,bat_x+batsize.x,bat_y+iy);
- bar(bat_x+batsize.x,bat_y,bat_x+batsize.x-dx,bat_y+batsize.y);
-
- bat_x -= dx; bat_y += 1;
- putimage(bat_x,bat_y,bat[batimage],0);
- }
+void do_bat() {
+ shortint dx, iy;
+
+ bat_count += 1;
+
+ if (odd(bat_count)) {
+ switch (bat_count) {
+ case 1 ... 90: {
+ dx = 2;
+ iy = 1;
+ batimage = 1;
+ }
+ break;
+ case 91 ... 240: {
+ dx = 1;
+ iy = 1;
+ batimage = 2;
+ }
+ break;
+ case 241 ... 260: {
+ dx = 1;
+ iy = 4;
+ batimage = 3;
+ }
+ break;
+ }
+
+ move(bat[batimage], batsize, 4);
+
+ if ((bat_count == 91) || (bat_count == 241))
+ super_blank(); /* When the bat changes, blank out the old one. */
+
+ bar(bat_x, bat_y, bat_x + batsize.x, bat_y + iy);
+ bar(bat_x + batsize.x, bat_y, bat_x + batsize.x - dx, bat_y + batsize.y);
+
+ bat_x -= dx;
+ bat_y += 1;
+ putimage(bat_x, bat_y, bat[batimage], 0);
+ }
}
-void big_green_eyes(byte how)
-{
- putimage(330,103,green_eyes[how],0);
- putimage(376,103,green_eyes[how],0);
+void big_green_eyes(byte how) {
+ putimage(330, 103, green_eyes[how], 0);
+ putimage(376, 103, green_eyes[how], 0);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- if (paramstr(1)!="jsb") exit(255);
- gd=3; gm=0; initgraph(gd,gm,"");
- fillchar(ghost,sizeof(ghost),'\0');
-
- assign(f,"spooky.avd");
- reset(f,1);
- seek(f,44);
-
- mark(memlevel);
-
- for( fv=1; fv <= 5; fv ++)
- {;
- blockread(f,cb,sizeof(cb));
- for( bit=2; bit <= 3; bit ++)
- for( y=0; y <= cb.yl; y ++)
- blockread(f,ghost[fv][bit][y],cb.xl / 8);
- }
-
- get_me(eyes[0]); /* Get BGI-based ones */
- get_me(eyes[1]);
- get_me(exclamation);
-
- plain_grab(); /* Grabs to screen (cobweb) */
- plain_grab(); /* Grabs to screen (Mark's signature) */
- plain_grab(); /* Grabs to screen (open door) */
-
- for( fv=1; fv <= 3; fv ++)
- get_me(bat[fv]);
-
-/* new(glerk);
- for fv:=1 to 5 do { Grab the Glerk. }
- begin;
- blockread(f,cb,sizeof(cb));
- for bit:=0 to 3 do
- for y:=0 to 34 do
- blockread(f,glerk^[fv,bit,y],cb.xl div 8);
- inc(gd,gm);
- end;
-*/
-
- glerk = new glerktype;
-
- for( fv=1; fv <= 6; fv ++)
- {;
- blockread(f,cb,sizeof(cb));
- bit=3;
- for( bit=0; bit <= 3; bit ++)
- for( yy=0; yy <= cb.yl; yy ++)
-/* begin;
- port[$3c4]:=2; port[$3ce]:=4;
- port[$3C5]:=1 shl bit; port[$3CF]:=bit;*/
-
- blockread(f,(*glerk)[fv][bit][yy],cb.xl / 8);
-/* move(glerk^[fv,bit,yy],mem[$A000:yy*80+177],xl div 8);*/
-/* blockread(f,mem[$A000:yy*80+177],xl div 8);*/
-
-/* end;*/
- }
-
- for( fv=1; fv <= 6; fv ++) get_me_aargh(fv);
- for( fv=1; fv <= 5; fv ++) get_me(green_eyes[fv]);
- for( gb=false; gb <= true; gb ++)
- for( fv=1; fv <= 6; fv ++) get_me(greldet[fv][gb]);
-
- close(f);
-
- /* Avvy walks over... */
-
- setfillstyle(1,0);
- glerkstage=0; bat_x=277; bat_y=40; bat_count=0;
-
- for( gd=500; gd >= 217; gd --)
- {;
- if (set::of(range(22,27), eos).has((gd % 30)))
- {;
- if ((gd % 30)==27) bar(gd,135,gd+16,136);
- putimage(gd,136,eyes[0],0);
- putpixel(gd+16,137,0);
- } else
- {;
- if (gd % 30==21) bar(gd,137,gd+17,138);
-
- putimage(gd,135,eyes[0],0);
- putpixel(gd+16,136,0); /* eyes would leave a trail 1 pixel high behind them */
- }
-
- /* Plot the Glerk: */
- if (gd % 10==0)
- {;
- glerkstage += 1;
- if (glerkstage>26) flush();
-
- for( gm=0; gm <= 34; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- move((*glerk)[glerkfade[glerkstage]][bit][gm],
- mem[0xa000*1177+gm*80],9);
- }
- bit=getpixel(0,0);
- }
-
- do_bat();
-
- wait(15);
- }
-
- setfillstyle(1,0);
- bar(456,14,530,50);
-
- /* It descends... */
-
- for( gm=-64; gm <= 103; gm ++)
- {;
- bit=getpixel(0,0);
-
- if (gm>0)
- fillchar(mem[0xa000*(gm-1)*80],26,'\0');
-
- for( y=0; y <= 65; y ++)
- if ((y+gm)>=0)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- move(ghost[2+(abs(gm / 7) % 2)*3][plane_to_use[bit]][y],
- mem[0xa000*(y+gm)*80],26);
- }
-
- wait(27);
- }
-
- /* And waves... */
-
- aargh_count=-14;
-
- for( gd=1; gd <= 4; gd ++)
- for( fv=1; fv <= 5; fv ++)
- {;
-
- y=getpixel(0,0);
-
- for( y=0; y <= 7; y ++)
- fillchar(mem[0xa000*7760+y*80],26,'\0');
-
- for( y=0; y <= 65; y ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(ghost[waveorder[fv]][plane_to_use[bit]][y],
- mem[0xa000*7760+(y+adjustment[fv])*80],26);
- }
-
- aargh_count += 1;
-
- if (aargh_count>0)
- { pointtype& with = aargh_where[aargh_count];
- putimage(with.x,with.y,aargh[aargh_count],0);}
-
- wait(177);
- }
-
- /* ! appears */
-
- gd=getpixel(0,0);
- putimage(246,127,exclamation,0);
- wait(777);
- bar(172, 78,347,111); /* erase "aargh" */
-
- for( gm=5; gm >= 1; gm --)
- {
- wait(377);
- big_green_eyes(gm);
- }
- bar(246,127,251,133); /* erase the "!" */
-
- /* He hurries back. */
-
- glerkstage=1; greldet_count=18; red_greldet=false;
-
- for( gd=217; gd <= 479; gd ++)
- {;
- if (set::of(range(22,27), eos).has((gd % 30)))
- {;
- if ((gd % 30)==22)
- bar(gd+22,134,gd+38,137);
- putimage(gd+23,136,eyes[1],0);
- putpixel(gd+22,137,0);
- } else
- {;
- if (gd % 30==28)
- bar(gd+22,135,gd+38,138);
-
- putimage(gd+23,135,eyes[1],0);
- putpixel(gd+22,136,0); /* eyes would leave a trail 1 pixel high behind them */
- }
-
- /* Plot the Green Eyes: */
- if (gd % 53==5)
- {;
- big_green_eyes(glerkstage);
- glerkstage += 1;
- }
-
- /* Plot the Greldet: */
-
- if (greldet_count==18)
- { /* A new greldet. */
- greldet_x=Random(600);
- greldet_y=Random(80);
- greldet_count=0;
- red_greldet=! red_greldet;
- }
-
- greldet_count += 1;
- putimage
- (greldet_x,greldet_y,greldet[greldetfade[greldet_count]][red_greldet],0);
-
- wait(10);
- }
-
- release(memlevel);
- closegraph();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ if (paramstr(1) != "jsb") exit(255);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ fillchar(ghost, sizeof(ghost), '\0');
+
+ assign(f, "spooky.avd");
+ reset(f, 1);
+ seek(f, 44);
+
+ mark(memlevel);
+
+ for (fv = 1; fv <= 5; fv ++) {
+ ;
+ blockread(f, cb, sizeof(cb));
+ for (bit = 2; bit <= 3; bit ++)
+ for (y = 0; y <= cb.yl; y ++)
+ blockread(f, ghost[fv][bit][y], cb.xl / 8);
+ }
+
+ get_me(eyes[0]); /* Get BGI-based ones */
+ get_me(eyes[1]);
+ get_me(exclamation);
+
+ plain_grab(); /* Grabs to screen (cobweb) */
+ plain_grab(); /* Grabs to screen (Mark's signature) */
+ plain_grab(); /* Grabs to screen (open door) */
+
+ for (fv = 1; fv <= 3; fv ++)
+ get_me(bat[fv]);
+
+ /* new(glerk);
+ for fv:=1 to 5 do { Grab the Glerk. }
+ begin;
+ blockread(f,cb,sizeof(cb));
+ for bit:=0 to 3 do
+ for y:=0 to 34 do
+ blockread(f,glerk^[fv,bit,y],cb.xl div 8);
+ inc(gd,gm);
+ end;
+ */
+
+ glerk = new glerktype;
+
+ for (fv = 1; fv <= 6; fv ++) {
+ ;
+ blockread(f, cb, sizeof(cb));
+ bit = 3;
+ for (bit = 0; bit <= 3; bit ++)
+ for (yy = 0; yy <= cb.yl; yy ++)
+ /* begin;
+ port[$3c4]:=2; port[$3ce]:=4;
+ port[$3C5]:=1 shl bit; port[$3CF]:=bit;*/
+
+ blockread(f, (*glerk)[fv][bit][yy], cb.xl / 8);
+ /* move(glerk^[fv,bit,yy],mem[$A000:yy*80+177],xl div 8);*/
+ /* blockread(f,mem[$A000:yy*80+177],xl div 8);*/
+
+ /* end;*/
+ }
+
+ for (fv = 1; fv <= 6; fv ++) get_me_aargh(fv);
+ for (fv = 1; fv <= 5; fv ++) get_me(green_eyes[fv]);
+ for (gb = false; gb <= true; gb ++)
+ for (fv = 1; fv <= 6; fv ++) get_me(greldet[fv][gb]);
+
+ close(f);
+
+ /* Avvy walks over... */
+
+ setfillstyle(1, 0);
+ glerkstage = 0;
+ bat_x = 277;
+ bat_y = 40;
+ bat_count = 0;
+
+ for (gd = 500; gd >= 217; gd --) {
+ ;
+ if (set::of(range(22, 27), eos).has((gd % 30))) {
+ ;
+ if ((gd % 30) == 27) bar(gd, 135, gd + 16, 136);
+ putimage(gd, 136, eyes[0], 0);
+ putpixel(gd + 16, 137, 0);
+ } else {
+ ;
+ if (gd % 30 == 21) bar(gd, 137, gd + 17, 138);
+
+ putimage(gd, 135, eyes[0], 0);
+ putpixel(gd + 16, 136, 0); /* eyes would leave a trail 1 pixel high behind them */
+ }
+
+ /* Plot the Glerk: */
+ if (gd % 10 == 0) {
+ ;
+ glerkstage += 1;
+ if (glerkstage > 26) flush();
+
+ for (gm = 0; gm <= 34; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ move((*glerk)[glerkfade[glerkstage]][bit][gm],
+ mem[0xa000 * 1177 + gm * 80], 9);
+ }
+ bit = getpixel(0, 0);
+ }
+
+ do_bat();
+
+ wait(15);
+ }
+
+ setfillstyle(1, 0);
+ bar(456, 14, 530, 50);
+
+ /* It descends... */
+
+ for (gm = -64; gm <= 103; gm ++) {
+ ;
+ bit = getpixel(0, 0);
+
+ if (gm > 0)
+ fillchar(mem[0xa000 * (gm - 1) * 80], 26, '\0');
+
+ for (y = 0; y <= 65; y ++)
+ if ((y + gm) >= 0)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ move(ghost[2 + (abs(gm / 7) % 2) * 3][plane_to_use[bit]][y],
+ mem[0xa000 * (y + gm) * 80], 26);
+ }
+
+ wait(27);
+ }
+
+ /* And waves... */
+
+ aargh_count = -14;
+
+ for (gd = 1; gd <= 4; gd ++)
+ for (fv = 1; fv <= 5; fv ++) {
+ ;
+
+ y = getpixel(0, 0);
+
+ for (y = 0; y <= 7; y ++)
+ fillchar(mem[0xa000 * 7760 + y * 80], 26, '\0');
+
+ for (y = 0; y <= 65; y ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(ghost[waveorder[fv]][plane_to_use[bit]][y],
+ mem[0xa000 * 7760 + (y + adjustment[fv]) * 80], 26);
+ }
+
+ aargh_count += 1;
+
+ if (aargh_count > 0) {
+ pointtype &with = aargh_where[aargh_count];
+ putimage(with.x, with.y, aargh[aargh_count], 0);
+ }
+
+ wait(177);
+ }
+
+ /* ! appears */
+
+ gd = getpixel(0, 0);
+ putimage(246, 127, exclamation, 0);
+ wait(777);
+ bar(172, 78, 347, 111); /* erase "aargh" */
+
+ for (gm = 5; gm >= 1; gm --) {
+ wait(377);
+ big_green_eyes(gm);
+ }
+ bar(246, 127, 251, 133); /* erase the "!" */
+
+ /* He hurries back. */
+
+ glerkstage = 1;
+ greldet_count = 18;
+ red_greldet = false;
+
+ for (gd = 217; gd <= 479; gd ++) {
+ ;
+ if (set::of(range(22, 27), eos).has((gd % 30))) {
+ ;
+ if ((gd % 30) == 22)
+ bar(gd + 22, 134, gd + 38, 137);
+ putimage(gd + 23, 136, eyes[1], 0);
+ putpixel(gd + 22, 137, 0);
+ } else {
+ ;
+ if (gd % 30 == 28)
+ bar(gd + 22, 135, gd + 38, 138);
+
+ putimage(gd + 23, 135, eyes[1], 0);
+ putpixel(gd + 22, 136, 0); /* eyes would leave a trail 1 pixel high behind them */
+ }
+
+ /* Plot the Green Eyes: */
+ if (gd % 53 == 5) {
+ ;
+ big_green_eyes(glerkstage);
+ glerkstage += 1;
+ }
+
+ /* Plot the Greldet: */
+
+ if (greldet_count == 18) {
+ /* A new greldet. */
+ greldet_x = Random(600);
+ greldet_y = Random(80);
+ greldet_count = 0;
+ red_greldet = ! red_greldet;
+ }
+
+ greldet_count += 1;
+ putimage
+ (greldet_x, greldet_y, greldet[greldetfade[greldet_count]][red_greldet], 0);
+
+ wait(10);
+ }
+
+ release(memlevel);
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/golden.cpp b/engines/avalanche/golden.cpp
index ec20034f15..2ea9aec1a7 100644
--- a/engines/avalanche/golden.cpp
+++ b/engines/avalanche/golden.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,156 +30,157 @@
namespace Avalanche {
-const varying_string<255> song =
-string("Golden slumbers kiss your eyes/Smiles awake you when you rise/")+
-"Sleep, pretty Baron, do not cry/And I will sing a lullaby.%Care you "+
-"know not, therefore sleep/While I o'er you watch do keep;/Sleep now, "+
-"du Lustie, do not cry/And I will leave the castle.*Bye!";
+const varying_string<255> song =
+ string("Golden slumbers kiss your eyes/Smiles awake you when you rise/") +
+ "Sleep, pretty Baron, do not cry/And I will sing a lullaby.%Care you " +
+ "know not, therefore sleep/While I o'er you watch do keep;/Sleep now, " +
+ "du Lustie, do not cry/And I will leave the castle.*Bye!";
const integer scardcount = 13;
-const array<0,scardcount-1,integer> soundcards =
- {{1,2,6,3,4,5,8,9,10,7,7,7,7}};
+const array < 0, scardcount - 1, integer > soundcards =
+{{1, 2, 6, 3, 4, 5, 8, 9, 10, 7, 7, 7, 7}};
-const array<1,5,byte> holding =
-{{ 24, /* 0 : 24 */
-64, /* 1 : 00 */
-128, /* 2 : 00 */
-152, /* 2 : 24 */
-170}}; /* 2 : 42 */
+const array<1, 5, byte> holding = {
+ {
+ 24, /* 0 : 24 */
+ 64, /* 1 : 00 */
+ 128, /* 2 : 00 */
+ 152, /* 2 : 24 */
+ 170
+ }
+}; /* 2 : 42 */
-integer gd,gm;
+integer gd, gm;
byte fv;
-word* skellern;
-word s,o;
+word *skellern;
+word s, o;
boolean firstverse;
word nexthangon;
boolean nomusic;
-integer getsoundhardware(psoundcard scard)
-{
- integer sc,i,autosel,select;
- char ch;
- integer e;
+integer getsoundhardware(psoundcard scard) {
+ integer sc, i, autosel, select;
+ char ch;
+ integer e;
-integer getsoundhardware_result;
+ integer getsoundhardware_result;
Lagain:
- sc=detectgus(scard);
- if (sc!=0) sc=detectpas(scard);
- if (sc!=0) sc=detectaria(scard);
- if (sc!=0) sc=detectsb(scard);
-
- /* if no sound card found, zero scard */
- if (sc!=0) fillchar(scard,sizeof(tsoundcard),0);
-
- autosel=-1;
-/* if sc=0 then
- for i:=0 to scardcount-1 do
- if scard^.ID=soundcards[i].ID then begin
- { Set auto selection mark }
- autosel:=i+1;
- break;
- end;*/
-
- /* Print the list of sound cards */
-
- val(paramstr(13),select,e);
-
- /* Default entry? */
- if (select==0) select=autosel;
- if (select!=autosel) {
- /* clear all assumptions */
- sc=-1;
- fillchar(scard,sizeof(tsoundcard),0);
- scard->id=soundcards[select-1]; /* set correct ID */
- }
-
- /* Query I/O address */
- if (scard->id==id_dac) scard->ioport=0x378;
-
- /* Read user input */
- val(paramstr(15),i,e);
-
- if (i!=0) scard->ioport=i;
- if (sc!=1) /* Not autodetected */
- switch (scard->id) {
- case id_sb16:
- case id_pas16:
- case id_wss:
- case id_aria:
- case id_gus : scard->samplesize=2;
- break; /* 16-bit card */
- case id_sbpro:
- case id_pas:
- case id_pasplus: scard->stereo=true;
- break; /* enable stereo */
- default: {
- scard->samplesize=1;
- scard->stereo=false;
- }
- }
-
- if (scard->id!=id_dac) {
- val(paramstr(17),i,e);
-
- if (i!=0) scard->dmairq=i;
-
- val(paramstr(16),i,e);
-
- if (i!=0) scard->dmachannel=i;
- } else {
- /* Select correct DAC */
- scard->maxrate=44100;
- if (select==11) {
- scard->stereo=true;
- scard->dmachannel=1; /* Special 'mark' */
- scard->maxrate=60000;
- } else
- if (select==12) {
- scard->stereo=true;
- scard->dmachannel=2;
- scard->maxrate=60000;
- if (scard->ioport==0) scard->ioport=0x378;
- } else
- if (select==13) {
- scard->dmachannel=0;
- scard->ioport=0x42; /* Special 'mark' */
- scard->maxrate=44100;
- }
- }
-
-/* writeln('Your selection: ',select,' at ',scard^.ioPort,
- ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel);
- readln;*/
-
- getsoundhardware_result=0;
-return getsoundhardware_result;
+ sc = detectgus(scard);
+ if (sc != 0) sc = detectpas(scard);
+ if (sc != 0) sc = detectaria(scard);
+ if (sc != 0) sc = detectsb(scard);
+
+ /* if no sound card found, zero scard */
+ if (sc != 0) fillchar(scard, sizeof(tsoundcard), 0);
+
+ autosel = -1;
+ /* if sc=0 then
+ for i:=0 to scardcount-1 do
+ if scard^.ID=soundcards[i].ID then begin
+ { Set auto selection mark }
+ autosel:=i+1;
+ break;
+ end;*/
+
+ /* Print the list of sound cards */
+
+ val(paramstr(13), select, e);
+
+ /* Default entry? */
+ if (select == 0) select = autosel;
+ if (select != autosel) {
+ /* clear all assumptions */
+ sc = -1;
+ fillchar(scard, sizeof(tsoundcard), 0);
+ scard->id = soundcards[select - 1]; /* set correct ID */
+ }
+
+ /* Query I/O address */
+ if (scard->id == id_dac) scard->ioport = 0x378;
+
+ /* Read user input */
+ val(paramstr(15), i, e);
+
+ if (i != 0) scard->ioport = i;
+ if (sc != 1) /* Not autodetected */
+ switch (scard->id) {
+ case id_sb16:
+ case id_pas16:
+ case id_wss:
+ case id_aria:
+ case id_gus :
+ scard->samplesize = 2;
+ break; /* 16-bit card */
+ case id_sbpro:
+ case id_pas:
+ case id_pasplus:
+ scard->stereo = true;
+ break; /* enable stereo */
+ default: {
+ scard->samplesize = 1;
+ scard->stereo = false;
+ }
+ }
+
+ if (scard->id != id_dac) {
+ val(paramstr(17), i, e);
+
+ if (i != 0) scard->dmairq = i;
+
+ val(paramstr(16), i, e);
+
+ if (i != 0) scard->dmachannel = i;
+ } else {
+ /* Select correct DAC */
+ scard->maxrate = 44100;
+ if (select == 11) {
+ scard->stereo = true;
+ scard->dmachannel = 1; /* Special 'mark' */
+ scard->maxrate = 60000;
+ } else if (select == 12) {
+ scard->stereo = true;
+ scard->dmachannel = 2;
+ scard->maxrate = 60000;
+ if (scard->ioport == 0) scard->ioport = 0x378;
+ } else if (select == 13) {
+ scard->dmachannel = 0;
+ scard->ioport = 0x42; /* Special 'mark' */
+ scard->maxrate = 44100;
+ }
+ }
+
+ /* writeln('Your selection: ',select,' at ',scard^.ioPort,
+ ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel);
+ readln;*/
+
+ getsoundhardware_result = 0;
+ return getsoundhardware_result;
}
-byte here()
-{
- byte here_result;
- here_result=(ampgetpattern % 3)*64+ampgetrow;
- return here_result;
+byte here() {
+ byte here_result;
+ here_result = (ampgetpattern % 3) * 64 + ampgetrow;
+ return here_result;
}
-void hold(word amount)
-{
- *skellern=0;
- do {; } while (!(*skellern>=amount));
+void hold(word amount) {
+ *skellern = 0;
+ do {
+ ;
+ } while (!(*skellern >= amount));
}
-void hangon(word forwhat)
-{
- if (nomusic)
- hold(40);
- else
- do {
- if (keypressed()) exit(0);
- } while (!(here()>=holding[forwhat]));
+void hangon(word forwhat) {
+ if (nomusic)
+ hold(40);
+ else
+ do {
+ if (keypressed()) exit(0);
+ } while (!(here() >= holding[forwhat]));
}
tsoundcard scard;
@@ -188,277 +189,292 @@ tdds dds;
pmodule module;
tsdi_init sdi;
integer e,
-bufsize;
+ bufsize;
char ch;
boolean v86,
-vdsok;
-longint a,rate,
-tempseg;
+ vdsok;
+longint a, rate,
+ tempseg;
string answer;
pointer temp;
word flags;
word curch;
byte modulevolume;
-array<0,4,tsampleinfo> sample;
-array<0,31,word> voltable;
-
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- for( e=1; e <= paramcount; e ++) answer=paramstr(e);
-
- nomusic=paramstr(13)=='0';
-
- if (! nomusic)
- {
- /* Read sound card information */
- if (getsoundhardware(&scard)==-1) exit(1);
-
-
- /* Initialize Timer Service */
- tsinit;
- atexit(&tsclose);
- if (scard.id==id_gus) {
- /* Initialize GUS player */
- #ifndef DPMI
- scard.extrafield[2]=1; /* GUS DMA transfer does not work in V86 */
- #endif
- gusinit(&scard);
- atexit(&gusclose);
-
- /* Initialize GUS heap manager */
- gushminit;
-
- /* Init CDI */
- cdiinit;
-
- /* Register GUS into CDI */
- cdiregister(&cdi_gus,0,31);
-
- /* Add GUS event player engine into Timer Service */
- tsaddroutine(&gusinterrupt,gus_timer);
- } else {
- /* Initialize Virtual DMA Specification */
- #ifndef DPMI
- vdsok=vdsinit==0;
- #else
- vdsok=false;
- #endif
-
- fillchar(mcpstrc,sizeof(tmcpstruct),0);
-
- /* Query for sampling rate */
- val(paramstr(14),a,e);
- if (a>4000) rate=a; else rate=21000;
-
- /* Query for quality */
- mcpstrc.options=mcp_quality;
-
- switch (scard.id) {
- case id_sb : {
- sdi=sdi_sb;
- scard.maxrate=22000;
- }
- break;
- case id_sbpro : {
- sdi=sdi_sbpro;
- scard.maxrate=22000;
- }
- break;
- case id_pas:
- case id_pasplus:
- case id_pas16 : {
- sdi=sdi_pas;
- scard.maxrate=44100;
- }
- break;
- case id_sb16 : {
- sdi=sdi_sb16;
- scard.maxrate=44100;
- }
- break;
- case id_aria : {
- sdi=sdi_aria;
- scard.maxrate=44100;
- }
- break;
- case id_wss : {
- sdi=sdi_wss;
- scard.maxrate=48000;
- }
- break;
- #ifndef DPMI
- case id_dac : sdi=sdi_dac; break; /* Only available in real mode */
- #endif
- }
-
- mcpinitsounddevice(sdi,&scard);
- a=mcp_tablesize;
- mcpstrc.reqsize=0;
-
- /* Calculate mixing buffer size */
- bufsize=(longint)(2800*(integer)(scard.samplesize) << (byte)(scard.stereo))*
- (longint)(rate) / (longint)(22000);
- mcpstrc.reqsize=0;
- if ((mcpstrc.options & mcp_quality)>0)
- if (scard.samplesize==1) a += mcp_qualitysize; else
- a=mcp_tablesize16+mcp_qualitysize16;
- if ((longint)(bufsize)+(longint)(a)>65500) bufsize=longint(65500)-a;
-
- #ifdef DPMI
- dpmiversion((byte)(e),(byte)(e),(byte)(e),flags);
- v86=(flags & 2)==0;
- #endif
-
- /* Allocate volume table + mixing buffer */
- #ifdef DPMI
-
- /* In the V86 mode, the buffer must be allocated below 1M */
- if (v86) {
- tempseg=0;
- dpmiallocdos((a+longint(bufsize)) / longint(16)+longint(1),flags,(word)(tempseg));
- } else {
- #endif
- getmem(temp,a+longint(bufsize));
- if (temp==nil) exit(2);
- #ifdef DPMI
- tempseg=seg(temp);
- }
- #else
- tempseg=seg(temp)+ofs(temp) / 16+1;
- #endif
- mcpstrc.bufferseg=tempseg;
- mcpstrc.bufferphysical=-1;
-
- if (vdsok && (scard.id!=id_dac)) {
- dds.size=bufsize;
- dds.segment=tempseg;
- dds.offset=0;
-
- /* Lock DMA buffer if VDS present */
- if (vdslockdma(&dds)==0) mcpstrc.bufferphysical=dds.address;
- }
- if (mcpstrc.bufferphysical==-1)
- #ifdef DPMI
- mcpstrc.bufferphysical=dpmigetlinearaddr(tempseg);
- #else
- mcpstrc.bufferphysical=(longint)(tempseg) << 4;
- #endif
-
- mcpstrc.buffersize=bufsize;
- mcpstrc.samplingrate=rate;
- /* Initialize Multi Channel Player */
- if (mcpinit(&mcpstrc)!=0) exit(3);
- atexit(&mcpclose);
-
- /* Initialize Channel Distributor */
- cdiinit;
-
- /* Register MCP into CDI*/
- cdiregister(&cdi_mcp,0,31);
- }
-
- /* Try to initialize AMP */
- if (ampinit(0)!=0) exit(3);
- atexit(&ampclose);
-
- /* Hook AMP player routine into Timer Service */
- tsaddroutine(&ampinterrupt,amp_timer);
-
- #ifndef DPMI
- /* If using DAC, then adjust DAC timer */
- if (scard.id==id_dac) setdactimer(tsgettimerrate);
- #endif
-
- if (scard.id!=id_gus) mcpstartvoice; else gusstartvoice;
-
- /* Load an example AMF */
- module=amploadmod("golden.mod",0);
- if (module==nil) exit(4);
-
- /* Is it MCP, Quality mode and 16-bit card? */
- if ((scard.id!=id_gus) && ((mcpstrc.options & mcp_quality)>0)
- && (scard.samplesize==2)) {
- /* Open module+2 channels with amplified volumetable (4.7 gain) */
- for( a=1; a <= 32; a ++) voltable[a-longint(1)]=a*longint(150) / longint(32);
- cdisetupchannels(0,module->channelcount+2,&voltable);
- } else {
- /* Open module+2 channels with regular volumetable */
- cdisetupchannels(0,module->channelcount+2,nil);
- }
-
- curch=module->channelcount;
- modulevolume=64;
-
- /***/ ampplaymodule(module,0);
- }
-
- val(paramstr(2),s,e); if (e!=0) exit(0);
- val(paramstr(3),o,e); if (e!=0) exit(0);
- skellern=ptr(s,o+1);
-
- gd=3; gm=0; initgraph(gd,gm,"");
-
- if (! nomusic) do {; } while (!(ampgetrow>=10));
-
- setcolor(9);
- for( gd=0; gd <= 320; gd ++)
- {
- rectangle(320-gd,100-gd / 2,320+gd,100+gd / 2);
- }
-
-
- gd=50; gm=20;
- firstverse=true;
-
- hangon(1); nexthangon=2;
- for( fv=1; fv <= 255; fv ++)
- {
- switch (song[fv]) {
- case '/': {
- gd=50;
- gm += 15;
- hangon(nexthangon);
- nexthangon += 1;
- }
- break;
-
- case '%': {
- gd=50;
- gm += 35;
- if (nomusic)
- hold(15);
- else
- do {; } while (!(ampgetpattern>2));
- nexthangon=2;
- hangon(1);
- }
- break;
-
- case '*': {
- gd += 24;
- hangon(5);
- }
- break;
-
- default: {
- setcolor(1); outtextxy(gd+1,gm+1,song[fv]);
- setcolor(0); outtextxy( gd , gm ,song[fv]);
- gd += 12;
- }
- }
- if (song[fv]==' ') hold(1);
- if (keypressed()) exit(0);
- }
-
- if (nomusic)
- hold(25);
- else
- do {; } while (!(ampgetmodulestatus!=md_playing));
-
- setcolor(0);
- for( gd=320; gd >= 0; gd --) rectangle(320-gd,100-gd / 2,320+gd,100+gd / 2);
- return EXIT_SUCCESS;
+array<0, 4, tsampleinfo> sample;
+array<0, 31, word> voltable;
+
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ for (e = 1; e <= paramcount; e ++) answer = paramstr(e);
+
+ nomusic = paramstr(13) == '0';
+
+ if (! nomusic) {
+ /* Read sound card information */
+ if (getsoundhardware(&scard) == -1) exit(1);
+
+
+ /* Initialize Timer Service */
+ tsinit;
+ atexit(&tsclose);
+ if (scard.id == id_gus) {
+ /* Initialize GUS player */
+#ifndef DPMI
+ scard.extrafield[2] = 1; /* GUS DMA transfer does not work in V86 */
+#endif
+ gusinit(&scard);
+ atexit(&gusclose);
+
+ /* Initialize GUS heap manager */
+ gushminit;
+
+ /* Init CDI */
+ cdiinit;
+
+ /* Register GUS into CDI */
+ cdiregister(&cdi_gus, 0, 31);
+
+ /* Add GUS event player engine into Timer Service */
+ tsaddroutine(&gusinterrupt, gus_timer);
+ } else {
+ /* Initialize Virtual DMA Specification */
+#ifndef DPMI
+ vdsok = vdsinit == 0;
+#else
+ vdsok = false;
+#endif
+
+ fillchar(mcpstrc, sizeof(tmcpstruct), 0);
+
+ /* Query for sampling rate */
+ val(paramstr(14), a, e);
+ if (a > 4000) rate = a;
+ else rate = 21000;
+
+ /* Query for quality */
+ mcpstrc.options = mcp_quality;
+
+ switch (scard.id) {
+ case id_sb : {
+ sdi = sdi_sb;
+ scard.maxrate = 22000;
+ }
+ break;
+ case id_sbpro : {
+ sdi = sdi_sbpro;
+ scard.maxrate = 22000;
+ }
+ break;
+ case id_pas:
+ case id_pasplus:
+ case id_pas16 : {
+ sdi = sdi_pas;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_sb16 : {
+ sdi = sdi_sb16;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_aria : {
+ sdi = sdi_aria;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_wss : {
+ sdi = sdi_wss;
+ scard.maxrate = 48000;
+ }
+ break;
+#ifndef DPMI
+ case id_dac :
+ sdi = sdi_dac;
+ break; /* Only available in real mode */
+#endif
+ }
+
+ mcpinitsounddevice(sdi, &scard);
+ a = mcp_tablesize;
+ mcpstrc.reqsize = 0;
+
+ /* Calculate mixing buffer size */
+ bufsize = (longint)(2800 * (integer)(scard.samplesize) << (byte)(scard.stereo)) *
+ (longint)(rate) / (longint)(22000);
+ mcpstrc.reqsize = 0;
+ if ((mcpstrc.options & mcp_quality) > 0)
+ if (scard.samplesize == 1) a += mcp_qualitysize;
+ else
+ a = mcp_tablesize16 + mcp_qualitysize16;
+ if ((longint)(bufsize) + (longint)(a) > 65500) bufsize = longint(65500) - a;
+
+#ifdef DPMI
+ dpmiversion((byte)(e), (byte)(e), (byte)(e), flags);
+ v86 = (flags & 2) == 0;
+#endif
+
+ /* Allocate volume table + mixing buffer */
+#ifdef DPMI
+
+ /* In the V86 mode, the buffer must be allocated below 1M */
+ if (v86) {
+ tempseg = 0;
+ dpmiallocdos((a + longint(bufsize)) / longint(16) + longint(1), flags, (word)(tempseg));
+ } else {
+#endif
+ getmem(temp, a + longint(bufsize));
+ if (temp == nil) exit(2);
+#ifdef DPMI
+ tempseg = seg(temp);
+ }
+#else
+ tempseg = seg(temp) + ofs(temp) / 16 + 1;
+#endif
+ mcpstrc.bufferseg = tempseg;
+ mcpstrc.bufferphysical = -1;
+
+ if (vdsok && (scard.id != id_dac)) {
+ dds.size = bufsize;
+ dds.segment = tempseg;
+ dds.offset = 0;
+
+ /* Lock DMA buffer if VDS present */
+ if (vdslockdma(&dds) == 0) mcpstrc.bufferphysical = dds.address;
+ }
+ if (mcpstrc.bufferphysical == -1)
+#ifdef DPMI
+ mcpstrc.bufferphysical = dpmigetlinearaddr(tempseg);
+#else
+ mcpstrc.bufferphysical = (longint)(tempseg) << 4;
+#endif
+
+ mcpstrc.buffersize = bufsize;
+ mcpstrc.samplingrate = rate;
+ /* Initialize Multi Channel Player */
+ if (mcpinit(&mcpstrc) != 0) exit(3);
+ atexit(&mcpclose);
+
+ /* Initialize Channel Distributor */
+ cdiinit;
+
+ /* Register MCP into CDI*/
+ cdiregister(&cdi_mcp, 0, 31);
+ }
+
+ /* Try to initialize AMP */
+ if (ampinit(0) != 0) exit(3);
+ atexit(&ampclose);
+
+ /* Hook AMP player routine into Timer Service */
+ tsaddroutine(&ampinterrupt, amp_timer);
+
+#ifndef DPMI
+ /* If using DAC, then adjust DAC timer */
+ if (scard.id == id_dac) setdactimer(tsgettimerrate);
+#endif
+
+ if (scard.id != id_gus) mcpstartvoice;
+ else gusstartvoice;
+
+ /* Load an example AMF */
+ module = amploadmod("golden.mod", 0);
+ if (module == nil) exit(4);
+
+ /* Is it MCP, Quality mode and 16-bit card? */
+ if ((scard.id != id_gus) && ((mcpstrc.options & mcp_quality) > 0)
+ && (scard.samplesize == 2)) {
+ /* Open module+2 channels with amplified volumetable (4.7 gain) */
+ for (a = 1; a <= 32; a ++) voltable[a - longint(1)] = a * longint(150) / longint(32);
+ cdisetupchannels(0, module->channelcount + 2, &voltable);
+ } else {
+ /* Open module+2 channels with regular volumetable */
+ cdisetupchannels(0, module->channelcount + 2, nil);
+ }
+
+ curch = module->channelcount;
+ modulevolume = 64;
+
+ /***/ ampplaymodule(module, 0);
+ }
+
+ val(paramstr(2), s, e);
+ if (e != 0) exit(0);
+ val(paramstr(3), o, e);
+ if (e != 0) exit(0);
+ skellern = ptr(s, o + 1);
+
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+
+ if (! nomusic) do {
+ ;
+ } while (!(ampgetrow >= 10));
+
+ setcolor(9);
+ for (gd = 0; gd <= 320; gd ++) {
+ rectangle(320 - gd, 100 - gd / 2, 320 + gd, 100 + gd / 2);
+ }
+
+
+ gd = 50;
+ gm = 20;
+ firstverse = true;
+
+ hangon(1);
+ nexthangon = 2;
+ for (fv = 1; fv <= 255; fv ++) {
+ switch (song[fv]) {
+ case '/': {
+ gd = 50;
+ gm += 15;
+ hangon(nexthangon);
+ nexthangon += 1;
+ }
+ break;
+
+ case '%': {
+ gd = 50;
+ gm += 35;
+ if (nomusic)
+ hold(15);
+ else
+ do {
+ ;
+ } while (!(ampgetpattern > 2));
+ nexthangon = 2;
+ hangon(1);
+ }
+ break;
+
+ case '*': {
+ gd += 24;
+ hangon(5);
+ }
+ break;
+
+ default: {
+ setcolor(1);
+ outtextxy(gd + 1, gm + 1, song[fv]);
+ setcolor(0);
+ outtextxy(gd , gm , song[fv]);
+ gd += 12;
+ }
+ }
+ if (song[fv] == ' ') hold(1);
+ if (keypressed()) exit(0);
+ }
+
+ if (nomusic)
+ hold(25);
+ else
+ do {
+ ;
+ } while (!(ampgetmodulestatus != md_playing));
+
+ setcolor(0);
+ for (gd = 320; gd >= 0; gd --) rectangle(320 - gd, 100 - gd / 2, 320 + gd, 100 + gd / 2);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/gyro.cpp b/engines/avalanche/gyro.cpp
index 651c55b1f3..25b2c00797 100644
--- a/engines/avalanche/gyro.cpp
+++ b/engines/avalanche/gyro.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -49,510 +49,562 @@
namespace Avalanche {
-const array<'\1',numobjs,varying_string<15> > things =
- {{"Wine","Money-bag","Bodkin","Potion","Chastity belt",
- "Crossbow bolt","Crossbow","Lute","Pilgrim's badge","Mushroom","Key",
- "Bell","Scroll","Pen","Ink","Clothes","Habit","Onion"}};
-
-const array<'\1',numobjs,char> thingchar = "WMBParCLguKeSnIohn"; /* V=Vinegar */
-
-const array<'\1',numobjs,varying_string<17> > better =
- {{"some wine","your money-bag","your bodkin","a potion","a chastity belt",
- "a crossbow bolt","a crossbow","a lute","a pilgrim's badge","a mushroom",
- "a key","a bell","a scroll","a pen","some ink","your clothes","a habit",
- "an onion"}};
-
-const array<'\1',numobjs,char> betterchar = "WMBParCLguKeSnIohn";
-
-void newpointer(byte m)
-{
- if (m==cmp) return; cmp=m;
- {
- ax=9; bx=(word)(mps[m].horzhotspot); cx=(word)(mps[m].verthotspot);
- es=seg(mps[m].mask); dx=ofs(mps[m].mask);
- }
- intr(0x33,r);
- load_a_mouse(m);
-}
-
-void wait() /* makes hourglass */
-{
- newpointer(5);
-}
-
-void on()
-{
- if (set_of_enum(<null>)::of(m_yes,m_virtual, eos).has(visible)) return;
-
- r.ax=1; intr(0x33,r); visible=m_yes;
- if (oncandopageswap)
- {
- r.ax=29; r.bx=cp; intr(0x33,r); /* show mouse on current page */
- }
-}
-
-void on_virtual()
-{
- switch (visible) {
- case m_virtual: return; break;
- case m_yes: off(); break;
- }
-
- visible=m_virtual;
-}
-
-void off()
-{
- switch (visible) {
- case m_no:case m_virtual : return; break;
- case m_yes : { r.ax=2; intr(0x33,r); } break;
- }
- visible=m_no;
-}
-
-void off_virtual()
-{
- byte fv;
-
- if (visible!=m_virtual) return;
-
- for( fv=0; fv <= 1; fv ++)
- {
- setactivepage(fv);
- wipe_vmc(1-fv);
- }
- setactivepage(1-cp); visible=m_no;
-}
-
-void xycheck() /* only updates mx & my, not all other mouse vars */
-{
- r.ax=3; intr(0x33,r); /* getbuttonstatus */
- {
- keystatus=bx;
- mx=cx; my=dx;
- }
-}
-
-void hopto(integer x,integer y) /* Moves mouse pointer to x,y */
-{
- {
- ax=4;
- cx=x;
- dx=y;
- }
- intr(0x33,r);
-}
-
-void check()
-{
- { ax=6; bx=0; } intr(0x33,r); /* getbuttonreleaseinfo */
- {
- mrelease=bx;
- mrx=cx; mry=dx;
- }
- { ax=5; bx=0; } intr(0x33,r); /* getbuttonpressinfo */
- {
- mpress=bx;
- mpx=cx; mpy=dx;
- }
- xycheck(); /* just to complete the job. */
-}
-
-void note(word hertz)
-{
- if (soundfx) sound(hertz);
-}
-
-void blip()
-{
- byte fv;
-
- for( fv=1; fv <= 7; fv ++) { sound(177+(fv*200) % 177); delay(1); }
- nosound;
-}
-
-string strf(longint x)
-{
- string q;
-
- string strf_result;
- str(x,q); strf_result=q;
- return strf_result;
-}
-
-void shadow(integer x1,integer y1,integer x2,integer y2, byte hc,byte sc)
-{
- byte fv;
-
- for( fv=0; fv <= border; fv ++)
- {
- setfillstyle(1,hc);
- bar(x1+fv,y1+fv,x1+fv,y2-fv);
- bar(x1+fv,y1+fv,x2-fv,y1+fv);
-
- setfillstyle(1,sc);
- bar(x2-fv,y1+fv,x2-fv,y2-fv);
- bar(x1+fv,y2-fv,x2-fv,y2-fv);
- }
-}
-
-void shbox(integer x1,integer y1,integer x2,integer y2, string t)
-{
- const integer fc = 7;
-
- off();
- shadow(x1,y1,x2,y2,15,8); setfillstyle(1,fc);
- bar(x1+border+1,y1+border+1,x2-border-1,y2-border-1);
- setcolor(1); x1=(x2-x1) / 2+x1; y1=(y2-y1) / 2+y1;
- outtextxy(x1,y1,t);
- if (length(t)>1)
- {
- fillchar(t[2],length(t)-1,'\40'); t[1]='_';
- outtextxy(x1-1,y1+1,t);
- }
- on();
-}
-
-void newgame() /* This sets up the DNA for a completely new game. */
-{
- byte gd,gm;
-
- for( gm=1; gm <= numtr; gm ++)
- { triptype& with = tr[gm];
- if (with.quick) done();} /* Deallocate sprite. Sorry, beta testers! */
-
- tr[1].init(0,true);
- alive=true;
-
- score=0; /*for gd:=0 to 5 do which[gd]:=1;*/
- fillchar(dna,sizeof(dna),'\0'); natural();
- normal_edit(); mousepage(0);
- dna.spare_evening="answer a questionnaire";
- dna.like2drink="beer";
-
- {
- dna.pence=30; /* 2/6 */ dna.rw=stopped; dna.wearing=clothes;
- dna.obj[money]=true; dna.obj[bodkin]=true; dna.obj[bell]=true; dna.obj[clothes]=true;
- }
-
- thinks='\2'; objectlist();
- ontoolbar=false; seescroll=false;
-
- ppos[0][1]=-177; /*tr[1].appear(300,117,right);*/ gd=0;
- for( gd=0; gd <= 30; gd ++) for( gm=0; gm <= 1; gm ++) also[gd][gm]=nil;
-/* fillchar(previous^,sizeof(previous^),#0); { blank out array } */
- him='\376'; her='\376'; it='\376'; last_person='\376'; /* = Pardon? */
- dna.pass_num=Random(30)+1; after_the_scroll=false;
- dna.user_moves_avvy=false; doing_sprite_run=false;
- dna.avvy_in_bed=true; enid_filename="";
-
- for( gd=0; gd <= 1; gd ++) { cp=1-cp; getback(); }
-
- enterroom(1,1); new_game_for_trippancy();
- showscore();
-
- standard_bar(); clock();
- sprite_run();
-}
-
-void click() /* "Audio keyboard feedback" */
-{
- sound(7177); delay(1); nosound;
-}
-
-void slowdown()
-{
-/* repeat until TSkellern>=howlong; TSkellern:=0;*/
- do {; } while (!(memw[storage_seg*skellern]>=howlong));
- memw[storage_seg*skellern]=0;
-}
-
-boolean flagset(char x)
-{
- boolean flagset_result;
- flagset_result=pos(x,flags)>0;
- return flagset_result;
-}
-
-void force_numlock()
-{
- if ((locks & num)>0) locks -= num;
-}
-
-boolean pennycheck(word howmuchby)
-{
- boolean pennycheck_result;
- dna.pence -= howmuchby;
- if (dna.pence<0)
- {
- dixi('Q',2); /* "you are now denariusless!" */
- pennycheck_result=false;
- gameover();
- } else
- pennycheck_result=true;
- return pennycheck_result;
-}
-
-string getname(char whose)
-{
- string getname_result;
- if (whose<'\257') getname_result=lads[whose]; else getname_result=lasses[whose];
- return getname_result;
-}
-
-char getnamechar(char whose)
-{
- char getnamechar_result;
- if (whose<'\257') getnamechar_result=ladchar[whose-1];
- else getnamechar_result=lasschar[whose-1];
- return getnamechar_result;
-}
-
-string get_thing(char which)
-{
- string get_thing_result;
- switch (which) {
- case wine: switch (dna.winestate) {
- case 1:case 4: get_thing_result=things[which]; break;
- case 3: get_thing_result="Vinegar"; break;
- }
- break;
- case onion: if (dna.rotten_onion)
- get_thing_result="rotten onion";
- else get_thing_result=things[which];
- break;
- default: get_thing_result=things[which];
- }
- return get_thing_result;
-}
-
-char get_thingchar(char which)
-{
- char get_thingchar_result;
- switch (which) {
- case wine: if (dna.winestate==3) get_thingchar_result='V'; /* Vinegar */
- else get_thingchar_result=thingchar[which-1];
- break;
- default: get_thingchar_result=thingchar[which-1];
- }
- return get_thingchar_result;
-}
-
-string get_better(char which)
-{
- string get_better_result;
- if (which>'\226') which -= 149;
- switch (which) {
- case wine: switch (dna.winestate) {
- case 0:case 1:case 4: get_better_result=better[which]; break;
- case 3: get_better_result="some vinegar"; break;
- }
- break;
- case onion: if (dna.rotten_onion)
- get_better_result="a rotten onion";
- else if (dna.onion_in_vinegar)
- get_better_result="a pickled onion (in the vinegar)";
- else get_better_result=better[which];
- break;
- default:
- if ((which<numobjs) && (which>'\0'))
- get_better_result=better[which]; else
- get_better_result="";
- }
- return get_better_result;
+const array < '\1', numobjs, varying_string<15> > things = {
+ {
+ "Wine", "Money-bag", "Bodkin", "Potion", "Chastity belt",
+ "Crossbow bolt", "Crossbow", "Lute", "Pilgrim's badge", "Mushroom", "Key",
+ "Bell", "Scroll", "Pen", "Ink", "Clothes", "Habit", "Onion"
+ }
+};
+
+const array < '\1', numobjs, char > thingchar = "WMBParCLguKeSnIohn"; /* V=Vinegar */
+
+const array < '\1', numobjs, varying_string<17> > better = {
+ {
+ "some wine", "your money-bag", "your bodkin", "a potion", "a chastity belt",
+ "a crossbow bolt", "a crossbow", "a lute", "a pilgrim's badge", "a mushroom",
+ "a key", "a bell", "a scroll", "a pen", "some ink", "your clothes", "a habit",
+ "an onion"
+ }
+};
+
+const array < '\1', numobjs, char > betterchar = "WMBParCLguKeSnIohn";
+
+void newpointer(byte m) {
+ if (m == cmp) return;
+ cmp = m;
+ {
+ ax = 9;
+ bx = (word)(mps[m].horzhotspot);
+ cx = (word)(mps[m].verthotspot);
+ es = seg(mps[m].mask);
+ dx = ofs(mps[m].mask);
+ }
+ intr(0x33, r);
+ load_a_mouse(m);
+}
+
+void wait() { /* makes hourglass */
+ newpointer(5);
+}
+
+void on() {
+ if (set_of_enum(<null>)::of(m_yes, m_virtual, eos).has(visible)) return;
+
+ r.ax = 1;
+ intr(0x33, r);
+ visible = m_yes;
+ if (oncandopageswap) {
+ r.ax = 29;
+ r.bx = cp;
+ intr(0x33, r); /* show mouse on current page */
+ }
+}
+
+void on_virtual() {
+ switch (visible) {
+ case m_virtual:
+ return;
+ break;
+ case m_yes:
+ off();
+ break;
+ }
+
+ visible = m_virtual;
+}
+
+void off() {
+ switch (visible) {
+ case m_no:
+ case m_virtual :
+ return;
+ break;
+ case m_yes : {
+ r.ax = 2;
+ intr(0x33, r);
+ }
+ break;
+ }
+ visible = m_no;
+}
+
+void off_virtual() {
+ byte fv;
+
+ if (visible != m_virtual) return;
+
+ for (fv = 0; fv <= 1; fv ++) {
+ setactivepage(fv);
+ wipe_vmc(1 - fv);
+ }
+ setactivepage(1 - cp);
+ visible = m_no;
+}
+
+void xycheck() { /* only updates mx & my, not all other mouse vars */
+ r.ax = 3;
+ intr(0x33, r); /* getbuttonstatus */
+ {
+ keystatus = bx;
+ mx = cx;
+ my = dx;
+ }
+}
+
+void hopto(integer x, integer y) { /* Moves mouse pointer to x,y */
+ {
+ ax = 4;
+ cx = x;
+ dx = y;
+ }
+ intr(0x33, r);
+}
+
+void check() {
+ {
+ ax = 6;
+ bx = 0;
+ }
+ intr(0x33, r); /* getbuttonreleaseinfo */
+ {
+ mrelease = bx;
+ mrx = cx;
+ mry = dx;
+ }
+ {
+ ax = 5;
+ bx = 0;
+ }
+ intr(0x33, r); /* getbuttonpressinfo */
+ {
+ mpress = bx;
+ mpx = cx;
+ mpy = dx;
+ }
+ xycheck(); /* just to complete the job. */
+}
+
+void note(word hertz) {
+ if (soundfx) sound(hertz);
+}
+
+void blip() {
+ byte fv;
+
+ for (fv = 1; fv <= 7; fv ++) {
+ sound(177 + (fv * 200) % 177);
+ delay(1);
+ }
+ nosound;
+}
+
+string strf(longint x) {
+ string q;
+
+ string strf_result;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
+}
+
+void shadow(integer x1, integer y1, integer x2, integer y2, byte hc, byte sc) {
+ byte fv;
+
+ for (fv = 0; fv <= border; fv ++) {
+ setfillstyle(1, hc);
+ bar(x1 + fv, y1 + fv, x1 + fv, y2 - fv);
+ bar(x1 + fv, y1 + fv, x2 - fv, y1 + fv);
+
+ setfillstyle(1, sc);
+ bar(x2 - fv, y1 + fv, x2 - fv, y2 - fv);
+ bar(x1 + fv, y2 - fv, x2 - fv, y2 - fv);
+ }
+}
+
+void shbox(integer x1, integer y1, integer x2, integer y2, string t) {
+ const integer fc = 7;
+
+ off();
+ shadow(x1, y1, x2, y2, 15, 8);
+ setfillstyle(1, fc);
+ bar(x1 + border + 1, y1 + border + 1, x2 - border - 1, y2 - border - 1);
+ setcolor(1);
+ x1 = (x2 - x1) / 2 + x1;
+ y1 = (y2 - y1) / 2 + y1;
+ outtextxy(x1, y1, t);
+ if (length(t) > 1) {
+ fillchar(t[2], length(t) - 1, '\40');
+ t[1] = '_';
+ outtextxy(x1 - 1, y1 + 1, t);
+ }
+ on();
+}
+
+void newgame() { /* This sets up the DNA for a completely new game. */
+ byte gd, gm;
+
+ for (gm = 1; gm <= numtr; gm ++) {
+ triptype &with = tr[gm];
+ if (with.quick) done();
+ } /* Deallocate sprite. Sorry, beta testers! */
+
+ tr[1].init(0, true);
+ alive = true;
+
+ score = 0; /*for gd:=0 to 5 do which[gd]:=1;*/
+ fillchar(dna, sizeof(dna), '\0');
+ natural();
+ normal_edit();
+ mousepage(0);
+ dna.spare_evening = "answer a questionnaire";
+ dna.like2drink = "beer";
+
+ {
+ dna.pence = 30; /* 2/6 */ dna.rw = stopped;
+ dna.wearing = clothes;
+ dna.obj[money] = true;
+ dna.obj[bodkin] = true;
+ dna.obj[bell] = true;
+ dna.obj[clothes] = true;
+ }
+
+ thinks = '\2';
+ objectlist();
+ ontoolbar = false;
+ seescroll = false;
+
+ ppos[0][1] = -177; /*tr[1].appear(300,117,right);*/ gd = 0;
+ for (gd = 0; gd <= 30; gd ++) for (gm = 0; gm <= 1; gm ++) also[gd][gm] = nil;
+ /* fillchar(previous^,sizeof(previous^),#0); { blank out array } */
+ him = '\376';
+ her = '\376';
+ it = '\376';
+ last_person = '\376'; /* = Pardon? */
+ dna.pass_num = Random(30) + 1;
+ after_the_scroll = false;
+ dna.user_moves_avvy = false;
+ doing_sprite_run = false;
+ dna.avvy_in_bed = true;
+ enid_filename = "";
+
+ for (gd = 0; gd <= 1; gd ++) {
+ cp = 1 - cp;
+ getback();
+ }
+
+ enterroom(1, 1);
+ new_game_for_trippancy();
+ showscore();
+
+ standard_bar();
+ clock();
+ sprite_run();
+}
+
+void click() { /* "Audio keyboard feedback" */
+ sound(7177);
+ delay(1);
+ nosound;
+}
+
+void slowdown() {
+ /* repeat until TSkellern>=howlong; TSkellern:=0;*/
+ do {
+ ;
+ } while (!(memw[storage_seg * skellern] >= howlong));
+ memw[storage_seg * skellern] = 0;
+}
+
+boolean flagset(char x) {
+ boolean flagset_result;
+ flagset_result = pos(x, flags) > 0;
+ return flagset_result;
+}
+
+void force_numlock() {
+ if ((locks & num) > 0) locks -= num;
+}
+
+boolean pennycheck(word howmuchby) {
+ boolean pennycheck_result;
+ dna.pence -= howmuchby;
+ if (dna.pence < 0) {
+ dixi('Q', 2); /* "you are now denariusless!" */
+ pennycheck_result = false;
+ gameover();
+ } else
+ pennycheck_result = true;
+ return pennycheck_result;
+}
+
+string getname(char whose) {
+ string getname_result;
+ if (whose < '\257') getname_result = lads[whose];
+ else getname_result = lasses[whose];
+ return getname_result;
+}
+
+char getnamechar(char whose) {
+ char getnamechar_result;
+ if (whose < '\257') getnamechar_result = ladchar[whose - 1];
+ else getnamechar_result = lasschar[whose - 1];
+ return getnamechar_result;
+}
+
+string get_thing(char which) {
+ string get_thing_result;
+ switch (which) {
+ case wine:
+ switch (dna.winestate) {
+ case 1:
+ case 4:
+ get_thing_result = things[which];
+ break;
+ case 3:
+ get_thing_result = "Vinegar";
+ break;
+ }
+ break;
+ case onion:
+ if (dna.rotten_onion)
+ get_thing_result = "rotten onion";
+ else get_thing_result = things[which];
+ break;
+ default:
+ get_thing_result = things[which];
+ }
+ return get_thing_result;
+}
+
+char get_thingchar(char which) {
+ char get_thingchar_result;
+ switch (which) {
+ case wine:
+ if (dna.winestate == 3) get_thingchar_result = 'V'; /* Vinegar */
+ else get_thingchar_result = thingchar[which - 1];
+ break;
+ default:
+ get_thingchar_result = thingchar[which - 1];
+ }
+ return get_thingchar_result;
+}
+
+string get_better(char which) {
+ string get_better_result;
+ if (which > '\226') which -= 149;
+ switch (which) {
+ case wine:
+ switch (dna.winestate) {
+ case 0:
+ case 1:
+ case 4:
+ get_better_result = better[which];
+ break;
+ case 3:
+ get_better_result = "some vinegar";
+ break;
+ }
+ break;
+ case onion:
+ if (dna.rotten_onion)
+ get_better_result = "a rotten onion";
+ else if (dna.onion_in_vinegar)
+ get_better_result = "a pickled onion (in the vinegar)";
+ else get_better_result = better[which];
+ break;
+ default:
+ if ((which < numobjs) && (which > '\0'))
+ get_better_result = better[which];
+ else
+ get_better_result = "";
+ }
+ return get_better_result;
}
string f5_does()
- /* This procedure determines what f5 does. */
-{
- string f5_does_result;
- switch (dna.room) {
- case r__yours:
- {
- if (! dna.avvy_is_awake)
- { /* He's asleep, =>= wake up. */
- f5_does_result=string(vb_wake)+"WWake up";
- return f5_does_result;
- }
-
- if (dna.avvy_in_bed)
- { /* In bed. => = get up. */
- f5_does_result=string(vb_stand)+"GGet up";
- return f5_does_result;
- }
-
- }
- break;
-
- case r__insidecardiffcastle:
- {
- if (dna.standing_on_dais)
- f5_does_result=string(vb_climb)+"CClimb down";
- else
- f5_does_result=string(vb_climb)+"CClimb up";
- return f5_does_result;
- }
- break;
-
- case r__nottspub:
- {
- if (dna.sitting_in_pub)
- f5_does_result=string(vb_stand)+"SStand up";
- else
- f5_does_result=string(vb_sit)+"SSit down";
- return f5_does_result;
- }
- break;
-
- case r__musicroom:
- if (infield(7))
- {
- f5_does_result=string(vb_play)+"PPlay the harp";
- return f5_does_result;
- }
- break;
- }
-
- f5_does_result=pardon; /* If all else fails... */
- return f5_does_result;
-}
-
-void plot_vmc(integer xx,integer yy, byte page_)
-{
- if (visible!=m_virtual) return;
- {
- xx=xx+vmc.ofsx; if (xx<0) xx=0;
- yy=yy+vmc.ofsy; if (yy<0) yy=0;
+/* This procedure determines what f5 does. */
+{
+ string f5_does_result;
+ switch (dna.room) {
+ case r__yours: {
+ if (! dna.avvy_is_awake) {
+ /* He's asleep, =>= wake up. */
+ f5_does_result = string(vb_wake) + "WWake up";
+ return f5_does_result;
+ }
+
+ if (dna.avvy_in_bed) {
+ /* In bed. => = get up. */
+ f5_does_result = string(vb_stand) + "GGet up";
+ return f5_does_result;
+ }
+
+ }
+ break;
+
+ case r__insidecardiffcastle: {
+ if (dna.standing_on_dais)
+ f5_does_result = string(vb_climb) + "CClimb down";
+ else
+ f5_does_result = string(vb_climb) + "CClimb up";
+ return f5_does_result;
+ }
+ break;
+
+ case r__nottspub: {
+ if (dna.sitting_in_pub)
+ f5_does_result = string(vb_stand) + "SStand up";
+ else
+ f5_does_result = string(vb_sit) + "SSit down";
+ return f5_does_result;
+ }
+ break;
+
+ case r__musicroom:
+ if (infield(7)) {
+ f5_does_result = string(vb_play) + "PPlay the harp";
+ return f5_does_result;
+ }
+ break;
+ }
+
+ f5_does_result = pardon; /* If all else fails... */
+ return f5_does_result;
+}
+
+void plot_vmc(integer xx, integer yy, byte page_) {
+ if (visible != m_virtual) return;
+ {
+ xx = xx + vmc.ofsx;
+ if (xx < 0) xx = 0;
+ yy = yy + vmc.ofsy;
+ if (yy < 0) yy = 0;
- setactivepage(1-cp);
- getimage(xx,yy,xx+15,yy+15,vmc.backpic[page_]);
- putimage(xx,yy,vmc.andpic,andput);
- putimage(xx,yy,vmc.xorpic,xorput);
+ setactivepage(1 - cp);
+ getimage(xx, yy, xx + 15, yy + 15, vmc.backpic[page_]);
+ putimage(xx, yy, vmc.andpic, andput);
+ putimage(xx, yy, vmc.xorpic, xorput);
-/* setcolor( 0); outtextxy(xx+8,yy+16,'Û'); outtextxy(xx,yy+16,'Û');
- setcolor(11+page);
- outtextxy(xx+8,yy+16,chr(48+roomtime mod 10));
- outtextxy(xx ,yy+16,chr(48+(roomtime div 10) mod 10));*/
+ /* setcolor( 0); outtextxy(xx+8,yy+16,'Û'); outtextxy(xx,yy+16,'Û');
+ setcolor(11+page);
+ outtextxy(xx+8,yy+16,chr(48+roomtime mod 10));
+ outtextxy(xx ,yy+16,chr(48+(roomtime div 10) mod 10));*/
- {
- pointtype& with1 = vmc.wherewas[page_];
+ {
+ pointtype &with1 = vmc.wherewas[page_];
- with1.x=xx;
- with1.y=yy;
- }
- }
+ with1.x = xx;
+ with1.y = yy;
+ }
+ }
}
-void wipe_vmc(byte page_)
-{
- if (visible!=m_virtual) return;
- { pointtype& with1 = vmc.wherewas[page_];
- if (with1.x!=maxint)
- putimage(with1.x,with1.y,vmc.backpic[page_],0);}
+void wipe_vmc(byte page_) {
+ if (visible != m_virtual) return;
+ {
+ pointtype &with1 = vmc.wherewas[page_];
+ if (with1.x != maxint)
+ putimage(with1.x, with1.y, vmc.backpic[page_], 0);
+ }
}
-void setup_vmc()
-{
- byte fv;
+void setup_vmc() {
+ byte fv;
- {
- getmem(vmc.andpic,mouse_size);
- getmem(vmc.xorpic,mouse_size);
+ {
+ getmem(vmc.andpic, mouse_size);
+ getmem(vmc.xorpic, mouse_size);
- for( fv=0; fv <= 1; fv ++)
- {
- getmem(vmc.backpic[fv],mouse_size);
- vmc.wherewas[fv].x=maxint;
- }
- }
+ for (fv = 0; fv <= 1; fv ++) {
+ getmem(vmc.backpic[fv], mouse_size);
+ vmc.wherewas[fv].x = maxint;
+ }
+ }
}
-void clear_vmc()
-{
- byte fv;
+void clear_vmc() {
+ byte fv;
- for( fv=0; fv <= 1; fv ++) vmc.wherewas[fv].x=maxint;
+ for (fv = 0; fv <= 1; fv ++) vmc.wherewas[fv].x = maxint;
}
-void setminmaxhorzcurspos(word min,word max) /* phew */
-{
- {
- ax=7;
- cx=min;
- dx=max;
- }
- intr(0x33,r);
+void setminmaxhorzcurspos(word min, word max) { /* phew */
+ {
+ ax = 7;
+ cx = min;
+ dx = max;
+ }
+ intr(0x33, r);
}
-void setminmaxvertcurspos(word min,word max)
-{
- {
- ax=8; /* A guess. In the book, 7 */
- cx=min;
- dx=max;
- }
- intr(0x33,r);
+void setminmaxvertcurspos(word min, word max) {
+ {
+ ax = 8; /* A guess. In the book, 7 */
+ cx = min;
+ dx = max;
+ }
+ intr(0x33, r);
}
-void load_a_mouse(byte which)
-{
- untyped_file f;
+void load_a_mouse(byte which) {
+ untyped_file f;
- assign(f,"mice.avd");
- reset(f,1);
- seek(f,mouse_size*2*(which-1)+134);
+ assign(f, "mice.avd");
+ reset(f, 1);
+ seek(f, mouse_size * 2 * (which - 1) + 134);
- {
- blockread(f,vmc.andpic,mouse_size);
- blockread(f,vmc.xorpic,mouse_size);
- close(f);
- {
- mp& with1 = mps[which];
+ {
+ blockread(f, vmc.andpic, mouse_size);
+ blockread(f, vmc.xorpic, mouse_size);
+ close(f);
+ {
+ mp &with1 = mps[which];
- vmc.ofsx=-with1.horzhotspot;
- vmc.ofsy=-with1.verthotspot;
+ vmc.ofsx = -with1.horzhotspot;
+ vmc.ofsy = -with1.verthotspot;
- setminmaxhorzcurspos(with1.horzhotspot+3,624+with1.horzhotspot);
- setminmaxvertcurspos(with1.verthotspot,199);
- }
- }
+ setminmaxhorzcurspos(with1.horzhotspot + 3, 624 + with1.horzhotspot);
+ setminmaxvertcurspos(with1.verthotspot, 199);
+ }
+ }
}
-void background(byte x) { setbkcolor(x); }
+void background(byte x) {
+ setbkcolor(x);
+}
-void hang_around_for_a_while()
-{
- byte fv;
+void hang_around_for_a_while() {
+ byte fv;
- for( fv=1; fv <= 28; fv ++) slowdown();
+ for (fv = 1; fv <= 28; fv ++) slowdown();
}
-boolean mouse_near_text()
-{
- boolean mouse_near_text_result;
- mouse_near_text_result=(my>144) && (my<188);
- return mouse_near_text_result;
+boolean mouse_near_text() {
+ boolean mouse_near_text_result;
+ mouse_near_text_result = (my > 144) && (my < 188);
+ return mouse_near_text_result;
}
/* Super_Off and Super_On are two very useful procedures. Super_Off switches
the mouse cursor off, WHATEVER it's like. Super_On restores it again
afterwards. */
-void super_off()
-{
- super_was_off=visible==m_no;
- if (super_was_off) return;
+void super_off() {
+ super_was_off = visible == m_no;
+ if (super_was_off) return;
- super_was_virtual=visible==m_virtual;
+ super_was_virtual = visible == m_virtual;
- if (visible==m_virtual) off_virtual(); else off();
+ if (visible == m_virtual) off_virtual();
+ else off();
}
-void super_on()
-{
- if ((visible!=m_no) || (super_was_off)) return;
+void super_on() {
+ if ((visible != m_no) || (super_was_off)) return;
- if (super_was_virtual) on_virtual(); else on();
+ if (super_was_virtual) on_virtual();
+ else on();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/gyro.h b/engines/avalanche/gyro.h
index 22d7544dab..d08bf86670 100644
--- a/engines/avalanche/gyro.h
+++ b/engines/avalanche/gyro.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -50,338 +50,415 @@ const integer mouse_size = 134;
typedef void(*proc)();
struct postype {
- word x,y,datapos; byte length;
+ word x, y, datapos;
+ byte length;
};
struct mp { /* mouse-pointer */
- matrix<0,1,0,15,word> mask;
- integer horzhotspot,verthotspot;
+ matrix<0, 1, 0, 15, word> mask;
+ integer horzhotspot, verthotspot;
};
-struct dnatype { /* here goes... */ /* Ux, uy, & ww now all belong to Trip5 */
- byte rw; /* Realway- just for convenience! */
- byte carrying; /* how many objects you're carrying... */
- array<'\1',numobjs,boolean> obj; /* ...and which ones they are. */
- integer score; /* your score, of course */
- longint pence; /* your current amount of dosh */
- byte room; /* your current room */
- char wearing; /* what you're wearing */
- byte swore; /* number of times you've sworn */
- byte saves; /* number of times this game has been saved */
- array<1,100,byte> rooms; /* Add one to each every time
+struct dnatype {
+ /* here goes... */ /* Ux, uy, & ww now all belong to Trip5 */
+ byte rw; /* Realway- just for convenience! */
+ byte carrying; /* how many objects you're carrying... */
+ array < '\1', numobjs, boolean > obj; /* ...and which ones they are. */
+ integer score; /* your score, of course */
+ longint pence; /* your current amount of dosh */
+ byte room; /* your current room */
+ char wearing; /* what you're wearing */
+ byte swore; /* number of times you've sworn */
+ byte saves; /* number of times this game has been saved */
+ array<1, 100, byte> rooms; /* Add one to each every time
you enter a room */
- byte alcohol; /* Your blood alcohol level. */
- byte playednim; /* How many times you've played Nim. */
- boolean wonnim; /* Have you *won* Nim? (That's harder.) */
- byte winestate; /* 0=good (Notts), 1=passable(Argent) ... 3=vinegar.*/
- boolean cwytalot_gone; /* Has Cwytalot rushed off to Jerusalem yet?*/
-
- byte pass_num; /* Number of the password for this game. */
- boolean ayles_is_awake; /* pretty obvious! */
- byte drawbridge_open; /* Between 0 (shut) and 4 (open). */
- byte avaricius_talk; /* How much Avaricius has said to you. */
- boolean bought_onion; /* Have you bought an onion yet? */
- boolean rotten_onion; /* And has it rotted? */
- boolean onion_in_vinegar; /* Is the onion in the vinegar? */
-
- byte given2spludwick; /* 0 = nothing given, 1 = onion... */
- byte brummie_stairs; /* Progression through the stairs trick. */
- byte cardiff_things; /* Things you get asked in Cardiff. */
-
- boolean cwytalot_in_herts; /* Have you passed Cwytalot in Herts?*/
-
- boolean avvy_is_awake; /* Well? Is Avvy awake? (Screen 1 only.) */
- boolean avvy_in_bed; /* True if Avvy's in bed, but awake. */
-
- boolean user_moves_avvy; /* If this is false, the user has no
+ byte alcohol; /* Your blood alcohol level. */
+ byte playednim; /* How many times you've played Nim. */
+ boolean wonnim; /* Have you *won* Nim? (That's harder.) */
+ byte winestate; /* 0=good (Notts), 1=passable(Argent) ... 3=vinegar.*/
+ boolean cwytalot_gone; /* Has Cwytalot rushed off to Jerusalem yet?*/
+
+ byte pass_num; /* Number of the password for this game. */
+ boolean ayles_is_awake; /* pretty obvious! */
+ byte drawbridge_open; /* Between 0 (shut) and 4 (open). */
+ byte avaricius_talk; /* How much Avaricius has said to you. */
+ boolean bought_onion; /* Have you bought an onion yet? */
+ boolean rotten_onion; /* And has it rotted? */
+ boolean onion_in_vinegar; /* Is the onion in the vinegar? */
+
+ byte given2spludwick; /* 0 = nothing given, 1 = onion... */
+ byte brummie_stairs; /* Progression through the stairs trick. */
+ byte cardiff_things; /* Things you get asked in Cardiff. */
+
+ boolean cwytalot_in_herts; /* Have you passed Cwytalot in Herts?*/
+
+ boolean avvy_is_awake; /* Well? Is Avvy awake? (Screen 1 only.) */
+ boolean avvy_in_bed; /* True if Avvy's in bed, but awake. */
+
+ boolean user_moves_avvy; /* If this is false, the user has no
control over Avvy's movements. */
- byte dogfoodpos; /* Which way Dogfood's looking in the pub. */
+ byte dogfoodpos; /* Which way Dogfood's looking in the pub. */
- boolean givenbadgetoiby; /* Have you given the badge to Iby yet? */
+ boolean givenbadgetoiby; /* Have you given the badge to Iby yet? */
- boolean friar_will_tie_you_up; /* If you're going to get tied up. */
- boolean tied_up; /* You ARE tied up! */
+ boolean friar_will_tie_you_up; /* If you're going to get tied up. */
+ boolean tied_up; /* You ARE tied up! */
- char box_contents; /* 0 = money (sixpence), 254 = empty, any
+ char box_contents; /* 0 = money (sixpence), 254 = empty, any
other number implies the contents of the box. */
- boolean talked_to_crapulus; /* Pretty self-explanatory. */
+ boolean talked_to_crapulus; /* Pretty self-explanatory. */
- byte jacques_awake; /* 0=asleep, 1=awake, 2=gets up, 3=gone. */
+ byte jacques_awake; /* 0=asleep, 1=awake, 2=gets up, 3=gone. */
- boolean ringing_bells; /* Is Jacques ringing the bells? */
+ boolean ringing_bells; /* Is Jacques ringing the bells? */
- boolean standing_on_dais; /* In room 71, inside Cardiff Castle. */
- boolean taken_pen; /* Have you taken the pen (in Cardiff?) */
- boolean arrow_triggered; /* And has the arrow been triggered? */
- boolean arrow_in_the_door; /* Did the arrow hit the wall? */
+ boolean standing_on_dais; /* In room 71, inside Cardiff Castle. */
+ boolean taken_pen; /* Have you taken the pen (in Cardiff?) */
+ boolean arrow_triggered; /* And has the arrow been triggered? */
+ boolean arrow_in_the_door; /* Did the arrow hit the wall? */
- varying_string<77> like2drink,
- favourite_song,
- worst_place_on_earth,
- spare_evening; /* Personalisation str's */
+ varying_string<77> like2drink,
+ favourite_song,
+ worst_place_on_earth,
+ spare_evening; /* Personalisation str's */
- longint total_time; /* Your total time playing this game, in ticks.*/
+ longint total_time; /* Your total time playing this game, in ticks.*/
- byte jumpstatus; /* Fixes how high you're jumping. */
+ byte jumpstatus; /* Fixes how high you're jumping. */
- boolean mushroom_growing; /* Is the mushroom growing in 42? */
+ boolean mushroom_growing; /* Is the mushroom growing in 42? */
- boolean spludwicks_here; /* Is Spludwick at home? */
+ boolean spludwicks_here; /* Is Spludwick at home? */
- byte last_room;
- byte last_room_not_map;
+ byte last_room;
+ byte last_room_not_map;
- boolean crapulus_will_tell; /* Will Crapulus tell you about
+ boolean crapulus_will_tell; /* Will Crapulus tell you about
Spludwick being away? */
- boolean enter_catacombs_from_lusties_room;
- boolean teetotal; /* Are we touching any more drinks? */
- byte malagauche; /* Position of Malagauche. See Celer for more info. */
- char drinking; /* What's he getting you? */
+ boolean enter_catacombs_from_lusties_room;
+ boolean teetotal; /* Are we touching any more drinks? */
+ byte malagauche; /* Position of Malagauche. See Celer for more info. */
+ char drinking; /* What's he getting you? */
- boolean entered_lusties_room_as_monk;
+ boolean entered_lusties_room_as_monk;
- byte cat_x, cat_y; /* XY coords in the catacombs. */
+ byte cat_x, cat_y; /* XY coords in the catacombs. */
- boolean avvys_in_the_cupboard; /* On screen 22. */
+ boolean avvys_in_the_cupboard; /* On screen 22. */
- boolean geida_follows; /* Is Geida following you? */
+ boolean geida_follows; /* Is Geida following you? */
- byte geida_spin,geida_time; /* For the making "Geida dizzy" joke. */
+ byte geida_spin, geida_time; /* For the making "Geida dizzy" joke. */
- byte nextbell; /* For the ringing. */
+ byte nextbell; /* For the ringing. */
- boolean geida_given_potion; /* Does Geida have the potion? */
- boolean lustie_is_asleep; /* Is BDL asleep? */
+ boolean geida_given_potion; /* Does Geida have the potion? */
+ boolean lustie_is_asleep; /* Is BDL asleep? */
- byte flip_to_where, flip_to_ped; /* For the sequencer. */
+ byte flip_to_where, flip_to_ped; /* For the sequencer. */
- boolean been_tied_up; /* In r__Robins. */
+ boolean been_tied_up; /* In r__Robins. */
- boolean sitting_in_pub; /* Are you sitting down in the pub? */
- byte spurge_talk; /* Count for talking to Spurge. */
+ boolean sitting_in_pub; /* Are you sitting down in the pub? */
+ byte spurge_talk; /* Count for talking to Spurge. */
- boolean met_avaroid;
+ boolean met_avaroid;
- boolean taken_mushroom,
- given_pen_to_ayles,
- asked_dogfood_about_nim;
+ boolean taken_mushroom,
+ given_pen_to_ayles,
+ asked_dogfood_about_nim;
};
struct pedtype {
- integer x,y; byte dir;
+ integer x, y;
+ byte dir;
};
struct magictype {
- byte op; /* one of the operations */
- word data; /* data for them */
+ byte op; /* one of the operations */
+ word data; /* data for them */
};
class fieldtype {
public:
- integer x1,y1,x2,y2;
+ integer x1, y1, x2, y2;
};
struct bytefield {
- byte x1,y1,x2,y2;
+ byte x1, y1, x2, y2;
};
class linetype : public fieldtype {
public:
- byte col;
+ byte col;
};
struct adxtype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
-typedef matrix<'\0','\377',0,15,byte> raw; /* raw_font_type */
+typedef matrix < '\0', '\377', 0, 15, byte > raw; /* raw_font_type */
-enum controllers {cjoy,ckey, last_controllers};
+enum controllers {cjoy, ckey, last_controllers};
-typedef array<1,20,varying_string<77> > previoustype;
+typedef array<1, 20, varying_string<77> > previoustype;
struct corridor_type { /* Decarations for the corridors. */
- word doors; /* Door styles are calc'ed from this word.
+ word doors; /* Door styles are calc'ed from this word.
Assign a different number to each one! */
};
struct demo_type {
- word delay;
- char key,extd;
+ word delay;
+ char key, extd;
};
struct quasiped_type {
- byte whichped,fgc,room,bgc; char who;
+ byte whichped, fgc, room, bgc;
+ char who;
};
/* A quasiped defines how people who aren't sprites talk. For example,
quasiped "A" is Dogfood. The rooms aren't stored because I'm leaving
that to context. */
-typedef array<1,31,byte> tunetype;
+typedef array<1, 31, byte> tunetype;
struct vmctype { /* Virtual Mouse Cursor */
- pointer andpic,xorpic;
- array<0,1,pointer> backpic;
- array<0,1,pointtype> wherewas;
- byte picnumber;
- shortint ofsx,ofsy;
+ pointer andpic, xorpic;
+ array<0, 1, pointer> backpic;
+ array<0, 1, pointtype> wherewas;
+ byte picnumber;
+ shortint ofsx, ofsy;
};
-struct sundry { /* Things which must be saved over a backtobootstrap,
- outside DNA. */
- pathstr qenid_filename;
- boolean qsoundfx;
- char qthinks;
- boolean qthinkthing;
+struct sundry {
+ /* Things which must be saved over a backtobootstrap,
+ outside DNA. */
+ pathstr qenid_filename;
+ boolean qsoundfx;
+ char qthinks;
+ boolean qthinkthing;
};
struct joysetup {
- word xmid,ymid,xmin,ymin,xmax,ymax;
- byte centre; /* Size of centre in tenths */
+ word xmid, ymid, xmin, ymin, xmax, ymax;
+ byte centre; /* Size of centre in tenths */
};
struct ednahead { /* Edna header */
- /* This header starts at byte offset 177 in the .ASG file. */
- array<1,9,char> id; /* signature */
- word revision; /* EDNA revision, here 2 (1=dna256) */
- varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
- varying_string<15> shortname; /* Short name, eg Avalot */
- word number; /* Game's code number, here 2 */
- word ver; /* Version number as integer (eg 1.00 = 100) */
- varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
- varying_string<12> filename; /* Filename, eg AVALOT.EXE */
- byte osbyte; /* Saving OS (here 1=DOS. See below for others.*/
- varying_string<5> os; /* Saving OS in text format. */
-
- /* Info on this particular game */
-
- varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
- byte d,m; /* D, M, Y are the Day, Month & Year this game was... */
- word y; /* ...saved on. */
- varying_string<40> desc; /* Description of game (same as in Avaricius!) */
- word len; /* Length of DNA (it's not going to be above 65535!) */
-
- /* Quick reference & miscellaneous */
-
- word saves; /* no. of times this game has been saved */
- integer cash; /* contents of your wallet in numerical form */
- varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
- word points; /* your score */
-
- /* DNA values follow, then footer (which is ignored) */
+ /* This header starts at byte offset 177 in the .ASG file. */
+ array<1, 9, char> id; /* signature */
+ word revision; /* EDNA revision, here 2 (1=dna256) */
+ varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
+ varying_string<15> shortname; /* Short name, eg Avalot */
+ word number; /* Game's code number, here 2 */
+ word ver; /* Version number as integer (eg 1.00 = 100) */
+ varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
+ varying_string<12> filename; /* Filename, eg AVALOT.EXE */
+ byte osbyte; /* Saving OS (here 1=DOS. See below for others.*/
+ varying_string<5> os; /* Saving OS in text format. */
+
+ /* Info on this particular game */
+
+ varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
+ byte d, m; /* D, M, Y are the Day, Month & Year this game was... */
+ word y; /* ...saved on. */
+ varying_string<40> desc; /* Description of game (same as in Avaricius!) */
+ word len; /* Length of DNA (it's not going to be above 65535!) */
+
+ /* Quick reference & miscellaneous */
+
+ word saves; /* no. of times this game has been saved */
+ integer cash; /* contents of your wallet in numerical form */
+ varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
+ word points; /* your score */
+
+ /* DNA values follow, then footer (which is ignored) */
};
- /* Possible values of edhead.os:
- 1 = DOS 4 = Mac
- 2 = Windows 5 = Amiga
- 3 = OS/2 6 = ST
- 7 = Archimedes */
+/* Possible values of edhead.os:
+ 1 = DOS 4 = Mac
+ 2 = Windows 5 = Amiga
+ 3 = OS/2 6 = ST
+ 7 = Archimedes */
const char vernum[] = "1.30";
const char copyright[] = "1995";
const integer thisvercode = 130;
- /* as "vernum", but numerically & without the ".". */
+/* as "vernum", but numerically & without the ".". */
const integer thisgamecode = 2; /* Avalot's code number */
/* Objects you can hold: */
- const char wine = '\1'; const char money = '\2'; const char bodkin = '\3'; const char potion = '\4'; const char chastity = '\5'; const char bolt = '\6';
- const char crossbow = '\7'; const char lute = '\10'; const char badge = '\11'; const char mushroom = '\12'; const char key = '\13'; const char bell = '\14';
- const char prescription = '\15'; const char pen = '\16'; const char ink = '\17'; const char clothes = '\20'; const char habit = '\21'; const char onion = '\22';
+const char wine = '\1';
+const char money = '\2';
+const char bodkin = '\3';
+const char potion = '\4';
+const char chastity = '\5';
+const char bolt = '\6';
+const char crossbow = '\7';
+const char lute = '\10';
+const char badge = '\11';
+const char mushroom = '\12';
+const char key = '\13';
+const char bell = '\14';
+const char prescription = '\15';
+const char pen = '\16';
+const char ink = '\17';
+const char clothes = '\20';
+const char habit = '\21';
+const char onion = '\22';
/* People who hang around this game. */
/* Boys: */
-const char pavalot = '\226'; const char pspludwick = '\227'; const char pcrapulus = '\230'; const char pdrduck = '\231';
-const char pmalagauche = '\232'; const char pfriartuck = '\233'; const char probinhood = '\234'; const char pcwytalot = '\235';
-const char pdulustie = '\236'; const char pduke = '\237'; const char pdogfood = '\240'; const char ptrader = '\241';
-const char pibythneth = '\242'; const char payles = '\243'; const char pport = '\244'; const char pspurge = '\245'; const char pjacques = '\246';
+const char pavalot = '\226';
+const char pspludwick = '\227';
+const char pcrapulus = '\230';
+const char pdrduck = '\231';
+const char pmalagauche = '\232';
+const char pfriartuck = '\233';
+const char probinhood = '\234';
+const char pcwytalot = '\235';
+const char pdulustie = '\236';
+const char pduke = '\237';
+const char pdogfood = '\240';
+const char ptrader = '\241';
+const char pibythneth = '\242';
+const char payles = '\243';
+const char pport = '\244';
+const char pspurge = '\245';
+const char pjacques = '\246';
/* Girls: */
-const char parkata = '\257'; const char pgeida = '\260'; const char pwisewoman = '\262';
+const char parkata = '\257';
+const char pgeida = '\260';
+const char pwisewoman = '\262';
const integer xw = 30;
const integer yw = 36; /* x width & y whatsit */
const integer margin = 5;
-const array<1,9,mp> mps =
-{{{ /* 1 - up-arrow */
- {{{{65151,64575,64575,63519,63519,61455,61455,57351,57351,49155,49155,64575,64575,64575,64575,64575}},
- {{0,384,384,960,960,2016,2016,4080,4080,8184,384,384,384,384,384,0}}}},
- 8,
- 0},
-
-{ /* 2 - screwdriver */
- {{{{8191,4095,2047,34815,50175,61951,63743,64543,65039,65031,65027,65281,65408,65472,65505,65523}},
- {{0,24576,28672,12288,2048,1024,512,256,224,176,216,96,38,10,12,0}}}},
- 0,
- 0},
-
-{ /* 3 - right-arrow */
- {{{{65535,65535,64639,64543,7,1,0,1,7,64543,64639,65535,65535,65535,65535,65535}},
- {{0,0,0,384,480,32760,32766,32760,480,384,0,0,0,0,0,0}}}},
- 15,
- 6},
-
-{ /* 4 - fletch */
- {{{{255,511,1023,2047,1023,4607,14591,31871,65031,65283,65281,65280,65280,65409,65473,65511}},
- {{0,10240,20480,24576,26624,17408,512,256,128,88,32,86,72,20,16,0}}}},
- 0,
- 0},
-
-{ /* 5 - hourglass */
- {{{{0,0,0,34785,50115,61455,61455,63519,63519,61839,61455,49155,32769,0,0,0}},
- {{0,32766,16386,12300,2064,1440,1440,576,576,1056,1440,3024,14316,16386,32766,0}}}},
- 8,
- 7},
-
-{ /* 6 - TTHand */
- {{{{62463,57855,57855,57855,57471,49167,32769,0,0,0,0,32768,49152,57344,61441,61443}},
- {{3072,4608,4608,4608,4992,12912,21070,36937,36873,36865,32769,16385,8193,4097,2050,4092}}}},
- 4,
- 0},
-
-{ /* 7- Mark's crosshairs */
- {{{{65535,65151,65151,65151,65151,0,65151,65151,65151,65151,65535,65535,65535,65535,65535,65535}},
- {{0,384,384,384,384,65535,384,384,384,384,0,0,0,0,0,0}}}},
- 8,
- 5},
-
-{ /* 8- I-beam. */
- {{{{65535,65535,63631,63503,63503,65087,65087,65087,65087,65087,63503,63503,63631,65535,65535,65535}},
- {{0,0,0,864,128,128,128,128,128,128,128,864,0,0,0,0}}}},
- 8,
- 7},
-
-{ /* 9- Question mark. */
- {{{{511,1023,2047,31,15,8199,32647,65415,63503,61471,61503,61695,63999,63999,61695,61695}},
- {{65024,33792,34816,34784,40976,57224,32840,72,1936,2080,2496,2304,1536,1536,2304,3840}}}},
- 0,
- 0}}};
-
-const array<'\226','\246',varying_string<19> > lads =
- {{"Avalot","Spludwick","Crapulus","Dr. Duck","Malagauche","Friar Tuck",
- "Robin Hood","Cwytalot","du Lustie","the Duke of Cardiff","Dogfood",
- "A trader","Ibythneth","Ayles","Port","Spurge","Jacques"}};
-
-const array<'\257','\262',varying_string<14> > lasses =
- {{"Arkata","Geida",'±',"the Wise Woman"}};
-
- const array<'\226','\245',char> ladchar = "ASCDMTRwLfgeIyPu";
-
-const array<'\257','\262',char> lasschar = "kG±o";
+const array<1, 9, mp> mps = {
+ { {
+ /* 1 - up-arrow */
+ { { {{65151, 64575, 64575, 63519, 63519, 61455, 61455, 57351, 57351, 49155, 49155, 64575, 64575, 64575, 64575, 64575}},
+ {{0, 384, 384, 960, 960, 2016, 2016, 4080, 4080, 8184, 384, 384, 384, 384, 384, 0}}
+ }
+ },
+ 8,
+ 0
+ },
+
+ {
+ /* 2 - screwdriver */
+ { { {{8191, 4095, 2047, 34815, 50175, 61951, 63743, 64543, 65039, 65031, 65027, 65281, 65408, 65472, 65505, 65523}},
+ {{0, 24576, 28672, 12288, 2048, 1024, 512, 256, 224, 176, 216, 96, 38, 10, 12, 0}}
+ }
+ },
+ 0,
+ 0
+ },
+
+ {
+ /* 3 - right-arrow */
+ { { {{65535, 65535, 64639, 64543, 7, 1, 0, 1, 7, 64543, 64639, 65535, 65535, 65535, 65535, 65535}},
+ {{0, 0, 0, 384, 480, 32760, 32766, 32760, 480, 384, 0, 0, 0, 0, 0, 0}}
+ }
+ },
+ 15,
+ 6
+ },
+
+ {
+ /* 4 - fletch */
+ { { {{255, 511, 1023, 2047, 1023, 4607, 14591, 31871, 65031, 65283, 65281, 65280, 65280, 65409, 65473, 65511}},
+ {{0, 10240, 20480, 24576, 26624, 17408, 512, 256, 128, 88, 32, 86, 72, 20, 16, 0}}
+ }
+ },
+ 0,
+ 0
+ },
+
+ {
+ /* 5 - hourglass */
+ { { {{0, 0, 0, 34785, 50115, 61455, 61455, 63519, 63519, 61839, 61455, 49155, 32769, 0, 0, 0}},
+ {{0, 32766, 16386, 12300, 2064, 1440, 1440, 576, 576, 1056, 1440, 3024, 14316, 16386, 32766, 0}}
+ }
+ },
+ 8,
+ 7
+ },
+
+ {
+ /* 6 - TTHand */
+ { { {{62463, 57855, 57855, 57855, 57471, 49167, 32769, 0, 0, 0, 0, 32768, 49152, 57344, 61441, 61443}},
+ {{3072, 4608, 4608, 4608, 4992, 12912, 21070, 36937, 36873, 36865, 32769, 16385, 8193, 4097, 2050, 4092}}
+ }
+ },
+ 4,
+ 0
+ },
+
+ {
+ /* 7- Mark's crosshairs */
+ { { {{65535, 65151, 65151, 65151, 65151, 0, 65151, 65151, 65151, 65151, 65535, 65535, 65535, 65535, 65535, 65535}},
+ {{0, 384, 384, 384, 384, 65535, 384, 384, 384, 384, 0, 0, 0, 0, 0, 0}}
+ }
+ },
+ 8,
+ 5
+ },
+
+ {
+ /* 8- I-beam. */
+ { { {{65535, 65535, 63631, 63503, 63503, 65087, 65087, 65087, 65087, 65087, 63503, 63503, 63631, 65535, 65535, 65535}},
+ {{0, 0, 0, 864, 128, 128, 128, 128, 128, 128, 128, 864, 0, 0, 0, 0}}
+ }
+ },
+ 8,
+ 7
+ },
+
+ {
+ /* 9- Question mark. */
+ { { {{511, 1023, 2047, 31, 15, 8199, 32647, 65415, 63503, 61471, 61503, 61695, 63999, 63999, 61695, 61695}},
+ {{65024, 33792, 34816, 34784, 40976, 57224, 32840, 72, 1936, 2080, 2496, 2304, 1536, 1536, 2304, 3840}}
+ }
+ },
+ 0,
+ 0
+ }
+ }
+};
+
+const array < '\226', '\246', varying_string<19> > lads = {
+ {
+ "Avalot", "Spludwick", "Crapulus", "Dr. Duck", "Malagauche", "Friar Tuck",
+ "Robin Hood", "Cwytalot", "du Lustie", "the Duke of Cardiff", "Dogfood",
+ "A trader", "Ibythneth", "Ayles", "Port", "Spurge", "Jacques"
+ }
+};
+
+const array < '\257', '\262', varying_string<14> > lasses =
+{{"Arkata", "Geida", '±', "the Wise Woman"}};
+
+const array < '\226', '\245', char > ladchar = "ASCDMTRwLfgeIyPu";
+
+const array < '\257', '\262', char > lasschar = "kG±o";
const integer numtr = 2; /* current max no. of sprites */
-const boolean a_thing = true; const boolean a_person = false; /* for Thinkabout */
+const boolean a_thing = true;
+const boolean a_person = false; /* for Thinkabout */
/* Magic/portal commands are */
@@ -395,7 +472,7 @@ const boolean a_thing = true; const boolean a_person = false; /* for Thinkabout
/* These following constants should be included in CFG when it's written. */
- const boolean slow_computer = false; /* stops walking when mouse touches toolbar */
+const boolean slow_computer = false; /* stops walking when mouse touches toolbar */
/* --- */
@@ -403,58 +480,66 @@ const integer border = 1; /* size of border on shadowboxes */
const integer pagetop = 81920;
- const integer up = 0;
+const integer up = 0;
const integer right = 1;
- const integer down = 2;
- const integer left = 3;
-const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7;
- const integer stopped = 8;
+const integer down = 2;
+const integer left = 3;
+const integer ur = 4;
+const integer dr = 5;
+const integer dl = 6;
+const integer ul = 7;
+const integer stopped = 8;
const integer walk = 3;
const integer run = 5;
/*$I ROOMNUMS.INC - Room number constants (r__xxx) */
-const array<'\226','\262',byte> whereis =
+const array < '\226', '\262', byte > whereis =
/* The Lads */
- {{r__yours, /* Avvy */
- r__spludwicks, /* Spludwick */
- r__outsideyours, /* Crapulus */
- r__ducks, /* Duck - r__DucksRoom's not defined yet. */
- r__argentpub, /* Malagauche */
- r__robins, /* Friar Tuck. */
- 177, /* Robin Hood - can't meet him at the start. */
- r__brummieroad, /* Cwytalot */
- r__lustiesroom, /* Baron du Lustie. */
- r__outsidecardiffcastle, /* The Duke of Cardiff. */
- r__argentpub, /* Dogfood */
- r__outsideducks, /* Trader */
- r__argentpub, /* Ibythneth */
- r__aylesoffice, /* Ayles */
- r__nottspub, /* Port */
- r__nottspub, /* Spurge */
- r__musicroom, /* Jacques */
- 0,0,0,0,0,0,0,0,
- /* The Lasses */
- r__yours, /* Arkata */
- r__geidas, /* Geida */
- 177, /* nobody allocated here! */
- r__wisewomans}}; /* The Wise Woman. */
+{ {
+ r__yours, /* Avvy */
+ r__spludwicks, /* Spludwick */
+ r__outsideyours, /* Crapulus */
+ r__ducks, /* Duck - r__DucksRoom's not defined yet. */
+ r__argentpub, /* Malagauche */
+ r__robins, /* Friar Tuck. */
+ 177, /* Robin Hood - can't meet him at the start. */
+ r__brummieroad, /* Cwytalot */
+ r__lustiesroom, /* Baron du Lustie. */
+ r__outsidecardiffcastle, /* The Duke of Cardiff. */
+ r__argentpub, /* Dogfood */
+ r__outsideducks, /* Trader */
+ r__argentpub, /* Ibythneth */
+ r__aylesoffice, /* Ayles */
+ r__nottspub, /* Port */
+ r__nottspub, /* Spurge */
+ r__musicroom, /* Jacques */
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ /* The Lasses */
+ r__yours, /* Arkata */
+ r__geidas, /* Geida */
+ 177, /* nobody allocated here! */
+ r__wisewomans
+ }
+}; /* The Wise Woman. */
/* Art gallery at 2,1; notice about this at 2,2. */
-const matrix<1,8,1,8,longint> catamap =
- /* Geida's room */
- /* 1 2 3 | 4 5 6 7 8*/
-{{{{0x204,0x200,0xd0f0,0xf0ff,0xff,0xd20f,0xd200,0x200}},
- {{0x50f1,0x20ff,0x2ff,0xff,0xe0ff,0x20ff,0x200f,0x7210}},
- {{0xe3f0,0xe10f,0x72f0,0xff,0xe0ff,0xff,0xff,0x800f}},
- {{0x2201,0x2030,0x800f,0x220,0x20f,0x30,0xff,0x23f}}, /* >> Oubliette */
- {{0x5024,0xf3,0xff,0x200f,0x22f0,0x20f,0x200,0x7260}},
- {{0xf0,0x2ff,0xe2ff,0xff,0x200f,0x50f0,0x72ff,0x201f}},
- {{0xf6,0x220f,0x22f0,0x30f,0xf0,0x20f,0x8200,0x2f0}}, /* <<< In here */
- {{0x34,0x200f,0x51f0,0x201f,0xf1,0x50ff,0x902f,0x2062}}}};
- /* vv Stairs trap. */
+const matrix<1, 8, 1, 8, longint> catamap =
+ /* Geida's room */
+ /* 1 2 3 | 4 5 6 7 8*/
+{ { {{0x204, 0x200, 0xd0f0, 0xf0ff, 0xff, 0xd20f, 0xd200, 0x200}},
+ {{0x50f1, 0x20ff, 0x2ff, 0xff, 0xe0ff, 0x20ff, 0x200f, 0x7210}},
+ {{0xe3f0, 0xe10f, 0x72f0, 0xff, 0xe0ff, 0xff, 0xff, 0x800f}},
+ {{0x2201, 0x2030, 0x800f, 0x220, 0x20f, 0x30, 0xff, 0x23f}}, /* >> Oubliette */
+ {{0x5024, 0xf3, 0xff, 0x200f, 0x22f0, 0x20f, 0x200, 0x7260}},
+ {{0xf0, 0x2ff, 0xe2ff, 0xff, 0x200f, 0x50f0, 0x72ff, 0x201f}},
+ {{0xf6, 0x220f, 0x22f0, 0x30f, 0xf0, 0x20f, 0x8200, 0x2f0}}, /* <<< In here */
+ {{0x34, 0x200f, 0x51f0, 0x201f, 0xf1, 0x50ff, 0x902f, 0x2062}}
+ }
+};
+/* vv Stairs trap. */
/* Explanation: $NSEW.
Nibble N: North.
@@ -493,45 +578,50 @@ const matrix<1,8,1,8,longint> catamap =
F = straight-through corridor. */
const byte interrogation = 0;
- /* If this is greater than zero, the next line you type is stored in
- the DNA in a position dictated by the value. If a scroll comes up,
- or you leave the room, it's automatically set to zero. */
+/* If this is greater than zero, the next line you type is stored in
+ the DNA in a position dictated by the value. If a scroll comes up,
+ or you leave the room, it's automatically set to zero. */
const boolean demo = false; /* If this is true, we're in a demo of the game. */
-const array<0,2,char> spludwick_order = {{onion,ink,mushroom}};
-
-const array<10,25,quasiped_type> quasipeds =
-{{{2,lightgray, 19,brown,pdogfood}, /* A: Dogfood (screen 19). */
-{3,green, 19,white,pibythneth}, /* B: Ibythneth (screen 19). */
-{3,white, 1,magenta,parkata}, /* C: Arkata (screen 1). */
-{3,black, 23,red,'\261'}, /* D: Hawk (screen 23). */
-{3,lightgreen,50,brown,ptrader}, /* E: Trader (screen 50). */
-{6,yellow, 42,red,pavalot}, /* F: Avvy, tied up (scr.42) */
-{2,blue, 16,white,payles}, /* G: Ayles (screen 16). */
-{2,brown, 7,white,pjacques}, /* H: Jacques (screen 7). */
-{2,lightgreen,47,green,pspurge}, /* I: Spurge (screen 47). */
-{3,yellow, 47,red,pavalot}, /* J: Avalot (screen 47). */
-{2,lightgray, 23,black,pdulustie}, /* K: du Lustie (screen 23). */
-{2,yellow, 27,red,pavalot}, /* L: Avalot (screen 27). */
-{3,white, 27,red,'\261'}, /* M: Avaroid (screen 27). */
-{4,lightgray, 19,darkgray,pmalagauche}, /*N: Malagauche (screen 19). */
-{5,lightmagenta,47,red,pport}, /* O: Port (screen 47). */
-{2,lightgreen, 51,darkgray,pdrduck}}}; /*P: Duck (screen 51). */
-
- const integer lower = 0;
- const integer same = 1;
+const array<0, 2, char> spludwick_order = {{onion, ink, mushroom}};
+
+const array<10, 25, quasiped_type> quasipeds = {
+ { {2, lightgray, 19, brown, pdogfood}, /* A: Dogfood (screen 19). */
+ {3, green, 19, white, pibythneth}, /* B: Ibythneth (screen 19). */
+ {3, white, 1, magenta, parkata}, /* C: Arkata (screen 1). */
+ {3, black, 23, red, '\261'}, /* D: Hawk (screen 23). */
+ {3, lightgreen, 50, brown, ptrader}, /* E: Trader (screen 50). */
+ {6, yellow, 42, red, pavalot}, /* F: Avvy, tied up (scr.42) */
+ {2, blue, 16, white, payles}, /* G: Ayles (screen 16). */
+ {2, brown, 7, white, pjacques}, /* H: Jacques (screen 7). */
+ {2, lightgreen, 47, green, pspurge}, /* I: Spurge (screen 47). */
+ {3, yellow, 47, red, pavalot}, /* J: Avalot (screen 47). */
+ {2, lightgray, 23, black, pdulustie}, /* K: du Lustie (screen 23). */
+ {2, yellow, 27, red, pavalot}, /* L: Avalot (screen 27). */
+ {3, white, 27, red, '\261'}, /* M: Avaroid (screen 27). */
+ {4, lightgray, 19, darkgray, pmalagauche}, /*N: Malagauche (screen 19). */
+ {5, lightmagenta, 47, red, pport}, /* O: Port (screen 47). */
+ {2, lightgreen, 51, darkgray, pdrduck}
+ }
+}; /*P: Duck (screen 51). */
+
+const integer lower = 0;
+const integer same = 1;
const integer higher = 2;
-const array<1,12,char> keys = "QWERTYUIOP[]";
-const array<1,12,word> notes =
- {{196,220,247,262,294,330,350,392,440,494,523,587}};
-
-const tunetype tune =
- {{higher,higher,lower,same,higher,higher,lower,higher,higher,higher,
- lower,higher,higher,
- same,higher,lower,lower,lower,lower,higher,higher,lower,lower,lower,
- lower,same,lower,higher,same,lower,higher}};
+const array<1, 12, char> keys = "QWERTYUIOP[]";
+const array<1, 12, word> notes =
+{{196, 220, 247, 262, 294, 330, 350, 392, 440, 494, 523, 587}};
+
+const tunetype tune = {
+ {
+ higher, higher, lower, same, higher, higher, lower, higher, higher, higher,
+ lower, higher, higher,
+ same, higher, lower, lower, lower, lower, higher, higher, lower, lower, lower,
+ lower, same, lower, higher, same, lower, higher
+ }
+};
/* special run-time errors */
@@ -543,59 +633,74 @@ const integer runerr_getset_overflow = 50;
#define EXTERN
#endif
-EXTERN varying_string<77> current; EXTERN byte curpos; EXTERN boolean cursoron;
+EXTERN varying_string<77> current;
+EXTERN byte curpos;
+EXTERN boolean cursoron;
/* previous:^previoustype;*/
EXTERN varying_string<77> last;
EXTERN dnatype dna;
-EXTERN array<1,50,linetype> lines; /* For Also. */
+EXTERN array<1, 50, linetype> lines; /* For Also. */
EXTERN integer c;
EXTERN registers r;
EXTERN enum { m_no , m_yes , m_virtual } visible;
-EXTERN boolean dropsok,screturn,soundfx,cheat;
-EXTERN word mx,my; /* mouse x & y now */
-EXTERN word mpx,mpy; /* mouse x & y when pressed */
-EXTERN word mrx,mry; /* mouse x & y when released */
-EXTERN byte mpress,mrelease; /* times left mouse button has been pressed/released */
+EXTERN boolean dropsok, screturn, soundfx, cheat;
+EXTERN word mx, my; /* mouse x & y now */
+EXTERN word mpx, mpy; /* mouse x & y when pressed */
+EXTERN word mrx, mry; /* mouse x & y when released */
+EXTERN byte mpress, mrelease; /* times left mouse button has been pressed/released */
EXTERN byte keystatus; /* Mouse key status */
-EXTERN array<1,10,varying_string<20> > un;
-EXTERN byte unn; EXTERN string mousetext;
+EXTERN array<1, 10, varying_string<20> > un;
+EXTERN byte unn;
+EXTERN string mousetext;
/* which:array[0..5] of byte;*/
-EXTERN pointer p; EXTERN boolean weirdword;
-EXTERN byte to_do; EXTERN boolean lmo,mousemade;
-EXTERN array<1,15,varying_string<50> > scroll;
-EXTERN byte scrolln,score,whichwas; EXTERN char thinks; EXTERN boolean thinkthing;
+EXTERN pointer p;
+EXTERN boolean weirdword;
+EXTERN byte to_do;
+EXTERN boolean lmo, mousemade;
+EXTERN array<1, 15, varying_string<50> > scroll;
+EXTERN byte scrolln, score, whichwas;
+EXTERN char thinks;
+EXTERN boolean thinkthing;
/* pp:array[1..1000] of postype;
bb:array[1..9000] of byte;*/
-EXTERN word pptr,bptr;
-EXTERN matrix<0,0,0,1,integer> ppos;
-EXTERN array<1,24,word> pozzes;
-EXTERN byte anim; EXTERN pointer copier;
-EXTERN integer talkx,talky; EXTERN byte talkb,talkf;
+EXTERN word pptr, bptr;
+EXTERN matrix<0, 0, 0, 1, integer> ppos;
+EXTERN array<1, 24, word> pozzes;
+EXTERN byte anim;
+EXTERN pointer copier;
+EXTERN integer talkx, talky;
+EXTERN byte talkb, talkf;
EXTERN byte scrollbells; /* no. of times to ring the bell */
-EXTERN boolean ontoolbar,seescroll;
-
-EXTERN array<1,10,char> objlist;
-EXTERN array<'0','9',pointer> digit;
-EXTERN array<0,8,pointer> rwlite; EXTERN byte oldrw;
-EXTERN varying_string<3> lastscore; EXTERN byte cmp; /* current mouse-pointer */
+EXTERN boolean ontoolbar, seescroll;
+
+EXTERN array<1, 10, char> objlist;
+EXTERN array < '0', '9', pointer > digit;
+EXTERN array<0, 8, pointer> rwlite;
+EXTERN byte oldrw;
+EXTERN varying_string<3> lastscore;
+EXTERN byte cmp; /* current mouse-pointer */
EXTERN varying_string<10> verbstr; /* what you can do with your object. :-) */
-EXTERN matrix<0,30,0,1,string*> also;
-EXTERN array<1,15,pedtype> peds;
-EXTERN array<1,15,magictype> magics;
-EXTERN array<9,15,magictype> portals;
-EXTERN array<1,30,fieldtype> fields; EXTERN byte numfields;
-EXTERN varying_string<26> flags; EXTERN string listen;
+EXTERN matrix<0, 30, 0, 1, string *> also;
+EXTERN array<1, 15, pedtype> peds;
+EXTERN array<1, 15, magictype> magics;
+EXTERN array<9, 15, magictype> portals;
+EXTERN array<1, 30, fieldtype> fields;
+EXTERN byte numfields;
+EXTERN varying_string<26> flags;
+EXTERN string listen;
-EXTERN word oh,onh,om,h,m,s,s1;
+EXTERN word oh, onh, om, h, m, s, s1;
EXTERN varying_string<4> atkey; /* For XTs, set to "alt-". For ATs, set to "f1". */
-EXTERN byte cp,ledstatus,defaultled;
-EXTERN raw little; EXTERN boolean quote; /* 66 or 99 next? */
+EXTERN byte cp, ledstatus, defaultled;
+EXTERN raw little;
+EXTERN boolean quote; /* 66 or 99 next? */
EXTERN boolean alive;
-EXTERN array<1,2000,char> buffer; EXTERN word bufsize;
+EXTERN array<1, 2000, char> buffer;
+EXTERN word bufsize;
EXTERN byte oldjw; /* Old joystick-way */
EXTERN controllers ctrl;
@@ -610,7 +715,8 @@ EXTERN integer underscroll; /* Y-coord of just under the scroll text. */
EXTERN boolean ddmnow; /* Kludge so we don't have to keep referring to Dropdown */
EXTERN varying_string<40> roomname; /* Name of this room */
-EXTERN text logfile; EXTERN boolean logging,log_epson;
+EXTERN text logfile;
+EXTERN boolean logging, log_epson;
EXTERN boolean cl_override;
@@ -621,12 +727,12 @@ EXTERN byte subjnumber; /* The same thing. */
EXTERN boolean keyboardclick; /* Is a keyboard click noise wanted? */
-EXTERN char him,her,it;
+EXTERN char him, her, it;
EXTERN longint roomtime; /* Set to 0 when you enter a room, added to in every loop.*/
EXTERN boolean after_the_scroll;
- /* For the demo: */
+/* For the demo: */
EXTERN demo_type demo_rec;
EXTERN file<demo_type> demofile;
@@ -643,90 +749,91 @@ EXTERN string filetoload;
EXTERN boolean holdthedawn; /* If this is true, calling Dawn will do nothing.
It's used, for example, at the start, to stop Load from dawning. */
-EXTERN word storage_seg,storage_ofs; /* Seg and ofs of the Storage area. */
+EXTERN word storage_seg, storage_ofs; /* Seg and ofs of the Storage area. */
EXTERN word skellern; /* Offset of the timer variable - 1 more than storage_OFS */
EXTERN boolean reloaded; /* Is this NOT the primary loading? */
-EXTERN boolean super_was_virtual,super_was_off; /* Used by Super_Off and Super_On */
+EXTERN boolean super_was_virtual, super_was_off; /* Used by Super_Off and Super_On */
EXTERN pathstr enid_filename;
EXTERN joysetup js;
-EXTERN word cxmin,cxmax,cymin,cymax; EXTERN boolean use_joy_a;
+EXTERN word cxmin, cxmax, cymin, cymax;
+EXTERN boolean use_joy_a;
#undef EXTERN
#define EXTERN extern
- void newpointer(byte m);
+void newpointer(byte m);
- void wait(); /* makes hourglass */
+void wait(); /* makes hourglass */
- void on();
+void on();
- void off();
+void off();
- void on_virtual();
+void on_virtual();
- void off_virtual();
+void off_virtual();
- void xycheck();
+void xycheck();
- void hopto(integer x,integer y); /* Moves mouse pointer to x,y */
+void hopto(integer x, integer y); /* Moves mouse pointer to x,y */
- void check();
+void check();
- void note(word hertz);
+void note(word hertz);
- void blip();
+void blip();
- string strf(longint x);
+string strf(longint x);
- void shbox(integer x1,integer y1,integer x2,integer y2, string t);
+void shbox(integer x1, integer y1, integer x2, integer y2, string t);
- void newgame();
+void newgame();
- void click();
+void click();
- void slowdown();
+void slowdown();
- boolean flagset(char x);
+boolean flagset(char x);
- void force_numlock();
+void force_numlock();
- boolean pennycheck(word howmuchby);
+boolean pennycheck(word howmuchby);
- string getname(char whose);
+string getname(char whose);
- char getnamechar(char whose);
+char getnamechar(char whose);
- string get_thing(char which);
+string get_thing(char which);
- char get_thingchar(char which);
+char get_thingchar(char which);
- string get_better(char which);
+string get_better(char which);
- string f5_does();
+string f5_does();
- void plot_vmc(integer xx,integer yy, byte page_);
+void plot_vmc(integer xx, integer yy, byte page_);
- void wipe_vmc(byte page_);
+void wipe_vmc(byte page_);
- void setup_vmc();
+void setup_vmc();
- void clear_vmc();
+void clear_vmc();
- void load_a_mouse(byte which);
+void load_a_mouse(byte which);
- void background(byte x);
+void background(byte x);
- void hang_around_for_a_while();
+void hang_around_for_a_while();
- void super_off();
+void super_off();
- void super_on();
+void super_on();
- boolean mouse_near_text();
+boolean mouse_near_text();
- } // End of namespace Avalanche.
+} // End of namespace Avalanche.
#endif \ No newline at end of file
diff --git a/engines/avalanche/help.cpp b/engines/avalanche/help.cpp
index 70f7582ede..3074091a0b 100644
--- a/engines/avalanche/help.cpp
+++ b/engines/avalanche/help.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,220 +34,277 @@ namespace Avalanche {
typedef graphcursmasktype cursor;
const char vernum[] = "v1ù00";
const char copyright[] = "1992";
-const cursor questionmark =
-{
- ((511,1023,2047,31,15,8199,32647,65415,63503,61471,61503,61695,63999,63999,61695,61695),
- (65024,33792,34816,34784,40976,57224,32840,72,1936,2080,2496,2304,1536,1536,2304,3840)),
- 0,
- 0};
+const cursor questionmark = {
+ ((511, 1023, 2047, 31, 15, 8199, 32647, 65415, 63503, 61471, 61503, 61695, 63999, 63999, 61695, 61695),
+ (65024, 33792, 34816, 34784, 40976, 57224, 32840, 72, 1936, 2080, 2496, 2304, 1536, 1536, 2304, 3840)),
+ 0,
+ 0
+};
-const array<1,7,varying_string<12> > topics =
- {{"Front page","Background","Toolbar","Menus",
- "Keyboard","Shareware","Exit Help"}};
+const array<1, 7, varying_string<12> > topics = {
+ {
+ "Front page", "Background", "Toolbar", "Menus",
+ "Keyboard", "Shareware", "Exit Help"
+ }
+};
-const array<1,6,char> keys = "FBTMKS";
+const array<1, 6, char> keys = "FBTMKS";
byte page_;
-palettetype dp,dark;
+palettetype dp, dark;
char r;
boolean lmo;
-void hilight(integer x,integer y, byte c1,byte c2, string z)
-{
- string w;
-;
- w=z; w[1]='\40'; setcolor(c1); outtextxy(x,y,w);
- w=z; fillchar(w[2],length(z)-1,'\40'); setcolor(c2);
- outtextxy(x,y,w); outtextxy(x-1,y,w);
+void hilight(integer x, integer y, byte c1, byte c2, string z) {
+ string w;
+ ;
+ w = z;
+ w[1] = '\40';
+ setcolor(c1);
+ outtextxy(x, y, w);
+ w = z;
+ fillchar(w[2], length(z) - 1, '\40');
+ setcolor(c2);
+ outtextxy(x, y, w);
+ outtextxy(x - 1, y, w);
}
-void showpage(byte x)
-{;
- if (x==page_) return; /* twit */
- if (x==7) {; lmo=true; return; }
- setallpalette(dark); hidemousecursor; settextjustify(1,1);
- if (page_!=177)
- {;
- setfillstyle(1,1); bar(507,page_*25+2,607,page_*25+22);
- setfillstyle(1,9); bar(500,page_*25,600,page_*25+20);
-/* setcolor(11); outtextxy(550,page*25+10,topics[page]);*/
- hilight(550,page_*25+10,11,14,topics[page_]);
- }
- page_=x;
- setfillstyle(1,4); bar(507,page_*25+2,607,page_*25+22);
- setfillstyle(1,12); bar(500,page_*25,600,page_*25+20);
-/* setcolor(14); outtextxy(550,page*25+10,topics[page]); */
- hilight(550,page_*25+10,14,15,topics[page_]);
- setfillstyle(1,7); bar(0,27,470,189); settextjustify(0,2); setcolor(1);
- switch (page_) {
- case 1: {; /* Front page */
- setcolor(black);
- outtextxy( 10, 40,"Thorsoft of Letchworth presents");
- outtextxy(300, 80,vernum);
- outtextxy( 10, 90,string("(c) ")+copyright+", Mike, Mark and Thomas Thurman.");
- setcolor(red);
- outtextxy(100,129,"Finding your way around it...");
- setcolor(blue);
- outtextxy( 10,120,"You are now using the Help System.");
- outtextxy( 10,138,"Press the first letter of the topic that you want to");
- outtextxy( 10,147,"read (eg T for (T)oolbar), or click on its button (on");
- outtextxy( 10,156,"the right) using the mouse. Use \"Exit Help\" to quit.");
- outtextxy( 10,174,"(Fastest exit- just hit Esc!)");
- }
- break;
- case 2: {; /* Background */
- setcolor(red);
- outtextxy(300, 30,"Remember this chap?");
- setcolor(blue);
- outtextxy( 10, 55,"Back in good old A.D. 79, there lived a Roman");
- outtextxy( 10, 64,"whose name was Denarius Avaricius Sextus, known");
- outtextxy( 10, 73,"to his friends as Avvy. His wife was called Arkata,");
- outtextxy( 10, 82,"and he had a slave named Crapulus. His grandson");
- outtextxy( 10, 91,"joined the army, was posted to Gaul, and liked it");
- outtextxy( 10,100,"so much that he stayed there, telling everyone the");
- outtextxy( 10,109,"one about the centurion and the Turkish bath. His");
- outtextxy( 10,118,"thirty-sixth male-line descendant accidentally");
- outtextxy( 10,127,"poisoned an old enemy of William of Normandy, and");
- outtextxy( 10,136,"to his great surprise came so much into Bill's favour");
- outtextxy( 10,145,"that, after the Battle of Hastings a few years");
- outtextxy( 10,154,"later, he was made the lord of a small town in");
- outtextxy( 10,163,"Hertfordshire called Argent. It is his great-grandson");
- outtextxy( 10,172,"who stars in this game, back in good old A.D. 1189.");
- }
- break;
- case 3: {; /* ? */
- outtextxy( 15, 30,"The Toolbar is there so that (along with the menus)");
- outtextxy( 15, 39,"you can perform a lot of the functions contained in");
- outtextxy( 15, 48,"the game, using the mouse.");
- setcolor(red);
- outtextxy( 15, 66,"COMPASS:");
- setcolor(blue);
- outtextxy( 90, 66,"Used to point Avvy in the right direction.");
- setcolor(red);
- outtextxy( 15, 75,"THINKS:");
- setcolor(blue);
- outtextxy( 90, 75,"Shows the person/object you're thinking of.");
- setcolor(red);
- outtextxy( 15, 84,"SCORE:");
- setcolor(blue);
- outtextxy( 90, 84,"Shows how many points you've got.");
- setcolor(red);
- outtextxy( 15, 93,"SPEED:");
- setcolor(blue);
- outtextxy( 90, 93,"Adjusts the speed of the game.");
- setcolor(red);
- outtextxy( 15,102,"L.E.D.s:");
- setcolor(blue);
- outtextxy( 90,102,"Shows whether sound is on (toggle with <F2>),");
- outtextxy( 90,111,"the computer is ready, or there is an error.");
- setcolor(red);
- outtextxy( 15,120,"CLOCK:");
- setcolor(blue);
- outtextxy( 90,120,"Shows the time.");
- setcolor(red);
- outtextxy( 15,129,"'OK' box:");
- setcolor(blue);
- outtextxy( 90,129,"Works the same as pressing <ENTER>.");
- setcolor(0);
- outtextxy( 15,147,"N.B. The game action is suspended while you are");
- outtextxy( 15,156,"using the toolbar.");
- }
- break;
- case 4: {; /* menus */
- outtextxy( 15, 60,"To use the drop-down menus, either click on the bar");
- outtextxy( 15, 69,"at the top with the mouse, or press Alt and the first");
- outtextxy( 15, 78,string("letter of the menu's name (eg alt-A = (A)ction.) The ")+'\3');
- outtextxy( 15, 87,"menu is alt-H, for (H)eart.");
- outtextxy( 15,105,"When you have a menu, either click on the option you");
- outtextxy( 15,114,"want, or press its initial letter (eg O for \"OS Shell\").");
- outtextxy( 15,132,"To do something to, or with, an object or person, first");
- outtextxy( 15,141,"select them (or it) from the People or Things menu. Then");
- outtextxy( 15,150,"select whatever you wanted to do from the Use menu.");
- setcolor(red);
- outtextxy(15,177,"(OK, so it sounds complicated, but then it's intuitive!)");
- }
- break;
- case 5: {; /* Keyboard */
- outtextxy(15, 60,"The keyboard interface is even simpler than the mouse");
- outtextxy(15, 70,"interface! Just type what you want Avvy to do.");
- outtextxy(15, 80,"For example, to open a door, type in:");
- setcolor(red); outtextxy(100,95,"open door"); setcolor(blue);
- outtextxy(15,110,"And to look at Crapulus, type:");
- setcolor(red); outtextxy(100,125,"look at Crapulus");
- setcolor(blue); outtextxy(15,140,"(Don't forget to press Enter after each command!)");
- outtextxy(15,160,"This is a traditional command-line parser interface,");
- outtextxy(15,170,"similar to the one in \"Avaricius\", only more advanced.");
- }
- break;
- case 6: {; /* ? */
- outtextxy(15, 30,"This game is Shareware. Most programs are sold through");
- outtextxy(15, 40,"shops, and the authors prevent you from copying them.");
- outtextxy(15, 50,"Shareware is different. You may copy it and give it to");
- outtextxy(15, 60,"ANYBODY at all. You may post it on any BBS, give it to");
- outtextxy(15, 70,"friends, etc. If you like it, we ask you to pay us for");
- outtextxy(15, 80,"the software directly through the post. We're relying");
- outtextxy(15, 90,"on you to register!");
- outtextxy(99,177,"{ ETC }");
- }
- break;
- }
- setallpalette(dp); showmousecursor;
+void showpage(byte x) {
+ ;
+ if (x == page_) return; /* twit */
+ if (x == 7) {
+ ;
+ lmo = true;
+ return;
+ }
+ setallpalette(dark);
+ hidemousecursor;
+ settextjustify(1, 1);
+ if (page_ != 177) {
+ ;
+ setfillstyle(1, 1);
+ bar(507, page_ * 25 + 2, 607, page_ * 25 + 22);
+ setfillstyle(1, 9);
+ bar(500, page_ * 25, 600, page_ * 25 + 20);
+ /* setcolor(11); outtextxy(550,page*25+10,topics[page]);*/
+ hilight(550, page_ * 25 + 10, 11, 14, topics[page_]);
+ }
+ page_ = x;
+ setfillstyle(1, 4);
+ bar(507, page_ * 25 + 2, 607, page_ * 25 + 22);
+ setfillstyle(1, 12);
+ bar(500, page_ * 25, 600, page_ * 25 + 20);
+ /* setcolor(14); outtextxy(550,page*25+10,topics[page]); */
+ hilight(550, page_ * 25 + 10, 14, 15, topics[page_]);
+ setfillstyle(1, 7);
+ bar(0, 27, 470, 189);
+ settextjustify(0, 2);
+ setcolor(1);
+ switch (page_) {
+ case 1: {
+ ; /* Front page */
+ setcolor(black);
+ outtextxy(10, 40, "Thorsoft of Letchworth presents");
+ outtextxy(300, 80, vernum);
+ outtextxy(10, 90, string("(c) ") + copyright + ", Mike, Mark and Thomas Thurman.");
+ setcolor(red);
+ outtextxy(100, 129, "Finding your way around it...");
+ setcolor(blue);
+ outtextxy(10, 120, "You are now using the Help System.");
+ outtextxy(10, 138, "Press the first letter of the topic that you want to");
+ outtextxy(10, 147, "read (eg T for (T)oolbar), or click on its button (on");
+ outtextxy(10, 156, "the right) using the mouse. Use \"Exit Help\" to quit.");
+ outtextxy(10, 174, "(Fastest exit- just hit Esc!)");
+ }
+ break;
+ case 2: {
+ ; /* Background */
+ setcolor(red);
+ outtextxy(300, 30, "Remember this chap?");
+ setcolor(blue);
+ outtextxy(10, 55, "Back in good old A.D. 79, there lived a Roman");
+ outtextxy(10, 64, "whose name was Denarius Avaricius Sextus, known");
+ outtextxy(10, 73, "to his friends as Avvy. His wife was called Arkata,");
+ outtextxy(10, 82, "and he had a slave named Crapulus. His grandson");
+ outtextxy(10, 91, "joined the army, was posted to Gaul, and liked it");
+ outtextxy(10, 100, "so much that he stayed there, telling everyone the");
+ outtextxy(10, 109, "one about the centurion and the Turkish bath. His");
+ outtextxy(10, 118, "thirty-sixth male-line descendant accidentally");
+ outtextxy(10, 127, "poisoned an old enemy of William of Normandy, and");
+ outtextxy(10, 136, "to his great surprise came so much into Bill's favour");
+ outtextxy(10, 145, "that, after the Battle of Hastings a few years");
+ outtextxy(10, 154, "later, he was made the lord of a small town in");
+ outtextxy(10, 163, "Hertfordshire called Argent. It is his great-grandson");
+ outtextxy(10, 172, "who stars in this game, back in good old A.D. 1189.");
+ }
+ break;
+ case 3: {
+ ; /* ? */
+ outtextxy(15, 30, "The Toolbar is there so that (along with the menus)");
+ outtextxy(15, 39, "you can perform a lot of the functions contained in");
+ outtextxy(15, 48, "the game, using the mouse.");
+ setcolor(red);
+ outtextxy(15, 66, "COMPASS:");
+ setcolor(blue);
+ outtextxy(90, 66, "Used to point Avvy in the right direction.");
+ setcolor(red);
+ outtextxy(15, 75, "THINKS:");
+ setcolor(blue);
+ outtextxy(90, 75, "Shows the person/object you're thinking of.");
+ setcolor(red);
+ outtextxy(15, 84, "SCORE:");
+ setcolor(blue);
+ outtextxy(90, 84, "Shows how many points you've got.");
+ setcolor(red);
+ outtextxy(15, 93, "SPEED:");
+ setcolor(blue);
+ outtextxy(90, 93, "Adjusts the speed of the game.");
+ setcolor(red);
+ outtextxy(15, 102, "L.E.D.s:");
+ setcolor(blue);
+ outtextxy(90, 102, "Shows whether sound is on (toggle with <F2>),");
+ outtextxy(90, 111, "the computer is ready, or there is an error.");
+ setcolor(red);
+ outtextxy(15, 120, "CLOCK:");
+ setcolor(blue);
+ outtextxy(90, 120, "Shows the time.");
+ setcolor(red);
+ outtextxy(15, 129, "'OK' box:");
+ setcolor(blue);
+ outtextxy(90, 129, "Works the same as pressing <ENTER>.");
+ setcolor(0);
+ outtextxy(15, 147, "N.B. The game action is suspended while you are");
+ outtextxy(15, 156, "using the toolbar.");
+ }
+ break;
+ case 4: {
+ ; /* menus */
+ outtextxy(15, 60, "To use the drop-down menus, either click on the bar");
+ outtextxy(15, 69, "at the top with the mouse, or press Alt and the first");
+ outtextxy(15, 78, string("letter of the menu's name (eg alt-A = (A)ction.) The ") + '\3');
+ outtextxy(15, 87, "menu is alt-H, for (H)eart.");
+ outtextxy(15, 105, "When you have a menu, either click on the option you");
+ outtextxy(15, 114, "want, or press its initial letter (eg O for \"OS Shell\").");
+ outtextxy(15, 132, "To do something to, or with, an object or person, first");
+ outtextxy(15, 141, "select them (or it) from the People or Things menu. Then");
+ outtextxy(15, 150, "select whatever you wanted to do from the Use menu.");
+ setcolor(red);
+ outtextxy(15, 177, "(OK, so it sounds complicated, but then it's intuitive!)");
+ }
+ break;
+ case 5: {
+ ; /* Keyboard */
+ outtextxy(15, 60, "The keyboard interface is even simpler than the mouse");
+ outtextxy(15, 70, "interface! Just type what you want Avvy to do.");
+ outtextxy(15, 80, "For example, to open a door, type in:");
+ setcolor(red);
+ outtextxy(100, 95, "open door");
+ setcolor(blue);
+ outtextxy(15, 110, "And to look at Crapulus, type:");
+ setcolor(red);
+ outtextxy(100, 125, "look at Crapulus");
+ setcolor(blue);
+ outtextxy(15, 140, "(Don't forget to press Enter after each command!)");
+ outtextxy(15, 160, "This is a traditional command-line parser interface,");
+ outtextxy(15, 170, "similar to the one in \"Avaricius\", only more advanced.");
+ }
+ break;
+ case 6: {
+ ; /* ? */
+ outtextxy(15, 30, "This game is Shareware. Most programs are sold through");
+ outtextxy(15, 40, "shops, and the authors prevent you from copying them.");
+ outtextxy(15, 50, "Shareware is different. You may copy it and give it to");
+ outtextxy(15, 60, "ANYBODY at all. You may post it on any BBS, give it to");
+ outtextxy(15, 70, "friends, etc. If you like it, we ask you to pay us for");
+ outtextxy(15, 80, "the software directly through the post. We're relying");
+ outtextxy(15, 90, "on you to register!");
+ outtextxy(99, 177, "{ ETC }");
+ }
+ break;
+ }
+ setallpalette(dp);
+ showmousecursor;
}
-void helpsetup()
-{
- integer gd,gm;
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); settextstyle(1,0,0); setcolor(11);
- getpalette(dp); dark.size=dp.size; fillchar(dark.colors,dark.size,'\0');
- setallpalette(dark); setusercharsize(3,1,8,10);
- for( gm=1; gm <= 3; gm ++) outtextxy(gm,0,"Avalot- HELP!");
- resetmouse; setgraphicscursor(questionmark); showmousecursor;
- settextstyle(0,0,1); settextjustify(1,1);
- for( gd=2; gd <= 7; gd ++)
- {;
- setfillstyle(1,1); bar(507,gd*25+2,607,gd*25+22);
- setfillstyle(1,9); bar(500,gd*25,600,gd*25+20);
-/* setcolor(11); outtextxy(550,gd*25+10,topics[gd]); */
- hilight(550,gd*25+10,11,14,topics[gd]);
- }
- showmousecursor;
- page_=177; showpage(1); lmo=false; setfillstyle(1,7);
- for( gd=1; gd <= 3; gd ++)
- {;
- bar( 10-gd*3,200-gd*3,490-gd*6,200-gd*3);
- bar(490-gd*6, 37-gd*3,491-gd*6,200-gd*3);
- }
+void helpsetup() {
+ integer gd, gm;
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ settextstyle(1, 0, 0);
+ setcolor(11);
+ getpalette(dp);
+ dark.size = dp.size;
+ fillchar(dark.colors, dark.size, '\0');
+ setallpalette(dark);
+ setusercharsize(3, 1, 8, 10);
+ for (gm = 1; gm <= 3; gm ++) outtextxy(gm, 0, "Avalot- HELP!");
+ resetmouse;
+ setgraphicscursor(questionmark);
+ showmousecursor;
+ settextstyle(0, 0, 1);
+ settextjustify(1, 1);
+ for (gd = 2; gd <= 7; gd ++) {
+ ;
+ setfillstyle(1, 1);
+ bar(507, gd * 25 + 2, 607, gd * 25 + 22);
+ setfillstyle(1, 9);
+ bar(500, gd * 25, 600, gd * 25 + 20);
+ /* setcolor(11); outtextxy(550,gd*25+10,topics[gd]); */
+ hilight(550, gd * 25 + 10, 11, 14, topics[gd]);
+ }
+ showmousecursor;
+ page_ = 177;
+ showpage(1);
+ lmo = false;
+ setfillstyle(1, 7);
+ for (gd = 1; gd <= 3; gd ++) {
+ ;
+ bar(10 - gd * 3, 200 - gd * 3, 490 - gd * 6, 200 - gd * 3);
+ bar(490 - gd * 6, 37 - gd * 3, 491 - gd * 6, 200 - gd * 3);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- helpsetup();
- do {
- do { getbuttonstatus; } while (!((mkey==left) || keypressed()));
- if (keypressed())
- {; /* keyboard choice */
- r=upcase(readkey());
- if (pos(r,keys)>0) showpage(pos(r,keys)); else
- if (r=='\0')
- switch (readkey()) { /* grab extd keystroke */
- case 'H': if (page_>1) showpage(page_-1); break;
- case 'P': if (page_<6) showpage(page_+1); break;
- case 'G':case 'I': showpage(1); break;
- case 'O':case 'Q': showpage(6); break;
- } else
- if (set::of('\33','Q','X','E','H', eos).has(r)) lmo=true; /* quit */
- }
- else
- {; /* mouse choice */
- if ((mousex>400) && (mousey>25))
- {;
- showpage(mousey / 25);
- }
- }
- } while (!lmo);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ helpsetup();
+ do {
+ do {
+ getbuttonstatus;
+ } while (!((mkey == left) || keypressed()));
+ if (keypressed()) {
+ ; /* keyboard choice */
+ r = upcase(readkey());
+ if (pos(r, keys) > 0) showpage(pos(r, keys));
+ else if (r == '\0')
+ switch (readkey()) { /* grab extd keystroke */
+ case 'H':
+ if (page_ > 1) showpage(page_ - 1);
+ break;
+ case 'P':
+ if (page_ < 6) showpage(page_ + 1);
+ break;
+ case 'G':
+ case 'I':
+ showpage(1);
+ break;
+ case 'O':
+ case 'Q':
+ showpage(6);
+ break;
+ }
+ else if (set::of('\33', 'Q', 'X', 'E', 'H', eos).has(r)) lmo = true; /* quit */
+ } else {
+ ; /* mouse choice */
+ if ((mousex > 400) && (mousey > 25)) {
+ ;
+ showpage(mousey / 25);
+ }
+ }
+ } while (!lmo);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/help2.cpp b/engines/avalanche/help2.cpp
index 1fc41b6e48..1ef6443fc7 100644
--- a/engines/avalanche/help2.cpp
+++ b/engines/avalanche/help2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,243 +30,286 @@
namespace Avalanche {
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
struct hypertype {
- char trigger;
- byte line;
- byte start,finish;
- word ref;
+ char trigger;
+ byte line;
+ byte start, finish;
+ word ref;
};
-integer gd,gm;
-array<1,2,fonttype> font;
-matrix<0,7,1,80,byte> current;
-array<1,250,varying_string<79> > data;
-integer fv,position,size;
+integer gd, gm;
+array<1, 2, fonttype> font;
+matrix<0, 7, 1, 80, byte> current;
+array<1, 250, varying_string<79> > data;
+integer fv, position, size;
varying_string<79> title;
-array<1,20,hypertype> link;
+array<1, 20, hypertype> link;
byte numlinks;
char r;
-array<0,9,byte> reverse;
-array<0,9,byte> revpos;
+array<0, 9, byte> reverse;
+array<0, 9, byte> revpos;
-void loadfont()
-{
- file<fonttype> fontfile;
-;
- assign(fontfile,"c:\\thomas\\ttsmall.fnt"); reset(fontfile);
- fontfile >> font[1]; close(fontfile);
-/* assign(fontfile,'c:\avalot\avalot.fnt'); reset(fontfile);
- read(fontfile,font[2]); close(fontfile);*/
- /* NB: We'll put BOTH of these fonts one after the other, in the same
- file, in the final compilation. */
+void loadfont() {
+ file<fonttype> fontfile;
+ ;
+ assign(fontfile, "c:\\thomas\\ttsmall.fnt");
+ reset(fontfile);
+ fontfile >> font[1];
+ close(fontfile);
+ /* assign(fontfile,'c:\avalot\avalot.fnt'); reset(fontfile);
+ read(fontfile,font[2]); close(fontfile);*/
+ /* NB: We'll put BOTH of these fonts one after the other, in the same
+ file, in the final compilation. */
}
-void scribe(byte which,byte what);
+void scribe(byte which, byte what);
-static void underline(byte& x) {; x=x | 177; }
+static void underline(byte &x) {
+ ;
+ x = x | 177;
+}
-void scribe(byte which,byte what)
-{
- byte fv,ff; string x;
-;
- x=data[what];
- fillchar(current,sizeof(current),'\0');
- for( ff=1; ff <= length(x); ff ++)
- for( fv=0; fv <= 7; fv ++)
- {;
- current[fv][ff]=font[which][x[ff]][fv];
- }
+void scribe(byte which, byte what) {
+ byte fv, ff;
+ string x;
+ ;
+ x = data[what];
+ fillchar(current, sizeof(current), '\0');
+ for (ff = 1; ff <= length(x); ff ++)
+ for (fv = 0; fv <= 7; fv ++) {
+ ;
+ current[fv][ff] = font[which][x[ff]][fv];
+ }
- for( fv=1; fv <= numlinks; fv ++)
- { hypertype& with = link[fv];
- if (with.line==what)
- for( ff=with.start; ff <= with.finish; ff ++)
- underline(current[7][ff]);}
+ for (fv = 1; fv <= numlinks; fv ++) {
+ hypertype &with = link[fv];
+ if (with.line == what)
+ for (ff = with.start; ff <= with.finish; ff ++)
+ underline(current[7][ff]);
+ }
}
-void display(word y)
-{;
- for( fv=0; fv <= 7; fv ++)
- move(current[fv],mem[0xa000*(y+fv)*80],79);
+void display(word y) {
+ ;
+ for (fv = 0; fv <= 7; fv ++)
+ move(current[fv], mem[0xa000 * (y + fv) * 80], 79);
}
-void update_link(char which, byte whence,byte whither)
-{
- byte fv;
-;
- for( fv=1; fv <= numlinks; fv ++)
- { hypertype& with = link[fv];
- if (with.trigger==which)
- {;
- with.line=size;
- with.start=whence;
- with.finish=whither;
- }}
+void update_link(char which, byte whence, byte whither) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= numlinks; fv ++) {
+ hypertype &with = link[fv];
+ if (with.trigger == which) {
+ ;
+ with.line = size;
+ with.start = whence;
+ with.finish = whither;
+ }
+ }
}
-void getlinks(string& x)
-{
- byte p,q;
-;
- do {
- p=pos("[",x);
- if (p==0) return; /* lousy, huh? */
- q=pos("]",x);
- update_link(x[p+1],p,q-3);
- Delete(x,q,1); Delete(x,p,2);
- } while (!false);
+void getlinks(string &x) {
+ byte p, q;
+ ;
+ do {
+ p = pos("[", x);
+ if (p == 0) return; /* lousy, huh? */
+ q = pos("]", x);
+ update_link(x[p + 1], p, q - 3);
+ Delete(x, q, 1);
+ Delete(x, p, 2);
+ } while (!false);
}
-void loaddata(byte which)
-{
- text t;
- string x;
- integer e;
-;
- revpos[9]=position;
- fillchar(data,sizeof(data),'\0');
- move(reverse[1],reverse[0],9);
- move(revpos[1],revpos[0],9);
- reverse[9]=which; revpos[9]=1;
+void loaddata(byte which) {
+ text t;
+ string x;
+ integer e;
+ ;
+ revpos[9] = position;
+ fillchar(data, sizeof(data), '\0');
+ move(reverse[1], reverse[0], 9);
+ move(revpos[1], revpos[0], 9);
+ reverse[9] = which;
+ revpos[9] = 1;
- str(which,x);
- assign(t,string('h')+x+".raw");
- reset(t);
- t >> title >> NL;
- size=0; numlinks=0;
- while (! eof(t))
- {;
- t >> x >> NL;
- if (x[1]==':')
- {;
- numlinks += 1;
- {
- hypertype& with = link[numlinks];
- ;
- with.trigger=x[2];
- Delete(x,1,3);
- Delete(x,pos(" ",x),255);
- val(x,with.ref,e);
- }
- } else {;
- size += 1;
- getlinks(x);
- data[size]=x;
- }
- }
- position=1; size -= 15;
- close(t);
+ str(which, x);
+ assign(t, string('h') + x + ".raw");
+ reset(t);
+ t >> title >> NL;
+ size = 0;
+ numlinks = 0;
+ while (! eof(t)) {
+ ;
+ t >> x >> NL;
+ if (x[1] == ':') {
+ ;
+ numlinks += 1;
+ {
+ hypertype &with = link[numlinks];
+ ;
+ with.trigger = x[2];
+ Delete(x, 1, 3);
+ Delete(x, pos(" ", x), 255);
+ val(x, with.ref, e);
+ }
+ } else {
+ ;
+ size += 1;
+ getlinks(x);
+ data[size] = x;
+ }
+ }
+ position = 1;
+ size -= 15;
+ close(t);
}
-void screen()
-{;
- setbkcolor(1);
- setfillstyle(1,1); bar(0,0,640,38);
- setfillstyle(1,14); bar(0,39,640,39);
+void screen() {
+ ;
+ setbkcolor(1);
+ setfillstyle(1, 1);
+ bar(0, 0, 640, 38);
+ setfillstyle(1, 14);
+ bar(0, 39, 640, 39);
}
-void showscreen()
-{
- byte fv;
-;
- if (position<1) position=1;
- for( fv=0; fv <= 15; fv ++)
- {;
- scribe(1,fv+position);
- display(41+fv*10);
- }
+void showscreen() {
+ byte fv;
+ ;
+ if (position < 1) position = 1;
+ for (fv = 0; fv <= 15; fv ++) {
+ ;
+ scribe(1, fv + position);
+ display(41 + fv * 10);
+ }
}
-void up()
-{
- byte fv;
-;
- position -= 1;
- scribe(1,position);
- for( fv=0; fv <= 9; fv ++)
- {;
- move(mem[0xa000*3200],mem[0xa000*3280],12720);
- if (set::of(0,9, eos).has(fv)) fillchar(mem[0xa000*3200],79,'\0'); else
- move(current[8-fv],mem[0xa000*3200],80);
- }
+void up() {
+ byte fv;
+ ;
+ position -= 1;
+ scribe(1, position);
+ for (fv = 0; fv <= 9; fv ++) {
+ ;
+ move(mem[0xa000 * 3200], mem[0xa000 * 3280], 12720);
+ if (set::of(0, 9, eos).has(fv)) fillchar(mem[0xa000 * 3200], 79, '\0');
+ else
+ move(current[8 - fv], mem[0xa000 * 3200], 80);
+ }
}
-void down()
-{
- byte fv;
-;
- position += 1;
- scribe(1,position+15);
- for( fv=0; fv <= 9; fv ++)
- {;
- move(mem[0xa000*3280],mem[0xa000*3200],12720);
- if (set::of(0,9, eos).has(fv)) fillchar(mem[0xa000*15920],79,'\0'); else
- move(current[fv-1],mem[0xa000*15920],80);
- }
+void down() {
+ byte fv;
+ ;
+ position += 1;
+ scribe(1, position + 15);
+ for (fv = 0; fv <= 9; fv ++) {
+ ;
+ move(mem[0xa000 * 3280], mem[0xa000 * 3200], 12720);
+ if (set::of(0, 9, eos).has(fv)) fillchar(mem[0xa000 * 15920], 79, '\0');
+ else
+ move(current[fv - 1], mem[0xa000 * 15920], 80);
+ }
}
-void newpage(char c)
-{
- byte fv;
-;
- for( fv=1; fv <= numlinks; fv ++)
- { hypertype& with = link[fv];
- if (with.trigger==c)
- {;
- loaddata(with.ref);
- showscreen();
- }}
+void newpage(char c) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= numlinks; fv ++) {
+ hypertype &with = link[fv];
+ if (with.trigger == c) {
+ ;
+ loaddata(with.ref);
+ showscreen();
+ }
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- loadfont();
- screen();
- loaddata(0);
- showscreen();
- fillchar(reverse,sizeof(reverse),'\0');
- fillchar(revpos,sizeof(revpos),'\1');
- do {
- r=upcase(readkey());
- switch (r) {
- case '\0': switch (readkey()) {
- case 'H': if (position>1) up(); break;
- case 'P': if (position<size) down(); break;
- case 'I': {; position -= 16; showscreen(); } break;
- case 'Q': {; position += 16; showscreen(); } break;
- case 'G': {; position=1; showscreen(); } break;
- case 'O': {; position=size; showscreen(); } break;
- }
- break;
- case 'B': {; /* go Back */
- gd=reverse[8];
- gm=revpos[8];
- move(reverse[0],reverse[2],8);
- move(revpos[0],revpos[2],8);
- loaddata(gd); position=gm;
- showscreen();
- }
- break;
- case 'C': {; /* Contents */
- loaddata(0);
- showscreen();
- }
- break;
- case 'H': {;
- loaddata(7); /* help on help */
- showscreen();
- }
- break;
- case '\33': exit(0); break;
- default: newpage(r);
- }
- } while (!false);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ loadfont();
+ screen();
+ loaddata(0);
+ showscreen();
+ fillchar(reverse, sizeof(reverse), '\0');
+ fillchar(revpos, sizeof(revpos), '\1');
+ do {
+ r = upcase(readkey());
+ switch (r) {
+ case '\0':
+ switch (readkey()) {
+ case 'H':
+ if (position > 1) up();
+ break;
+ case 'P':
+ if (position < size) down();
+ break;
+ case 'I': {
+ ;
+ position -= 16;
+ showscreen();
+ }
+ break;
+ case 'Q': {
+ ;
+ position += 16;
+ showscreen();
+ }
+ break;
+ case 'G': {
+ ;
+ position = 1;
+ showscreen();
+ }
+ break;
+ case 'O': {
+ ;
+ position = size;
+ showscreen();
+ }
+ break;
+ }
+ break;
+ case 'B': {
+ ; /* go Back */
+ gd = reverse[8];
+ gm = revpos[8];
+ move(reverse[0], reverse[2], 8);
+ move(revpos[0], revpos[2], 8);
+ loaddata(gd);
+ position = gm;
+ showscreen();
+ }
+ break;
+ case 'C': {
+ ; /* Contents */
+ loaddata(0);
+ showscreen();
+ }
+ break;
+ case 'H': {
+ ;
+ loaddata(7); /* help on help */
+ showscreen();
+ }
+ break;
+ case '\33':
+ exit(0);
+ break;
+ default:
+ newpage(r);
+ }
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/helpbak.cpp b/engines/avalanche/helpbak.cpp
index b5513f3be6..3e60289a33 100644
--- a/engines/avalanche/helpbak.cpp
+++ b/engines/avalanche/helpbak.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -44,145 +44,176 @@
namespace Avalanche {
struct buttontype {
- char trigger;
- byte whither;
+ char trigger;
+ byte whither;
};
const integer buttonsize = 930;
-const integer toolbar = 0; const integer nim = 1; const integer kbd = 2; const integer credits = 3; const integer joystick = 4; const integer troubleshooting = 5; const integer story = 6;
-const integer mainscreen = 7; const integer registering = 8; const integer sound = 9; const integer mouse = 10; const integer filer = 11; const integer back2game = 12;
-const integer helponhelp = 13; const integer pgdn = 14; const integer pgup = 15;
-
-array<1,10,buttontype> buttons;
-
-void plot_button(integer y, byte which)
-{
- untyped_file f;
- pointer p;
-
- getmem(p,buttonsize);
- assign(f,"buttons.avd");
- reset(f,1);
- seek(f,which*buttonsize);
- blockread(f,p,buttonsize);
- putimage(470,y,p,0);
- close(f);
- freemem(p,buttonsize);
+const integer toolbar = 0;
+const integer nim = 1;
+const integer kbd = 2;
+const integer credits = 3;
+const integer joystick = 4;
+const integer troubleshooting = 5;
+const integer story = 6;
+const integer mainscreen = 7;
+const integer registering = 8;
+const integer sound = 9;
+const integer mouse = 10;
+const integer filer = 11;
+const integer back2game = 12;
+const integer helponhelp = 13;
+const integer pgdn = 14;
+const integer pgup = 15;
+
+array<1, 10, buttontype> buttons;
+
+void plot_button(integer y, byte which) {
+ untyped_file f;
+ pointer p;
+
+ getmem(p, buttonsize);
+ assign(f, "buttons.avd");
+ reset(f, 1);
+ seek(f, which * buttonsize);
+ blockread(f, p, buttonsize);
+ putimage(470, y, p, 0);
+ close(f);
+ freemem(p, buttonsize);
}
void getme(byte which);
-static void chalk(byte y, string z)
-{
- outtextxy(16,41+y*10,z);
+static void chalk(byte y, string z) {
+ outtextxy(16, 41 + y * 10, z);
}
-void getme(byte which) /* Help icons are 80x20 */
-{
- string x;
- text t;
- byte y,fv;
-
-
- str(which,x);
- assign(t,string('h')+x+".raw");
- y=0;
- reset(t);
-
- t >> x >> NL;
- setfillstyle(1,1); bar(0,0,640,200);
- setfillstyle(1,15); bar(8,40,450,200);
- settextjustify(1,1); setcolor(14);
- outtextxy(320,15,x);
- settextjustify(0,2);
- setcolor(3); settextstyle(0,0,2);
- outtextxy(550,0,"help!");
- /***/ setcolor(0); settextstyle(0,0,1);
-
- do {
- t >> x >> NL;
- if (x=='!') flush(); /* End of the help text is signalled with a !. */
- chalk(y,x);
- y += 1;
- } while (!false);
-
- /* We are now at the end of the text. Next we must read the icons. */
-
- y=0; settextjustify(1,1); setcolor(3);
- while (! eof(t))
- {
- y += 1;
- t >> x >> NL; /* Get the name of this button, and... */
- if (x!='-') /* (hyphen signals an empty button.) */
- {
- t >> buttons[y].trigger >> NL;
- t >> fv >> NL; plot_button(13+y*27,fv);
- t >> buttons[y].whither >> NL; /* this is the position to jump to */
-
- switch (buttons[y].trigger) {
- case 'þ' : outtextxy(580,25+y*27,"Esc"); break;
- case 'Ö' : outtextxy(580,25+y*27,"\30"); break;
- case 'Ø' : outtextxy(580,25+y*27,"\31"); break;
- default:
- outtextxy(580,25+y*27,buttons[y].trigger);
- }
-
- } else buttons[y].trigger='\0';
- }
-
- settextjustify(0,2);
- close(t);
+void getme(byte which) { /* Help icons are 80x20 */
+ string x;
+ text t;
+ byte y, fv;
+
+
+ str(which, x);
+ assign(t, string('h') + x + ".raw");
+ y = 0;
+ reset(t);
+
+ t >> x >> NL;
+ setfillstyle(1, 1);
+ bar(0, 0, 640, 200);
+ setfillstyle(1, 15);
+ bar(8, 40, 450, 200);
+ settextjustify(1, 1);
+ setcolor(14);
+ outtextxy(320, 15, x);
+ settextjustify(0, 2);
+ setcolor(3);
+ settextstyle(0, 0, 2);
+ outtextxy(550, 0, "help!");
+ /***/ setcolor(0);
+ settextstyle(0, 0, 1);
+
+ do {
+ t >> x >> NL;
+ if (x == '!') flush(); /* End of the help text is signalled with a !. */
+ chalk(y, x);
+ y += 1;
+ } while (!false);
+
+ /* We are now at the end of the text. Next we must read the icons. */
+
+ y = 0;
+ settextjustify(1, 1);
+ setcolor(3);
+ while (! eof(t)) {
+ y += 1;
+ t >> x >> NL; /* Get the name of this button, and... */
+ if (x != '-') { /* (hyphen signals an empty button.) */
+ t >> buttons[y].trigger >> NL;
+ t >> fv >> NL;
+ plot_button(13 + y * 27, fv);
+ t >> buttons[y].whither >> NL; /* this is the position to jump to */
+
+ switch (buttons[y].trigger) {
+ case 'þ' :
+ outtextxy(580, 25 + y * 27, "Esc");
+ break;
+ case 'Ö' :
+ outtextxy(580, 25 + y * 27, "\30");
+ break;
+ case 'Ø' :
+ outtextxy(580, 25 + y * 27, "\31");
+ break;
+ default:
+ outtextxy(580, 25 + y * 27, buttons[y].trigger);
+ }
+
+ } else buttons[y].trigger = '\0';
+ }
+
+ settextjustify(0, 2);
+ close(t);
}
-void continue_help()
-{
- char r;
- byte fv;
-
- do {
- r=upcase(readkey());
- switch (r) {
- case '\33' : return; break;
- case '\0' : switch (readkey()) {
- case '\110':case '\111': r='Ö'; break;
- case '\120':case '\121': r='Ø'; break;
- case '\73': r='H'; break; /* Help on help */
- }
- break;
- }
-
- for( fv=1; fv <= 10; fv ++)
- { buttontype& with = buttons[fv];
- if (with.trigger==r)
- {
- dusk;
- getme(with.whither);
- dawn;
- flush();
- }}
-
- } while (!false);
+void continue_help() {
+ char r;
+ byte fv;
+
+ do {
+ r = upcase(readkey());
+ switch (r) {
+ case '\33' :
+ return;
+ break;
+ case '\0' :
+ switch (readkey()) {
+ case '\110':
+ case '\111':
+ r = 'Ö';
+ break;
+ case '\120':
+ case '\121':
+ r = 'Ø';
+ break;
+ case '\73':
+ r = 'H';
+ break; /* Help on help */
+ }
+ break;
+ }
+
+ for (fv = 1; fv <= 10; fv ++) {
+ buttontype &with = buttons[fv];
+ if (with.trigger == r) {
+ dusk;
+ getme(with.whither);
+ dawn;
+ flush();
+ }
+ }
+
+ } while (!false);
}
-void boot_help()
-{
- setactivepage(2);
+void boot_help() {
+ setactivepage(2);
- getme(0);
+ getme(0);
- dusk;
- setvisualpage(2);
- dawn;
+ dusk;
+ setvisualpage(2);
+ dawn;
- continue_help();
+ continue_help();
- dusk;
- setvisualpage(cp);
- draw_also_lines;
- setactivepage(1-cp);
- dawn;
+ dusk;
+ setvisualpage(cp);
+ draw_also_lines;
+ setactivepage(1 - cp);
+ dawn;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/helpbak.h b/engines/avalanche/helpbak.h
index 4025aa882d..e2efd967e1 100644
--- a/engines/avalanche/helpbak.h
+++ b/engines/avalanche/helpbak.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/helper.cpp b/engines/avalanche/helper.cpp
index 397c63fd7f..76948b85da 100644
--- a/engines/avalanche/helper.cpp
+++ b/engines/avalanche/helper.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -45,38 +45,54 @@
namespace Avalanche {
struct buttontype {
- char trigger;
- byte whither;
+ char trigger;
+ byte whither;
};
const integer buttonsize = 930;
-const integer toolbar = 0; const integer nim = 1; const integer kbd = 2; const integer credits = 3; const integer joystick = 4; const integer troubleshooting = 5; const integer story = 6;
-const integer mainscreen = 7; const integer registering = 8; const integer sound = 9; const integer mouse = 10; const integer filer = 11; const integer back2game = 12;
-const integer helponhelp = 13; const integer pgdn = 14; const integer pgup = 15;
-
-array<1,10,buttontype> buttons;
+const integer toolbar = 0;
+const integer nim = 1;
+const integer kbd = 2;
+const integer credits = 3;
+const integer joystick = 4;
+const integer troubleshooting = 5;
+const integer story = 6;
+const integer mainscreen = 7;
+const integer registering = 8;
+const integer sound = 9;
+const integer mouse = 10;
+const integer filer = 11;
+const integer back2game = 12;
+const integer helponhelp = 13;
+const integer pgdn = 14;
+const integer pgup = 15;
+
+array<1, 10, buttontype> buttons;
byte highlight_was;
-void plot_button(integer y, byte which)
-{
- untyped_file f;
- pointer p;
-
- if (y>200)
- { background(2); delay(10); background(0); return; } /* Silly buttons. */
- getmem(p,buttonsize);
- assign(f,"buttons.avd");
- reset(f,1);
- seek(f,which*buttonsize);
- blockread(f,p,buttonsize);
-
- if (y==-177)
- putimage(229,5,p,0);
- else
- putimage(470,y,p,0);
- close(f);
- freemem(p,buttonsize);
+void plot_button(integer y, byte which) {
+ untyped_file f;
+ pointer p;
+
+ if (y > 200) {
+ background(2); /* Silly buttons. */
+ delay(10);
+ background(0);
+ return;
+ }
+ getmem(p, buttonsize);
+ assign(f, "buttons.avd");
+ reset(f, 1);
+ seek(f, which * buttonsize);
+ blockread(f, p, buttonsize);
+
+ if (y == -177)
+ putimage(229, 5, p, 0);
+ else
+ putimage(470, y, p, 0);
+ close(f);
+ freemem(p, buttonsize);
}
void getme(byte which);
@@ -84,226 +100,256 @@ void getme(byte which);
static untyped_file f;
-static void chalk(byte y, string z)
-{
- outtextxy(16,41+y*10,z);
+static void chalk(byte y, string z) {
+ outtextxy(16, 41 + y * 10, z);
}
-static void getline(string& x)
-{
- byte fz;
+static void getline(string &x) {
+ byte fz;
- blockread(f,x[0],1);
- blockread(f,x[1],(byte)(x[0]));
- for( fz=1; fz <= length(x); fz ++)
- x[fz]=chr(ord(x[fz]) ^ 177);
+ blockread(f, x[0], 1);
+ blockread(f, x[1], (byte)(x[0]));
+ for (fz = 1; fz <= length(x); fz ++)
+ x[fz] = chr(ord(x[fz]) ^ 177);
}
-void getme(byte which) /* Help icons are 80x20 */
-{
- string x;
- byte y,fv;
- word offset;
-
-
- off;
- assign(f,"help.avd");
- y=0;
- highlight_was=177; /* Forget where the highlight was. */
- reset(f,1);
- seek(f,which*2);
- blockread(f,offset,2);
- seek(f,offset);
-
- getline(x);
- setfillstyle(1,1); bar(0,0,640,200);
- setfillstyle(1,15); bar(8,40,450,200);
- settextjustify(2,2);
- blockread(f,fv,1);
- plot_button(-177,fv);
-
- setcolor(0); outtextxy(629,26,x); /* Plot the title. */
- setcolor(3); outtextxy(630,25,x);
-
- settextjustify(0,2); settextstyle(0,0,2);
- setcolor(0); outtextxy(549,1,"help!");
- setcolor(3); outtextxy(550,0,"help!");
- /***/ settextstyle(0,0,1);
-
- do {
- getline(x);
- if (x=='!') flush(); /* End of the help text is signalled with a !. */
- if (x[1]=='\\')
- {
- setcolor(4);
- chalk(y,copy(x,2,255));
- } else
- {
- setcolor(0);
- chalk(y,x);
- }
- y += 1;
- } while (!false);
-
- /* We are now at the end of the text. Next we must read the icons. */
-
- y=0; settextjustify(1,1); settextstyle(0,0,2);
- while (! eof(f))
- {
- y += 1;
- blockread(f,buttons[y].trigger,1);
- if (buttons[y].trigger=='\261') flush();
- blockread(f,fv,1);
- if (buttons[y].trigger!='\0') plot_button(13+y*27,fv);
- blockread(f,buttons[y].whither,1); /* this is the position to jump to */
-
-
- switch (buttons[y].trigger) {
- case 'þ' : x="Esc"; break;
- case 'Ö' : x='\30'; break;
- case 'Ø' : x='\31'; break;
- default:
- x=buttons[y].trigger;
- }
- setcolor(0); outtextxy(589,26+y*27,x);
- setcolor(3); outtextxy(590,25+y*27,x);
-
- }
-
- settextjustify(0,2); settextstyle(0,0,1);
- close(f); on;
+void getme(byte which) { /* Help icons are 80x20 */
+ string x;
+ byte y, fv;
+ word offset;
+
+
+ off;
+ assign(f, "help.avd");
+ y = 0;
+ highlight_was = 177; /* Forget where the highlight was. */
+ reset(f, 1);
+ seek(f, which * 2);
+ blockread(f, offset, 2);
+ seek(f, offset);
+
+ getline(x);
+ setfillstyle(1, 1);
+ bar(0, 0, 640, 200);
+ setfillstyle(1, 15);
+ bar(8, 40, 450, 200);
+ settextjustify(2, 2);
+ blockread(f, fv, 1);
+ plot_button(-177, fv);
+
+ setcolor(0);
+ outtextxy(629, 26, x); /* Plot the title. */
+ setcolor(3);
+ outtextxy(630, 25, x);
+
+ settextjustify(0, 2);
+ settextstyle(0, 0, 2);
+ setcolor(0);
+ outtextxy(549, 1, "help!");
+ setcolor(3);
+ outtextxy(550, 0, "help!");
+ /***/ settextstyle(0, 0, 1);
+
+ do {
+ getline(x);
+ if (x == '!') flush(); /* End of the help text is signalled with a !. */
+ if (x[1] == '\\') {
+ setcolor(4);
+ chalk(y, copy(x, 2, 255));
+ } else {
+ setcolor(0);
+ chalk(y, x);
+ }
+ y += 1;
+ } while (!false);
+
+ /* We are now at the end of the text. Next we must read the icons. */
+
+ y = 0;
+ settextjustify(1, 1);
+ settextstyle(0, 0, 2);
+ while (! eof(f)) {
+ y += 1;
+ blockread(f, buttons[y].trigger, 1);
+ if (buttons[y].trigger == '\261') flush();
+ blockread(f, fv, 1);
+ if (buttons[y].trigger != '\0') plot_button(13 + y * 27, fv);
+ blockread(f, buttons[y].whither, 1); /* this is the position to jump to */
+
+
+ switch (buttons[y].trigger) {
+ case 'þ' :
+ x = "Esc";
+ break;
+ case 'Ö' :
+ x = '\30';
+ break;
+ case 'Ø' :
+ x = '\31';
+ break;
+ default:
+ x = buttons[y].trigger;
+ }
+ setcolor(0);
+ outtextxy(589, 26 + y * 27, x);
+ setcolor(3);
+ outtextxy(590, 25 + y * 27, x);
+
+ }
+
+ settextjustify(0, 2);
+ settextstyle(0, 0, 1);
+ close(f);
+ on;
}
byte check_mouse();
- /* Returns clicked-on button, or 0 if none. */
-static void light(byte which,byte colour)
-{
- if (which==177) return; /* Dummy value for "no button at all". */
- setcolor(colour); which=which & 31;
- rectangle(466,11+which*27,555,35+which*27);
+/* Returns clicked-on button, or 0 if none. */
+static void light(byte which, byte colour) {
+ if (which == 177) return; /* Dummy value for "no button at all". */
+ setcolor(colour);
+ which = which & 31;
+ rectangle(466, 11 + which * 27, 555, 35 + which * 27);
}
-byte check_mouse()
-{
- byte h_is;
-
- byte check_mouse_result;
- check;
-
- if (mrelease!=0)
- { /* Clicked *somewhere*... */
- if ((mx<470) || (mx>550) || (((my-13) % 27)>20))
- check_mouse_result=0; else
- /* Clicked on a button. */
- check_mouse_result=((my-13) / 27);
- } else
- {
- if ((mx>470) && (mx<=550) && (((my-13) % 27)<=20))
- { /* No click, so highlight. */
- h_is=(my-13) / 27;
- if ((h_is<1) || (h_is>6)) h_is=177; /* In case of silly values. */
- } else h_is=177;
-
- if ((h_is!=177) && ((keystatus & 1)>0)) h_is += 32;
-
- if (h_is!=highlight_was)
- {
- off;
- light(highlight_was,1);
- highlight_was=h_is;
- if (buttons[h_is & 31].trigger!='\0')
- {
- if (h_is>31) light(h_is,11); else light(h_is,9);
- }
- on;
- }
-
- check_mouse_result=0;
- }
- return check_mouse_result;
+byte check_mouse() {
+ byte h_is;
+
+ byte check_mouse_result;
+ check;
+
+ if (mrelease != 0) {
+ /* Clicked *somewhere*... */
+ if ((mx < 470) || (mx > 550) || (((my - 13) % 27) > 20))
+ check_mouse_result = 0;
+ else
+ /* Clicked on a button. */
+ check_mouse_result = ((my - 13) / 27);
+ } else {
+ if ((mx > 470) && (mx <= 550) && (((my - 13) % 27) <= 20)) {
+ /* No click, so highlight. */
+ h_is = (my - 13) / 27;
+ if ((h_is < 1) || (h_is > 6)) h_is = 177; /* In case of silly values. */
+ } else h_is = 177;
+
+ if ((h_is != 177) && ((keystatus & 1) > 0)) h_is += 32;
+
+ if (h_is != highlight_was) {
+ off;
+ light(highlight_was, 1);
+ highlight_was = h_is;
+ if (buttons[h_is & 31].trigger != '\0') {
+ if (h_is > 31) light(h_is, 11);
+ else light(h_is, 9);
+ }
+ on;
+ }
+
+ check_mouse_result = 0;
+ }
+ return check_mouse_result;
}
-void continue_help()
-{
- char r;
- byte fv;
-
- do {
- while (! keypressed())
- {
- fv=check_mouse();
-
- if (fv>0)
- switch (buttons[fv].trigger) {
- case '\0':/*null*/; break;
- case '\376': return; break;
- default: {
- dusk;
- getme(buttons[fv].whither);
- dawn;
- continue_;
- }
- }
-
- }
- r=upcase(readkey());
- switch (r) {
- case '\33' : return; break;
- case '\0' : switch (readkey()) {
- case '\110':case '\111': r='Ö'; break;
- case '\120':case '\121': r='Ø'; break;
- case '\73': r='H'; break; /* Help on help */
- default: continue_;
- }
- break;
- }
-
- for( fv=1; fv <= 10; fv ++)
- { buttontype& with = buttons[fv];
- if (with.trigger==r)
- {
- dusk;
- getme(with.whither);
- dawn;
- flush();
- }}
-
- } while (!false);
+void continue_help() {
+ char r;
+ byte fv;
+
+ do {
+ while (! keypressed()) {
+ fv = check_mouse();
+
+ if (fv > 0)
+ switch (buttons[fv].trigger) {
+ case '\0':/*null*/
+ ;
+ break;
+ case '\376':
+ return;
+ break;
+ default: {
+ dusk;
+ getme(buttons[fv].whither);
+ dawn;
+ continue_;
+ }
+ }
+
+ }
+ r = upcase(readkey());
+ switch (r) {
+ case '\33' :
+ return;
+ break;
+ case '\0' :
+ switch (readkey()) {
+ case '\110':
+ case '\111':
+ r = 'Ö';
+ break;
+ case '\120':
+ case '\121':
+ r = 'Ø';
+ break;
+ case '\73':
+ r = 'H';
+ break; /* Help on help */
+ default:
+ continue_;
+ }
+ break;
+ }
+
+ for (fv = 1; fv <= 10; fv ++) {
+ buttontype &with = buttons[fv];
+ if (with.trigger == r) {
+ dusk;
+ getme(with.whither);
+ dawn;
+ flush();
+ }
+ }
+
+ } while (!false);
}
-void boot_help()
-{
- byte groi;
-
- dusk;
- off;
- oncandopageswap=false; highlight_was=177;
- copypage(3,1-cp); /* Store old screen. */ groi=getpixel(0,0);
-
- /* Set up mouse. */
- off_virtual;
- newpointer(2);
- setactivepage(3); setvisualpage(3);
-
- getme(0);
- dawn;
-
- newpointer(9); on;
- mousepage(3);
-
- continue_help();
-
- mousepage(cp);
- dusk; off;
- oncandopageswap=true;
- copypage(1-cp,3); /* Restore old screen. */ groi=getpixel(0,0);
- on_virtual; dawn; fix_flashers;
-
- setvisualpage(cp);
- setactivepage(1-cp);
+void boot_help() {
+ byte groi;
+
+ dusk;
+ off;
+ oncandopageswap = false;
+ highlight_was = 177;
+ copypage(3, 1 - cp); /* Store old screen. */ groi = getpixel(0, 0);
+
+ /* Set up mouse. */
+ off_virtual;
+ newpointer(2);
+ setactivepage(3);
+ setvisualpage(3);
+
+ getme(0);
+ dawn;
+
+ newpointer(9);
+ on;
+ mousepage(3);
+
+ continue_help();
+
+ mousepage(cp);
+ dusk;
+ off;
+ oncandopageswap = true;
+ copypage(1 - cp, 3); /* Restore old screen. */ groi = getpixel(0, 0);
+ on_virtual;
+ dawn;
+ fix_flashers;
+
+ setvisualpage(cp);
+ setactivepage(1 - cp);
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/helper.h b/engines/avalanche/helper.h
index bc4afbd54b..0c4d2c7860 100644
--- a/engines/avalanche/helper.h
+++ b/engines/avalanche/helper.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/hibits.cpp b/engines/avalanche/hibits.cpp
index fbdc662911..013141998c 100644
--- a/engines/avalanche/hibits.cpp
+++ b/engines/avalanche/hibits.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -27,29 +27,31 @@
namespace Avalanche {
-file<char> inf,outf;
+file<char> inf, outf;
char x;
string q;
byte fv;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- assign(inf,"v:thank.you");
- assign(outf,"d:hibits.out");
- reset(inf); rewrite(outf);
-
- q=string('\40')+"(Seven is a bit of a lucky number.)"+'\40'+'\215'+'\212'+'\212';
-
- for( fv=1; fv <= length(q); fv ++) outf << q[fv];
-
- while (! eof(inf))
- {;
- inf >> x;
- if (x<'\200') x += 128;
- outf << x;
- }
- close(inf); close(outf);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ assign(inf, "v:thank.you");
+ assign(outf, "d:hibits.out");
+ reset(inf);
+ rewrite(outf);
+
+ q = string('\40') + "(Seven is a bit of a lucky number.)" + '\40' + '\215' + '\212' + '\212';
+
+ for (fv = 1; fv <= length(q); fv ++) outf << q[fv];
+
+ while (! eof(inf)) {
+ ;
+ inf >> x;
+ if (x < '\200') x += 128;
+ outf << x;
+ }
+ close(inf);
+ close(outf);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/highs.cpp b/engines/avalanche/highs.cpp
index bb4909b067..09d073d3a7 100644
--- a/engines/avalanche/highs.cpp
+++ b/engines/avalanche/highs.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -43,102 +43,107 @@
namespace Avalanche {
-typedef array<1,12,struct A1 {
- varying_string<30> name;
- word score;
- varying_string<12> rank;
- }> highscoretype;
+typedef array < 1, 12, struct A1 {
+ varying_string<30> name;
+ word score;
+ varying_string<12> rank;
+} > highscoretype;
highscoretype h;
-void get_new_highs()
-{
- byte fv;
-;
- for( fv=1; fv <= 12; fv ++)
- {
- A1& with = h[fv];
- ;
- with.score=32-fv*2;
- with.rank="...";
- }
- h[1].name="Mike"; h[2].name="Liz"; h[3].name="Thomas"; h[4].name="Mark";
- h[5].name="Mandy"; h[6].name="Andrew"; h[7].name="Lucy Tryphena";
- h[8].name="Tammy the dog";
- h[9].name="Avaricius"; h[10].name="Spellchick"; h[11].name="Caddelli";
- h[12].name="Spludwick";
+void get_new_highs() {
+ byte fv;
+ ;
+ for (fv = 1; fv <= 12; fv ++) {
+ A1 &with = h[fv];
+ ;
+ with.score = 32 - fv * 2;
+ with.rank = "...";
+ }
+ h[1].name = "Mike";
+ h[2].name = "Liz";
+ h[3].name = "Thomas";
+ h[4].name = "Mark";
+ h[5].name = "Mandy";
+ h[6].name = "Andrew";
+ h[7].name = "Lucy Tryphena";
+ h[8].name = "Tammy the dog";
+ h[9].name = "Avaricius";
+ h[10].name = "Spellchick";
+ h[11].name = "Caddelli";
+ h[12].name = "Spludwick";
}
void show_highs()
- /* This procedure shows the high-scores. */
+/* This procedure shows the high-scores. */
{
- byte fv;
- varying_string<40> x;
- varying_string<5> y;
-;
- display("HIGH SCORERS\3\r Name\n\nScore Rank\r \"\"\"\"\n\n\"\"\"\"\" \"\"\"\"\f\4");
- for( fv=1; fv <= 12; fv ++)
- {
- A1& with = h[fv];
- ;
- display(string('\15')+with.name+'\4');
- fillchar(x,sizeof(x),'\40');
- y=strf(with.score);
- x[0]=chr(29-(length(with.name+y)));
- display(x+y+' '+with.rank+'\4');
- }
-
- display("");
+ byte fv;
+ varying_string<40> x;
+ varying_string<5> y;
+ ;
+ display("HIGH SCORERS\3\r Name\n\nScore Rank\r \"\"\"\"\n\n\"\"\"\"\" \"\"\"\"\f\4");
+ for (fv = 1; fv <= 12; fv ++) {
+ A1 &with = h[fv];
+ ;
+ display(string('\15') + with.name + '\4');
+ fillchar(x, sizeof(x), '\40');
+ y = strf(with.score);
+ x[0] = chr(29 - (length(with.name + y)));
+ display(x + y + ' ' + with.rank + '\4');
+ }
+
+ display("");
}
void store_high(string who)
- /* This procedure shows the high-scores. */
+/* This procedure shows the high-scores. */
{
- byte fv,ff;
-;
+ byte fv, ff;
+ ;
- for( fv=1; fv <= 12; fv ++)
- if (h[fv].score<dna.score) flush();
+ for (fv = 1; fv <= 12; fv ++)
+ if (h[fv].score < dna.score) flush();
- /* Shift all the lower scores down a space. */
- for( ff=fv; ff <= 11; ff ++)
- h[ff+1]=h[ff];
+ /* Shift all the lower scores down a space. */
+ for (ff = fv; ff <= 11; ff ++)
+ h[ff + 1] = h[ff];
- {
- A1& with = h[fv];
- ;
- with.name=who;
- with.score=dna.score;
- }
+ {
+ A1 &with = h[fv];
+ ;
+ with.name = who;
+ with.score = dna.score;
+ }
}
-void get_highs()
-{
- file<highscoretype> f;
-;
- /*$I-*/
- assign(f,"scores.avd");
- reset(f);
- /* Did we get it? */
-
- if (ioresult!=0)
- {; /* No. */
- get_new_highs(); /* Invent one. */
- } else
- {; /* Yes. */
- f >> h;
- close(f);
- }
+void get_highs() {
+ file<highscoretype> f;
+ ;
+ /*$I-*/
+ assign(f, "scores.avd");
+ reset(f);
+ /* Did we get it? */
+
+ if (ioresult != 0) {
+ ; /* No. */
+ get_new_highs(); /* Invent one. */
+ } else {
+ ; /* Yes. */
+ f >> h;
+ close(f);
+ }
}
class unit_highs_initialize {
- public: unit_highs_initialize();
+public:
+ unit_highs_initialize();
};
static unit_highs_initialize highs_constructor;
-unit_highs_initialize::unit_highs_initialize() {;
- get_highs();
+unit_highs_initialize::unit_highs_initialize() {
+ ;
+ get_highs();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/highs.h b/engines/avalanche/highs.h
index a4937cbab4..2d9061cd99 100644
--- a/engines/avalanche/highs.h
+++ b/engines/avalanche/highs.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,9 +30,9 @@
namespace Avalanche {
- void show_highs();
+void show_highs();
- void store_high(string who);
+void store_high(string who);
} // End of namespace Avalanche.
diff --git a/engines/avalanche/hiz.cpp b/engines/avalanche/hiz.cpp
index f5f106ea0b..2f9e603b9e 100644
--- a/engines/avalanche/hiz.cpp
+++ b/engines/avalanche/hiz.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,202 +34,273 @@
namespace Avalanche {
- /* program's signature */
+/* program's signature */
const varying_string<20> tsr_tmark = "FISH FISH FISH!!!";
-integer gd,gm;
+integer gd, gm;
byte a /*absolute $A000:0*/;
-matrix<1,800,0,3,byte> sv;
-byte bit; string nam;
-byte tsr_int; word tsr_ax;
-
-void grab()
-{;
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(a,sv[1][bit],800);
- }
+matrix<1, 800, 0, 3, byte> sv;
+byte bit;
+string nam;
+byte tsr_int;
+word tsr_ax;
+
+void grab() {
+ ;
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(a, sv[1][bit], 800);
+ }
}
-void drop()
-{;
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(sv[1][bit],a,800);
- }
+void drop() {
+ ;
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(sv[1][bit], a, 800);
+ }
}
-void say(string x)
-{;
- grab(); output << string('\15')+x;
+void say(string x) {
+ ;
+ grab();
+ output << string('\15') + x;
}
-void pak(string x)
-{
- char r;
-;
- say(x+" (press any key...)"); r=readkey(); drop();
+void pak(string x) {
+ char r;
+ ;
+ say(x + " (press any key...)");
+ r = readkey();
+ drop();
}
-string typein()
-{
- char r; string x;
-string typein_result;
-;
- x="";
- do {
- r=readkey();
- switch (r) {
- case '\10': if (x[0]>'\0') {; output << string('\10')+'\40'+'\10'; x[0] -= 1; } break;
- case '\15': {; typein_result=x; return typein_result; } break;
- case '\33': {; typein_result=""; return typein_result; } break;
- default: if (x[0]<'\62') {; x=x+r; output << r; }
- }
- } while (!false);
-return typein_result;
+string typein() {
+ char r;
+ string x;
+ string typein_result;
+ ;
+ x = "";
+ do {
+ r = readkey();
+ switch (r) {
+ case '\10':
+ if (x[0] > '\0') {
+ ;
+ output << string('\10') + '\40' + '\10';
+ x[0] -= 1;
+ }
+ break;
+ case '\15': {
+ ;
+ typein_result = x;
+ return typein_result;
+ }
+ break;
+ case '\33': {
+ ;
+ typein_result = "";
+ return typein_result;
+ }
+ break;
+ default:
+ if (x[0] < '\62') {
+ ;
+ x = x + r;
+ output << r;
+ }
+ }
+ } while (!false);
+ return typein_result;
}
-void load()
-{
- byte a /*absolute $A000:1200*/; untyped_file f;
-;
- say("LOAD: filename?"); nam=typein(); drop();
- if (nam=="") return;
- assign(f,nam); reset(f,1);
- if (ioresult!=0)
- {;
- pak("LOAD: file not found."); return;
- }
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,12080);
- if (ioresult!=0)
- {;
- pak("LOAD: error whilst loading."); close(f); return;
- }
- }
- close(f);
+void load() {
+ byte a /*absolute $A000:1200*/;
+ untyped_file f;
+ ;
+ say("LOAD: filename?");
+ nam = typein();
+ drop();
+ if (nam == "") return;
+ assign(f, nam);
+ reset(f, 1);
+ if (ioresult != 0) {
+ ;
+ pak("LOAD: file not found.");
+ return;
+ }
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 12080);
+ if (ioresult != 0) {
+ ;
+ pak("LOAD: error whilst loading.");
+ close(f);
+ return;
+ }
+ }
+ close(f);
}
-void save()
-{
- const string header =
- string("This is a file from an Avvy game, and its contents are subject to ")+
- "copyright."+'\15'+'\12'+'\15'+'\12'+"Have fun!"+'\32';
- untyped_file f; varying_string<30> screenname; searchrec s; char r;
-byte a /*absolute $A000:1200*/;
-;
- say("SAVE: filename?"); nam=typein(); drop();
- if (nam=="") return;
- findfirst(nam,anyfile,s); if (doserror==0)
- {;
- say("SAVE: That exists, are you sure\? (Y/N)");
- do { r=upcase(readkey()); } while (!(set::of('Y','N', eos).has(r))); drop();
- if (r=='N') return;
- }
- screenname="Saved with HIZ.";
- assign(f,nam); rewrite(f,1); blockwrite(f,header[1],146);
- blockwrite(f,screenname,31);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,a,12080);
- if (ioresult!=0)
- {;
- pak("SAVE: error whilst saving."); close(f); return;
- }
- }
+void save() {
+ const string header =
+ string("This is a file from an Avvy game, and its contents are subject to ") +
+ "copyright." + '\15' + '\12' + '\15' + '\12' + "Have fun!" + '\32';
+ untyped_file f;
+ varying_string<30> screenname;
+ searchrec s;
+ char r;
+ byte a /*absolute $A000:1200*/;
+ ;
+ say("SAVE: filename?");
+ nam = typein();
+ drop();
+ if (nam == "") return;
+ findfirst(nam, anyfile, s);
+ if (doserror == 0) {
+ ;
+ say("SAVE: That exists, are you sure\? (Y/N)");
+ do {
+ r = upcase(readkey());
+ } while (!(set::of('Y', 'N', eos).has(r)));
+ drop();
+ if (r == 'N') return;
+ }
+ screenname = "Saved with HIZ.";
+ assign(f, nam);
+ rewrite(f, 1);
+ blockwrite(f, header[1], 146);
+ blockwrite(f, screenname, 31);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, a, 12080);
+ if (ioresult != 0) {
+ ;
+ pak("SAVE: error whilst saving.");
+ close(f);
+ return;
+ }
+ }
}
-void hedges()
-{;
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- fillchar(mem[0xa000*14*80],80,'\377');
- fillchar(mem[0xa000*166*80],80,'\377');
- }
+void hedges() {
+ ;
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ fillchar(mem[0xa000 * 14 * 80], 80, '\377');
+ fillchar(mem[0xa000 * 166 * 80], 80, '\377');
+ }
}
-void reset_()
-{
- registers regs;
-;
- regs.ax=14;
- intr(0x10,regs);
- directvideo=false;
+void reset_() {
+ registers regs;
+ ;
+ regs.ax = 14;
+ intr(0x10, regs);
+ directvideo = false;
}
-void do_pop()
-{
- char r;
-;
- do {
- say("HIZ: Load Save Hedges Reset eXit?"); r=upcase(readkey()); drop();
- switch (r) {
- case 'L': load(); break;
- case 'S': save(); break;
- case 'H': hedges(); break;
- case 'R': reset_(); break;
- case 'X': return; break;
- }
- } while (!false);
+void do_pop() {
+ char r;
+ ;
+ do {
+ say("HIZ: Load Save Hedges Reset eXit?");
+ r = upcase(readkey());
+ drop();
+ switch (r) {
+ case 'L':
+ load();
+ break;
+ case 'S':
+ save();
+ break;
+ case 'H':
+ hedges();
+ break;
+ case 'R':
+ reset_();
+ break;
+ case 'X':
+ return;
+ break;
+ }
+ } while (!false);
}
/* Now for the TSR stuff */
-void mypoprtn()
-{
- registers r;
-;
- beginpop;
- do_pop();
- endpop;
+void mypoprtn() {
+ registers r;
+ ;
+ beginpop;
+ do_pop();
+ endpop;
}
/**********************/
-void stop_tsr()
-{;
- if (tsrexit)
- output << "HIZ stopped" << NL;
- else
- output << "Unable to stop HIZ - other TSR has been installed." << NL;
+void stop_tsr() {
+ ;
+ if (tsrexit)
+ output << "HIZ stopped" << NL;
+ else
+ output << "Unable to stop HIZ - other TSR has been installed." << NL;
}
/**********************/
/* This interrupt is called at program start-up. Its purpose is to provide
a way to communicate with an installed copy of the TSR through cmdline
params. The installation of the intrpt serves to prevent any attempt to
install a 2nd copy of the TSR */
-void tsr_intrtn(word flags,word cs,word ip,word ax,word bx,word cx,word dx,word si,word di,word ds,word es,word bp)
+void tsr_intrtn(word flags, word cs, word ip, word ax, word bx, word cx, word dx, word si, word di, word ds, word es, word bp)
/*interrupt;*/
-{;
- tsr_ax=ax;
- cli;
- beginint;
- sti;
-
- switch (tsr_ax) {
- case 1: {;
- stop_tsr(); /* Terminate TSR, if poss.*/
- }
- break;
- case 2: {;
- tsroff= true; /* Suspend TSR */
- output << "HIZ suspended." << NL;
- }
- break;
- case 3: {;
- tsroff=false;
- output << "HIZ restarted" << NL;
- }
- break;
- }
- cli;
- endint;
- sti;
+{
+ ;
+ tsr_ax = ax;
+ cli;
+ beginint;
+ sti;
+
+ switch (tsr_ax) {
+ case 1: {
+ ;
+ stop_tsr(); /* Terminate TSR, if poss.*/
+ }
+ break;
+ case 2: {
+ ;
+ tsroff = true; /* Suspend TSR */
+ output << "HIZ suspended." << NL;
+ }
+ break;
+ case 3: {
+ ;
+ tsroff = false;
+ output << "HIZ restarted" << NL;
+ }
+ break;
+ }
+ cli;
+ endint;
+ sti;
}
/*******************/
byte i;
@@ -237,78 +308,74 @@ registers r;
string st;
boolean b;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
-
- /********************************************/
- /* Check to see if TSR is already installed */
- /********************************************/
-
- tsr_int=dupcheck(tsr_tmark,&tsr_intrtn);
-
- /*****************************************/
- /* If it IS already installed, check for */
- /* parameter. */
- /*****************************************/
-
- if (tsr_int > 0)
- {
- if (paramcount>0)
- {
- st=paramstr(1);
- for( i=1; i <= length(st); i ++)
- st[i]=upcase(st[i]);
- if (st=="STOP")
- r.ax=1;
- else if (st=="HOLD") r.ax=2;
- else if (st=="RSTR") r.ax=3;
- else r.ax=4;
-
- if (r.ax<4)
- {;
- intr(tsr_int,r);
- return 0;
- }
- else
- {;
- output << "HIZ: invalid parameter " << paramstr(1) << NL;
- output << "Syntax: HIZ stop/hold/rstr" << NL;
- return 0;
- }
- }
- else
- {;
- output << "HIZ already installed." << NL;
- output << "(If you're sure it isn't, try running BLANKINT /I." << NL;
- output << "It's in the TURBO directory.)" << NL;
- }
- return 0;
- }
-
- output << string("Wait...")+'\15'; /* tell 'em to wait...! */
-
- /* Call PopSetUp to point to PopUp routine. Include the
- scancode and the keymask to activate the program. In
- this example, the scancode is $23 (H) and the
- keymask is 08h (Alt.) */
-
- popsetup(&mypoprtn,0x23,0x8);
-
- directvideo=false;
- output << "Û Û ßÛß ßßÛ v1.0, (c) 1992, Thomas Thurman." << NL;
- output << "ÛßÛ Û Üß" << NL;
- output << "ß ß ßßß ßßß The AVD saving/loading/hedging program." << NL;
- output << " Use with Dr. Genius. The Hot Key is Ctrl-Alt-H." << NL;
-
- output << NL;
- output << " Enter \"HIZ stop\" to remove Hiz from memory" << NL;
- output << " \"HIZ hold\" to temporarily halt Hiz" << NL;
- output << " \"HIZ rstr\" to restart Hiz" << NL;
- stacksw=-1;
- install_int;
- keep(0);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+
+ /********************************************/
+ /* Check to see if TSR is already installed */
+ /********************************************/
+
+ tsr_int = dupcheck(tsr_tmark, &tsr_intrtn);
+
+ /*****************************************/
+ /* If it IS already installed, check for */
+ /* parameter. */
+ /*****************************************/
+
+ if (tsr_int > 0) {
+ if (paramcount > 0) {
+ st = paramstr(1);
+ for (i = 1; i <= length(st); i ++)
+ st[i] = upcase(st[i]);
+ if (st == "STOP")
+ r.ax = 1;
+ else if (st == "HOLD") r.ax = 2;
+ else if (st == "RSTR") r.ax = 3;
+ else r.ax = 4;
+
+ if (r.ax < 4) {
+ ;
+ intr(tsr_int, r);
+ return 0;
+ } else {
+ ;
+ output << "HIZ: invalid parameter " << paramstr(1) << NL;
+ output << "Syntax: HIZ stop/hold/rstr" << NL;
+ return 0;
+ }
+ } else {
+ ;
+ output << "HIZ already installed." << NL;
+ output << "(If you're sure it isn't, try running BLANKINT /I." << NL;
+ output << "It's in the TURBO directory.)" << NL;
+ }
+ return 0;
+ }
+
+ output << string("Wait...") + '\15'; /* tell 'em to wait...! */
+
+ /* Call PopSetUp to point to PopUp routine. Include the
+ scancode and the keymask to activate the program. In
+ this example, the scancode is $23 (H) and the
+ keymask is 08h (Alt.) */
+
+ popsetup(&mypoprtn, 0x23, 0x8);
+
+ directvideo = false;
+ output << "Û Û ßÛß ßßÛ v1.0, (c) 1992, Thomas Thurman." << NL;
+ output << "ÛßÛ Û Üß" << NL;
+ output << "ß ß ßßß ßßß The AVD saving/loading/hedging program." << NL;
+ output << " Use with Dr. Genius. The Hot Key is Ctrl-Alt-H." << NL;
+
+ output << NL;
+ output << " Enter \"HIZ stop\" to remove Hiz from memory" << NL;
+ output << " \"HIZ hold\" to temporarily halt Hiz" << NL;
+ output << " \"HIZ rstr\" to restart Hiz" << NL;
+ stacksw = -1;
+ install_int;
+ keep(0);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/incline.cpp b/engines/avalanche/incline.cpp
index 32dad74874..2c47cee299 100644
--- a/engines/avalanche/incline.cpp
+++ b/engines/avalanche/incline.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -45,156 +45,161 @@ namespace Avalanche {
byte fv;
char t;
string bugline;
-boolean zoomy,numlockhold;
+boolean zoomy, numlockhold;
boolean filename_specified;
-void syntax()
-{
- assign(output,""); rewrite(output);
- output << NL;
- output << string("Lord Avalot d'Argent\n\n(c) ")+copyright+" Mark, Mike and Thomas Thurman." << NL;
- output << string("~~~~~~~~~~~~~~~~~~~~~\n\n")+vernum << NL;
- output << NL;
- output << "Syntax:" << NL;
- output << "\n/?\ndisplays this screen," << NL;
- output << "\n/O\noverrides EGA check," << NL;
- output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL;
- output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL;
- output << "\n/Q\ncancels sound effects," << NL;
- output << "\n/Z\ngoes straight into the game." << NL;
- output << NL;
- output << "\n\n\n\n\n\n\n... Have fun!" << NL;
- exit(177);
+void syntax() {
+ assign(output, "");
+ rewrite(output);
+ output << NL;
+ output << string("Lord Avalot d'Argent\n\n(c) ") + copyright + " Mark, Mike and Thomas Thurman." << NL;
+ output << string("~~~~~~~~~~~~~~~~~~~~~\n\n") + vernum << NL;
+ output << NL;
+ output << "Syntax:" << NL;
+ output << "\n/?\ndisplays this screen," << NL;
+ output << "\n/O\noverrides EGA check," << NL;
+ output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL;
+ output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL;
+ output << "\n/Q\ncancels sound effects," << NL;
+ output << "\n/Z\ngoes straight into the game." << NL;
+ output << NL;
+ output << "\n\n\n\n\n\n\n... Have fun!" << NL;
+ exit(177);
}
-void not_through_bootstrap()
-{
- output << "Avalot must be loaded through the bootstrap." << NL;
- exit(0);
+void not_through_bootstrap() {
+ output << "Avalot must be loaded through the bootstrap." << NL;
+ exit(0);
}
-void get_storage_addr()
-{
- integer e;
+void get_storage_addr() {
+ integer e;
- val(paramstr(2),storage_seg,e); if (e!=0) not_through_bootstrap();
- val(paramstr(3),storage_ofs,e); if (e!=0) not_through_bootstrap();
- skellern=storage_ofs+1;
+ val(paramstr(2), storage_seg, e);
+ if (e != 0) not_through_bootstrap();
+ val(paramstr(3), storage_ofs, e);
+ if (e != 0) not_through_bootstrap();
+ skellern = storage_ofs + 1;
}
-longint value(string x)
-{
- longint q; integer e;
+longint value(string x) {
+ longint q;
+ integer e;
- longint value_result;
- val(x,q,e); value_result=q;
- return value_result;
+ longint value_result;
+ val(x, q, e);
+ value_result = q;
+ return value_result;
}
-void undo_js()
-{
- {
- joysetup& with = js;
-
- cxmin=with.xmid-(((with.xmid-with.xmin) / 10)*with.centre);
- cxmax=with.xmid+(((with.xmax-with.xmid) / 10)*with.centre);
- cymin=with.ymid-(((with.ymid-with.ymin) / 10)*with.centre);
- cymax=with.ymid+(((with.ymax-with.ymid) / 10)*with.centre);
-
-/* writeln(lst,'MID ',xmid,'x',ymid);
- writeln(lst,'MAX ',xmax,'x',ymax);
- writeln(lst,'MIN ',xmin,'x',ymin);
- writeln(lst,'CENTRE ',xmid);
- writeln(lst,cxmin);
- writeln(lst,cxmax);
- writeln(lst,cymin);
- writeln(lst,cymax);*/
- }
+void undo_js() {
+ {
+ joysetup &with = js;
+
+ cxmin = with.xmid - (((with.xmid - with.xmin) / 10) * with.centre);
+ cxmax = with.xmid + (((with.xmax - with.xmid) / 10) * with.centre);
+ cymin = with.ymid - (((with.ymid - with.ymin) / 10) * with.centre);
+ cymax = with.ymid + (((with.ymax - with.ymid) / 10) * with.centre);
+
+ /* writeln(lst,'MID ',xmid,'x',ymid);
+ writeln(lst,'MAX ',xmax,'x',ymax);
+ writeln(lst,'MIN ',xmin,'x',ymin);
+ writeln(lst,'CENTRE ',xmid);
+ writeln(lst,cxmin);
+ writeln(lst,cxmax);
+ writeln(lst,cymin);
+ writeln(lst,cymax);*/
+ }
}
void check_slope_line();
static string slope;
-static boolean yn1(byte where) { boolean yn1_result;
- yn1_result=slope[where]=='y'; return yn1_result;
- }
-
-void check_slope_line()
-{
- slope=paramstr(4);
-
-/* if slope='' then fillchar(slope,sizeof(slope),'n');*/
-
- if (slope[1]!='1') not_through_bootstrap();
-
- if (yn1(2)) syntax();
-
- soundfx=yn1(3);
- cl_override=yn1(4);
- keyboardclick=yn1(5); /* 6 - see below */
- demo=yn1(7);
- zoomy=yn1(8);
- numlockhold=yn1(9);
- use_joy_a=yn1(10);
-
- {
- joysetup& with = js;
-
- with.xmid=value(paramstr( 5));
- with.ymid=value(paramstr( 6));
- with.xmin=value(paramstr( 7));
- with.ymin=value(paramstr( 8));
- with.xmax=value(paramstr( 9));
- with.ymax=value(paramstr(10));
- with.centre=value(paramstr(11));
-
- undo_js();
- }
+static boolean yn1(byte where) {
+ boolean yn1_result;
+ yn1_result = slope[where] == 'y';
+ return yn1_result;
+}
- switch (slope[6]) {
- case 'l': log_setup(paramstr(12),false); break;
- case 'p': log_setup(paramstr(12),true); break;
- }
+void check_slope_line() {
+ slope = paramstr(4);
+
+ /* if slope='' then fillchar(slope,sizeof(slope),'n');*/
+
+ if (slope[1] != '1') not_through_bootstrap();
+
+ if (yn1(2)) syntax();
+
+ soundfx = yn1(3);
+ cl_override = yn1(4);
+ keyboardclick = yn1(5); /* 6 - see below */
+ demo = yn1(7);
+ zoomy = yn1(8);
+ numlockhold = yn1(9);
+ use_joy_a = yn1(10);
+
+ {
+ joysetup &with = js;
+
+ with.xmid = value(paramstr(5));
+ with.ymid = value(paramstr(6));
+ with.xmin = value(paramstr(7));
+ with.ymin = value(paramstr(8));
+ with.xmax = value(paramstr(9));
+ with.ymax = value(paramstr(10));
+ with.centre = value(paramstr(11));
+
+ undo_js();
+ }
+
+ switch (slope[6]) {
+ case 'l':
+ log_setup(paramstr(12), false);
+ break;
+ case 'p':
+ log_setup(paramstr(12), true);
+ break;
+ }
}
-void get_extra_data()
-{
- if (! reloaded) return;
+void get_extra_data() {
+ if (! reloaded) return;
- move(mem[storage_seg*storage_ofs+300],js,sizeof(js));
+ move(mem[storage_seg * storage_ofs + 300], js, sizeof(js));
- undo_js();
+ undo_js();
}
class unit_incline_initialize {
- public: unit_incline_initialize();
+public:
+ unit_incline_initialize();
};
static unit_incline_initialize incline_constructor;
unit_incline_initialize::unit_incline_initialize() {
-/* writeln('Load code: ',paramstr(1));
- writeln('Seg & ofs: ',paramstr(2),':',paramstr(3));
- writeln('Slope line: ',paramstr(4));
- writeln('Log file: ',paramstr(5));
- writeln('File to load: ',paramstr(6));
- readln;*/
+ /* writeln('Load code: ',paramstr(1));
+ writeln('Seg & ofs: ',paramstr(2),':',paramstr(3));
+ writeln('Slope line: ',paramstr(4));
+ writeln('Log file: ',paramstr(5));
+ writeln('File to load: ',paramstr(6));
+ readln;*/
- filetoload=paramstr(13);
- filename_specified = filetoload != "";
+ filetoload = paramstr(13);
+ filename_specified = filetoload != "";
- logging=false;
+ logging = false;
- if ((paramcount<3) ||
- ((paramstr(1)!="Go") && (paramstr(1)!="et"))) not_through_bootstrap();
+ if ((paramcount < 3) ||
+ ((paramstr(1) != "Go") && (paramstr(1) != "et"))) not_through_bootstrap();
- reloaded=paramstr(1)=="et";
+ reloaded = paramstr(1) == "et";
- get_storage_addr();
+ get_storage_addr();
- get_extra_data();
+ get_extra_data();
- check_slope_line();
+ check_slope_line();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/incline.h b/engines/avalanche/incline.h
index 799ad79ad5..736dd199d8 100644
--- a/engines/avalanche/incline.h
+++ b/engines/avalanche/incline.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/initxf.cpp b/engines/avalanche/initxf.cpp
index e6ebcfb9f7..46ad0a4b2c 100644
--- a/engines/avalanche/initxf.cpp
+++ b/engines/avalanche/initxf.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,31 +30,34 @@
namespace Avalanche {
struct inirex {
- varying_string<12> a;
- word num;
+ varying_string<12> a;
+ word num;
};
text i;
file<inirex> o;
inirex x;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- assign(i,"v:init0.dat"); reset(i);
- assign(o,"v:init.avd"); rewrite(o);
-
- while (! eof(i))
- {;
- i >> x.a >> NL;
- i >> x.num >> NL;
- o << x;
- output << '.';
- }
-
- close(i); close(o);
- output << NL;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ assign(i, "v:init0.dat");
+ reset(i);
+ assign(o, "v:init.avd");
+ rewrite(o);
+
+ while (! eof(i)) {
+ ;
+ i >> x.a >> NL;
+ i >> x.num >> NL;
+ o << x;
+ output << '.';
+ }
+
+ close(i);
+ close(o);
+ output << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/inputtes.cpp b/engines/avalanche/inputtes.cpp
index c24a933ed1..bfb2db11e9 100644
--- a/engines/avalanche/inputtes.cpp
+++ b/engines/avalanche/inputtes.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,46 +30,49 @@
namespace Avalanche {
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-integer gd,gm;
+integer gd, gm;
fonttype font;
varying_string<79> current;
char r;
-void plottext()
-{
- byte x,y;
-;
- for( y=0; y <= 7; y ++)
- {;
- for( x=1; x <= length(current); x ++)
- mem[0xa000*12880+y*80+x]=font[current[x]][y];
- fillchar(mem[0xa000*12881+y*80+x],79-x,'\0');
- }
+void plottext() {
+ byte x, y;
+ ;
+ for (y = 0; y <= 7; y ++) {
+ ;
+ for (x = 1; x <= length(current); x ++)
+ mem[0xa000 * 12880 + y * 80 + x] = font[current[x]][y];
+ fillchar(mem[0xa000 * 12881 + y * 80 + x], 79 - x, '\0');
+ }
}
-void loadfont()
-{
- file<fonttype> f;
-;
- assign(f,"c:\\thomas\\ttsmall.fnt"); reset(f);
- f >> font; close(f);
+void loadfont() {
+ file<fonttype> f;
+ ;
+ assign(f, "c:\\thomas\\ttsmall.fnt");
+ reset(f);
+ f >> font;
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\turbo");
- loadfont();
- setfillstyle(1,6); bar(0,0,640,200);
- current="";
- do {
- r=readkey();
- current=current+r;
- plottext();
- } while (!false);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\turbo");
+ loadfont();
+ setfillstyle(1, 6);
+ bar(0, 0, 640, 200);
+ current = "";
+ do {
+ r = readkey();
+ current = current + r;
+ plottext();
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/intro.cpp b/engines/avalanche/intro.cpp
index 010e024b94..b23bd1cc65 100644
--- a/engines/avalanche/intro.cpp
+++ b/engines/avalanche/intro.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,7 +32,7 @@
namespace Avalanche {
- /* This is a stand-alone program. */
+/* This is a stand-alone program. */
/* 0, black, remains 0.
Other numbers: the bits take precedence from the left.
@@ -45,20 +45,21 @@ namespace Avalanche {
Second bit: 7 (light grey)
First bit: 1 (blue). */
-const palettetype our_palette =
- {16,
- /* sic */
-{{ 0, 1, 57, 57, 7, 7, 7, 7, 63, 63, 63, 63, 63, 63, 63, 63}}};
+const palettetype our_palette = {
+ 16,
+ /* sic */
+ {{ 0, 1, 57, 57, 7, 7, 7, 7, 63, 63, 63, 63, 63, 63, 63, 63}}
+};
- const integer scardcount = 13;
+const integer scardcount = 13;
- const array<0,scardcount-1,integer> soundcards =
- {{1,2,6,3,4,5,8,9,10,7,7,7,7}};
+const array < 0, scardcount - 1, integer > soundcards =
+{{1, 2, 6, 3, 4, 5, 8, 9, 10, 7, 7, 7, 7}};
-typedef matrix<'\0','\377',1,16,byte> fonttype;
+typedef matrix < '\0', '\377', 1, 16, byte > fonttype;
fonttype f;
-matrix<0,39,1,16,byte> next_line;
+matrix<0, 39, 1, 16, byte> next_line;
byte next_bitline;
@@ -68,308 +69,321 @@ boolean cut_out;
word cut_out_time;
-array<1,117,varying_string<40> > x;
+array<1, 117, varying_string<40> > x;
byte this_line;
-word* skellern;
+word *skellern;
boolean nomusic;
/*$L intro.obj*/
-extern void introduction();
+extern void introduction();
-void graphmode(integer mode)
-{
- registers regs;
+void graphmode(integer mode) {
+ registers regs;
- regs.ax=mode;
- intr(0x10,regs);
+ regs.ax = mode;
+ intr(0x10, regs);
}
/* Firstly, port[$3C4]:=2; port[$3CF]:=4;,
Then port[$3C5]:=1 shl bit; port[$3CF]:=bit;. */
-void loadfont()
-{
- file<fonttype> ff;
+void loadfont() {
+ file<fonttype> ff;
- assign(ff,"avalot.fnt");
- reset(ff);
- ff >> f;
- close(ff);
+ assign(ff, "avalot.fnt");
+ reset(ff);
+ ff >> f;
+ close(ff);
}
void calc_next_line()
- /* This proc sets up next_line. */
+/* This proc sets up next_line. */
{
- string l;
- byte fv,ff;
- boolean oddlen;
- byte start;
- byte this_;
-
- fillchar(next_line,sizeof(next_line),'\0'); /* All blanks. */
-
- if (this_line==117)
- {
- cut_out=true;
- return;
- }
-
- l=x[this_line];
- this_line += 1;
-
- start=(20-length(l) / 2)-1;
- oddlen=odd(length(l));
-
- for( fv=1; fv <= length(l); fv ++)
- for( ff=1; ff <= 16; ff ++)
- {
- this_=f[l[fv]][ff];
- if (oddlen)
- { /* Odd, => 4 bits shift to the right. */
- next_line[start+fv][ff] += this_ << 4;
- next_line[start+fv-1][ff] += (cardinal)this_ >> 4;
- } else
- { /* Even, => no bit shift. */
- next_line[start+fv][ff]=this_;
- }
- }
- next_bitline=1;
+ string l;
+ byte fv, ff;
+ boolean oddlen;
+ byte start;
+ byte this_;
+
+ fillchar(next_line, sizeof(next_line), '\0'); /* All blanks. */
+
+ if (this_line == 117) {
+ cut_out = true;
+ return;
+ }
+
+ l = x[this_line];
+ this_line += 1;
+
+ start = (20 - length(l) / 2) - 1;
+ oddlen = odd(length(l));
+
+ for (fv = 1; fv <= length(l); fv ++)
+ for (ff = 1; ff <= 16; ff ++) {
+ this_ = f[l[fv]][ff];
+ if (oddlen) {
+ /* Odd, => 4 bits shift to the right. */
+ next_line[start + fv][ff] += this_ << 4;
+ next_line[start + fv - 1][ff] += (cardinal)this_ >> 4;
+ } else {
+ /* Even, => no bit shift. */
+ next_line[start + fv][ff] = this_;
+ }
+ }
+ next_bitline = 1;
}
-void display()
-{
- byte fv,ff;
+void display() {
+ byte fv, ff;
- if (next_bitline == 17) calc_next_line();
+ if (next_bitline == 17) calc_next_line();
- if (cut_out)
- {
- if (nomusic)
- cut_out_time -= 1;
- else
- if (ampgetmodulestatus != md_playing) cut_out_time=0;
- return;
- }
+ if (cut_out) {
+ if (nomusic)
+ cut_out_time -= 1;
+ else if (ampgetmodulestatus != md_playing) cut_out_time = 0;
+ return;
+ }
- move(mem[0xa000*40],mem[0xa000*0],7960);
- for( fv=0; fv <= 39; fv ++)
- mem[0xa1f1*8+fv]=next_line[fv][next_bitline];
- next_bitline += 1;
+ move(mem[0xa000 * 40], mem[0xa000 * 0], 7960);
+ for (fv = 0; fv <= 39; fv ++)
+ mem[0xa1f1 * 8 + fv] = next_line[fv][next_bitline];
+ next_bitline += 1;
}
-void plot_a_star(integer x,integer y)
-{
- byte ofs;
+void plot_a_star(integer x, integer y) {
+ byte ofs;
- ofs=x % 8;
- x=x / 8;
- mem[0xa000*x+y*40] += (cardinal)128 >> ofs;
+ ofs = x % 8;
+ x = x / 8;
+ mem[0xa000 * x + y * 40] += (cardinal)128 >> ofs;
}
-void plot_some_stars(integer y)
-{
- byte fv,times;
-
- switch (Random(7)) {
- case 1: times=1; break;
- case 2: times=2; break;
- case 3: times=3; break;
- default: return;
- }
-
- for( fv=1; fv <= times; fv ++)
- plot_a_star(Random(320),y);
+void plot_some_stars(integer y) {
+ byte fv, times;
+
+ switch (Random(7)) {
+ case 1:
+ times = 1;
+ break;
+ case 2:
+ times = 2;
+ break;
+ case 3:
+ times = 3;
+ break;
+ default:
+ return;
+ }
+
+ for (fv = 1; fv <= times; fv ++)
+ plot_a_star(Random(320), y);
}
-void starry_starry_night()
-{
- integer y;
- byte bit;
-
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- for( bit=0; bit <= 2; bit ++)
- {
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( y=1; y <= 200; y ++)
- plot_some_stars(y);
- }
+void starry_starry_night() {
+ integer y;
+ byte bit;
+
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ for (bit = 0; bit <= 2; bit ++) {
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (y = 1; y <= 200; y ++)
+ plot_some_stars(y);
+ }
}
void setupgraphics() /* Fix this proc. This prog SHOULDN'T use the
Graph unit. */
{
- integer gd,gm;
+ integer gd, gm;
- gd=3; gm=1; initgraph(gd,gm,"");
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
}
-void shovestars()
-{
- move(mem[0xa000*0],mem[0xa000*40],7960);
- fillchar(mem[0xa000*0],40,'\0');
- plot_some_stars(0);
+void shovestars() {
+ move(mem[0xa000 * 0], mem[0xa000 * 40], 7960);
+ fillchar(mem[0xa000 * 0], 40, '\0');
+ plot_some_stars(0);
}
-void do_next_line()
-{
- byte bit;
-
- port[0x3c4]=2; port[0x3ce]=4;
-
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- switch (bit) {
- case 0: if ((displaycounter % 10)==0) shovestars(); break;
- case 1: if ((displaycounter % 2)==0) shovestars(); break;
- case 2: shovestars(); break;
- case 3: display(); break; /* The text. */
- }
- }
-
- if (displaycounter==40) displaycounter=0;
+void do_next_line() {
+ byte bit;
+
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ switch (bit) {
+ case 0:
+ if ((displaycounter % 10) == 0) shovestars();
+ break;
+ case 1:
+ if ((displaycounter % 2) == 0) shovestars();
+ break;
+ case 2:
+ shovestars();
+ break;
+ case 3:
+ display();
+ break; /* The text. */
+ }
+ }
+
+ if (displaycounter == 40) displaycounter = 0;
}
-void load_text()
-{
- word fv;
- char* c;
- byte thisline;
-
-
- c=addr(introduction());
- thisline=0;
- fillchar(x,sizeof(x),'\0');
-
- for( fv=1; fv <= 2456; fv ++)
- {
- switch (*c) {
- case '\15': thisline += 1; break;
- case '\12':/*nop*/; break;
- default: x[thisline]=x[thisline]+*c;
- }
-
- c += 1;
- }
+void load_text() {
+ word fv;
+ char *c;
+ byte thisline;
+
+
+ c = addr(introduction());
+ thisline = 0;
+ fillchar(x, sizeof(x), '\0');
+
+ for (fv = 1; fv <= 2456; fv ++) {
+ switch (*c) {
+ case '\15':
+ thisline += 1;
+ break;
+ case '\12':/*nop*/
+ ;
+ break;
+ default:
+ x[thisline] = x[thisline] + *c;
+ }
+
+ c += 1;
+ }
}
-void check_params()
-{
- word s,o; integer e;
+void check_params() {
+ word s, o;
+ integer e;
- if (paramstr(1)!="jsb") exit(0);
- val(paramstr(2),s,e); if (e!=0) exit(0);
- val(paramstr(3),o,e); if (e!=0) exit(0);
- skellern=ptr(s,o+1);
+ if (paramstr(1) != "jsb") exit(0);
+ val(paramstr(2), s, e);
+ if (e != 0) exit(0);
+ val(paramstr(3), o, e);
+ if (e != 0) exit(0);
+ skellern = ptr(s, o + 1);
}
-integer getsoundhardware(psoundcard scard)
-{
- integer sc,i,autosel,select;
- char ch;
- integer e;
+integer getsoundhardware(psoundcard scard) {
+ integer sc, i, autosel, select;
+ char ch;
+ integer e;
-integer getsoundhardware_result;
+ integer getsoundhardware_result;
Lagain:
- sc=detectgus(scard);
- if (sc!=0) sc=detectpas(scard);
- if (sc!=0) sc=detectaria(scard);
- if (sc!=0) sc=detectsb(scard);
-
- /* if no sound card found, zero scard */
- if (sc!=0) fillchar(scard,sizeof(tsoundcard),0);
-
- autosel=-1;
-/* if sc=0 then
- for i:=0 to scardcount-1 do
- if scard^.ID=soundcards[i].ID then begin
- { Set auto selection mark }
- autosel:=i+1;
- break;
- end;*/
-
- /* Print the list of sound cards */
-
- val(paramstr(13),select,e);
-
- /* Default entry? */
- if (select==0) select=autosel;
- if (select!=autosel) {
- /* clear all assumptions */
- sc=-1;
- fillchar(scard,sizeof(tsoundcard),0);
- scard->id=soundcards[select-1]; /* set correct ID */
- }
-
- /* Query I/O address */
- if (scard->id==id_dac) scard->ioport=0x378;
-
- /* Read user input */
- val(paramstr(15),i,e);
-
- if (i!=0) scard->ioport=i;
- if (sc!=1) /* Not autodetected */
- switch (scard->id) {
- case id_sb16:
- case id_pas16:
- case id_wss:
- case id_aria:
- case id_gus : scard->samplesize=2;
- break; /* 16-bit card */
- case id_sbpro:
- case id_pas:
- case id_pasplus: scard->stereo=true;
- break; /* enable stereo */
- default: {
- scard->samplesize=1;
- scard->stereo=false;
- }
- }
-
- if (scard->id!=id_dac) {
- val(paramstr(17),i,e);
-
- if (i!=0) scard->dmairq=i;
-
- val(paramstr(16),i,e);
-
- if (i!=0) scard->dmachannel=i;
- } else {
- /* Select correct DAC */
- scard->maxrate=44100;
- if (select==11) {
- scard->stereo=true;
- scard->dmachannel=1; /* Special 'mark' */
- scard->maxrate=60000;
- } else
- if (select==12) {
- scard->stereo=true;
- scard->dmachannel=2;
- scard->maxrate=60000;
- if (scard->ioport==0) scard->ioport=0x378;
- } else
- if (select==13) {
- scard->dmachannel=0;
- scard->ioport=0x42; /* Special 'mark' */
- scard->maxrate=44100;
- }
- }
-
-/* writeln('Your selection: ',select,' at ',scard^.ioPort,
- ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel);
- readln;*/
-
- getsoundhardware_result=0;
-return getsoundhardware_result;
+ sc = detectgus(scard);
+ if (sc != 0) sc = detectpas(scard);
+ if (sc != 0) sc = detectaria(scard);
+ if (sc != 0) sc = detectsb(scard);
+
+ /* if no sound card found, zero scard */
+ if (sc != 0) fillchar(scard, sizeof(tsoundcard), 0);
+
+ autosel = -1;
+ /* if sc=0 then
+ for i:=0 to scardcount-1 do
+ if scard^.ID=soundcards[i].ID then begin
+ { Set auto selection mark }
+ autosel:=i+1;
+ break;
+ end;*/
+
+ /* Print the list of sound cards */
+
+ val(paramstr(13), select, e);
+
+ /* Default entry? */
+ if (select == 0) select = autosel;
+ if (select != autosel) {
+ /* clear all assumptions */
+ sc = -1;
+ fillchar(scard, sizeof(tsoundcard), 0);
+ scard->id = soundcards[select - 1]; /* set correct ID */
+ }
+
+ /* Query I/O address */
+ if (scard->id == id_dac) scard->ioport = 0x378;
+
+ /* Read user input */
+ val(paramstr(15), i, e);
+
+ if (i != 0) scard->ioport = i;
+ if (sc != 1) /* Not autodetected */
+ switch (scard->id) {
+ case id_sb16:
+ case id_pas16:
+ case id_wss:
+ case id_aria:
+ case id_gus :
+ scard->samplesize = 2;
+ break; /* 16-bit card */
+ case id_sbpro:
+ case id_pas:
+ case id_pasplus:
+ scard->stereo = true;
+ break; /* enable stereo */
+ default: {
+ scard->samplesize = 1;
+ scard->stereo = false;
+ }
+ }
+
+ if (scard->id != id_dac) {
+ val(paramstr(17), i, e);
+
+ if (i != 0) scard->dmairq = i;
+
+ val(paramstr(16), i, e);
+
+ if (i != 0) scard->dmachannel = i;
+ } else {
+ /* Select correct DAC */
+ scard->maxrate = 44100;
+ if (select == 11) {
+ scard->stereo = true;
+ scard->dmachannel = 1; /* Special 'mark' */
+ scard->maxrate = 60000;
+ } else if (select == 12) {
+ scard->stereo = true;
+ scard->dmachannel = 2;
+ scard->maxrate = 60000;
+ if (scard->ioport == 0) scard->ioport = 0x378;
+ } else if (select == 13) {
+ scard->dmachannel = 0;
+ scard->ioport = 0x42; /* Special 'mark' */
+ scard->maxrate = 44100;
+ }
+ }
+
+ /* writeln('Your selection: ',select,' at ',scard^.ioPort,
+ ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel);
+ readln;*/
+
+ getsoundhardware_result = 0;
+ return getsoundhardware_result;
}
tsoundcard scard;
@@ -378,247 +392,252 @@ tdds dds;
pmodule module;
tsdi_init sdi;
integer e,
-bufsize;
+ bufsize;
char ch;
boolean v86,
-vdsok;
-longint a,rate,
-tempseg;
+ vdsok;
+longint a, rate,
+ tempseg;
string answer;
pointer temp;
word flags;
word curch;
byte modulevolume;
-array<0,4,tsampleinfo> sample;
-array<0,31,word> voltable;
-
-int main(int argc, const char* argv[])
-{
-
- pio_initialize(argc, argv);
- check_params();
-
- nomusic=paramstr(13)=='0';
-
- if (! nomusic)
- {
- /* Read sound card information */
- if (getsoundhardware(&scard)==-1) exit(1);
-
-
- /* Initialize Timer Service */
- tsinit;
- atexit(&tsclose);
- if (scard.id==id_gus) {
- /* Initialize GUS player */
- #ifndef DPMI
- scard.extrafield[2]=1; /* GUS DMA transfer does not work in V86 */
- #endif
- gusinit(&scard);
- atexit(&gusclose);
-
- /* Initialize GUS heap manager */
- gushminit;
-
- /* Init CDI */
- cdiinit;
-
- /* Register GUS into CDI */
- cdiregister(&cdi_gus,0,31);
-
- /* Add GUS event player engine into Timer Service */
- tsaddroutine(&gusinterrupt,gus_timer);
- } else {
- /* Initialize Virtual DMA Specification */
- #ifndef DPMI
- vdsok=vdsinit==0;
- #else
- vdsok=false;
- #endif
-
- fillchar(mcpstrc,sizeof(tmcpstruct),0);
-
- /* Query for sampling rate */
- val(paramstr(14),a,e);
- if (a>4000) rate=a; else rate=21000;
-
- /* Query for quality */
- mcpstrc.options=mcp_quality;
-
- switch (scard.id) {
- case id_sb : {
- sdi=sdi_sb;
- scard.maxrate=22000;
- }
- break;
- case id_sbpro : {
- sdi=sdi_sbpro;
- scard.maxrate=22000;
- }
- break;
- case id_pas:
- case id_pasplus:
- case id_pas16 : {
- sdi=sdi_pas;
- scard.maxrate=44100;
- }
- break;
- case id_sb16 : {
- sdi=sdi_sb16;
- scard.maxrate=44100;
- }
- break;
- case id_aria : {
- sdi=sdi_aria;
- scard.maxrate=44100;
- }
- break;
- case id_wss : {
- sdi=sdi_wss;
- scard.maxrate=48000;
- }
- break;
- #ifndef DPMI
- case id_dac : sdi=sdi_dac; break; /* Only available in real mode */
- #endif
- }
-
- mcpinitsounddevice(sdi,&scard);
- a=mcp_tablesize;
- mcpstrc.reqsize=0;
-
- /* Calculate mixing buffer size */
- bufsize=(longint)(2800*(integer)(scard.samplesize) << (byte)(scard.stereo))*
- (longint)(rate) / (longint)(22000);
- mcpstrc.reqsize=0;
- if ((mcpstrc.options & mcp_quality)>0)
- if (scard.samplesize==1) a += mcp_qualitysize; else
- a=mcp_tablesize16+mcp_qualitysize16;
- if ((longint)(bufsize)+(longint)(a)>65500) bufsize=longint(65500)-a;
-
- #ifdef DPMI
- dpmiversion((byte)(e),(byte)(e),(byte)(e),flags);
- v86=(flags & 2)==0;
- #endif
-
- /* Allocate volume table + mixing buffer */
- #ifdef DPMI
-
- /* In the V86 mode, the buffer must be allocated below 1M */
- if (v86) {
- tempseg=0;
- dpmiallocdos((a+longint(bufsize)) / longint(16)+longint(1),flags,(word)(tempseg));
- } else {
- #endif
- getmem(temp,a+longint(bufsize));
- if (temp==nil) exit(2);
- #ifdef DPMI
- tempseg=seg(temp);
- }
- #else
- tempseg=seg(temp)+ofs(temp) / 16+1;
- #endif
- mcpstrc.bufferseg=tempseg;
- mcpstrc.bufferphysical=-1;
-
- if (vdsok && (scard.id!=id_dac)) {
- dds.size=bufsize;
- dds.segment=tempseg;
- dds.offset=0;
-
- /* Lock DMA buffer if VDS present */
- if (vdslockdma(&dds)==0) mcpstrc.bufferphysical=dds.address;
- }
- if (mcpstrc.bufferphysical==-1)
- #ifdef DPMI
- mcpstrc.bufferphysical=dpmigetlinearaddr(tempseg);
- #else
- mcpstrc.bufferphysical=(longint)(tempseg) << 4;
- #endif
-
- mcpstrc.buffersize=bufsize;
- mcpstrc.samplingrate=rate;
- /* Initialize Multi Channel Player */
- if (mcpinit(&mcpstrc)!=0) exit(3);
- atexit(&mcpclose);
-
- /* Initialize Channel Distributor */
- cdiinit;
-
- /* Register MCP into CDI*/
- cdiregister(&cdi_mcp,0,31);
- }
-
- /* Try to initialize AMP */
- if (ampinit(0)!=0) exit(3);
- atexit(&ampclose);
-
- /* Hook AMP player routine into Timer Service */
- tsaddroutine(&ampinterrupt,amp_timer);
-
- #ifndef DPMI
- /* If using DAC, then adjust DAC timer */
- if (scard.id==id_dac) setdactimer(tsgettimerrate);
- #endif
-
- if (scard.id!=id_gus) mcpstartvoice; else gusstartvoice;
-
- /* Load an example AMF */
- module=amploadmod("glover.mod",0);
- if (module==nil) exit(4);
-
- /* Is it MCP, Quality mode and 16-bit card? */
- if ((scard.id!=id_gus) && ((mcpstrc.options & mcp_quality)>0)
- && (scard.samplesize==2)) {
- /* Open module+2 channels with amplified volumetable (4.7 gain) */
- for( a=1; a <= 32; a ++) voltable[a-longint(1)]=a*longint(150) / longint(32);
- cdisetupchannels(0,module->channelcount+2,&voltable);
- } else {
- /* Open module+2 channels with regular volumetable */
- cdisetupchannels(0,module->channelcount+2,nil);
- }
-
- curch=module->channelcount;
- modulevolume=64;
-
- /***/ ampplaymodule(module,0);
- }
-
- setupgraphics();
-
- randseed=177; checkbreak=false;
-
- load_text();
-
- this_line=1;
-
- graphmode(0xd);
- loadfont();
-
- next_bitline=17;
- displaycounter=0;
-
- cut_out_time=333;
-
- setallpalette(our_palette);
+array<0, 4, tsampleinfo> sample;
+array<0, 31, word> voltable;
+
+int main(int argc, const char *argv[]) {
+
+ pio_initialize(argc, argv);
+ check_params();
+
+ nomusic = paramstr(13) == '0';
+
+ if (! nomusic) {
+ /* Read sound card information */
+ if (getsoundhardware(&scard) == -1) exit(1);
+
+
+ /* Initialize Timer Service */
+ tsinit;
+ atexit(&tsclose);
+ if (scard.id == id_gus) {
+ /* Initialize GUS player */
+#ifndef DPMI
+ scard.extrafield[2] = 1; /* GUS DMA transfer does not work in V86 */
+#endif
+ gusinit(&scard);
+ atexit(&gusclose);
+
+ /* Initialize GUS heap manager */
+ gushminit;
+
+ /* Init CDI */
+ cdiinit;
+
+ /* Register GUS into CDI */
+ cdiregister(&cdi_gus, 0, 31);
+
+ /* Add GUS event player engine into Timer Service */
+ tsaddroutine(&gusinterrupt, gus_timer);
+ } else {
+ /* Initialize Virtual DMA Specification */
+#ifndef DPMI
+ vdsok = vdsinit == 0;
+#else
+ vdsok = false;
+#endif
+
+ fillchar(mcpstrc, sizeof(tmcpstruct), 0);
+
+ /* Query for sampling rate */
+ val(paramstr(14), a, e);
+ if (a > 4000) rate = a;
+ else rate = 21000;
+
+ /* Query for quality */
+ mcpstrc.options = mcp_quality;
+
+ switch (scard.id) {
+ case id_sb : {
+ sdi = sdi_sb;
+ scard.maxrate = 22000;
+ }
+ break;
+ case id_sbpro : {
+ sdi = sdi_sbpro;
+ scard.maxrate = 22000;
+ }
+ break;
+ case id_pas:
+ case id_pasplus:
+ case id_pas16 : {
+ sdi = sdi_pas;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_sb16 : {
+ sdi = sdi_sb16;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_aria : {
+ sdi = sdi_aria;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_wss : {
+ sdi = sdi_wss;
+ scard.maxrate = 48000;
+ }
+ break;
+#ifndef DPMI
+ case id_dac :
+ sdi = sdi_dac;
+ break; /* Only available in real mode */
+#endif
+ }
+
+ mcpinitsounddevice(sdi, &scard);
+ a = mcp_tablesize;
+ mcpstrc.reqsize = 0;
+
+ /* Calculate mixing buffer size */
+ bufsize = (longint)(2800 * (integer)(scard.samplesize) << (byte)(scard.stereo)) *
+ (longint)(rate) / (longint)(22000);
+ mcpstrc.reqsize = 0;
+ if ((mcpstrc.options & mcp_quality) > 0)
+ if (scard.samplesize == 1) a += mcp_qualitysize;
+ else
+ a = mcp_tablesize16 + mcp_qualitysize16;
+ if ((longint)(bufsize) + (longint)(a) > 65500) bufsize = longint(65500) - a;
+
+#ifdef DPMI
+ dpmiversion((byte)(e), (byte)(e), (byte)(e), flags);
+ v86 = (flags & 2) == 0;
+#endif
+
+ /* Allocate volume table + mixing buffer */
+#ifdef DPMI
+
+ /* In the V86 mode, the buffer must be allocated below 1M */
+ if (v86) {
+ tempseg = 0;
+ dpmiallocdos((a + longint(bufsize)) / longint(16) + longint(1), flags, (word)(tempseg));
+ } else {
+#endif
+ getmem(temp, a + longint(bufsize));
+ if (temp == nil) exit(2);
+#ifdef DPMI
+ tempseg = seg(temp);
+ }
+#else
+ tempseg = seg(temp) + ofs(temp) / 16 + 1;
+#endif
+ mcpstrc.bufferseg = tempseg;
+ mcpstrc.bufferphysical = -1;
+
+ if (vdsok && (scard.id != id_dac)) {
+ dds.size = bufsize;
+ dds.segment = tempseg;
+ dds.offset = 0;
+
+ /* Lock DMA buffer if VDS present */
+ if (vdslockdma(&dds) == 0) mcpstrc.bufferphysical = dds.address;
+ }
+ if (mcpstrc.bufferphysical == -1)
+#ifdef DPMI
+ mcpstrc.bufferphysical = dpmigetlinearaddr(tempseg);
+#else
+ mcpstrc.bufferphysical = (longint)(tempseg) << 4;
+#endif
+
+ mcpstrc.buffersize = bufsize;
+ mcpstrc.samplingrate = rate;
+ /* Initialize Multi Channel Player */
+ if (mcpinit(&mcpstrc) != 0) exit(3);
+ atexit(&mcpclose);
+
+ /* Initialize Channel Distributor */
+ cdiinit;
+
+ /* Register MCP into CDI*/
+ cdiregister(&cdi_mcp, 0, 31);
+ }
+
+ /* Try to initialize AMP */
+ if (ampinit(0) != 0) exit(3);
+ atexit(&ampclose);
+
+ /* Hook AMP player routine into Timer Service */
+ tsaddroutine(&ampinterrupt, amp_timer);
+
+#ifndef DPMI
+ /* If using DAC, then adjust DAC timer */
+ if (scard.id == id_dac) setdactimer(tsgettimerrate);
+#endif
+
+ if (scard.id != id_gus) mcpstartvoice;
+ else gusstartvoice;
+
+ /* Load an example AMF */
+ module = amploadmod("glover.mod", 0);
+ if (module == nil) exit(4);
+
+ /* Is it MCP, Quality mode and 16-bit card? */
+ if ((scard.id != id_gus) && ((mcpstrc.options & mcp_quality) > 0)
+ && (scard.samplesize == 2)) {
+ /* Open module+2 channels with amplified volumetable (4.7 gain) */
+ for (a = 1; a <= 32; a ++) voltable[a - longint(1)] = a * longint(150) / longint(32);
+ cdisetupchannels(0, module->channelcount + 2, &voltable);
+ } else {
+ /* Open module+2 channels with regular volumetable */
+ cdisetupchannels(0, module->channelcount + 2, nil);
+ }
+
+ curch = module->channelcount;
+ modulevolume = 64;
+
+ /***/ ampplaymodule(module, 0);
+ }
+
+ setupgraphics();
+
+ randseed = 177;
+ checkbreak = false;
+
+ load_text();
+
+ this_line = 1;
+
+ graphmode(0xd);
+ loadfont();
+
+ next_bitline = 17;
+ displaycounter = 0;
- starry_starry_night();
+ cut_out_time = 333;
+
+ setallpalette(our_palette);
- while ((cut_out_time>0) && (! keypressed()))
- {
+ starry_starry_night();
+
+ while ((cut_out_time > 0) && (! keypressed())) {
- *skellern=0;
+ *skellern = 0;
- do_next_line();
+ do_next_line();
- displaycounter += 1;
+ displaycounter += 1;
- do {; } while (!(*skellern>0));
- }
+ do {
+ ;
+ } while (!(*skellern > 0));
+ }
- if (! nomusic) ampstopmodule;
- graphmode(3);
- return EXIT_SUCCESS;
+ if (! nomusic) ampstopmodule;
+ graphmode(3);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/ints.cpp b/engines/avalanche/ints.cpp
index a14ee55618..f15e68bef6 100644
--- a/engines/avalanche/ints.cpp
+++ b/engines/avalanche/ints.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -36,23 +36,25 @@ void() old1b;
boolean quicko;
-void new1b() /* interrupt; */
-{;
- quicko=true;
+void new1b() { /* interrupt; */
+ ;
+ quicko = true;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- getintvec(0x1b,&old1b);
- setintvec(0x1b,addr(new1b()));
- quicko=false;
- do {; } while (!quicko);
- setintvec(0x1b,&old1b);
-/* r.ah:=$02; intr($16,r);
- writeln(r.al and 12); { Only checks Ctrl and Alt. Both on = 12. }
- until false;*/
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ getintvec(0x1b, &old1b);
+ setintvec(0x1b, addr(new1b()));
+ quicko = false;
+ do {
+ ;
+ } while (!quicko);
+ setintvec(0x1b, &old1b);
+ /* r.ah:=$02; intr($16,r);
+ writeln(r.al and 12); { Only checks Ctrl and Alt. Both on = 12. }
+ until false;*/
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/joysetup.cpp b/engines/avalanche/joysetup.cpp
index 1ebbc4fb66..7569199d33 100644
--- a/engines/avalanche/joysetup.cpp
+++ b/engines/avalanche/joysetup.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,93 +33,107 @@
namespace Avalanche {
struct joysetup {
- word xmid,ymid,xmin,ymin,xmax,ymax;
- byte centre; /* Size of centre in tenths */
+ word xmid, ymid, xmin, ymin, xmax, ymax;
+ byte centre; /* Size of centre in tenths */
};
joysetup js;
file<joysetup> jf;
-boolean detect()
-{
- word x,y,xo,yo;
- byte count;
-boolean detect_result;
-;
- count=0;
- if (joystickpresent)
- {;
- detect_result=true;
- return detect_result;
- }
- readjoya(xo,yo);
- do {
- if (count<7) count += 1; /* Take advantage of "flutter" */
- if (count==6)
- {;
- output << "The Bios says you don't have a joystick. However, it's often wrong" << NL;
- output << "about such matters. So, do you? If you do, move joystick A to" << NL;
- output << "continue. If you don't, press any key to cancel." << NL;
- }
- readjoya(x,y);
- } while (!((keypressed()) | (x!=xo) || (y!=yo)));
- detect_result=~ keypressed();
-return detect_result;
+boolean detect() {
+ word x, y, xo, yo;
+ byte count;
+ boolean detect_result;
+ ;
+ count = 0;
+ if (joystickpresent) {
+ ;
+ detect_result = true;
+ return detect_result;
+ }
+ readjoya(xo, yo);
+ do {
+ if (count < 7) count += 1; /* Take advantage of "flutter" */
+ if (count == 6) {
+ ;
+ output << "The Bios says you don't have a joystick. However, it's often wrong" << NL;
+ output << "about such matters. So, do you? If you do, move joystick A to" << NL;
+ output << "continue. If you don't, press any key to cancel." << NL;
+ }
+ readjoya(x, y);
+ } while (!((keypressed()) | (x != xo) || (y != yo)));
+ detect_result = ~ keypressed();
+ return detect_result;
}
-void display()
-{;
- {;
- gotoxy(20,10); output << "X min: " << js.xmin << " ";
- gotoxy(20,11); output << "X max: " << js.xmax << " ";
- gotoxy(20,12); output << "Y min: " << js.ymin << " ";
- gotoxy(20,13); output << "Y max: " << js.ymax << " ";
- }
+void display() {
+ ;
+ {
+ ;
+ gotoxy(20, 10);
+ output << "X min: " << js.xmin << " ";
+ gotoxy(20, 11);
+ output << "X max: " << js.xmax << " ";
+ gotoxy(20, 12);
+ output << "Y min: " << js.ymin << " ";
+ gotoxy(20, 13);
+ output << "Y max: " << js.ymax << " ";
+ }
}
-void getmaxmin()
-{
- word x,y;
-;
- output << "Rotate the joystick around in a circle, as far from the centre as it" << NL;
- output << "can get. Then click a button." << NL;
- {;
- js.xmax=0; js.xmin=maxint;
- js.ymax=0; js.ymin=maxint;
- }
- do {
- readjoya(x,y);
- {;
- if (x<js.xmin) js.xmin=x;
- if (y<js.ymin) js.ymin=y;
- if (x>js.xmax) js.xmax=x;
- if (y>js.ymax) js.ymax=y;
- display();
- }
- } while (!(buttona1 | buttona2));
- do {; } while (!(~ (buttona1 | buttona2)));
- output << NL;
- output << "Thank you. Now please centre your joystick and hit a button." << NL;
- do {; } while (!(buttona1 | buttona2));
- readjoya(js.xmid,js.ymid);
+void getmaxmin() {
+ word x, y;
+ ;
+ output << "Rotate the joystick around in a circle, as far from the centre as it" << NL;
+ output << "can get. Then click a button." << NL;
+ {
+ ;
+ js.xmax = 0;
+ js.xmin = maxint;
+ js.ymax = 0;
+ js.ymin = maxint;
+ }
+ do {
+ readjoya(x, y);
+ {
+ ;
+ if (x < js.xmin) js.xmin = x;
+ if (y < js.ymin) js.ymin = y;
+ if (x > js.xmax) js.xmax = x;
+ if (y > js.ymax) js.ymax = y;
+ display();
+ }
+ } while (!(buttona1 | buttona2));
+ do {
+ ;
+ } while (!(~(buttona1 | buttona2)));
+ output << NL;
+ output << "Thank you. Now please centre your joystick and hit a button." << NL;
+ do {
+ ;
+ } while (!(buttona1 | buttona2));
+ readjoya(js.xmid, js.ymid);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- textattr=2;
- clrscr;
- output << "Avalot joystick setup routine- by TT. Thanks go to David B. Howorth." << NL;
- output << NL;
- if (detect()) output << "You've got a joystick!" << NL; else return 0;
- getmaxmin();
- do {
- output << "Centring factor\? (3-9)";
- input >> js.centre >> NL;
- } while (!(set::of(range(1,9), eos).has(js.centre)));
- assign(jf,"v:joytmp.dat");
- rewrite(jf); jf << js; close(jf); /* write it all out to disk. */
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ textattr = 2;
+ clrscr;
+ output << "Avalot joystick setup routine- by TT. Thanks go to David B. Howorth." << NL;
+ output << NL;
+ if (detect()) output << "You've got a joystick!" << NL;
+ else return 0;
+ getmaxmin();
+ do {
+ output << "Centring factor\? (3-9)";
+ input >> js.centre >> NL;
+ } while (!(set::of(range(1, 9), eos).has(js.centre)));
+ assign(jf, "v:joytmp.dat");
+ rewrite(jf);
+ jf << js;
+ close(jf); /* write it all out to disk. */
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/joystick.cpp b/engines/avalanche/joystick.cpp
index 8ebea36325..8b9496ccf1 100644
--- a/engines/avalanche/joystick.cpp
+++ b/engines/avalanche/joystick.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -61,7 +61,7 @@ Hill Road, Portland, Oregon 97219.
namespace Avalanche {
-typedef void(*readjoyproc)(byte a,byte b,word& c,word& d);
+typedef void(*readjoyproc)(byte a, byte b, word &c, word &d);
typedef boolean(*buttonfunc)(byte a);
readjoyproc readjoy;
@@ -70,141 +70,142 @@ registers reg;
/*----------------------------- private routines ----------------------------*/
-boolean newbios()
-{
- char decadechar /*absolute $F000:$FFFB*/;
- char yearchar /*absolute $F000:$FFFC*/;
+boolean newbios() {
+ char decadechar /*absolute $F000:$FFFB*/;
+ char yearchar /*absolute $F000:$FFFC*/;
- boolean newbios_result;
- newbios_result = (set::of('9','0', eos).has(decadechar)) /*an optimistic view of software life*/
- || ((decadechar == '8') && (set::of(range('4','9'), eos).has(yearchar)));
- return newbios_result;
+ boolean newbios_result;
+ newbios_result = (set::of('9', '0', eos).has(decadechar)) /*an optimistic view of software life*/
+ || ((decadechar == '8') && (set::of(range('4', '9'), eos).has(yearchar)));
+ return newbios_result;
}
/*$F+*/
-void oldreadjoy(byte xbit,byte ybit, word& xaxis, word& yaxis)
-{;
-/*
-inline(
- $BA/$01/$02/ {mov dx, 201h ;load dx with joystick port address }
- $C4/$BE/>XAxis/ {les di, XAxis[bp] ;load es with segment and di w/offset }
- $8A/$66/<xbit/ {mov ah, xbit[bp] ;set appropriate bit in ah }
- $E8/$0C/$00/ {call SUBR }
- $C4/$BE/>YAxis/ {les di, YAxis[bp] }
- $8A/$66/<ybit/ {mov ah, ybit[bp] ;set appropriate bit in ah }
- $E8/$02/$00/ {call SUBR }
- $EB/$1D/ {jump short END ;we're done! }
- {SUBR: ;first wait, if necessary, until }
- { ; relevant bit is 0: }
- $B9/$FF/$FF/ { mov cx, 0ffffh ;fill cx to the brim }
- $EC/ {WAIT: in al, dx ;get input from port 201h }
- $84/$E0/ { test al, ah ;is the relevant bit 0 yet? }
- $E0/$FB/ { loopne WAIT ;if not, go back to wait }
-
- $B9/$FF/$FF/ { mov cx, 0ffffh ;fill cx to the brim again }
- $FA/ { cli ;disable interrupts }
- $EE/ { out dx, al ;'nudge' port 201h }
- $EC/ {AGAIN: in al, dx ;get input from port 201h }
- $84/$E0/ { test al, ah ;is the relevant bit 0 yet? }
- $E0/$FB/ { loopne AGAIN ;if not, go back to AGAIN }
- $FB/ { sti ;reenable interrupts }
- $F7/$D9/ { neg cx ;negative cx }
- $81/$C1/$FF/$FF/{ add cx, 0ffffh ;add 0ffffh back to value in cx }
- $26/ { es: ;segment override }
- $89/$0D/ { mov [di], cx ;store value of cx in location }
- { ; of relevant variable }
- $C3); { ret }
- {END: }
-*/
+void oldreadjoy(byte xbit, byte ybit, word &xaxis, word &yaxis) {
+ ;
+ /*
+ inline(
+ $BA/$01/$02/ {mov dx, 201h ;load dx with joystick port address }
+ $C4/$BE/>XAxis/ {les di, XAxis[bp] ;load es with segment and di w/offset }
+ $8A/$66/<xbit/ {mov ah, xbit[bp] ;set appropriate bit in ah }
+ $E8/$0C/$00/ {call SUBR }
+ $C4/$BE/>YAxis/ {les di, YAxis[bp] }
+ $8A/$66/<ybit/ {mov ah, ybit[bp] ;set appropriate bit in ah }
+ $E8/$02/$00/ {call SUBR }
+ $EB/$1D/ {jump short END ;we're done! }
+ {SUBR: ;first wait, if necessary, until }
+ { ; relevant bit is 0: }
+ $B9/$FF/$FF/ { mov cx, 0ffffh ;fill cx to the brim }
+ $EC/ {WAIT: in al, dx ;get input from port 201h }
+ $84/$E0/ { test al, ah ;is the relevant bit 0 yet? }
+ $E0/$FB/ { loopne WAIT ;if not, go back to wait }
+
+ $B9/$FF/$FF/ { mov cx, 0ffffh ;fill cx to the brim again }
+ $FA/ { cli ;disable interrupts }
+ $EE/ { out dx, al ;'nudge' port 201h }
+ $EC/ {AGAIN: in al, dx ;get input from port 201h }
+ $84/$E0/ { test al, ah ;is the relevant bit 0 yet? }
+ $E0/$FB/ { loopne AGAIN ;if not, go back to AGAIN }
+ $FB/ { sti ;reenable interrupts }
+ $F7/$D9/ { neg cx ;negative cx }
+ $81/$C1/$FF/$FF/{ add cx, 0ffffh ;add 0ffffh back to value in cx }
+ $26/ { es: ;segment override }
+ $89/$0D/ { mov [di], cx ;store value of cx in location }
+ { ; of relevant variable }
+ $C3); { ret }
+ {END: }
+ */
} /* OldReadJoy */
-void newreadjoy(byte which, byte meaningless, word& xaxis, word& yaxis)
-{
- reg.ah = 0x84;
- reg.dx = 1;
- intr(0x15,reg);
- if (which == 1)
- {
- xaxis = reg.ax;
- yaxis = reg.bx;
- }
- else {
- xaxis = reg.cx;
- yaxis = reg.dx;
- }
+void newreadjoy(byte which, byte meaningless, word &xaxis, word &yaxis) {
+ reg.ah = 0x84;
+ reg.dx = 1;
+ intr(0x15, reg);
+ if (which == 1) {
+ xaxis = reg.ax;
+ yaxis = reg.bx;
+ } else {
+ xaxis = reg.cx;
+ yaxis = reg.dx;
+ }
}
-boolean oldbutton(byte mask)
-{ boolean oldbutton_result;
- oldbutton_result = ((port[0x201] & mask) == 0); return oldbutton_result;
+boolean oldbutton(byte mask) {
+ boolean oldbutton_result;
+ oldbutton_result = ((port[0x201] & mask) == 0);
+ return oldbutton_result;
}
-boolean newbutton(byte mask)
-{
- boolean newbutton_result;
- reg.ah = 0x84;
- reg.dx = 0;
- intr(0x15,reg);
- newbutton_result = ((reg.al & mask) == 0);
- return newbutton_result;
+boolean newbutton(byte mask) {
+ boolean newbutton_result;
+ reg.ah = 0x84;
+ reg.dx = 0;
+ intr(0x15, reg);
+ newbutton_result = ((reg.al & mask) == 0);
+ return newbutton_result;
}
/*$F-*/
/*----------------------------- public routines -----------------------------*/
-void readjoya(word& xaxis, word& yaxis)
-{ readjoy(1,2,xaxis, yaxis); }
+void readjoya(word &xaxis, word &yaxis) {
+ readjoy(1, 2, xaxis, yaxis);
+}
-void readjoyb(word& xaxis, word& yaxis)
-{ readjoy(4,8,xaxis, yaxis); }
+void readjoyb(word &xaxis, word &yaxis) {
+ readjoy(4, 8, xaxis, yaxis);
+}
-boolean buttona1()
-{ boolean buttona1_result;
- buttona1_result = button(0x10); return buttona1_result;
+boolean buttona1() {
+ boolean buttona1_result;
+ buttona1_result = button(0x10);
+ return buttona1_result;
}
-boolean buttona2()
-{ boolean buttona2_result;
- buttona2_result = button(0x20); return buttona2_result;
+boolean buttona2() {
+ boolean buttona2_result;
+ buttona2_result = button(0x20);
+ return buttona2_result;
}
-boolean buttonb1()
-{ boolean buttonb1_result;
- buttonb1_result = button(0x40); return buttonb1_result;
+boolean buttonb1() {
+ boolean buttonb1_result;
+ buttonb1_result = button(0x40);
+ return buttonb1_result;
}
-boolean buttonb2()
-{ boolean buttonb2_result;
- buttonb2_result = button(0x80); return buttonb2_result;
+boolean buttonb2() {
+ boolean buttonb2_result;
+ buttonb2_result = button(0x80);
+ return buttonb2_result;
}
-boolean joystickpresent()
-{
- boolean joystickpresent_result;
- intr(0x11,reg);
- joystickpresent_result = ((reg.ax & 0x1000) != 0);
- return joystickpresent_result;
+boolean joystickpresent() {
+ boolean joystickpresent_result;
+ intr(0x11, reg);
+ joystickpresent_result = ((reg.ax & 0x1000) != 0);
+ return joystickpresent_result;
}
/*------------------------------ initialization -----------------------------*/
class unit_joystick_initialize {
- public: unit_joystick_initialize();
+public:
+ unit_joystick_initialize();
};
static unit_joystick_initialize joystick_constructor;
unit_joystick_initialize::unit_joystick_initialize() {
- if (newbios())
- { /* use BIOS routines */
- readjoy = newreadjoy;
- button = newbutton;
- }
- else { /* use work-around routines */
- readjoy = oldreadjoy;
- button = oldbutton;
- }
+ if (newbios()) {
+ /* use BIOS routines */
+ readjoy = newreadjoy;
+ button = newbutton;
+ } else { /* use work-around routines */
+ readjoy = oldreadjoy;
+ button = oldbutton;
+ }
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/joystick.h b/engines/avalanche/joystick.h
index 2cbcd3c455..7572ef3036 100644
--- a/engines/avalanche/joystick.h
+++ b/engines/avalanche/joystick.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,10 +30,10 @@
namespace Avalanche {
-void readjoya(word& xaxis, word& yaxis);
+void readjoya(word &xaxis, word &yaxis);
/* Reads the X and Y coordinates of Joystick A. */
-void readjoyb(word& xaxis, word& yaxis);
+void readjoyb(word &xaxis, word &yaxis);
/* Reads the X and Y coordinates of Joystick B. */
boolean buttona1();
diff --git a/engines/avalanche/loading.cpp b/engines/avalanche/loading.cpp
index 3f161eda8b..234b5773b8 100644
--- a/engines/avalanche/loading.cpp
+++ b/engines/avalanche/loading.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,23 +29,29 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
byte a /*absolute $A000:1200*/;
byte bit;
untyped_file f;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- assign(f,"c:\\sleep\\test.ega"); reset(f,1);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,12000);
- }
- close(f);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ assign(f, "c:\\sleep\\test.ega");
+ reset(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 12000);
+ }
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/logger.cpp b/engines/avalanche/logger.cpp
index 7da976d45c..06c2f2969a 100644
--- a/engines/avalanche/logger.cpp
+++ b/engines/avalanche/logger.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -59,14 +59,14 @@ const char divide[] = "--- oOo ---";
*/
- /* L'jet codes: */
+/* L'jet codes: */
-const string startwith = string('\33')+'\50'+"10J"+'\130';
-const string endwith = string('\33')+'\105';
-const string italic = string('\33')+'\50'+'\163'+'\61'+'\123'; /* switches italics on... */
-const string italic_off = string('\33')+'\50'+'\163'+'\60'+'\123'; /* and off. */
-const string emph_on = string('\33')+'\50'+'\163'+'\63'+'\102';
-const string emph_off = string('\33')+'\50'+'\163'+'\60'+'\102';
+const string startwith = string('\33') + '\50' + "10J" + '\130';
+const string endwith = string('\33') + '\105';
+const string italic = string('\33') + '\50' + '\163' + '\61' + '\123'; /* switches italics on... */
+const string italic_off = string('\33') + '\50' + '\163' + '\60' + '\123'; /* and off. */
+const string emph_on = string('\33') + '\50' + '\163' + '\63' + '\102';
+const string emph_off = string('\33') + '\50' + '\163' + '\60' + '\102';
const string double_width = emph_on; /* There IS no double-width. */
const string double_off = emph_off; /* So we'll have to use bold. */
const string quote = 'ª';
@@ -77,160 +77,165 @@ const integer divide_indent = 30;
string scroll_line;
byte scroll_line_length;
-void centre(byte size,byte x) /* Prints req'd number of spaces. */
-{
- byte fv;
-;
- if (~ logging) return;
- for( fv=1; fv <= size-(x / 2); fv ++)
- output << logfile << ' ';
-}
-
-void log_setup(string name, boolean printing) /* Sets up. */
-{;
- assign(logfile,name);
- rewrite(logfile);
- output << logfile << startwith;
- log_epson=printing;
- logging=true;
-
- if (! printing) { quote='"'; unquote='"'; copyright="(c)"; }
-}
-
-void log_divider() /* Prints the divider sign. */
-{
- byte fv;
-;
- if (~ logging) return;
- if (log_epson)
- {;
- output << logfile << string(' ')+double_width;
- for( fv=1; fv <= divide_indent; fv ++) output << logfile << ' ';
- output << logfile << string(' ')+double_off;
- } else
- for( fv=1; fv <= 36; fv ++) output << logfile << ' ';
- output << logfile << divide << NL;
-}
-
-void log_command(string x) /* Prints a command */
-{;
- if (~ logging) return;
- if (log_epson)
- output << logfile << double_width+'>'+double_off+' '+italic+x+italic_off << NL;
- else
- output << logfile << string("> ")+x << NL;
-}
-
-void log_addstuff(string x)
-{;
- if (~ logging) return;
- scroll_line=scroll_line+x;
-}
-
-void log_scrollchar(string x) /* print one character */
-{
- varying_string<2> z;
-;
- if (~ logging) return;
- switch (x[1]) {
- case '`': z=quote; break; /* Open quotes: "66" */
- case '"': z=unquote; break; /* Close quotes: "99" */
- case '\357': z=copyright; break; /* Copyright sign. */
- default: z=x;
- }
- log_addstuff(z);
- scroll_line_length += length(z);
-}
-
-void log_italic()
-{;
- if (~ logging) return;
- if (log_epson)
- log_addstuff(italic);
- else
- log_addstuff("*");
-}
-
-void log_roman()
-{;
- if (~ logging) return;
- if (log_epson)
- log_addstuff(italic_off);
- else
- log_addstuff("*");
-}
-
-void log_epsonroman() /* This only sends the Roman code if you're on Epson.*/
-{;
- if (~ logging) return;
- if (log_epson) log_addstuff(italic_off);
-}
-
-void log_scrollline() /* Set up a line for the scroll driver */
-{;
- scroll_line_length=0;
- scroll_line="";
-}
-
-void log_scrollendline(boolean centred)
-{
- byte x,fv;
-;
- if (~ logging) return;
- x=17;
- if (centred) x += (50-scroll_line_length) / 2;
- for( fv=1; fv <= x; fv ++) output << logfile << ' ';
- output << logfile << scroll_line << NL;
-}
-
-void log_bubbleline(byte linenum,byte whom, string x)
-{
- byte fv;
-;
- if (~ logging) return;
- if (linenum==1)
- {;
- for( fv=1; fv <= 15; fv ++) output << logfile << ' ';
- output << logfile << italic+tr[whom].a.name+": "+italic_off+x << NL;
- } else
- {;
- for( fv=1; fv <= 17; fv ++) output << logfile << ' ';
- output << logfile << x << NL;
- }
-}
-
-void log_newline()
-{;
- if (logging) output << logfile << NL;
-}
-
-void log_newroom(string where)
-{
- byte fv;
-;
- if (~ logging) return;
- for( fv=1; fv <= 20; fv ++) output << logfile << ' ';
- if (log_epson) output << logfile << emph_on;
- output << logfile << string('(')+where+')';
- if (log_epson) output << logfile << emph_off;
- output << logfile << NL;
+void centre(byte size, byte x) { /* Prints req'd number of spaces. */
+ byte fv;
+ ;
+ if (~ logging) return;
+ for (fv = 1; fv <= size - (x / 2); fv ++)
+ output << logfile << ' ';
+}
+
+void log_setup(string name, boolean printing) { /* Sets up. */
+ ;
+ assign(logfile, name);
+ rewrite(logfile);
+ output << logfile << startwith;
+ log_epson = printing;
+ logging = true;
+
+ if (! printing) {
+ quote = '"';
+ unquote = '"';
+ copyright = "(c)";
+ }
+}
+
+void log_divider() { /* Prints the divider sign. */
+ byte fv;
+ ;
+ if (~ logging) return;
+ if (log_epson) {
+ ;
+ output << logfile << string(' ') + double_width;
+ for (fv = 1; fv <= divide_indent; fv ++) output << logfile << ' ';
+ output << logfile << string(' ') + double_off;
+ } else
+ for (fv = 1; fv <= 36; fv ++) output << logfile << ' ';
+ output << logfile << divide << NL;
+}
+
+void log_command(string x) { /* Prints a command */
+ ;
+ if (~ logging) return;
+ if (log_epson)
+ output << logfile << double_width + '>' + double_off + ' ' + italic + x + italic_off << NL;
+ else
+ output << logfile << string("> ") + x << NL;
+}
+
+void log_addstuff(string x) {
+ ;
+ if (~ logging) return;
+ scroll_line = scroll_line + x;
+}
+
+void log_scrollchar(string x) { /* print one character */
+ varying_string<2> z;
+ ;
+ if (~ logging) return;
+ switch (x[1]) {
+ case '`':
+ z = quote;
+ break; /* Open quotes: "66" */
+ case '"':
+ z = unquote;
+ break; /* Close quotes: "99" */
+ case '\357':
+ z = copyright;
+ break; /* Copyright sign. */
+ default:
+ z = x;
+ }
+ log_addstuff(z);
+ scroll_line_length += length(z);
+}
+
+void log_italic() {
+ ;
+ if (~ logging) return;
+ if (log_epson)
+ log_addstuff(italic);
+ else
+ log_addstuff("*");
+}
+
+void log_roman() {
+ ;
+ if (~ logging) return;
+ if (log_epson)
+ log_addstuff(italic_off);
+ else
+ log_addstuff("*");
+}
+
+void log_epsonroman() { /* This only sends the Roman code if you're on Epson.*/
+ ;
+ if (~ logging) return;
+ if (log_epson) log_addstuff(italic_off);
+}
+
+void log_scrollline() { /* Set up a line for the scroll driver */
+ ;
+ scroll_line_length = 0;
+ scroll_line = "";
+}
+
+void log_scrollendline(boolean centred) {
+ byte x, fv;
+ ;
+ if (~ logging) return;
+ x = 17;
+ if (centred) x += (50 - scroll_line_length) / 2;
+ for (fv = 1; fv <= x; fv ++) output << logfile << ' ';
+ output << logfile << scroll_line << NL;
+}
+
+void log_bubbleline(byte linenum, byte whom, string x) {
+ byte fv;
+ ;
+ if (~ logging) return;
+ if (linenum == 1) {
+ ;
+ for (fv = 1; fv <= 15; fv ++) output << logfile << ' ';
+ output << logfile << italic + tr[whom].a.name + ": " + italic_off + x << NL;
+ } else {
+ ;
+ for (fv = 1; fv <= 17; fv ++) output << logfile << ' ';
+ output << logfile << x << NL;
+ }
+}
+
+void log_newline() {
+ ;
+ if (logging) output << logfile << NL;
+}
+
+void log_newroom(string where) {
+ byte fv;
+ ;
+ if (~ logging) return;
+ for (fv = 1; fv <= 20; fv ++) output << logfile << ' ';
+ if (log_epson) output << logfile << emph_on;
+ output << logfile << string('(') + where + ')';
+ if (log_epson) output << logfile << emph_off;
+ output << logfile << NL;
}
void log_aside(string what)
- /* This writes "asides" to the printer. For example, moves in Nim. */
-{;
- if (~ logging) return;
- output << logfile << " (" << italic << what << italic_off << ')' << NL;
- /* "What" is what to write. */
-}
-
-void log_score(word credit,word now)
+/* This writes "asides" to the printer. For example, moves in Nim. */
{
- byte fv;
-;
- if (~ logging) return;
- for( fv=1; fv <= 50; fv ++) output << logfile << ' ';
- output << logfile << "Score " << italic << "credit : " << credit << italic_off << " total : " << now << NL;
+ ;
+ if (~ logging) return;
+ output << logfile << " (" << italic << what << italic_off << ')' << NL;
+ /* "What" is what to write. */
+}
+
+void log_score(word credit, word now) {
+ byte fv;
+ ;
+ if (~ logging) return;
+ for (fv = 1; fv <= 50; fv ++) output << logfile << ' ';
+ output << logfile << "Score " << italic << "credit : " << credit << italic_off << " total : " << now << NL;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/logger.h b/engines/avalanche/logger.h
index 94cd9383b0..cff4336587 100644
--- a/engines/avalanche/logger.h
+++ b/engines/avalanche/logger.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -48,7 +48,7 @@ void log_scrollline(); /* Set up a line for the scroll driver */
void log_scrollendline(boolean centred);
-void log_bubbleline(byte linenum,byte whom, string x);
+void log_bubbleline(byte linenum, byte whom, string x);
void log_newline();
@@ -56,7 +56,7 @@ void log_newroom(string where);
void log_aside(string what);
-void log_score(word credit,word now);
+void log_score(word credit, word now);
} // End of namespace Avalanche.
diff --git a/engines/avalanche/lucerna.cpp b/engines/avalanche/lucerna.cpp
index 19466f4b3f..01916ce049 100644
--- a/engines/avalanche/lucerna.cpp
+++ b/engines/avalanche/lucerna.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -57,1084 +57,1240 @@
namespace Avalanche {
/*$V-*/ /*$S-*/
-boolean fxhidden; array<0,3,palettetype> fxpal;
-
-void callverb(char n)
-{
- if (n==pardon)
- {
- display(string("The f5 key lets you do a particular action in certain ")+
- "situations. However, at the moment there is nothing "+
- "assigned to it. You may press alt-A to see what the "+
- "current setting of this key is.");
- } else
- {
- weirdword=false; polite=true; verb=n;
- do_that();
- }
+boolean fxhidden;
+array<0, 3, palettetype> fxpal;
+
+void callverb(char n) {
+ if (n == pardon) {
+ display(string("The f5 key lets you do a particular action in certain ") +
+ "situations. However, at the moment there is nothing " +
+ "assigned to it. You may press alt-A to see what the " +
+ "current setting of this key is.");
+ } else {
+ weirdword = false;
+ polite = true;
+ verb = n;
+ do_that();
+ }
}
-void draw_also_lines()
-{
- byte ff;
- byte squeaky_code;
-
- switch (visible) {
- case m_virtual : { squeaky_code = 1; off_virtual(); } break;
- case m_no : squeaky_code = 2; break;
- case m_yes : { squeaky_code = 3; off(); } break;
- }
-
- setactivepage(2);
- cleardevice();
- setcolor(15); rectangle(0,45,639,160);
- for( ff=1; ff <= 50; ff ++)
- { linetype& with = lines[ff];
- if (x1!=maxint)
- {
- setcolor(with.col); line(x1,y1,x2,y2);
- }}
-
- switch (squeaky_code) {
- case 1 : on_virtual(); break;
- case 2 :; break; /* zzzz, it was off anyway */
- case 3 : on(); break;
- }
+void draw_also_lines() {
+ byte ff;
+ byte squeaky_code;
+
+ switch (visible) {
+ case m_virtual : {
+ squeaky_code = 1;
+ off_virtual();
+ }
+ break;
+ case m_no :
+ squeaky_code = 2;
+ break;
+ case m_yes : {
+ squeaky_code = 3;
+ off();
+ }
+ break;
+ }
+
+ setactivepage(2);
+ cleardevice();
+ setcolor(15);
+ rectangle(0, 45, 639, 160);
+ for (ff = 1; ff <= 50; ff ++) {
+ linetype &with = lines[ff];
+ if (x1 != maxint) {
+ setcolor(with.col);
+ line(x1, y1, x2, y2);
+ }
+ }
+
+ switch (squeaky_code) {
+ case 1 :
+ on_virtual();
+ break;
+ case 2 :
+ ;
+ break; /* zzzz, it was off anyway */
+ case 3 :
+ on();
+ break;
+ }
}
void load_also(string n);
-static untyped_file f;
+static untyped_file f;
-static string nextstring()
-{
- byte l; string x;
+static string nextstring() {
+ byte l;
+ string x;
- string nextstring_result;
- blockread(f,l,1); blockread(f,x[1],l); x[0]=chr(l); nextstring_result=x;
- return nextstring_result;
+ string nextstring_result;
+ blockread(f, l, 1);
+ blockread(f, x[1], l);
+ x[0] = chr(l);
+ nextstring_result = x;
+ return nextstring_result;
}
static void unscramble();
-static void scram1(string& x)
-{
- byte fz;
-;
- for( fz=1; fz <= length(x); fz ++)
- x[fz]=chr(ord(x[fz]) ^ 177);
+static void scram1(string &x) {
+ byte fz;
+ ;
+ for (fz = 1; fz <= length(x); fz ++)
+ x[fz] = chr(ord(x[fz]) ^ 177);
}
-static void unscramble()
-{
- byte fv,ff;
-
- for( fv=0; fv <= 30; fv ++)
- for( ff=0; ff <= 1; ff ++)
- if (also[fv][ff]!=nil)
- scram1(*also[fv][ff]);
- scram1(listen);
- scram1(flags);
-/* for fz:=1 to length(also[fv,ff]^) do
- also[fv,ff]^[fz]:=chr(ord(also[fv,ff]^[fz]) xor 177);*/
+static void unscramble() {
+ byte fv, ff;
+
+ for (fv = 0; fv <= 30; fv ++)
+ for (ff = 0; ff <= 1; ff ++)
+ if (also[fv][ff] != nil)
+ scram1(*also[fv][ff]);
+ scram1(listen);
+ scram1(flags);
+ /* for fz:=1 to length(also[fv,ff]^) do
+ also[fv,ff]^[fz]:=chr(ord(also[fv,ff]^[fz]) xor 177);*/
}
-void load_also(string n)
-{
- byte minnames; byte ff,fv;
-
-
- for( fv=0; fv <= 30; fv ++)
- for( ff=0; ff <= 1; ff ++)
- if (also[fv][ff]!=nil) { delete also[fv][ff]; also[fv][ff]=nil; }
- assign(f,string("also")+n+".avd");
-/*$I-*/ reset(f,1); /*$I+*/ if (ioresult!=0) return; /* no Also file */
- seek(f,128); blockread(f,minnames,1);
- for( fv=0; fv <= minnames; fv ++)
- {
- for( ff=0; ff <= 1; ff ++)
- {
- also[fv][ff] = new string;
- *also[fv][ff]=nextstring();
- }
- *also[fv][0]=string('\235')+*also[fv][0]+'\235';
- }
- fillchar(lines,sizeof(lines),0xff);
-
- fv=getpixel(0,0); blockread(f,fv,1);
- blockread(f,lines,sizeof(lines[1])*fv);
- blockread(f,fv,1); fillchar(peds,sizeof(peds),'\261');
- blockread(f,peds,sizeof(peds[1])*fv);
- blockread(f,numfields,1); blockread(f,fields,sizeof(fields[1])*numfields);
- blockread(f,magics,sizeof(magics));
- blockread(f,portals,sizeof(portals));
- blockread(f,flags,sizeof(flags));
- blockread(f,listen[0],1);
- blockread(f,listen[1],length(listen));
- draw_also_lines();
-
- setactivepage(1); close(f);
- unscramble();
- for( fv=0; fv <= minnames; fv ++)
- *also[fv][0]=string(',')+*also[fv][0]+',';
+void load_also(string n) {
+ byte minnames;
+ byte ff, fv;
+
+
+ for (fv = 0; fv <= 30; fv ++)
+ for (ff = 0; ff <= 1; ff ++)
+ if (also[fv][ff] != nil) {
+ delete also[fv][ff];
+ also[fv][ff] = nil;
+ }
+ assign(f, string("also") + n + ".avd");
+ /*$I-*/ reset(f, 1); /*$I+*/ if (ioresult != 0) return; /* no Also file */
+ seek(f, 128);
+ blockread(f, minnames, 1);
+ for (fv = 0; fv <= minnames; fv ++) {
+ for (ff = 0; ff <= 1; ff ++) {
+ also[fv][ff] = new string;
+ *also[fv][ff] = nextstring();
+ }
+ *also[fv][0] = string('\235') + *also[fv][0] + '\235';
+ }
+ fillchar(lines, sizeof(lines), 0xff);
+
+ fv = getpixel(0, 0);
+ blockread(f, fv, 1);
+ blockread(f, lines, sizeof(lines[1])*fv);
+ blockread(f, fv, 1);
+ fillchar(peds, sizeof(peds), '\261');
+ blockread(f, peds, sizeof(peds[1])*fv);
+ blockread(f, numfields, 1);
+ blockread(f, fields, sizeof(fields[1])*numfields);
+ blockread(f, magics, sizeof(magics));
+ blockread(f, portals, sizeof(portals));
+ blockread(f, flags, sizeof(flags));
+ blockread(f, listen[0], 1);
+ blockread(f, listen[1], length(listen));
+ draw_also_lines();
+
+ setactivepage(1);
+ close(f);
+ unscramble();
+ for (fv = 0; fv <= minnames; fv ++)
+ *also[fv][0] = string(',') + *also[fv][0] + ',';
}
-void load(byte n) /* Load2, actually */
-{
- byte a0; /*absolute $A000:800;*/
- byte a1; /*absolute $A000:17184;*/
- byte bit;
- untyped_file f; varying_string<2> xx;
- boolean was_virtual;
-
- was_virtual=visible==m_virtual;
- if (was_virtual) off_virtual(); else off();
- clear_vmc();
-
- xx=strf(n); flesh_colours();
- assign(f,string("place")+xx+".avd"); reset(f,1);
- seek(f,146); blockread(f,roomname,30);
- /* Compression method byte follows this... */
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080); move(a0,a1,12080);
- }
- close(f); load_also(xx); load_chunks(xx);
-
- copy03(); bit=getpixel(0,0);
- log_newroom(roomname);
-
- if (was_virtual) on_virtual(); else on();
+void load(byte n) { /* Load2, actually */
+ byte a0; /*absolute $A000:800;*/
+ byte a1; /*absolute $A000:17184;*/
+ byte bit;
+ untyped_file f;
+ varying_string<2> xx;
+ boolean was_virtual;
+
+ was_virtual = visible == m_virtual;
+ if (was_virtual) off_virtual();
+ else off();
+ clear_vmc();
+
+ xx = strf(n);
+ flesh_colours();
+ assign(f, string("place") + xx + ".avd");
+ reset(f, 1);
+ seek(f, 146);
+ blockread(f, roomname, 30);
+ /* Compression method byte follows this... */
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ move(a0, a1, 12080);
+ }
+ close(f);
+ load_also(xx);
+ load_chunks(xx);
+
+ copy03();
+ bit = getpixel(0, 0);
+ log_newroom(roomname);
+
+ if (was_virtual) on_virtual();
+ else on();
}
-void zoomout(integer x,integer y)
-{
- integer x1,y1,x2,y2;
- byte fv;
-
- setcolor(white); setwritemode(xorput);
- setlinestyle(dottedln,0,1);
-
- for( fv=1; fv <= 20; fv ++)
- {
- x1=x-(x / 20)*fv;
- y1=y-((y-10) / 20)*fv;
- x2=x+(((639-x) / 20)*fv);
- y2=y+(((161-y) / 20)*fv);
-
- rectangle(x1,y1,x2,y2);
- delay(17);
- rectangle(x1,y1,x2,y2);
- }
- setwritemode(copyput); setlinestyle(0,0,1);
+void zoomout(integer x, integer y) {
+ integer x1, y1, x2, y2;
+ byte fv;
+
+ setcolor(white);
+ setwritemode(xorput);
+ setlinestyle(dottedln, 0, 1);
+
+ for (fv = 1; fv <= 20; fv ++) {
+ x1 = x - (x / 20) * fv;
+ y1 = y - ((y - 10) / 20) * fv;
+ x2 = x + (((639 - x) / 20) * fv);
+ y2 = y + (((161 - y) / 20) * fv);
+
+ rectangle(x1, y1, x2, y2);
+ delay(17);
+ rectangle(x1, y1, x2, y2);
+ }
+ setwritemode(copyput);
+ setlinestyle(0, 0, 1);
}
-void find_people(byte room)
-{
- char fv;
+void find_people(byte room) {
+ char fv;
- for( fv='\227'; fv <= '\262'; fv ++)
- if (whereis[fv]==room)
- {
- if (fv<'\257') him=fv; else her=fv;
- }
+ for (fv = '\227'; fv <= '\262'; fv ++)
+ if (whereis[fv] == room) {
+ if (fv < '\257') him = fv;
+ else her = fv;
+ }
}
-void exitroom(byte x)
-{
- nosound;
- forget_chunks();
- seescroll=true; /* This stops the trippancy system working over the
+void exitroom(byte x) {
+ nosound;
+ forget_chunks();
+ seescroll = true; /* This stops the trippancy system working over the
length of this procedure. */
- { dnatype& with = dna;
- switch (x) {
- case r__spludwicks: {
- lose_timer(reason_avariciustalks);
- /* He doesn't HAVE to be talking for this to work. It just deletes it IF it
- exists. */ with.avaricius_talk=0;
- }
- break;
- case r__bridge: if (with.drawbridge_open>0)
- {
- with.drawbridge_open=4; /* Fully open. */
- lose_timer(reason_drawbridgefalls);
- }
- break;
- case r__outsidecardiffcastle: lose_timer(reason_cardiffsurvey); break;
-
- case r__robins: lose_timer(reason_getting_tied_up); break;
- }}
-
- interrogation=0; /* Leaving the room cancels all the questions automatically. */
-
- seescroll=false; /* Now it can work again! */
-
- dna.last_room=dna.room;
- if (dna.room!=r__map)
- dna.last_room_not_map=dna.room;
+ {
+ dnatype &with = dna;
+ switch (x) {
+ case r__spludwicks: {
+ lose_timer(reason_avariciustalks);
+ /* He doesn't HAVE to be talking for this to work. It just deletes it IF it
+ exists. */ with.avaricius_talk = 0;
+ }
+ break;
+ case r__bridge:
+ if (with.drawbridge_open > 0) {
+ with.drawbridge_open = 4; /* Fully open. */
+ lose_timer(reason_drawbridgefalls);
+ }
+ break;
+ case r__outsidecardiffcastle:
+ lose_timer(reason_cardiffsurvey);
+ break;
+
+ case r__robins:
+ lose_timer(reason_getting_tied_up);
+ break;
+ }
+ }
+
+ interrogation = 0; /* Leaving the room cancels all the questions automatically. */
+
+ seescroll = false; /* Now it can work again! */
+
+ dna.last_room = dna.room;
+ if (dna.room != r__map)
+ dna.last_room_not_map = dna.room;
}
-void new_town() /* You've just entered a town from the map. */
-{
- standard_bar();
-
- switch (dna.room) {
- case r__outsidenottspub: /* Entry into Nottingham. */
- if ((dna.rooms[r__robins]>0) && (dna.been_tied_up) &&
- (! dna.taken_mushroom))
- dna.mushroom_growing=true;
- break;
- case r__wisewomans: /* Entry into Argent. */
- {
- if (dna.talked_to_crapulus && (! dna.lustie_is_asleep))
- {
- dna.spludwicks_here=! ((dna.rooms[r__wisewomans] % 3)==1);
- dna.crapulus_will_tell=! dna.spludwicks_here;
- } else
- {
- dna.spludwicks_here=true;
- dna.crapulus_will_tell=false;
- }
- if (dna.box_contents==wine) dna.winestate=3; /* Vinegar */
- }
- break;
- }
-
- if (dna.room!=r__outsideducks)
- {
- if ((dna.obj[onion]) && ! (dna.onion_in_vinegar))
- dna.rotten_onion=true; /* You're holding the onion */
- }
+void new_town() { /* You've just entered a town from the map. */
+ standard_bar();
+
+ switch (dna.room) {
+ case r__outsidenottspub: /* Entry into Nottingham. */
+ if ((dna.rooms[r__robins] > 0) && (dna.been_tied_up) &&
+ (! dna.taken_mushroom))
+ dna.mushroom_growing = true;
+ break;
+ case r__wisewomans: { /* Entry into Argent. */
+ if (dna.talked_to_crapulus && (! dna.lustie_is_asleep)) {
+ dna.spludwicks_here = !((dna.rooms[r__wisewomans] % 3) == 1);
+ dna.crapulus_will_tell = ! dna.spludwicks_here;
+ } else {
+ dna.spludwicks_here = true;
+ dna.crapulus_will_tell = false;
+ }
+ if (dna.box_contents == wine) dna.winestate = 3; /* Vinegar */
+ }
+ break;
+ }
+
+ if (dna.room != r__outsideducks) {
+ if ((dna.obj[onion]) && !(dna.onion_in_vinegar))
+ dna.rotten_onion = true; /* You're holding the onion */
+ }
}
-void enterroom(byte x,byte ped);
+void enterroom(byte x, byte ped);
-static void put_geida_at(byte whichped, byte& ped)
-{
- if (ped==0) return;
- tr[2].init(5,false); /* load Geida */
- apped(2,whichped);
- tr[2].call_eachstep=true;
- tr[2].eachstep=procgeida_procs;
+static void put_geida_at(byte whichped, byte &ped) {
+ if (ped == 0) return;
+ tr[2].init(5, false); /* load Geida */
+ apped(2, whichped);
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procgeida_procs;
}
-void enterroom(byte x,byte ped)
-{
+void enterroom(byte x, byte ped) {
- seescroll=true; /* This stops the trippancy system working over the
+ seescroll = true; /* This stops the trippancy system working over the
length of this procedure. */
- find_people(x);
- dna.room=x; if (ped!=0) dna.rooms[x] += 1;
-
- load(x);
-
- if ((dna.rooms[x]==0) && (! flagset('S'))) points(1);
- whereis[pavalot]=dna.room;
- if (dna.geida_follows) whereis[pgeida]=x;
- roomtime=0;
-
- { dnatype& with = dna;
- if ((with.last_room==r__map) && (with.last_room_not_map!=with.room))
- new_town();}
-
- switch (x) {
- case r__yours: if (dna.avvy_in_bed)
- {
- show_one(3);
- set_up_timer(100,procarkata_shouts,reason_arkata_shouts);
- }
- break;
-
- case r__outsideyours: if (ped>0)
- {
- if (! dna.talked_to_crapulus)
- {
-
- whereis[pcrapulus]=r__outsideyours;
- tr[2].init(8,false); /* load Crapulus */
-
- if (dna.rooms[r__outsideyours]==1)
- {
- apped(2,4); /* Start on the right-hand side of the screen. */
- tr[2].walkto(5); /* Walks up to greet you. */
- } else
- {
- apped(2,5); /* Starts where he was before. */
- tr[2].face=3;
- }
-
- tr[2].call_eachstep=true;
- tr[2].eachstep=procface_avvy; /* He always faces Avvy. */
-
- } else whereis[pcrapulus]=r__nowhere;
-
- if (dna.crapulus_will_tell)
- {
- tr[2].init(8,false);
- apped(2,2);
- tr[2].walkto(4);
- set_up_timer(20,proccrapulus_splud_out,reason_crapulus_says_spludwick_out);
- dna.crapulus_will_tell=false;
- }
- }
- break;
-
- case r__outsidespludwicks:
- if ((dna.rooms[r__outsidespludwicks]==1) && (ped==1))
- {
- set_up_timer(20,procbang,reason_explosion);
- dna.spludwicks_here=true;
- }
- break;
-
- case r__spludwicks:
- if (dna.spludwicks_here)
- {
- if (ped>0)
- {
- tr[2].init(2,false); /* load Spludwick */
- apped(2,2);
- whereis['\227']=r__spludwicks;
- }
-
- dna.dogfoodpos = 0; /* Also Spludwick pos. */
-
- tr[2].call_eachstep =true;
- tr[2].eachstep=procgeida_procs;
- } else whereis['\227']=r__nowhere;
- break;
-
- case r__brummieroad:
- {
- if (dna.geida_follows) put_geida_at(5, ped);
- if (dna.cwytalot_gone)
- {
- magics[lightred].op=nix;
- whereis[pcwytalot]=r__nowhere;
- } else
- {
- if (ped>0)
- {
- tr[2].init(4,false); /* 4=Cwytalot*/
- tr[2].call_eachstep=true;
- tr[2].eachstep=procfollow_avvy_y;
- whereis[pcwytalot]=r__brummieroad;
-
- if (dna.rooms[r__brummieroad]==1) /* First time here... */
- {
- apped(2,2); /* He appears on the right of the screen... */
- tr[2].walkto(4); /* ...and he walks up... */
- } else
- { /* You've been here before. */
- apped(2,4); /* He's standing in your way straight away... */
- tr[2].face=left;
- }
- }
- }
- }
- break;
-
- case r__argentroad:
- { dnatype& with = dna;
- if ((with.cwytalot_gone) && (! with.cwytalot_in_herts) && (ped==2) &&
- (dna.rooms[r__argentroad]>3))
- {
- tr[2].init(4,false); /* 4=Cwytalot again*/
- apped(2,1);
- tr[2].walkto(2);
- tr[2].vanishifstill=true;
- with.cwytalot_in_herts=true;
- /*whereis[#157]:=r__Nowhere;*/ /* can we fit this in? */
- set_up_timer(20,proc_cwytalot_in_herts,reason_cwytalot_in_herts);
- }}
- break;
-
- case r__bridge:
- {
- if (dna.drawbridge_open==4) /*open*/
- {
- show_one(3); /* Position of drawbridge */
- magics[green].op=nix; /* You may enter the drawbridge. */
- }
- if (dna.geida_follows) put_geida_at(ped+3, ped); /* load Geida */
- }
- break;
-
- case r__robins:
- {
- if (ped>0)
- {
- if (! dna.been_tied_up)
- { /* A welcome party... or maybe not... */
- tr[2].init(6,false);
- apped(2,2);
- tr[2].walkto(3);
- set_up_timer(36,procget_tied_up,reason_getting_tied_up);
- }
- }
-
- if (dna.been_tied_up)
- {
- whereis[probinhood]=0; whereis[pfriartuck]=0;
- }
-
- if (dna.tied_up) show_one(2);
-
- if (! dna.mushroom_growing) show_one(3);
- }
- break;
-
- case r__outsidecardiffcastle:
- {
- if (ped>0)
- switch (dna.cardiff_things) {
- case 0 : { /* You've answered NONE of his questions. */
- tr[2].init(9,false);
- apped(2,2);
- tr[2].walkto(3);
- set_up_timer(47,proccardiffsurvey,reason_cardiffsurvey);
- }
- break;
- case 5 : magics[2].op=nix; break; /* You've answered ALL his questions. => nothing happens. */
- default: { /* You've answered SOME of his questions. */
- tr[2].init(9,false);
- apped(2,3);
- tr[2].face=right;
- set_up_timer(3,proccardiff_return,reason_cardiffsurvey);
- }
- }
- if (dna.cardiff_things<5)
- interrogation=dna.cardiff_things; else interrogation=0;
- }
- break;
-
- case r__map:
- { /* You're entering the map. */
- dawn(); setactivepage(cp);
- if (ped>0) zoomout(peds[ped].x,peds[ped].y);
- setactivepage(1-cp);
-
- { dnatype& with = dna;
- if ((with.obj[wine]) && (with.winestate!=3))
- {
- dixi('q',9); /* Don't want to waste the wine! */
- with.obj[wine]=false;
- objectlist();
- }}
-
- dixi('q',69);
- }
- break;
-
- case r__catacombs:
- {
- if (set::of(0,3,5,6, eos).has(ped))
- {
- dnatype& with = dna;
-
- switch (ped) {
- case 3 : { with.cat_x=8; with.cat_y=4; } break; /* Enter from oubliette */
- case 5 : { with.cat_x=8; with.cat_y=7; } break; /* Enter from du Lustie's */
- case 6 : { with.cat_x=4; with.cat_y=1; } break; /* Enter from Geida's */
- }
- dna.enter_catacombs_from_lusties_room=true;
- catamove(ped);
- dna.enter_catacombs_from_lusties_room=false;
- }
- }
- break;
-
- case r__argentpub: {
- if (dna.wonnim) show_one(1); /* No lute by the settle. */
- dna.malagauche=0; /* Ready to boot Malagauche */
- if (dna.givenbadgetoiby)
- { show_one(8); show_one(9); }
- }
- break;
-
- case r__lustiesroom: {
- dna.dogfoodpos=1; /* Actually, du Lustie pos. */
- if (tr[1].whichsprite==0) /* Avvy in his normal clothes */
- set_up_timer(3,proccallsguards,reason_du_lustie_talks);
- else
- if (! dna.entered_lusties_room_as_monk) /*already*/
- /* Presumably, Avvy dressed as a monk. */
- set_up_timer(3,procgreetsmonk,reason_du_lustie_talks);
-
- if (dna.geida_follows)
- {
- put_geida_at(5, ped);
- if (dna.lustie_is_asleep) show_one(5);
- }
- }
- break;
-
- case r__musicroom: {
- if (dna.jacques_awake>0)
- {
- dna.jacques_awake=5;
- show_one(2);
- show_one(4);
- magics[brown].op=nix;
- whereis[pjacques]=0;
- }
- if (ped!=0)
- {
- show_one(6);
- first_show(5); then_show(7);
- start_to_close();
- }
- }
- break;
-
- case r__outsidenottspub: if (ped==2)
- {
- show_one(3); first_show(2);
- then_show(1); then_show(4);
- start_to_close();
- }
- break;
-
- case r__outsideargentpub: if (ped==2) {
- show_one(6);
- first_show(5); then_show(7);
- start_to_close();
- }
- break;
-
- case r__wisewomans: {
- tr[2].init(11,false);
- if ((dna.rooms[r__wisewomans]==1) && (ped>0))
- {
- apped(2,2); /* Start on the right-hand side of the screen. */
- tr[2].walkto(4); /* Walks up to greet you. */
- } else
- {
- apped(2,4); /* Starts where she was before. */
- tr[2].face=3;
- }
-
- tr[2].call_eachstep=true;
- tr[2].eachstep=procface_avvy; /* She always faces Avvy. */
- }
- break;
-
- case r__insidecardiffcastle:
- if (ped>0)
- {
- tr[2].init(10,false); /* Define the dart. */
- first_show(1);
- if (dna.arrow_in_the_door) then_show(3); else then_show(2);
- if (dna.taken_pen) show_one(4);
- start_to_close();
- } else
- {
- show_one(1);
- if (dna.arrow_in_the_door) show_one(3); else show_one(2);
- }
- break;
-
- case r__avvysgarden: if (ped==1) {
- show_one(2);
- first_show(1); then_show(3);
- start_to_close();
- }
- break;
-
- case r__entrancehall:case r__insideabbey: if (ped==2) {
- show_one(2);
- first_show(1); then_show(3);
- start_to_close();
- }
- break;
-
- case r__aylesoffice: if (dna.ayles_is_awake) show_one(2); break; /* Ayles awake. */
-
- case r__geidas: put_geida_at(2, ped); break; /* load Geida */
-
- case r__easthall:case r__westhall: if (dna.geida_follows) put_geida_at(ped+2, ped); break;
-
- case r__lusties: if (dna.geida_follows) put_geida_at(ped+6, ped); break;
-
- case r__nottspub: {
- if (dna.sitting_in_pub) show_one(3);
- dna.dogfoodpos=1; /* Actually, du Lustie pos. */
- }
- break;
-
- case r__outsideducks: if (ped==2)
- { /* Shut the door */
- show_one(3);
- first_show(2); then_show(1);
- then_show(4); start_to_close();
- }
- break;
- case r__ducks: dna.dogfoodpos=1; break; /* Actually, Duck pos. */
-
- }
-
- seescroll=false; /* Now it can work again! */
+ find_people(x);
+ dna.room = x;
+ if (ped != 0) dna.rooms[x] += 1;
+
+ load(x);
+
+ if ((dna.rooms[x] == 0) && (! flagset('S'))) points(1);
+ whereis[pavalot] = dna.room;
+ if (dna.geida_follows) whereis[pgeida] = x;
+ roomtime = 0;
+
+ {
+ dnatype &with = dna;
+ if ((with.last_room == r__map) && (with.last_room_not_map != with.room))
+ new_town();
+ }
+
+ switch (x) {
+ case r__yours:
+ if (dna.avvy_in_bed) {
+ show_one(3);
+ set_up_timer(100, procarkata_shouts, reason_arkata_shouts);
+ }
+ break;
+
+ case r__outsideyours:
+ if (ped > 0) {
+ if (! dna.talked_to_crapulus) {
+
+ whereis[pcrapulus] = r__outsideyours;
+ tr[2].init(8, false); /* load Crapulus */
+
+ if (dna.rooms[r__outsideyours] == 1) {
+ apped(2, 4); /* Start on the right-hand side of the screen. */
+ tr[2].walkto(5); /* Walks up to greet you. */
+ } else {
+ apped(2, 5); /* Starts where he was before. */
+ tr[2].face = 3;
+ }
+
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procface_avvy; /* He always faces Avvy. */
+
+ } else whereis[pcrapulus] = r__nowhere;
+
+ if (dna.crapulus_will_tell) {
+ tr[2].init(8, false);
+ apped(2, 2);
+ tr[2].walkto(4);
+ set_up_timer(20, proccrapulus_splud_out, reason_crapulus_says_spludwick_out);
+ dna.crapulus_will_tell = false;
+ }
+ }
+ break;
+
+ case r__outsidespludwicks:
+ if ((dna.rooms[r__outsidespludwicks] == 1) && (ped == 1)) {
+ set_up_timer(20, procbang, reason_explosion);
+ dna.spludwicks_here = true;
+ }
+ break;
+
+ case r__spludwicks:
+ if (dna.spludwicks_here) {
+ if (ped > 0) {
+ tr[2].init(2, false); /* load Spludwick */
+ apped(2, 2);
+ whereis['\227'] = r__spludwicks;
+ }
+
+ dna.dogfoodpos = 0; /* Also Spludwick pos. */
+
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procgeida_procs;
+ } else whereis['\227'] = r__nowhere;
+ break;
+
+ case r__brummieroad: {
+ if (dna.geida_follows) put_geida_at(5, ped);
+ if (dna.cwytalot_gone) {
+ magics[lightred].op = nix;
+ whereis[pcwytalot] = r__nowhere;
+ } else {
+ if (ped > 0) {
+ tr[2].init(4, false); /* 4=Cwytalot*/
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procfollow_avvy_y;
+ whereis[pcwytalot] = r__brummieroad;
+
+ if (dna.rooms[r__brummieroad] == 1) { /* First time here... */
+ apped(2, 2); /* He appears on the right of the screen... */
+ tr[2].walkto(4); /* ...and he walks up... */
+ } else {
+ /* You've been here before. */
+ apped(2, 4); /* He's standing in your way straight away... */
+ tr[2].face = left;
+ }
+ }
+ }
+ }
+ break;
+
+ case r__argentroad: {
+ dnatype &with = dna;
+ if ((with.cwytalot_gone) && (! with.cwytalot_in_herts) && (ped == 2) &&
+ (dna.rooms[r__argentroad] > 3)) {
+ tr[2].init(4, false); /* 4=Cwytalot again*/
+ apped(2, 1);
+ tr[2].walkto(2);
+ tr[2].vanishifstill = true;
+ with.cwytalot_in_herts = true;
+ /*whereis[#157]:=r__Nowhere;*/ /* can we fit this in? */
+ set_up_timer(20, proc_cwytalot_in_herts, reason_cwytalot_in_herts);
+ }
+ }
+ break;
+
+ case r__bridge: {
+ if (dna.drawbridge_open == 4) { /*open*/
+ show_one(3); /* Position of drawbridge */
+ magics[green].op = nix; /* You may enter the drawbridge. */
+ }
+ if (dna.geida_follows) put_geida_at(ped + 3, ped); /* load Geida */
+ }
+ break;
+
+ case r__robins: {
+ if (ped > 0) {
+ if (! dna.been_tied_up) {
+ /* A welcome party... or maybe not... */
+ tr[2].init(6, false);
+ apped(2, 2);
+ tr[2].walkto(3);
+ set_up_timer(36, procget_tied_up, reason_getting_tied_up);
+ }
+ }
+
+ if (dna.been_tied_up) {
+ whereis[probinhood] = 0;
+ whereis[pfriartuck] = 0;
+ }
+
+ if (dna.tied_up) show_one(2);
+
+ if (! dna.mushroom_growing) show_one(3);
+ }
+ break;
+
+ case r__outsidecardiffcastle: {
+ if (ped > 0)
+ switch (dna.cardiff_things) {
+ case 0 : { /* You've answered NONE of his questions. */
+ tr[2].init(9, false);
+ apped(2, 2);
+ tr[2].walkto(3);
+ set_up_timer(47, proccardiffsurvey, reason_cardiffsurvey);
+ }
+ break;
+ case 5 :
+ magics[2].op = nix;
+ break; /* You've answered ALL his questions. => nothing happens. */
+ default: { /* You've answered SOME of his questions. */
+ tr[2].init(9, false);
+ apped(2, 3);
+ tr[2].face = right;
+ set_up_timer(3, proccardiff_return, reason_cardiffsurvey);
+ }
+ }
+ if (dna.cardiff_things < 5)
+ interrogation = dna.cardiff_things;
+ else interrogation = 0;
+ }
+ break;
+
+ case r__map: {
+ /* You're entering the map. */
+ dawn();
+ setactivepage(cp);
+ if (ped > 0) zoomout(peds[ped].x, peds[ped].y);
+ setactivepage(1 - cp);
+
+ {
+ dnatype &with = dna;
+ if ((with.obj[wine]) && (with.winestate != 3)) {
+ dixi('q', 9); /* Don't want to waste the wine! */
+ with.obj[wine] = false;
+ objectlist();
+ }
+ }
+
+ dixi('q', 69);
+ }
+ break;
+
+ case r__catacombs: {
+ if (set::of(0, 3, 5, 6, eos).has(ped)) {
+ dnatype &with = dna;
+
+ switch (ped) {
+ case 3 : {
+ with.cat_x = 8;
+ with.cat_y = 4;
+ }
+ break; /* Enter from oubliette */
+ case 5 : {
+ with.cat_x = 8;
+ with.cat_y = 7;
+ }
+ break; /* Enter from du Lustie's */
+ case 6 : {
+ with.cat_x = 4;
+ with.cat_y = 1;
+ }
+ break; /* Enter from Geida's */
+ }
+ dna.enter_catacombs_from_lusties_room = true;
+ catamove(ped);
+ dna.enter_catacombs_from_lusties_room = false;
+ }
+ }
+ break;
+
+ case r__argentpub: {
+ if (dna.wonnim) show_one(1); /* No lute by the settle. */
+ dna.malagauche = 0; /* Ready to boot Malagauche */
+ if (dna.givenbadgetoiby) {
+ show_one(8);
+ show_one(9);
+ }
+ }
+ break;
+
+ case r__lustiesroom: {
+ dna.dogfoodpos = 1; /* Actually, du Lustie pos. */
+ if (tr[1].whichsprite == 0) /* Avvy in his normal clothes */
+ set_up_timer(3, proccallsguards, reason_du_lustie_talks);
+ else if (! dna.entered_lusties_room_as_monk) /*already*/
+ /* Presumably, Avvy dressed as a monk. */
+ set_up_timer(3, procgreetsmonk, reason_du_lustie_talks);
+
+ if (dna.geida_follows) {
+ put_geida_at(5, ped);
+ if (dna.lustie_is_asleep) show_one(5);
+ }
+ }
+ break;
+
+ case r__musicroom: {
+ if (dna.jacques_awake > 0) {
+ dna.jacques_awake = 5;
+ show_one(2);
+ show_one(4);
+ magics[brown].op = nix;
+ whereis[pjacques] = 0;
+ }
+ if (ped != 0) {
+ show_one(6);
+ first_show(5);
+ then_show(7);
+ start_to_close();
+ }
+ }
+ break;
+
+ case r__outsidenottspub:
+ if (ped == 2) {
+ show_one(3);
+ first_show(2);
+ then_show(1);
+ then_show(4);
+ start_to_close();
+ }
+ break;
+
+ case r__outsideargentpub:
+ if (ped == 2) {
+ show_one(6);
+ first_show(5);
+ then_show(7);
+ start_to_close();
+ }
+ break;
+
+ case r__wisewomans: {
+ tr[2].init(11, false);
+ if ((dna.rooms[r__wisewomans] == 1) && (ped > 0)) {
+ apped(2, 2); /* Start on the right-hand side of the screen. */
+ tr[2].walkto(4); /* Walks up to greet you. */
+ } else {
+ apped(2, 4); /* Starts where she was before. */
+ tr[2].face = 3;
+ }
+
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procface_avvy; /* She always faces Avvy. */
+ }
+ break;
+
+ case r__insidecardiffcastle:
+ if (ped > 0) {
+ tr[2].init(10, false); /* Define the dart. */
+ first_show(1);
+ if (dna.arrow_in_the_door) then_show(3);
+ else then_show(2);
+ if (dna.taken_pen) show_one(4);
+ start_to_close();
+ } else {
+ show_one(1);
+ if (dna.arrow_in_the_door) show_one(3);
+ else show_one(2);
+ }
+ break;
+
+ case r__avvysgarden:
+ if (ped == 1) {
+ show_one(2);
+ first_show(1);
+ then_show(3);
+ start_to_close();
+ }
+ break;
+
+ case r__entrancehall:
+ case r__insideabbey:
+ if (ped == 2) {
+ show_one(2);
+ first_show(1);
+ then_show(3);
+ start_to_close();
+ }
+ break;
+
+ case r__aylesoffice:
+ if (dna.ayles_is_awake) show_one(2);
+ break; /* Ayles awake. */
+
+ case r__geidas:
+ put_geida_at(2, ped);
+ break; /* load Geida */
+
+ case r__easthall:
+ case r__westhall:
+ if (dna.geida_follows) put_geida_at(ped + 2, ped);
+ break;
+
+ case r__lusties:
+ if (dna.geida_follows) put_geida_at(ped + 6, ped);
+ break;
+
+ case r__nottspub: {
+ if (dna.sitting_in_pub) show_one(3);
+ dna.dogfoodpos = 1; /* Actually, du Lustie pos. */
+ }
+ break;
+
+ case r__outsideducks:
+ if (ped == 2) {
+ /* Shut the door */
+ show_one(3);
+ first_show(2);
+ then_show(1);
+ then_show(4);
+ start_to_close();
+ }
+ break;
+ case r__ducks:
+ dna.dogfoodpos = 1;
+ break; /* Actually, Duck pos. */
+
+ }
+
+ seescroll = false; /* Now it can work again! */
}
-void thinkabout(char z, boolean th) /* Hey!!! Get it and put it!!! */
-{
- const integer x = 205; const integer y = 170; const integer picsize = 966;
- const bytefield thinkspace =
- {25, 170, 32, 200};
- untyped_file f; pointer p; byte fv;
-
-
- thinks=z; z -= 1;
-
- if (th)
- { /* Things */
- assign(f,"thinks.avd"); wait(); getmem(p,picsize);
- reset(f,1); seek(f,ord(z)*picsize+65); blockread(f,p,picsize); off();
- close(f);
- } else
- { /* People */
- assign(f,"folk.avd");
- wait();
- getmem(p,picsize);
- reset(f,1);
-
- fv=ord(z)-149;
- if (fv>=25) fv -= 8;
- if (fv==20) fv -= 1; /* Last time... */
-
- seek(f,fv*picsize+65);
- blockread(f,p,picsize);
- off();
- close(f);
- }
-
- setactivepage(3);
- putimage(x,y,p,0);
- setactivepage(1-cp);
-
- for( fv=0; fv <= 1; fv ++)
- getset[fv].remember(thinkspace);
-
- freemem(p,picsize);
- on(); thinkthing=th;
+void thinkabout(char z, boolean th) { /* Hey!!! Get it and put it!!! */
+ const integer x = 205;
+ const integer y = 170;
+ const integer picsize = 966;
+ const bytefield thinkspace =
+ {25, 170, 32, 200};
+ untyped_file f;
+ pointer p;
+ byte fv;
+
+
+ thinks = z;
+ z -= 1;
+
+ if (th) {
+ /* Things */
+ assign(f, "thinks.avd");
+ wait();
+ getmem(p, picsize);
+ reset(f, 1);
+ seek(f, ord(z)*picsize + 65);
+ blockread(f, p, picsize);
+ off();
+ close(f);
+ } else {
+ /* People */
+ assign(f, "folk.avd");
+ wait();
+ getmem(p, picsize);
+ reset(f, 1);
+
+ fv = ord(z) - 149;
+ if (fv >= 25) fv -= 8;
+ if (fv == 20) fv -= 1; /* Last time... */
+
+ seek(f, fv * picsize + 65);
+ blockread(f, p, picsize);
+ off();
+ close(f);
+ }
+
+ setactivepage(3);
+ putimage(x, y, p, 0);
+ setactivepage(1 - cp);
+
+ for (fv = 0; fv <= 1; fv ++)
+ getset[fv].remember(thinkspace);
+
+ freemem(p, picsize);
+ on();
+ thinkthing = th;
}
-void load_digits() /* Load the scoring digits & rwlites */
-{
- const integer digitsize = 134;
- const integer rwlitesize = 126;
- untyped_file f; char fv; byte ff;
-
- assign(f,"digit.avd"); reset(f,1);
- for( fv='0'; fv <= '9'; fv ++)
- {
- getmem(digit[fv],digitsize); blockread(f,digit[fv],digitsize);
- }
- for( ff=0; ff <= 8; ff ++)
- {
- getmem(rwlite[ff],rwlitesize); blockread(f,rwlite[ff],rwlitesize);
- }
- close(f);
+void load_digits() { /* Load the scoring digits & rwlites */
+ const integer digitsize = 134;
+ const integer rwlitesize = 126;
+ untyped_file f;
+ char fv;
+ byte ff;
+
+ assign(f, "digit.avd");
+ reset(f, 1);
+ for (fv = '0'; fv <= '9'; fv ++) {
+ getmem(digit[fv], digitsize);
+ blockread(f, digit[fv], digitsize);
+ }
+ for (ff = 0; ff <= 8; ff ++) {
+ getmem(rwlite[ff], rwlitesize);
+ blockread(f, rwlite[ff], rwlitesize);
+ }
+ close(f);
}
-void toolbar()
-{
- untyped_file f; word s; byte fv; pointer p;
-
- assign(f,"useful.avd"); reset(f,1);
- s=filesize(f)-40; getmem(p,s);
- seek(f,40);
- blockread(f,p,s);
- close(f);
-/* off;*/
-
- setcolor(15); /* (And sent for chrysanthemums...) Yellow and white. */
- setfillstyle(1,6);
- for( fv=0; fv <= 1; fv ++)
- {
- setactivepage(fv); putimage(5,169,p,0);
- if (demo)
- {
- bar(264,177,307,190);
- outtextxy(268,188,"Demo!"); /* well... actually only white now. */
- }
- }
-
-/* on;*/
- freemem(p,s);
- oldrw=177; showrw();
+void toolbar() {
+ untyped_file f;
+ word s;
+ byte fv;
+ pointer p;
+
+ assign(f, "useful.avd");
+ reset(f, 1);
+ s = filesize(f) - 40;
+ getmem(p, s);
+ seek(f, 40);
+ blockread(f, p, s);
+ close(f);
+ /* off;*/
+
+ setcolor(15); /* (And sent for chrysanthemums...) Yellow and white. */
+ setfillstyle(1, 6);
+ for (fv = 0; fv <= 1; fv ++) {
+ setactivepage(fv);
+ putimage(5, 169, p, 0);
+ if (demo) {
+ bar(264, 177, 307, 190);
+ outtextxy(268, 188, "Demo!"); /* well... actually only white now. */
+ }
+ }
+
+ /* on;*/
+ freemem(p, s);
+ oldrw = 177;
+ showrw();
}
-void showscore()
-{
- const bytefield scorespace = {33, 177, 39, 200};
- varying_string<3> q; byte fv;
+void showscore() {
+ const bytefield scorespace = {33, 177, 39, 200};
+ varying_string<3> q;
+ byte fv;
- if (demo) return;
+ if (demo) return;
- str(dna.score,q); while (q[0]<'\3') q=string('0')+q; off();
- setactivepage(3);
- for( fv=1; fv <= 3; fv ++)
- if (lastscore[fv]!=q[fv])
- putimage(250+fv*15,177,digit[q[fv]],0);
+ str(dna.score, q);
+ while (q[0] < '\3') q = string('0') + q;
+ off();
+ setactivepage(3);
+ for (fv = 1; fv <= 3; fv ++)
+ if (lastscore[fv] != q[fv])
+ putimage(250 + fv * 15, 177, digit[q[fv]], 0);
- for( fv=0; fv <= 1; fv ++)
- getset[fv].remember(scorespace);
+ for (fv = 0; fv <= 1; fv ++)
+ getset[fv].remember(scorespace);
- setactivepage(1-cp);
- on(); lastscore=q;
+ setactivepage(1 - cp);
+ on();
+ lastscore = q;
}
-void points(byte num) /* Add on no. of points */
-{
- byte q,fv;
-
- for( q=1; q <= num; q ++)
- {
- dna.score += 1;
- if (soundfx) for( fv=1; fv <= 97; fv ++) sound(177+dna.score*3); nosound;
- }
- log_score(num,dna.score); showscore();
-}
+void points(byte num) { /* Add on no. of points */
+ byte q, fv;
-void topcheck()
-{
- { menuset& with = ddm_m; /* Menuset */
- getmenu(mpx);} /* Do this one */
+ for (q = 1; q <= num; q ++) {
+ dna.score += 1;
+ if (soundfx) for (fv = 1; fv <= 97; fv ++) sound(177 + dna.score * 3);
+ nosound;
+ }
+ log_score(num, dna.score);
+ showscore();
}
-void mouseway()
-{
- byte col;
-
- off(); col=getpixel(mx,my); on();
- { triptype& with = tr[1];
- { dnatype& with1 = dna;
- switch (col) {
- case green: { dna.rw=up; rwsp(1,up); showrw(); } break;
- case brown: { dna.rw=down; rwsp(1,down); showrw(); } break;
- case cyan: { dna.rw=left; rwsp(1,left); showrw(); } break;
- case lightmagenta: { dna.rw=right; rwsp(1,right); showrw(); } break;
- case red:case white:case lightcyan:case yellow: { stopwalking(); showrw(); } break;
- }}}
+void topcheck() {
+ {
+ menuset &with = ddm_m; /* Menuset */
+ getmenu(mpx);
+ } /* Do this one */
}
-void inkey()
-{
- char r;
-
-
- if (demo) return; /* Demo handles this itself. */
-
- if (mousetext=="")
- { /* read keyboard */
- readkeye();
- if ((inchar==' ') && ((shiftstate & 8)>0))
- {
- inchar='\0'; extd='#'; /* alt-spacebar = alt-H */
- }
- } else
- {
- if (mousetext[1]=='`') mousetext[1]='\15'; /* Backquote = return in a macro */
- inchar=mousetext[1]; mousetext=copy(mousetext,2,255);
- }
+void mouseway() {
+ byte col;
+
+ off();
+ col = getpixel(mx, my);
+ on();
+ {
+ triptype &with = tr[1];
+ {
+ dnatype &with1 = dna;
+ switch (col) {
+ case green: {
+ dna.rw = up;
+ rwsp(1, up);
+ showrw();
+ }
+ break;
+ case brown: {
+ dna.rw = down;
+ rwsp(1, down);
+ showrw();
+ }
+ break;
+ case cyan: {
+ dna.rw = left;
+ rwsp(1, left);
+ showrw();
+ }
+ break;
+ case lightmagenta: {
+ dna.rw = right;
+ rwsp(1, right);
+ showrw();
+ }
+ break;
+ case red:
+ case white:
+ case lightcyan:
+ case yellow: {
+ stopwalking();
+ showrw();
+ }
+ break;
+ }
+ }
+ }
}
-void posxy()
-{
- varying_string<3> xs,ys;
-
- setfillstyle(1,0); setcolor(10);
- do {
- check();
- if (mpress==1)
- {
- str(mx,xs); str(my,ys);
- off(); bar(400,160,500,168);
- outtextxy(400,168,xs); outtextxy(440,168,string(": ")+ys); on();
- }
- } while (!(my==0));
- bar(400,161,640,168);
-}
+void inkey() {
+ char r;
-void fxtoggle()
-{
- byte page_;
- const bytefield soundled =
- {52, 175, 55, 177};
-
- soundfx=! soundfx;
- if (soundfx)
- {
- if (! fxhidden)
- { /* ...but *not* when the screen's dark. */
- sound(1770); delay(77); nosound;
- }
- setfillstyle(1,cyan);
- } else
- setfillstyle(1,black);
- setactivepage(3); bar(419,175,438,177);
- setactivepage(1-cp);
- for( page_=0; page_ <= 1; page_ ++) getset[page_].remember(soundled);
-}
-
-void objectlist()
-{
- char fv;
-
- dna.carrying=0;
- if (thinkthing && ! dna.obj[thinks])
- thinkabout(money,a_thing); /* you always have money */
- for( fv='\1'; fv <= numobjs; fv ++)
- if (dna.obj[fv])
- {
- dna.carrying += 1; objlist[dna.carrying]=fv;
- }
-}
-void verte()
-{
- byte what;
-
- if (! dna.user_moves_avvy) return;
- {
- triptype& with = tr[1]; /* that's the only one we're interested in here */
+ if (demo) return; /* Demo handles this itself. */
+ if (mousetext == "") {
+ /* read keyboard */
+ readkeye();
+ if ((inchar == ' ') && ((shiftstate & 8) > 0)) {
+ inchar = '\0';
+ extd = '#'; /* alt-spacebar = alt-H */
+ }
+ } else {
+ if (mousetext[1] == '`') mousetext[1] = '\15'; /* Backquote = return in a macro */
+ inchar = mousetext[1];
+ mousetext = copy(mousetext, 2, 255);
+ }
+}
- if (mx<(cardinal)with.x) what=1; else
- if (mx>(unsigned char)(with.x+with.a.xl)) what=2; else
- what=0; /* On top */
-
- if (my<(cardinal)with.y) what += 3; else
- if (my>(unsigned char)(with.y+with.a.yl)) what += 6;
+void posxy() {
+ varying_string<3> xs, ys;
+
+ setfillstyle(1, 0);
+ setcolor(10);
+ do {
+ check();
+ if (mpress == 1) {
+ str(mx, xs);
+ str(my, ys);
+ off();
+ bar(400, 160, 500, 168);
+ outtextxy(400, 168, xs);
+ outtextxy(440, 168, string(": ") + ys);
+ on();
+ }
+ } while (!(my == 0));
+ bar(400, 161, 640, 168);
+}
- switch (what) {
- case 0: stopwalking(); break; /* Clicked on Avvy- no movement */
- case 1: rwsp(1,left); break;
- case 2: rwsp(1,right); break;
- case 3: rwsp(1,up); break;
- case 4: rwsp(1,ul); break;
- case 5: rwsp(1,ur); break;
- case 6: rwsp(1,down); break;
- case 7: rwsp(1,dl); break;
- case 8: rwsp(1,dr); break;
- } /* no other values are possible... */
+void fxtoggle() {
+ byte page_;
+ const bytefield soundled =
+ {52, 175, 55, 177};
+
+ soundfx = ! soundfx;
+ if (soundfx) {
+ if (! fxhidden) {
+ /* ...but *not* when the screen's dark. */
+ sound(1770);
+ delay(77);
+ nosound;
+ }
+ setfillstyle(1, cyan);
+ } else
+ setfillstyle(1, black);
+ setactivepage(3);
+ bar(419, 175, 438, 177);
+ setactivepage(1 - cp);
+ for (page_ = 0; page_ <= 1; page_ ++) getset[page_].remember(soundled);
+}
- showrw();
+void objectlist() {
+ char fv;
+
+ dna.carrying = 0;
+ if (thinkthing && ! dna.obj[thinks])
+ thinkabout(money, a_thing); /* you always have money */
+ for (fv = '\1'; fv <= numobjs; fv ++)
+ if (dna.obj[fv]) {
+ dna.carrying += 1;
+ objlist[dna.carrying] = fv;
+ }
+}
- }
+void verte() {
+ byte what;
+
+ if (! dna.user_moves_avvy) return;
+ {
+ triptype &with = tr[1]; /* that's the only one we're interested in here */
+
+
+ if (mx < (cardinal)with.x) what = 1;
+ else if (mx > (unsigned char)(with.x + with.a.xl)) what = 2;
+ else
+ what = 0; /* On top */
+
+ if (my < (cardinal)with.y) what += 3;
+ else if (my > (unsigned char)(with.y + with.a.yl)) what += 6;
+
+ switch (what) {
+ case 0:
+ stopwalking();
+ break; /* Clicked on Avvy- no movement */
+ case 1:
+ rwsp(1, left);
+ break;
+ case 2:
+ rwsp(1, right);
+ break;
+ case 3:
+ rwsp(1, up);
+ break;
+ case 4:
+ rwsp(1, ul);
+ break;
+ case 5:
+ rwsp(1, ur);
+ break;
+ case 6:
+ rwsp(1, down);
+ break;
+ case 7:
+ rwsp(1, dl);
+ break;
+ case 8:
+ rwsp(1, dr);
+ break;
+ } /* no other values are possible... */
+
+ showrw();
+
+ }
}
-void checkclick()
-{
- bytefield b;
-
- check(); ontoolbar=slow_computer && ((my>=169) || (my<=10));
-
- if (mrelease>0) after_the_scroll=false;
- switch (my) {
- case RANGE_11(0,10): newpointer(1);
- break; /* up arrow */
- case RANGE_11(159,169): newpointer(8);
- break; /* I-beam */
- case 170 ... 200: newpointer(2); break; /* screwdriver */
- default:
- {
- if (! ddmnow) /* Dropdown can handle its own pointers. */
- {
- if (((keystatus & 1)==1) && (my>=11) && (my<=158))
- {
- newpointer(7); /* Mark's crosshairs */
- verte();
- /* Normally, if you click on the picture, you're guiding Avvy around. */
- } else
- newpointer(4); /* fletch */
- }
- }
- }
-
- if (mpress>0)
- {
- switch (mpy) {
- case RANGE_11(0,10): if (dropsok) topcheck();
- break;
- case 11 ... 158: if (! dropsok)
- mousetext=string('\15')+mousetext;
- break; /* But otherwise, it's
+void checkclick() {
+ bytefield b;
+
+ check();
+ ontoolbar = slow_computer && ((my >= 169) || (my <= 10));
+
+ if (mrelease > 0) after_the_scroll = false;
+ switch (my) {
+ case RANGE_11(0, 10):
+ newpointer(1);
+ break; /* up arrow */
+ case RANGE_11(159, 169):
+ newpointer(8);
+ break; /* I-beam */
+ case 170 ... 200:
+ newpointer(2);
+ break; /* screwdriver */
+ default: {
+ if (! ddmnow) { /* Dropdown can handle its own pointers. */
+ if (((keystatus & 1) == 1) && (my >= 11) && (my <= 158)) {
+ newpointer(7); /* Mark's crosshairs */
+ verte();
+ /* Normally, if you click on the picture, you're guiding Avvy around. */
+ } else
+ newpointer(4); /* fletch */
+ }
+ }
+ }
+
+ if (mpress > 0) {
+ switch (mpy) {
+ case RANGE_11(0, 10):
+ if (dropsok) topcheck();
+ break;
+ case 11 ... 158:
+ if (! dropsok)
+ mousetext = string('\15') + mousetext;
+ break; /* But otherwise, it's
equivalent to pressing Enter. */
- case RANGE_11(159,169): { /* Click on command line */
- cursor_off(); curpos=(mx-16) / 8;
- if (curpos>length(current)+1) curpos=length(current)+1;
- if (curpos<1) curpos=1;
- cursor_on();
- }
- break;
- case 170 ... 200: switch (mpx) { /* bottom check */
- case 0 ... 207: mouseway(); break;
- case 208 ... 260: { /* Examine the thing */
- do { check(); } while (!(mrelease>0));
- if (thinkthing)
- {
- thing=thinks; thing += 49;
- person=pardon;
- } else
- {
- person=thinks;
- thing=pardon;
- }
- callverb(vb_exam);
- }
- break;
- case 261 ... 319: {
- do { checkclick(); } while (!(mrelease>0));
- callverb(vb_score);
- }
- break;
- case 320 ... 357: { tr[1].xs=walk; newspeed(); } break;
- case 358 ... 395: { tr[1].xs=run; newspeed(); } break;
- case 396 ... 483: fxtoggle(); break; /* "sound" */
-/* 484..534: begin { clock }
- off; if getpixel(mx,my)=14 then mousetext:='#'+mousetext; on;
- end;*/
- case 535 ... 640: mousetext=string('\15')+mousetext; break;
- }
- break;
- }
- }
-
-/* if mrelease>0 then
- begin
- if (cw<>177) and (mry>10) then
- begin to_do:=(((mrx-20) div 100)*20)+(mry div 10); closewin; end;
- end;*/
+ case RANGE_11(159, 169): { /* Click on command line */
+ cursor_off();
+ curpos = (mx - 16) / 8;
+ if (curpos > length(current) + 1) curpos = length(current) + 1;
+ if (curpos < 1) curpos = 1;
+ cursor_on();
+ }
+ break;
+ case 170 ... 200:
+ switch (mpx) { /* bottom check */
+ case 0 ... 207:
+ mouseway();
+ break;
+ case 208 ... 260: { /* Examine the thing */
+ do {
+ check();
+ } while (!(mrelease > 0));
+ if (thinkthing) {
+ thing = thinks;
+ thing += 49;
+ person = pardon;
+ } else {
+ person = thinks;
+ thing = pardon;
+ }
+ callverb(vb_exam);
+ }
+ break;
+ case 261 ... 319: {
+ do {
+ checkclick();
+ } while (!(mrelease > 0));
+ callverb(vb_score);
+ }
+ break;
+ case 320 ... 357: {
+ tr[1].xs = walk;
+ newspeed();
+ }
+ break;
+ case 358 ... 395: {
+ tr[1].xs = run;
+ newspeed();
+ }
+ break;
+ case 396 ... 483:
+ fxtoggle();
+ break; /* "sound" */
+ /* 484..534: begin { clock }
+ off; if getpixel(mx,my)=14 then mousetext:='#'+mousetext; on;
+ end;*/
+ case 535 ... 640:
+ mousetext = string('\15') + mousetext;
+ break;
+ }
+ break;
+ }
+ }
+
+ /* if mrelease>0 then
+ begin
+ if (cw<>177) and (mry>10) then
+ begin to_do:=(((mrx-20) div 100)*20)+(mry div 10); closewin; end;
+ end;*/
}
-void mouse_init()
-{
- r.ax=0;
- intr(0x33,r); /* Returns- no. keys in bx and whether present in ax. */
- wait();
+void mouse_init() {
+ r.ax = 0;
+ intr(0x33, r); /* Returns- no. keys in bx and whether present in ax. */
+ wait();
}
-void mousepage(word page_)
-{
- boolean onstate,wason;
-
- if (visible!=m_virtual)
- {
- onstate=oncandopageswap;
- oncandopageswap=false;
- wason=visible==m_yes;
- if (wason) off();
- {
- void& with = r; ax=29; bx=page_; } intr(0x33,r);
- if (wason) on();
- oncandopageswap=onstate;
- }
+void mousepage(word page_) {
+ boolean onstate, wason;
+
+ if (visible != m_virtual) {
+ onstate = oncandopageswap;
+ oncandopageswap = false;
+ wason = visible == m_yes;
+ if (wason) off();
+ {
+ void &with = r;
+ ax = 29;
+ bx = page_;
+ }
+ intr(0x33, r);
+ if (wason) on();
+ oncandopageswap = onstate;
+ }
}
-void errorled()
-{
- byte fv;
-
- state(0);
- for( fv=0; fv <= 1; fv ++)
- {
- setactivepage(fv);
- off(); setfillstyle(1,red); bar(419,184,438,186); on();
- }
- for( fv=177; fv >= 1; fv --)
- {
- sound(177+(fv*177177) / 999);
- delay(1); nosound;
- }
- for( fv=0; fv <= 1; fv ++)
- {
- setactivepage(fv);
- off(); setfillstyle(1,black); bar(419,184,438,186); on();
- }
- state(defaultled); setactivepage(1-cp);
+void errorled() {
+ byte fv;
+
+ state(0);
+ for (fv = 0; fv <= 1; fv ++) {
+ setactivepage(fv);
+ off();
+ setfillstyle(1, red);
+ bar(419, 184, 438, 186);
+ on();
+ }
+ for (fv = 177; fv >= 1; fv --) {
+ sound(177 + (fv * 177177) / 999);
+ delay(1);
+ nosound;
+ }
+ for (fv = 0; fv <= 1; fv ++) {
+ setactivepage(fv);
+ off();
+ setfillstyle(1, black);
+ bar(419, 184, 438, 186);
+ on();
+ }
+ state(defaultled);
+ setactivepage(1 - cp);
}
-shortint fades(shortint x)
-{
- byte r,g,b;
-
- shortint fades_result;
- r=x / 16; x=x % 16;
- g=x / 4; b=x % 4;
- if (r>0) r -= 1; if (g>0) g -= 1; if (b>0) b -= 1;
- fades_result=(16*r+4*g+b);
-/* fades:=x-1;*/
- return fades_result;
+shortint fades(shortint x) {
+ byte r, g, b;
+
+ shortint fades_result;
+ r = x / 16;
+ x = x % 16;
+ g = x / 4;
+ b = x % 4;
+ if (r > 0) r -= 1;
+ if (g > 0) g -= 1;
+ if (b > 0) b -= 1;
+ fades_result = (16 * r + 4 * g + b);
+ /* fades:=x-1;*/
+ return fades_result;
}
void dusk();
-static void fadeout(byte n)
-{
- byte fv;
+static void fadeout(byte n) {
+ byte fv;
- getpalette(fxpal[n]);
- for( fv=1; fv <= fxpal[n].size-1; fv ++)
- fxpal[n].colors[fv]=fades(fxpal[n].colors[fv]);
- setallpalette(fxpal[n]);
- /*delay(50);*/ slowdown();
+ getpalette(fxpal[n]);
+ for (fv = 1; fv <= fxpal[n].size - 1; fv ++)
+ fxpal[n].colors[fv] = fades(fxpal[n].colors[fv]);
+ setallpalette(fxpal[n]);
+ /*delay(50);*/ slowdown();
}
-void dusk()
-{
- byte fv;
+void dusk() {
+ byte fv;
- setbkcolor(0);
- if (fxhidden) return; fxhidden=true;
- getpalette(fxpal[0]); for( fv=1; fv <= 3; fv ++) fadeout(fv);
+ setbkcolor(0);
+ if (fxhidden) return;
+ fxhidden = true;
+ getpalette(fxpal[0]);
+ for (fv = 1; fv <= 3; fv ++) fadeout(fv);
}
void dawn();
-static void fadein(byte n)
-{
- setallpalette(fxpal[n]);
- /*delay(50);*/ slowdown();
+static void fadein(byte n) {
+ setallpalette(fxpal[n]);
+ /*delay(50);*/ slowdown();
}
-void dawn()
-{
- byte fv;
+void dawn() {
+ byte fv;
- if ((holdthedawn) || (! fxhidden)) return; fxhidden=false;
- for( fv=3; fv >= 0; fv --) fadein(fv);
- { dnatype& with = dna;
- if ((with.room==r__yours) && (with.avvy_in_bed) && (with.teetotal)) background(14);}
+ if ((holdthedawn) || (! fxhidden)) return;
+ fxhidden = false;
+ for (fv = 3; fv >= 0; fv --) fadein(fv);
+ {
+ dnatype &with = dna;
+ if ((with.room == r__yours) && (with.avvy_in_bed) && (with.teetotal)) background(14);
+ }
}
-void showrw()
-{
- byte page_;
-
- {
- dnatype& with = dna;
-
- if (oldrw==with.rw) return;
- oldrw=with.rw; off();
- for( page_=0; page_ <= 1; page_ ++)
- {
- setactivepage(page_); putimage(0,161,rwlite[with.rw],0);
- } on();
- setactivepage(1-cp);
- }
+void showrw() {
+ byte page_;
+
+ {
+ dnatype &with = dna;
+
+ if (oldrw == with.rw) return;
+ oldrw = with.rw;
+ off();
+ for (page_ = 0; page_ <= 1; page_ ++) {
+ setactivepage(page_);
+ putimage(0, 161, rwlite[with.rw], 0);
+ }
+ on();
+ setactivepage(1 - cp);
+ }
}
-void mblit(byte x1,byte y1,byte x2,byte y2, byte f,byte t) /* assembler; */
+void mblit(byte x1, byte y1, byte x2, byte y2, byte f, byte t) /* assembler; */
/* The Minstrel Blitter */
/* asm
{ ofsfr:=f*$4000+x1+y1*80;
@@ -1239,215 +1395,234 @@ void mblit(byte x1,byte y1,byte x2,byte y2, byte f,byte t) /* assembler; */
pop ds; { Get it back again (or we'll be in trouble with TP!) }
*/
-{;
+{
+ ;
}
-void blitfix()
-{
- byte fv;
+void blitfix() {
+ byte fv;
- fv=getpixel(0,0); /* perform read & so cancel Xor effect! */
+ fv = getpixel(0, 0); /* perform read & so cancel Xor effect! */
}
void clock();
-const integer xm = 510;
+const integer xm = 510;
const integer ym = 183;
-static arccoordstype ah,am;
+static arccoordstype ah, am;
static word nh;
-static void calchand(word ang,word length, arccoordstype& a, byte c)
-{
- if (ang>900) { a.xend=177; return; }
- setcolor(c); arc(xm,ym,449-ang,450-ang,length); getarccoords(a);
+static void calchand(word ang, word length, arccoordstype &a, byte c) {
+ if (ang > 900) {
+ a.xend = 177;
+ return;
+ }
+ setcolor(c);
+ arc(xm, ym, 449 - ang, 450 - ang, length);
+ getarccoords(a);
}
-static void hand(arccoordstype a, byte c)
-{
- if (a.xend==177) return;
- setcolor(c);
- line(xm,ym,a.xend,a.yend); /* "With a do-line???!", Liz said. */
+static void hand(arccoordstype a, byte c) {
+ if (a.xend == 177) return;
+ setcolor(c);
+ line(xm, ym, a.xend, a.yend); /* "With a do-line???!", Liz said. */
}
-static void chime()
-{
- word gd,gm,fv;
-
- if ((oh==17717) || (! soundfx)) return; /* too high- must be first time around */
- fv=h % 12; if (fv==0) fv=12; wait();
- for( gd=1; gd <= fv; gd ++)
- {
- for( gm=1; gm <= 3; gm ++)
- {
- sound((gd % 3)*64+140-gm*30); delay(50-gm*12);
- }
- nosound; if (gd!=fv) delay(100);
- }
+static void chime() {
+ word gd, gm, fv;
+
+ if ((oh == 17717) || (! soundfx)) return; /* too high- must be first time around */
+ fv = h % 12;
+ if (fv == 0) fv = 12;
+ wait();
+ for (gd = 1; gd <= fv; gd ++) {
+ for (gm = 1; gm <= 3; gm ++) {
+ sound((gd % 3) * 64 + 140 - gm * 30);
+ delay(50 - gm * 12);
+ }
+ nosound;
+ if (gd != fv) delay(100);
+ }
}
-static void refresh_hands()
-{
- const bytefield clockspace = {61, 166, 66, 200};
- byte page_;
+static void refresh_hands() {
+ const bytefield clockspace = {61, 166, 66, 200};
+ byte page_;
- for( page_=0; page_ <= 1; page_ ++)
- getset[page_].remember(clockspace);
+ for (page_ = 0; page_ <= 1; page_ ++)
+ getset[page_].remember(clockspace);
}
-static void plothands()
-{
-/* off;*/
- setactivepage(3);
- calchand(onh,14,ah,yellow); calchand(om*6,17,am,yellow);
- hand(ah,brown); hand(am,brown);
- calchand(nh,14,ah,brown); calchand(m*6,17,am,brown);
- hand(ah,yellow); hand(am,yellow);
- setactivepage(1-cp);
+static void plothands() {
+ /* off;*/
+ setactivepage(3);
+ calchand(onh, 14, ah, yellow);
+ calchand(om * 6, 17, am, yellow);
+ hand(ah, brown);
+ hand(am, brown);
+ calchand(nh, 14, ah, brown);
+ calchand(m * 6, 17, am, brown);
+ hand(ah, yellow);
+ hand(am, yellow);
+ setactivepage(1 - cp);
- refresh_hands();
+ refresh_hands();
-/* on;*/
+ /* on;*/
}
-void clock()
-{ /* ...Clock. */
- gettime(h,m,s,s1);
- nh=(h % 12)*30+m / 2;
- if (oh!=h) { plothands(); chime(); }
- if (om!=m) plothands();
- if ((h==0) && (oh!=0) && (oh!=17717))
- display(string("Good morning!\r\rYes, it's just past midnight. Are you having")+
- " an all-night Avvy session? Glad you like the game that much!");
- oh=h; onh=nh; om=m;
+void clock() {
+ /* ...Clock. */
+ gettime(h, m, s, s1);
+ nh = (h % 12) * 30 + m / 2;
+ if (oh != h) {
+ plothands();
+ chime();
+ }
+ if (om != m) plothands();
+ if ((h == 0) && (oh != 0) && (oh != 17717))
+ display(string("Good morning!\r\rYes, it's just past midnight. Are you having") +
+ " an all-night Avvy session? Glad you like the game that much!");
+ oh = h;
+ onh = nh;
+ om = m;
}
-void flip_page()
-{
- if (! ddm_o.menunow)
- {
- cp=1-cp;
- setvisualpage(cp);
- setactivepage(1-cp);
- /*mousepage(cp);*/
- }
+void flip_page() {
+ if (! ddm_o.menunow) {
+ cp = 1 - cp;
+ setvisualpage(cp);
+ setactivepage(1 - cp);
+ /*mousepage(cp);*/
+ }
}
-void delavvy()
-{
- byte page_;
-
- off();
- { triptype& with = tr[1];
- for( page_=0; page_ <= 1; page_ ++)
- mblit(with.x / 8,with.y,(with.x+with.a.xl) / 8+1,with.y+with.a.yl,3,page_);}
- blitfix();
- on();
+void delavvy() {
+ byte page_;
+
+ off();
+ {
+ triptype &with = tr[1];
+ for (page_ = 0; page_ <= 1; page_ ++)
+ mblit(with.x / 8, with.y, (with.x + with.a.xl) / 8 + 1, with.y + with.a.yl, 3, page_);
+ }
+ blitfix();
+ on();
}
-void gameover()
-{
- byte fv; integer sx,sy;
-
- dna.user_moves_avvy=false;
-
- sx=tr[1].x;
- sy=tr[1].y;
- {
- triptype& with = tr[1];
-
- done();
- init(12,true); /* 12 = Avalot falls */
- tr[1].step=0;
- appear(sx,sy,0);
- }
- set_up_timer(3,procavalot_falls,reason_falling_over);
-/* display(^m^m^m^m^m^m^i^i^i^i^i^i^s'Z'^v);*/
- alive=false;
+void gameover() {
+ byte fv;
+ integer sx, sy;
+
+ dna.user_moves_avvy = false;
+
+ sx = tr[1].x;
+ sy = tr[1].y;
+ {
+ triptype &with = tr[1];
+
+ done();
+ init(12, true); /* 12 = Avalot falls */
+ tr[1].step = 0;
+ appear(sx, sy, 0);
+ }
+ set_up_timer(3, procavalot_falls, reason_falling_over);
+ /* display(^m^m^m^m^m^m^i^i^i^i^i^i^s'Z'^v);*/
+ alive = false;
}
/* OK. There are two kinds of redraw: Major and Minor. Minor is what happens
when you load a game, etc. Major redraws EVERYTHING. */
-void minor_redraw()
-{
- byte fv;
+void minor_redraw() {
+ byte fv;
- dusk();
- enterroom(dna.room,0); /* Ped unknown or non-existant. */
+ dusk();
+ enterroom(dna.room, 0); /* Ped unknown or non-existant. */
- for( fv=0; fv <= 1; fv ++)
- {
- cp=1-cp;
- getback();
- }
+ for (fv = 0; fv <= 1; fv ++) {
+ cp = 1 - cp;
+ getback();
+ }
- {
- dnatype& with = dna;
+ {
+ dnatype &with = dna;
- lastscore="TJA"; /* impossible digits */
- showscore();
- }
+ lastscore = "TJA"; /* impossible digits */
+ showscore();
+ }
- dawn();
+ dawn();
}
-void major_redraw()
-{
- byte fv;
-
- dusk();
- setactivepage(0); cleardevice();
-
- toolbar();
- copy03();
-
- enterroom(dna.room,0); /* 0 = ped unknown or non-existant. */
- for( fv=0; fv <= 1; fv ++) { cp=1-cp; getback(); }
-
- om=177;
- clock();
-
- thinkabout(thinks,thinkthing); standard_bar();
- soundfx=! soundfx; fxtoggle();
- for( fv=0; fv <= 1; fv ++) { cp=1-cp; getback(); }
- plottext();
- ledstatus=177; state(2);
-
- {
- dnatype& with = dna;
-
- lastscore="TJA"; /* impossible digits */
- showscore();
- }
-
- dawn();
+void major_redraw() {
+ byte fv;
+
+ dusk();
+ setactivepage(0);
+ cleardevice();
+
+ toolbar();
+ copy03();
+
+ enterroom(dna.room, 0); /* 0 = ped unknown or non-existant. */
+ for (fv = 0; fv <= 1; fv ++) {
+ cp = 1 - cp;
+ getback();
+ }
+
+ om = 177;
+ clock();
+
+ thinkabout(thinks, thinkthing);
+ standard_bar();
+ soundfx = ! soundfx;
+ fxtoggle();
+ for (fv = 0; fv <= 1; fv ++) {
+ cp = 1 - cp;
+ getback();
+ }
+ plottext();
+ ledstatus = 177;
+ state(2);
+
+ {
+ dnatype &with = dna;
+
+ lastscore = "TJA"; /* impossible digits */
+ showscore();
+ }
+
+ dawn();
}
word bearing(byte whichped)
- /* Returns the bearing from ped Whichped to Avvy, in degrees. */
+/* Returns the bearing from ped Whichped to Avvy, in degrees. */
{
- const real rad2deg = 180/pi;
-
- word bearing_result;
- { pedtype& with = peds[whichped];
- if (tr[1].x==with.x)
- bearing_result=0; /* This would cause a division by zero if we let it through. */
- else
- /*
- bearing:=trunc(((arctan((tr[1].y-y)/(tr[1].x-x)))*rad2deg)+90) mod 360*/
- {
- if (tr[1].x<with.x)
- bearing_result=trunc(atan((real)((tr[1].y-with.y))/(tr[1].x-with.x))*rad2deg)+90;
- else
- bearing_result=trunc(atan((real)((tr[1].y-with.y))/(tr[1].x-with.x))*rad2deg)+270;
- }}
- return bearing_result;
+ const real rad2deg = 180 / pi;
+
+ word bearing_result;
+ {
+ pedtype &with = peds[whichped];
+ if (tr[1].x == with.x)
+ bearing_result = 0; /* This would cause a division by zero if we let it through. */
+ else
+ /*
+ bearing:=trunc(((arctan((tr[1].y-y)/(tr[1].x-x)))*rad2deg)+90) mod 360*/
+ {
+ if (tr[1].x < with.x)
+ bearing_result = trunc(atan((real)((tr[1].y - with.y)) / (tr[1].x - with.x)) * rad2deg) + 90;
+ else
+ bearing_result = trunc(atan((real)((tr[1].y - with.y)) / (tr[1].x - with.x)) * rad2deg) + 270;
+ }
+ }
+ return bearing_result;
}
void flesh_colours() /* assembler;
@@ -1475,43 +1650,51 @@ asm
db 43,22,22;
@TheEnd: */
-{;
+{
+ ;
}
void sprite_run()
- /* A sprite run is performed before displaying a scroll, if not all the
- sprites are still. It performs two fast cycles, only using a few of
- the links usually used, and without any extra animation. This should
- make the sprites the same on both pages. */
+/* A sprite run is performed before displaying a scroll, if not all the
+ sprites are still. It performs two fast cycles, only using a few of
+ the links usually used, and without any extra animation. This should
+ make the sprites the same on both pages. */
{
- byte fv;
+ byte fv;
- doing_sprite_run=true;
+ doing_sprite_run = true;
- for( fv=0; fv <= 1; fv ++)
- {
- get_back_loretta();
- trippancy_link();
+ for (fv = 0; fv <= 1; fv ++) {
+ get_back_loretta();
+ trippancy_link();
- flip_page();
- }
+ flip_page();
+ }
- doing_sprite_run=false;
+ doing_sprite_run = false;
}
-void fix_flashers()
-{ ledstatus=177; oldrw=177; state(2); showrw(); }
+void fix_flashers() {
+ ledstatus = 177;
+ oldrw = 177;
+ state(2);
+ showrw();
+}
class unit_lucerna_initialize {
- public: unit_lucerna_initialize();
+public:
+ unit_lucerna_initialize();
};
static unit_lucerna_initialize lucerna_constructor;
unit_lucerna_initialize::unit_lucerna_initialize() {
- fxhidden=false; oh=17717; om=17717;
- if (atbios) atkey="f1"; else atkey="alt-";
+ fxhidden = false;
+ oh = 17717;
+ om = 17717;
+ if (atbios) atkey = "f1";
+ else atkey = "alt-";
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/lucerna.h b/engines/avalanche/lucerna.h
index 5bf0782a8e..80f57d468b 100644
--- a/engines/avalanche/lucerna.h
+++ b/engines/avalanche/lucerna.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,74 +33,74 @@ namespace Avalanche {
#include "gyro.h"
- void callverb(char n);
+void callverb(char n);
- void draw_also_lines();
+void draw_also_lines();
- void mouse_init();
+void mouse_init();
- void mousepage(word page_);
+void mousepage(word page_);
- void load(byte n);
+void load(byte n);
- void exitroom(byte x);
+void exitroom(byte x);
- void enterroom(byte x,byte ped);
+void enterroom(byte x, byte ped);
- void thinkabout(char z, boolean th); /* Hey!!! Get it and put it!!! */
+void thinkabout(char z, boolean th); /* Hey!!! Get it and put it!!! */
- void load_digits(); /* Load the scoring digits & rwlites */
+void load_digits(); /* Load the scoring digits & rwlites */
- void toolbar();
+void toolbar();
- void showscore();
+void showscore();
- void points(byte num); /* Add on no. of points */
+void points(byte num); /* Add on no. of points */
- void mouseway();
+void mouseway();
- void inkey();
+void inkey();
- void posxy();
+void posxy();
- void fxtoggle();
+void fxtoggle();
- void objectlist();
+void objectlist();
- void checkclick();
+void checkclick();
- void errorled();
+void errorled();
- void dusk();
+void dusk();
- void dawn();
+void dawn();
- void showrw();
+void showrw();
- void mblit(byte x1,byte y1,byte x2,byte y2, byte f,byte t); /* The Minstrel Blitter */
+void mblit(byte x1, byte y1, byte x2, byte y2, byte f, byte t); /* The Minstrel Blitter */
- void blitfix();
+void blitfix();
- void clock();
+void clock();
- void flip_page();
+void flip_page();
- void delavvy();
+void delavvy();
- void gameover();
+void gameover();
- void minor_redraw();
+void minor_redraw();
- void major_redraw();
+void major_redraw();
- word bearing(byte whichped);
+word bearing(byte whichped);
- void flesh_colours();
+void flesh_colours();
- void sprite_run();
+void sprite_run();
- void fix_flashers();
+void fix_flashers();
- } // End of namespace Avalanche.
+} // End of namespace Avalanche.
#endif \ No newline at end of file
diff --git a/engines/avalanche/magic2.cpp b/engines/avalanche/magic2.cpp
index 130e188092..0845a05271 100644
--- a/engines/avalanche/magic2.cpp
+++ b/engines/avalanche/magic2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,33 +32,38 @@ namespace Avalanche {
const longint pagetop = 81920;
const word nextcode = 17717;
-integer gd,gm;
-file<word> magic,out;
-word next,gg;
+integer gd, gm;
+file<word> magic, out;
+word next, gg;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- assign(magic,"v:magicirc.avd"); reset(magic);
- assign(out,"v:magic2.avd"); rewrite(out);
- move(mem[0xa000*0],mem[0xa000*pagetop],16000);
- while (! eof(magic))
- {;
- magic >> next;
- if (next!=nextcode)
- mem[0xa000*next]=255;
- else
- {;
- for( gg=0; gg <= 16000; gg ++)
- if (mem[0xa000*gg]!=mem[0xa000*gg+pagetop])
- out << gg;
- out << nextcode;
- move(mem[0xa000*0],mem[0xa000*pagetop],16000);
- }
- }
- close(magic); close(out);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ assign(magic, "v:magicirc.avd");
+ reset(magic);
+ assign(out, "v:magic2.avd");
+ rewrite(out);
+ move(mem[0xa000 * 0], mem[0xa000 * pagetop], 16000);
+ while (! eof(magic)) {
+ ;
+ magic >> next;
+ if (next != nextcode)
+ mem[0xa000 * next] = 255;
+ else {
+ ;
+ for (gg = 0; gg <= 16000; gg ++)
+ if (mem[0xa000 * gg] != mem[0xa000 * gg + pagetop])
+ out << gg;
+ out << nextcode;
+ move(mem[0xa000 * 0], mem[0xa000 * pagetop], 16000);
+ }
+ }
+ close(magic);
+ close(out);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/magidraw.cpp b/engines/avalanche/magidraw.cpp
index 241f69265b..0f280c29e0 100644
--- a/engines/avalanche/magidraw.cpp
+++ b/engines/avalanche/magidraw.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,30 +32,33 @@ namespace Avalanche {
const word nextcode = 17717;
-integer gd,gm;
+integer gd, gm;
untyped_file magic; /* of word;*/
word next;
-array<1,16401,word> buffer;
-
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- assign(magic,"v:magic2.avd"); reset(magic,1);
- blockread(magic,buffer,sizeof(buffer));
- close(magic);
-/* while not eof(magic) do*/
- for( gd=1; gd <= 16401; gd ++)
- {;
-/* read(magic,next);
- if next<>nextcode then*/
- if (buffer[gd]!=nextcode)
- mem[0xa000*buffer[gd]]=255;
- else
- delay(1);
- }
-/* close(magic);*/
-return EXIT_SUCCESS;
+array<1, 16401, word> buffer;
+
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ assign(magic, "v:magic2.avd");
+ reset(magic, 1);
+ blockread(magic, buffer, sizeof(buffer));
+ close(magic);
+ /* while not eof(magic) do*/
+ for (gd = 1; gd <= 16401; gd ++) {
+ ;
+ /* read(magic,next);
+ if next<>nextcode then*/
+ if (buffer[gd] != nextcode)
+ mem[0xa000 * buffer[gd]] = 255;
+ else
+ delay(1);
+ }
+ /* close(magic);*/
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/magishuf.cpp b/engines/avalanche/magishuf.cpp
index 6706ceb56f..2ef6e37fed 100644
--- a/engines/avalanche/magishuf.cpp
+++ b/engines/avalanche/magishuf.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,8 +32,8 @@ namespace Avalanche {
const word nextcode = 17717;
-typedef array<1,8000,word> big;
-typedef array<1,16401,word> circle;
+typedef array<1, 8000, word> big;
+typedef array<1, 16401, word> circle;
big b;
file<big> f;
@@ -42,46 +42,57 @@ word gd;
circle c;
file<circle> fc;
-void melt(byte c)
-{;
- for( gd=1; gd <= 8000; gd ++)
- {;
- mem[0xa000*b[gd]]=c;
- if ((gd % 17)==0) delay(1);
- }
+void melt(byte c) {
+ ;
+ for (gd = 1; gd <= 8000; gd ++) {
+ ;
+ mem[0xa000 * b[gd]] = c;
+ if ((gd % 17) == 0) delay(1);
+ }
}
-void magicirc(byte cc)
-{;
- for( gd=1; gd <= 16401; gd ++)
- {;
- if (c[gd]!=nextcode)
- {;
- if (odd(c[gd])) mem[0xa000*c[gd] / 2]=cc;
- } else
- delay(1);
- }
+void magicirc(byte cc) {
+ ;
+ for (gd = 1; gd <= 16401; gd ++) {
+ ;
+ if (c[gd] != nextcode) {
+ ;
+ if (odd(c[gd])) mem[0xa000 * c[gd] / 2] = cc;
+ } else
+ delay(1);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- r.ax=13; intr(0x10,r);
- assign(f,"d:shuffle.avd"); reset(f); f >> b; close(f);
- assign(fc,"v:magic2.avd"); reset(fc); fc >> c; close(fc);
-/* repeat
- melt(170); magicirc(85);
- magicirc(170); melt(85);
- magicirc(170); magicirc(85);
- melt(170); melt(85);
- until keypressed;*/
- do {
- melt(255); magicirc(0);
- magicirc(255); melt(0);
- magicirc(255); magicirc(0);
- melt(255); melt(0);
- } while (!keypressed());
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ r.ax = 13;
+ intr(0x10, r);
+ assign(f, "d:shuffle.avd");
+ reset(f);
+ f >> b;
+ close(f);
+ assign(fc, "v:magic2.avd");
+ reset(fc);
+ fc >> c;
+ close(fc);
+ /* repeat
+ melt(170); magicirc(85);
+ magicirc(170); melt(85);
+ magicirc(170); magicirc(85);
+ melt(170); melt(85);
+ until keypressed;*/
+ do {
+ melt(255);
+ magicirc(0);
+ magicirc(255);
+ melt(0);
+ magicirc(255);
+ magicirc(0);
+ melt(255);
+ melt(0);
+ } while (!keypressed());
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/make!.cpp b/engines/avalanche/make!.cpp
index 353b461387..a4cf27801f 100644
--- a/engines/avalanche/make!.cpp
+++ b/engines/avalanche/make!.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,61 +31,72 @@
namespace Avalanche {
/*$S-*/
-integer gd,gm;
+integer gd, gm;
untyped_file f;
text t;
string x;
-boolean subpix(integer x,integer y)
-{boolean subpix_result;
-;
- subpix_result=getpixel(x,y)==15;
-return subpix_result;
+boolean subpix(integer x, integer y) {
+ boolean subpix_result;
+ ;
+ subpix_result = getpixel(x, y) == 15;
+ return subpix_result;
}
-byte pixel(integer x,integer y)
-{byte pixel_result;
-;
- pixel_result=(byte)(
- subpix(x*4,y*2) ||
- subpix(x*4+1,y*2) ||
- subpix(x*4+2,y*2) ||
- subpix(x*4+3,y*2) ||
- subpix(x*4,y*2+1) ||
- subpix(x*4+1,y*2+1) ||
- subpix(x*4+2,y*2+1) ||
- subpix(x*4+3,y*2+1)
- )*15;
-return pixel_result;
+byte pixel(integer x, integer y) {
+ byte pixel_result;
+ ;
+ pixel_result = (byte)(
+ subpix(x * 4, y * 2) ||
+ subpix(x * 4 + 1, y * 2) ||
+ subpix(x * 4 + 2, y * 2) ||
+ subpix(x * 4 + 3, y * 2) ||
+ subpix(x * 4, y * 2 + 1) ||
+ subpix(x * 4 + 1, y * 2 + 1) ||
+ subpix(x * 4 + 2, y * 2 + 1) ||
+ subpix(x * 4 + 3, y * 2 + 1)
+ ) * 15;
+ return pixel_result;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=1; initgraph(gd,gm,"o:");
- assign(f,"v:logo.avd"); reset(f,1);
- for( gd=0; gd <= 180; gd ++)
- blockread(f,mem[0xa000*(gd*80)],53);
- close(f);
- for( gd=1; gd <= 106; gd ++)
- for( gm=0; gm <= 145; gm ++)
- putpixel(gd,gm+181,pixel(gd,gm));
- assign(t,"d:avalot.txt");
- rewrite(t);
- for( gm=1; gm <= 36; gm ++)
- {;
- x="";
- for( gd=1; gd <= 106; gd ++)
- switch (getpixel(gd,gm*2+181)*2+getpixel(gd,gm*2+182)) {
- case 0: x=x+' '; break;
- case 15: x=x+'Ü'; break;
- case 30: x=x+'ß'; break;
- case 45: x=x+'Û'; break;
- }
- t << x << NL;
- }
- close(t);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "o:");
+ assign(f, "v:logo.avd");
+ reset(f, 1);
+ for (gd = 0; gd <= 180; gd ++)
+ blockread(f, mem[0xa000 * (gd * 80)], 53);
+ close(f);
+ for (gd = 1; gd <= 106; gd ++)
+ for (gm = 0; gm <= 145; gm ++)
+ putpixel(gd, gm + 181, pixel(gd, gm));
+ assign(t, "d:avalot.txt");
+ rewrite(t);
+ for (gm = 1; gm <= 36; gm ++) {
+ ;
+ x = "";
+ for (gd = 1; gd <= 106; gd ++)
+ switch (getpixel(gd, gm * 2 + 181) * 2 + getpixel(gd, gm * 2 + 182)) {
+ case 0:
+ x = x + ' ';
+ break;
+ case 15:
+ x = x + 'Ü';
+ break;
+ case 30:
+ x = x + 'ß';
+ break;
+ case 45:
+ x = x + 'Û';
+ break;
+ }
+ t << x << NL;
+ }
+ close(t);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/makesez.cpp b/engines/avalanche/makesez.cpp
index 3c46e18e46..1307f17515 100644
--- a/engines/avalanche/makesez.cpp
+++ b/engines/avalanche/makesez.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -28,15 +28,15 @@
namespace Avalanche {
struct sezheader {
- array<1,2,char> initials; /* should be "TT" */
- word gamecode;
- word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
- longint chains; /* number of scroll chains */
- longint size; /* total size of all scroll chains */
+ array<1, 2, char> initials; /* should be "TT" */
+ word gamecode;
+ word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
+ longint chains; /* number of scroll chains */
+ longint size; /* total size of all scroll chains */
};
-const string crlf = string('\15')+'\12';
-const string tabs = string('\11')+'\11'+'\11'+'\11'+'\11'+'\11'+'\11';
+const string crlf = string('\15') + '\12';
+const string tabs = string('\11') + '\11' + '\11' + '\11' + '\11' + '\11' + '\11';
const char eof_ = '\32';
untyped_file sez;
@@ -44,31 +44,32 @@ sezheader header;
string x;
char check;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- fillchar(x,sizeof(x),'\261');
- x=string("This is a Sez file for an Avvy game, and its contents are subject")+crlf+
- "to copyright. Have fun with the game!"+crlf+crlf+tabs+"tt"+crlf+crlf+
- "[Lord Avalot D'Argent]"+crlf+crlf+eof_+
- crlf+crlf+"Thomas was here!";
- {;
- header.initials="TT";
- header.gamecode=2; /* code for Avalot */
- header.revision=100; /* version 1.00 */
- header.chains=0; /* no chains */
- header.size=0; /* empty! */
- }
- check='\261';
- assign(sez,"avalot.sez");
- rewrite(sez,1);
- blockwrite(sez,x[1],255);
- blockwrite(sez,header,sizeof(header));
- blockwrite(sez,check,1);
- x=string('\0')+'\0'+'\0'+"Thomas was here, too!"+crlf+crlf+"Good luck...";
- blockwrite(sez,x[1],39); /* footer */
- close(sez);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ fillchar(x, sizeof(x), '\261');
+ x = string("This is a Sez file for an Avvy game, and its contents are subject") + crlf +
+ "to copyright. Have fun with the game!" + crlf + crlf + tabs + "tt" + crlf + crlf +
+ "[Lord Avalot D'Argent]" + crlf + crlf + eof_ +
+ crlf + crlf + "Thomas was here!";
+ {
+ ;
+ header.initials = "TT";
+ header.gamecode = 2; /* code for Avalot */
+ header.revision = 100; /* version 1.00 */
+ header.chains = 0; /* no chains */
+ header.size = 0; /* empty! */
+ }
+ check = '\261';
+ assign(sez, "avalot.sez");
+ rewrite(sez, 1);
+ blockwrite(sez, x[1], 255);
+ blockwrite(sez, header, sizeof(header));
+ blockwrite(sez, check, 1);
+ x = string('\0') + '\0' + '\0' + "Thomas was here, too!" + crlf + crlf + "Good luck...";
+ blockwrite(sez, x[1], 39); /* footer */
+ close(sez);
+ return EXIT_SUCCESS;
}
diff --git a/engines/avalanche/makevmou.cpp b/engines/avalanche/makevmou.cpp
index 9f509f16c6..3b71276a61 100644
--- a/engines/avalanche/makevmou.cpp
+++ b/engines/avalanche/makevmou.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,265 +33,292 @@
namespace Avalanche {
struct mp { /* mouse-pointer */
- matrix<0,1,0,15,word> mask;
- integer horzhotspot,verthotspot;
+ matrix<0, 1, 0, 15, word> mask;
+ integer horzhotspot, verthotspot;
};
struct vmctype { /* Virtual Mouse Cursor */
- pointer andpic,xorpic;
- array<0,1,pointer> backpic;
- array<0,1,pointtype> wherewas;
- byte picnumber;
- shortint ofsx,ofsy;
+ pointer andpic, xorpic;
+ array<0, 1, pointer> backpic;
+ array<0, 1, pointtype> wherewas;
+ byte picnumber;
+ shortint ofsx, ofsy;
};
-const array<1,9,arrowtype> mps =
-{{{ /* 1 - up-arrow */
- ((65151,64575,64575,63519,63519,61455,61455,57351,57351,49155,49155,64575,64575,64575,64575,64575),
- (0,384,384,960,960,2016,2016,4080,4080,8184,384,384,384,384,384,0)),
- 8,
- 0},
-
-{ /* 2 - screwdriver */
- ((8191,4095,2047,34815,50175,61951,63743,64543,65039,65031,65027,65281,65408,65472,65505,65523),
- (0,24576,28672,12288,2048,1024,512,256,224,176,216,96,38,10,12,0)),
- 0,
- 0},
-
-{ /* 3 - right-arrow */
- ((65535,65535,64639,64543,7,1,0,1,7,64543,64639,65535,65535,65535,65535,65535),
- (0,0,0,384,480,32760,32766,32760,480,384,0,0,0,0,0,0)),
- 15,
- 6},
-
-{ /* 4 - fletch */
- ((255,511,1023,2047,1023,4607,14591,31871,65031,65283,65281,65280,65280,65409,65473,65511),
- (0,10240,20480,24576,26624,17408,512,256,128,88,32,86,72,20,16,0)),
- 0,
- 0},
-
-{ /* 5 - hourglass */
- ((0,0,0,34785,50115,61455,61455,63519,63519,61839,61455,49155,32769,0,0,0),
- (0,32766,16386,12300,2064,1440,1440,576,576,1056,1440,3024,14316,16386,32766,0)),
- 8,
- 7},
-
-{ /* 6 - TTHand */
- ((62463,57855,57855,57855,57471,49167,32769,0,0,0,0,32768,49152,57344,61441,61443),
- (3072,4608,4608,4608,4992,12912,21070,36937,36873,36865,32769,16385,8193,4097,2050,4092)),
- 4,
- 0},
-
-{ /* 7- Mark's crosshairs */
- ((65535,65151,65151,65151,65151,0,65151,65151,65151,65151,65535,65535,65535,65535,65535,65535),
- (0,384,384,384,384,65535,384,384,384,384,0,0,0,0,0,0)),
- 8,
- 5},
-
-{ /* 8- I-beam. */
- ((65535,65535,63631,63503,63503,65087,65087,65087,65087,65087,63503,63503,63631,65535,65535,65535),
- (0,0,0,864,128,128,128,128,128,128,128,864,0,0,0,0)),
- 8,
- 7},
-
-{ /* 9- Question mark. */
- ((511,1023,2047,31,15,8199,32647,65415,63503,61471,61503,61695,63999,63999,61695,61695),
- (65024,33792,34816,34784,40976,57224,32840,72,1936,2080,2496,2304,1536,1536,2304,3840)),
- 0,
- 0}}};
+const array<1, 9, arrowtype> mps = {
+ { {
+ /* 1 - up-arrow */
+ ((65151, 64575, 64575, 63519, 63519, 61455, 61455, 57351, 57351, 49155, 49155, 64575, 64575, 64575, 64575, 64575),
+ (0, 384, 384, 960, 960, 2016, 2016, 4080, 4080, 8184, 384, 384, 384, 384, 384, 0)),
+ 8,
+ 0
+ },
+
+ {
+ /* 2 - screwdriver */
+ ((8191, 4095, 2047, 34815, 50175, 61951, 63743, 64543, 65039, 65031, 65027, 65281, 65408, 65472, 65505, 65523),
+ (0, 24576, 28672, 12288, 2048, 1024, 512, 256, 224, 176, 216, 96, 38, 10, 12, 0)),
+ 0,
+ 0
+ },
+
+ {
+ /* 3 - right-arrow */
+ ((65535, 65535, 64639, 64543, 7, 1, 0, 1, 7, 64543, 64639, 65535, 65535, 65535, 65535, 65535),
+ (0, 0, 0, 384, 480, 32760, 32766, 32760, 480, 384, 0, 0, 0, 0, 0, 0)),
+ 15,
+ 6
+ },
+
+ {
+ /* 4 - fletch */
+ ((255, 511, 1023, 2047, 1023, 4607, 14591, 31871, 65031, 65283, 65281, 65280, 65280, 65409, 65473, 65511),
+ (0, 10240, 20480, 24576, 26624, 17408, 512, 256, 128, 88, 32, 86, 72, 20, 16, 0)),
+ 0,
+ 0
+ },
+
+ {
+ /* 5 - hourglass */
+ ((0, 0, 0, 34785, 50115, 61455, 61455, 63519, 63519, 61839, 61455, 49155, 32769, 0, 0, 0),
+ (0, 32766, 16386, 12300, 2064, 1440, 1440, 576, 576, 1056, 1440, 3024, 14316, 16386, 32766, 0)),
+ 8,
+ 7
+ },
+
+ {
+ /* 6 - TTHand */
+ ((62463, 57855, 57855, 57855, 57471, 49167, 32769, 0, 0, 0, 0, 32768, 49152, 57344, 61441, 61443),
+ (3072, 4608, 4608, 4608, 4992, 12912, 21070, 36937, 36873, 36865, 32769, 16385, 8193, 4097, 2050, 4092)),
+ 4,
+ 0
+ },
+
+ {
+ /* 7- Mark's crosshairs */
+ ((65535, 65151, 65151, 65151, 65151, 0, 65151, 65151, 65151, 65151, 65535, 65535, 65535, 65535, 65535, 65535),
+ (0, 384, 384, 384, 384, 65535, 384, 384, 384, 384, 0, 0, 0, 0, 0, 0)),
+ 8,
+ 5
+ },
+
+ {
+ /* 8- I-beam. */
+ ((65535, 65535, 63631, 63503, 63503, 65087, 65087, 65087, 65087, 65087, 63503, 63503, 63631, 65535, 65535, 65535),
+ (0, 0, 0, 864, 128, 128, 128, 128, 128, 128, 128, 864, 0, 0, 0, 0)),
+ 8,
+ 7
+ },
+
+ {
+ /* 9- Question mark. */
+ ((511, 1023, 2047, 31, 15, 8199, 32647, 65415, 63503, 61471, 61503, 61695, 63999, 63999, 61695, 61695),
+ (65024, 33792, 34816, 34784, 40976, 57224, 32840, 72, 1936, 2080, 2496, 2304, 1536, 1536, 2304, 3840)),
+ 0,
+ 0
+ }
+ }
+};
const integer mouse_size = 134;
-const array<1,134,char> mice_header =
- string("Mouse file copyright (c) 1993. I saw a mouse! Where? SQUEEAAAKK!!! Cheese ")+ /* 74 */
- "cheese cheese. Cheddar, Stilton, Double Gloucester. Squeak."+'\32'; /* 60 */
+const array<1, 134, char> mice_header =
+ string("Mouse file copyright (c) 1993. I saw a mouse! Where? SQUEEAAAKK!!! Cheese ") + /* 74 */
+ "cheese cheese. Cheddar, Stilton, Double Gloucester. Squeak." +'\32'; /* 60 */
-integer gd,gm;
-matrix<0,50,1,40,word> a /*absolute $A000:0i*/;
+integer gd, gm;
+matrix<0, 50, 1, 40, word> a /*absolute $A000:0i*/;
byte fv;
vmctype vmc;
-byte plot; integer plx,ply;
-
-word swapbits(word a)
-{word swapbits_result;
-;
- swapbits_result=lo(a)*256+hi(a);
-return swapbits_result;
+byte plot;
+integer plx, ply;
+
+word swapbits(word a) {
+ word swapbits_result;
+ ;
+ swapbits_result = lo(a) * 256 + hi(a);
+ return swapbits_result;
}
-void plot_vmc(integer xx,integer yy, byte page_)
-{;
- {;
- xx=xx+vmc.ofsx;
- yy=yy+vmc.ofsy;
-
- getimage(xx,yy,xx+15,yy+15,vmc.backpic[page_]);
- putimage(xx,yy,vmc.andpic,andput);
- putimage(xx,yy,vmc.xorpic,xorput);
- {
- pointtype& with1 = vmc.wherewas[page_];
- ;
- with1.x=xx;
- with1.y=yy;
- }
- }
+void plot_vmc(integer xx, integer yy, byte page_) {
+ ;
+ {
+ ;
+ xx = xx + vmc.ofsx;
+ yy = yy + vmc.ofsy;
+
+ getimage(xx, yy, xx + 15, yy + 15, vmc.backpic[page_]);
+ putimage(xx, yy, vmc.andpic, andput);
+ putimage(xx, yy, vmc.xorpic, xorput);
+ {
+ pointtype &with1 = vmc.wherewas[page_];
+ ;
+ with1.x = xx;
+ with1.y = yy;
+ }
+ }
}
-void wipe_vmc(byte page_)
-{;
- { pointtype& with1 = vmc.wherewas[page_];
- if (with1.x!=maxint)
- putimage(with1.x,with1.y,vmc.backpic[page_],0);}
+void wipe_vmc(byte page_) {
+ ;
+ {
+ pointtype &with1 = vmc.wherewas[page_];
+ if (with1.x != maxint)
+ putimage(with1.x, with1.y, vmc.backpic[page_], 0);
+ }
}
-void setup_vmc()
-{
- byte fv;
-;
-/* gd:=imagesize(0,0,15,15);*/
-
- {;
- getmem(vmc.andpic,mouse_size);
- getmem(vmc.xorpic,mouse_size);
-
- for( fv=0; fv <= 1; fv ++)
- {;
- getmem(vmc.backpic[fv],mouse_size);
- vmc.wherewas[fv].x=maxint;
- }
- }
+void setup_vmc() {
+ byte fv;
+ ;
+ /* gd:=imagesize(0,0,15,15);*/
+
+ {
+ ;
+ getmem(vmc.andpic, mouse_size);
+ getmem(vmc.xorpic, mouse_size);
+
+ for (fv = 0; fv <= 1; fv ++) {
+ ;
+ getmem(vmc.backpic[fv], mouse_size);
+ vmc.wherewas[fv].x = maxint;
+ }
+ }
}
-void show_off_mouse()
-{;
+void show_off_mouse() {
+ ;
- setcolor(14); settextstyle(0,0,2);
+ setcolor(14);
+ settextstyle(0, 0, 2);
- for( gm=0; gm <= 1; gm ++)
- {;
- setactivepage(gm);
- setfillstyle(1,blue); bar(0,0,getmaxx(),getmaxy());
- outtextxy(400,20,chr(48+gm));
- }
+ for (gm = 0; gm <= 1; gm ++) {
+ ;
+ setactivepage(gm);
+ setfillstyle(1, blue);
+ bar(0, 0, getmaxx(), getmaxy());
+ outtextxy(400, 20, chr(48 + gm));
+ }
- gd=0;
- do {
- setactivepage(gd);
- setvisualpage(1-gd);
- gd=1-gd;
+ gd = 0;
+ do {
+ setactivepage(gd);
+ setvisualpage(1 - gd);
+ gd = 1 - gd;
- delay(56);
+ delay(56);
- getbuttonstatus;
- wipe_vmc(gd);
+ getbuttonstatus;
+ wipe_vmc(gd);
- if (plot>0)
- {;
- putpixel(plx,ply,red);
- plot -= 1;
- }
+ if (plot > 0) {
+ ;
+ putpixel(plx, ply, red);
+ plot -= 1;
+ }
- plot_vmc(mx,my,gd);
+ plot_vmc(mx, my, gd);
- if ((mkey==left) && (plot==0))
- {;
- plot=2;
- plx=mx;
- ply=my;
- }
+ if ((mkey == left) && (plot == 0)) {
+ ;
+ plot = 2;
+ plx = mx;
+ ply = my;
+ }
- } while (!(mkey==right));
+ } while (!(mkey == right));
- for( gm=0; gm <= 1; gm ++)
- {;
- setactivepage(1-gm);
- wipe_vmc(gm);
- }
+ for (gm = 0; gm <= 1; gm ++) {
+ ;
+ setactivepage(1 - gm);
+ wipe_vmc(gm);
+ }
- setvisualpage(0);
- setactivepage(0);
+ setvisualpage(0);
+ setactivepage(0);
}
-void grab_cursor(byte n)
-{;
- getimage(32*n-16, 0,32*n-1,15,vmc.andpic);
- getimage(32*n-16,20,32*n-1,35,vmc.xorpic);
+void grab_cursor(byte n) {
+ ;
+ getimage(32 * n - 16, 0, 32 * n - 1, 15, vmc.andpic);
+ getimage(32 * n - 16, 20, 32 * n - 1, 35, vmc.xorpic);
}
-void save_mice()
-{
- untyped_file f;
- byte fv;
-;
- assign(f,"v:mice.avd");
- rewrite(f,1);
-
- blockwrite(f,mice_header,mouse_size);
-
- for( fv=1; fv <= 9; fv ++)
- {;
- grab_cursor(fv);
- putimage(100,100,vmc.xorpic,0);
- blockwrite(f,vmc.andpic,mouse_size);
- blockwrite(f,vmc.xorpic,mouse_size);
- }
-
- close(f);
+void save_mice() {
+ untyped_file f;
+ byte fv;
+ ;
+ assign(f, "v:mice.avd");
+ rewrite(f, 1);
+
+ blockwrite(f, mice_header, mouse_size);
+
+ for (fv = 1; fv <= 9; fv ++) {
+ ;
+ grab_cursor(fv);
+ putimage(100, 100, vmc.xorpic, 0);
+ blockwrite(f, vmc.andpic, mouse_size);
+ blockwrite(f, vmc.xorpic, mouse_size);
+ }
+
+ close(f);
}
-void load_a_mouse(byte which)
-{
- untyped_file f;
-;
- assign(f,"v:mice.avd");
- reset(f,1);
- seek(f,mouse_size*2*(which-1)+134);
-
- {;
- blockread(f,vmc.andpic,mouse_size);
- blockread(f,vmc.xorpic,mouse_size);
- close(f);
- {
- void& with1 = mps[which];
- ;
- vmc.ofsx=-horzhotspot;
- vmc.ofsy=-verthotspot;
-
- setminmaxhorzcurspos(horzhotspot,624+horzhotspot);
- setminmaxvertcurspos(verthotspot,199);
- }
- }
+void load_a_mouse(byte which) {
+ untyped_file f;
+ ;
+ assign(f, "v:mice.avd");
+ reset(f, 1);
+ seek(f, mouse_size * 2 * (which - 1) + 134);
+
+ {
+ ;
+ blockread(f, vmc.andpic, mouse_size);
+ blockread(f, vmc.xorpic, mouse_size);
+ close(f);
+ {
+ void &with1 = mps[which];
+ ;
+ vmc.ofsx = -horzhotspot;
+ vmc.ofsy = -verthotspot;
+
+ setminmaxhorzcurspos(horzhotspot, 624 + horzhotspot);
+ setminmaxvertcurspos(verthotspot, 199);
+ }
+ }
}
-void draw_mouse_cursors()
-{;
- for( fv=1; fv <= 9; fv ++)
- for( gm=0; gm <= 1; gm ++)
- for( gd=0; gd <= 15; gd ++)
- a[gd+gm*20][fv*2]=swapbits(mps[fv].mask[gm][gd]);
+void draw_mouse_cursors() {
+ ;
+ for (fv = 1; fv <= 9; fv ++)
+ for (gm = 0; gm <= 1; gm ++)
+ for (gd = 0; gd <= 15; gd ++)
+ a[gd + gm * 20][fv * 2] = swapbits(mps[fv].mask[gm][gd]);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- resetmouse;
- setup_vmc();
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ resetmouse;
+ setup_vmc();
- draw_mouse_cursors();
+ draw_mouse_cursors();
- save_mice();
+ save_mice();
-/* grab_cursor(3);*/
-/* load_a_mouse(4);
- setgraphicscursor(mps[4]);
+ /* grab_cursor(3);*/
+ /* load_a_mouse(4);
+ setgraphicscursor(mps[4]);
- show_off_mouse;
- on; repeat getbuttonstatus until mkey=left; off;
- show_off_mouse;*/
-return EXIT_SUCCESS;
+ show_off_mouse;
+ on; repeat getbuttonstatus until mkey=left; off;
+ show_off_mouse;*/
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/menuxf.cpp b/engines/avalanche/menuxf.cpp
index 17fa553afe..704d6eb260 100644
--- a/engines/avalanche/menuxf.cpp
+++ b/engines/avalanche/menuxf.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,48 +29,53 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
-void load() /* Load2, actually */
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
+void load() { /* Load2, actually */
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
- assign(f,"maintemp.avd"); reset(f,1);
- /* Compression method byte follows this... */
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
- bit=getpixel(0,0);
+ assign(f, "maintemp.avd");
+ reset(f, 1);
+ /* Compression method byte follows this... */
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-void save()
-{
- byte bit; untyped_file f;
+void save() {
+ byte bit;
+ untyped_file f;
- assign(f,"v:mainmenu.avd");
- rewrite(f,1);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,mem[0xa000*48*80],59*80);
- }
- close(f);
+ assign(f, "v:mainmenu.avd");
+ rewrite(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, mem[0xa000 * 48 * 80], 59 * 80);
+ }
+ close(f);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gd=3; gm=1; initgraph(gd,gm,"");
- load(); /* Between 48 and 107. */
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ load(); /* Between 48 and 107. */
- save();
- return EXIT_SUCCESS;
+ save();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/minstran.cpp b/engines/avalanche/minstran.cpp
index 38608c8ca0..3a88863acc 100644
--- a/engines/avalanche/minstran.cpp
+++ b/engines/avalanche/minstran.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,37 +29,53 @@
namespace Avalanche {
-integer gd,gm;
-pointer p; word s;
+integer gd, gm;
+pointer p;
+word s;
-void mblit(integer x1,integer y1,integer x2,integer y2) /* Minstrel Blitter */
-{
- integer yy,len,pp; byte bit; const integer offset = 16384;
-;
- x1=x1 / 8; len=((x2 / 8)-x1)+1;
- for( yy=y1; yy <= y2; yy ++)
- {;
- pp=yy*80+x1;
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(mem[0xa000*offset+pp],mem[0xa000*pp],len);
- }
- }
+void mblit(integer x1, integer y1, integer x2, integer y2) { /* Minstrel Blitter */
+ integer yy, len, pp;
+ byte bit;
+ const integer offset = 16384;
+ ;
+ x1 = x1 / 8;
+ len = ((x2 / 8) - x1) + 1;
+ for (yy = y1; yy <= y2; yy ++) {
+ ;
+ pp = yy * 80 + x1;
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(mem[0xa000 * offset + pp], mem[0xa000 * pp], len);
+ }
+ }
}
-const integer fx1 = 100; const integer fy1 = 100; const integer fx2 = 135; const integer fy2 = 145;
+const integer fx1 = 100;
+const integer fy1 = 100;
+const integer fx2 = 135;
+const integer fy2 = 145;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- setactivepage(1); setfillstyle(7,9); bar(0,0,640,200);
- mblit(fx1,fy1,fx2,fy2);
- s=imagesize(fx1,fy1,fx2,fy2); getmem(p,s);
- getimage(fx1,fy1,fx2,fy2,p); setactivepage(0);
- putimage(fx1+100,fy1,p,0); freemem(p,s);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ setactivepage(1);
+ setfillstyle(7, 9);
+ bar(0, 0, 640, 200);
+ mblit(fx1, fy1, fx2, fy2);
+ s = imagesize(fx1, fy1, fx2, fy2);
+ getmem(p, s);
+ getimage(fx1, fy1, fx2, fy2, p);
+ setactivepage(0);
+ putimage(fx1 + 100, fy1, p, 0);
+ freemem(p, s);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/newsprit.cpp b/engines/avalanche/newsprit.cpp
index e18c0bea40..e5c4774428 100644
--- a/engines/avalanche/newsprit.cpp
+++ b/engines/avalanche/newsprit.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,122 +30,132 @@
namespace Avalanche {
-const string crlf = string('\15')+'\12'; const char eof_ = '\32';
-const array<1,177,char> trip5head =
- string("Sprite*.AVD ... data file for Trippancy Five")+crlf+crlf+
- "[Thorsoft relocatable fiveplane sprite image format]"+crlf+crlf+
- "Thomas Thurman was here. ... Have fun!"+crlf+crlf+eof_+
- "±±±±±±± * G. I. E. D. ! * ";
+const string crlf = string('\15') + '\12';
+const char eof_ = '\32';
+const array<1, 177, char> trip5head =
+ string("Sprite*.AVD ... data file for Trippancy Five") + crlf + crlf +
+ "[Thorsoft relocatable fiveplane sprite image format]" + crlf + crlf +
+ "Thomas Thurman was here. ... Have fun!" + crlf + crlf + eof_ +
+ "±±±±±±± * G. I. E. D. ! * ";
-const array<1,4,char> tripid = string('\x30')+'\x1'+'\x75'+'\261';
+const array<1, 4, char> tripid = string('\x30') + '\x1' + '\x75' + '\261';
-const array<1,50,char> trip5foot = crlf+crlf+
- " and that's it! Enjoy the game. "+'\3'+crlf+crlf+
- "\n\n\n\n\n\n\n"+"tt";
+const array<1, 50, char> trip5foot = crlf + crlf +
+ " and that's it! Enjoy the game. " + '\3' + crlf + crlf +
+ "\n\n\n\n\n\n\n" + "tt";
struct adxotype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
struct adxtype {
- varying_string<12> name; /* name of character */
- varying_string<16> comment; /* comment */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
- byte accinum; /* the number according to Acci (1=Avvy, etc.) */
+ varying_string<12> name; /* name of character */
+ varying_string<16> comment; /* comment */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
+ byte accinum; /* the number according to Acci (1=Avvy, etc.) */
};
varying_string<2> sn;
adxotype oa;
adxtype a;
-matrix<1,24,0,1,pointer> pic; /* the pictures themselves */
-array<1,16000,byte> aa;
+matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */
+array<1, 16000, byte> aa;
untyped_file out;
integer bigsize;
-void copyaoa()
-{;
- {;
- a.name=oa.name;
- a.comment="Transferred";
- a.num=oa.num;
- a.xl=oa.xl;
- a.yl=oa.yl;
- a.seq=oa.seq;
- a.size=oa.size;
- a.fgc=oa.fgc;
- a.bgc=oa.bgc;
- }
+void copyaoa() {
+ ;
+ {
+ ;
+ a.name = oa.name;
+ a.comment = "Transferred";
+ a.num = oa.num;
+ a.xl = oa.xl;
+ a.yl = oa.yl;
+ a.seq = oa.seq;
+ a.size = oa.size;
+ a.fgc = oa.fgc;
+ a.bgc = oa.bgc;
+ }
}
-void setup()
-{
- integer gd,gm;
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
+void setup() {
+ integer gd, gm;
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
}
-string strf(longint x)
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
+string strf(longint x) {
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
}
-void save()
-{
- byte sort,n;
- word fv,ff; char r; byte xw;
- byte nxl,nyl;
- word soa;
-;
- cleardevice();
- {;
- a.xl=45; a.yl=10; a.num=1; a.seq=1;
- a.size=imagesize(0,0,a.xl,a.yl);
- soa=sizeof(a);
-
- assign(out,"v:sprite10.avd"); rewrite(out,1);
- blockwrite(out,trip5head,177);
- blockwrite(out,tripid,4);
- blockwrite(out,soa,2);
- blockwrite(out,a,soa);
-
- nxl=a.xl; nyl=a.yl;
- xw=nxl / 8;
- if ((nxl % 8)>0) xw += 1;
-
- for( n=1; n <= a.num; n ++)
- {;
- getimage( 0,0,a.xl,a.yl,aa);
- for( fv=0; fv <= nyl; fv ++)
- blockwrite(out,aa[5+fv*xw*4],xw);
-
- getimage(100,0,100+a.xl,a.yl,aa);
- blockwrite(out,aa[5],a.size-6);
- }
- }
+void save() {
+ byte sort, n;
+ word fv, ff;
+ char r;
+ byte xw;
+ byte nxl, nyl;
+ word soa;
+ ;
+ cleardevice();
+ {
+ ;
+ a.xl = 45;
+ a.yl = 10;
+ a.num = 1;
+ a.seq = 1;
+ a.size = imagesize(0, 0, a.xl, a.yl);
+ soa = sizeof(a);
+
+ assign(out, "v:sprite10.avd");
+ rewrite(out, 1);
+ blockwrite(out, trip5head, 177);
+ blockwrite(out, tripid, 4);
+ blockwrite(out, soa, 2);
+ blockwrite(out, a, soa);
+
+ nxl = a.xl;
+ nyl = a.yl;
+ xw = nxl / 8;
+ if ((nxl % 8) > 0) xw += 1;
+
+ for (n = 1; n <= a.num; n ++) {
+ ;
+ getimage(0, 0, a.xl, a.yl, aa);
+ for (fv = 0; fv <= nyl; fv ++)
+ blockwrite(out, aa[5 + fv * xw * 4], xw);
+
+ getimage(100, 0, 100 + a.xl, a.yl, aa);
+ blockwrite(out, aa[5], a.size - 6);
+ }
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- setup();
- save();
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ setup();
+ save();
- blockwrite(out,trip5foot,50);
- close(out);
-return EXIT_SUCCESS;
+ blockwrite(out, trip5foot, 50);
+ close(out);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/nim.cpp b/engines/avalanche/nim.cpp
index 86dd2b2a9d..238908cf9f 100644
--- a/engines/avalanche/nim.cpp
+++ b/engines/avalanche/nim.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,246 +31,323 @@
namespace Avalanche {
-const array<false,true,varying_string<7> > names = {{"Avalot","Dogfood"}};
+const array<false, true, varying_string<7> > names = {{"Avalot", "Dogfood"}};
-array<1,3,byte> old,stones;
-array<0,3,0,22,1,7,byte> stonepic; /* picture of Nimstone */
+array<1, 3, byte> old, stones;
+array<0, 3, 0, 22, 1, 7, byte> stonepic; /* picture of Nimstone */
byte turns;
-boolean dogfoodsturn; byte fv; byte stonesleft;
+boolean dogfoodsturn;
+byte fv;
+byte stonesleft;
boolean clicked;
-byte row,number;
+byte row, number;
boolean squeak;
-shortint mnum,mrow;
+shortint mnum, mrow;
registers r;
-void resetmouse()
-{;
- r.ax=0; intr(0x33,r);
- squeak=r.ax>0;
+void resetmouse() {
+ ;
+ r.ax = 0;
+ intr(0x33, r);
+ squeak = r.ax > 0;
}
-void show()
-{;
- r.ax=1; intr(0x33,r);
+void show() {
+ ;
+ r.ax = 1;
+ intr(0x33, r);
}
-void hide()
-{;
- r.ax=2; intr(0x33,r);
+void hide() {
+ ;
+ r.ax = 2;
+ intr(0x33, r);
}
-void chalk(integer x,integer y, string z)
-{
- const array<0,3,byte> greys = {{0,8,7,15}};
- byte fv;
-;
- for( fv=0; fv <= 3; fv ++)
- {;
- setcolor(greys[fv]);
- outtextxy(x-fv,y,z);
- sound(fv*100*length(z)); delay(3); nosound; delay(30);
- }
+void chalk(integer x, integer y, string z) {
+ const array<0, 3, byte> greys = {{0, 8, 7, 15}};
+ byte fv;
+ ;
+ for (fv = 0; fv <= 3; fv ++) {
+ ;
+ setcolor(greys[fv]);
+ outtextxy(x - fv, y, z);
+ sound(fv * 100 * length(z));
+ delay(3);
+ nosound;
+ delay(30);
+ }
}
-void setup()
-{
- untyped_file f;
- integer gd,gm;
- byte bit;
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
-
- assign(f,"c:\\avalot\\nim.avd");
- reset(f,1);
- seek(f,41);
- for( gm=0; gm <= 22; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,stonepic[bit][gm],7);
- }
- for( gd=1; gd <= 3; gd ++)
- for( gm=0; gm <= 22; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,mem[0xa000*3200+gd*2800+gm*80],7);
- }
- for( gm=0; gm <= 36; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,mem[0xa000*400+49+gm*80],30);
- }
- close(f);
-
- gd=getpixel(0,0); /* clear codes */
- setcolor(4); rectangle(394,50,634,197);
- setfillstyle(1,6); bar(395,51,633,196);
- rectangle(10,5,380,70); bar(11,6,379,69);
- setcolor(15);
- outtextxy(475,53,"SCOREBOARD:");
- setcolor(14);
- outtextxy(420,63,"Turn:");
- outtextxy(490,63,"Player:");
- outtextxy(570,63,"Move:");
-
- for( gd=1; gd <= 3; gd ++) stones[gd]=gd+2;
-
- turns=0; dogfoodsturn=true;
-
- chalk(27,15,"Take pieces away with:");
- chalk(77,25,"1) the mouse (click leftmost)");
- chalk(53,35,"or 2) the keyboard:");
- chalk(220,35,string('\30')+'/'+'\31'+": choose row,");
- chalk(164,45,string("+/- or ")+'\33'+'/'+'\32'+": more/fewer,");
- chalk(204,55,"Enter: take stones.");
-
- row=1; number=1; fillchar(old,sizeof(old),'\0'); stonesleft=12;
- resetmouse();
+void setup() {
+ untyped_file f;
+ integer gd, gm;
+ byte bit;
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+
+ assign(f, "c:\\avalot\\nim.avd");
+ reset(f, 1);
+ seek(f, 41);
+ for (gm = 0; gm <= 22; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, stonepic[bit][gm], 7);
+ }
+ for (gd = 1; gd <= 3; gd ++)
+ for (gm = 0; gm <= 22; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, mem[0xa000 * 3200 + gd * 2800 + gm * 80], 7);
+ }
+ for (gm = 0; gm <= 36; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, mem[0xa000 * 400 + 49 + gm * 80], 30);
+ }
+ close(f);
+
+ gd = getpixel(0, 0); /* clear codes */
+ setcolor(4);
+ rectangle(394, 50, 634, 197);
+ setfillstyle(1, 6);
+ bar(395, 51, 633, 196);
+ rectangle(10, 5, 380, 70);
+ bar(11, 6, 379, 69);
+ setcolor(15);
+ outtextxy(475, 53, "SCOREBOARD:");
+ setcolor(14);
+ outtextxy(420, 63, "Turn:");
+ outtextxy(490, 63, "Player:");
+ outtextxy(570, 63, "Move:");
+
+ for (gd = 1; gd <= 3; gd ++) stones[gd] = gd + 2;
+
+ turns = 0;
+ dogfoodsturn = true;
+
+ chalk(27, 15, "Take pieces away with:");
+ chalk(77, 25, "1) the mouse (click leftmost)");
+ chalk(53, 35, "or 2) the keyboard:");
+ chalk(220, 35, string('\30') + '/' + '\31' + ": choose row,");
+ chalk(164, 45, string("+/- or ") + '\33' + '/' + '\32' + ": more/fewer,");
+ chalk(204, 55, "Enter: take stones.");
+
+ row = 1;
+ number = 1;
+ fillchar(old, sizeof(old), '\0');
+ stonesleft = 12;
+ resetmouse();
}
-void plotstone(byte x,byte y)
-{
- byte fv,bit; word ofs;
-;
- ofs=3200+y*2800+x*8;
- for( fv=0; fv <= 22; fv ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(stonepic[bit][fv],mem[0xa000*ofs+fv*80],7);
- }
+void plotstone(byte x, byte y) {
+ byte fv, bit;
+ word ofs;
+ ;
+ ofs = 3200 + y * 2800 + x * 8;
+ for (fv = 0; fv <= 22; fv ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(stonepic[bit][fv], mem[0xa000 * ofs + fv * 80], 7);
+ }
}
-void board()
-{
- byte fv,ff;
-;
- for( fv=1; fv <= 3; fv ++)
- for( ff=1; ff <= stones[fv]; ff ++)
- plotstone(ff,fv);
+void board() {
+ byte fv, ff;
+ ;
+ for (fv = 1; fv <= 3; fv ++)
+ for (ff = 1; ff <= stones[fv]; ff ++)
+ plotstone(ff, fv);
}
-void startmove()
-{
- varying_string<2> tstr; integer ypos;
-;
- turns += 1; str(turns,2,tstr); ypos=63+turns*10;
- dogfoodsturn=! dogfoodsturn;
- chalk(433,ypos,tstr);
- chalk(493,ypos,names[dogfoodsturn]);
- old=stones;
+void startmove() {
+ varying_string<2> tstr;
+ integer ypos;
+ ;
+ turns += 1;
+ str(turns, 2, tstr);
+ ypos = 63 + turns * 10;
+ dogfoodsturn = ! dogfoodsturn;
+ chalk(433, ypos, tstr);
+ chalk(493, ypos, names[dogfoodsturn]);
+ old = stones;
}
-void show_changes()
-{
- byte fv,ff,fq;
-;
- chalk(573,63+turns*10,string(chr(64+row))+chr(48+number));
- for( fv=1; fv <= 3; fv ++)
- if (old[fv]>stones[fv])
- for( ff=stones[fv]+1; ff <= old[fv]; ff ++)
- for( fq=0; fq <= 22; fq ++) fillchar(mem[0xa000*3200+fv*2800+ff*8+fq*80],7,'\0');
- stonesleft -= number;
+void show_changes() {
+ byte fv, ff, fq;
+ ;
+ chalk(573, 63 + turns * 10, string(chr(64 + row)) + chr(48 + number));
+ for (fv = 1; fv <= 3; fv ++)
+ if (old[fv] > stones[fv])
+ for (ff = stones[fv] + 1; ff <= old[fv]; ff ++)
+ for (fq = 0; fq <= 22; fq ++) fillchar(mem[0xa000 * 3200 + fv * 2800 + ff * 8 + fq * 80], 7, '\0');
+ stonesleft -= number;
}
void checkmouse();
-static void blip() {; sound(1771); delay(3); nosound; clicked=false; }
-
-void checkmouse()
-{;
- {; ax=5; bx=0; } intr(0x33,r);
- clicked=r.bx>0;
- if (clicked)
- {; /* The mouse was clicked. Where? */
- mrow=(dx-38) / 35;
- if ((mrow<1) || (mrow>3)) blip();
- mnum=stones[mrow]-(cx / 64)+1;
- if ((mnum<1) || (mnum>(unsigned char)stones[mrow])) blip();
- }
+static void blip() {
+ ;
+ sound(1771);
+ delay(3);
+ nosound;
+ clicked = false;
+}
+
+void checkmouse() {
+ ;
+ {
+ ;
+ ax = 5;
+ bx = 0;
+ }
+ intr(0x33, r);
+ clicked = r.bx > 0;
+ if (clicked) {
+ ; /* The mouse was clicked. Where? */
+ mrow = (dx - 38) / 35;
+ if ((mrow < 1) || (mrow > 3)) blip();
+ mnum = stones[mrow] - (cx / 64) + 1;
+ if ((mnum < 1) || (mnum > (unsigned char)stones[mrow])) blip();
+ }
}
void takesome();
-static void less() {; if (number>1) number -= 1; }
+static void less() {
+ ;
+ if (number > 1) number -= 1;
+}
-void takesome()
-{
- char r; byte sr;
-;
- number=1;
- do {
- do {
- sr=stones[row];
- if (sr==0) {; row=row % 3+1; number=1; }
- } while (!(sr!=0));
- if (number>sr) number=sr;
- setcolor(1); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row);
- /* Wait for choice */
- show();
- do { checkmouse(); } while (!(keypressed() || clicked));
- if (keypressed()) r=upcase(readkey());
- hide();
-
- setcolor(0); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row);
-
- if (clicked)
- {;
- number=mnum;
- row=mrow;
- return;
- } else
- {;
- switch (r) {
- case '\0': switch (readkey()) {
- case 'H': if (row>1) row -= 1; break; /* Up */
- case 'P': if (row<3) row += 1; break; /* Down */
- case 'K': number += 1; break;
- case 'M': less(); break;
- case 'I': row=1; break; /* PgUp */
- case 'Q': row=3; break; /* PgDn */
- case 'G': number=5; break; /* Home- check routine will knock this down to size */
- case 'O': number=1; break; /* End */
- }
- break;
- case '+': number += 1; break;
- case '-': less(); break;
- case RANGE_3('A','C'): row=ord(r)-64;
- break;
- case RANGE_5('1','5'): number=ord(r)-48;
- break;
- case '\15': return; break; /* Enter was pressed */
- }
- }
- } while (!false);
+void takesome() {
+ char r;
+ byte sr;
+ ;
+ number = 1;
+ do {
+ do {
+ sr = stones[row];
+ if (sr == 0) {
+ ;
+ row = row % 3 + 1;
+ number = 1;
+ }
+ } while (!(sr != 0));
+ if (number > sr) number = sr;
+ setcolor(1);
+ rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row);
+ /* Wait for choice */
+ show();
+ do {
+ checkmouse();
+ } while (!(keypressed() || clicked));
+ if (keypressed()) r = upcase(readkey());
+ hide();
+
+ setcolor(0);
+ rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row);
+
+ if (clicked) {
+ ;
+ number = mnum;
+ row = mrow;
+ return;
+ } else {
+ ;
+ switch (r) {
+ case '\0':
+ switch (readkey()) {
+ case 'H':
+ if (row > 1) row -= 1;
+ break; /* Up */
+ case 'P':
+ if (row < 3) row += 1;
+ break; /* Down */
+ case 'K':
+ number += 1;
+ break;
+ case 'M':
+ less();
+ break;
+ case 'I':
+ row = 1;
+ break; /* PgUp */
+ case 'Q':
+ row = 3;
+ break; /* PgDn */
+ case 'G':
+ number = 5;
+ break; /* Home- check routine will knock this down to size */
+ case 'O':
+ number = 1;
+ break; /* End */
+ }
+ break;
+ case '+':
+ number += 1;
+ break;
+ case '-':
+ less();
+ break;
+ case RANGE_3('A', 'C'):
+ row = ord(r) - 64;
+ break;
+ case RANGE_5('1', '5'):
+ number = ord(r) - 48;
+ break;
+ case '\15':
+ return;
+ break; /* Enter was pressed */
+ }
+ }
+ } while (!false);
}
-void endofgame()
-{
- char rr;
-;
- chalk(595,63+turns*10,"Wins!");
- outtextxy(100,190,"- - - Press any key... - - -");
- while (keypressed()) rr=readkey();
- do { ax=5; bx=0; intr(0x33,r); } while (!(keypressed() || (bx>0)));
- if (keypressed()) rr=readkey();
+void endofgame() {
+ char rr;
+ ;
+ chalk(595, 63 + turns * 10, "Wins!");
+ outtextxy(100, 190, "- - - Press any key... - - -");
+ while (keypressed()) rr = readkey();
+ do {
+ ax = 5;
+ bx = 0;
+ intr(0x33, r);
+ } while (!(keypressed() || (bx > 0)));
+ if (keypressed()) rr = readkey();
}
void dogfood();
- /* AI procedure to play the game */
-const matrix<1,3,1,2,byte> other = {{{{2,3}},{{1,3}},{{1,2}}}};
+/* AI procedure to play the game */
+const matrix<1, 3, 1, 2, byte> other = {{{{2, 3}}, {{1, 3}}, {{1, 2}}}};
-static byte live,fv,ff,matches,thisone,where;
+static byte live, fv, ff, matches, thisone, where;
-static array<1,3,byte> r,sr;
-static array<1,3,boolean> inap;
+static array<1, 3, byte> r, sr;
+static array<1, 3, boolean> inap;
static boolean lmo; /* Let Me Out! */
@@ -278,131 +355,167 @@ static byte ooo; /* Odd one out */
static boolean find(byte x)
- /* This gives True if there's a pile with x stones in. */
+/* This gives True if there's a pile with x stones in. */
{
- boolean q; byte p;
-boolean find_result;
-;
- q=false;
- for( p=1; p <= 3; p ++) if (stones[p]==x) {; q=true; inap[p]=true; }
- find_result=q;
-return find_result;
+ boolean q;
+ byte p;
+ boolean find_result;
+ ;
+ q = false;
+ for (p = 1; p <= 3; p ++) if (stones[p] == x) {
+ ;
+ q = true;
+ inap[p] = true;
+ }
+ find_result = q;
+ return find_result;
}
-static void find_ap(byte start,byte stepsize)
-{
- byte ff;
-;
- matches=0;
- fillchar(inap,sizeof(inap),'\0'); /* blank 'em all */
- for( ff=0; ff <= 2; ff ++) if (find(start+ff*stepsize)) matches += 1;
- else thisone=ff;
-
- /* Now.. Matches must be 0, 1, 2, or 3.
- 0/1 mean there are no A.P.s here, so we'll keep looking,
- 2 means there is a potential A.P. that we can create (ideal!), and
- 3 means that we're already in an A.P. (Trouble!). */
-
- switch (matches) {
- case 2: {;
- for( ff=1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */
- if (! inap[ff]) ooo=ff;
- if (stones[ooo]>(start+thisone*stepsize)) /* check it's possible! */
- {; /* create an A.P. */
- row=ooo; /* already calculated */
- /* Start+thisone*stepsize will give the amount we SHOULD have here. */
- number=stones[row]-(start+thisone*stepsize); lmo=true; return;
- }
- }
- break;
- case 3: {; /* we're actually IN an A.P! Trouble! Oooh dear. */
- row=r[3]; number=1; lmo=true; return; /* take 1 from the largest pile */
- }
- break;
- }
+static void find_ap(byte start, byte stepsize) {
+ byte ff;
+ ;
+ matches = 0;
+ fillchar(inap, sizeof(inap), '\0'); /* blank 'em all */
+ for (ff = 0; ff <= 2; ff ++) if (find(start + ff * stepsize)) matches += 1;
+ else thisone = ff;
+
+ /* Now.. Matches must be 0, 1, 2, or 3.
+ 0/1 mean there are no A.P.s here, so we'll keep looking,
+ 2 means there is a potential A.P. that we can create (ideal!), and
+ 3 means that we're already in an A.P. (Trouble!). */
+
+ switch (matches) {
+ case 2: {
+ ;
+ for (ff = 1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */
+ if (! inap[ff]) ooo = ff;
+ if (stones[ooo] > (start + thisone * stepsize)) { /* check it's possible! */
+ ; /* create an A.P. */
+ row = ooo; /* already calculated */
+ /* Start+thisone*stepsize will give the amount we SHOULD have here. */
+ number = stones[row] - (start + thisone * stepsize);
+ lmo = true;
+ return;
+ }
+ }
+ break;
+ case 3: {
+ ; /* we're actually IN an A.P! Trouble! Oooh dear. */
+ row = r[3];
+ number = 1;
+ lmo = true;
+ return; /* take 1 from the largest pile */
+ }
+ break;
+ }
}
-void dogfood()
-{
- boolean sorted; byte temp;
-
-;
- live=0; lmo=false;
- for( fv=1; fv <= 3; fv ++)
- {;
- if (stones[fv]>0)
- {;
- live += 1;
- r[live]=fv; sr[live]=stones[fv];
- }
- }
- switch (live) {
- case 1: /* Only one is free- so take 'em all */
- {; row=r[1]; number=stones[r[1]]; return; }
- break;
- case 2: /* Two are free- make them equal */
- {;
- if (sr[1]>sr[2])
- {; row=r[1]; number=sr[1]-sr[2]; return; } else /* T > b */
- if (sr[1]<sr[2])
- {; row=r[2]; number=sr[2]-sr[1]; return; } else /* B > t */
- {; row=r[1]; number=1; return; } /* B = t... oh no, we've lost! */
- }
- break;
- case 3: /* Ho hum... this'll be difficult! */
- {;
- /* There are three possible courses of action when we have 3 lines left:
- 1) Look for 2 equal lines, then take the odd one out.
- 2) Look for A.P.s, and capitalise on them.
- 3) Go any old where. */
-
- for( fv=1; fv <= 3; fv ++) /* Look for 2 equal lines */
- if (stones[other[fv][1]]==stones[other[fv][2]])
- {;
- row=fv; /* this row */ number=stones[fv]; /* all of 'em */ return;
- }
-
- do {
- sorted=true;
- for( fv=1; fv <= 2; fv ++)
- if (sr[fv]>sr[fv+1])
- {;
- temp=sr[fv+1]; sr[fv+1]=sr[fv]; sr[fv]=temp;
- temp= r[fv+1]; r[fv+1]= r[fv]; r[fv]=temp;
- sorted=false;
- }
- } while (!sorted);
- /* Now we look for A.P.s ... */
- for( fv=1; fv <= 3; fv ++)
- {;
- find_ap(fv,1); /* there are 3 "1"s */
- if (lmo) return; /* cut-out */
- }
- find_ap(1,2); /* only "2" possible */
- if (lmo) return;
-
- /* A.P. search must have failed- use the default move. */
- row=r[3]; number=1; return;
- }
- break;
- }
+void dogfood() {
+ boolean sorted;
+ byte temp;
+
+ ;
+ live = 0;
+ lmo = false;
+ for (fv = 1; fv <= 3; fv ++) {
+ ;
+ if (stones[fv] > 0) {
+ ;
+ live += 1;
+ r[live] = fv;
+ sr[live] = stones[fv];
+ }
+ }
+ switch (live) {
+ case 1: { /* Only one is free- so take 'em all */
+ ;
+ row = r[1];
+ number = stones[r[1]];
+ return;
+ }
+ break;
+ case 2: { /* Two are free- make them equal */
+ ;
+ if (sr[1] > sr[2]) {
+ ;
+ row = r[1];
+ number = sr[1] - sr[2];
+ return;
+ } else /* T > b */
+ if (sr[1] < sr[2]) {
+ ;
+ row = r[2];
+ number = sr[2] - sr[1];
+ return;
+ } else { /* B > t */
+ ; /* B = t... oh no, we've lost! */
+ row = r[1];
+ number = 1;
+ return;
+ }
+ }
+ break;
+ case 3: { /* Ho hum... this'll be difficult! */
+ ;
+ /* There are three possible courses of action when we have 3 lines left:
+ 1) Look for 2 equal lines, then take the odd one out.
+ 2) Look for A.P.s, and capitalise on them.
+ 3) Go any old where. */
+
+ for (fv = 1; fv <= 3; fv ++) /* Look for 2 equal lines */
+ if (stones[other[fv][1]] == stones[other[fv][2]]) {
+ ;
+ row = fv; /* this row */ number = stones[fv]; /* all of 'em */ return;
+ }
+
+ do {
+ sorted = true;
+ for (fv = 1; fv <= 2; fv ++)
+ if (sr[fv] > sr[fv + 1]) {
+ ;
+ temp = sr[fv + 1];
+ sr[fv + 1] = sr[fv];
+ sr[fv] = temp;
+ temp = r[fv + 1];
+ r[fv + 1] = r[fv];
+ r[fv] = temp;
+ sorted = false;
+ }
+ } while (!sorted);
+ /* Now we look for A.P.s ... */
+ for (fv = 1; fv <= 3; fv ++) {
+ ;
+ find_ap(fv, 1); /* there are 3 "1"s */
+ if (lmo) return; /* cut-out */
+ }
+ find_ap(1, 2); /* only "2" possible */
+ if (lmo) return;
+
+ /* A.P. search must have failed- use the default move. */
+ row = r[3];
+ number = 1;
+ return;
+ }
+ break;
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- setup();
- board();
- do {
- startmove();
- if (dogfoodsturn) dogfood(); else takesome();
- stones[row] -= number;
- show_changes();
- } while (!(stonesleft==0));
- endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ setup();
+ board();
+ do {
+ startmove();
+ if (dogfoodsturn) dogfood();
+ else takesome();
+ stones[row] -= number;
+ show_changes();
+ } while (!(stonesleft == 0));
+ endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/nimdraw.cpp b/engines/avalanche/nimdraw.cpp
index a81d69fd24..9464d64d8e 100644
--- a/engines/avalanche/nimdraw.cpp
+++ b/engines/avalanche/nimdraw.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,93 +29,118 @@
namespace Avalanche {
-const string header = string("Datafile for Avalot, copyright (c) 1992.")+'\32';
+const string header = string("Datafile for Avalot, copyright (c) 1992.") + '\32';
-integer gd,gm,x,y;
+integer gd, gm, x, y;
untyped_file f;
byte bit;
-void plot(char ch, byte x)
-{;
- setcolor(blue); outtextxy(x*80+4,0,ch); outtextxy(x*80+10,0,ch);
- setcolor(lightblue); outtextxy(x*80+5,0,ch); outtextxy(x*80+9,0,ch);
- setcolor(darkgray); outtextxy(x*80+6,0,ch); outtextxy(x*80+8,0,ch);
- setcolor(yellow); outtextxy(x*80+7,0,ch);
+void plot(char ch, byte x) {
+ ;
+ setcolor(blue);
+ outtextxy(x * 80 + 4, 0, ch);
+ outtextxy(x * 80 + 10, 0, ch);
+ setcolor(lightblue);
+ outtextxy(x * 80 + 5, 0, ch);
+ outtextxy(x * 80 + 9, 0, ch);
+ setcolor(darkgray);
+ outtextxy(x * 80 + 6, 0, ch);
+ outtextxy(x * 80 + 8, 0, ch);
+ setcolor(yellow);
+ outtextxy(x * 80 + 7, 0, ch);
}
-void load()
-{
- byte z;
- array<1,4,pointer> a;
- varying_string<12> check;
- untyped_file f; word s;
-;
- assign(f,"c:\\avalot\\nimstone.avd"); reset(f,1);
- seek(f,85); z=3;
- s=imagesize(0,0,getmaxx(),75);
- getmem(a[z],s);
- blockread(f,a[z],s);
- putimage(0,7,a[z],0);
- freemem(a[z],s); close(f);
+void load() {
+ byte z;
+ array<1, 4, pointer> a;
+ varying_string<12> check;
+ untyped_file f;
+ word s;
+ ;
+ assign(f, "c:\\avalot\\nimstone.avd");
+ reset(f, 1);
+ seek(f, 85);
+ z = 3;
+ s = imagesize(0, 0, getmaxx(), 75);
+ getmem(a[z], s);
+ blockread(f, a[z], s);
+ putimage(0, 7, a[z], 0);
+ freemem(a[z], s);
+ close(f);
}
-void spludge(integer x,integer y, string z)
-{
- shortint dx,dy;
-;
- setcolor(15);
- for( dx=-1; dx <= 1; dx ++)
- for( dy=-1; dy <= 1; dy ++)
- outtextxy(x+dx,y+dy,z);
- setcolor(0);
- outtextxy(x,y,z);
+void spludge(integer x, integer y, string z) {
+ shortint dx, dy;
+ ;
+ setcolor(15);
+ for (dx = -1; dx <= 1; dx ++)
+ for (dy = -1; dy <= 1; dy ++)
+ outtextxy(x + dx, y + dy, z);
+ setcolor(0);
+ outtextxy(x, y, z);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- load();
- settextstyle(4,0,0); setusercharsize(2,1,1,1);
- plot('A',1);
- plot('B',2);
- plot('C',3);
-/* rectangle(gd*80,7,56+gd*80,29); */
-
- setfillstyle(1,1); setcolor(9);
- fillellipse( 97,104,6,4); fillellipse(321,104,6,4);
- fillellipse( 97,131,6,4); fillellipse(321,131,6,4);
- bar(97,100,321,134);
- bar(92,104,326,131);
- setfillstyle(1,9);
- bar(91,103, 91,131); bar(327,104,327,131);
- bar(98, 99,321, 99); bar( 97,135,321,135);
-
- settextstyle(2,0,0); setusercharsize(20,10,11,10);
- spludge( 99,100,"The Ancient Game of");
- settextstyle(1,0,0); setusercharsize(40,10,10,10);
- spludge( 99,105,"NIM");
-
- /* now save it all! */
-
- assign(f,"c:\\avalot\\nim.avd");
- rewrite(f,1);
- blockwrite(f,header[1],length(header));
- for( gd=0; gd <= 3; gd ++)
- for( gm=7; gm <= 29; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,mem[0xa000*gd*10+gm*80],7);
- }
- for( gm=99; gm <= 135; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,mem[0xa000*11+gm*80],30);
- }
- close(f);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ load();
+ settextstyle(4, 0, 0);
+ setusercharsize(2, 1, 1, 1);
+ plot('A', 1);
+ plot('B', 2);
+ plot('C', 3);
+ /* rectangle(gd*80,7,56+gd*80,29); */
+
+ setfillstyle(1, 1);
+ setcolor(9);
+ fillellipse(97, 104, 6, 4);
+ fillellipse(321, 104, 6, 4);
+ fillellipse(97, 131, 6, 4);
+ fillellipse(321, 131, 6, 4);
+ bar(97, 100, 321, 134);
+ bar(92, 104, 326, 131);
+ setfillstyle(1, 9);
+ bar(91, 103, 91, 131);
+ bar(327, 104, 327, 131);
+ bar(98, 99, 321, 99);
+ bar(97, 135, 321, 135);
+
+ settextstyle(2, 0, 0);
+ setusercharsize(20, 10, 11, 10);
+ spludge(99, 100, "The Ancient Game of");
+ settextstyle(1, 0, 0);
+ setusercharsize(40, 10, 10, 10);
+ spludge(99, 105, "NIM");
+
+ /* now save it all! */
+
+ assign(f, "c:\\avalot\\nim.avd");
+ rewrite(f, 1);
+ blockwrite(f, header[1], length(header));
+ for (gd = 0; gd <= 3; gd ++)
+ for (gm = 7; gm <= 29; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, mem[0xa000 * gd * 10 + gm * 80], 7);
+ }
+ for (gm = 99; gm <= 135; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, mem[0xa000 * 11 + gm * 80], 30);
+ }
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/nimunit.cpp b/engines/avalanche/nimunit.cpp
index cfec877c33..785dbe6759 100644
--- a/engines/avalanche/nimunit.cpp
+++ b/engines/avalanche/nimunit.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -39,249 +39,308 @@
namespace Avalanche {
-const array<false,true,varying_string<7> > names = {{"Avalot","Dogfood"}};
+const array<false, true, varying_string<7> > names = {{"Avalot", "Dogfood"}};
-array<1,3,byte> old,stones;
-array<0,3,0,22,1,7,byte> stonepic; /* picture of Nimstone */
+array<1, 3, byte> old, stones;
+array<0, 3, 0, 22, 1, 7, byte> stonepic; /* picture of Nimstone */
byte turns;
-boolean dogfoodsturn; byte fv; byte stonesleft;
+boolean dogfoodsturn;
+byte fv;
+byte stonesleft;
boolean clicked;
-byte row,number;
+byte row, number;
boolean squeak;
-shortint mnum,mrow;
-
-void chalk(integer x,integer y, string z)
-{
- const array<0,3,byte> greys = {{0,8,7,15}};
- byte fv;
-
- for( fv=0; fv <= 3; fv ++)
- {
- setcolor(greys[fv]);
- outtextxy(x-fv,y,z);
- sound(fv*100*length(z)); delay(3); nosound; delay(30);
- }
+shortint mnum, mrow;
+
+void chalk(integer x, integer y, string z) {
+ const array<0, 3, byte> greys = {{0, 8, 7, 15}};
+ byte fv;
+
+ for (fv = 0; fv <= 3; fv ++) {
+ setcolor(greys[fv]);
+ outtextxy(x - fv, y, z);
+ sound(fv * 100 * length(z));
+ delay(3);
+ nosound;
+ delay(30);
+ }
}
-void setup()
-{
- const integer page3 = 0xac00;
- byte gd,gm;
- untyped_file f;
- byte bit;
-
- setactivepage(3);
- setvisualpage(3);
- cleardevice();
- dawn();
-
- assign(f,"nim.avd");
- reset(f,1);
- seek(f,41);
- for( gm=0; gm <= 22; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,stonepic[bit][gm],7);
- }
- for( gd=1; gd <= 3; gd ++)
- for( gm=0; gm <= 22; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,mem[page3*3200+gd*2800+gm*80],7);
- }
- for( gm=0; gm <= 36; gm ++)
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,mem[page3*400+49+gm*80],30);
- }
- close(f);
-
- gd=getpixel(0,0); /* clear codes */
- setcolor(4); rectangle(394,50,634,197);
- setfillstyle(1,6); bar(395,51,633,196);
- rectangle(10,5,380,70); bar(11,6,379,69);
- setcolor(15);
- outtextxy(475,53,"SCOREBOARD:");
- setcolor(14);
- outtextxy(420,63,"Turn:");
- outtextxy(490,63,"Player:");
- outtextxy(570,63,"Move:");
-
- for( gd=1; gd <= 3; gd ++) stones[gd]=gd+2;
-
- turns=0; dogfoodsturn=true;
-
- chalk(27,15,"Take pieces away with:");
- chalk(77,25,"1) the mouse (click leftmost)");
- chalk(53,35,"or 2) the keyboard:");
- chalk(220,35,string('\30')+'/'+'\31'+": choose row,");
- chalk(164,45,string("+/- or ")+'\33'+'/'+'\32'+": more/fewer,");
- chalk(204,55,"Enter: take stones.");
-
- row=1; number=1; fillchar(old,sizeof(old),'\0'); stonesleft=12;
-
- /* Set up mouse. */
- off_virtual();
- oncandopageswap=false;
-
- setactivepage(3);
- setvisualpage(3);
+void setup() {
+ const integer page3 = 0xac00;
+ byte gd, gm;
+ untyped_file f;
+ byte bit;
+
+ setactivepage(3);
+ setvisualpage(3);
+ cleardevice();
+ dawn();
+
+ assign(f, "nim.avd");
+ reset(f, 1);
+ seek(f, 41);
+ for (gm = 0; gm <= 22; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, stonepic[bit][gm], 7);
+ }
+ for (gd = 1; gd <= 3; gd ++)
+ for (gm = 0; gm <= 22; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, mem[page3 * 3200 + gd * 2800 + gm * 80], 7);
+ }
+ for (gm = 0; gm <= 36; gm ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, mem[page3 * 400 + 49 + gm * 80], 30);
+ }
+ close(f);
+
+ gd = getpixel(0, 0); /* clear codes */
+ setcolor(4);
+ rectangle(394, 50, 634, 197);
+ setfillstyle(1, 6);
+ bar(395, 51, 633, 196);
+ rectangle(10, 5, 380, 70);
+ bar(11, 6, 379, 69);
+ setcolor(15);
+ outtextxy(475, 53, "SCOREBOARD:");
+ setcolor(14);
+ outtextxy(420, 63, "Turn:");
+ outtextxy(490, 63, "Player:");
+ outtextxy(570, 63, "Move:");
+
+ for (gd = 1; gd <= 3; gd ++) stones[gd] = gd + 2;
+
+ turns = 0;
+ dogfoodsturn = true;
+
+ chalk(27, 15, "Take pieces away with:");
+ chalk(77, 25, "1) the mouse (click leftmost)");
+ chalk(53, 35, "or 2) the keyboard:");
+ chalk(220, 35, string('\30') + '/' + '\31' + ": choose row,");
+ chalk(164, 45, string("+/- or ") + '\33' + '/' + '\32' + ": more/fewer,");
+ chalk(204, 55, "Enter: take stones.");
+
+ row = 1;
+ number = 1;
+ fillchar(old, sizeof(old), '\0');
+ stonesleft = 12;
+
+ /* Set up mouse. */
+ off_virtual();
+ oncandopageswap = false;
+
+ setactivepage(3);
+ setvisualpage(3);
}
-void plotstone(byte x,byte y)
-{
- byte fv,bit; word ofs;
-
- ofs=3200+y*2800+x*8;
- for( fv=0; fv <= 22; fv ++)
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- move(stonepic[bit][fv],mem[0xac00*ofs+fv*80],7);
- }
+void plotstone(byte x, byte y) {
+ byte fv, bit;
+ word ofs;
+
+ ofs = 3200 + y * 2800 + x * 8;
+ for (fv = 0; fv <= 22; fv ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(stonepic[bit][fv], mem[0xac00 * ofs + fv * 80], 7);
+ }
}
-void board()
-{
- byte fv,ff;
+void board() {
+ byte fv, ff;
- for( fv=1; fv <= 3; fv ++)
- for( ff=1; ff <= stones[fv]; ff ++)
- plotstone(ff,fv);
+ for (fv = 1; fv <= 3; fv ++)
+ for (ff = 1; ff <= stones[fv]; ff ++)
+ plotstone(ff, fv);
}
-void startmove()
-{
- varying_string<2> tstr; integer ypos;
-
- turns += 1; str(turns,2,tstr); ypos=63+turns*10;
- dogfoodsturn=! dogfoodsturn;
- chalk(433,ypos,tstr);
- chalk(493,ypos,names[dogfoodsturn]);
- old=stones;
+void startmove() {
+ varying_string<2> tstr;
+ integer ypos;
+
+ turns += 1;
+ str(turns, 2, tstr);
+ ypos = 63 + turns * 10;
+ dogfoodsturn = ! dogfoodsturn;
+ chalk(433, ypos, tstr);
+ chalk(493, ypos, names[dogfoodsturn]);
+ old = stones;
}
-void show_changes()
-{
- byte fv,ff,fq; varying_string<2> move;
+void show_changes() {
+ byte fv, ff, fq;
+ varying_string<2> move;
- move=string(chr(64+row))+chr(48+number);
- chalk(573,63+turns*10,move);
- log_aside(names[dogfoodsturn]+" plays "+move+'.');
+ move = string(chr(64 + row)) + chr(48 + number);
+ chalk(573, 63 + turns * 10, move);
+ log_aside(names[dogfoodsturn] + " plays " + move + '.');
- for( fv=1; fv <= 3; fv ++)
- if (old[fv]>stones[fv])
- for( ff=stones[fv]+1; ff <= old[fv]; ff ++)
- for( fq=0; fq <= 22; fq ++) fillchar(mem[0xac00*3200+fv*2800+ff*8+fq*80],7,'\0');
- stonesleft -= number;
+ for (fv = 1; fv <= 3; fv ++)
+ if (old[fv] > stones[fv])
+ for (ff = stones[fv] + 1; ff <= old[fv]; ff ++)
+ for (fq = 0; fq <= 22; fq ++) fillchar(mem[0xac00 * 3200 + fv * 2800 + ff * 8 + fq * 80], 7, '\0');
+ stonesleft -= number;
}
void checkmouse();
-static void blip() { note(1771); delay(3); nosound; clicked=false; }
+static void blip() {
+ note(1771);
+ delay(3);
+ nosound;
+ clicked = false;
+}
-void checkmouse()
-{
- xycheck(); /* Check the mouse */
- clicked=keystatus>0;
- if (clicked)
- {
- void& with = r;
- /* The mouse was clicked. Where? */
- mrow=(my-38) / 35;
- if ((mrow<1) || (mrow>3)) blip();
- mnum=stones[mrow]-(mx / 64)+1;
- if ((mnum<1) || (mnum>(unsigned char)stones[mrow])) blip();
- }
+void checkmouse() {
+ xycheck(); /* Check the mouse */
+ clicked = keystatus > 0;
+ if (clicked) {
+ void &with = r;
+ /* The mouse was clicked. Where? */
+ mrow = (my - 38) / 35;
+ if ((mrow < 1) || (mrow > 3)) blip();
+ mnum = stones[mrow] - (mx / 64) + 1;
+ if ((mnum < 1) || (mnum > (unsigned char)stones[mrow])) blip();
+ }
}
void takesome();
-static void less() { if (number>1) number -= 1; }
-
-void takesome()
-{
- char r; byte sr;
-
- number=1;
- do {
- do {
- sr=stones[row];
- if (sr==0) { row=row % 3+1; number=1; }
- } while (!(sr!=0));
- if (number>sr) number=sr;
- setcolor(1); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row);
- /* Wait for choice */
- on();
- do { checkmouse(); } while (!(keypressed() || clicked));
- if (keypressed()) r=upcase(readkey());
- off();
-
- setcolor(0); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row);
-
- if (clicked)
- {
- number=mnum;
- row=mrow;
- return;
- } else
- {
- switch (r) {
- case '\0': switch (readkey()) {
- case 'H': if (row>1) row -= 1; break; /* Up */
- case 'P': if (row<3) row += 1; break; /* Down */
- case 'K': number += 1; break;
- case 'M': less(); break;
- case 'I': row=1; break; /* PgUp */
- case 'Q': row=3; break; /* PgDn */
- case 'G': number=5; break; /* Home- check routine will knock this down to size */
- case 'O': number=1; break; /* End */
- }
- break;
- case '+': number += 1; break;
- case '-': less(); break;
- case RANGE_3('A','C'): row=ord(r)-64;
- break;
- case RANGE_5('1','5'): number=ord(r)-48;
- break;
- case '\15': return; break; /* Enter was pressed */
- }
- }
- } while (!false);
+static void less() {
+ if (number > 1) number -= 1;
}
-void endofgame()
-{
- char rr;
-
- chalk(595,63+turns*10,"Wins!");
- outtextxy(100,190,"- - - Press any key... - - -");
- while (keypressed()) rr=readkey();
- do { check(); } while (!(mpress==0));
-
- { void& with = r; do { check(); } while (!(keypressed() || (mrelease>0)));}
- if (keypressed()) rr=readkey();
+void takesome() {
+ char r;
+ byte sr;
+
+ number = 1;
+ do {
+ do {
+ sr = stones[row];
+ if (sr == 0) {
+ row = row % 3 + 1;
+ number = 1;
+ }
+ } while (!(sr != 0));
+ if (number > sr) number = sr;
+ setcolor(1);
+ rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row);
+ /* Wait for choice */
+ on();
+ do {
+ checkmouse();
+ } while (!(keypressed() || clicked));
+ if (keypressed()) r = upcase(readkey());
+ off();
+
+ setcolor(0);
+ rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row);
+
+ if (clicked) {
+ number = mnum;
+ row = mrow;
+ return;
+ } else {
+ switch (r) {
+ case '\0':
+ switch (readkey()) {
+ case 'H':
+ if (row > 1) row -= 1;
+ break; /* Up */
+ case 'P':
+ if (row < 3) row += 1;
+ break; /* Down */
+ case 'K':
+ number += 1;
+ break;
+ case 'M':
+ less();
+ break;
+ case 'I':
+ row = 1;
+ break; /* PgUp */
+ case 'Q':
+ row = 3;
+ break; /* PgDn */
+ case 'G':
+ number = 5;
+ break; /* Home- check routine will knock this down to size */
+ case 'O':
+ number = 1;
+ break; /* End */
+ }
+ break;
+ case '+':
+ number += 1;
+ break;
+ case '-':
+ less();
+ break;
+ case RANGE_3('A', 'C'):
+ row = ord(r) - 64;
+ break;
+ case RANGE_5('1', '5'):
+ number = ord(r) - 48;
+ break;
+ case '\15':
+ return;
+ break; /* Enter was pressed */
+ }
+ }
+ } while (!false);
+}
- mousepage(cp);
- off();
- on_virtual();
+void endofgame() {
+ char rr;
+
+ chalk(595, 63 + turns * 10, "Wins!");
+ outtextxy(100, 190, "- - - Press any key... - - -");
+ while (keypressed()) rr = readkey();
+ do {
+ check();
+ } while (!(mpress == 0));
+
+ {
+ void &with = r;
+ do {
+ check();
+ } while (!(keypressed() || (mrelease > 0)));
+ }
+ if (keypressed()) rr = readkey();
+
+ mousepage(cp);
+ off();
+ on_virtual();
}
void dogfood();
- /* AI procedure to play the game */
-const matrix<1,3,1,2,byte> other = {{{{2,3}},{{1,3}},{{1,2}}}};
+/* AI procedure to play the game */
+const matrix<1, 3, 1, 2, byte> other = {{{{2, 3}}, {{1, 3}}, {{1, 2}}}};
-static byte live,fv,ff,matches,thisone,where;
+static byte live, fv, ff, matches, thisone, where;
-static array<1,3,byte> r,sr;
-static array<1,3,boolean> inap;
+static array<1, 3, byte> r, sr;
+static array<1, 3, boolean> inap;
static boolean lmo; /* Let Me Out! */
@@ -289,183 +348,206 @@ static byte ooo; /* Odd one out */
static boolean find(byte x)
- /* This gives True if there's a pile with x stones in. */
+/* This gives True if there's a pile with x stones in. */
{
- boolean q; byte p;
-
- boolean find_result;
- q=false;
- for( p=1; p <= 3; p ++) if (stones[p]==x) { q=true; inap[p]=true; }
- find_result=q;
- return find_result;
+ boolean q;
+ byte p;
+
+ boolean find_result;
+ q = false;
+ for (p = 1; p <= 3; p ++) if (stones[p] == x) {
+ q = true;
+ inap[p] = true;
+ }
+ find_result = q;
+ return find_result;
}
-static void find_ap(byte start,byte stepsize)
-{
- byte ff;
-
- matches=0;
- fillchar(inap,sizeof(inap),'\0'); /* blank 'em all */
- for( ff=0; ff <= 2; ff ++) if (find(start+ff*stepsize)) matches += 1;
- else thisone=ff;
-
- /* Now.. Matches must be 0, 1, 2, or 3.
- 0/1 mean there are no A.P.s here, so we'll keep looking,
- 2 means there is a potential A.P. that we can create (ideal!), and
- 3 means that we're already in an A.P. (Trouble!). */
-
- switch (matches) {
- case 2: {
- for( ff=1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */
- if (! inap[ff]) ooo=ff;
- if (stones[ooo]>(start+thisone*stepsize)) /* check it's possible! */
- { /* create an A.P. */
- row=ooo; /* already calculated */
- /* Start+thisone*stepsize will give the amount we SHOULD have here. */
- number=stones[row]-(start+thisone*stepsize); lmo=true; return;
- }
- }
- break;
- case 3: { /* we're actually IN an A.P! Trouble! Oooh dear. */
- row=r[3]; number=1; lmo=true; return; /* take 1 from the largest pile */
- }
- break;
- }
+static void find_ap(byte start, byte stepsize) {
+ byte ff;
+
+ matches = 0;
+ fillchar(inap, sizeof(inap), '\0'); /* blank 'em all */
+ for (ff = 0; ff <= 2; ff ++) if (find(start + ff * stepsize)) matches += 1;
+ else thisone = ff;
+
+ /* Now.. Matches must be 0, 1, 2, or 3.
+ 0/1 mean there are no A.P.s here, so we'll keep looking,
+ 2 means there is a potential A.P. that we can create (ideal!), and
+ 3 means that we're already in an A.P. (Trouble!). */
+
+ switch (matches) {
+ case 2: {
+ for (ff = 1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */
+ if (! inap[ff]) ooo = ff;
+ if (stones[ooo] > (start + thisone * stepsize)) { /* check it's possible! */
+ /* create an A.P. */
+ row = ooo; /* already calculated */
+ /* Start+thisone*stepsize will give the amount we SHOULD have here. */
+ number = stones[row] - (start + thisone * stepsize);
+ lmo = true;
+ return;
+ }
+ }
+ break;
+ case 3: { /* we're actually IN an A.P! Trouble! Oooh dear. */
+ row = r[3];
+ number = 1;
+ lmo = true;
+ return; /* take 1 from the largest pile */
+ }
+ break;
+ }
}
-void dogfood()
-{
- boolean sorted; byte temp;
-
-
- live=0; lmo=false;
- for( fv=1; fv <= 3; fv ++)
- {
- if (stones[fv]>0)
- {
- live += 1;
- r[live]=fv; sr[live]=stones[fv];
- }
- }
- switch (live) {
- case 1: /* Only one is free- so take 'em all */
- { row=r[1]; number=stones[r[1]]; return; }
- break;
- case 2: /* Two are free- make them equal */
- {
- if (sr[1]>sr[2])
- { row=r[1]; number=sr[1]-sr[2]; return; } else /* T > b */
- if (sr[1]<sr[2])
- { row=r[2]; number=sr[2]-sr[1]; return; } else /* B > t */
- { row=r[1]; number=1; return; } /* B = t... oh no, we've lost! */
- }
- break;
- case 3: /* Ho hum... this'll be difficult! */
- {
- /* There are three possible courses of action when we have 3 lines left:
- 1) Look for 2 equal lines, then take the odd one out.
- 2) Look for A.P.s, and capitalise on them.
- 3) Go any old where. */
-
- for( fv=1; fv <= 3; fv ++) /* Look for 2 equal lines */
- if (stones[other[fv][1]]==stones[other[fv][2]])
- {
- row=fv; /* this row */ number=stones[fv]; /* all of 'em */ return;
- }
-
- do {
- sorted=true;
- for( fv=1; fv <= 2; fv ++)
- if (sr[fv]>sr[fv+1])
- {
- temp=sr[fv+1]; sr[fv+1]=sr[fv]; sr[fv]=temp;
- temp= r[fv+1]; r[fv+1]= r[fv]; r[fv]=temp;
- sorted=false;
- }
- } while (!sorted);
- /* Now we look for A.P.s ... */
- for( fv=1; fv <= 3; fv ++)
- {
- find_ap(fv,1); /* there are 3 "1"s */
- if (lmo) return; /* cut-out */
- }
- find_ap(1,2); /* only "2" possible */
- if (lmo) return;
-
- /* A.P. search must have failed- use the default move. */
- row=r[3]; number=1; return;
- }
- break;
- }
+void dogfood() {
+ boolean sorted;
+ byte temp;
+
+
+ live = 0;
+ lmo = false;
+ for (fv = 1; fv <= 3; fv ++) {
+ if (stones[fv] > 0) {
+ live += 1;
+ r[live] = fv;
+ sr[live] = stones[fv];
+ }
+ }
+ switch (live) {
+ case 1: { /* Only one is free- so take 'em all */
+ row = r[1];
+ number = stones[r[1]];
+ return;
+ }
+ break;
+ case 2: { /* Two are free- make them equal */
+ if (sr[1] > sr[2]) {
+ row = r[1];
+ number = sr[1] - sr[2];
+ return;
+ } else /* T > b */
+ if (sr[1] < sr[2]) {
+ row = r[2];
+ number = sr[2] - sr[1];
+ return;
+ } else { /* B > t */
+ row = r[1]; /* B = t... oh no, we've lost! */
+ number = 1;
+ return;
+ }
+ }
+ break;
+ case 3: { /* Ho hum... this'll be difficult! */
+ /* There are three possible courses of action when we have 3 lines left:
+ 1) Look for 2 equal lines, then take the odd one out.
+ 2) Look for A.P.s, and capitalise on them.
+ 3) Go any old where. */
+
+ for (fv = 1; fv <= 3; fv ++) /* Look for 2 equal lines */
+ if (stones[other[fv][1]] == stones[other[fv][2]]) {
+ row = fv; /* this row */ number = stones[fv]; /* all of 'em */ return;
+ }
+
+ do {
+ sorted = true;
+ for (fv = 1; fv <= 2; fv ++)
+ if (sr[fv] > sr[fv + 1]) {
+ temp = sr[fv + 1];
+ sr[fv + 1] = sr[fv];
+ sr[fv] = temp;
+ temp = r[fv + 1];
+ r[fv + 1] = r[fv];
+ r[fv] = temp;
+ sorted = false;
+ }
+ } while (!sorted);
+ /* Now we look for A.P.s ... */
+ for (fv = 1; fv <= 3; fv ++) {
+ find_ap(fv, 1); /* there are 3 "1"s */
+ if (lmo) return; /* cut-out */
+ }
+ find_ap(1, 2); /* only "2" possible */
+ if (lmo) return;
+
+ /* A.P. search must have failed- use the default move. */
+ row = r[3];
+ number = 1;
+ return;
+ }
+ break;
+ }
}
void play_nim() /* Plays the game. Only procedure in this unit to
be declared in the interface section. */
{
- byte groi;
-
- if (dna.wonnim)
- { /* Already won the game. */
- dixi('Q',6);
- return;
- }
-
- if (! dna.asked_dogfood_about_nim)
- {
- dixi('q',84);
- return;
- }
-
- dixi('Q',3);
- dna.playednim += 1;
- dusk();
- oncandopageswap=false;
- copypage(3,1-cp); /* Store old screen. */ groi=getpixel(0,0);
- off();
-
- setup();
- board();
- on();
- mousepage(3);
-
- do {
- startmove();
- if (dogfoodsturn) dogfood(); else takesome();
- stones[row] -= number;
- show_changes();
- } while (!(stonesleft==0));
- endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */
-
- dusk(); off();
- oncandopageswap=true;
- copypage(1-cp,3); /* Restore old screen. */ groi=getpixel(0,0);
- on(); dawn();
-
- if (dogfoodsturn)
- { /* Dogfood won - as usual */
- log_aside("He won.");
- if (dna.playednim==1) /* Your first game */
- dixi('Q',4); /* Goody! Play me again? */
- else
- dixi('Q',5); /* Oh, look at that! I've won again! */
- pennycheck(4); /* And you've just lost 4d! */
- } else
- { /* You won - strange! */
- log_aside("You won.");
- dixi('Q',7); /* You won! Give us a lute! */
- dna.obj[lute]=true;
- objectlist();
- dna.wonnim=true;
- show_one(1); /* Show the settle with no lute on it. */
- points(7); /* 7 points for winning! */
- }
-
- if (dna.playednim==1) points(3); /* 3 points for playing your 1st game. */
+ byte groi;
+
+ if (dna.wonnim) {
+ /* Already won the game. */
+ dixi('Q', 6);
+ return;
+ }
+
+ if (! dna.asked_dogfood_about_nim) {
+ dixi('q', 84);
+ return;
+ }
+
+ dixi('Q', 3);
+ dna.playednim += 1;
+ dusk();
+ oncandopageswap = false;
+ copypage(3, 1 - cp); /* Store old screen. */ groi = getpixel(0, 0);
+ off();
+
+ setup();
+ board();
+ on();
+ mousepage(3);
+
+ do {
+ startmove();
+ if (dogfoodsturn) dogfood();
+ else takesome();
+ stones[row] -= number;
+ show_changes();
+ } while (!(stonesleft == 0));
+ endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */
+
+ dusk();
+ off();
+ oncandopageswap = true;
+ copypage(1 - cp, 3); /* Restore old screen. */ groi = getpixel(0, 0);
+ on();
+ dawn();
+
+ if (dogfoodsturn) {
+ /* Dogfood won - as usual */
+ log_aside("He won.");
+ if (dna.playednim == 1) /* Your first game */
+ dixi('Q', 4); /* Goody! Play me again? */
+ else
+ dixi('Q', 5); /* Oh, look at that! I've won again! */
+ pennycheck(4); /* And you've just lost 4d! */
+ } else {
+ /* You won - strange! */
+ log_aside("You won.");
+ dixi('Q', 7); /* You won! Give us a lute! */
+ dna.obj[lute] = true;
+ objectlist();
+ dna.wonnim = true;
+ show_one(1); /* Show the settle with no lute on it. */
+ points(7); /* 7 points for winning! */
+ }
+
+ if (dna.playednim == 1) points(3); /* 3 points for playing your 1st game. */
}
- /* No init part. */
+/* No init part. */
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/nimunit.h b/engines/avalanche/nimunit.h
index 8919b1af3a..1397367d16 100644
--- a/engines/avalanche/nimunit.h
+++ b/engines/avalanche/nimunit.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,8 +29,8 @@
#define __nimunit_h__
#include "gyro.h"
- #include "Graph.h"
- /*#include "Crt.h"*/
+#include "Graph.h"
+/*#include "Crt.h"*/
#include "pingo.h"
#include "visa.h"
#include "lucerna.h"
@@ -39,7 +39,7 @@
namespace Avalanche {
- void play_nim();
+void play_nim();
} // End of namespace Avalanche.
diff --git a/engines/avalanche/oldfiler.cpp b/engines/avalanche/oldfiler.cpp
index c813f37648..581f68abfb 100644
--- a/engines/avalanche/oldfiler.cpp
+++ b/engines/avalanche/oldfiler.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,251 +34,298 @@
namespace Avalanche {
const char more[] = " (more) ";
-const string up = string('-')+'\30'+more+'\30';
-const string down = string('+')+'\31'+more+'\31';
+const string up = string('-') + '\30' + more + '\30';
+const string down = string('+') + '\31' + more + '\31';
const graphcursmasktype fletch = /* Mask 4 in Avalot */
- {(
- (255,511,1023,2047,1023,4607,14591,31871,65031,65283,65281,65280,65280,65409,65473,65511),
- (0,10240,20480,24576,26624,17408,512,256,128,88,32,86,72,20,16,0)),
- 0,
- 0};
+{
+ (
+ (255, 511, 1023, 2047, 1023, 4607, 14591, 31871, 65031, 65283, 65281, 65280, 65280, 65409, 65473, 65511),
+ (0, 10240, 20480, 24576, 26624, 17408, 512, 256, 128, 88, 32, 86, 72, 20, 16, 0)),
+ 0,
+ 0
+};
string cdir;
-matrix<0,2,1,18,varying_string<15> > info;
-matrix<0,2,1,100,varying_string<15> > possible;
+matrix<0, 2, 1, 18, varying_string<15> > info;
+matrix<0, 2, 1, 100, varying_string<15> > possible;
byte fv;
-array<0,2,byte> light,page_;
-array<0,2,boolean> blank;
-byte chtcode,where;
+array<0, 2, byte> light, page_;
+array<0, 2, boolean> blank;
+byte chtcode, where;
string answer;
-void split(string x)
-{
- byte fv;
-;
- x=copy(x,4,255); if (x=="") {; blank[0]=true; return; }
- x=x+'\\'; possible[0][1]="b\\"; fv=2;
- while (pos("\\",x)!=0)
- {;
- possible[0][fv]=string('b')+copy(x,1,pos("\\",x)-1); fv += 1;
- x=copy(x,pos("\\",x)+1,255);
- }
- possible[0][fv-1]="";
+void split(string x) {
+ byte fv;
+ ;
+ x = copy(x, 4, 255);
+ if (x == "") {
+ ;
+ blank[0] = true;
+ return;
+ }
+ x = x + '\\';
+ possible[0][1] = "b\\";
+ fv = 2;
+ while (pos("\\", x) != 0) {
+ ;
+ possible[0][fv] = string('b') + copy(x, 1, pos("\\", x) - 1);
+ fv += 1;
+ x = copy(x, pos("\\", x) + 1, 255);
+ }
+ possible[0][fv - 1] = "";
}
-void block(integer x1,integer y1,integer x2,integer y2, string x)
-{;
- bar(x1,y1,x2,y2);
- setcolor( 9); outtextxy(x1+(x2-x1) / 2-1,y1+5,x);
- setcolor(15); outtextxy(x1+(x2-x1) / 2+1,y1+6,x);
+void block(integer x1, integer y1, integer x2, integer y2, string x) {
+ ;
+ bar(x1, y1, x2, y2);
+ setcolor(9);
+ outtextxy(x1 + (x2 - x1) / 2 - 1, y1 + 5, x);
+ setcolor(15);
+ outtextxy(x1 + (x2 - x1) / 2 + 1, y1 + 6, x);
}
-void message(string x)
-{;
- block(5,189,640,200,x);
+void message(string x) {
+ ;
+ block(5, 189, 640, 200, x);
}
-void bigbar(byte x)
-{;
- bar(15+210*x,36,210+210*x,187);
+void bigbar(byte x) {
+ ;
+ bar(15 + 210 * x, 36, 210 + 210 * x, 187);
}
void getem();
-static void sub_getem(char prefix, string spec, byte attrib,byte infonum)
-{
- searchrec s; byte fv;
-;
- fv=0;
- findfirst(spec,attrib,s);
- while ((doserror==0) && (fv<100))
- {;
- if (((s.attr & attrib)>0) && (s.name[1]!='.'))
- {; /* circumvent inclusive searching! */
- fv += 1;
- possible[infonum][fv]=string(prefix)+s.name;
- }
- findnext(s);
- }
- if (fv==0) blank[infonum]=true;
+static void sub_getem(char prefix, string spec, byte attrib, byte infonum) {
+ searchrec s;
+ byte fv;
+ ;
+ fv = 0;
+ findfirst(spec, attrib, s);
+ while ((doserror == 0) && (fv < 100)) {
+ ;
+ if (((s.attr & attrib) > 0) && (s.name[1] != '.')) {
+ ; /* circumvent inclusive searching! */
+ fv += 1;
+ possible[infonum][fv] = string(prefix) + s.name;
+ }
+ findnext(s);
+ }
+ if (fv == 0) blank[infonum] = true;
}
void getem()
-{;
- message("Please wait... scanning directory...");
- sub_getem('a',"*.asg",archive+hidden,1); /* Scan for .ASG files */
- sub_getem('f',"*.*",directory,2); /* Scan for sub-directories */
+{
+ ;
+ message("Please wait... scanning directory...");
+ sub_getem('a', "*.asg", archive + hidden, 1); /* Scan for .ASG files */
+ sub_getem('f', "*.*", directory, 2); /* Scan for sub-directories */
}
-void minisc(string& x) /* Converts to lower-case */
-{
- byte fv;
-;
- for( fv=1; fv <= length(x); fv ++)
- if ((x[fv]>='A') && (x[fv]<='Z')) x[fv] += 32;
+void minisc(string &x) { /* Converts to lower-case */
+ byte fv;
+ ;
+ for (fv = 1; fv <= length(x); fv ++)
+ if ((x[fv] >= 'A') && (x[fv] <= 'Z')) x[fv] += 32;
}
-void showall()
-{
- byte fv,ff;
-;
- for( fv=0; fv <= 2; fv ++)
- {;
- bigbar(fv); /* blank out anything else */
- if (blank[fv])
- {; /* nothing here at all */
-/* setcolor(14);
- outtextxy(113+210*fv,43,'(Nothing here!)'); */
- setcolor(14); settextstyle(0,0,2);
- outtextxy(113+210*fv, 77,"Nothing");
- outtextxy(113+210*fv,100,"here!");
- settextstyle(0,0,1);
- } else
- {; /* something here- what? */
- setcolor(11);
- for( ff=0; ff <= 15; ff ++)
- {;
- info[fv][ff+2]=possible[fv][page_[fv]*15+ff+1]; minisc(info[fv][ff+2]);
- }
- if (page_[fv]>0) info[fv][1]=up; else info[fv][1]="";
- if (possible[fv][page_[fv]*15+17]!="")
- info[fv][18]=down; else info[fv][18]="";
- for( ff=1; ff <= 18; ff ++)
- {;
- outtextxy(113+210*fv,35+ff*8,copy(info[fv][ff],2,255));
- }
- }
- }
- block(5,12,640,22,cdir);
+void showall() {
+ byte fv, ff;
+ ;
+ for (fv = 0; fv <= 2; fv ++) {
+ ;
+ bigbar(fv); /* blank out anything else */
+ if (blank[fv]) {
+ ; /* nothing here at all */
+ /* setcolor(14);
+ outtextxy(113+210*fv,43,'(Nothing here!)'); */
+ setcolor(14);
+ settextstyle(0, 0, 2);
+ outtextxy(113 + 210 * fv, 77, "Nothing");
+ outtextxy(113 + 210 * fv, 100, "here!");
+ settextstyle(0, 0, 1);
+ } else {
+ ; /* something here- what? */
+ setcolor(11);
+ for (ff = 0; ff <= 15; ff ++) {
+ ;
+ info[fv][ff + 2] = possible[fv][page_[fv] * 15 + ff + 1];
+ minisc(info[fv][ff + 2]);
+ }
+ if (page_[fv] > 0) info[fv][1] = up;
+ else info[fv][1] = "";
+ if (possible[fv][page_[fv] * 15 + 17] != "")
+ info[fv][18] = down;
+ else info[fv][18] = "";
+ for (ff = 1; ff <= 18; ff ++) {
+ ;
+ outtextxy(113 + 210 * fv, 35 + ff * 8, copy(info[fv][ff], 2, 255));
+ }
+ }
+ }
+ block(5, 12, 640, 22, cdir);
}
-void changedir(string x)
-{;
+void changedir(string x) {
+ ;
- chdir(x); getdir(0,cdir);
+ chdir(x);
+ getdir(0, cdir);
}
-void drawup()
-{
- integer gd;
-;
- block( 15, 0,630,10,"Choose an .ASG file to load or save.");
- block( 15,24,210,34,"Looking back:");
- block(225,24,420,34,"Here:");
- block(435,24,630,34,"Looking forwards:");
- for( gd=0; gd <= 2; gd ++) bigbar(gd); /* just to tide us over the wait... */
- showall();
+void drawup() {
+ integer gd;
+ ;
+ block(15, 0, 630, 10, "Choose an .ASG file to load or save.");
+ block(15, 24, 210, 34, "Looking back:");
+ block(225, 24, 420, 34, "Here:");
+ block(435, 24, 630, 34, "Looking forwards:");
+ for (gd = 0; gd <= 2; gd ++) bigbar(gd); /* just to tide us over the wait... */
+ showall();
}
-void setup()
-{;
- settextjustify(1,1); setfillstyle(1,1);
- fillchar(blank,sizeof(blank),'\0'); fillchar( info,sizeof( info),'\0');
- fillchar(possible,sizeof(possible),'\0');
- fillchar( page_,sizeof( page_),'\0');
- split(cdir); getem(); drawup();
+void setup() {
+ ;
+ settextjustify(1, 1);
+ setfillstyle(1, 1);
+ fillchar(blank, sizeof(blank), '\0');
+ fillchar(info, sizeof(info), '\0');
+ fillchar(possible, sizeof(possible), '\0');
+ fillchar(page_, sizeof(page_), '\0');
+ split(cdir);
+ getem();
+ drawup();
}
-void setup1()
-{
- integer gd,gm;
-;
- gd=3; gm=0; initgraph(gd,gm,""); answer="";
- getdir(0,cdir); resetmouse; setgraphicscursor(fletch);
- fillchar(light,sizeof(light),'\0');
- setup();
+void setup1() {
+ integer gd, gm;
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ answer = "";
+ getdir(0, cdir);
+ resetmouse;
+ setgraphicscursor(fletch);
+ fillchar(light, sizeof(light), '\0');
+ setup();
}
-void clickwait()
-{
- const array<1,4,varying_string<30> > msg =
- {{"change to another drive.",
- "return to a lower directory.",
- "use the file named.",
- "enter a sub-directory."}};
- byte oldcht; /* Click Here To... code */
-;
- showmousecursor; oldcht=177;
- do {
- if (mousey<38) chtcode=1; else
- switch (mousex) {
- case 0 ... 210: chtcode=2; break;
- case 211 ... 421: chtcode=3; break;
- default: chtcode=4;
- }
- if (oldcht!=chtcode)
- {;
- hidemousecursor; message(string("Click here to ")+msg[chtcode]);
- showmousecursor; oldcht=chtcode;
- }
- } while (!leftmousekeypressed);
- hidemousecursor; where=((mousey-39) / 8)+1;
+void clickwait() {
+ const array<1, 4, varying_string<30> > msg = {
+ {
+ "change to another drive.",
+ "return to a lower directory.",
+ "use the file named.",
+ "enter a sub-directory."
+ }
+ };
+ byte oldcht; /* Click Here To... code */
+ ;
+ showmousecursor;
+ oldcht = 177;
+ do {
+ if (mousey < 38) chtcode = 1;
+ else
+ switch (mousex) {
+ case 0 ... 210:
+ chtcode = 2;
+ break;
+ case 211 ... 421:
+ chtcode = 3;
+ break;
+ default:
+ chtcode = 4;
+ }
+ if (oldcht != chtcode) {
+ ;
+ hidemousecursor;
+ message(string("Click here to ") + msg[chtcode]);
+ showmousecursor;
+ oldcht = chtcode;
+ }
+ } while (!leftmousekeypressed);
+ hidemousecursor;
+ where = ((mousey - 39) / 8) + 1;
}
-void blip()
-{;
- sound(32); delay(3); nosound;
+void blip() {
+ ;
+ sound(32);
+ delay(3);
+ nosound;
}
-void do_cht()
-{
- char r; byte fv; string x;
-;
- if (chtcode==1)
- {; /* change drives */
- message("Enter the drive letter (e.g. A)...");
- r=readkey();
- changedir(string(r)+':'); setup();
- } else
- {;
- x=info[chtcode-2][where]; r=x[1]; x=copy(x,2,255);
- switch (r) {
- case 'b': {; /* back some dirs */
- if (x=='\\') x="";
- for( fv=where-1; fv >= 3; fv --)
- x=copy(info[0][fv],2,255)+'\\'+x;
- changedir(string('\\')+x);
- setup();
- }
- break;
- case 'f': {; /* sub-directory */
- changedir(x);
- setup();
- }
- break;
- case '+': {; /* scroll one panel down */
- page_[chtcode-2] += 1;
- drawup();
- }
- break;
- case '-': {; /* scroll one panel up */
- page_[chtcode-2] -= 1;
- drawup();
- }
- break;
- case 'a': answer=x; break;
- }
- }
+void do_cht() {
+ char r;
+ byte fv;
+ string x;
+ ;
+ if (chtcode == 1) {
+ ; /* change drives */
+ message("Enter the drive letter (e.g. A)...");
+ r = readkey();
+ changedir(string(r) + ':');
+ setup();
+ } else {
+ ;
+ x = info[chtcode - 2][where];
+ r = x[1];
+ x = copy(x, 2, 255);
+ switch (r) {
+ case 'b': {
+ ; /* back some dirs */
+ if (x == '\\') x = "";
+ for (fv = where - 1; fv >= 3; fv --)
+ x = copy(info[0][fv], 2, 255) + '\\' + x;
+ changedir(string('\\') + x);
+ setup();
+ }
+ break;
+ case 'f': {
+ ; /* sub-directory */
+ changedir(x);
+ setup();
+ }
+ break;
+ case '+': {
+ ; /* scroll one panel down */
+ page_[chtcode - 2] += 1;
+ drawup();
+ }
+ break;
+ case '-': {
+ ; /* scroll one panel up */
+ page_[chtcode - 2] -= 1;
+ drawup();
+ }
+ break;
+ case 'a':
+ answer = x;
+ break;
+ }
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- setup1();
- do {
- clickwait();
- do_cht();
- } while (!(answer!=""));
- if (length(cdir)>3) cdir=cdir+'\\';
- answer=cdir+answer;
- closegraph();
- output << "Routine completed." << NL;
- output << "Answer: " << answer << NL;
- output << "Hit Enter:"; input >> NL;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ setup1();
+ do {
+ clickwait();
+ do_cht();
+ } while (!(answer != ""));
+ if (length(cdir) > 3) cdir = cdir + '\\';
+ answer = cdir + answer;
+ closegraph();
+ output << "Routine completed." << NL;
+ output << "Answer: " << answer << NL;
+ output << "Hit Enter:";
+ input >> NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/oldhighs.cpp b/engines/avalanche/oldhighs.cpp
index eaee8eb502..b53768f893 100644
--- a/engines/avalanche/oldhighs.cpp
+++ b/engines/avalanche/oldhighs.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,46 +31,47 @@
namespace Avalanche {
struct scoretype {
- varying_string<39> name;
- word score;
+ varying_string<39> name;
+ word score;
};
struct ratetype {
- varying_string<10> rank;
- word lowest;
+ varying_string<10> rank;
+ word lowest;
};
struct tabletype {
- array<1,12,scoretype> a;
- byte light;
+ array<1, 12, scoretype> a;
+ byte light;
};
-const array<1,9,ratetype> ratings =
- {{{"Rubbish", 0},
- {"Beginner", 1},
- {"Poor", 10},
- {"Average", 30},
- {"Fair", 50},
- {"Not bad", 70},
- {"Good", 100},
- {"Great", 200},
- {"Fantastic!", 330}}};
-
-integer gd,gm;
+const array<1, 9, ratetype> ratings = {
+ { {"Rubbish", 0},
+ {"Beginner", 1},
+ {"Poor", 10},
+ {"Average", 30},
+ {"Fair", 50},
+ {"Not bad", 70},
+ {"Good", 100},
+ {"Great", 200},
+ {"Fantastic!", 330}
+ }
+};
+
+integer gd, gm;
tabletype table;
-byte ratingname(word x)
-{
- byte fv;
-byte ratingname_result;
-;
- for( fv=9; fv >= 1; fv --)
- if (x>=ratings[fv].lowest)
- {;
- ratingname_result=fv;
- return ratingname_result;
- } /* bad style */
-return ratingname_result;
+byte ratingname(word x) {
+ byte fv;
+ byte ratingname_result;
+ ;
+ for (fv = 9; fv >= 1; fv --)
+ if (x >= ratings[fv].lowest) {
+ ;
+ ratingname_result = fv;
+ return ratingname_result;
+ } /* bad style */
+ return ratingname_result;
}
void title();
@@ -78,199 +79,235 @@ void title();
const string message = "A v a l o t : H i g h - S c o r e s";
-static void sayfast(integer x,integer y)
-{
- integer anchor; byte fv;
-;
- anchor=-296;
- for( fv=1; fv <= length(message); fv ++)
- {;
- if (message[fv-1]!='\40') outtextxy(x+anchor,y-8,message[fv-1]);
- anchor += 16;
- }
+static void sayfast(integer x, integer y) {
+ integer anchor;
+ byte fv;
+ ;
+ anchor = -296;
+ for (fv = 1; fv <= length(message); fv ++) {
+ ;
+ if (message[fv - 1] != '\40') outtextxy(x + anchor, y - 8, message[fv - 1]);
+ anchor += 16;
+ }
}
-void title()
-{
- const array<0,6,byte> shades =
- {{blue,lightgray,darkgray,blue,lightblue,blue,darkgray}};
- byte x;
- integer len;
-
-;
- settextstyle(0,0,2); /*settextjustify(1,1);*/
- len=textheight(message);
- for( x=6; x >= 0; x --)
- {;
- setcolor(shades[x]);
- sayfast(320-x*2,20-x);
- if (x>0)
- {;
- sayfast(320+x*2,20-x);
- sayfast(320+x*2,20+x);
- sayfast(320-x*2,20+x);
- }
- }
+void title() {
+ const array<0, 6, byte> shades =
+ {{blue, lightgray, darkgray, blue, lightblue, blue, darkgray}};
+ byte x;
+ integer len;
+
+ ;
+ settextstyle(0, 0, 2); /*settextjustify(1,1);*/
+ len = textheight(message);
+ for (x = 6; x >= 0; x --) {
+ ;
+ setcolor(shades[x]);
+ sayfast(320 - x * 2, 20 - x);
+ if (x > 0) {
+ ;
+ sayfast(320 + x * 2, 20 - x);
+ sayfast(320 + x * 2, 20 + x);
+ sayfast(320 - x * 2, 20 + x);
+ }
+ }
}
-void newtable()
-{
- const array<1,12,varying_string<15> > names =
- {{"Mike","Liz","Thomas","Mark","Mandy","Andrew","Lucy Tryphena","",
- "Thanks to all","who helped...","","Have fun!"}};
- byte fv;
-;
- fillchar(table,sizeof(table),'\261');
- for( fv=1; fv <= 12; fv ++)
- {
- scoretype& with = table.a[fv];
- ;
- with.name=names[fv];
- with.score=193-fv*16;
- }
- table.light=1;
+void newtable() {
+ const array<1, 12, varying_string<15> > names = {
+ {
+ "Mike", "Liz", "Thomas", "Mark", "Mandy", "Andrew", "Lucy Tryphena", "",
+ "Thanks to all", "who helped...", "", "Have fun!"
+ }
+ };
+ byte fv;
+ ;
+ fillchar(table, sizeof(table), '\261');
+ for (fv = 1; fv <= 12; fv ++) {
+ scoretype &with = table.a[fv];
+ ;
+ with.name = names[fv];
+ with.score = 193 - fv * 16;
+ }
+ table.light = 1;
}
-string strf(longint x) /* From Gyro. Delete when integrated. */
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
+string strf(longint x) { /* From Gyro. Delete when integrated. */
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
}
-void sparkle(integer x,integer y, string z)
-{;
- setcolor(cyan); outtextxy(x-1,y-1,z);
- setcolor(blue); outtextxy(x+1,y+1,z);
- setcolor(white); outtextxy(x ,y ,z);
+void sparkle(integer x, integer y, string z) {
+ ;
+ setcolor(cyan);
+ outtextxy(x - 1, y - 1, z);
+ setcolor(blue);
+ outtextxy(x + 1, y + 1, z);
+ setcolor(white);
+ outtextxy(x , y , z);
}
-void drawtable()
-{
- byte fv,last,now;
-;
- setfillstyle(1,8);
- bar( 0, 40,105, 58); bar(110, 40,400, 58);
- bar(405, 40,490, 58); bar(495, 40,640, 58);
- bar( 5, 60,105,181); bar(110, 60,400,181);
- bar(405, 60,490,181); bar(495, 60,635,181);
- bar( 0,185,640,190);
- setcolor(lightred); settextstyle(0,0,1); settextjustify(0,0);
- outtextxy( 45,55,"Number:");
- outtextxy(120,55,"Name:");
- outtextxy(420,55,"Score:");
- outtextxy(500,55,"Rating:");
- setcolor(white); last=177;
- for( fv=1; fv <= 12; fv ++)
- {
- scoretype& with = table.a[fv];
- ;
- settextjustify(righttext,bottomtext);
- sparkle(100,60+fv*10,strf(fv)+'.');
- sparkle(455,60+fv*10,strf(with.score));
- if (fv==table.light) sparkle(70,60+fv*10,string("ÍÍ")+'\20');
-
- settextjustify(lefttext,bottomtext);
- sparkle(120,60+fv*10,with.name);
- now=ratingname(with.score);
- if (now!=last)
- sparkle(510,60+fv*10,ratings[ratingname(with.score)].rank);
- else
- sparkle(517,57+fv*10,",,");
- last=now;
- }
+void drawtable() {
+ byte fv, last, now;
+ ;
+ setfillstyle(1, 8);
+ bar(0, 40, 105, 58);
+ bar(110, 40, 400, 58);
+ bar(405, 40, 490, 58);
+ bar(495, 40, 640, 58);
+ bar(5, 60, 105, 181);
+ bar(110, 60, 400, 181);
+ bar(405, 60, 490, 181);
+ bar(495, 60, 635, 181);
+ bar(0, 185, 640, 190);
+ setcolor(lightred);
+ settextstyle(0, 0, 1);
+ settextjustify(0, 0);
+ outtextxy(45, 55, "Number:");
+ outtextxy(120, 55, "Name:");
+ outtextxy(420, 55, "Score:");
+ outtextxy(500, 55, "Rating:");
+ setcolor(white);
+ last = 177;
+ for (fv = 1; fv <= 12; fv ++) {
+ scoretype &with = table.a[fv];
+ ;
+ settextjustify(righttext, bottomtext);
+ sparkle(100, 60 + fv * 10, strf(fv) + '.');
+ sparkle(455, 60 + fv * 10, strf(with.score));
+ if (fv == table.light) sparkle(70, 60 + fv * 10, string("ÍÍ") + '\20');
+
+ settextjustify(lefttext, bottomtext);
+ sparkle(120, 60 + fv * 10, with.name);
+ now = ratingname(with.score);
+ if (now != last)
+ sparkle(510, 60 + fv * 10, ratings[ratingname(with.score)].rank);
+ else
+ sparkle(517, 57 + fv * 10, ",,");
+ last = now;
+ }
}
-void message1(string x)
-{;
- setfillstyle(1,8); bar(0,190,640,200);
- settextjustify(1,1); sparkle(320,195,x);
+void message1(string x) {
+ ;
+ setfillstyle(1, 8);
+ bar(0, 190, 640, 200);
+ settextjustify(1, 1);
+ sparkle(320, 195, x);
}
-void sorthst()
-{
- byte fv; boolean ok; scoretype temp;
-;
- do {
- ok=true;
- for( fv=1; fv <= 11; fv ++)
- if (table.a[fv].score<table.a[fv+1].score)
- {;
- temp=table.a[fv]; table.a[fv]=table.a[fv+1]; table.a[fv+1]=temp; /* swap 'em */
- table.light=fv; /* must be- that's the only unsorted one */
- ok=false; /* So, we try again. */
- }
- } while (!ok);
+void sorthst() {
+ byte fv;
+ boolean ok;
+ scoretype temp;
+ ;
+ do {
+ ok = true;
+ for (fv = 1; fv <= 11; fv ++)
+ if (table.a[fv].score < table.a[fv + 1].score) {
+ ;
+ temp = table.a[fv];
+ table.a[fv] = table.a[fv + 1];
+ table.a[fv + 1] = temp; /* swap 'em */
+ table.light = fv; /* must be- that's the only unsorted one */
+ ok = false; /* So, we try again. */
+ }
+ } while (!ok);
}
void entername();
-static integer x,y;
+static integer x, y;
-static void cursor(byte col)
-{;
- setcolor(col);
- outtextxy(x,y,"?");
+static void cursor(byte col) {
+ ;
+ setcolor(col);
+ outtextxy(x, y, "?");
}
-void entername()
-{
- varying_string<34> i;char r; integer counter; byte flash;
-
-;
- y=60+table.light*10; i=""; settextjustify(2,0); counter=999; flash=0;
- do {
- x=128+length(i)*8;
- do {
- counter += 1;
- if (counter==1000)
- {;
- cursor(4+flash*10);
- flash=1-flash;
- counter=0;
- }
- delay(1);
- } while (!keypressed());
- cursor(8);
- sound(17177); r=readkey(); nosound;
- if (r=='\10') {;
- if (i[0]>'\0') {;
- bar(x-17,y-10,x-8,y);
- i[0] -= 1; sparkle(x-16,y,i[length(i)]);
- }
- } else {;
- if ((i[0]<'\42') && (r!='\15')) {;
- sparkle(x,y,r);
- i=i+r;
- }
- }
- counter=999;
- } while (!(r=='\15'));
+void entername() {
+ varying_string<34> i;
+ char r;
+ integer counter;
+ byte flash;
+
+ ;
+ y = 60 + table.light * 10;
+ i = "";
+ settextjustify(2, 0);
+ counter = 999;
+ flash = 0;
+ do {
+ x = 128 + length(i) * 8;
+ do {
+ counter += 1;
+ if (counter == 1000) {
+ ;
+ cursor(4 + flash * 10);
+ flash = 1 - flash;
+ counter = 0;
+ }
+ delay(1);
+ } while (!keypressed());
+ cursor(8);
+ sound(17177);
+ r = readkey();
+ nosound;
+ if (r == '\10') {
+ ;
+ if (i[0] > '\0') {
+ ;
+ bar(x - 17, y - 10, x - 8, y);
+ i[0] -= 1;
+ sparkle(x - 16, y, i[length(i)]);
+ }
+ } else {
+ ;
+ if ((i[0] < '\42') && (r != '\15')) {
+ ;
+ sparkle(x, y, r);
+ i = i + r;
+ }
+ }
+ counter = 999;
+ } while (!(r == '\15'));
}
-void newscore(word sc)
-{;
- { scoretype& with = table.a[12];
- if (sc>with.score)
- {;
- with.name=""; with.score=sc; table.light=10; sorthst(); drawtable();
- message1("Well done! Please enter your name, then press Return...");
- entername();
- } else drawtable();} /* too low for score */
- message1("Press Space to continue...");
- do {; } while (!(keypressed() && (readkey()=='\40')));
+void newscore(word sc) {
+ ;
+ {
+ scoretype &with = table.a[12];
+ if (sc > with.score) {
+ ;
+ with.name = "";
+ with.score = sc;
+ table.light = 10;
+ sorthst();
+ drawtable();
+ message1("Well done! Please enter your name, then press Return...");
+ entername();
+ } else drawtable();
+ } /* too low for score */
+ message1("Press Space to continue...");
+ do {
+ ;
+ } while (!(keypressed() && (readkey() == '\40')));
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- title();
- newtable();
- newscore(/*177*/0);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ title();
+ newtable();
+ newscore(/*177*/0);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/oldincln.cpp b/engines/avalanche/oldincln.cpp
index a364cbcfdd..89bc907051 100644
--- a/engines/avalanche/oldincln.cpp
+++ b/engines/avalanche/oldincln.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -51,227 +51,266 @@ const integer bug_notyesorno = 251;
byte fv;
char t;
string bugline;
-boolean usingp,usingl;
-boolean zoomy,numlockhold;
+boolean usingp, usingl;
+boolean zoomy, numlockhold;
boolean filename_specified;
-string inihead,initail; /* For reading the .INI file. */
-
-
-void linebug(byte which)
-{;
- output << "AVALOT : ";
- switch (which) {
- case bug_twonames : output << "You may only specify ONE filename." << NL; break;
- case bug_pandl : output << "/p and /l cannot be used together." << NL; break;
- case bug_weirdswitch : output << "Unknown switch (\"" << bugline <<
- "\"). Type AVALOT /? for a list of switches." << NL;
- break;
- case bug_invalidini: output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL; break;
- case bug_notyesorno: output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL; break;
- }
- exit(which);
+string inihead, initail; /* For reading the .INI file. */
+
+
+void linebug(byte which) {
+ ;
+ output << "AVALOT : ";
+ switch (which) {
+ case bug_twonames :
+ output << "You may only specify ONE filename." << NL;
+ break;
+ case bug_pandl :
+ output << "/p and /l cannot be used together." << NL;
+ break;
+ case bug_weirdswitch :
+ output << "Unknown switch (\"" << bugline <<
+ "\"). Type AVALOT /? for a list of switches." << NL;
+ break;
+ case bug_invalidini:
+ output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL;
+ break;
+ case bug_notyesorno:
+ output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL;
+ break;
+ }
+ exit(which);
}
-void syntax()
-{;
- assign(output,""); rewrite(output);
- output << NL;
- output << string("Lord Avalot d'Argent\n\n(c) ")+copyright+" Mark, Mike and Thomas Thurman." << NL;
- output << string("~~~~~~~~~~~~~~~~~~~~~\n\n")+vernum << NL;
- output << NL;
- output << "Syntax:" << NL;
- output << "\n/?\ndisplays this screen," << NL;
- output << "\n/O\noverrides EGA check," << NL;
- output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL;
- output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL;
- output << "\n/Q\ncancels sound effects," << NL;
- output << "\n/S\ndisables Soundblaster," << NL;
- output << "\n/Z\ngoes straight into the game." << NL;
- output << NL;
- output << "\n\n\n\n\n\n\n... Have fun!" << NL;
- exit(177);
+void syntax() {
+ ;
+ assign(output, "");
+ rewrite(output);
+ output << NL;
+ output << string("Lord Avalot d'Argent\n\n(c) ") + copyright + " Mark, Mike and Thomas Thurman." << NL;
+ output << string("~~~~~~~~~~~~~~~~~~~~~\n\n") + vernum << NL;
+ output << NL;
+ output << "Syntax:" << NL;
+ output << "\n/?\ndisplays this screen," << NL;
+ output << "\n/O\noverrides EGA check," << NL;
+ output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL;
+ output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL;
+ output << "\n/Q\ncancels sound effects," << NL;
+ output << "\n/S\ndisables Soundblaster," << NL;
+ output << "\n/Z\ngoes straight into the game." << NL;
+ output << NL;
+ output << "\n\n\n\n\n\n\n... Have fun!" << NL;
+ exit(177);
}
-void upstr(string& x)
-{
- byte fv;
-;
- for( fv=1; fv <= length(x); fv ++) x[fv]=upcase(x[fv]);
+void upstr(string &x) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= length(x); fv ++) x[fv] = upcase(x[fv]);
}
-boolean yesno()
-{boolean yesno_result;
-;
- if (initail=="YES") yesno_result=true; else
- if (initail=="NO") yesno_result=false; else
- linebug(bug_notyesorno);
-return yesno_result;
+boolean yesno() {
+ boolean yesno_result;
+ ;
+ if (initail == "YES") yesno_result = true;
+ else if (initail == "NO") yesno_result = false;
+ else
+ linebug(bug_notyesorno);
+ return yesno_result;
}
-void ini_parse()
-{;
- upstr(inihead);
- upstr(initail);
-
- if (inihead=="QUIET") soundfx=! yesno(); else
- if (inihead=="ZOOMYSTART") zoomy=yesno(); else
- if (inihead=="NUMLOCKHOLD") numlockhold=yesno(); else
- if (inihead=="LOADFIRST") filetoload=initail; else
- if (inihead=="OVERRIDEEGACHECK") cl_override=yesno(); else
- if (inihead=="KEYBOARDCLICK") keyboardclick=yesno();
+void ini_parse() {
+ ;
+ upstr(inihead);
+ upstr(initail);
+
+ if (inihead == "QUIET") soundfx = ! yesno();
+ else if (inihead == "ZOOMYSTART") zoomy = yesno();
+ else if (inihead == "NUMLOCKHOLD") numlockhold = yesno();
+ else if (inihead == "LOADFIRST") filetoload = initail;
+ else if (inihead == "OVERRIDEEGACHECK") cl_override = yesno();
+ else if (inihead == "KEYBOARDCLICK") keyboardclick = yesno();
}
-void strip_ini()
-{
- byte fv;
-;
- if (inihead=="") return;
+void strip_ini() {
+ byte fv;
+ ;
+ if (inihead == "") return;
- /* Firstly, delete any comments. */
- fv=pos(";",inihead);
- if (fv>0) Delete(inihead,fv,255);
+ /* Firstly, delete any comments. */
+ fv = pos(";", inihead);
+ if (fv > 0) Delete(inihead, fv, 255);
- /* Lose the whitespace... */
+ /* Lose the whitespace... */
- while (inihead[length(inihead)]==' ') inihead[0] -= 1;
- while ((inihead!="") && (inihead[1]==' ')) Delete(inihead,1,1);
+ while (inihead[length(inihead)] == ' ') inihead[0] -= 1;
+ while ((inihead != "") && (inihead[1] == ' ')) Delete(inihead, 1, 1);
- /* It's possible that now we'll end up with a blank line. */
+ /* It's possible that now we'll end up with a blank line. */
- if ((inihead=="") || (inihead[1]=='[')) return;
+ if ((inihead == "") || (inihead[1] == '[')) return;
- fv=pos("=",inihead);
+ fv = pos("=", inihead);
- if (fv==0)
- {; /* No "="! Weird! */
- bugline=inihead;
- linebug(bug_invalidini);
- }
+ if (fv == 0) {
+ ; /* No "="! Weird! */
+ bugline = inihead;
+ linebug(bug_invalidini);
+ }
- initail=copy(inihead,fv+1,255);
- inihead[0]=chr(fv-1);
+ initail = copy(inihead, fv + 1, 255);
+ inihead[0] = chr(fv - 1);
}
-void load_ini()
-{
- text ini;
-;
- assign(ini,"AVALOT.INI");
- reset(ini);
-
- while (! eof(ini))
- {;
- ini >> inihead >> NL;
- strip_ini();
- if (inihead!="") ini_parse();
- }
-
- close(ini);
+void load_ini() {
+ text ini;
+ ;
+ assign(ini, "AVALOT.INI");
+ reset(ini);
+
+ while (! eof(ini)) {
+ ;
+ ini >> inihead >> NL;
+ strip_ini();
+ if (inihead != "") ini_parse();
+ }
+
+ close(ini);
}
void parse(string x);
static string arg;
-static string getarg(string otherwis)
-{string getarg_result;
-;
- if (arg=="") getarg_result=otherwis; else getarg_result="";
-return getarg_result;
+static string getarg(string otherwis) {
+ string getarg_result;
+ ;
+ if (arg == "") getarg_result = otherwis;
+ else getarg_result = "";
+ return getarg_result;
}
void parse(string x)
-{;
- switch (x[1]) {
- case '/':case '-': {;
- arg=copy(x,3,255);
- switch (upcase(x[2])) {
- case '?': syntax(); break;
- case 'O': cl_override=true; break;
- case 'L': if (! usingp)
- {;
- log_setup(getarg("avvy.log"),false);
- usingl=true;
- } else {; close(logfile); linebug(bug_pandl); }
- break;
- case 'P': if (! usingl)
- {;
- log_setup(getarg("prn"),true);
- usingp=true;
- } else {; close(logfile); linebug(bug_pandl); }
- break;
- case 'Q': soundfx=false; break;
- case 'Z': zoomy=true; break;
- case 'K': keyboardclick=true; break;
- case 'D': demo=true; break;
- default: {;
- bugline=x;
- linebug(bug_weirdswitch);
- }
- }
- }
- break;
- case '*': {;
- inihead=copy(x,2,255);
- strip_ini();
- if (inihead!="") ini_parse();
- }
- break;
- default: {; /* filename */
- if (filename_specified)
- linebug(bug_twonames);
- else
- filetoload=x;
- filename_specified=true;
- }
- }
+{
+ ;
+ switch (x[1]) {
+ case '/':
+ case '-': {
+ ;
+ arg = copy(x, 3, 255);
+ switch (upcase(x[2])) {
+ case '?':
+ syntax();
+ break;
+ case 'O':
+ cl_override = true;
+ break;
+ case 'L':
+ if (! usingp) {
+ ;
+ log_setup(getarg("avvy.log"), false);
+ usingl = true;
+ } else {
+ ;
+ close(logfile);
+ linebug(bug_pandl);
+ }
+ break;
+ case 'P':
+ if (! usingl) {
+ ;
+ log_setup(getarg("prn"), true);
+ usingp = true;
+ } else {
+ ;
+ close(logfile);
+ linebug(bug_pandl);
+ }
+ break;
+ case 'Q':
+ soundfx = false;
+ break;
+ case 'Z':
+ zoomy = true;
+ break;
+ case 'K':
+ keyboardclick = true;
+ break;
+ case 'D':
+ demo = true;
+ break;
+ default: {
+ ;
+ bugline = x;
+ linebug(bug_weirdswitch);
+ }
+ }
+ }
+ break;
+ case '*': {
+ ;
+ inihead = copy(x, 2, 255);
+ strip_ini();
+ if (inihead != "") ini_parse();
+ }
+ break;
+ default: {
+ ; /* filename */
+ if (filename_specified)
+ linebug(bug_twonames);
+ else
+ filetoload = x;
+ filename_specified = true;
+ }
+ }
}
-void not_through_bootstrap()
-{
- output << "Avalot must be loaded through the bootstrap." << NL;
- exit(0);
+void not_through_bootstrap() {
+ output << "Avalot must be loaded through the bootstrap." << NL;
+ exit(0);
}
-void get_storage_addr()
-{
- integer e;
+void get_storage_addr() {
+ integer e;
- val(paramstr(2),storage_seg,e); if (e!=0) not_through_bootstrap();
- val(paramstr(3),storage_ofs,e); if (e!=0) not_through_bootstrap();
- skellern=storage_ofs+1;
+ val(paramstr(2), storage_seg, e);
+ if (e != 0) not_through_bootstrap();
+ val(paramstr(3), storage_ofs, e);
+ if (e != 0) not_through_bootstrap();
+ skellern = storage_ofs + 1;
}
class unit_incline_initialize {
- public: unit_incline_initialize();
+public:
+ unit_incline_initialize();
};
static unit_incline_initialize incline_constructor;
-unit_incline_initialize::unit_incline_initialize() {;
- filetoload="";
- usingl=false;
- usingp=false;
- logging=false;
- cl_override=false;
- soundfx=true;
- zoomy=false;
- numlockhold=false;
- filename_specified=false;
- keyboardclick=false;
+unit_incline_initialize::unit_incline_initialize() {
+ ;
+ filetoload = "";
+ usingl = false;
+ usingp = false;
+ logging = false;
+ cl_override = false;
+ soundfx = true;
+ zoomy = false;
+ numlockhold = false;
+ filename_specified = false;
+ keyboardclick = false;
- load_ini();
+ load_ini();
- if ((paramcount<3) ||
- ((paramstr(1)!="Go") && (paramstr(1)!="et"))) not_through_bootstrap();
+ if ((paramcount < 3) ||
+ ((paramstr(1) != "Go") && (paramstr(1) != "et"))) not_through_bootstrap();
- reloaded=paramstr(1)=="et";
+ reloaded = paramstr(1) == "et";
- get_storage_addr();
+ get_storage_addr();
- for( fv=4; fv <= paramcount; fv ++)
- parse(paramstr(fv));
+ for (fv = 4; fv <= paramcount; fv ++)
+ parse(paramstr(fv));
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/oldincln.h b/engines/avalanche/oldincln.h
index 9590d66c4d..2e872e77bb 100644
--- a/engines/avalanche/oldincln.h
+++ b/engines/avalanche/oldincln.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/oldtrip.cpp b/engines/avalanche/oldtrip.cpp
index 9a3476e82d..0c0665180e 100644
--- a/engines/avalanche/oldtrip.cpp
+++ b/engines/avalanche/oldtrip.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,7 +33,7 @@
TRIP4 Trippancy IV- "Trip Oop". */
#define __trip4_implementation__
- /* Trippancy IV (Trip Oop) */
+/* Trippancy IV (Trip Oop) */
#include "oldtrip.h"
@@ -44,432 +44,607 @@
namespace Avalanche {
-void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4);
+void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4);
-static boolean dropin(integer xc,integer yc,integer x1,integer y1,integer x2,integer y2)
+static boolean dropin(integer xc, integer yc, integer x1, integer y1, integer x2, integer y2)
/* Dropin returns True if the point xc,yc falls within the 1-2 rectangle. */
-{boolean dropin_result;
-;
- dropin_result=((xc>=x1) && (xc<=x2) && (yc>=y1) && (yc<=y2));
-return dropin_result;
-}
-
-
-
-static integer lesser(integer a,integer b)
-{integer lesser_result;
-;
- if (a<b) lesser_result=a; else lesser_result=b;
-return lesser_result;
-}
-
-
-
-static integer greater(integer a,integer b)
-{integer greater_result;
-;
- if (a>b) greater_result=a; else greater_result=b;
-return greater_result;
-}
-
-void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4)
-
-{;
- if (dropin(x3,y3,x1,y1,x2,y2)
- || dropin(x3,y4,x1,y1,x2,y2)
- || dropin(x4,y3,x1,y1,x2,y2)
- || dropin(x4,y4,x1,y1,x2,y2))
- {; /* Overlaps */
- mblit(lesser(x1,x3),lesser(y1,y3),greater(x2,x4),greater(y2,y4),1,0);
- } else
- {; /* Doesn't overlap- copy both of them seperately */
- mblit(x3,y3,x4,y4,1,0); /* backwards- why not...? */
- mblit(x1,y1,x2,y2,1,0);
- }
-}
-
-void loadtrip()
-{
- byte gm;
-;
- for( gm=1; gm <= numtr; gm ++) tr[gm].original();
- tr[1].init(0);
-}
-
-byte checkfeet(integer x1,integer x2,integer oy,integer y, byte yl)
-{
- byte a,c; integer fv,ff;
-byte checkfeet_result;
-;
- a=0; setactivepage(2); if (x1<0) x1=0; if (x2>639) x2=639;
- if (oy<y)
- for( fv=x1; fv <= x2; fv ++)
- for( ff=oy+yl; ff <= y+yl; ff ++)
- {;
- c=getpixel(fv,ff);
- if (c>a) a=c;
- } else
- for( fv=x1; fv <= x2; fv ++)
- for( ff=y+yl; ff <= oy+yl; ff ++)
- {;
- c=getpixel(fv,ff);
- if (c>a) a=c;
- }
- checkfeet_result=a; setactivepage(1);
-return checkfeet_result;
-}
-
-void touchcol(byte tc);
-static boolean bug;
-
-static void fr(byte a,byte b) {; fliproom(a,b); bug=false; }
-
-void touchcol(byte tc)
-{;
- bug=true; /* j.i.c. */
- switch (dna.room) {
- case 1: fr(2,3); break;
- case 2: {; /* main corridor */
- switch (tc) {
- case 1: fr(3,1); break; /* to the other corridor */
- case 2: fr(2,1); break; /* to this corridor! Fix this later... */
- }
- }
- break;
- case 3: {; /* turn corridor */
- switch (tc) {
- case 1: fr(2,1); break; /* to the other corridor */
- case 2: fr(12,1); break; /* through Spludwick's door */
- }
- }
- break;
- case 12: fr(3,2); break;
- }
- if (bug)
- {;
- setactivepage(0);
- display(string('\7')+"Unknown touchcolour ("+strf(tc)+')'+" in "+strf(dna.room)
- +'.'); setactivepage(1); tr[1].bounce();
- }
-}
-
-triptype* triptype::init(byte spritenum)
-{
- integer gd,gm; word s; untyped_file f; varying_string<2> xx; byte sort,n;
- word bigsize; pointer p,q;
-;
- str(spritenum,xx); assign(f,string("c:\\avalot\\sprite")+xx+".avd");
- reset(f,1); seek(f,59);
- blockread(f,a,sizeof(a)); blockread(f,bigsize,2);
- setactivepage(3);
- for( sort=0; sort <= 1; sort ++)
- {;
- mark(q); getmem(p,bigsize);
- blockread(f,p,bigsize);
- off; putimage(0,0,p,0); release(q); n=1;
- { adxtype& with = a;
- for( gm=0; gm <= (with.num / with.seq)-1; gm ++) /* directions */
- for( gd=0; gd <= with.seq-1; gd ++) /* steps */
- {;
- getmem(pic[n][sort],a.size); /* grab the memory */
- getimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl,
- (gm / 2)*(with.xl*6)+gd*with.xl+with.xl-1,(gm % 2)*with.yl+with.yl-1,
- pic[n][sort]); /* grab the pic */
- n += 1;
- }} on;
- }
- close(f); setactivepage(0);
-
- x=0; y=0; quick=true; visible=false; getmem(behind,a.size);
- homing=false; ix=0; iy=0; step=0; check_me=a.name=="Avalot";
-return this;
-}
-
-void triptype::original()
-{;
- quick=false;
-}
-
-void triptype::getback()
-{;
- tax=x; tay=y;
- off; /*getimage(x,y,x+a.xl,y+a.yl,behind^);*/
- mblit(x,y,x+a.xl,y+a.yl,1,3); on;
-}
-
-void triptype::andexor()
{
- byte picnum; /* Picnum, Picnic, what ye heck */
-;
- picnum=face*a.seq+step+1; off;
- putimage(x,y,pic[picnum][0],andput);
- putimage(x,y,pic[picnum][1],xorput); on;
+ boolean dropin_result;
+ ;
+ dropin_result = ((xc >= x1) && (xc <= x2) && (yc >= y1) && (yc <= y2));
+ return dropin_result;
}
-void triptype::turn(byte whichway)
-{;
- face=whichway;
-}
-void triptype::appear(integer wx,integer wy, byte wf)
-{;
- x=(wx / 8)*8; y=wy; ox=wx; oy=wy; turn(wf); visible=true; ix=0; iy=0;
-}
-void triptype::walk()
-{
- byte tc;
-;
- ox=x; oy=y;
- if ((ix==0) && (iy==0)) return;
- if (homing) homestep();
- x=x+ix; y=y+iy;
- if (check_me) {;
- tc=checkfeet(x,x+a.xl,oy,y,a.yl);
- { void& with = magics[tc];
- switch (op) {
- case exclaim: blip; break;
- case bounces: bounce(); break;
- case transport: fliproom(hi(data),lo(data)); break;
- }}
- }
-/* if x<0 then x:=0; else if x+a.xl>640 then x:=640-a.xl;*/
- if (y<0) y=0; /* else if y+a.yl>161 then y:=161-a.yl; */
- step += 1; if (step==a.seq) step=0; getback();
-}
-
-void triptype::bounce()
-{; setactivepage(1); putback(); x=ox; y=oy; stopwalk(); return; }
-
-void triptype::do_it()
-{;
- if (((ix!=0) || (iy!=0)) & (~ ddm_o.menunow))
- {;
- off; copier(ox,oy,ox+a.xl,oy+a.yl,x,y,x+a.xl,y+a.yl);
- putback(); on;
- }
-}
-
-void triptype::putback()
-{;
-/* putimage(tax,tay,behind^,0);*/ mblit(tax,tay,tax+a.xl,tay+a.yl,3,1);
-}
-
-void triptype::walkto(integer xx,integer yy)
-{;
- speed(xx-x,yy-y); hx=xx; hy=yy; homing=true;
-}
-
-void triptype::stophoming()
-{;
- homing=false;
-}
-
-void triptype::homestep()
-{
- integer temp;
-;
- if ((hx==x) && (hy==y))
- {; /* touching the target */
- homing=false; return;
- }
- ix=0; iy=0;
- if (hy!=y)
- {;
- temp=hy-y; if (temp>4) iy=4; else if (temp<-4) iy=-4; else iy=temp;
- }
- if (hx!=x)
- {;
- temp=hx-x; if (temp>4) ix=4; else if (temp<-4) ix=-4; else ix=temp;
- }
+static integer lesser(integer a, integer b) {
+ integer lesser_result;
+ ;
+ if (a < b) lesser_result = a;
+ else lesser_result = b;
+ return lesser_result;
}
-void triptype::speed(shortint xx,shortint yy)
-{;
- ix=xx; iy=yy;
- if ((ix==0) && (iy==0)) return; /* no movement */
- if (ix==0)
- {; /* No horz movement */
- if (iy<0) turn(up); else turn(down);
- } else
- {;
- if (ix<0) turn(left); else turn(right);
- }
-}
-void triptype::stopwalk()
-{;
- ix=0; iy=0; homing=false;
-}
-void triptype::chatter()
-{;
- talkx=x+a.xl / 2; talky=y; talkf=a.fgc; talkb=a.bgc;
+static integer greater(integer a, integer b) {
+ integer greater_result;
+ ;
+ if (a > b) greater_result = a;
+ else greater_result = b;
+ return greater_result;
}
+void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4)
-getsettype* getsettype::init()
-{;
- numleft=0; /* initialise array pointer */
- return this;
-}
-
-void remember(fieldtype r)
-{;
- numleft += 1;
- gs[numleft]=r;
-}
-
-void recall()
-{void recall_result;
-;
- recall_result=gs[numleft];
- numleft -= 1;
-return recall_result;
-}
-
-void rwsp(byte t,byte r)
{
- const integer xs = 4; const integer ys = 2;
-;
- { triptype& with = tr[t]; switch (r) {
- case up: speed( 0,-ys); break; case down: speed( 0, ys); break; case left: speed(-xs, 0); break;
- case right: speed( xs, 0); break; case ul: speed(-xs,-ys); break; case ur: speed( xs,-ys); break;
- case dl: speed(-xs, ys); break; case dr: speed( xs, ys); break;
- }}
+ ;
+ if (dropin(x3, y3, x1, y1, x2, y2)
+ || dropin(x3, y4, x1, y1, x2, y2)
+ || dropin(x4, y3, x1, y1, x2, y2)
+ || dropin(x4, y4, x1, y1, x2, y2)) {
+ ; /* Overlaps */
+ mblit(lesser(x1, x3), lesser(y1, y3), greater(x2, x4), greater(y2, y4), 1, 0);
+ } else {
+ ; /* Doesn't overlap- copy both of them seperately */
+ mblit(x3, y3, x4, y4, 1, 0); /* backwards- why not...? */
+ mblit(x1, y1, x2, y2, 1, 0);
+ }
+}
+
+void loadtrip() {
+ byte gm;
+ ;
+ for (gm = 1; gm <= numtr; gm ++) tr[gm].original();
+ tr[1].init(0);
+}
+
+byte checkfeet(integer x1, integer x2, integer oy, integer y, byte yl) {
+ byte a, c;
+ integer fv, ff;
+ byte checkfeet_result;
+ ;
+ a = 0;
+ setactivepage(2);
+ if (x1 < 0) x1 = 0;
+ if (x2 > 639) x2 = 639;
+ if (oy < y)
+ for (fv = x1; fv <= x2; fv ++)
+ for (ff = oy + yl; ff <= y + yl; ff ++) {
+ ;
+ c = getpixel(fv, ff);
+ if (c > a) a = c;
+ }
+ else
+ for (fv = x1; fv <= x2; fv ++)
+ for (ff = y + yl; ff <= oy + yl; ff ++) {
+ ;
+ c = getpixel(fv, ff);
+ if (c > a) a = c;
+ }
+ checkfeet_result = a;
+ setactivepage(1);
+ return checkfeet_result;
}
-void apped(byte trn,byte np)
-{;
- {
- triptype& with = tr[trn];
- ; { void& with1 = peds[np]; appear(with.x-with.a.xl / 2,with.y-with.a.yl,dir);}
- rwsp(trn,tr[trn].face); }
+void touchcol(byte tc);
+static boolean bug;
+
+static void fr(byte a, byte b) {
+ ;
+ fliproom(a, b);
+ bug = false;
+}
+
+void touchcol(byte tc) {
+ ;
+ bug = true; /* j.i.c. */
+ switch (dna.room) {
+ case 1:
+ fr(2, 3);
+ break;
+ case 2: {
+ ; /* main corridor */
+ switch (tc) {
+ case 1:
+ fr(3, 1);
+ break; /* to the other corridor */
+ case 2:
+ fr(2, 1);
+ break; /* to this corridor! Fix this later... */
+ }
+ }
+ break;
+ case 3: {
+ ; /* turn corridor */
+ switch (tc) {
+ case 1:
+ fr(2, 1);
+ break; /* to the other corridor */
+ case 2:
+ fr(12, 1);
+ break; /* through Spludwick's door */
+ }
+ }
+ break;
+ case 12:
+ fr(3, 2);
+ break;
+ }
+ if (bug) {
+ ;
+ setactivepage(0);
+ display(string('\7') + "Unknown touchcolour (" + strf(tc) + ')' + " in " + strf(dna.room)
+ + '.');
+ setactivepage(1);
+ tr[1].bounce();
+ }
+}
+
+triptype *triptype::init(byte spritenum) {
+ integer gd, gm;
+ word s;
+ untyped_file f;
+ varying_string<2> xx;
+ byte sort, n;
+ word bigsize;
+ pointer p, q;
+ ;
+ str(spritenum, xx);
+ assign(f, string("c:\\avalot\\sprite") + xx + ".avd");
+ reset(f, 1);
+ seek(f, 59);
+ blockread(f, a, sizeof(a));
+ blockread(f, bigsize, 2);
+ setactivepage(3);
+ for (sort = 0; sort <= 1; sort ++) {
+ ;
+ mark(q);
+ getmem(p, bigsize);
+ blockread(f, p, bigsize);
+ off;
+ putimage(0, 0, p, 0);
+ release(q);
+ n = 1;
+ {
+ adxtype &with = a;
+ for (gm = 0; gm <= (with.num / with.seq) - 1; gm ++) /* directions */
+ for (gd = 0; gd <= with.seq - 1; gd ++) { /* steps */
+ ;
+ getmem(pic[n][sort], a.size); /* grab the memory */
+ getimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl,
+ (gm / 2) * (with.xl * 6) + gd * with.xl + with.xl - 1, (gm % 2)*with.yl + with.yl - 1,
+ pic[n][sort]); /* grab the pic */
+ n += 1;
+ }
+ }
+ on;
+ }
+ close(f);
+ setactivepage(0);
+
+ x = 0;
+ y = 0;
+ quick = true;
+ visible = false;
+ getmem(behind, a.size);
+ homing = false;
+ ix = 0;
+ iy = 0;
+ step = 0;
+ check_me = a.name == "Avalot";
+ return this;
+}
+
+void triptype::original() {
+ ;
+ quick = false;
+}
+
+void triptype::getback() {
+ ;
+ tax = x;
+ tay = y;
+ off; /*getimage(x,y,x+a.xl,y+a.yl,behind^);*/
+ mblit(x, y, x + a.xl, y + a.yl, 1, 3);
+ on;
+}
+
+void triptype::andexor() {
+ byte picnum; /* Picnum, Picnic, what ye heck */
+ ;
+ picnum = face * a.seq + step + 1;
+ off;
+ putimage(x, y, pic[picnum][0], andput);
+ putimage(x, y, pic[picnum][1], xorput);
+ on;
+}
+
+void triptype::turn(byte whichway) {
+ ;
+ face = whichway;
+}
+
+void triptype::appear(integer wx, integer wy, byte wf) {
+ ;
+ x = (wx / 8) * 8;
+ y = wy;
+ ox = wx;
+ oy = wy;
+ turn(wf);
+ visible = true;
+ ix = 0;
+ iy = 0;
+}
+
+void triptype::walk() {
+ byte tc;
+ ;
+ ox = x;
+ oy = y;
+ if ((ix == 0) && (iy == 0)) return;
+ if (homing) homestep();
+ x = x + ix;
+ y = y + iy;
+ if (check_me) {
+ ;
+ tc = checkfeet(x, x + a.xl, oy, y, a.yl);
+ {
+ void &with = magics[tc];
+ switch (op) {
+ case exclaim:
+ blip;
+ break;
+ case bounces:
+ bounce();
+ break;
+ case transport:
+ fliproom(hi(data), lo(data));
+ break;
+ }
+ }
+ }
+ /* if x<0 then x:=0; else if x+a.xl>640 then x:=640-a.xl;*/
+ if (y < 0) y = 0; /* else if y+a.yl>161 then y:=161-a.yl; */
+ step += 1;
+ if (step == a.seq) step = 0;
+ getback();
+}
+
+void triptype::bounce() {
+ ;
+ setactivepage(1);
+ putback();
+ x = ox;
+ y = oy;
+ stopwalk();
+ return;
+}
+
+void triptype::do_it() {
+ ;
+ if (((ix != 0) || (iy != 0)) & (~ ddm_o.menunow)) {
+ ;
+ off;
+ copier(ox, oy, ox + a.xl, oy + a.yl, x, y, x + a.xl, y + a.yl);
+ putback();
+ on;
+ }
+}
+
+void triptype::putback() {
+ ;
+ /* putimage(tax,tay,behind^,0);*/ mblit(tax, tay, tax + a.xl, tay + a.yl, 3, 1);
+}
+
+void triptype::walkto(integer xx, integer yy) {
+ ;
+ speed(xx - x, yy - y);
+ hx = xx;
+ hy = yy;
+ homing = true;
+}
+
+void triptype::stophoming() {
+ ;
+ homing = false;
+}
+
+void triptype::homestep() {
+ integer temp;
+ ;
+ if ((hx == x) && (hy == y)) {
+ ; /* touching the target */
+ homing = false;
+ return;
+ }
+ ix = 0;
+ iy = 0;
+ if (hy != y) {
+ ;
+ temp = hy - y;
+ if (temp > 4) iy = 4;
+ else if (temp < -4) iy = -4;
+ else iy = temp;
+ }
+ if (hx != x) {
+ ;
+ temp = hx - x;
+ if (temp > 4) ix = 4;
+ else if (temp < -4) ix = -4;
+ else ix = temp;
+ }
+}
+
+void triptype::speed(shortint xx, shortint yy) {
+ ;
+ ix = xx;
+ iy = yy;
+ if ((ix == 0) && (iy == 0)) return; /* no movement */
+ if (ix == 0) {
+ ; /* No horz movement */
+ if (iy < 0) turn(up);
+ else turn(down);
+ } else {
+ ;
+ if (ix < 0) turn(left);
+ else turn(right);
+ }
+}
+
+void triptype::stopwalk() {
+ ;
+ ix = 0;
+ iy = 0;
+ homing = false;
+}
+
+void triptype::chatter() {
+ ;
+ talkx = x + a.xl / 2;
+ talky = y;
+ talkf = a.fgc;
+ talkb = a.bgc;
+}
+
+
+getsettype *getsettype::init() {
+ ;
+ numleft = 0; /* initialise array pointer */
+ return this;
+}
+
+void remember(fieldtype r) {
+ ;
+ numleft += 1;
+ gs[numleft] = r;
+}
+
+void recall() {
+ void recall_result;
+ ;
+ recall_result = gs[numleft];
+ numleft -= 1;
+ return recall_result;
+}
+
+void rwsp(byte t, byte r) {
+ const integer xs = 4;
+ const integer ys = 2;
+ ;
+ {
+ triptype &with = tr[t];
+ switch (r) {
+ case up:
+ speed(0, -ys);
+ break;
+ case down:
+ speed(0, ys);
+ break;
+ case left:
+ speed(-xs, 0);
+ break;
+ case right:
+ speed(xs, 0);
+ break;
+ case ul:
+ speed(-xs, -ys);
+ break;
+ case ur:
+ speed(xs, -ys);
+ break;
+ case dl:
+ speed(-xs, ys);
+ break;
+ case dr:
+ speed(xs, ys);
+ break;
+ }
+ }
+}
+
+void apped(byte trn, byte np) {
+ ;
+ {
+ triptype &with = tr[trn];
+ ;
+ {
+ void &with1 = peds[np];
+ appear(with.x - with.a.xl / 2, with.y - with.a.yl, dir);
+ }
+ rwsp(trn, tr[trn].face);
+ }
}
void trippancy();
-static boolean allstill()
-{
- boolean xxx; byte fv;
-boolean allstill_result;
-;
- xxx=true;
- for( fv=1; fv <= numtr; fv ++)
- { triptype& with = tr[fv];
- if (with.quick && ((with.ix!=0) || (with.iy!=0))) xxx=false;}
- allstill_result=xxx;
-return allstill_result;
-}
-
-void trippancy()
-{
- byte fv;
-;
- if ((ddm_o.menunow) | ontoolbar | seescroll | allstill()) return;
- setactivepage(1);
- for( fv=1; fv <= numtr; fv ++)
- { triptype& with = tr[fv];
- if (with.quick)
- {;
- walk();
- if (with.visible && ((with.ix!=0) || (with.iy!=0))) andexor();
- do_it();
- }}
- setactivepage(0);
+static boolean allstill() {
+ boolean xxx;
+ byte fv;
+ boolean allstill_result;
+ ;
+ xxx = true;
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick && ((with.ix != 0) || (with.iy != 0))) xxx = false;
+ }
+ allstill_result = xxx;
+ return allstill_result;
+}
+
+void trippancy() {
+ byte fv;
+ ;
+ if ((ddm_o.menunow) | ontoolbar | seescroll | allstill()) return;
+ setactivepage(1);
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick) {
+ ;
+ walk();
+ if (with.visible && ((with.ix != 0) || (with.iy != 0))) andexor();
+ do_it();
+ }
+ }
+ setactivepage(0);
}
void tripkey(char dir);
-static void stopwalking()
-{;
- tr[1].stopwalk(); dna.rw=stopped;
-}
-
-void tripkey(char dir)
-{;
- { triptype& with = tr[1];
- {;
- switch (dir) {
- case 'H': if (rw!=up)
- {; rw=up; rwsp(1,rw); } else stopwalking();
- break;
- case 'P': if (rw!=down)
- {; rw=down; rwsp(1,rw); } else stopwalking();
- break;
- case 'K': if (rw!=left)
- {; rw=left; rwsp(1,rw); } else stopwalking();
- break;
- case 'M': if (rw!=right)
- {; rw=right; rwsp(1,rw); } else stopwalking();
- break;
- case 'I': if (rw!=ur)
- {; rw=ur; rwsp(1,rw); } else stopwalking();
- break;
- case 'Q': if (rw!=dr)
- {; rw=dr; rwsp(1,rw); } else stopwalking();
- break;
- case 'O': if (rw!=dl)
- {; rw=dl; rwsp(1,rw); } else stopwalking();
- break;
- case 'G': if (rw!=ul)
- {; rw=ul; rwsp(1,rw); } else stopwalking();
- break;
- case 'L': stopwalking(); break;
- }
- }}
-}
-
-void fliproom(byte room,byte ped)
-{;
- dusk; tr[1].putback(); dna.room=room; load(room); apped(1,ped);
- oldrw=dna.rw; dna.rw=tr[1].face; showrw; dawn;
-}
-
-boolean infield(byte x) /* returns True if you're within field "x" */
-{
- integer ux,uy;
-boolean infield_result;
-;
- {
- triptype& with = tr[1];
- ;
- ux=with.x;
- uy=with.y+with.a.yl;
- }
- {
- void& with = fields[x];
- ;
- infield_result=(ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2);
- }
-return infield_result;
-}
-
-boolean neardoor() /* returns True if you're near a door! */
-{
- integer ux,uy; byte fv; boolean nd;
-boolean neardoor_result;
-;
- if (numfields<9)
- {; /* there ARE no doors here! */
- neardoor_result=false;
- return neardoor_result;
- }
- {
- triptype& with = tr[1];
- ;
- ux=with.x;
- uy=with.y+with.a.yl;
- } nd=false;
- for( fv=9; fv <= numfields; fv ++)
- {
- void& with = fields[fv];
- ;
- if ((ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2)) nd=true;
- }
- neardoor_result=nd;
-return neardoor_result;
+static void stopwalking() {
+ ;
+ tr[1].stopwalk();
+ dna.rw = stopped;
+}
+
+void tripkey(char dir) {
+ ;
+ {
+ triptype &with = tr[1];
+ {
+ ;
+ switch (dir) {
+ case 'H':
+ if (rw != up) {
+ ;
+ rw = up;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'P':
+ if (rw != down) {
+ ;
+ rw = down;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'K':
+ if (rw != left) {
+ ;
+ rw = left;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'M':
+ if (rw != right) {
+ ;
+ rw = right;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'I':
+ if (rw != ur) {
+ ;
+ rw = ur;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'Q':
+ if (rw != dr) {
+ ;
+ rw = dr;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'O':
+ if (rw != dl) {
+ ;
+ rw = dl;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'G':
+ if (rw != ul) {
+ ;
+ rw = ul;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'L':
+ stopwalking();
+ break;
+ }
+ }
+ }
+}
+
+void fliproom(byte room, byte ped) {
+ ;
+ dusk;
+ tr[1].putback();
+ dna.room = room;
+ load(room);
+ apped(1, ped);
+ oldrw = dna.rw;
+ dna.rw = tr[1].face;
+ showrw;
+ dawn;
+}
+
+boolean infield(byte x) { /* returns True if you're within field "x" */
+ integer ux, uy;
+ boolean infield_result;
+ ;
+ {
+ triptype &with = tr[1];
+ ;
+ ux = with.x;
+ uy = with.y + with.a.yl;
+ }
+ {
+ void &with = fields[x];
+ ;
+ infield_result = (ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2);
+ }
+ return infield_result;
+}
+
+boolean neardoor() { /* returns True if you're near a door! */
+ integer ux, uy;
+ byte fv;
+ boolean nd;
+ boolean neardoor_result;
+ ;
+ if (numfields < 9) {
+ ; /* there ARE no doors here! */
+ neardoor_result = false;
+ return neardoor_result;
+ }
+ {
+ triptype &with = tr[1];
+ ;
+ ux = with.x;
+ uy = with.y + with.a.yl;
+ }
+ nd = false;
+ for (fv = 9; fv <= numfields; fv ++) {
+ void &with = fields[fv];
+ ;
+ if ((ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2)) nd = true;
+ }
+ neardoor_result = nd;
+ return neardoor_result;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/oldtrip.h b/engines/avalanche/oldtrip.h
index 70782ee7da..eb5e7d28dc 100644
--- a/engines/avalanche/oldtrip.h
+++ b/engines/avalanche/oldtrip.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -37,60 +37,63 @@ namespace Avalanche {
const integer maxgetset = 10;
struct adxtype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
class triptype {
public:
- adxtype a; /* vital statistics */
- byte face,step;
- integer x,y; /* current xy coords */
- integer ox,oy; /* last xy coords */
- integer tax,tay; /* "behind" taken at... */
- shortint ix,iy; /* amount to move sprite by, each step */
- matrix<1,24,0,1,pointer> pic; /* the pictures themselves */
- boolean quick,visible,homing,check_me;
- pointer behind; /* what's behind you */
- integer hx,hy; /* homing x & y coords */
-
- triptype* init(byte spritenum); /* loads & sets up the sprite */
- void original(); /* just sets Quick to false */
- void andexor(); /* drops sprite onto screen 1 */
- void turn(byte whichway); /* turns him round */
- void appear(integer wx,integer wy, byte wf); /* switches him on */
- void bounce(); /* bounces off walls. */
- void walk(); /* prepares for do_it, andexor, etc. */
- void do_it(); /* Actually copies the picture over */
- void getback(); /* gets background before sprite is drawn */
- void putback(); /* ...and wipes sprite from screen 1 */
- void walkto(integer xx,integer yy); /* home in on a point */
- void stophoming(); /* self-explanatory */
- void homestep(); /* calculates ix & iy for one homing step */
- void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */
- void stopwalk(); /* Stops the sprite from moving */
- void chatter(); /* Sets up talk vars */
+ adxtype a; /* vital statistics */
+ byte face, step;
+ integer x, y; /* current xy coords */
+ integer ox, oy; /* last xy coords */
+ integer tax, tay; /* "behind" taken at... */
+ shortint ix, iy; /* amount to move sprite by, each step */
+ matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */
+ boolean quick, visible, homing, check_me;
+ pointer behind; /* what's behind you */
+ integer hx, hy; /* homing x & y coords */
+
+ triptype *init(byte spritenum); /* loads & sets up the sprite */
+ void original(); /* just sets Quick to false */
+ void andexor(); /* drops sprite onto screen 1 */
+ void turn(byte whichway); /* turns him round */
+ void appear(integer wx, integer wy, byte wf); /* switches him on */
+ void bounce(); /* bounces off walls. */
+ void walk(); /* prepares for do_it, andexor, etc. */
+ void do_it(); /* Actually copies the picture over */
+ void getback(); /* gets background before sprite is drawn */
+ void putback(); /* ...and wipes sprite from screen 1 */
+ void walkto(integer xx, integer yy); /* home in on a point */
+ void stophoming(); /* self-explanatory */
+ void homestep(); /* calculates ix & iy for one homing step */
+ void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */
+ void stopwalk(); /* Stops the sprite from moving */
+ void chatter(); /* Sets up talk vars */
};
class getsettype {
public:
- array<1,maxgetset,fieldtype> gs;
- byte numleft;
+ array<1, maxgetset, fieldtype> gs;
+ byte numleft;
- getsettype* init();
- void remember(fieldtype r);
- void recall();
+ getsettype *init();
+ void remember(fieldtype r);
+ void recall();
};
const integer up = 0;
const integer right = 1;
const integer down = 2;
const integer left = 3;
-const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7;
+const integer ur = 4;
+const integer dr = 5;
+const integer dl = 6;
+const integer ul = 7;
const integer stopped = 8;
const integer numtr = 5; /* current max no. of sprites */
@@ -101,9 +104,9 @@ void loadtrip();
void tripkey(char dir);
-void apped(byte trn,byte np);
+void apped(byte trn, byte np);
-void fliproom(byte room,byte ped);
+void fliproom(byte room, byte ped);
boolean infield(byte x); /* returns True if you're within field "x" */
@@ -115,7 +118,7 @@ boolean neardoor(); /* returns True if you're near a door! */
#define EXTERN
#endif
-EXTERN array<1,numtr,triptype> tr;
+EXTERN array<1, numtr, triptype> tr;
#undef EXTERN
#define EXTERN extern
diff --git a/engines/avalanche/omtest.cpp b/engines/avalanche/omtest.cpp
index c102b3f0ec..9cab8796f5 100644
--- a/engines/avalanche/omtest.cpp
+++ b/engines/avalanche/omtest.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -36,170 +36,194 @@ namespace Avalanche {
varying_string<5> st;
byte fv;
-void graphics()
- {
- integer gd,gm; ; gd=3; gm=0; initgraph(gd,gm,""); }
+void graphics() {
+ integer gd, gm; ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+}
/*$F+ ... All ddm__procs and do__procs must be compiled in Far-Call state. */
-void ddm__file()
-{;
- {;
- start_afresh;
- opt("Load...",'L',"f3",true);
- opt("Save...",'S',"f2",false);
- opt("Save As...",'A',"ctrl-f2",false);
- opt("OS Shell...",'O',"f2",true);
- opt("Untrash screen",'U',"f11",true);
- display;
- }
+void ddm__file() {
+ ;
+ {
+ ;
+ start_afresh;
+ opt("Load...", 'L', "f3", true);
+ opt("Save...", 'S', "f2", false);
+ opt("Save As...", 'A', "ctrl-f2", false);
+ opt("OS Shell...", 'O', "f2", true);
+ opt("Untrash screen", 'U', "f11", true);
+ display;
+ }
}
-void ddm__heart()
-{;
- {;
- start_afresh;
- opt("About...",'A',"shift-f10",true);
- opt("Boss Key",'B',"alt-B",true);
- opt("Help...",'H',"f1",true);
- opt("Status screen",'S',"f12",true);
- opt("Quit",'Q',"f10",true);
- display;
- }
+void ddm__heart() {
+ ;
+ {
+ ;
+ start_afresh;
+ opt("About...", 'A', "shift-f10", true);
+ opt("Boss Key", 'B', "alt-B", true);
+ opt("Help...", 'H', "f1", true);
+ opt("Status screen", 'S', "f12", true);
+ opt("Quit", 'Q', "f10", true);
+ display;
+ }
}
-void ddm__action()
-{;
- {;
- start_afresh;
- opt("Get up",'G',"",true);
- opt("Open door",'O',"",true);
- opt("Pause game",'P',"",true);
- opt("Look around",'L',"",true);
- opt("Inventory",'I',"Tab",true);
- opt("Do the boogie",'b',"",true);
- display;
- }
+void ddm__action() {
+ ;
+ {
+ ;
+ start_afresh;
+ opt("Get up", 'G', "", true);
+ opt("Open door", 'O', "", true);
+ opt("Pause game", 'P', "", true);
+ opt("Look around", 'L', "", true);
+ opt("Inventory", 'I', "Tab", true);
+ opt("Do the boogie", 'b', "", true);
+ display;
+ }
}
-void ddm__objects()
-{;
- {;
- start_afresh;
- opt("Bell",'B',"",true);
- opt("Wine",'W',"",true);
- opt("Chastity Belt",'C',"",true);
- opt("Crossbow Bolt",'t',"",true);
- opt("Crossbow",'r',"",true);
- opt("Potion",'P',"",true);
- display;
- }
+void ddm__objects() {
+ ;
+ {
+ ;
+ start_afresh;
+ opt("Bell", 'B', "", true);
+ opt("Wine", 'W', "", true);
+ opt("Chastity Belt", 'C', "", true);
+ opt("Crossbow Bolt", 't', "", true);
+ opt("Crossbow", 'r', "", true);
+ opt("Potion", 'P', "", true);
+ display;
+ }
}
-void ddm__people()
-{;
- {;
- start_afresh;
- opt("Avalot",'A',"",true);
- opt("Spludwick",'S',"",true);
- opt("Arkata",'k',"",true);
- opt("Dogfood",'D',"",true);
- opt("Geida",'G',"",true);
- display;
- }
+void ddm__people() {
+ ;
+ {
+ ;
+ start_afresh;
+ opt("Avalot", 'A', "", true);
+ opt("Spludwick", 'S', "", true);
+ opt("Arkata", 'k', "", true);
+ opt("Dogfood", 'D', "", true);
+ opt("Geida", 'G', "", true);
+ display;
+ }
}
-void ddm__use()
-{;
- {;
- start_afresh;
- opt("Drink",'D',"",true);
- opt("Wear",'W',"",true);
- opt("Give to [du Lustie]",'G',"",true);
- display;
- }
+void ddm__use() {
+ ;
+ {
+ ;
+ start_afresh;
+ opt("Drink", 'D', "", true);
+ opt("Wear", 'W', "", true);
+ opt("Give to [du Lustie]", 'G', "", true);
+ display;
+ }
}
-void do__stuff()
-{
- varying_string<2> st;
-;
- str(o.choicenum+1,st);
- setfillstyle(1,6); setcolor(14);
- bar(0,177,640,200);
- outtextxy(320,177,string("You just chose: ")+st);
+void do__stuff() {
+ varying_string<2> st;
+ ;
+ str(o.choicenum + 1, st);
+ setfillstyle(1, 6);
+ setcolor(14);
+ bar(0, 177, 640, 200);
+ outtextxy(320, 177, string("You just chose: ") + st);
}
-void do__heart()
-{;
- switch (o.choicenum) {
- case 0: outtextxy(100,100,"A really funny game!"); break;
- case 1: outtextxy(100,120,"You ought to be working!"); break;
- case 2: outtextxy(100,140,"No help available, so THERE!"); break;
- case 3: outtextxy(100,160,"Everything's COOL and FROODY!"); break;
- case 4: exit(0); break;
- }
+void do__heart() {
+ ;
+ switch (o.choicenum) {
+ case 0:
+ outtextxy(100, 100, "A really funny game!");
+ break;
+ case 1:
+ outtextxy(100, 120, "You ought to be working!");
+ break;
+ case 2:
+ outtextxy(100, 140, "No help available, so THERE!");
+ break;
+ case 3:
+ outtextxy(100, 160, "Everything's COOL and FROODY!");
+ break;
+ case 4:
+ exit(0);
+ break;
+ }
}
/*$F- ... End of ddm__procs */
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- graphics();
- setfillstyle(6,6); bar(0,0,639,199);
- resetmouse;
- m.init; o.init;
- {;
- create('H','\3','#',ddm__heart(),do__heart());
- create('F',"File",'!',ddm__file(),do__stuff());
- create('A',"Action",'\36',ddm__action(),do__stuff());
- create('O',"Objects",'\30',ddm__objects(),do__stuff());
- create('P',"People",'\31',ddm__people(),do__stuff());
- create('W',"With",'\21',ddm__use(),do__stuff());
- update;
- }
- do {
- showmousecursor;
- do {
- getbuttonpressinfo(1);
- getbuttonreleaseinfo(1);
- getbuttonstatus;
- if (menunow) o.lightup;
- } while (!((buttonpresscount>0) || (buttonreleasecount>0) | keypressede));
- hidemousecursor;
- if (buttonpresscount>0)
- {;
- if (mousey>10)
- {;
- if (! ((o.firstlix) &
- ((mousex>=flx1) && (mousex<=flx2) &&
- (mousey>=12) && (mousey<=fly))))
- {; /* Clicked OUTSIDE the menu. */
- if (o.menunow) wipe;
- setcolor(2); for( fv=1; fv <= 17; fv ++) circle(mousex,mousey,fv*3);
- setcolor(0); for( fv=1; fv <= 17; fv ++) circle(mousex,mousey,fv*3);
- }
- } else
- {; /* Clicked on menu bar */
- m.getmenu(mousex);
- }
- } else
- {; /* NOT clicked button... */
- if (buttonreleasecount>0)
- {;
- if ((firstlix) &
- ((mousex>=flx1) && (mousex<=flx2) &&
- (mousey>=12) && (mousey<=fly)))
- select((mousey-14) / 10);
- } else
- {; /* NOT clicked or released button, so must be keypress */
- readkeye;
- parsekey(inchar,extd);
- }
- }
- } while (!false);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ graphics();
+ setfillstyle(6, 6);
+ bar(0, 0, 639, 199);
+ resetmouse;
+ m.init;
+ o.init;
+ {
+ ;
+ create('H', '\3', '#', ddm__heart(), do__heart());
+ create('F', "File", '!', ddm__file(), do__stuff());
+ create('A', "Action", '\36', ddm__action(), do__stuff());
+ create('O', "Objects", '\30', ddm__objects(), do__stuff());
+ create('P', "People", '\31', ddm__people(), do__stuff());
+ create('W', "With", '\21', ddm__use(), do__stuff());
+ update;
+ }
+ do {
+ showmousecursor;
+ do {
+ getbuttonpressinfo(1);
+ getbuttonreleaseinfo(1);
+ getbuttonstatus;
+ if (menunow) o.lightup;
+ } while (!((buttonpresscount > 0) || (buttonreleasecount > 0) | keypressede));
+ hidemousecursor;
+ if (buttonpresscount > 0) {
+ ;
+ if (mousey > 10) {
+ ;
+ if (!((o.firstlix) &
+ ((mousex >= flx1) && (mousex <= flx2) &&
+ (mousey >= 12) && (mousey <= fly)))) {
+ ; /* Clicked OUTSIDE the menu. */
+ if (o.menunow) wipe;
+ setcolor(2);
+ for (fv = 1; fv <= 17; fv ++) circle(mousex, mousey, fv * 3);
+ setcolor(0);
+ for (fv = 1; fv <= 17; fv ++) circle(mousex, mousey, fv * 3);
+ }
+ } else {
+ ; /* Clicked on menu bar */
+ m.getmenu(mousex);
+ }
+ } else {
+ ; /* NOT clicked button... */
+ if (buttonreleasecount > 0) {
+ ;
+ if ((firstlix) &
+ ((mousex >= flx1) && (mousex <= flx2) &&
+ (mousey >= 12) && (mousey <= fly)))
+ select((mousey - 14) / 10);
+ } else {
+ ; /* NOT clicked or released button, so must be keypress */
+ readkeye;
+ parsekey(inchar, extd);
+ }
+ }
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/oopmenu.cpp b/engines/avalanche/oopmenu.cpp
index 2d8ae42d84..94b3b0d343 100644
--- a/engines/avalanche/oopmenu.cpp
+++ b/engines/avalanche/oopmenu.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -60,263 +60,309 @@ const integer disabled = lightgray;
char r;
byte fv;
-void chalk(integer x,integer y, char t, string z)
-{
- byte p;
-;
- outtextxy(x,y,z);
- p=pos(t,z); if (p==0) return; p -= 1;
- outtextxy(x+p*8,y+1,"_");
+void chalk(integer x, integer y, char t, string z) {
+ byte p;
+ ;
+ outtextxy(x, y, z);
+ p = pos(t, z);
+ if (p == 0) return;
+ p -= 1;
+ outtextxy(x + p * 8, y + 1, "_");
}
-void say(integer x,integer y, char t, string z, byte f,byte b)
-{;
- settextjustify(0,2); setfillstyle(1,b); setcolor(f);
- bar(x-3,y-1,x+textwidth(z)+3,y+textheight(z)+1);
- chalk(x,y,t,z);
+void say(integer x, integer y, char t, string z, byte f, byte b) {
+ ;
+ settextjustify(0, 2);
+ setfillstyle(1, b);
+ setcolor(f);
+ bar(x - 3, y - 1, x + textwidth(z) + 3, y + textheight(z) + 1);
+ chalk(x, y, t, z);
}
-void mblit(integer x1,integer y1,integer x2,integer y2, byte f,byte t) /* NOT The Minstrel Blitter */
-{
- pointer p,q; word s;
-;
- mark(q);
- s=imagesize(x1,y1,x2,y2); getmem(p,s);
- setactivepage(f); getimage(x1,y1,x2,y2,p);
- setactivepage(t); putimage(x1,y1,p,0);
- setactivepage(0); release(q);
+void mblit(integer x1, integer y1, integer x2, integer y2, byte f, byte t) { /* NOT The Minstrel Blitter */
+ pointer p, q;
+ word s;
+ ;
+ mark(q);
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ setactivepage(f);
+ getimage(x1, y1, x2, y2, p);
+ setactivepage(t);
+ putimage(x1, y1, p, 0);
+ setactivepage(0);
+ release(q);
}
-void onemenu::start_afresh()
-{;
- number=0; width=0; firstlix=false; oldy=0; highlightnum=0;
+void onemenu::start_afresh() {
+ ;
+ number = 0;
+ width = 0;
+ firstlix = false;
+ oldy = 0;
+ highlightnum = 0;
}
-onemenu* onemenu::init()
-{;
- menunow=false;
- return this;
+onemenu *onemenu::init() {
+ ;
+ menunow = false;
+ return this;
}
-void onemenu::opt(string n, char tr, string key, boolean val)
-{
- integer l;
-;
- number += 1;
- l=textwidth(n+key)+30; if (width<l) width=l;
- {
- optiontype& with = oo[number];
- ;
- with.title=n;
- with.trigger=tr;
- with.shortcut=key;
- with.valid=val;
- }
+void onemenu::opt(string n, char tr, string key, boolean val) {
+ integer l;
+ ;
+ number += 1;
+ l = textwidth(n + key) + 30;
+ if (width < l) width = l;
+ {
+ optiontype &with = oo[number];
+ ;
+ with.title = n;
+ with.trigger = tr;
+ with.shortcut = key;
+ with.valid = val;
+ }
}
-void onemenu::displayopt(byte y,byte b,byte f,byte d)
-{;
- {
- optiontype& with = oo[y];
- ;
- if (with.valid) setcolor(f); else setcolor(d);
- if (b!=177)
- {;
- setfillstyle(1,b);
- bar(flx1,3+y*10,flx2,12+y*10);
- }
- settextjustify(2,2);
- if (with.shortcut>"") outtextxy(flx2,4+y*10,with.shortcut);
- settextjustify(0,2);
- chalk(left+3,4+y*10,with.trigger,with.title);
- }
+void onemenu::displayopt(byte y, byte b, byte f, byte d) {
+ ;
+ {
+ optiontype &with = oo[y];
+ ;
+ if (with.valid) setcolor(f);
+ else setcolor(d);
+ if (b != 177) {
+ ;
+ setfillstyle(1, b);
+ bar(flx1, 3 + y * 10, flx2, 12 + y * 10);
+ }
+ settextjustify(2, 2);
+ if (with.shortcut > "") outtextxy(flx2, 4 + y * 10, with.shortcut);
+ settextjustify(0, 2);
+ chalk(left + 3, 4 + y * 10, with.trigger, with.title);
+ }
}
-void onemenu::display()
-{
- byte y;
-;
- setfillstyle(1,menu_b); setcolor(menu_border);
- firstlix=true;
- flx1=left-2; flx2=left+width; fly=14+number*10;
- mblit(flx1-3,11,flx2+1,fly+1,0,1);
- menunow=true;
-
- bar(flx1,12,flx2,fly);
- rectangle(flx1-1,11,flx2+1,fly+1);
-
- setcolor(menu_f); settextjustify(0,2);
- displayopt(1,highlight_b,highlight_f,177);
- for( y=2; y <= number; y ++)
- { optiontype& with = oo[y]; displayopt(y,177,menu_f,disabled);}
+void onemenu::display() {
+ byte y;
+ ;
+ setfillstyle(1, menu_b);
+ setcolor(menu_border);
+ firstlix = true;
+ flx1 = left - 2;
+ flx2 = left + width;
+ fly = 14 + number * 10;
+ mblit(flx1 - 3, 11, flx2 + 1, fly + 1, 0, 1);
+ menunow = true;
+
+ bar(flx1, 12, flx2, fly);
+ rectangle(flx1 - 1, 11, flx2 + 1, fly + 1);
+
+ setcolor(menu_f);
+ settextjustify(0, 2);
+ displayopt(1, highlight_b, highlight_f, 177);
+ for (y = 2; y <= number; y ++) {
+ optiontype &with = oo[y];
+ displayopt(y, 177, menu_f, disabled);
+ }
}
-void onemenu::wipe()
-{;
- { headtype& with = m.ddms[o.menunum]; say(flx1+2,1,with.trigger,with.title,menu_f,menu_b);}
- mblit(flx1-3,11,flx2+1,fly+1,1,0);
- menunow=false; firstlix=false;
+void onemenu::wipe() {
+ ;
+ {
+ headtype &with = m.ddms[o.menunum];
+ say(flx1 + 2, 1, with.trigger, with.title, menu_f, menu_b);
+ }
+ mblit(flx1 - 3, 11, flx2 + 1, fly + 1, 1, 0);
+ menunow = false;
+ firstlix = false;
}
-void onemenu::movehighlight(shortint add)
-{
- shortint hn;
-;
- if (add!=0)
- {;
- hn=highlightnum+add;
- if ((hn<0) || (hn>=(unsigned char)number)) return;
- highlightnum=hn;
- }
- hidemousecursor;
- displayopt(oldy+1,menu_b,menu_f,disabled);
- displayopt(highlightnum+1,highlight_b,highlight_f,disabled);
- showmousecursor;
- oldy=highlightnum;
+void onemenu::movehighlight(shortint add) {
+ shortint hn;
+ ;
+ if (add != 0) {
+ ;
+ hn = highlightnum + add;
+ if ((hn < 0) || (hn >= (unsigned char)number)) return;
+ highlightnum = hn;
+ }
+ hidemousecursor;
+ displayopt(oldy + 1, menu_b, menu_f, disabled);
+ displayopt(highlightnum + 1, highlight_b, highlight_f, disabled);
+ showmousecursor;
+ oldy = highlightnum;
}
-void onemenu::lightup() /* This makes the menu highlight follow the mouse.*/
-{;
- if ((mousex<flx1) || (mousex>flx2)
- || (mousey<=12) || (mousey>fly-3)) return;
- highlightnum=(mousey-12) / 10;
- if (highlightnum==oldy) return;
- movehighlight(0);
+void onemenu::lightup() { /* This makes the menu highlight follow the mouse.*/
+ ;
+ if ((mousex < flx1) || (mousex > flx2)
+ || (mousey <= 12) || (mousey > fly - 3)) return;
+ highlightnum = (mousey - 12) / 10;
+ if (highlightnum == oldy) return;
+ movehighlight(0);
}
-void onemenu::select(byte n) /* Choose which one you want. */
-{;
- if (! oo[n+1].valid) return;
- choicenum=n;
- m.ddms[menunum].do_choose();
- wipe();
+void onemenu::select(byte n) { /* Choose which one you want. */
+ ;
+ if (! oo[n + 1].valid) return;
+ choicenum = n;
+ m.ddms[menunum].do_choose();
+ wipe();
}
-void onemenu::keystroke(char c)
-{
- byte fv;
-;
- c=upcase(c);
- for( fv=1; fv <= number; fv ++)
- if (upcase(oo[fv].trigger)==c) select(fv-1);
+void onemenu::keystroke(char c) {
+ byte fv;
+ ;
+ c = upcase(c);
+ for (fv = 1; fv <= number; fv ++)
+ if (upcase(oo[fv].trigger) == c) select(fv - 1);
}
-void bleep()
-{;
- sound(177); delay(7); nosound;
+void bleep() {
+ ;
+ sound(177);
+ delay(7);
+ nosound;
}
- headtype* headtype::init
- (char trig,char alttrig, string name, byte p, proc dw,proc dc)
- {;
- trigger=trig; alttrigger=alttrig; title=name;
- position=p; xpos=(position-1)*spacing+indent;
- xright=xpos+textwidth(name)+3;
- do_setup=dw; do_choose=dc;
- return this;
- }
-
- void headtype::display()
- {;
- say(xpos,1,trigger,title,menu_f,menu_b);
- }
-
- void headtype::highlight()
- {;
- say(xpos,1,trigger,title,highlight_f,highlight_b);
- {;
- o.left=xpos;
- o.menunow=true; o.menunum=position;
- }
- }
-
- boolean headtype::extdparse(char c)
- {boolean extdparse_result;
- ;
- if (c!=alttrigger) {; extdparse_result=true; return extdparse_result; }
- extdparse_result=false;
- return extdparse_result;
- }
-
- menuset* menuset::init()
- {;
- howmany=0;
- return this;
- }
-
- void menuset::create(char t, string n, char alttrig, proc dw,proc dc)
- {;
- howmany += 1;
- ddms[howmany].init(t,alttrig,n,howmany,dw,dc);
- }
-
- void menuset::update()
- {
- byte fv;
- ;
- setfillstyle(1,menu_b); bar(0,0,640,10);
- for( fv=1; fv <= howmany; fv ++) ddms[fv].display();
- }
-
- void menuset::extd(char c)
- {
- byte fv;
- ;
- fv=1;
- while ((fv<=howmany) && (ddms[fv].extdparse(c))) fv += 1;
- if (fv>howmany) return; getmenu(fv*spacing-indent);
- }
-
- void menuset::getmenu(integer x)
- {
- byte fv;
- ;
- fv=0;
- do {
- fv += 1;
- if ((x>ddms[fv].xpos-3) && (x<ddms[fv].xright))
- { headtype& with = ddms[fv];
- {;
- if (o.menunow)
- {;
- wipe(); /* get rid of menu */
- if (o.menunum==with.position) return; /* click on own highlight */
- }
- highlight(); do_setup();
- return;
- }}
- } while (!(fv>howmany));
- }
-
-void parsekey(char r,char re)
-{;
- switch (r) {
- case '\0': {;
- switch (re) {
- case 'K': {;
- wipe();
- m.getmenu((o.menunum-2)*spacing+indent);
- }
- break;
- case 'M': {;
- wipe();
- m.getmenu((o.menunum*spacing+indent));
- }
- break;
- case 'H': movehighlight(-1); break;
- case 'P': movehighlight(1); break;
- default: m.extd(re);
- }
- }
- break;
- case '\33': if (o.menunow) wipe(); break;
- case '\15': select(o.highlightnum); break;
- default:
- {;
- if (o.menunow) keystroke(r); else
- kbuffer=kbuffer+r+re;
- }
- }
+headtype *headtype::init
+(char trig, char alttrig, string name, byte p, proc dw, proc dc) {
+ ;
+ trigger = trig;
+ alttrigger = alttrig;
+ title = name;
+ position = p;
+ xpos = (position - 1) * spacing + indent;
+ xright = xpos + textwidth(name) + 3;
+ do_setup = dw;
+ do_choose = dc;
+ return this;
+}
+
+void headtype::display() {
+ ;
+ say(xpos, 1, trigger, title, menu_f, menu_b);
+}
+
+void headtype::highlight() {
+ ;
+ say(xpos, 1, trigger, title, highlight_f, highlight_b);
+ {
+ ;
+ o.left = xpos;
+ o.menunow = true;
+ o.menunum = position;
+ }
+}
+
+boolean headtype::extdparse(char c) {
+ boolean extdparse_result;
+ ;
+ if (c != alttrigger) {
+ ;
+ extdparse_result = true;
+ return extdparse_result;
+ }
+ extdparse_result = false;
+ return extdparse_result;
+}
+
+menuset *menuset::init() {
+ ;
+ howmany = 0;
+ return this;
+}
+
+void menuset::create(char t, string n, char alttrig, proc dw, proc dc) {
+ ;
+ howmany += 1;
+ ddms[howmany].init(t, alttrig, n, howmany, dw, dc);
+}
+
+void menuset::update() {
+ byte fv;
+ ;
+ setfillstyle(1, menu_b);
+ bar(0, 0, 640, 10);
+ for (fv = 1; fv <= howmany; fv ++) ddms[fv].display();
+}
+
+void menuset::extd(char c) {
+ byte fv;
+ ;
+ fv = 1;
+ while ((fv <= howmany) && (ddms[fv].extdparse(c))) fv += 1;
+ if (fv > howmany) return;
+ getmenu(fv * spacing - indent);
+}
+
+void menuset::getmenu(integer x) {
+ byte fv;
+ ;
+ fv = 0;
+ do {
+ fv += 1;
+ if ((x > ddms[fv].xpos - 3) && (x < ddms[fv].xright)) {
+ headtype &with = ddms[fv];
+ {
+ ;
+ if (o.menunow) {
+ ;
+ wipe(); /* get rid of menu */
+ if (o.menunum == with.position) return; /* click on own highlight */
+ }
+ highlight();
+ do_setup();
+ return;
+ }
+ }
+ } while (!(fv > howmany));
+}
+
+void parsekey(char r, char re) {
+ ;
+ switch (r) {
+ case '\0': {
+ ;
+ switch (re) {
+ case 'K': {
+ ;
+ wipe();
+ m.getmenu((o.menunum - 2)*spacing + indent);
+ }
+ break;
+ case 'M': {
+ ;
+ wipe();
+ m.getmenu((o.menunum * spacing + indent));
+ }
+ break;
+ case 'H':
+ movehighlight(-1);
+ break;
+ case 'P':
+ movehighlight(1);
+ break;
+ default:
+ m.extd(re);
+ }
+ }
+ break;
+ case '\33':
+ if (o.menunow) wipe();
+ break;
+ case '\15':
+ select(o.highlightnum);
+ break;
+ default: {
+ ;
+ if (o.menunow) keystroke(r);
+ else
+ kbuffer = kbuffer + r + re;
+ }
+ }
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/oopmenu.h b/engines/avalanche/oopmenu.h
index 32f171e824..b80b5ad31d 100644
--- a/engines/avalanche/oopmenu.h
+++ b/engines/avalanche/oopmenu.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,61 +34,61 @@ typedef void(*proc)();
class headtype {
public:
- varying_string<8> title;
- char trigger,alttrigger;
- byte position;
- integer xpos,xright;
- proc do_setup,do_choose;
-
- headtype* init
- (char trig,char alttrig, string name, byte p, proc dw,proc dc);
- void display();
- void highlight();
- boolean extdparse(char c);
+ varying_string<8> title;
+ char trigger, alttrigger;
+ byte position;
+ integer xpos, xright;
+ proc do_setup, do_choose;
+
+ headtype *init
+ (char trig, char alttrig, string name, byte p, proc dw, proc dc);
+ void display();
+ void highlight();
+ boolean extdparse(char c);
};
struct optiontype {
- string title;
- char trigger;
- varying_string<9> shortcut;
- boolean valid;
+ string title;
+ char trigger;
+ varying_string<9> shortcut;
+ boolean valid;
};
class onemenu {
public:
- array<1,12,optiontype> oo;
- byte number;
- integer width,left;
- boolean firstlix;
- integer flx1,flx2,fly;
- byte oldy; /* used by Lightup */
- boolean menunow; /* Is there a menu now? */
- byte menunum; /* And if so, which is it? */
- byte choicenum; /* Your choice? */
- byte highlightnum;
-
- void start_afresh();
- void opt(string n, char tr, string key, boolean val);
- void display();
- void wipe();
- void lightup();
- void displayopt(byte y,byte b,byte f,byte d);
- void movehighlight(shortint add);
- void select(byte n);
- void keystroke(char c);
- onemenu* init();
+ array<1, 12, optiontype> oo;
+ byte number;
+ integer width, left;
+ boolean firstlix;
+ integer flx1, flx2, fly;
+ byte oldy; /* used by Lightup */
+ boolean menunow; /* Is there a menu now? */
+ byte menunum; /* And if so, which is it? */
+ byte choicenum; /* Your choice? */
+ byte highlightnum;
+
+ void start_afresh();
+ void opt(string n, char tr, string key, boolean val);
+ void display();
+ void wipe();
+ void lightup();
+ void displayopt(byte y, byte b, byte f, byte d);
+ void movehighlight(shortint add);
+ void select(byte n);
+ void keystroke(char c);
+ onemenu *init();
};
class menuset {
public:
- array<1,8,headtype> ddms;
- byte howmany;
-
- menuset* init();
- void create(char t, string n, char alttrig, proc dw,proc dc);
- void update();
- void extd(char c);
- void getmenu(integer x);
+ array<1, 8, headtype> ddms;
+ byte howmany;
+
+ menuset *init();
+ void create(char t, string n, char alttrig, proc dw, proc dc);
+ void update();
+ void extd(char c);
+ void getmenu(integer x);
};
@@ -105,7 +105,7 @@ EXTERN string kbuffer;
#define EXTERN extern
- void parsekey(char r,char re);
+void parsekey(char r, char re);
} // End of namespace Avalanche.
diff --git a/engines/avalanche/overlap.cpp b/engines/avalanche/overlap.cpp
index 14d5dc8a17..3c72e1178b 100644
--- a/engines/avalanche/overlap.cpp
+++ b/engines/avalanche/overlap.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,52 +30,62 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
-void flash(integer x1,integer y1,integer x2,integer y2)
-{;
- setcolor(14); rectangle(x1,y1,x2,y2);
- sound(x1+x2); delay(100); nosound; delay(500);
- setcolor( 9); rectangle(x1,y1,x2,y2); delay(500);
+void flash(integer x1, integer y1, integer x2, integer y2) {
+ ;
+ setcolor(14);
+ rectangle(x1, y1, x2, y2);
+ sound(x1 + x2);
+ delay(100);
+ nosound;
+ delay(500);
+ setcolor(9);
+ rectangle(x1, y1, x2, y2);
+ delay(500);
}
-boolean dropin(integer xc,integer yc,integer x1,integer y1,integer x2,integer y2)
+boolean dropin(integer xc, integer yc, integer x1, integer y1, integer x2, integer y2)
/* Dropin returns True if the point xc,yc falls within the 1-2 rectangle. */
-{boolean dropin_result;
-;
- dropin_result=((xc>=x1) && (xc<=x2) && (yc>=y1) && (yc<=y2));
-return dropin_result;
+{
+ boolean dropin_result;
+ ;
+ dropin_result = ((xc >= x1) && (xc <= x2) && (yc >= y1) && (yc <= y2));
+ return dropin_result;
}
-void test(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4)
-{;
- cleardevice();
- rectangle(x1,y1,x2,y2);
- rectangle(x3,y3,x4,y4);
- flash(x1,y1,x2,y2);
- flash(x3,y3,x4,y4);
+void test(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4) {
+ ;
+ cleardevice();
+ rectangle(x1, y1, x2, y2);
+ rectangle(x3, y3, x4, y4);
+ flash(x1, y1, x2, y2);
+ flash(x3, y3, x4, y4);
- if (dropin(x3,y3,x1,y1,x2,y2)
- || dropin(x3,y4,x1,y1,x2,y2)
- || dropin(x4,y3,x1,y1,x2,y2)
- || dropin(x4,y4,x1,y1,x2,y2))
- {; /* Overlaps */
- flash(x1,y1,x4,y4);
- } else
- {; /* Doesn't overlap- flash 'em both again */
- flash(x3,y3,x4,y4); /* backwards- why not...? */
- flash(x1,y1,x2,y2);
- }
+ if (dropin(x3, y3, x1, y1, x2, y2)
+ || dropin(x3, y4, x1, y1, x2, y2)
+ || dropin(x4, y3, x1, y1, x2, y2)
+ || dropin(x4, y4, x1, y1, x2, y2)) {
+ ; /* Overlaps */
+ flash(x1, y1, x4, y4);
+ } else {
+ ; /* Doesn't overlap- flash 'em both again */
+ flash(x3, y3, x4, y4); /* backwards- why not...? */
+ flash(x1, y1, x2, y2);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=1; initgraph(gd,gm,""); setcolor(9);
- test(100,50,200,100,400,200,600,250);
- test(100,50,200,100,120, 70,220,120);
- test(100,50,200,100,150, 50,250,100);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ setcolor(9);
+ test(100, 50, 200, 100, 400, 200, 600, 250);
+ test(100, 50, 200, 100, 120, 70, 220, 120);
+ test(100, 50, 200, 100, 150, 50, 250, 100);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/overscro.cpp b/engines/avalanche/overscro.cpp
index 9617e2efb4..58ab270419 100644
--- a/engines/avalanche/overscro.cpp
+++ b/engines/avalanche/overscro.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,53 +29,64 @@
namespace Avalanche {
-integer gd,gm;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- setactivepage(1); setcolor(9);
- settextstyle(0,0,2);
- outtextxy(0, 0,"This is a test to see whether you can");
- outtextxy(0, 20,"scroll text over the top of a picture.");
- outtextxy(0, 40,"I was wondering whether it would work.");
- outtextxy(0, 60,"Well, does it, or not?");
- outtextxy(0, 80,"If so, it could be useful for the");
- outtextxy(0,100,"Avalot title sequence.");
- outtextxy(0,120,"Good, isn't it?");
- outtextxy(0,140,"The quick brown fox jumps over the");
- outtextxy(0,160,"lazy dog...");
- outtextxy(0,180,"This is the last line...");
- setactivepage(0);
- gm=0;
- for( gd=0; gd <= 640; gd ++)
- {;
- gm += 1; if (gm==8) gm=1; setcolor(gm);
- line(gd,0,gm,350);
- line(640-gd,0,640-gm,350);
- }
-/* for gd:=1 to 15 do
- begin;
- setfillstyle(1,gd); bar(gd*20,10,gd*20+19,100);
- end;*/
-/* setfillstyle(1,6); bar(100,100,500,100);*/ gd=getpixel(0,0);
- for( gm=8; gm <= 15; gm ++) setpalette(gm,egayellow);
- for( gd=0; gd <= 199; gd ++)
- {;
- port[0x3c4]=2; port[0x3cf]=4; port[0x3c5]=8; port[0x3cf]=0;
- move(mem[0xa000*80],mem[0xa000*0],16000);
- port[0x3c4]=2; port[0x3cf]=4; port[0x3c5]=8; port[0x3cf]=0;
- move(mem[0xa000*gd*80+16384],mem[0xa000*15920],80);
- }
-/* for gd:=0 to 199 do
- begin;
- port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0;
- move(mem[$A000*160],mem[$A000*0],15920);
- port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0;
- move(mem[$A000*gd*80+16384],mem[$A000*15920],80);
- move(mem[$A000*15920],mem[$A000*15840],80);
- end;*/
-return EXIT_SUCCESS;
+integer gd, gm;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ setactivepage(1);
+ setcolor(9);
+ settextstyle(0, 0, 2);
+ outtextxy(0, 0, "This is a test to see whether you can");
+ outtextxy(0, 20, "scroll text over the top of a picture.");
+ outtextxy(0, 40, "I was wondering whether it would work.");
+ outtextxy(0, 60, "Well, does it, or not?");
+ outtextxy(0, 80, "If so, it could be useful for the");
+ outtextxy(0, 100, "Avalot title sequence.");
+ outtextxy(0, 120, "Good, isn't it?");
+ outtextxy(0, 140, "The quick brown fox jumps over the");
+ outtextxy(0, 160, "lazy dog...");
+ outtextxy(0, 180, "This is the last line...");
+ setactivepage(0);
+ gm = 0;
+ for (gd = 0; gd <= 640; gd ++) {
+ ;
+ gm += 1;
+ if (gm == 8) gm = 1;
+ setcolor(gm);
+ line(gd, 0, gm, 350);
+ line(640 - gd, 0, 640 - gm, 350);
+ }
+ /* for gd:=1 to 15 do
+ begin;
+ setfillstyle(1,gd); bar(gd*20,10,gd*20+19,100);
+ end;*/
+ /* setfillstyle(1,6); bar(100,100,500,100);*/ gd = getpixel(0, 0);
+ for (gm = 8; gm <= 15; gm ++) setpalette(gm, egayellow);
+ for (gd = 0; gd <= 199; gd ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3cf] = 4;
+ port[0x3c5] = 8;
+ port[0x3cf] = 0;
+ move(mem[0xa000 * 80], mem[0xa000 * 0], 16000);
+ port[0x3c4] = 2;
+ port[0x3cf] = 4;
+ port[0x3c5] = 8;
+ port[0x3cf] = 0;
+ move(mem[0xa000 * gd * 80 + 16384], mem[0xa000 * 15920], 80);
+ }
+ /* for gd:=0 to 199 do
+ begin;
+ port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0;
+ move(mem[$A000*160],mem[$A000*0],15920);
+ port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0;
+ move(mem[$A000*gd*80+16384],mem[$A000*15920],80);
+ move(mem[$A000*15920],mem[$A000*15840],80);
+ end;*/
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/particle.cpp b/engines/avalanche/particle.cpp
index bcccdb9bb8..b6b830542b 100644
--- a/engines/avalanche/particle.cpp
+++ b/engines/avalanche/particle.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,17 +32,17 @@
namespace Avalanche {
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
struct markertype {
- word length;
- longint offset;
- byte checksum;
+ word length;
+ longint offset;
+ byte checksum;
};
string rawname;
-array<0,1999,char> buffer,was;
-word bufpos,bufsize;
+array<0, 1999, char> buffer, was;
+word bufpos, bufsize;
fonttype font;
integer cpos;
char r;
@@ -50,212 +50,299 @@ boolean ok;
const char marker = '\33';
-void cursor()
-{
- byte fv;
-;
- for( fv=12; fv <= 15; fv ++)
- mem[0xa000*cpos+fv*80]=~(mem[0xa000*cpos+fv*80]);
+void cursor() {
+ byte fv;
+ ;
+ for (fv = 12; fv <= 15; fv ++)
+ mem[0xa000 * cpos + fv * 80] = ~(mem[0xa000 * cpos + fv * 80]);
}
-void xy()
-{;
- cpos=(bufpos / 80)*1280+(bufpos % 80);
+void xy() {
+ ;
+ cpos = (bufpos / 80) * 1280 + (bufpos % 80);
}
-void show()
-{
- word fv,orig,y;
-;
- for( fv=0; fv <= 1999; fv ++)
- if (buffer[fv]!=was[fv])
- {;
- orig=(fv / 80)*1280+(fv % 80);
- for( y=0; y <= 15; y ++)
- mem[0xa000*orig+y*80]=(byte)(font[buffer[fv]][y]);
- }
- xy();
- move(buffer,was,sizeof(buffer));
+void show() {
+ word fv, orig, y;
+ ;
+ for (fv = 0; fv <= 1999; fv ++)
+ if (buffer[fv] != was[fv]) {
+ ;
+ orig = (fv / 80) * 1280 + (fv % 80);
+ for (y = 0; y <= 15; y ++)
+ mem[0xa000 * orig + y * 80] = (byte)(font[buffer[fv]][y]);
+ }
+ xy();
+ move(buffer, was, sizeof(buffer));
}
-void sizeup()
-{;
- do {
- switch (buffer[bufsize]) {
- case marker: return; break; /* we've found it OK! */
- case '\0': bufsize -= 1; break;
- default: bufsize += 1;
- }
- } while (!false);
+void sizeup() {
+ ;
+ do {
+ switch (buffer[bufsize]) {
+ case marker:
+ return;
+ break; /* we've found it OK! */
+ case '\0':
+ bufsize -= 1;
+ break;
+ default:
+ bufsize += 1;
+ }
+ } while (!false);
}
-void graphics()
-{
- integer gd,gm;
- file<fonttype> fontfile;
-;
- gd=3; gm=1; initgraph(gd,gm,"c:\\bp\\bgi");
- assign(fontfile,"c:\\thomas\\lanche.fnt");
- reset(fontfile); fontfile >> font; close(fontfile);
+void graphics() {
+ integer gd, gm;
+ file<fonttype> fontfile;
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ assign(fontfile, "c:\\thomas\\lanche.fnt");
+ reset(fontfile);
+ fontfile >> font;
+ close(fontfile);
}
void helpscreen();
-static byte l,fv;
+static byte l, fv;
-static void addon(char b, string st)
-{;
- buffer[3+80*l]=b; b -= 64;
- buffer[5+80*l]=b;
- move(st[1],buffer[7+80*l],length(st));
- l += 1;
+static void addon(char b, string st) {
+ ;
+ buffer[3 + 80 * l] = b;
+ b -= 64;
+ buffer[5 + 80 * l] = b;
+ move(st[1], buffer[7 + 80 * l], length(st));
+ l += 1;
}
-void helpscreen()
-{
- array<0,1999,char> temp;
- char r;
-;
- l=0; move(buffer,temp,2000); fillchar(buffer,sizeof(buffer),'\0');
- addon('B',"Bubble");
- addon('C',"Centre text");
- addon('D',"Don't add \20 (at end)");
- addon('F',"Italic Font");
- addon('G',"Bell");
- addon('H',"Not allocated (=backspace)");
- addon('I',"Not allocated (=tab)");
- addon('L',"Left-justify text");
- addon('K',"Keyboard input");
- addon('M',"Carriage return (same as \r key)");
- addon('P',"Scroll (Paragraph break)");
- addon('Q',"Yes/no scroll (question)");
- addon('R',"Roman font");
- addon('S',"Fix to sprite");
- addon('U',"Money (in œsd format)");
- addon('V',"View icon (number from ^S)");
- show(); do { r=readkey(); } while (!(! keypressed()));
- cleardevice();
- fillchar(was,sizeof(was),'\0'); move(temp,buffer,2000); show();
+void helpscreen() {
+ array<0, 1999, char> temp;
+ char r;
+ ;
+ l = 0;
+ move(buffer, temp, 2000);
+ fillchar(buffer, sizeof(buffer), '\0');
+ addon('B', "Bubble");
+ addon('C', "Centre text");
+ addon('D', "Don't add \20 (at end)");
+ addon('F', "Italic Font");
+ addon('G', "Bell");
+ addon('H', "Not allocated (=backspace)");
+ addon('I', "Not allocated (=tab)");
+ addon('L', "Left-justify text");
+ addon('K', "Keyboard input");
+ addon('M', "Carriage return (same as \r key)");
+ addon('P', "Scroll (Paragraph break)");
+ addon('Q', "Yes/no scroll (question)");
+ addon('R', "Roman font");
+ addon('S', "Fix to sprite");
+ addon('U', "Money (in œsd format)");
+ addon('V', "View icon (number from ^S)");
+ show();
+ do {
+ r = readkey();
+ } while (!(! keypressed()));
+ cleardevice();
+ fillchar(was, sizeof(was), '\0');
+ move(temp, buffer, 2000);
+ show();
}
void edit_it();
-static void legit(char r)
-{; /* it's a legit keystroke */
- move(buffer[bufpos],buffer[bufpos+1],1999-bufpos);
- buffer[bufpos]=r;
- bufpos += 1; show();
+static void legit(char r) {
+ ; /* it's a legit keystroke */
+ move(buffer[bufpos], buffer[bufpos + 1], 1999 - bufpos);
+ buffer[bufpos] = r;
+ bufpos += 1;
+ show();
}
-void edit_it()
-{
- byte fv;
-;
- bufpos=0;
- fillchar(was,sizeof(was),'\0'); show();
- do {
- cursor(); r=readkey(); cursor();
- switch (r) {
- case '\0': switch (readkey()) { /* extd keystrokes */
- case 'K': if (bufpos>0) {; bufpos -= 1; xy(); } break; /* Left */
- case 'M': if (bufpos<bufsize) {; bufpos += 1; xy(); } break; /* Right */
- case 'H': if (bufpos>80) {; bufpos -= 80; xy(); } break; /* Up */
- case 'P': if (bufpos<(cardinal)bufsize-79) {; bufpos += 80; xy(); } break; /* Down */
- case 's': if (bufpos>10) {; bufpos -= 10; xy(); } break;
- case 't': if (bufpos<(cardinal)bufsize-10) {; bufpos += 10; xy(); } break;
- case 'G': {; bufpos=0; xy(); } break; /* Home */
- case 'O': {; bufpos=bufsize; xy(); } break; /* End */
- case 'S': if (bufpos<bufsize) {; /* Del */
- move(buffer[bufpos+1],buffer[bufpos],1999-bufpos); show();
- }
- break;
- case ';': helpscreen(); break;
- case 'A': legit('\357'); break; /* copyright symbol */
- case 'B': legit('\221'); break; /* uppercase AE */
- case 'C': legit('\222'); break; /* lowercase AE */
- }
- break;
- case '\10': if (bufpos>0) {; /* backspace */
- bufpos -= 1;
- move(buffer[bufpos+1],buffer[bufpos],1999-bufpos);
- show();
- }
- break;
- case '\33': {;
- restorecrtmode();
- return;
- }
- break; /* end of editing */
- default: legit(r);
- }
- sizeup();
- } while (!false);
+void edit_it() {
+ byte fv;
+ ;
+ bufpos = 0;
+ fillchar(was, sizeof(was), '\0');
+ show();
+ do {
+ cursor();
+ r = readkey();
+ cursor();
+ switch (r) {
+ case '\0':
+ switch (readkey()) { /* extd keystrokes */
+ case 'K':
+ if (bufpos > 0) {
+ ;
+ bufpos -= 1;
+ xy();
+ }
+ break; /* Left */
+ case 'M':
+ if (bufpos < bufsize) {
+ ;
+ bufpos += 1;
+ xy();
+ }
+ break; /* Right */
+ case 'H':
+ if (bufpos > 80) {
+ ;
+ bufpos -= 80;
+ xy();
+ }
+ break; /* Up */
+ case 'P':
+ if (bufpos < (cardinal)bufsize - 79) {
+ ;
+ bufpos += 80;
+ xy();
+ }
+ break; /* Down */
+ case 's':
+ if (bufpos > 10) {
+ ;
+ bufpos -= 10;
+ xy();
+ }
+ break;
+ case 't':
+ if (bufpos < (cardinal)bufsize - 10) {
+ ;
+ bufpos += 10;
+ xy();
+ }
+ break;
+ case 'G': {
+ ;
+ bufpos = 0;
+ xy();
+ }
+ break; /* Home */
+ case 'O': {
+ ;
+ bufpos = bufsize;
+ xy();
+ }
+ break; /* End */
+ case 'S':
+ if (bufpos < bufsize) {
+ ; /* Del */
+ move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos);
+ show();
+ }
+ break;
+ case ';':
+ helpscreen();
+ break;
+ case 'A':
+ legit('\357');
+ break; /* copyright symbol */
+ case 'B':
+ legit('\221');
+ break; /* uppercase AE */
+ case 'C':
+ legit('\222');
+ break; /* lowercase AE */
+ }
+ break;
+ case '\10':
+ if (bufpos > 0) {
+ ; /* backspace */
+ bufpos -= 1;
+ move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos);
+ show();
+ }
+ break;
+ case '\33': {
+ ;
+ restorecrtmode();
+ return;
+ }
+ break; /* end of editing */
+ default:
+ legit(r);
+ }
+ sizeup();
+ } while (!false);
}
-void loadit()
-{
- untyped_file f;
-;
- if (pos(".",rawname)==0) rawname=rawname+".raw";
- fillchar(buffer,sizeof(buffer),'\0');
- /*$I-*/
- assign(f,rawname);
- reset(f,1);
- if (ioresult!=0)
- {;
- output << string('\7')+"New file!"+'\7' << NL;
- buffer[0]=marker;
- return;
- }
- bufsize=filesize(f);
- blockread(f,buffer,bufsize);
- close(f);
- while (buffer[bufsize]=='\0') bufsize -= 1;
- if (buffer[bufsize]!=marker)
- {; /* add on a marker */
- bufsize += 1;
- buffer[bufsize]=marker;
- }
+void loadit() {
+ untyped_file f;
+ ;
+ if (pos(".", rawname) == 0) rawname = rawname + ".raw";
+ fillchar(buffer, sizeof(buffer), '\0');
+ /*$I-*/
+ assign(f, rawname);
+ reset(f, 1);
+ if (ioresult != 0) {
+ ;
+ output << string('\7') + "New file!" + '\7' << NL;
+ buffer[0] = marker;
+ return;
+ }
+ bufsize = filesize(f);
+ blockread(f, buffer, bufsize);
+ close(f);
+ while (buffer[bufsize] == '\0') bufsize -= 1;
+ if (buffer[bufsize] != marker) {
+ ; /* add on a marker */
+ bufsize += 1;
+ buffer[bufsize] = marker;
+ }
}
-void saveit()
-{
- untyped_file f;
-;
- output << "Saving " << rawname << ", " << bufsize << " bytes..." << NL;
- assign(f,rawname); rewrite(f,1);
- blockwrite(f,buffer,bufsize);
- close(f);
+void saveit() {
+ untyped_file f;
+ ;
+ output << "Saving " << rawname << ", " << bufsize << " bytes..." << NL;
+ assign(f, rawname);
+ rewrite(f, 1);
+ blockwrite(f, buffer, bufsize);
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- output << "Filename of .RAW file?"; input >> rawname >> NL;
- loadit();
- ok=false;
- do {
- graphics();
- edit_it();
- output << "Now what?" << NL;
- output << NL;
- output << " Filename: " << rawname << NL;
- output << " Size of text: " << bufsize << NL;
- output << " Cursor position: " << bufpos << NL;
- output << NL;
- output << " C) Cancel this & continue edit" << NL;
- output << " S) Save under current name" << NL;
- output << " A) Save under a different name" << NL;
- output << " X) Exit & lose all changes." << NL;
- output << NL;
- output << "Pick one!" << NL;
- do { r=upcase(readkey()); } while (!(set::of('C','S','A','X', eos).has(r)));
- switch (r) {
- case 'X': ok=true; break;
- case 'S': {; saveit(); exit(0); } break;
- }
- } while (!ok);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ output << "Filename of .RAW file?";
+ input >> rawname >> NL;
+ loadit();
+ ok = false;
+ do {
+ graphics();
+ edit_it();
+ output << "Now what?" << NL;
+ output << NL;
+ output << " Filename: " << rawname << NL;
+ output << " Size of text: " << bufsize << NL;
+ output << " Cursor position: " << bufpos << NL;
+ output << NL;
+ output << " C) Cancel this & continue edit" << NL;
+ output << " S) Save under current name" << NL;
+ output << " A) Save under a different name" << NL;
+ output << " X) Exit & lose all changes." << NL;
+ output << NL;
+ output << "Pick one!" << NL;
+ do {
+ r = upcase(readkey());
+ } while (!(set::of('C', 'S', 'A', 'X', eos).has(r)));
+ switch (r) {
+ case 'X':
+ ok = true;
+ break;
+ case 'S': {
+ ;
+ saveit();
+ exit(0);
+ }
+ break;
+ }
+ } while (!ok);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/pictemp.cpp b/engines/avalanche/pictemp.cpp
index cbc8474828..261e59297f 100644
--- a/engines/avalanche/pictemp.cpp
+++ b/engines/avalanche/pictemp.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,62 +31,74 @@ namespace Avalanche {
const integer picsize = 966;
-integer gd,gm;
+integer gd, gm;
untyped_file f;
pointer p;
-void save()
-{
- varying_string<40> adf; untyped_file f; byte z; array<1,2,pointer> c;
-string nam,screenname;
- const string header =
- string("This is a file from an Avvy game, and its contents are subject to ")+
- "copyright."+'\15'+'\12'+'\15'+'\12'+"Have fun!"+'\32';
- byte a /*absolute $A000:1200i*/;
- byte bit;
-;
- nam="d:thingtmp.avd";
- screenname="Temp.";
- assign(f,nam);
-
- assign(f,nam); rewrite(f,1); blockwrite(f,header[1],146);
- blockwrite(f,screenname,31);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,a,12080);
- }
- close(f);
+void save() {
+ varying_string<40> adf;
+ untyped_file f;
+ byte z;
+ array<1, 2, pointer> c;
+ string nam, screenname;
+ const string header =
+ string("This is a file from an Avvy game, and its contents are subject to ") +
+ "copyright." + '\15' + '\12' + '\15' + '\12' + "Have fun!" + '\32';
+ byte a /*absolute $A000:1200i*/;
+ byte bit;
+ ;
+ nam = "d:thingtmp.avd";
+ screenname = "Temp.";
+ assign(f, nam);
+
+ assign(f, nam);
+ rewrite(f, 1);
+ blockwrite(f, header[1], 146);
+ blockwrite(f, screenname, 31);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, a, 12080);
+ }
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
-
- assign(f,"thinks.avd");
- getmem(p,picsize);
- reset(f,1);
- seek(f,65);
- gd=10; gm=20;
-
- while (gm<120)
- {;
- if (! eof(f))
- blockread(f,p,picsize);
- putimage(gd,gm,p,0);
- gd += 70;
-
- if (gd==640)
- {;
- gd=10; gm += 40;
- }
-
- }
-
- close(f); freemem(p,picsize);
- save();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+
+ assign(f, "thinks.avd");
+ getmem(p, picsize);
+ reset(f, 1);
+ seek(f, 65);
+ gd = 10;
+ gm = 20;
+
+ while (gm < 120) {
+ ;
+ if (! eof(f))
+ blockread(f, p, picsize);
+ putimage(gd, gm, p, 0);
+ gd += 70;
+
+ if (gd == 640) {
+ ;
+ gd = 10;
+ gm += 40;
+ }
+
+ }
+
+ close(f);
+ freemem(p, picsize);
+ save();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/pictemp2.cpp b/engines/avalanche/pictemp2.cpp
index f0ebccde03..8d5cdfe4c2 100644
--- a/engines/avalanche/pictemp2.cpp
+++ b/engines/avalanche/pictemp2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,60 +33,70 @@ namespace Avalanche {
const integer picsize = 966;
const integer number_of_objects = 17;
-const array<1,65,char> thinks_header =
- string("This is an Avalot file, which is subject to copyright. Have fun.")+'\32';
+const array<1, 65, char> thinks_header =
+ string("This is an Avalot file, which is subject to copyright. Have fun.") + '\32';
-integer gd,gm;
+integer gd, gm;
untyped_file f;
pointer p;
byte noo;
-void load()
-{
- byte a0 /*absolute $A000:1200*/;
- byte bit;
- untyped_file f;
-;
- assign(f,"d:thingtmp.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f); bit=getpixel(0,0);
+void load() {
+ byte a0 /*absolute $A000:1200*/;
+ byte bit;
+ untyped_file f;
+ ;
+ assign(f, "d:thingtmp.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
-
- load(); noo=0;
-
- assign(f,"thinks.avd");
- getmem(p,picsize);
- rewrite(f,1);
- blockwrite(f,thinks_header,65);
- gd=10; gm=20;
-
- while (noo<=number_of_objects)
- {;
- getimage(gd,gm,gd+59,gm+29,p);
- putimage(gd,gm,p,notput);
- blockwrite(f,p,picsize);
- gd += 70;
-
- if (gd==640)
- {;
- gd=10; gm += 40;
- }
-
- noo += 1;
- }
-
- close(f); freemem(p,picsize);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+
+ load();
+ noo = 0;
+
+ assign(f, "thinks.avd");
+ getmem(p, picsize);
+ rewrite(f, 1);
+ blockwrite(f, thinks_header, 65);
+ gd = 10;
+ gm = 20;
+
+ while (noo <= number_of_objects) {
+ ;
+ getimage(gd, gm, gd + 59, gm + 29, p);
+ putimage(gd, gm, p, notput);
+ blockwrite(f, p, picsize);
+ gd += 70;
+
+ if (gd == 640) {
+ ;
+ gd = 10;
+ gm += 40;
+ }
+
+ noo += 1;
+ }
+
+ close(f);
+ freemem(p, picsize);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/pingo.cpp b/engines/avalanche/pingo.cpp
index 2c68a8c3a9..df50cb0b94 100644
--- a/engines/avalanche/pingo.cpp
+++ b/engines/avalanche/pingo.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -47,10 +47,12 @@
namespace Avalanche {
-void dplot(integer x,integer y, string z)
-{;
- setcolor( 9); outtextxy(x,y ,z);
- setcolor(11); outtextxy(x,y-1,z);
+void dplot(integer x, integer y, string z) {
+ ;
+ setcolor(9);
+ outtextxy(x, y , z);
+ setcolor(11);
+ outtextxy(x, y - 1, z);
}
void bosskey()
@@ -85,171 +87,232 @@ begin;
dusk; setvisualpage(0); setactivepage(0); mousepage(0); dawn;
copy02;*/
{
- byte fv;
-;
- dusk();
- off_virtual();
- for( fv=0; fv <= 1; fv ++)
- {;
- setactivepage(fv);
- cleardevice();
- }
- load(98); off();
- setactivepage(1); setvisualpage(1);
- settextjustify(1,0); setcolor(8);
- outtextxy(320,177,"Graph/Histo/Draw/Sample: \"JANJUN93.GRA\": (W3-AB3)");
- outtextxy(320,190,"Press any key or click the mouse to return.");
- settextjustify(2,0);
- on(); mousepage(1); newpointer(1); dawn();
- do { check(); } while (!((mpress>0) || keypressed()));
- off(); on_virtual();
- major_redraw();
-
- mousepage(cp);
+ byte fv;
+ ;
+ dusk();
+ off_virtual();
+ for (fv = 0; fv <= 1; fv ++) {
+ ;
+ setactivepage(fv);
+ cleardevice();
+ }
+ load(98);
+ off();
+ setactivepage(1);
+ setvisualpage(1);
+ settextjustify(1, 0);
+ setcolor(8);
+ outtextxy(320, 177, "Graph/Histo/Draw/Sample: \"JANJUN93.GRA\": (W3-AB3)");
+ outtextxy(320, 190, "Press any key or click the mouse to return.");
+ settextjustify(2, 0);
+ on();
+ mousepage(1);
+ newpointer(1);
+ dawn();
+ do {
+ check();
+ } while (!((mpress > 0) || keypressed()));
+ off();
+ on_virtual();
+ major_redraw();
+
+ mousepage(cp);
}
-void copy02() /* taken from Wobble (below) */
-{
- byte a0 /*absolute $A000:0*/; byte a2/*absolute $A800:0*/; byte bit;
-;
- off();
- for( bit=0; bit <= 3; bit ++) {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit;
- port[0x3cf]=bit;
- move(a0,a2,16000);
- } on();
+void copy02() { /* taken from Wobble (below) */
+ byte a0 /*absolute $A000:0*/;
+ byte a2/*absolute $A800:0*/;
+ byte bit;
+ ;
+ off();
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(a0, a2, 16000);
+ }
+ on();
}
-void copy03() /* taken from Wobble (below) */
-{
- byte a0 /*absolute $A000:0*/; byte a2/*absolute $AC00:0*/; byte bit;
- byte squeaky_code;
-
- switch (visible) {
- case m_virtual : { squeaky_code = 1; off_virtual(); } break;
- case m_no : squeaky_code = 2; break;
- case m_yes : { squeaky_code = 3; off(); } break;
- }
-
- for( bit=0; bit <= 3; bit ++) {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit;
- port[0x3cf]=bit;
- move(a0,a2,16000);
- }
-
- switch (squeaky_code) {
- case 1 : on_virtual(); break;
- case 2 :; break; /* zzzz, it was off anyway */
- case 3 : on(); break;
- }
+void copy03() { /* taken from Wobble (below) */
+ byte a0 /*absolute $A000:0*/;
+ byte a2/*absolute $AC00:0*/;
+ byte bit;
+ byte squeaky_code;
+
+ switch (visible) {
+ case m_virtual : {
+ squeaky_code = 1;
+ off_virtual();
+ }
+ break;
+ case m_no :
+ squeaky_code = 2;
+ break;
+ case m_yes : {
+ squeaky_code = 3;
+ off();
+ }
+ break;
+ }
+
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(a0, a2, 16000);
+ }
+
+ switch (squeaky_code) {
+ case 1 :
+ on_virtual();
+ break;
+ case 2 :
+ ;
+ break; /* zzzz, it was off anyway */
+ case 3 :
+ on();
+ break;
+ }
}
-void copypage(byte frp,byte top) /* taken from Copy02 (above) */
-{
- byte bit;
-;
- off();
- for( bit=0; bit <= 3; bit ++) {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit;
- port[0x3cf]=bit;
- move(mem[0xa000*frp*pagetop],mem[0xa000*top*pagetop],16000);
- } on();
+void copypage(byte frp, byte top) { /* taken from Copy02 (above) */
+ byte bit;
+ ;
+ off();
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(mem[0xa000 * frp * pagetop], mem[0xa000 * top * pagetop], 16000);
+ }
+ on();
}
-void wobble()
-{
- byte bit;
- byte a2 /*absolute $A800:80i*/;
-;
- off();
- setactivepage(2); bit=getpixel(0,0);
- cleardevice();
- for( bit=0; bit <= 3; bit ++) {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit;
- port[0x3cf]=bit;
- move(mem[0xa000*cp*pagetop],a2,16000);
- }
- for( bit=0; bit <= 25; bit ++)
- {;
- setvisualpage(2); delay(bit*7);
- setvisualpage(cp); delay(bit*7);
- }
- bit=getpixel(0,0);
- draw_also_lines();
- setactivepage(1-cp); on();
+void wobble() {
+ byte bit;
+ byte a2 /*absolute $A800:80i*/;
+ ;
+ off();
+ setactivepage(2);
+ bit = getpixel(0, 0);
+ cleardevice();
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(mem[0xa000 * cp * pagetop], a2, 16000);
+ }
+ for (bit = 0; bit <= 25; bit ++) {
+ ;
+ setvisualpage(2);
+ delay(bit * 7);
+ setvisualpage(cp);
+ delay(bit * 7);
+ }
+ bit = getpixel(0, 0);
+ draw_also_lines();
+ setactivepage(1 - cp);
+ on();
}
void zonk();
-static void zl(integer x1,integer y1,integer x2,integer y2)
-{;
- setlinestyle(0,0,3); setcolor( 1); line(x1,y1,x2,y2);
- setlinestyle(0,0,1); setcolor(11); line(x1,y1,x2,y2);
+static void zl(integer x1, integer y1, integer x2, integer y2) {
+ ;
+ setlinestyle(0, 0, 3);
+ setcolor(1);
+ line(x1, y1, x2, y2);
+ setlinestyle(0, 0, 1);
+ setcolor(11);
+ line(x1, y1, x2, y2);
}
-void zonk()
-{
- integer xx,yy;
-/* a0:byte absolute $A000:0; a3:byte absolute $A000:245760;*/ byte bit,fv;
-;
- off();
- copypage(3,1-cp);
- {
- triptype& with = tr[1];
- ; xx=with.x+with.a.xl / 2; yy=with.y; }
-
- setactivepage(3); cleardevice();
-/* for bit:=0 to 3 do begin;
- port[$3C4]:=2; port[$3CE]:=4;
- port[$3C5]:=1 shl bit;
- port[$3CF]:=bit;
- move(a0,a3,16000);
- end;*/
- copypage(cp,3); off();
- zl(640,0,0,yy / 4);
- zl(0,yy / 4,640,yy / 2);
- zl(640,yy / 2,xx,yy); setbkcolor(yellow);
-
- for( bit=0; bit <= 255; bit ++)
- {;
- note(270-bit); setvisualpage(3);
- note(2700-10*bit); delay(5); nosound;
- note(270-bit); setvisualpage(cp);
- note(2700-10*bit); delay(5); nosound;
- } setactivepage(0); setbkcolor(black); on(); state(2);
- copypage(1-cp,3);
+void zonk() {
+ integer xx, yy;
+ /* a0:byte absolute $A000:0; a3:byte absolute $A000:245760;*/ byte bit, fv;
+ ;
+ off();
+ copypage(3, 1 - cp);
+ {
+ triptype &with = tr[1];
+ ;
+ xx = with.x + with.a.xl / 2;
+ yy = with.y;
+ }
+
+ setactivepage(3);
+ cleardevice();
+ /* for bit:=0 to 3 do begin;
+ port[$3C4]:=2; port[$3CE]:=4;
+ port[$3C5]:=1 shl bit;
+ port[$3CF]:=bit;
+ move(a0,a3,16000);
+ end;*/
+ copypage(cp, 3);
+ off();
+ zl(640, 0, 0, yy / 4);
+ zl(0, yy / 4, 640, yy / 2);
+ zl(640, yy / 2, xx, yy);
+ setbkcolor(yellow);
+
+ for (bit = 0; bit <= 255; bit ++) {
+ ;
+ note(270 - bit);
+ setvisualpage(3);
+ note(2700 - 10 * bit);
+ delay(5);
+ nosound;
+ note(270 - bit);
+ setvisualpage(cp);
+ note(2700 - 10 * bit);
+ delay(5);
+ nosound;
+ }
+ setactivepage(0);
+ setbkcolor(black);
+ on();
+ state(2);
+ copypage(1 - cp, 3);
}
-void winning_pic()
-{
- byte bit;
- untyped_file f;
- char r;
-
- dusk();
-
- assign(f,"finale.avd");
- reset(f,1);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,mem[0xa000*0],16000);
- }
- close(f); blitfix();
-
- setvisualpage(0);
-
- dawn();
-
- do { check(); } while (!(keypressed() || (mrelease>0)));
- while (keypressed()) r=readkey();
- major_redraw();
+void winning_pic() {
+ byte bit;
+ untyped_file f;
+ char r;
+
+ dusk();
+
+ assign(f, "finale.avd");
+ reset(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, mem[0xa000 * 0], 16000);
+ }
+ close(f);
+ blitfix();
+
+ setvisualpage(0);
+
+ dawn();
+
+ do {
+ check();
+ } while (!(keypressed() || (mrelease > 0)));
+ while (keypressed()) r = readkey();
+ major_redraw();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/pingo.h b/engines/avalanche/pingo.h
index 2bda4780c7..9d76db63b6 100644
--- a/engines/avalanche/pingo.h
+++ b/engines/avalanche/pingo.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -36,7 +36,7 @@ void copy02();
void copy03();
-void copypage(byte frp,byte top);
+void copypage(byte frp, byte top);
void wobble();
diff --git a/engines/avalanche/plottest.cpp b/engines/avalanche/plottest.cpp
index 909088c0e5..9a03718067 100644
--- a/engines/avalanche/plottest.cpp
+++ b/engines/avalanche/plottest.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,42 +29,47 @@
namespace Avalanche {
-integer gd,gm; byte fv;
-matrix<1,35,0,39,byte> a;
-array<0,3,0,4,1,35,byte> b;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- for( gd=0; gd <= 39; gd ++)
- for( gm=1; gm <= 35; gm ++)
- a[gm][gd]=(gd+gm) % 16;
- for( gd=0; gd <= 39; gd ++)
- for( gm=1; gm <= 35; gm ++)
- putpixel(gd+100,gm+100,a[gm][gd]);
+integer gd, gm;
+byte fv;
+matrix<1, 35, 0, 39, byte> a;
+array<0, 3, 0, 4, 1, 35, byte> b;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ for (gd = 0; gd <= 39; gd ++)
+ for (gm = 1; gm <= 35; gm ++)
+ a[gm][gd] = (gd + gm) % 16;
+ for (gd = 0; gd <= 39; gd ++)
+ for (gm = 1; gm <= 35; gm ++)
+ putpixel(gd + 100, gm + 100, a[gm][gd]);
- fillchar(b,sizeof(b),'\0');
- for( gm=1; gm <= 35; gm ++)
- for( gd=0; gd <= 39; gd ++)
- {;
- for( fv=0; fv <= 3; fv ++)
- {;
- b[fv][gd / 8][gm]=(b[fv][gd / 8][gm] << 1);
- b[fv][gd / 8][gm] += ((cardinal)(a[gm][gd] & (1 << fv)) >> fv);
- }
- }
+ fillchar(b, sizeof(b), '\0');
+ for (gm = 1; gm <= 35; gm ++)
+ for (gd = 0; gd <= 39; gd ++) {
+ ;
+ for (fv = 0; fv <= 3; fv ++) {
+ ;
+ b[fv][gd / 8][gm] = (b[fv][gd / 8][gm] << 1);
+ b[fv][gd / 8][gm] += ((cardinal)(a[gm][gd] & (1 << fv)) >> fv);
+ }
+ }
- for( gd=1; gd <= 35; gd ++)
- for( gm=0; gm <= 4; gm ++)
- {;
- for( fv=0; fv <= 3; fv ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << fv; port[0x3cf]=fv;
- mem[0xa000*gd*80+gm]=b[fv][gm][gd];
- }
- }
-return EXIT_SUCCESS;
+ for (gd = 1; gd <= 35; gd ++)
+ for (gm = 0; gm <= 4; gm ++) {
+ ;
+ for (fv = 0; fv <= 3; fv ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << fv;
+ port[0x3cf] = fv;
+ mem[0xa000 * gd * 80 + gm] = b[fv][gm][gd];
+ }
+ }
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/preview1.cpp b/engines/avalanche/preview1.cpp
index 861127714b..da5b71dae7 100644
--- a/engines/avalanche/preview1.cpp
+++ b/engines/avalanche/preview1.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,120 +30,124 @@
namespace Avalanche {
-array<0,3,palettetype> fxpal;
-
-void load()
-{
- byte a0 /*absolute $A000:800*/;
- byte bit;
- untyped_file f;
-
-
- assign(f,"preview2.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
-
- close(f);
- bit=getpixel(0,0);
-
- settextjustify(1,1);
- setcolor(3);
- outtextxy(320,166,"...This is a preview of things to come...");
- setcolor(14);
- outtextxy(320,176,"AVAROID");
- outtextxy(320,183,"(a space so dizzy)");
- setcolor(9);
- outtextxy(320,194,"the next Avvy adventure-- in 256 colours.");
- setcolor(7);
- outtextxy(590,195,"Any key...");
+array<0, 3, palettetype> fxpal;
+
+void load() {
+ byte a0 /*absolute $A000:800*/;
+ byte bit;
+ untyped_file f;
+
+
+ assign(f, "preview2.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
+
+ settextjustify(1, 1);
+ setcolor(3);
+ outtextxy(320, 166, "...This is a preview of things to come...");
+ setcolor(14);
+ outtextxy(320, 176, "AVAROID");
+ outtextxy(320, 183, "(a space so dizzy)");
+ setcolor(9);
+ outtextxy(320, 194, "the next Avvy adventure-- in 256 colours.");
+ setcolor(7);
+ outtextxy(590, 195, "Any key...");
}
-void setup()
-{
- integer gd,gm;
- palettetype p;
+void setup() {
+ integer gd, gm;
+ palettetype p;
- if (paramstr(1)!="jsb") exit(255);
- gd=3; gm=0; initgraph(gd,gm,"");
- getpalette(fxpal[0]);
+ if (paramstr(1) != "jsb") exit(255);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ getpalette(fxpal[0]);
- fillchar(p.colors,sizeof(p.colors),'\0'); /* Blank out the screen. */
- p.size=16; setallpalette(p);
+ fillchar(p.colors, sizeof(p.colors), '\0'); /* Blank out the screen. */
+ p.size = 16;
+ setallpalette(p);
}
-void wait()
-{
- word w; char r;
+void wait() {
+ word w;
+ char r;
- w=0;
- do {
- delay(1); w += 1;
- } while (!(keypressed() || (w==15000)));
+ w = 0;
+ do {
+ delay(1);
+ w += 1;
+ } while (!(keypressed() || (w == 15000)));
- while (keypressed()) r=readkey(); /* Keyboard sink. */
+ while (keypressed()) r = readkey(); /* Keyboard sink. */
}
-void show(byte n)
-{
- setallpalette(fxpal[n]);
- delay(55);
+void show(byte n) {
+ setallpalette(fxpal[n]);
+ delay(55);
}
-shortint fades(shortint x)
-{
- byte r,g,b;
-
- shortint fades_result;
- r=x / 16; x=x % 16;
- g=x / 4; b=x % 4;
- if (r>0) r -= 1; if (g>0) g -= 1; if (b>0) b -= 1;
- fades_result=(16*r+4*g+b);
-/* fades:=x-1;*/
- return fades_result;
+shortint fades(shortint x) {
+ byte r, g, b;
+
+ shortint fades_result;
+ r = x / 16;
+ x = x % 16;
+ g = x / 4;
+ b = x % 4;
+ if (r > 0) r -= 1;
+ if (g > 0) g -= 1;
+ if (b > 0) b -= 1;
+ fades_result = (16 * r + 4 * g + b);
+ /* fades:=x-1;*/
+ return fades_result;
}
void dawn();
-static void calc(byte n)
-{
- byte fv;
+static void calc(byte n) {
+ byte fv;
- fxpal[n]=fxpal[n-1];
+ fxpal[n] = fxpal[n - 1];
- for( fv=1; fv <= fxpal[n].size-1; fv ++)
- fxpal[n].colors[fv]=fades(fxpal[n].colors[fv]);
+ for (fv = 1; fv <= fxpal[n].size - 1; fv ++)
+ fxpal[n].colors[fv] = fades(fxpal[n].colors[fv]);
}
-void dawn()
-{
- byte fv;
+void dawn() {
+ byte fv;
- for( fv=1; fv <= 3; fv ++) calc(fv);
+ for (fv = 1; fv <= 3; fv ++) calc(fv);
- for( fv=3; fv >= 0; fv --) show(fv);
+ for (fv = 3; fv >= 0; fv --) show(fv);
}
-void dusk()
-{
- byte fv;
+void dusk() {
+ byte fv;
- for( fv=1; fv <= 3; fv ++) show(fv);
+ for (fv = 1; fv <= 3; fv ++) show(fv);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- setup();
- load();
- dawn();
- wait();
- dusk();
- closegraph();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ setup();
+ load();
+ dawn();
+ wait();
+ dusk();
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/qintro.cpp b/engines/avalanche/qintro.cpp
index 22e6f3f1b8..0d15a9d7da 100644
--- a/engines/avalanche/qintro.cpp
+++ b/engines/avalanche/qintro.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,7 +31,7 @@
namespace Avalanche {
- /* This is a stand-alone program. */
+/* This is a stand-alone program. */
/* 0, black, remains 0.
Other numbers: the bits take precedence from the left.
@@ -44,15 +44,16 @@ namespace Avalanche {
Second bit: 7 (light grey)
First bit: 1 (blue). */
-const palettetype our_palette =
- {16,
- /* sic */
-{{ 0, 1, 57, 57, 7, 7, 7, 7, 63, 63, 63, 63, 63, 63, 63, 63}}};
+const palettetype our_palette = {
+ 16,
+ /* sic */
+ {{ 0, 1, 57, 57, 7, 7, 7, 7, 63, 63, 63, 63, 63, 63, 63, 63}}
+};
-typedef matrix<'\0','\377',1,16,byte> fonttype;
+typedef matrix < '\0', '\377', 1, 16, byte > fonttype;
fonttype f;
-matrix<0,39,1,16,byte> next_line;
+matrix<0, 39, 1, 16, byte> next_line;
byte next_bitline;
@@ -62,244 +63,260 @@ boolean cut_out;
word cut_out_time;
-array<1,117,varying_string<40> > x;
+array<1, 117, varying_string<40> > x;
byte this_line;
-word* skellern;
+word *skellern;
/*$L intro.obj*/
-extern void introduction();
+extern void introduction();
-void graphmode(integer mode)
-{
- registers regs;
+void graphmode(integer mode) {
+ registers regs;
- regs.ax=mode;
- intr(0x10,regs);
+ regs.ax = mode;
+ intr(0x10, regs);
}
/* Firstly, port[$3C4]:=2; port[$3CF]:=4;,
Then port[$3C5]:=1 shl bit; port[$3CF]:=bit;. */
-void loadfont()
-{
- file<fonttype> ff;
+void loadfont() {
+ file<fonttype> ff;
- assign(ff,"avalot.fnt");
- reset(ff);
- ff >> f;
- close(ff);
+ assign(ff, "avalot.fnt");
+ reset(ff);
+ ff >> f;
+ close(ff);
}
void calc_next_line()
- /* This proc sets up next_line. */
+/* This proc sets up next_line. */
{
- string l;
- byte fv,ff;
- boolean oddlen;
- byte start;
- byte this_;
-
- fillchar(next_line,sizeof(next_line),'\0'); /* All blanks. */
-
- if (this_line==117)
- {
- cut_out=true;
- return;
- }
-
- l=x[this_line];
- this_line += 1;
-
- start=(20-length(l) / 2)-1;
- oddlen=odd(length(l));
-
- for( fv=1; fv <= length(l); fv ++)
- for( ff=1; ff <= 16; ff ++)
- {
- this_=f[l[fv]][ff];
- if (oddlen)
- { /* Odd, => 4 bits shift to the right. */
- next_line[start+fv][ff] += this_ << 4;
- next_line[start+fv-1][ff] += (cardinal)this_ >> 4;
- } else
- { /* Even, => no bit shift. */
- next_line[start+fv][ff]=this_;
- }
- }
- next_bitline=1;
+ string l;
+ byte fv, ff;
+ boolean oddlen;
+ byte start;
+ byte this_;
+
+ fillchar(next_line, sizeof(next_line), '\0'); /* All blanks. */
+
+ if (this_line == 117) {
+ cut_out = true;
+ return;
+ }
+
+ l = x[this_line];
+ this_line += 1;
+
+ start = (20 - length(l) / 2) - 1;
+ oddlen = odd(length(l));
+
+ for (fv = 1; fv <= length(l); fv ++)
+ for (ff = 1; ff <= 16; ff ++) {
+ this_ = f[l[fv]][ff];
+ if (oddlen) {
+ /* Odd, => 4 bits shift to the right. */
+ next_line[start + fv][ff] += this_ << 4;
+ next_line[start + fv - 1][ff] += (cardinal)this_ >> 4;
+ } else {
+ /* Even, => no bit shift. */
+ next_line[start + fv][ff] = this_;
+ }
+ }
+ next_bitline = 1;
}
-void display()
-{
- byte fv,ff;
+void display() {
+ byte fv, ff;
- if (next_bitline == 17) calc_next_line();
+ if (next_bitline == 17) calc_next_line();
- if (cut_out)
- {
- cut_out_time -= 1;
- return;
- }
+ if (cut_out) {
+ cut_out_time -= 1;
+ return;
+ }
- move(mem[0xa000*40],mem[0xa000*0],7960);
- for( fv=0; fv <= 39; fv ++)
- mem[0xa1f1*8+fv]=next_line[fv][next_bitline];
- next_bitline += 1;
+ move(mem[0xa000 * 40], mem[0xa000 * 0], 7960);
+ for (fv = 0; fv <= 39; fv ++)
+ mem[0xa1f1 * 8 + fv] = next_line[fv][next_bitline];
+ next_bitline += 1;
}
-void plot_a_star(integer x,integer y)
-{
- byte ofs;
+void plot_a_star(integer x, integer y) {
+ byte ofs;
- ofs=x % 8;
- x=x / 8;
- mem[0xa000*x+y*40] += (cardinal)128 >> ofs;
+ ofs = x % 8;
+ x = x / 8;
+ mem[0xa000 * x + y * 40] += (cardinal)128 >> ofs;
}
-void plot_some_stars(integer y)
-{
- byte fv,times;
-
- switch (Random(7)) {
- case 1: times=1; break;
- case 2: times=2; break;
- case 3: times=3; break;
- default: return;
- }
-
- for( fv=1; fv <= times; fv ++)
- plot_a_star(Random(320),y);
+void plot_some_stars(integer y) {
+ byte fv, times;
+
+ switch (Random(7)) {
+ case 1:
+ times = 1;
+ break;
+ case 2:
+ times = 2;
+ break;
+ case 3:
+ times = 3;
+ break;
+ default:
+ return;
+ }
+
+ for (fv = 1; fv <= times; fv ++)
+ plot_a_star(Random(320), y);
}
-void starry_starry_night()
-{
- integer y;
- byte bit;
-
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- for( bit=0; bit <= 2; bit ++)
- {
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( y=1; y <= 200; y ++)
- plot_some_stars(y);
- }
+void starry_starry_night() {
+ integer y;
+ byte bit;
+
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ for (bit = 0; bit <= 2; bit ++) {
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (y = 1; y <= 200; y ++)
+ plot_some_stars(y);
+ }
}
void setupgraphics() /* Fix this proc. This prog SHOULDN'T use the
Graph unit. */
{
- integer gd,gm;
+ integer gd, gm;
- gd=3; gm=1; initgraph(gd,gm,"");
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
}
-void shovestars()
-{
- move(mem[0xa000*0],mem[0xa000*40],7960);
- fillchar(mem[0xa000*0],40,'\0');
- plot_some_stars(0);
+void shovestars() {
+ move(mem[0xa000 * 0], mem[0xa000 * 40], 7960);
+ fillchar(mem[0xa000 * 0], 40, '\0');
+ plot_some_stars(0);
}
-void do_next_line()
-{
- byte bit;
-
- port[0x3c4]=2; port[0x3ce]=4;
-
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
-
- switch (bit) {
- case 0: if ((displaycounter % 10)==0) shovestars(); break;
- case 1: if ((displaycounter % 2)==0) shovestars(); break;
- case 2: shovestars(); break;
- case 3: display(); break; /* The text. */
- }
- }
-
- if (displaycounter==40) displaycounter=0;
+void do_next_line() {
+ byte bit;
+
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+
+ switch (bit) {
+ case 0:
+ if ((displaycounter % 10) == 0) shovestars();
+ break;
+ case 1:
+ if ((displaycounter % 2) == 0) shovestars();
+ break;
+ case 2:
+ shovestars();
+ break;
+ case 3:
+ display();
+ break; /* The text. */
+ }
+ }
+
+ if (displaycounter == 40) displaycounter = 0;
}
-void load_text()
-{
- word fv;
- char* c;
- byte thisline;
-
-
- c=addr(introduction());
- thisline=0;
- fillchar(x,sizeof(x),'\0');
-
- for( fv=1; fv <= 2456; fv ++)
- {
- switch (*c) {
- case '\15': thisline += 1; break;
- case '\12':/*nop*/; break;
- default: x[thisline]=x[thisline]+*c;
- }
-
- c += 1;
- }
+void load_text() {
+ word fv;
+ char *c;
+ byte thisline;
+
+
+ c = addr(introduction());
+ thisline = 0;
+ fillchar(x, sizeof(x), '\0');
+
+ for (fv = 1; fv <= 2456; fv ++) {
+ switch (*c) {
+ case '\15':
+ thisline += 1;
+ break;
+ case '\12':/*nop*/
+ ;
+ break;
+ default:
+ x[thisline] = x[thisline] + *c;
+ }
+
+ c += 1;
+ }
}
-void check_params()
-{
- word s,o; integer e;
+void check_params() {
+ word s, o;
+ integer e;
- if (paramstr(1)!="jsb") exit(0);
- val(paramstr(2),s,e); if (e!=0) exit(0);
- val(paramstr(3),o,e); if (e!=0) exit(0);
- skellern=ptr(s,o+1);
+ if (paramstr(1) != "jsb") exit(0);
+ val(paramstr(2), s, e);
+ if (e != 0) exit(0);
+ val(paramstr(3), o, e);
+ if (e != 0) exit(0);
+ skellern = ptr(s, o + 1);
}
-int main(int argc, const char* argv[])
-{
+int main(int argc, const char *argv[]) {
- pio_initialize(argc, argv);
- check_params();
+ pio_initialize(argc, argv);
+ check_params();
- setupgraphics();
+ setupgraphics();
- randseed=177; checkbreak=false;
+ randseed = 177;
+ checkbreak = false;
- load_text();
+ load_text();
- this_line=1;
+ this_line = 1;
- graphmode(0xd);
- loadfont();
+ graphmode(0xd);
+ loadfont();
- next_bitline=17;
- displaycounter=0;
+ next_bitline = 17;
+ displaycounter = 0;
- cut_out_time=333;
+ cut_out_time = 333;
- setallpalette(our_palette);
+ setallpalette(our_palette);
- starry_starry_night();
+ starry_starry_night();
- while ((cut_out_time>0) && (! keypressed()))
- {
+ while ((cut_out_time > 0) && (! keypressed())) {
- *skellern=0;
+ *skellern = 0;
- do_next_line();
+ do_next_line();
- displaycounter += 1;
+ displaycounter += 1;
- do {; } while (!(*skellern>0));
- }
+ do {
+ ;
+ } while (!(*skellern > 0));
+ }
- graphmode(3);
- return EXIT_SUCCESS;
+ graphmode(3);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/qstars.cpp b/engines/avalanche/qstars.cpp
index d512838121..69920ef292 100644
--- a/engines/avalanche/qstars.cpp
+++ b/engines/avalanche/qstars.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,234 +33,271 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
boolean reverse;
word spinnum;
-array<0,1,fonttype> f;
+array<0, 1, fonttype> f;
file<fonttype> ff;
-array<0,7,0,15,0,79,byte> strip;
+array<0, 7, 0, 15, 0, 79, byte> strip;
byte across;
-word w; byte y;
+word w;
+byte y;
byte charnum;
byte cfont; /* current font. 0=roman, 1=italic. */
-char* c;
+char *c;
const integer colours = 12; /* Run Workout to see possible values of these two. */
const integer steps = 6; /* 60,30,20,15,12,10,6,5,4,3,2,1 */
const integer gmtop = 360 / steps;
-/*$L credits.obj*/ extern void credits();
-
-void bigo2(string date)
-{
- integer gd,gm;
- byte c;
- palettetype p;
- untyped_file f; pointer pp; word s;
-
-
- getpalette(p);
- setvisualpage(1); setactivepage(0);
- assign(f,"logo.avd"); reset(f,1);
- for( gd=7; gd <= 194; gd ++)
- blockread(f,mem[0xa000*(gd*80)],53);
- close(f);
- s=imagesize(0,7,415,194); getmem(pp,s); getimage(0,7,415,194,pp);
-
- cleardevice();
- for( gd=1; gd <= 64; gd ++)
- {
- for( gm=0; gm <= gmtop; gm ++)
- {
- c=(c % colours)+1;
-/* putpixel(trunc(sin(gm*steps*n)*gd*6)+320,
- trunc(cos(gm*steps*n)*gd*3)+175,c); */
- if (c>5) continue_;
- setcolor(c); arc(320,175,gm*steps,gm*steps+1,gd*6);
- }
- if (keypressed()) { closegraph(); exit(0); }
- }
- settextstyle(0,0,1); setcolor(13);
- outtextxy(550,343,"(press any key)");
-
- putimage(112,0,pp,orput); freemem(pp,s);
- resetmouse; setvisualpage(0);
+/*$L credits.obj*/ extern void credits();
+
+void bigo2(string date) {
+ integer gd, gm;
+ byte c;
+ palettetype p;
+ untyped_file f;
+ pointer pp;
+ word s;
+
+
+ getpalette(p);
+ setvisualpage(1);
+ setactivepage(0);
+ assign(f, "logo.avd");
+ reset(f, 1);
+ for (gd = 7; gd <= 194; gd ++)
+ blockread(f, mem[0xa000 * (gd * 80)], 53);
+ close(f);
+ s = imagesize(0, 7, 415, 194);
+ getmem(pp, s);
+ getimage(0, 7, 415, 194, pp);
+
+ cleardevice();
+ for (gd = 1; gd <= 64; gd ++) {
+ for (gm = 0; gm <= gmtop; gm ++) {
+ c = (c % colours) + 1;
+ /* putpixel(trunc(sin(gm*steps*n)*gd*6)+320,
+ trunc(cos(gm*steps*n)*gd*3)+175,c); */
+ if (c > 5) continue_;
+ setcolor(c);
+ arc(320, 175, gm * steps, gm * steps + 1, gd * 6);
+ }
+ if (keypressed()) {
+ closegraph();
+ exit(0);
+ }
+ }
+ settextstyle(0, 0, 1);
+ setcolor(13);
+ outtextxy(550, 343, "(press any key)");
+
+ putimage(112, 0, pp, orput);
+ freemem(pp, s);
+ resetmouse;
+ setvisualpage(0);
}
-void nextchar() /* Sets up charnum & cline for the next character. */
-{
+void nextchar() { /* Sets up charnum & cline for the next character. */
- c += 1;
+ c += 1;
}
-void getchar()
-{
- do {
- nextchar();
-
- switch (*c) {
- case '@': { cfont=1; nextchar(); } break;
- case '^': { cfont=0; nextchar(); } break;
- case '%': { closegraph(); exit(0); } break;
- }
-
- } while (!((*c!='\15') && (*c!='\12')));
-
- for( w=0; w <= 7; w ++)
- for( y=0; y <= 15; y ++)
- move(strip[w][y][1],strip[w][y][0],79);
-
- for( w=0; w <= 7; w ++)
- for( y=0; y <= 15; y ++)
- strip[w][y][79]=(byte)((strip[7][y][78] << (w+1)))+
- ((cardinal)f[cfont][*c][y] >> (7-w));
-
- across=0;
+void getchar() {
+ do {
+ nextchar();
+
+ switch (*c) {
+ case '@': {
+ cfont = 1;
+ nextchar();
+ }
+ break;
+ case '^': {
+ cfont = 0;
+ nextchar();
+ }
+ break;
+ case '%': {
+ closegraph();
+ exit(0);
+ }
+ break;
+ }
+
+ } while (!((*c != '\15') && (*c != '\12')));
+
+ for (w = 0; w <= 7; w ++)
+ for (y = 0; y <= 15; y ++)
+ move(strip[w][y][1], strip[w][y][0], 79);
+
+ for (w = 0; w <= 7; w ++)
+ for (y = 0; y <= 15; y ++)
+ strip[w][y][79] = (byte)((strip[7][y][78] << (w + 1))) +
+ ((cardinal)f[cfont][*c][y] >> (7 - w));
+
+ across = 0;
}
-void scrolltext()
-{
- byte c,w,y;
+void scrolltext() {
+ byte c, w, y;
- across += 1;
- if (across==8) getchar();
+ across += 1;
+ if (across == 8) getchar();
- for( y=0; y <= 15; y ++)
- for( w=0; w <= 1; w ++)
- move(strip[across][y][0],mem[0xa000*24000+(y*2+w)*80],80);
+ for (y = 0; y <= 15; y ++)
+ for (w = 0; w <= 1; w ++)
+ move(strip[across][y][0], mem[0xa000 * 24000 + (y * 2 + w) * 80], 80);
}
-void do_stuff()
-{
- switch (spinnum) {
- case 50 ... 110: {
- setfillstyle(1,14);
- bar(0,315+(spinnum-50) / 3,640,315+(spinnum-50) / 3);
- bar(0,316-(spinnum-50) / 3,640,316-(spinnum-50) / 3);
- if (spinnum>56)
- {
- setfillstyle(1,13);
- bar(0,315+(spinnum-56) / 3,640,315+(spinnum-56) / 3);
- bar(0,316-(spinnum-56) / 3,640,316-(spinnum-56) / 3);
- }
- }
- break;
- case 150 ... 198: {
- setfillstyle(1,0);
- bar(0,315+(spinnum-150) / 3,640,315+(spinnum-150) / 3);
- bar(0,316-(spinnum-150) / 3,640,316-(spinnum-150) / 3);
- }
- break;
- case 200: scrolltext(); break;
- }
+void do_stuff() {
+ switch (spinnum) {
+ case 50 ... 110: {
+ setfillstyle(1, 14);
+ bar(0, 315 + (spinnum - 50) / 3, 640, 315 + (spinnum - 50) / 3);
+ bar(0, 316 - (spinnum - 50) / 3, 640, 316 - (spinnum - 50) / 3);
+ if (spinnum > 56) {
+ setfillstyle(1, 13);
+ bar(0, 315 + (spinnum - 56) / 3, 640, 315 + (spinnum - 56) / 3);
+ bar(0, 316 - (spinnum - 56) / 3, 640, 316 - (spinnum - 56) / 3);
+ }
+ }
+ break;
+ case 150 ... 198: {
+ setfillstyle(1, 0);
+ bar(0, 315 + (spinnum - 150) / 3, 640, 315 + (spinnum - 150) / 3);
+ bar(0, 316 - (spinnum - 150) / 3, 640, 316 - (spinnum - 150) / 3);
+ }
+ break;
+ case 200:
+ scrolltext();
+ break;
+ }
}
-void setcol(byte which,byte what)
+void setcol(byte which, byte what)
/*var dummy:byte;*/
-{;
-/* setpalette(which,what);
- asm
-(* mov dx,$3DA;
- in ax,dx;
-
- or ah,ah;
-
- mov dx,$3C0;
- mov al,which;
- out dx,al;
-
- mov dx,$3C0;
- mov al,what;
- out dx,al;
- end;
-(* dummy:=port[$3DA];
- port[$3C0]:=which; port[$3C0]:=what;*/
-}
-
-void bigo2go()
{
- palettetype p; byte c; boolean lmo;
- boolean altnow,altbefore;
-
- for( gd=0; gd <= 13; gd ++) p.colors[gd]=0;
-
- setcol(13,24); /* murk */ setcol(14,38); /* gold */
- setcol(15,egawhite); /* white- of course */
- p.colors[13]=24; p.colors[14]=38; p.colors[15]=egawhite;
-
- /***/
-
- p.colors[5]=egawhite;
- p.colors[4]=egalightcyan;
- p.colors[3]=egacyan;
- p.colors[2]=egalightblue;
- p.colors[1]=egablue;
-
- /***/
-
- c=1; p.size=16; lmo=false;
- setallpalette(p);
-
- do {
-/* if reverse then
- begin
- dec(c); if c=0 then c:=colours;
- end else
- begin
- inc(c); if c>colours then c:=1;
- end;
- for gm:=1 to colours do
- case p.colors[gm] of
- egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end;
- egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end;
- egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end;
- egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end;
- egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end;
- end;
- p.colors[c]:=egaWhite; setcol(c,egaWhite);
-
- AltBefore:=AltNow; AltNow:=testkey(sAlt);*/
-
- if (anymousekeypressed) lmo=true;
- if (keypressed()) lmo=true;
-
- /* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/
-
- do_stuff();
- if (spinnum<200) spinnum += 1;
- } while (!lmo);
+ ;
+ /* setpalette(which,what);
+ asm
+ (* mov dx,$3DA;
+ in ax,dx;
+
+ or ah,ah;
+
+ mov dx,$3C0;
+ mov al,which;
+ out dx,al;
+
+ mov dx,$3C0;
+ mov al,what;
+ out dx,al;
+ end;
+ (* dummy:=port[$3DA];
+ port[$3C0]:=which; port[$3C0]:=what;*/
}
-void parse_cline()
-{
- integer e;
-
- if (paramstr(1)!="jsb")
- {
- output << "Not a standalone program." << NL; exit(255);
- }
+void bigo2go() {
+ palettetype p;
+ byte c;
+ boolean lmo;
+ boolean altnow, altbefore;
+
+ for (gd = 0; gd <= 13; gd ++) p.colors[gd] = 0;
+
+ setcol(13, 24); /* murk */ setcol(14, 38); /* gold */
+ setcol(15, egawhite); /* white- of course */
+ p.colors[13] = 24;
+ p.colors[14] = 38;
+ p.colors[15] = egawhite;
+
+ /***/
+
+ p.colors[5] = egawhite;
+ p.colors[4] = egalightcyan;
+ p.colors[3] = egacyan;
+ p.colors[2] = egalightblue;
+ p.colors[1] = egablue;
+
+ /***/
+
+ c = 1;
+ p.size = 16;
+ lmo = false;
+ setallpalette(p);
+
+ do {
+ /* if reverse then
+ begin
+ dec(c); if c=0 then c:=colours;
+ end else
+ begin
+ inc(c); if c>colours then c:=1;
+ end;
+ for gm:=1 to colours do
+ case p.colors[gm] of
+ egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end;
+ egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end;
+ egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end;
+ egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end;
+ egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end;
+ end;
+ p.colors[c]:=egaWhite; setcol(c,egaWhite);
+
+ AltBefore:=AltNow; AltNow:=testkey(sAlt);*/
+
+ if (anymousekeypressed) lmo = true;
+ if (keypressed()) lmo = true;
+
+ /* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/
+
+ do_stuff();
+ if (spinnum < 200) spinnum += 1;
+ } while (!lmo);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- parse_cline();
-
- gd=3; gm=1; initgraph(gd,gm,"");
- assign(ff,"avalot.fnt"); reset(ff); ff >> f[0]; close(ff);
- assign(ff,"avitalic.fnt"); reset(ff); ff >> f[1]; close(ff);
+void parse_cline() {
+ integer e;
- c=addr(credits()); c -= 1;
+ if (paramstr(1) != "jsb") {
+ output << "Not a standalone program." << NL;
+ exit(255);
+ }
+}
- fillchar(strip,sizeof(strip),'\0');
- reverse=false; spinnum=0; across=7; charnum=1; cfont=0;
- bigo2("1189"); /* 1189? 79? 2345? 1967? */
- bigo2go();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ parse_cline();
+
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ assign(ff, "avalot.fnt");
+ reset(ff);
+ ff >> f[0];
+ close(ff);
+ assign(ff, "avitalic.fnt");
+ reset(ff);
+ ff >> f[1];
+ close(ff);
+
+ c = addr(credits());
+ c -= 1;
+
+ fillchar(strip, sizeof(strip), '\0');
+ reverse = false;
+ spinnum = 0;
+ across = 7;
+ charnum = 1;
+ cfont = 0;
+ bigo2("1189"); /* 1189? 79? 2345? 1967? */
+ bigo2go();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/rawupd.cpp b/engines/avalanche/rawupd.cpp
index 4f2a5f7b36..8c2c36784f 100644
--- a/engines/avalanche/rawupd.cpp
+++ b/engines/avalanche/rawupd.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,69 +31,67 @@
namespace Avalanche {
searchrec s;
-string x,y;
-longint hash_time,s_time;
+string x, y;
+longint hash_time, s_time;
boolean s_exists;
-void find_out_about_s(string name)
-{
- searchrec ss;
-;
- findfirst(name,anyfile,ss);
- s_exists=doserror==0;
+void find_out_about_s(string name) {
+ searchrec ss;
+ ;
+ findfirst(name, anyfile, ss);
+ s_exists = doserror == 0;
- if (s_exists)
- s_time=ss.time;
+ if (s_exists)
+ s_time = ss.time;
}
-void get_y()
-{
- y=x;
- if (set::of(range('0','9'), eos).has(x[2]))
- y[1]='h'; else
- if (x[3]=='K')
- y[1]='a'; else
- y[1]='s';
+void get_y() {
+ y = x;
+ if (set::of(range('0', '9'), eos).has(x[2]))
+ y[1] = 'h';
+ else if (x[3] == 'K')
+ y[1] = 'a';
+ else
+ y[1] = 's';
}
-void rename_it()
-{
- untyped_file f;
+void rename_it() {
+ untyped_file f;
- output << x << " -> " << y;
- assign(f,x); reset(f); rename(f,y); close(f);
- output << " ...done." << NL;
+ output << x << " -> " << y;
+ assign(f, x);
+ reset(f);
+ rename(f, y);
+ close(f);
+ output << " ...done." << NL;
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- output << NL;
- findfirst("#*.*",anyfile,s);
- while (doserror==0)
- {
- x=s.name;
- get_y();
- hash_time=s.time;
- output << format(x,15); clreol;
- find_out_about_s(y);
- if (s_exists)
- {
- output << ": s exists and is ";
- if (s_time<hash_time)
- output << "NEWER!" << NL;
- else if (s_time==hash_time)
- output << string("equal.")+'\15';
- else output << "older." << NL;
- } else
- {
- output << " ... NO S FOUND! Renaming...";
- rename_it();
- }
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ output << NL;
+ findfirst("#*.*", anyfile, s);
+ while (doserror == 0) {
+ x = s.name;
+ get_y();
+ hash_time = s.time;
+ output << format(x, 15);
+ clreol;
+ find_out_about_s(y);
+ if (s_exists) {
+ output << ": s exists and is ";
+ if (s_time < hash_time)
+ output << "NEWER!" << NL;
+ else if (s_time == hash_time)
+ output << string("equal.") + '\15';
+ else output << "older." << NL;
+ } else {
+ output << " ... NO S FOUND! Renaming...";
+ rename_it();
+ }
- findnext(s);
- }
- return EXIT_SUCCESS;
+ findnext(s);
+ }
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/readsez.cpp b/engines/avalanche/readsez.cpp
index b55d45ab3b..bdf3a7ee8c 100644
--- a/engines/avalanche/readsez.cpp
+++ b/engines/avalanche/readsez.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -28,80 +28,88 @@
namespace Avalanche {
struct markertype {
- word length;
- longint offset;
- byte checksum;
+ word length;
+ longint offset;
+ byte checksum;
};
struct sezheader {
- array<1,2,char> initials; /* should be "TT" */
- word gamecode;
- word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
- longint chains; /* number of scroll chains */
- longint size; /* total size of all chains */
+ array<1, 2, char> initials; /* should be "TT" */
+ word gamecode;
+ word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
+ longint chains; /* number of scroll chains */
+ longint size; /* total size of all chains */
};
untyped_file f;
longint number;
markertype marker;
sezheader sezhead;
-array<0,1999,char> x;
+array<0, 1999, char> x;
word fv;
byte sum;
-byte sumup()
-{
- word fv; byte total;
-byte sumup_result;
-;
- total=0;
- for( fv=0; fv <= marker.length; fv ++)
- {;
- total += ord(x[fv]);
- }
- sumup_result=total;
-return sumup_result;
+byte sumup() {
+ word fv;
+ byte total;
+ byte sumup_result;
+ ;
+ total = 0;
+ for (fv = 0; fv <= marker.length; fv ++) {
+ ;
+ total += ord(x[fv]);
+ }
+ sumup_result = total;
+ return sumup_result;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- output << "READ-SEZ by TT." << NL; output << NL;
- assign(f,"avalot.sez"); reset(f,1);
- seek(f,255); blockread(f,sezhead,sizeof(sezhead));
- {;
- if (sezhead.initials!="TT")
- {;
- output << "Not a valid Sez file!" << NL;
- exit(0);
- }
- output << "Number of chains in file = " << sezhead.chains << NL;
- output << "Total size of all chains = " << sezhead.size << " bytes." << NL;
- }
- output << NL;
- output << "Number of scrollchain to display?"; input >> number >> NL;
- seek(f,longint(262)+number*longint(7)); blockread(f,marker,7);
- {;
- output << "Scrollchain no. " << number << NL;
- output << "Length: " << marker.length << NL;
- output << "Offset: " << marker.offset << NL;
- output << NL;
- output << "Contents:" << NL;
- seek(f,longint(270)+sezhead.chains*longint(7)+marker.offset);
- blockread(f,x,marker.length+1);
- for( fv=0; fv <= marker.length; fv ++) x[fv] -= 3+177*fv*marker.length; /* unscramble */
- for( fv=0; fv <= marker.length; fv ++) output << x[fv];
- output << NL; sum=sumup();
- output << "Checksum in file: " << marker.checksum << ". Actual value: " << sum << '.' << NL;
- output << NL;
- if (sum!=marker.checksum)
- {;
- output << "Bleargh! Checksum failed!" << NL;
- exit(0);
- }
- }
- close(f);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ output << "READ-SEZ by TT." << NL;
+ output << NL;
+ assign(f, "avalot.sez");
+ reset(f, 1);
+ seek(f, 255);
+ blockread(f, sezhead, sizeof(sezhead));
+ {
+ ;
+ if (sezhead.initials != "TT") {
+ ;
+ output << "Not a valid Sez file!" << NL;
+ exit(0);
+ }
+ output << "Number of chains in file = " << sezhead.chains << NL;
+ output << "Total size of all chains = " << sezhead.size << " bytes." << NL;
+ }
+ output << NL;
+ output << "Number of scrollchain to display?";
+ input >> number >> NL;
+ seek(f, longint(262) + number * longint(7));
+ blockread(f, marker, 7);
+ {
+ ;
+ output << "Scrollchain no. " << number << NL;
+ output << "Length: " << marker.length << NL;
+ output << "Offset: " << marker.offset << NL;
+ output << NL;
+ output << "Contents:" << NL;
+ seek(f, longint(270) + sezhead.chains * longint(7) + marker.offset);
+ blockread(f, x, marker.length + 1);
+ for (fv = 0; fv <= marker.length; fv ++) x[fv] -= 3 + 177 * fv * marker.length; /* unscramble */
+ for (fv = 0; fv <= marker.length; fv ++) output << x[fv];
+ output << NL;
+ sum = sumup();
+ output << "Checksum in file: " << marker.checksum << ". Actual value: " << sum << '.' << NL;
+ output << NL;
+ if (sum != marker.checksum) {
+ ;
+ output << "Bleargh! Checksum failed!" << NL;
+ exit(0);
+ }
+ }
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/reginam.cpp b/engines/avalanche/reginam.cpp
index 0458acb337..441a35ace0 100644
--- a/engines/avalanche/reginam.cpp
+++ b/engines/avalanche/reginam.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -27,7 +27,7 @@
namespace Avalanche {
-const array<1,36,char> letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
+const array<1, 36, char> letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
varying_string<30> name;
varying_string<5> number;
@@ -38,82 +38,82 @@ static string z;
static byte p;
-static void replace(char what,char whatwith)
-{;
- p=pos(what,z); if (p>0) z[p]=whatwith;
+static void replace(char what, char whatwith) {
+ ;
+ p = pos(what, z);
+ if (p > 0) z[p] = whatwith;
}
-void alphanum()
-{
- byte fv;
-
-;
- z="";
- for( fv=1; fv <= length(name); fv ++)
- if (set::of(range('A','Z'), eos).has(name[fv]))
- z=z+'7'+name[fv]; else
- z=z+upcase(name[fv]);
- replace(' ','1');
- replace('.','2');
- replace('-','3');
- replace('\'','4');
- replace('"','5');
- replace('!','6');
- replace(',','9');
- replace('?','0');
-
- for( fv=1; fv <= length(number); fv ++)
- number[fv]=upcase(number[fv]);
-
- name=z+'8'+number;
+void alphanum() {
+ byte fv;
+
+ ;
+ z = "";
+ for (fv = 1; fv <= length(name); fv ++)
+ if (set::of(range('A', 'Z'), eos).has(name[fv]))
+ z = z + '7' + name[fv];
+ else
+ z = z + upcase(name[fv]);
+ replace(' ', '1');
+ replace('.', '2');
+ replace('-', '3');
+ replace('\'', '4');
+ replace('"', '5');
+ replace('!', '6');
+ replace(',', '9');
+ replace('?', '0');
+
+ for (fv = 1; fv <= length(number); fv ++)
+ number[fv] = upcase(number[fv]);
+
+ name = z + '8' + number;
}
-void scramble()
-{
- byte fv,what;
-;
- for( fv=1; fv <= length(name); fv ++)
- {;
- what=pos(name[fv],letters);
- what += 177;
- what += (fv+1)*3;
- name[fv]=letters[(what % 36)+1-1];
- }
+void scramble() {
+ byte fv, what;
+ ;
+ for (fv = 1; fv <= length(name); fv ++) {
+ ;
+ what = pos(name[fv], letters);
+ what += 177;
+ what += (fv + 1) * 3;
+ name[fv] = letters[(what % 36) + 1 - 1];
+ }
}
-void checks()
-{
- byte fv,total;
-;
- total=177;
- for( fv=1; fv <= length(name); fv ++)
- total += ord(name[fv]);
- name=string('T')+name+letters[total % 36-1];
+void checks() {
+ byte fv, total;
+ ;
+ total = 177;
+ for (fv = 1; fv <= length(name); fv ++)
+ total += ord(name[fv]);
+ name = string('T') + name + letters[total % 36 - 1];
}
-void negate()
-{
- byte fv;
-;
- name[1]='N';
- for( fv=2; fv <= length(name); fv ++)
- name[fv]=letters[37-pos(name[fv],letters)-1];
+void negate() {
+ byte fv;
+ ;
+ name[1] = 'N';
+ for (fv = 2; fv <= length(name); fv ++)
+ name[fv] = letters[37 - pos(name[fv], letters) - 1];
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- output << "Registrant's name?"; input >> name >> NL;
- output << "And number (eg, A1)?"; input >> number >> NL;
- alphanum();
- output << "Name = " << name << NL;
- scramble();
- output << "Scrambled = " << name << NL;
- checks();
- output << "With checks = " << name << NL;
- negate();
- output << "Or, negated, = " << name << NL;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ output << "Registrant's name?";
+ input >> name >> NL;
+ output << "And number (eg, A1)?";
+ input >> number >> NL;
+ alphanum();
+ output << "Name = " << name << NL;
+ scramble();
+ output << "Scrambled = " << name << NL;
+ checks();
+ output << "With checks = " << name << NL;
+ negate();
+ output << "Or, negated, = " << name << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sackb1.cpp b/engines/avalanche/sackb1.cpp
index e3369db8c7..54d860c5c6 100644
--- a/engines/avalanche/sackb1.cpp
+++ b/engines/avalanche/sackb1.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -42,38 +42,37 @@
#include "sackb1.h"
-/*$L v:MOD-obj.OBJ*/ /* Link in Object file */
-/*$F+*/ /* force calls to be 'far'*/
+/*$L v:MOD-obj.OBJ*/ /* Link in Object file */
+/*$F+*/ /* force calls to be 'far'*/
namespace Avalanche {
-extern void modvolume(integer v1,integer v2,integer v3,integer v4); /*Can do while playing*/
-extern void moddevice(integer& device);
-extern void modsetup(integer& status,integer device,integer mixspeed,integer pro,integer loop,string& stri);
-extern void modstop();
-extern void modinit();
+extern void modvolume(integer v1, integer v2, integer v3, integer v4); /*Can do while playing*/
+extern void moddevice(integer &device);
+extern void modsetup(integer &status, integer device, integer mixspeed, integer pro, integer loop, string &stri);
+extern void modstop();
+extern void modinit();
/*$F-*/
-void sb_start(string md)
-{
- integer dev,mix,stat,pro,loop;
-
- modinit();
- dev=7; /* Sound Blaster */
- mix = 10000; /*use 10000 normally */
- pro = 0; /*Leave at 0*/
- loop =4; /*4 means mod will play forever*/
- modvolume (255,255,255,255); /* Full volume */
- modsetup ( stat, dev, mix, pro, loop, md );
+void sb_start(string md) {
+ integer dev, mix, stat, pro, loop;
+
+ modinit();
+ dev = 7; /* Sound Blaster */
+ mix = 10000; /*use 10000 normally */
+ pro = 0; /*Leave at 0*/
+ loop = 4; /*4 means mod will play forever*/
+ modvolume(255, 255, 255, 255); /* Full volume */
+ modsetup(stat, dev, mix, pro, loop, md);
}
-void sb_stop()
-{;
- modstop();
+void sb_stop() {
+ ;
+ modstop();
}
-void sb_link() /* At the moment, this does nothing. */
-{;
+void sb_link() { /* At the moment, this does nothing. */
+ ;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sackb1.h b/engines/avalanche/sackb1.h
index c660c36117..7ac3cce0a3 100644
--- a/engines/avalanche/sackb1.h
+++ b/engines/avalanche/sackb1.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/sackb3.cpp b/engines/avalanche/sackb3.cpp
index 0abca98d17..a77431077f 100644
--- a/engines/avalanche/sackb3.cpp
+++ b/engines/avalanche/sackb3.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -27,25 +27,24 @@
/*$M 16384,0,0*/
- /* to demonstrate the SBVoice Unit */
- /* Copyright 1991 Amit K. Mathur, Windsor, Ontario */
+/* to demonstrate the SBVoice Unit */
+/* Copyright 1991 Amit K. Mathur, Windsor, Ontario */
/*#include "SBVoice.h"*/
namespace Avalanche {
-int main(int argc, const char* argv[])
-{
-pio_initialize(argc, argv);
-if (paramcount>0) {
- loadvoice(paramstr(1),0,0);
- sb_output(seg(soundfile),ofs(soundfile)+26);
- do {
- output << "Demo of the SBVoice Unit, Copyright 1991 by Amit K. Mathur --- ";
- } while (!(statusword==0));
-} else
- output << "Usage: DEMO [d:\\path\\]filename.voc" << NL;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ if (paramcount > 0) {
+ loadvoice(paramstr(1), 0, 0);
+ sb_output(seg(soundfile), ofs(soundfile) + 26);
+ do {
+ output << "Demo of the SBVoice Unit, Copyright 1991 by Amit K. Mathur --- ";
+ } while (!(statusword == 0));
+ } else
+ output << "Usage: DEMO [d:\\path\\]filename.voc" << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sackblas.cpp b/engines/avalanche/sackblas.cpp
index 9cec14da29..0c35671e9b 100644
--- a/engines/avalanche/sackblas.cpp
+++ b/engines/avalanche/sackblas.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/saving.cpp b/engines/avalanche/saving.cpp
index 5385a6c28f..8075225e7b 100644
--- a/engines/avalanche/saving.cpp
+++ b/engines/avalanche/saving.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,48 +29,54 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
byte a /*absolute $A000:(15*80)*/;
byte bit;
untyped_file f;
-void load(string nam)
-{
- byte z;
- array<1,4,pointer> a;
- untyped_file f; word s;
- string check;
-;
- assign(f,nam);
- reset(f,1);
- blockread(f,check,41);
- blockread(f,check,13);
- blockread(f,check,31);
- s=imagesize(0,0,getmaxx(),75);
- for( z=1; z <= 2; z ++)
- {;
- getmem(a[z],s);
- blockread(f,a[z],s);
- setactivepage(0);
- putimage(0,15+(z-1)*75,a[z],0);
- freemem(a[z],s);
- }
- close(f);
+void load(string nam) {
+ byte z;
+ array<1, 4, pointer> a;
+ untyped_file f;
+ word s;
+ string check;
+ ;
+ assign(f, nam);
+ reset(f, 1);
+ blockread(f, check, 41);
+ blockread(f, check, 13);
+ blockread(f, check, 31);
+ s = imagesize(0, 0, getmaxx(), 75);
+ for (z = 1; z <= 2; z ++) {
+ ;
+ getmem(a[z], s);
+ blockread(f, a[z], s);
+ setactivepage(0);
+ putimage(0, 15 + (z - 1) * 75, a[z], 0);
+ freemem(a[z], s);
+ }
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- load("d:britain.avd");
- assign(f,"c:\\sleep\\test.ega"); rewrite(f,1);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,a,12000);
- }
- close(f);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ load("d:britain.avd");
+ assign(f, "c:\\sleep\\test.ega");
+ rewrite(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, a, 12000);
+ }
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scr_1.cpp b/engines/avalanche/scr_1.cpp
index 6228bf86f5..5d8bc7d23b 100644
--- a/engines/avalanche/scr_1.cpp
+++ b/engines/avalanche/scr_1.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,86 +31,110 @@ namespace Avalanche {
const varying_string<4> codes = " ßÜÛ";
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-byte x,xx,y;
-string title,fn;
+byte x, xx, y;
+string title, fn;
file<fonttype> f;
fonttype font;
byte code;
-typedef array<1,3840,byte> atype;
+typedef array<1, 3840, byte> atype;
-void save()
-{
- file<atype> f;
- word fv;
- atype a /*absolute $B800:0*/;
-;
- assign(f,"TEXT1.SCR");
- rewrite(f); f << a; close(f);
+void save() {
+ file<atype> f;
+ word fv;
+ atype a /*absolute $B800:0*/;
+ ;
+ assign(f, "TEXT1.SCR");
+ rewrite(f);
+ f << a;
+ close(f);
}
-void centre(byte y, string z)
-{;
- gotoxy(40-length(z) / 2,y); output << z;
+void centre(byte y, string z) {
+ ;
+ gotoxy(40 - length(z) / 2, y);
+ output << z;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
-/* write('Title?'); readln(title);
- write('Font?'); readln(fn); */
- textattr=0; clrscr;
- title="Bug Alert!"; fn="";
- for( xx=1; xx <= 77; xx ++)
- {;
- gotoxy(Random(80)+1,Random(24)+1);
- switch (Random(2)) {
- case 0: textattr=red; break;
- case 1: textattr=lightred; break;
- }
- switch (Random(4)) {
- case 0: output << '*'; break;
- case 1: output << '\17'; break;
- case 2: output << 'ù'; break;
- case 3: output << 'ú'; break;
- }
- }
- textattr=12;
- assign(f,"c:\\thomas\\ttsmall.fnt");
- reset(f); f >> font; close(f);
- for( y=0; y <= 3; y ++)
- {;
- for( x=1; x <= length(title); x ++)
- {;
- for( xx=7; xx >= 0; xx --)
- {;
- code=(byte)(((1 << xx) & font[title[x]][y*2])>0)+
- (byte)(((1 << xx) & font[title[x]][y*2+1])>0)*2;
- gotoxy(1+x*8-xx,y+1);
- if (code>0) output << codes[code+1-1];
- }
- }
- /*if wherex<>1 then writeln;*/
- }
- textattr=red;
- centre(7,"An internal error has just occurred within the program.");
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ /* write('Title?'); readln(title);
+ write('Font?'); readln(fn); */
+ textattr = 0;
+ clrscr;
+ title = "Bug Alert!";
+ fn = "";
+ for (xx = 1; xx <= 77; xx ++) {
+ ;
+ gotoxy(Random(80) + 1, Random(24) + 1);
+ switch (Random(2)) {
+ case 0:
+ textattr = red;
+ break;
+ case 1:
+ textattr = lightred;
+ break;
+ }
+ switch (Random(4)) {
+ case 0:
+ output << '*';
+ break;
+ case 1:
+ output << '\17';
+ break;
+ case 2:
+ output << 'ù';
+ break;
+ case 3:
+ output << 'ú';
+ break;
+ }
+ }
+ textattr = 12;
+ assign(f, "c:\\thomas\\ttsmall.fnt");
+ reset(f);
+ f >> font;
+ close(f);
+ for (y = 0; y <= 3; y ++) {
+ ;
+ for (x = 1; x <= length(title); x ++) {
+ ;
+ for (xx = 7; xx >= 0; xx --) {
+ ;
+ code = (byte)(((1 << xx) & font[title[x]][y * 2]) > 0) +
+ (byte)(((1 << xx) & font[title[x]][y * 2 + 1]) > 0) * 2;
+ gotoxy(1 + x * 8 - xx, y + 1);
+ if (code > 0) output << codes[code + 1 - 1];
+ }
+ }
+ /*if wherex<>1 then writeln;*/
+ }
+ textattr = red;
+ centre(7, "An internal error has just occurred within the program.");
- textattr=white; gotoxy(26, 9); output << "Error number: ";
- textattr=lightred; output << " ";
- textattr=white; gotoxy(27,10); output << "at location: ";
- textattr=lightred; output << " ";
- centre(12,"This screen should never come up...");
- centre(13,"but it just has!");
- textattr=15;
- centre(15,"So, please tell Thorsoft about this as soon as");
- centre(16,"possible, so that we can fix it.");
- textattr=red;
- centre(20,"Thanks...");
- save();
-return EXIT_SUCCESS;
+ textattr = white;
+ gotoxy(26, 9);
+ output << "Error number: ";
+ textattr = lightred;
+ output << " ";
+ textattr = white;
+ gotoxy(27, 10);
+ output << "at location: ";
+ textattr = lightred;
+ output << " ";
+ centre(12, "This screen should never come up...");
+ centre(13, "but it just has!");
+ textattr = 15;
+ centre(15, "So, please tell Thorsoft about this as soon as");
+ centre(16, "possible, so that we can fix it.");
+ textattr = red;
+ centre(20, "Thanks...");
+ save();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scr_2.cpp b/engines/avalanche/scr_2.cpp
index 6cb6fca6e9..c3de473a0a 100644
--- a/engines/avalanche/scr_2.cpp
+++ b/engines/avalanche/scr_2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,110 +31,130 @@ namespace Avalanche {
const varying_string<4> codes = " ßÜÛ";
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-byte x,xx,y;
+byte x, xx, y;
string qq;
file<fonttype> f;
fonttype font;
byte code;
-typedef array<1,3840,byte> atype;
+typedef array<1, 3840, byte> atype;
-void save()
-{
- file<atype> f;
- word fv;
- atype a /*absolute $B800:0*/;
-;
- assign(f,"TEXT2.SCR");
- rewrite(f); f << a; close(f);
+void save() {
+ file<atype> f;
+ word fv;
+ atype a /*absolute $B800:0*/;
+ ;
+ assign(f, "TEXT2.SCR");
+ rewrite(f);
+ f << a;
+ close(f);
}
-void centre(byte y, string z)
-{
- byte fv;
-;
- for( fv=1; fv <= length(z); fv ++)
- {;
- gotoxy(39-length(z) / 2+fv,y);
- if (odd(fv+y)) textattr=2; else textattr=cyan;
- if (z[fv]!='\40') output << z[fv];
- }
+void centre(byte y, string z) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= length(z); fv ++) {
+ ;
+ gotoxy(39 - length(z) / 2 + fv, y);
+ if (odd(fv + y)) textattr = 2;
+ else textattr = cyan;
+ if (z[fv] != '\40') output << z[fv];
+ }
}
-void line(byte yy, string title)
-{
- const integer offset = 5;
-;
- for( y=1; y <= 6; y ++)
- {;
- qq="";
- for( x=1; x <= length(title); x ++)
- {;
- for( xx=7; xx >= 0; xx --)
- {;
- code=(byte)(((1 << xx) & font[title[x]][y*2-offset])>0)+
- (byte)(((1 << xx) & font[title[x]][y*2+1-offset])>0)*2;
- qq=qq+codes[code+1-1];
- }
- }
- centre(y+yy,qq);
- }
+void line(byte yy, string title) {
+ const integer offset = 5;
+ ;
+ for (y = 1; y <= 6; y ++) {
+ ;
+ qq = "";
+ for (x = 1; x <= length(title); x ++) {
+ ;
+ for (xx = 7; xx >= 0; xx --) {
+ ;
+ code = (byte)(((1 << xx) & font[title[x]][y * 2 - offset]) > 0) +
+ (byte)(((1 << xx) & font[title[x]][y * 2 + 1 - offset]) > 0) * 2;
+ qq = qq + codes[code + 1 - 1];
+ }
+ }
+ centre(y + yy, qq);
+ }
}
-void chips()
-{
- byte fv,x,y;
-;
- for( fv=0; fv <= 1; fv ++)
- {;
- textattr=120;
- for( y=2; y <= 6; y ++)
- {;
- gotoxy(fv*67+3,y); output << " "; if (fv==1) output << ' ';
- }
- gotoxy(fv*67+4,4);
- if (fv==0) output << "RAM"; else output << "CRAM";
- textattr=7;
- for( x=0; x <= 1; x ++)
- for( y=2; y <= 6; y ++)
- {; gotoxy(fv*67+2+x*(6+fv),y); output << 'ð'; }
- }
+void chips() {
+ byte fv, x, y;
+ ;
+ for (fv = 0; fv <= 1; fv ++) {
+ ;
+ textattr = 120;
+ for (y = 2; y <= 6; y ++) {
+ ;
+ gotoxy(fv * 67 + 3, y);
+ output << " ";
+ if (fv == 1) output << ' ';
+ }
+ gotoxy(fv * 67 + 4, 4);
+ if (fv == 0) output << "RAM";
+ else output << "CRAM";
+ textattr = 7;
+ for (x = 0; x <= 1; x ++)
+ for (y = 2; y <= 6; y ++) {
+ ;
+ gotoxy(fv * 67 + 2 + x * (6 + fv), y);
+ output << 'ð';
+ }
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- textattr=0; clrscr;
- chips();
- assign(f,"c:\\thomas\\ttsmall.fnt");
- reset(f); f >> font; close(f);
- line(0,"Out of");
- line(4,"memory!");
- centre(11,"Yes, RAM cram strikes again- Avvy has just run out of RAM (not the");
- centre(12,"hydraulic, woolly or village kinds.) Fortunately, there are a few things");
- centre(13,"you can do about this:");
- textattr=3;
- for( xx=15; xx <= 17; xx ++)
- {;
- gotoxy(23,xx); output << '\20';
- }
- textattr=2;
- gotoxy(25,15); output << "Don't run Avvy in a DOS shell.";
- gotoxy(25,16); output << "If that fails, try un-installing your TSRs.";
- gotoxy(25,17); output << "If you've got DOS 5ù0 or above, try using";
- gotoxy(28,18); textattr=3; output << "dos=high";
- textattr=2; output << ',';
- textattr=3; output << " loadhigh";
- textattr=2; output << " and";
- textattr=3; output << " devicehigh";
- textattr=2; output << '.';
- gotoxy(28,19); output << "See your DOS manual for details...";
- centre(23,"Sorry for any inconvenience...");
- save();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ textattr = 0;
+ clrscr;
+ chips();
+ assign(f, "c:\\thomas\\ttsmall.fnt");
+ reset(f);
+ f >> font;
+ close(f);
+ line(0, "Out of");
+ line(4, "memory!");
+ centre(11, "Yes, RAM cram strikes again- Avvy has just run out of RAM (not the");
+ centre(12, "hydraulic, woolly or village kinds.) Fortunately, there are a few things");
+ centre(13, "you can do about this:");
+ textattr = 3;
+ for (xx = 15; xx <= 17; xx ++) {
+ ;
+ gotoxy(23, xx);
+ output << '\20';
+ }
+ textattr = 2;
+ gotoxy(25, 15);
+ output << "Don't run Avvy in a DOS shell.";
+ gotoxy(25, 16);
+ output << "If that fails, try un-installing your TSRs.";
+ gotoxy(25, 17);
+ output << "If you've got DOS 5ù0 or above, try using";
+ gotoxy(28, 18);
+ textattr = 3;
+ output << "dos=high";
+ textattr = 2;
+ output << ',';
+ textattr = 3;
+ output << " loadhigh";
+ textattr = 2;
+ output << " and";
+ textattr = 3;
+ output << " devicehigh";
+ textattr = 2;
+ output << '.';
+ gotoxy(28, 19);
+ output << "See your DOS manual for details...";
+ centre(23, "Sorry for any inconvenience...");
+ save();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scr_3.cpp b/engines/avalanche/scr_3.cpp
index b71353c9e0..54ad5b0f4d 100644
--- a/engines/avalanche/scr_3.cpp
+++ b/engines/avalanche/scr_3.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,90 +31,112 @@ namespace Avalanche {
const varying_string<4> codes = " ßÜÛ";
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-byte x,xx,y;
+byte x, xx, y;
string qq;
file<fonttype> f;
fonttype font;
byte code;
-typedef array<1,3840,byte> atype;
+typedef array<1, 3840, byte> atype;
-void save()
-{
- file<atype> f;
- word fv;
- atype a /*absolute $B800:0*/;
-;
- assign(f,"TEXT3.SCR");
- rewrite(f); f << a; close(f);
+void save() {
+ file<atype> f;
+ word fv;
+ atype a /*absolute $B800:0*/;
+ ;
+ assign(f, "TEXT3.SCR");
+ rewrite(f);
+ f << a;
+ close(f);
}
-void centre(byte y, string z)
-{
- byte fv;
-;
- for( fv=1; fv <= length(z); fv ++)
- {;
- gotoxy(39-length(z) / 2+fv,y);
- if (z[fv]!='\40') output << z[fv];
- }
+void centre(byte y, string z) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= length(z); fv ++) {
+ ;
+ gotoxy(39 - length(z) / 2 + fv, y);
+ if (z[fv] != '\40') output << z[fv];
+ }
}
-void line(byte cx,byte cy, string title)
-{;
- for( y=0; y <= 4; y ++)
- {;
- qq="";
- for( x=1; x <= length(title); x ++)
- {;
- for( xx=7; xx >= 0; xx --)
- {;
- code=(byte)(((1 << xx) & font[title[x]][y*2])>0)+
- (byte)(((1 << xx) & font[title[x]][y*2+1])>0)*2;
- qq=qq+codes[code+1-1];
- }
- }
- gotoxy(cx,cy+y); output << qq;
- }
+void line(byte cx, byte cy, string title) {
+ ;
+ for (y = 0; y <= 4; y ++) {
+ ;
+ qq = "";
+ for (x = 1; x <= length(title); x ++) {
+ ;
+ for (xx = 7; xx >= 0; xx --) {
+ ;
+ code = (byte)(((1 << xx) & font[title[x]][y * 2]) > 0) +
+ (byte)(((1 << xx) & font[title[x]][y * 2 + 1]) > 0) * 2;
+ qq = qq + codes[code + 1 - 1];
+ }
+ }
+ gotoxy(cx, cy + y);
+ output << qq;
+ }
}
-void big_t()
-{
- text t;
- string x;
- byte y;
-;
- assign(t,"c:\\avalot\\t.txt"); reset(t); y=1;
- while (! eof(t))
- {;
- t >> x >> NL;
- gotoxy(1,y); output << x; y += 1;
- }
+void big_t() {
+ text t;
+ string x;
+ byte y;
+ ;
+ assign(t, "c:\\avalot\\t.txt");
+ reset(t);
+ y = 1;
+ while (! eof(t)) {
+ ;
+ t >> x >> NL;
+ gotoxy(1, y);
+ output << x;
+ y += 1;
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- textattr=4; clrscr;
- assign(f,"c:\\thomas\\ttsmall.fnt");
- reset(f); f >> font; close(f);
- textattr=4; line(19,4,"hanks");
- textattr=6; line(23,8,"for");
- line(7,12,"playing"); textattr += 8;
- line(12,16,"Avalot.");
- textattr=12; big_t();
- textattr=8; gotoxy(40,2); output << "(c) 1994, Mike, Mark and Thomas Thurman.";
- textattr=11; gotoxy(50,10); output << "* Goodbyte! *";
- textattr=10; gotoxy(9,20); output << '\20';
- textattr=12; output << " If you'd like to see yet more of these games, then don't forget to";
- gotoxy(12,21); output << "register, or your"; clreol;
- gotoxy(12,22); output << "for the rest of your life!";
- gotoxy(60,22); output << "(Only joking!)";
- save();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ textattr = 4;
+ clrscr;
+ assign(f, "c:\\thomas\\ttsmall.fnt");
+ reset(f);
+ f >> font;
+ close(f);
+ textattr = 4;
+ line(19, 4, "hanks");
+ textattr = 6;
+ line(23, 8, "for");
+ line(7, 12, "playing");
+ textattr += 8;
+ line(12, 16, "Avalot.");
+ textattr = 12;
+ big_t();
+ textattr = 8;
+ gotoxy(40, 2);
+ output << "(c) 1994, Mike, Mark and Thomas Thurman.";
+ textattr = 11;
+ gotoxy(50, 10);
+ output << "* Goodbyte! *";
+ textattr = 10;
+ gotoxy(9, 20);
+ output << '\20';
+ textattr = 12;
+ output << " If you'd like to see yet more of these games, then don't forget to";
+ gotoxy(12, 21);
+ output << "register, or your";
+ clreol;
+ gotoxy(12, 22);
+ output << "for the rest of your life!";
+ gotoxy(60, 22);
+ output << "(Only joking!)";
+ save();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scr_4.cpp b/engines/avalanche/scr_4.cpp
index 7f5cb6ada0..befde2a7f3 100644
--- a/engines/avalanche/scr_4.cpp
+++ b/engines/avalanche/scr_4.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,86 +31,102 @@ namespace Avalanche {
const varying_string<4> codes = " ÞÝÛ";
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-byte x,xx,y;
+byte x, xx, y;
string qq;
file<fonttype> f;
fonttype font;
byte code;
-void centre(byte y, string z)
-{
- byte fv;
-;
- for( fv=1; fv <= length(z); fv ++)
- {;
- gotoxy(39-length(z) / 2+fv,y);
- if (z[fv]!='\40') output << z[fv];
- }
+void centre(byte y, string z) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= length(z); fv ++) {
+ ;
+ gotoxy(39 - length(z) / 2 + fv, y);
+ if (z[fv] != '\40') output << z[fv];
+ }
}
-void line(byte cy, string title)
-{;
- for( y=0; y <= 6; y ++)
- {;
- qq="";
- for( x=1; x <= length(title); x ++)
- {;
- for( xx=3; xx >= 0; xx --)
- {;
- code=(byte)(((1 << (xx*2)) & font[title[x]][y])>0)+
- (byte)(((1 << (xx*2+1)) & font[title[x]][y])>0)*2;
- qq=qq+codes[code+1-1];
- }
- }
- centre(cy+y,qq);
- }
+void line(byte cy, string title) {
+ ;
+ for (y = 0; y <= 6; y ++) {
+ ;
+ qq = "";
+ for (x = 1; x <= length(title); x ++) {
+ ;
+ for (xx = 3; xx >= 0; xx --) {
+ ;
+ code = (byte)(((1 << (xx * 2)) & font[title[x]][y]) > 0) +
+ (byte)(((1 << (xx * 2 + 1)) & font[title[x]][y]) > 0) * 2;
+ qq = qq + codes[code + 1 - 1];
+ }
+ }
+ centre(cy + y, qq);
+ }
}
-void big_t()
-{
- text t;
- string x;
- byte y;
-;
- assign(t,"c:\\avalot\\t.txt"); reset(t); y=1;
- while (! eof(t))
- {;
- t >> x >> NL;
- gotoxy(1,y); output << x; y += 1;
- }
+void big_t() {
+ text t;
+ string x;
+ byte y;
+ ;
+ assign(t, "c:\\avalot\\t.txt");
+ reset(t);
+ y = 1;
+ while (! eof(t)) {
+ ;
+ t >> x >> NL;
+ gotoxy(1, y);
+ output << x;
+ y += 1;
+ }
}
-void box(byte x1,byte y1,byte x2,byte y2, string z)
-{
- byte fv;
-;
- gotoxy(x1,y1); output << z[1]; /* tl */
- gotoxy(x2,y1); output << z[2]; /* tr */
- gotoxy(x1,y2); output << z[3]; /* bl */
- gotoxy(x2,y2); output << z[4]; /* br */
- for( fv=y1+1; fv <= y2-1; fv ++)
- {;
- gotoxy(x1,fv); output << z[5]; /* verticals */
- gotoxy(x2,fv); output << z[6];
- }
- gotoxy(x1+1,y1); for( fv=x1+1; fv <= x2-1; fv ++) output << z[7];
- gotoxy(x1+1,y2); for( fv=x1+1; fv <= x2-1; fv ++) output << z[8];
+void box(byte x1, byte y1, byte x2, byte y2, string z) {
+ byte fv;
+ ;
+ gotoxy(x1, y1);
+ output << z[1]; /* tl */
+ gotoxy(x2, y1);
+ output << z[2]; /* tr */
+ gotoxy(x1, y2);
+ output << z[3]; /* bl */
+ gotoxy(x2, y2);
+ output << z[4]; /* br */
+ for (fv = y1 + 1; fv <= y2 - 1; fv ++) {
+ ;
+ gotoxy(x1, fv);
+ output << z[5]; /* verticals */
+ gotoxy(x2, fv);
+ output << z[6];
+ }
+ gotoxy(x1 + 1, y1);
+ for (fv = x1 + 1; fv <= x2 - 1; fv ++) output << z[7];
+ gotoxy(x1 + 1, y2);
+ for (fv = x1 + 1; fv <= x2 - 1; fv ++) output << z[8];
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- textattr=26; clrscr;
- assign(f,"c:\\thomas\\ttsmall.fnt");
- reset(f); f >> font; close(f);
- line(3,"CONGRATULATIONS!");
- textattr=30; box(4,1,74,11,"ɻȼººÍÍ");
- textattr=33; box(6,2,72,10,"/\\\\/°°Üß");
- textattr=30; centre(12,"Well done!");
- textattr=27; centre(14,"You completed the game!");
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ textattr = 26;
+ clrscr;
+ assign(f, "c:\\thomas\\ttsmall.fnt");
+ reset(f);
+ f >> font;
+ close(f);
+ line(3, "CONGRATULATIONS!");
+ textattr = 30;
+ box(4, 1, 74, 11, "ɻȼººÍÍ");
+ textattr = 33;
+ box(6, 2, 72, 10, "/\\\\/°°Üß");
+ textattr = 30;
+ centre(12, "Well done!");
+ textattr = 27;
+ centre(14, "You completed the game!");
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scr_5.cpp b/engines/avalanche/scr_5.cpp
index 5a4aa12b22..bc4472a6c8 100644
--- a/engines/avalanche/scr_5.cpp
+++ b/engines/avalanche/scr_5.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,90 +31,121 @@ namespace Avalanche {
const varying_string<4> codes = " ßÜÛ";
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
-byte x,xx,y;
+byte x, xx, y;
string qq;
file<fonttype> f;
fonttype font;
byte code;
-typedef array<1,3840,byte> atype;
+typedef array<1, 3840, byte> atype;
-void save()
-{
- file<atype> f;
- word fv;
- atype a /*absolute $B800:0*/;
-;
- assign(f,"TEXT5.SCR");
- rewrite(f); f << a; close(f);
+void save() {
+ file<atype> f;
+ word fv;
+ atype a /*absolute $B800:0*/;
+ ;
+ assign(f, "TEXT5.SCR");
+ rewrite(f);
+ f << a;
+ close(f);
}
-void line(byte cx,byte cy, string title)
-{;
- for( y=0; y <= 4; y ++)
- {;
- qq="";
- for( x=1; x <= length(title); x ++)
- {;
- for( xx=7; xx >= 0; xx --)
- {;
- code=(byte)(((1 << xx) & font[title[x]][y*2])>0)+
- (byte)(((1 << xx) & font[title[x]][y*2+1])>0)*2;
- qq=qq+codes[code+1-1];
- }
- }
- gotoxy(cx,cy+y); output << qq;
- }
+void line(byte cx, byte cy, string title) {
+ ;
+ for (y = 0; y <= 4; y ++) {
+ ;
+ qq = "";
+ for (x = 1; x <= length(title); x ++) {
+ ;
+ for (xx = 7; xx >= 0; xx --) {
+ ;
+ code = (byte)(((1 << xx) & font[title[x]][y * 2]) > 0) +
+ (byte)(((1 << xx) & font[title[x]][y * 2 + 1]) > 0) * 2;
+ qq = qq + codes[code + 1 - 1];
+ }
+ }
+ gotoxy(cx, cy + y);
+ output << qq;
+ }
}
-void uline()
-{
- byte fv,ff;
-;
- for( fv=1; fv <= 10; fv ++)
- {;
- gotoxy(16-fv,21-fv); textattr=fv;
- for( ff=1; ff <= fv; ff ++) output << "ÄÍÍ-";
- }
+void uline() {
+ byte fv, ff;
+ ;
+ for (fv = 1; fv <= 10; fv ++) {
+ ;
+ gotoxy(16 - fv, 21 - fv);
+ textattr = fv;
+ for (ff = 1; ff <= fv; ff ++) output << "ÄÍÍ-";
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- textattr=0; clrscr;
- assign(f,"c:\\thomas\\ttsmall.fnt");
- reset(f); f >> font; close(f);
- textattr=11;
- line( 1, 3,"Two at");
- line( 3, 7,"once?!");
- textattr=9; gotoxy(55,4); output << string('\4')+'\377';
- textattr=3; output << "You're trying to run";
- gotoxy(54,5); output << "two copies of Avalot";
- gotoxy(54,6); output << "at once.";
- gotoxy(57,8); output << "Although this "; textattr=9; output << "is";
- textattr=3;
- gotoxy(54,9); output << "usually possible, it's";
- gotoxy(54,10); output << "probably more sensible";
- gotoxy(54,11); output << "to type ";
- textattr=7; output << "EXIT ";
- textattr=3; output << "now, which";
- gotoxy(54,12); output << "should return you to the";
- gotoxy(54,13); output << "first copy in memory.";
-
- textattr=11; gotoxy(55,15); output << "BUT:"; textattr=9;
- gotoxy(40,16); output << "If you want to run two copies anyway,";
- gotoxy(40,17); output << "or you think that I've got it wrong,";
- gotoxy(40,18); output << "(even computers can make mistakes!) then";
- gotoxy(40,19); output << "try running the game again, but this time";
- gotoxy(40,20); output << "use "; textattr=7; output << "/i ";
- textattr=9; output << "on the command line.";
- uline();
-
- save();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ textattr = 0;
+ clrscr;
+ assign(f, "c:\\thomas\\ttsmall.fnt");
+ reset(f);
+ f >> font;
+ close(f);
+ textattr = 11;
+ line(1, 3, "Two at");
+ line(3, 7, "once?!");
+ textattr = 9;
+ gotoxy(55, 4);
+ output << string('\4') + '\377';
+ textattr = 3;
+ output << "You're trying to run";
+ gotoxy(54, 5);
+ output << "two copies of Avalot";
+ gotoxy(54, 6);
+ output << "at once.";
+ gotoxy(57, 8);
+ output << "Although this ";
+ textattr = 9;
+ output << "is";
+ textattr = 3;
+ gotoxy(54, 9);
+ output << "usually possible, it's";
+ gotoxy(54, 10);
+ output << "probably more sensible";
+ gotoxy(54, 11);
+ output << "to type ";
+ textattr = 7;
+ output << "EXIT ";
+ textattr = 3;
+ output << "now, which";
+ gotoxy(54, 12);
+ output << "should return you to the";
+ gotoxy(54, 13);
+ output << "first copy in memory.";
+
+ textattr = 11;
+ gotoxy(55, 15);
+ output << "BUT:";
+ textattr = 9;
+ gotoxy(40, 16);
+ output << "If you want to run two copies anyway,";
+ gotoxy(40, 17);
+ output << "or you think that I've got it wrong,";
+ gotoxy(40, 18);
+ output << "(even computers can make mistakes!) then";
+ gotoxy(40, 19);
+ output << "try running the game again, but this time";
+ gotoxy(40, 20);
+ output << "use ";
+ textattr = 7;
+ output << "/i ";
+ textattr = 9;
+ output << "on the command line.";
+ uline();
+
+ save();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scr_9.cpp b/engines/avalanche/scr_9.cpp
index 1fb494257e..f71afd0f61 100644
--- a/engines/avalanche/scr_9.cpp
+++ b/engines/avalanche/scr_9.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,17 +33,19 @@ text t;
string x;
byte fv;
untyped_file f;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- assign(f,"v:paralogo.scr");
- clrscr;
- reset(f,1);
- blockread(f,mem[0xb800*0],4000);
- close(f);
- gotoxy(1,1); insline;
- gotoxy(1,23); clreol;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ assign(f, "v:paralogo.scr");
+ clrscr;
+ reset(f, 1);
+ blockread(f, mem[0xb800 * 0], 4000);
+ close(f);
+ gotoxy(1, 1);
+ insline;
+ gotoxy(1, 23);
+ clreol;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scrolls.cpp b/engines/avalanche/scrolls.cpp
index c109624671..878f8d0f78 100644
--- a/engines/avalanche/scrolls.cpp
+++ b/engines/avalanche/scrolls.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -39,13 +39,13 @@
#include "scrolls.h"
#include "lucerna.h"
- #include "Graph.h"
- /*#include "Crt.h"*/
+#include "Graph.h"
+/*#include "Crt.h"*/
#include "trip5.h"
#include "enhanced.h"
- /*#include "Dos.h"*/
+/*#include "Dos.h"*/
#include "logger.h"
- #include "Acci.h"
+#include "Acci.h"
#include "basher.h"
#include "visa.h"
#include "timeout.h"
@@ -57,753 +57,891 @@ const integer italic = 1;
const integer halficonwidth = 19; /* Half the width of an icon. */
-integer dix,diy;
-array<roman,italic,raw> ch;
+integer dix, diy;
+array<roman, italic, raw> ch;
byte cfont; /* Current font */
-integer dodgex,dodgey;
+integer dodgex, dodgey;
byte param; /* For using arguments code */
byte use_icon;
-void state(byte x) /* Sets "Ready" light to whatever */
-{
- byte page_;
-
- if (ledstatus==x) return; /* Already like that! */
- 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 */
- }
- super_off();
- for( page_=0; page_ <= 1; page_ ++)
- { setactivepage(page_); bar(419,195,438,197); } super_on();
- ledstatus=x;
+void state(byte x) { /* Sets "Ready" light to whatever */
+ byte page_;
+
+ if (ledstatus == x) return; /* Already like that! */
+ 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 */
+ }
+ super_off();
+ for (page_ = 0; page_ <= 1; page_ ++) {
+ setactivepage(page_);
+ bar(419, 195, 438, 197);
+ }
+ super_on();
+ ledstatus = x;
}
-void easteregg()
-{
- word fv,ff;
-
- 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);
- background(0);
+void easteregg() {
+ word fv, ff;
+
+ 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);
+ background(0);
}
-void say(integer x,integer y, string z) /* Fancy FAST screenwriting */
-{
- const integer locol = 2;
- byte xx,yy,ox,bit,lz,t; integer yp; boolean offset;
- matrix<1,12,1,80,byte> itw;
-
- offset=x % 8==4; x=x / 8; lz=length(z); ox=0;
- log_scrollline();
-
- for( xx=1; xx <= lz; xx ++)
- {
- switch (z[xx]) {
- case '\22': { cfont=roman; log_roman(); } break;
- case '\6': { cfont=italic; log_italic(); } break;
- default: {
- ox += 1;
- for( yy=1; yy <= 12; yy ++) itw[yy][ox]=~ ch[cfont][z[xx]][yy+1];
- log_scrollchar(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;
- }
- }
- }
- yp=x+y*80+(1-cp)*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);
- }
- }
+void say(integer x, integer y, string z) { /* Fancy FAST screenwriting */
+ const integer locol = 2;
+ byte xx, yy, ox, bit, lz, t;
+ integer yp;
+ boolean offset;
+ matrix<1, 12, 1, 80, byte> itw;
+
+ offset = x % 8 == 4;
+ x = x / 8;
+ lz = length(z);
+ ox = 0;
+ log_scrollline();
+
+ for (xx = 1; xx <= lz; xx ++) {
+ switch (z[xx]) {
+ case '\22': {
+ cfont = roman;
+ log_roman();
+ }
+ break;
+ case '\6': {
+ cfont = italic;
+ log_italic();
+ }
+ break;
+ default: {
+ ox += 1;
+ for (yy = 1; yy <= 12; yy ++) itw[yy][ox] = ~ ch[cfont][z[xx]][yy + 1];
+ log_scrollchar(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;
+ }
+ }
+ }
+ yp = x + y * 80 + (1 - cp) * 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);
+ }
+ }
}
/* Here are the procedures that Scroll calls */ /* So they must be... */ /*$F+*/
-void normscroll()
-{
- const array<1,8,char> egg = string("\20\f\25\7\b")+"***";
- const array<1,8,char> e = "(c) 1994";
- char r;
- boolean oktoexit;
-
- state(3); seescroll=true;
- off_virtual();
- on(); newpointer(4);
- mousepage(1-cp);
-
- if (demo) get_demorec();
-
- do {
- do {
- check(); /* was "checkclick;" */
-
- #ifdef RECORD slowdown(); basher::count += 1; #endif
-
- if (demo)
- {
- if (demo_ready()) flush();
- if (keypressede()) exit(0);
- } else
- if (keypressede()) flush();
- } while (!((mrelease>0) || (buttona1()) || (buttonb1())));
-
-
- if (mrelease==0)
- {
- inkey();
- if (aboutscroll)
- {
- move(e[2-1],e[1-1],7);
- e[8-1]=inchar;
- if (egg==e) easteregg();
- }
- oktoexit=set::of('\15','\33','+','#', eos).has(inchar);
- if (! oktoexit) errorled();
- }
-
- } while (!((oktoexit) || (mrelease>0)));
- #ifdef RECORD record_one(); #endif
- screturn=r=='#'; /* "back door" */
- state(0); seescroll=false; mousepage(cp); off();
+void normscroll() {
+ const array<1, 8, char> egg = string("\20\f\25\7\b") + "***";
+ const array<1, 8, char> e = "(c) 1994";
+ char r;
+ boolean oktoexit;
+
+ state(3);
+ seescroll = true;
+ off_virtual();
+ on();
+ newpointer(4);
+ mousepage(1 - cp);
+
+ if (demo) get_demorec();
+
+ do {
+ do {
+ check(); /* was "checkclick;" */
+
+#ifdef RECORD slowdown(); basher::count += 1; #endif
+
+ if (demo) {
+ if (demo_ready()) flush();
+ if (keypressede()) exit(0);
+ } else if (keypressede()) flush();
+ } while (!((mrelease > 0) || (buttona1()) || (buttonb1())));
+
+
+ if (mrelease == 0) {
+ inkey();
+ if (aboutscroll) {
+ move(e[2 - 1], e[1 - 1], 7);
+ e[8 - 1] = inchar;
+ if (egg == e) easteregg();
+ }
+ oktoexit = set::of('\15', '\33', '+', '#', eos).has(inchar);
+ if (! oktoexit) errorled();
+ }
+
+ } while (!((oktoexit) || (mrelease > 0)));
+#ifdef RECORD record_one(); #endif
+ screturn = r == '#'; /* "back door" */
+ state(0);
+ seescroll = false;
+ mousepage(cp);
+ off();
}
-void dialogue()
-{
- char r;
-
- state(3); seescroll=true; r='\0';
- newpointer(6); on();
- mousepage(1-cp);
- do {
- do {
- check();
- if (mrelease>0)
- {
- if ((mx>=(cardinal)dix-65) && (my>=(cardinal)diy-24) && (mx<=(cardinal)dix- 5) && (my<=(cardinal)diy-10))
- r='Y';
- if ((mx>=(cardinal)dix+ 5) && (my>=(cardinal)diy-24) && (mx<=(cardinal)dix+65) && (my<=(cardinal)diy-10))
- r='N';
- } else
- if (keypressede())
- {
- inkey();
- r=upcase(inchar);
- }
- } while (!(r!='\0'));
- } while (!(set::of('Y','N','O','J', eos).has(r))); /* Yes, Ja, Oui, or No, Non, Nein */
- screturn=r!='N';
- state(0); seescroll=false; mousepage(cp); off();
+void dialogue() {
+ char r;
+
+ state(3);
+ seescroll = true;
+ r = '\0';
+ newpointer(6);
+ on();
+ mousepage(1 - cp);
+ do {
+ do {
+ check();
+ if (mrelease > 0) {
+ if ((mx >= (cardinal)dix - 65) && (my >= (cardinal)diy - 24) && (mx <= (cardinal)dix - 5) && (my <= (cardinal)diy - 10))
+ r = 'Y';
+ if ((mx >= (cardinal)dix + 5) && (my >= (cardinal)diy - 24) && (mx <= (cardinal)dix + 65) && (my <= (cardinal)diy - 10))
+ r = 'N';
+ } else if (keypressede()) {
+ inkey();
+ r = upcase(inchar);
+ }
+ } while (!(r != '\0'));
+ } while (!(set::of('Y', 'N', 'O', 'J', eos).has(r))); /* Yes, Ja, Oui, or No, Non, Nein */
+ screturn = r != 'N';
+ state(0);
+ seescroll = false;
+ mousepage(cp);
+ off();
}
void music_scroll();
-static void store_(byte what, tunetype& played)
-{
- move(played[2],played[1],sizeof(played)-1);
- played[31]=what;
+static void store_(byte what, tunetype &played) {
+ move(played[2], played[1], sizeof(played) - 1);
+ played[31] = what;
}
-static boolean they_match(tunetype& played)
-{
- byte fv,mistakes;
+static boolean they_match(tunetype &played) {
+ byte fv, mistakes;
- boolean they_match_result;
- mistakes=0;
+ boolean they_match_result;
+ mistakes = 0;
- for( fv=1; fv <= sizeof(played); fv ++)
- if (played[fv]!=tune[fv])
- {
- mistakes += 1;
- }
+ for (fv = 1; fv <= sizeof(played); fv ++)
+ if (played[fv] != tune[fv]) {
+ mistakes += 1;
+ }
- they_match_result=mistakes<5;
- return they_match_result;
+ they_match_result = mistakes < 5;
+ return they_match_result;
}
-void music_scroll()
-{
- char r;
- byte value;
+void music_scroll() {
+ char r;
+ byte value;
- byte last_one,this_one;
+ byte last_one, this_one;
- tunetype played;
+ tunetype played;
- state(3); seescroll=true; on();
- newpointer(4);
- do {
- do {
- check(); /* was "checkclick;" */
- if (keypressede()) flush();
- } while (!((mpress>0) || (buttona1()) || (buttonb1())));
+ state(3);
+ seescroll = true;
+ on();
+ newpointer(4);
+ do {
+ do {
+ check(); /* was "checkclick;" */
+ if (keypressede()) flush();
+ } while (!((mpress > 0) || (buttona1()) || (buttonb1())));
- if (mpress==0)
- {
- inkey();
- r=upcase(inchar); if (r=='Z') r='Y'; /* Euro keyboards */
+ if (mpress == 0) {
+ inkey();
+ r = upcase(inchar);
+ if (r == 'Z') r = 'Y'; /* Euro keyboards */
- value=pos(r,keys);
+ value = pos(r, keys);
- if (value>0)
- {
+ if (value > 0) {
- last_one=this_one;
- this_one=value;
+ last_one = this_one;
+ this_one = value;
- sound(notes[this_one]);
- delay(100);
- nosound;
+ sound(notes[this_one]);
+ delay(100);
+ nosound;
- if (! dna.ringing_bells)
- { /* These handle playing the right tune. */
+ if (! dna.ringing_bells) {
+ /* These handle playing the right tune. */
- if (this_one<last_one)
- store_(lower, played); else
+ if (this_one < last_one)
+ store_(lower, played);
+ else
- if (this_one==last_one)
- store_(same, played); else
+ if (this_one == last_one)
+ store_(same, played);
+ else
- store_(higher, played);
+ store_(higher, played);
- if (they_match(played))
- {
- screturn=true;
- off();
- state(0); seescroll=false;
+ if (they_match(played)) {
+ screturn = true;
+ off();
+ state(0);
+ seescroll = false;
- set_up_timer(8,procjacques_wakes_up,reason_jacques_waking_up);
- return;
- }
+ set_up_timer(8, procjacques_wakes_up, reason_jacques_waking_up);
+ return;
+ }
- }
+ }
- }
+ }
- }
+ }
- } while (!((set::of('\15','\33','+','#', eos).has(r)) || (mpress>0)));
- screturn=false;
- off();
- state(0); seescroll=false;
+ } while (!((set::of('\15', '\33', '+', '#', eos).has(r)) || (mpress > 0)));
+ screturn = false;
+ off();
+ state(0);
+ seescroll = false;
}
/* ThatsAll, so put us back to */ /*$F-*/
-void resetscrolldriver() /* phew */
-{
- scrollbells=0; cfont=roman; log_epsonroman(); use_icon=0;
- interrogation=0; /* always reset after a scroll comes up. */
+void resetscrolldriver() { /* phew */
+ scrollbells = 0;
+ cfont = roman;
+ log_epsonroman();
+ use_icon = 0;
+ interrogation = 0; /* always reset after a scroll comes up. */
}
-void dingdongbell() /* Pussy's in the well. Who put her in? Little... */
-{
- byte fv;
+void dingdongbell() { /* Pussy's in the well. Who put her in? Little... */
+ byte fv;
- for( fv=1; fv <= scrollbells; fv ++) errorled(); /* ring the bell "x" times */
+ for (fv = 1; fv <= scrollbells; fv ++) errorled(); /* ring the bell "x" times */
}
void dodgem() /* This moves the mouse pointer off the scroll so that
you can read it. */
{
- xycheck(); /* Mx & my now contain xy pos of mouse */
- dodgex=mx; dodgey=my; /* Store 'em */
- hopto(dodgex,underscroll); /* Move the pointer off the scroll. */
+ xycheck(); /* Mx & my now contain xy pos of mouse */
+ dodgex = mx;
+ dodgey = my; /* Store 'em */
+ hopto(dodgex, underscroll); /* Move the pointer off the scroll. */
}
void undodgem() /* This is the opposite of Dodgem. It moves the
mouse pointer back, IF you haven't moved it in the meantime. */
{
- xycheck();
- if ((mx==(cardinal)dodgex) && (my==(cardinal)underscroll))
- /* No change, so restore the pointer's original position. */
- hopto(dodgex,dodgey);
+ xycheck();
+ if ((mx == (cardinal)dodgex) && (my == (cardinal)underscroll))
+ /* No change, so restore the pointer's original position. */
+ hopto(dodgex, dodgey);
}
-void geticon(integer x,integer y, byte which)
-{
- untyped_file f;
- pointer p;
-
- assign(f,"icons.avd");
- reset(f,1);
- which -= 1;
- seek(f,which*426);
- getmem(p,426);
- blockread(f,p,426);
- putimage(x,y,p,0);
- freemem(p,426);
- close(f);
+void geticon(integer x, integer y, byte which) {
+ untyped_file f;
+ pointer p;
+
+ assign(f, "icons.avd");
+ reset(f, 1);
+ which -= 1;
+ seek(f, which * 426);
+ getmem(p, 426);
+ blockread(f, p, 426);
+ putimage(x, y, p, 0);
+ freemem(p, 426);
+ close(f);
}
-void block_drop(string fn, integer xl,integer yl,integer y)
-{
- untyped_file f; byte bit;
- integer fv; word st;
-
- st=(y-1)*80+(40-xl / 2)+((1-cp)*pagetop);
-
- assign(f,fn+".avd");
- reset(f,1);
-
- for( fv=1; fv <= yl; fv ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,mem[0xa000*st+(fv*80)],xl);
- }
-
- close(f);
- bit=getpixel(0,0);
+void block_drop(string fn, integer xl, integer yl, integer y) {
+ untyped_file f;
+ byte bit;
+ integer fv;
+ word st;
+
+ st = (y - 1) * 80 + (40 - xl / 2) + ((1 - cp) * pagetop);
+
+ assign(f, fn + ".avd");
+ reset(f, 1);
+
+ for (fv = 1; fv <= yl; fv ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, mem[0xa000 * st + (fv * 80)], xl);
+ }
+
+ close(f);
+ bit = getpixel(0, 0);
}
-void drawscroll(proc gotoit) /* This is one of the oldest procs in the game. */
-{
- byte b,groi; integer lx,ly,mx,my,ex,ey; boolean centre;
- byte icon_indent;
+void drawscroll(proc gotoit) { /* This is one of the oldest procs in the game. */
+ byte b, groi;
+ integer lx, ly, mx, my, ex, ey;
+ boolean centre;
+ byte icon_indent;
- off_virtual();
- setvisualpage(cp); setactivepage(1-cp);
- oncandopageswap=false; /* On can now no longer swap pages. So we can
+ off_virtual();
+ setvisualpage(cp);
+ setactivepage(1 - cp);
+ oncandopageswap = false; /* On can now no longer swap pages. So we can
do what we want without its interference! */
- log_epsonroman(); /* Scrolls always START with Roman. */
- lx=0; ly=scrolln*6;
- for( b=1; b <= scrolln; b ++)
- {
- ex=length(scroll[b])*8; if (lx<ex) lx=ex;
- }
- mx=320; my=100; /* Getmaxx & getmaxy div 2, both. */
- lx=lx / 2; ly -= 2;
-
- if (set::of(range(1,34), eos).has(use_icon)) lx += halficonwidth;
-
- off();
-/* mblit(mx-lx-46,my-ly-6,mx+lx+15,my+ly+6,0,3);*/
- setfillstyle(1,7);
- setcolor(7);
- pieslice(mx+lx,my-ly,360,90,15);
- pieslice(mx+lx,my+ly,270,360,15);
- setcolor(4);
- arc(mx+lx,my-ly,360,90,15);
- arc(mx+lx,my+ly,270,360,15);
- bar(mx-lx-30,my+ly+6,mx+lx,my+ly);
- bar(mx-lx-30,my-ly-6,mx+lx,my-ly);
- bar(mx-lx-15,my-ly,mx+lx+15,my+ly);
- setfillstyle(1,8);
- pieslice(mx-lx-31,my-ly,360,180,15);
- pieslice(mx-lx-31,my+ly,180,360,15);
- setfillstyle(1,4);
- bar(mx-lx-30,my-ly-6,mx+lx,my-ly-6);
- bar(mx-lx-30,my+ly+6,mx+lx,my+ly+6);
- bar(mx-lx-15,my-ly,mx-lx-15,my+ly);
- bar(mx+lx+15,my-ly,mx+lx+15,my+ly);
- ex=mx-lx; ey=my-ly;
- mx -= lx; my -= ly+2;
- setcolor(0); centre=false;
-
- switch (use_icon) {
- case 0: icon_indent=0; break; /* No icon. */
- case 1 ... 33: { /* Standard icon */
- geticon(mx,my+ly / 2,use_icon);
- icon_indent=53;
- }
- break;
- case 34: { block_drop("about",28,76,15); icon_indent=0; } break;
- case 35: { block_drop("gameover",52,59,71); icon_indent=0; } break;
- }
-
- for( b=1; b <= scrolln; b ++)
- {
- switch (scroll[b][length(scroll[b])]) {
- case '\3' : { centre=true; scroll[b][0] -= 1; } break;
- case '\14' : { centre=false; scroll[b][0] -= 1; } break;
- case '\21' : { settextjustify(1,1);
- dix=mx+lx; diy=my+ly; scroll[b][1]='\40'; groi=getpixel(0,0);
-/* inc(diy,14);*/
- shbox(dix-65,diy-24,dix- 5,diy-10,"Yes.");
- shbox(dix+ 5,diy-24,dix+65,diy-10,"No.");
- }
- break;
- }
-
- if (centre)
- say(320-length(scroll[b])*4+icon_indent,my,scroll[b]);
- else
- say(mx+icon_indent,my,scroll[b]);
- log_scrollendline(centre);
- my += 12;
- }
-
- underscroll=my+3;
- setvisualpage(1-cp); dingdongbell();
- my=getpixel(0,0); dropsok=false; dodgem();
-
- gotoit();
-
- undodgem(); dropsok=true;
- log_divider();
- setvisualpage(cp); mousepage(cp); off();
-/* mblit(ex-46,ey-6,ex+lx*2+15,ey+ly*2+6,3,0);*/
- mblit((ex-46) / 8,ey-6,1+(ex+lx*2+15) / 8,ey+ly*2+6,cp,1-cp);
- blitfix();
- oncandopageswap=true; /* Normality again */
- on(); settextjustify(0,0); /*sink*/
- resetscrolldriver();
- if (mpress>0) after_the_scroll=true;
+ log_epsonroman(); /* Scrolls always START with Roman. */
+ lx = 0;
+ ly = scrolln * 6;
+ for (b = 1; b <= scrolln; b ++) {
+ ex = length(scroll[b]) * 8;
+ if (lx < ex) lx = ex;
+ }
+ mx = 320;
+ my = 100; /* Getmaxx & getmaxy div 2, both. */
+ lx = lx / 2;
+ ly -= 2;
+
+ if (set::of(range(1, 34), eos).has(use_icon)) lx += halficonwidth;
+
+ off();
+ /* mblit(mx-lx-46,my-ly-6,mx+lx+15,my+ly+6,0,3);*/
+ setfillstyle(1, 7);
+ setcolor(7);
+ pieslice(mx + lx, my - ly, 360, 90, 15);
+ pieslice(mx + lx, my + ly, 270, 360, 15);
+ setcolor(4);
+ arc(mx + lx, my - ly, 360, 90, 15);
+ arc(mx + lx, my + ly, 270, 360, 15);
+ bar(mx - lx - 30, my + ly + 6, mx + lx, my + ly);
+ bar(mx - lx - 30, my - ly - 6, mx + lx, my - ly);
+ bar(mx - lx - 15, my - ly, mx + lx + 15, my + ly);
+ setfillstyle(1, 8);
+ pieslice(mx - lx - 31, my - ly, 360, 180, 15);
+ pieslice(mx - lx - 31, my + ly, 180, 360, 15);
+ setfillstyle(1, 4);
+ bar(mx - lx - 30, my - ly - 6, mx + lx, my - ly - 6);
+ bar(mx - lx - 30, my + ly + 6, mx + lx, my + ly + 6);
+ bar(mx - lx - 15, my - ly, mx - lx - 15, my + ly);
+ bar(mx + lx + 15, my - ly, mx + lx + 15, my + ly);
+ ex = mx - lx;
+ ey = my - ly;
+ mx -= lx;
+ my -= ly + 2;
+ setcolor(0);
+ centre = false;
+
+ switch (use_icon) {
+ case 0:
+ icon_indent = 0;
+ break; /* No icon. */
+ case 1 ... 33: { /* Standard icon */
+ geticon(mx, my + ly / 2, use_icon);
+ icon_indent = 53;
+ }
+ break;
+ case 34: {
+ block_drop("about", 28, 76, 15);
+ icon_indent = 0;
+ }
+ break;
+ case 35: {
+ block_drop("gameover", 52, 59, 71);
+ icon_indent = 0;
+ }
+ break;
+ }
+
+ for (b = 1; b <= scrolln; b ++) {
+ switch (scroll[b][length(scroll[b])]) {
+ case '\3' : {
+ centre = true;
+ scroll[b][0] -= 1;
+ }
+ break;
+ case '\14' : {
+ centre = false;
+ scroll[b][0] -= 1;
+ }
+ break;
+ case '\21' : {
+ settextjustify(1, 1);
+ dix = mx + lx;
+ diy = my + ly;
+ scroll[b][1] = '\40';
+ groi = getpixel(0, 0);
+ /* inc(diy,14);*/
+ shbox(dix - 65, diy - 24, dix - 5, diy - 10, "Yes.");
+ shbox(dix + 5, diy - 24, dix + 65, diy - 10, "No.");
+ }
+ break;
+ }
+
+ if (centre)
+ say(320 - length(scroll[b]) * 4 + icon_indent, my, scroll[b]);
+ else
+ say(mx + icon_indent, my, scroll[b]);
+ log_scrollendline(centre);
+ my += 12;
+ }
+
+ underscroll = my + 3;
+ setvisualpage(1 - cp);
+ dingdongbell();
+ my = getpixel(0, 0);
+ dropsok = false;
+ dodgem();
+
+ gotoit();
+
+ undodgem();
+ dropsok = true;
+ log_divider();
+ setvisualpage(cp);
+ mousepage(cp);
+ off();
+ /* mblit(ex-46,ey-6,ex+lx*2+15,ey+ly*2+6,3,0);*/
+ mblit((ex - 46) / 8, ey - 6, 1 + (ex + lx * 2 + 15) / 8, ey + ly * 2 + 6, cp, 1 - cp);
+ blitfix();
+ oncandopageswap = true; /* Normality again */
+ on();
+ settextjustify(0, 0); /*sink*/
+ resetscrolldriver();
+ if (mpress > 0) after_the_scroll = true;
}
-void bubble(proc gotoit)
-{
- integer xl,yl,my,xw,yw; byte fv; array<1,3,pointtype> p;
- pointer rp1,rp2; /* replace: 1=bubble, 2=pointer */
- integer xc; /* x correction */
+void bubble(proc gotoit) {
+ integer xl, yl, my, xw, yw;
+ byte fv;
+ array<1, 3, pointtype> p;
+ pointer rp1, rp2; /* replace: 1=bubble, 2=pointer */
+ integer xc; /* x correction */
- setvisualpage(cp); setactivepage(1-cp);
- oncandopageswap=false; /* On can now no longer swap pages. So we can
+ setvisualpage(cp);
+ setactivepage(1 - cp);
+ oncandopageswap = false; /* On can now no longer swap pages. So we can
do what we want without its interference! */
- mousepage(1-cp); /* Mousepage */
-
- setfillstyle(1,talkb); setcolor(talkb); off();
-
- xl=0; yl=scrolln*5;
- for( fv=1; fv <= scrolln; fv ++)
- if (textwidth(scroll[fv])>xl) xl=textwidth(scroll[fv]);
- xl=xl / 2;
-
- xw=xl+18; yw=yl+7;
- my=yw*2-2; xc=0;
-
- if ((talkx-xw)<0) xc=-(talkx-xw);
- if ((talkx+xw)>639) xc=639-(talkx+xw);
-
- p[1].x=talkx-10; p[1].y=yw;
- p[2].x=talkx+10; p[2].y=yw;
- p[3].x=talkx; p[3].y=talky;
-
-/* mblit(talkx-xw+xc,7,talkx+xw+xc,my,0,3);
- mblit(talkx-10,my,talkx+10,talky,0,3);*/
- bar(xc+talkx-xw+10,7,talkx+xw-10+xc,my);
- bar(xc+talkx-xw,12,talkx+xw+xc,my-5);
- pieslice(xc+talkx+xw-10,12,360,90,9); /* TR */
- pieslice(xc+talkx+xw-10,my-5,270,360,9); /* BR */
- pieslice(xc+talkx-xw+10,12,90,180,9); /* TL */
- pieslice(xc+talkx-xw+10,my-5,180,270,9); /* BL */
- fillpoly(3,p.body());
-
- setcolor(talkf); yl -= 3; settextjustify(1,2);
- for( fv=0; fv <= scrolln-1; fv ++)
- outtextxy(talkx+xc,(fv*10)+12,scroll[fv+1]);
- for( fv=1; fv <= scrolln; fv ++) /* These should be separate loops. */
- log_bubbleline(fv,param,scroll[fv]);
- log_divider();
-
- setvisualpage(1-cp);
- dingdongbell();
- oncandopageswap=false;
- on(); dropsok=false; gotoit(); off(); dropsok=true;
- mblit((talkx-xw+xc) / 8,7,1+(talkx+xw+xc) / 8,my,3,1-cp);
- mblit((talkx-10) / 8,my,1+(talkx+10) / 8,talky,3,1-cp);
- blitfix();
-
- setvisualpage(cp);
- settextjustify(0,0); on(); /*sink;*/
- oncandopageswap=true;
- resetscrolldriver();
- if (mpress>0) after_the_scroll=true;
+ mousepage(1 - cp); /* Mousepage */
+
+ setfillstyle(1, talkb);
+ setcolor(talkb);
+ off();
+
+ xl = 0;
+ yl = scrolln * 5;
+ for (fv = 1; fv <= scrolln; fv ++)
+ if (textwidth(scroll[fv]) > xl) xl = textwidth(scroll[fv]);
+ xl = xl / 2;
+
+ xw = xl + 18;
+ yw = yl + 7;
+ my = yw * 2 - 2;
+ xc = 0;
+
+ if ((talkx - xw) < 0) xc = -(talkx - xw);
+ if ((talkx + xw) > 639) xc = 639 - (talkx + xw);
+
+ p[1].x = talkx - 10;
+ p[1].y = yw;
+ p[2].x = talkx + 10;
+ p[2].y = yw;
+ p[3].x = talkx;
+ p[3].y = talky;
+
+ /* mblit(talkx-xw+xc,7,talkx+xw+xc,my,0,3);
+ mblit(talkx-10,my,talkx+10,talky,0,3);*/
+ bar(xc + talkx - xw + 10, 7, talkx + xw - 10 + xc, my);
+ bar(xc + talkx - xw, 12, talkx + xw + xc, my - 5);
+ pieslice(xc + talkx + xw - 10, 12, 360, 90, 9); /* TR */
+ pieslice(xc + talkx + xw - 10, my - 5, 270, 360, 9); /* BR */
+ pieslice(xc + talkx - xw + 10, 12, 90, 180, 9); /* TL */
+ pieslice(xc + talkx - xw + 10, my - 5, 180, 270, 9); /* BL */
+ fillpoly(3, p.body());
+
+ setcolor(talkf);
+ yl -= 3;
+ settextjustify(1, 2);
+ for (fv = 0; fv <= scrolln - 1; fv ++)
+ outtextxy(talkx + xc, (fv * 10) + 12, scroll[fv + 1]);
+ for (fv = 1; fv <= scrolln; fv ++) /* These should be separate loops. */
+ log_bubbleline(fv, param, scroll[fv]);
+ log_divider();
+
+ setvisualpage(1 - cp);
+ dingdongbell();
+ oncandopageswap = false;
+ on();
+ dropsok = false;
+ gotoit();
+ off();
+ dropsok = true;
+ mblit((talkx - xw + xc) / 8, 7, 1 + (talkx + xw + xc) / 8, my, 3, 1 - cp);
+ mblit((talkx - 10) / 8, my, 1 + (talkx + 10) / 8, talky, 3, 1 - cp);
+ blitfix();
+
+ setvisualpage(cp);
+ settextjustify(0, 0);
+ on(); /*sink;*/
+ oncandopageswap = true;
+ resetscrolldriver();
+ if (mpress > 0) after_the_scroll = true;
}
-boolean ask(string question)
-{
- boolean ask_result;
- display(question+'\15'+'\21');
- if (screturn && (Random(2)==0)) /* half-and-half chance */
- {
- display("...Positive about that?\23I\26\r\21"); /* be annoying! */
- if (screturn && (Random(4)==3)) /* another 25% chance */
- display("\n100% certain\??!\n\26\r\21"); /* be very annoying! */
- }
- ask_result=screturn;
- return ask_result;
+boolean ask(string question) {
+ boolean ask_result;
+ display(question + '\15' + '\21');
+ if (screturn && (Random(2) == 0)) { /* half-and-half chance */
+ display("...Positive about that?\23I\26\r\21"); /* be annoying! */
+ if (screturn && (Random(4) == 3)) /* another 25% chance */
+ display("\n100% certain\??!\n\26\r\21"); /* be very annoying! */
+ }
+ ask_result = screturn;
+ return ask_result;
}
-void resetscroll()
-{
- scrolln=1; fillchar(scroll,sizeof(scroll),'\0');
+void resetscroll() {
+ scrolln = 1;
+ fillchar(scroll, sizeof(scroll), '\0');
}
-void natural() /* Natural state of bubbles */
-{
- talkx=320; talky=200; talkb=8; talkf=15;
+void natural() { /* Natural state of bubbles */
+ talkx = 320;
+ talky = 200;
+ talkb = 8;
+ talkf = 15;
}
-string lsd()
-{
- string x;
-
- string lsd_result;
- if (dna.pence<12)
- { /* just pence */
- x=strf(dna.pence)+'d';
- } else
- if (dna.pence<240)
- { /* shillings & pence */
- x=strf(dna.pence / longint(12))+'/';
- if ((dna.pence % longint(12))==0) x=x+'-'; else x=x+strf(dna.pence % longint(12));
- } else /* L, s & d */
- x=string('œ')+strf(dna.pence / longint(240))+'.'+strf((dna.pence / longint(12)) % longint(20))+'.'+
- strf(dna.pence % longint(12));
- if (dna.pence>12) x=x+" (that's "+strf(dna.pence)+"d)";
- lsd_result=x;
- return lsd_result;
+string lsd() {
+ string x;
+
+ string lsd_result;
+ if (dna.pence < 12) {
+ /* just pence */
+ x = strf(dna.pence) + 'd';
+ } else if (dna.pence < 240) {
+ /* shillings & pence */
+ x = strf(dna.pence / longint(12)) + '/';
+ if ((dna.pence % longint(12)) == 0) x = x + '-';
+ else x = x + strf(dna.pence % longint(12));
+ } else /* L, s & d */
+ x = string('œ') + strf(dna.pence / longint(240)) + '.' + strf((dna.pence / longint(12)) % longint(20)) + '.' +
+ strf(dna.pence % longint(12));
+ if (dna.pence > 12) x = x + " (that's " + strf(dna.pence) + "d)";
+ lsd_result = x;
+ return lsd_result;
}
void calldrivers();
- /* Was the mouse cursor virtual on entry to this proc? */
+/* Was the mouse cursor virtual on entry to this proc? */
-static void strip(string& q)
-{
- while (pos("\40",q[length(q)])>0) q[0] -= 1; /* strip trailing spaces */
+static void strip(string &q) {
+ while (pos("\40", q[length(q)]) > 0) q[0] -= 1; /* strip trailing spaces */
}
-static void solidify(byte n)
-{
- if (pos("\40",scroll[n])==0) return; /* no spaces */
- /* so there MUST be a space there, somewhere... */
- do {
- scroll[n+1]=string(scroll[n][length(scroll[n])])+scroll[n+1];
- scroll[n][0] -= 1;
- } while (!(scroll[n][length(scroll[n])]=='\40'));
- strip(scroll[n]);
+static void solidify(byte n) {
+ if (pos("\40", scroll[n]) == 0) return; /* no spaces */
+ /* so there MUST be a space there, somewhere... */
+ do {
+ scroll[n + 1] = string(scroll[n][length(scroll[n])]) + scroll[n + 1];
+ scroll[n][0] -= 1;
+ } while (!(scroll[n][length(scroll[n])] == '\40'));
+ strip(scroll[n]);
}
-void calldrivers()
-{
- word fv; byte nn; char nnn; boolean mouthnext;
- boolean call_spriterun; /* Only call sprite_run the FIRST time. */
-
- boolean was_virtual;
-
-
- nosound; state(0); screturn=false; mouthnext=false;
- call_spriterun=true;
-
- switch (buffer[bufsize]) {
- case '\4': bufsize -= 1; break; /* ^D = (D)on't include pagebreak */
- case '\2':case '\21':; break; /* ^B = speech (B)ubble, ^Q = (Q)uestion in dialogue box */
- default: {
- bufsize += 1; buffer[bufsize]='\20';
- }
- }
- for( fv=1; fv <= bufsize; fv ++)
- if (mouthnext)
- {
- if (buffer[fv]=='\23') param=0; else
- switch (buffer[fv]) {
- case RANGE_10('0','9'): param=ord(buffer[fv])-48;
- break;
- case RANGE_26('A','Z'): param=ord(buffer[fv])-55;
- break;
- }
- mouthnext=false;
- } else
- switch (buffer[fv]) {
- case '\20': {
- if ((scrolln==1) && (scroll[1]=="")) flush();
-
- if (call_spriterun) sprite_run();
- call_spriterun=false;
-
- was_virtual=visible==m_virtual;
- if (was_virtual) off_virtual();
- drawscroll(normscroll);
- if (was_virtual) on_virtual();
- resetscroll();
- if (screturn) return;
- }
- break;
- case '\7': scrollbells += 1; break; /* #7 = "Bel" */
- case '\2': {
- if ((scrolln==1) && (scroll[1]=="")) flush();
-
- if (call_spriterun) sprite_run();
- call_spriterun=false;
- switch (param) {
- case 0: natural(); break; /* Not attached: generic bubble with no speaker. */
- case RANGE_9(1,9): if ((param>numtr) || (! tr[param].quick))
- { /* not valid */
- errorled();
- natural();
- }
- else tr[param].chatter();
- break; /* Normal sprite talking routine. */
- case 10 ... 36: {
- quasiped_type& with = quasipeds[param];
- /* Quasi-peds. (This routine performs the same
- thing with QPs as triptype.chatter does with the
- sprites.) */
- {
- pedtype& with1 = peds[with.whichped];
-
- talkx=with1.x; talky=with1.y; /* Position. */
- }
- talkf=with.fgc; talkb=with.bgc; /* Colours. */
- }
- break;
- default: { errorled(); natural(); } /* not valid */
- }
-
- was_virtual=visible==m_virtual;
- if (was_virtual) off_virtual();
- bubble(normscroll);
- if (was_virtual) on_virtual();
- resetscroll();
- if (screturn) return;
- }
- break;
- case '\25': {
- { dnatype& with = dna;
- switch (param) {
- case 1: display(lsd()+'\4'); break; /* insert cash balance (recursion) */
- case 2: display(words[first_password+with.pass_num].w+'\4'); break;
- case 3: display(with.like2drink+'\4'); break;
- case 4: display(with.favourite_song+'\4'); break;
- case 5: display(with.worst_place_on_earth+'\4'); break;
- case 6: display(with.spare_evening+'\4'); break;
- /* ... */
- case 9: display(strf(with.cat_x)+','+strf(with.cat_y)+'\4'); break;
- case 10: switch (with.box_contents) {
- case '\0': { /* Sixpence. */
- dixi('q',37); /* You find the sixpence. */
- with.pence += 6;
- with.box_contents=nowt;
- points(2); return;
- }
- break;
- case nowt: display("nothing at all. It's completely empty."); break;
- default: display(get_better(with.box_contents)+'.');
- }
- break;
- case 11: {
- nn=1;
- for( nnn='\1'; nnn <= numobjs; nnn ++)
- if (with.obj[nnn])
- {
- nn += 1;
- display(get_better(nnn)+", "+'\4');
- }
- }
- break;
- }}
- }
- break;
- case '\26': use_icon=param; break;
- case '\15': scrolln += 1; break;
- case '\21': {
- if (call_spriterun) sprite_run();
- call_spriterun=false;
-
- scrolln += 1; scroll[scrolln]='\21';
- was_virtual=visible==m_virtual;
- if (was_virtual) off_virtual();
- drawscroll(dialogue);
- if (was_virtual) on_virtual();
- resetscroll();
- }
- break;
- case '\23' : mouthnext=true; break;
- case '\11' : for( nn=1; nn <= 9; nn ++) scroll[scrolln]=scroll[scrolln]+' ';
- break;
- default:
- { /* add new char */
- if (length(scroll[scrolln])==50)
- {
- solidify(scrolln);
- scrolln += 1;
- }
- scroll[scrolln]=scroll[scrolln]+buffer[fv];
- }
- }
+void calldrivers() {
+ word fv;
+ byte nn;
+ char nnn;
+ boolean mouthnext;
+ boolean call_spriterun; /* Only call sprite_run the FIRST time. */
+
+ boolean was_virtual;
+
+
+ nosound;
+ state(0);
+ screturn = false;
+ mouthnext = false;
+ call_spriterun = true;
+
+ switch (buffer[bufsize]) {
+ case '\4':
+ bufsize -= 1;
+ break; /* ^D = (D)on't include pagebreak */
+ case '\2':
+ case '\21':
+ ;
+ break; /* ^B = speech (B)ubble, ^Q = (Q)uestion in dialogue box */
+ default: {
+ bufsize += 1;
+ buffer[bufsize] = '\20';
+ }
+ }
+ for (fv = 1; fv <= bufsize; fv ++)
+ if (mouthnext) {
+ if (buffer[fv] == '\23') param = 0;
+ else
+ switch (buffer[fv]) {
+ case RANGE_10('0', '9'):
+ param = ord(buffer[fv]) - 48;
+ break;
+ case RANGE_26('A', 'Z'):
+ param = ord(buffer[fv]) - 55;
+ break;
+ }
+ mouthnext = false;
+ } else
+ switch (buffer[fv]) {
+ case '\20': {
+ if ((scrolln == 1) && (scroll[1] == "")) flush();
+
+ if (call_spriterun) sprite_run();
+ call_spriterun = false;
+
+ was_virtual = visible == m_virtual;
+ if (was_virtual) off_virtual();
+ drawscroll(normscroll);
+ if (was_virtual) on_virtual();
+ resetscroll();
+ if (screturn) return;
+ }
+ break;
+ case '\7':
+ scrollbells += 1;
+ break; /* #7 = "Bel" */
+ case '\2': {
+ if ((scrolln == 1) && (scroll[1] == "")) flush();
+
+ if (call_spriterun) sprite_run();
+ call_spriterun = false;
+ switch (param) {
+ case 0:
+ natural();
+ break; /* Not attached: generic bubble with no speaker. */
+ case RANGE_9(1, 9):
+ if ((param > numtr) || (! tr[param].quick)) {
+ /* not valid */
+ errorled();
+ natural();
+ } else tr[param].chatter();
+ break; /* Normal sprite talking routine. */
+ case 10 ... 36: {
+ quasiped_type &with = quasipeds[param];
+ /* Quasi-peds. (This routine performs the same
+ thing with QPs as triptype.chatter does with the
+ sprites.) */
+ {
+ pedtype &with1 = peds[with.whichped];
+
+ talkx = with1.x;
+ talky = with1.y; /* Position. */
+ }
+ talkf = with.fgc;
+ talkb = with.bgc; /* Colours. */
+ }
+ break;
+ default: {
+ errorled(); /* not valid */
+ natural();
+ }
+ }
+
+ was_virtual = visible == m_virtual;
+ if (was_virtual) off_virtual();
+ bubble(normscroll);
+ if (was_virtual) on_virtual();
+ resetscroll();
+ if (screturn) return;
+ }
+ break;
+ case '\25': {
+ {
+ dnatype &with = dna;
+ switch (param) {
+ case 1:
+ display(lsd() + '\4');
+ break; /* insert cash balance (recursion) */
+ case 2:
+ display(words[first_password + with.pass_num].w + '\4');
+ break;
+ case 3:
+ display(with.like2drink + '\4');
+ break;
+ case 4:
+ display(with.favourite_song + '\4');
+ break;
+ case 5:
+ display(with.worst_place_on_earth + '\4');
+ break;
+ case 6:
+ display(with.spare_evening + '\4');
+ break;
+ /* ... */
+ case 9:
+ display(strf(with.cat_x) + ',' + strf(with.cat_y) + '\4');
+ break;
+ case 10:
+ switch (with.box_contents) {
+ case '\0': { /* Sixpence. */
+ dixi('q', 37); /* You find the sixpence. */
+ with.pence += 6;
+ with.box_contents = nowt;
+ points(2);
+ return;
+ }
+ break;
+ case nowt:
+ display("nothing at all. It's completely empty.");
+ break;
+ default:
+ display(get_better(with.box_contents) + '.');
+ }
+ break;
+ case 11: {
+ nn = 1;
+ for (nnn = '\1'; nnn <= numobjs; nnn ++)
+ if (with.obj[nnn]) {
+ nn += 1;
+ display(get_better(nnn) + ", " + '\4');
+ }
+ }
+ break;
+ }
+ }
+ }
+ break;
+ case '\26':
+ use_icon = param;
+ break;
+ case '\15':
+ scrolln += 1;
+ break;
+ case '\21': {
+ if (call_spriterun) sprite_run();
+ call_spriterun = false;
+
+ scrolln += 1;
+ scroll[scrolln] = '\21';
+ was_virtual = visible == m_virtual;
+ if (was_virtual) off_virtual();
+ drawscroll(dialogue);
+ if (was_virtual) on_virtual();
+ resetscroll();
+ }
+ break;
+ case '\23' :
+ mouthnext = true;
+ break;
+ case '\11' :
+ for (nn = 1; nn <= 9; nn ++) scroll[scrolln] = scroll[scrolln] + ' ';
+ break;
+ default: {
+ /* add new char */
+ if (length(scroll[scrolln]) == 50) {
+ solidify(scrolln);
+ scrolln += 1;
+ }
+ scroll[scrolln] = scroll[scrolln] + buffer[fv];
+ }
+ }
}
-void display(string z)
-{
- bufsize=length(z);
- move(z[1],buffer,bufsize);
- calldrivers();
+void display(string z) {
+ bufsize = length(z);
+ move(z[1], buffer, bufsize);
+ calldrivers();
}
-void loadfont()
-{
- file<raw> f;
-
- assign(f,"avalot.fnt"); reset(f); f >> ch[0]; close(f);
- assign(f,"avitalic.fnt"); reset(f); f >> ch[1]; close(f);
- assign(f,"ttsmall.fnt"); reset(f); f >> little; close(f);
+void loadfont() {
+ file<raw> f;
+
+ assign(f, "avalot.fnt");
+ reset(f);
+ f >> ch[0];
+ close(f);
+ assign(f, "avitalic.fnt");
+ reset(f);
+ f >> ch[1];
+ close(f);
+ assign(f, "ttsmall.fnt");
+ reset(f);
+ f >> little;
+ close(f);
}
-void okay()
-{
- display("Okay!");
+void okay() {
+ display("Okay!");
}
-void musical_scroll()
-{
- boolean was_virtual;
+void musical_scroll() {
+ boolean was_virtual;
- display(string("To play the harp...\r\rUse these keys:\r\n")+
- "Q W E R T Y U I O P [ ]\r\rOr press Enter to stop playing.\4");
+ display(string("To play the harp...\r\rUse these keys:\r\n") +
+ "Q W E R T Y U I O P [ ]\r\rOr press Enter to stop playing.\4");
- sprite_run();
+ sprite_run();
- was_virtual=visible==m_virtual;
- if (was_virtual) off_virtual();
- drawscroll(music_scroll);
- if (was_virtual) on_virtual();
- resetscroll();
+ was_virtual = visible == m_virtual;
+ if (was_virtual) off_virtual();
+ drawscroll(music_scroll);
+ if (was_virtual) on_virtual();
+ resetscroll();
}
class unit_scrolls_initialize {
- public: unit_scrolls_initialize();
+public:
+ unit_scrolls_initialize();
};
static unit_scrolls_initialize scrolls_constructor;
unit_scrolls_initialize::unit_scrolls_initialize() {
- loadfont();
- resetscrolldriver();
+ loadfont();
+ resetscrolldriver();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/scrolls.h b/engines/avalanche/scrolls.h
index a22cfb7c2e..13928ef4ff 100644
--- a/engines/avalanche/scrolls.h
+++ b/engines/avalanche/scrolls.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/sequence.cpp b/engines/avalanche/sequence.cpp
index cf1cb0ae3f..2715e648b3 100644
--- a/engines/avalanche/sequence.cpp
+++ b/engines/avalanche/sequence.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -45,75 +45,78 @@
namespace Avalanche {
-void then_show(byte what)
-{
- byte fv;
-;
- for( fv=1; fv <= seq_length; fv ++)
- if (seq[fv]==0)
- {;
- seq[fv]=what;
- return;
- }
+void then_show(byte what) {
+ byte fv;
+ ;
+ for (fv = 1; fv <= seq_length; fv ++)
+ if (seq[fv] == 0) {
+ ;
+ seq[fv] = what;
+ return;
+ }
}
-void first_show(byte what)
-{;
- /* First, we need to blank out the entire array. */
- fillchar(seq,sizeof(seq),'\0');
+void first_show(byte what) {
+ ;
+ /* First, we need to blank out the entire array. */
+ fillchar(seq, sizeof(seq), '\0');
- /* Then it's just the same as then_show. */
- then_show(what);
+ /* Then it's just the same as then_show. */
+ then_show(what);
}
-void then_flip(byte where,byte ped)
-{;
- then_show(now_flip);
+void then_flip(byte where, byte ped) {
+ ;
+ then_show(now_flip);
- dna.flip_to_where=where;
- dna.flip_to_ped=ped;
+ dna.flip_to_where = where;
+ dna.flip_to_ped = ped;
}
-void start_to_close()
-{;
- lose_timer(reason_sequencer);
- set_up_timer(7,procsequence,reason_sequencer);
+void start_to_close() {
+ ;
+ lose_timer(reason_sequencer);
+ set_up_timer(7, procsequence, reason_sequencer);
}
-void start_to_open()
-{;
- dna.user_moves_avvy=false; /* They can't move. */
- stopwalking; /* And they're not moving now. */
- start_to_close(); /* Apart from that, it's the same thing. */
+void start_to_open() {
+ ;
+ dna.user_moves_avvy = false; /* They can't move. */
+ stopwalking; /* And they're not moving now. */
+ start_to_close(); /* Apart from that, it's the same thing. */
}
void call_sequencer();
- /* This proc is called by Timeout when it's time to do another frame. */
-static void shove_left()
-{;
- move(seq[2],seq[1],seq_length-1); /* Shift everything to the left. */
+/* This proc is called by Timeout when it's time to do another frame. */
+static void shove_left() {
+ ;
+ move(seq[2], seq[1], seq_length - 1); /* Shift everything to the left. */
}
-void call_sequencer()
-{;
- switch (seq[1]) {
- case 0: return; break; /* No more routines. */
- case 1 ... 176: {; /* Show a frame. */
- show_one(seq[1]);
- shove_left();
- }
- break;
- case 177: {;
- user_moves_avvy=true;
- fliproom(flip_to_where,flip_to_ped); /* 177 = Flip room. */
- if (seq[1]==177) shove_left();
- }
- break;
- }
-
- start_to_close(); /* Make sure this proc gets called again. */
+void call_sequencer() {
+ ;
+ switch (seq[1]) {
+ case 0:
+ return;
+ break; /* No more routines. */
+ case 1 ... 176: {
+ ; /* Show a frame. */
+ show_one(seq[1]);
+ shove_left();
+ }
+ break;
+ case 177: {
+ ;
+ user_moves_avvy = true;
+ fliproom(flip_to_where, flip_to_ped); /* 177 = Flip room. */
+ if (seq[1] == 177) shove_left();
+ }
+ break;
+ }
+
+ start_to_close(); /* Make sure this proc gets called again. */
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sequence.h b/engines/avalanche/sequence.h
index 2d773ca181..54bb1e72f2 100644
--- a/engines/avalanche/sequence.h
+++ b/engines/avalanche/sequence.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -40,7 +40,7 @@ const integer seq_length = 10;
#define EXTERN
#endif
-EXTERN array<1,seq_length,byte> seq;
+EXTERN array<1, seq_length, byte> seq;
#undef EXTERN
#define EXTERN extern
@@ -49,7 +49,7 @@ void first_show(byte what);
void then_show(byte what);
-void then_flip(byte where,byte ped);
+void then_flip(byte where, byte ped);
void start_to_close();
diff --git a/engines/avalanche/setup.cpp b/engines/avalanche/setup.cpp
index 245a119bd6..072c3ef2a4 100644
--- a/engines/avalanche/setup.cpp
+++ b/engines/avalanche/setup.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,37 +33,38 @@ namespace Avalanche {
const integer selected = 0x60; /* Background for selected lines of text. */
-typedef array<1,400,varying_string<80> > mobytype;
+typedef array<1, 400, varying_string<80> > mobytype;
typedef set byteset; /* Define its typemark. */
enum option {_overrideegacheck, _zoomystart, _loadfirst, _numlockhold, _usemouse,
- _controller, _logging, _logfile,
+ _controller, _logging, _logfile,
- _joystickinstalled, _joytop, _joybottom, _joyleft, _joyright, _joymidx,
- _joymidy, _joycentringfactor, _whichjoy, _quiet, _soundcard,
- _baseaddress, _irq, _dma,
- _samplerate, _keyboardclick,
+ _joystickinstalled, _joytop, _joybottom, _joyleft, _joyright, _joymidx,
+ _joymidy, _joycentringfactor, _whichjoy, _quiet, _soundcard,
+ _baseaddress, _irq, _dma,
+ _samplerate, _keyboardclick,
- _printer,
+ _printer,
- option_error, last_option};
+ option_error, last_option
+ };
-mobytype* moby;
+mobytype *moby;
word mobylength;
byte background; /* The current background colour, times 16. */
byte line; /* Which line you're on in the menus. */
-string registrant,reginum;
+string registrant, reginum;
byte num_printers;
-array<1,10,string> printers;
+array<1, 10, string> printers;
string this_printer;
/* THE STATUS VARIABLES: */
- /* general */
+/* general */
boolean override_ega;
boolean skip_loading_screens;
@@ -76,141 +77,141 @@ boolean log_to_file;
string log_filename;
string autotype;
- /* joystick */
+/* joystick */
boolean has_a_joystick;
-word jtop,jbottom,jleft,jright,jmidx,jmidy;
+word jtop, jbottom, jleft, jright, jmidx, jmidy;
byte jcentre;
word whichjoy;
- /* sound */
+/* sound */
boolean suppress_sfx;
byte your_card;
longint samplerate;
-longint sound_addr,sound_irq,sound_dma;
+longint sound_addr, sound_irq, sound_dma;
boolean wants_keyclick;
- /* registration */
+/* registration */
-string regname,regnum,chkname,chknum;
+string regname, regnum, chkname, chknum;
-string trim_and_caps(string this_)
-{
- byte fv;
-
- string trim_and_caps_result;
- while ((this_[1]==' ') && (this_!=""))
- Delete(this_,1,1); /* Strip leading blanks. */
- while ((this_[length(this_)]==' ') && (this_!=""))
- this_[0] -= 1; /* Strip trailing blanks. */
- for( fv=1; fv <= length(this_); fv ++) this_[fv]=upcase(this_[fv]);/* And capitalise. */
- trim_and_caps_result=this_;
- return trim_and_caps_result;
+string trim_and_caps(string this_) {
+ byte fv;
+
+ string trim_and_caps_result;
+ while ((this_[1] == ' ') && (this_ != ""))
+ Delete(this_, 1, 1); /* Strip leading blanks. */
+ while ((this_[length(this_)] == ' ') && (this_ != ""))
+ this_[0] -= 1; /* Strip trailing blanks. */
+ for (fv = 1; fv <= length(this_); fv ++) this_[fv] = upcase(this_[fv]); /* And capitalise. */
+ trim_and_caps_result = this_;
+ return trim_and_caps_result;
}
-option string_2_option(string field)
-{
+option string_2_option(string field) {
- option string_2_option_result;
- field=trim_and_caps(field);
+ option string_2_option_result;
+ field = trim_and_caps(field);
- if (field=="OVERRIDEEGACHECK") string_2_option_result=_overrideegacheck; else
- if (field=="ZOOMYSTART") string_2_option_result=_zoomystart; else
- if (field=="LOADFIRST") string_2_option_result=_loadfirst; else
- if (field=="NUMLOCKHOLD") string_2_option_result=_numlockhold; else
- if (field=="USEMOUSE") string_2_option_result=_usemouse; else
- if (field=="CONTROLLER") string_2_option_result=_controller; else
- if (field=="LOGGING") string_2_option_result=_logging; else
- if (field=="LOGFILE") string_2_option_result=_logfile; else
+ if (field == "OVERRIDEEGACHECK") string_2_option_result = _overrideegacheck;
+ else if (field == "ZOOMYSTART") string_2_option_result = _zoomystart;
+ else if (field == "LOADFIRST") string_2_option_result = _loadfirst;
+ else if (field == "NUMLOCKHOLD") string_2_option_result = _numlockhold;
+ else if (field == "USEMOUSE") string_2_option_result = _usemouse;
+ else if (field == "CONTROLLER") string_2_option_result = _controller;
+ else if (field == "LOGGING") string_2_option_result = _logging;
+ else if (field == "LOGFILE") string_2_option_result = _logfile;
+ else
- /* joystick */
+ /* joystick */
- if (field=="JOYSTICKINSTALLED") string_2_option_result=_joystickinstalled; else
- if (field=="JOYTOP") string_2_option_result=_joytop; else
- if (field=="JOYBOTTOM") string_2_option_result=_joybottom; else
- if (field=="JOYLEFT") string_2_option_result=_joyleft; else
- if (field=="JOYRIGHT") string_2_option_result=_joyright; else
- if (field=="JOYMIDX") string_2_option_result=_joymidx; else
- if (field=="JOYMIDY") string_2_option_result=_joymidy; else
- if (field=="JOYCENTRINGFACTOR") string_2_option_result=_joycentringfactor; else
- if (field=="WHICHJOY") string_2_option_result=_whichjoy; else
+ if (field == "JOYSTICKINSTALLED") string_2_option_result = _joystickinstalled;
+ else if (field == "JOYTOP") string_2_option_result = _joytop;
+ else if (field == "JOYBOTTOM") string_2_option_result = _joybottom;
+ else if (field == "JOYLEFT") string_2_option_result = _joyleft;
+ else if (field == "JOYRIGHT") string_2_option_result = _joyright;
+ else if (field == "JOYMIDX") string_2_option_result = _joymidx;
+ else if (field == "JOYMIDY") string_2_option_result = _joymidy;
+ else if (field == "JOYCENTRINGFACTOR") string_2_option_result = _joycentringfactor;
+ else if (field == "WHICHJOY") string_2_option_result = _whichjoy;
+ else
- /* sound */
+ /* sound */
- if (field=="QUIET") string_2_option_result=_quiet; else
- if (field=="SOUNDCARD") string_2_option_result=_soundcard; else
- if (field=="SAMPLERATE") string_2_option_result=_samplerate; else
- if (field=="KEYBOARDCLICK") string_2_option_result=_keyboardclick; else
- if (field=="BASEADDRESS") string_2_option_result=_baseaddress; else
- if (field=="IRQ") string_2_option_result=_irq; else
- if (field=="DMA") string_2_option_result=_dma; else
+ if (field == "QUIET") string_2_option_result = _quiet;
+ else if (field == "SOUNDCARD") string_2_option_result = _soundcard;
+ else if (field == "SAMPLERATE") string_2_option_result = _samplerate;
+ else if (field == "KEYBOARDCLICK") string_2_option_result = _keyboardclick;
+ else if (field == "BASEADDRESS") string_2_option_result = _baseaddress;
+ else if (field == "IRQ") string_2_option_result = _irq;
+ else if (field == "DMA") string_2_option_result = _dma;
+ else
- /* printer */
+ /* printer */
- if (field=="PRINTER") string_2_option_result=_printer; else
+ if (field == "PRINTER") string_2_option_result = _printer;
+ else
- string_2_option_result=option_error;
+ string_2_option_result = option_error;
- return string_2_option_result;
+ return string_2_option_result;
}
-void clear_to(byte colour)
-{
- window(1,1,80,24); background=colour*16; textattr=background; clrscr;
+void clear_to(byte colour) {
+ window(1, 1, 80, 24);
+ background = colour * 16;
+ textattr = background;
+ clrscr;
}
-void centre(byte where,byte colour, string what)
-{
- textattr=background+colour;
- gotoxy(40-length(what) / 2,where);
- output << what;
+void centre(byte where, byte colour, string what) {
+ textattr = background + colour;
+ gotoxy(40 - length(what) / 2, where);
+ output << what;
}
-void load_file()
-{
- text t;
+void load_file() {
+ text t;
- mobylength=0;
- /*$I-*/
- assign(t,"avalot.ini");
- reset(t);
- /*$I+*/
+ mobylength = 0;
+ /*$I-*/
+ assign(t, "avalot.ini");
+ reset(t);
+ /*$I+*/
- if (ioresult!=0) /* No file. */
- {
- output << "SETUP: Avalot.ini not found!" << NL;
- exit(255);
- }
+ if (ioresult != 0) { /* No file. */
+ output << "SETUP: Avalot.ini not found!" << NL;
+ exit(255);
+ }
- while (! eof(t))
- {
- mobylength += 1; /* Preincrement mode. */
- t >> (*moby)[mobylength] >> NL;
- }
+ while (! eof(t)) {
+ mobylength += 1; /* Preincrement mode. */
+ t >> (*moby)[mobylength] >> NL;
+ }
- close(t);
+ close(t);
}
-string strhf(longint x) /* assume x is +ve */
-{
- const array<0,16,char> hexdigits = "0123456789ABCDEF";
- string y; longint v;
+string strhf(longint x) { /* assume x is +ve */
+ const array<0, 16, char> hexdigits = "0123456789ABCDEF";
+ string y;
+ longint v;
- string strhf_result;
- v=x; y="";
+ string strhf_result;
+ v = x;
+ y = "";
- while (v!=0)
- {
- y=string(hexdigits[v % longint(16)-1])+y;
- v=v / longint(16);
- }
+ while (v != 0) {
+ y = string(hexdigits[v % longint(16) - 1]) + y;
+ v = v / longint(16);
+ }
- strhf_result=string('$')+y;
- return strhf_result;
+ strhf_result = string('$') + y;
+ return strhf_result;
}
void update_moby();
@@ -220,257 +221,293 @@ static byte fv;
static string field;
-static void get_field(string x)
-{
- if (pos(";",x)!=0) x=copy(x,1,pos(";",x)-1);
-
- if (pos("=",x)==0)
- field="";
- else
- {
- field=copy(x,0,pos("=",x)-1);
- while (field[1]==' ') field=copy(field,2,255);
- }
+static void get_field(string x) {
+ if (pos(";", x) != 0) x = copy(x, 1, pos(";", x) - 1);
+
+ if (pos("=", x) == 0)
+ field = "";
+ else {
+ field = copy(x, 0, pos("=", x) - 1);
+ while (field[1] == ' ') field = copy(field, 2, 255);
+ }
}
-static string yn1(boolean x)
- { string yn1_result;
- if (x) yn1_result="Yes"; else yn1_result="No"; return yn1_result;
- }
+static string yn1(boolean x) {
+ string yn1_result;
+ if (x) yn1_result = "Yes";
+ else yn1_result = "No";
+ return yn1_result;
+}
-static string kj(boolean x)
- { string kj_result;
- if (x) kj_result="Keyboard"; else kj_result="Joystick"; return kj_result;
- }
+static string kj(boolean x) {
+ string kj_result;
+ if (x) kj_result = "Keyboard";
+ else kj_result = "Joystick";
+ return kj_result;
+}
-static string put_logcodes()
-{
- byte q;
+static string put_logcodes() {
+ byte q;
- string put_logcodes_result;
- q=(byte)(log_to_file)+(byte)(log_to_printer)*2;
+ string put_logcodes_result;
+ q = (byte)(log_to_file) + (byte)(log_to_printer) * 2;
- switch (q) {
- case 0: put_logcodes_result="No"; break;
- case 1: put_logcodes_result="Disk"; break;
- case 2: put_logcodes_result="Printer"; break;
- }
- return put_logcodes_result;
+ switch (q) {
+ case 0:
+ put_logcodes_result = "No";
+ break;
+ case 1:
+ put_logcodes_result = "Disk";
+ break;
+ case 2:
+ put_logcodes_result = "Printer";
+ break;
+ }
+ return put_logcodes_result;
}
-static string card()
-{
- string card_result;
- switch (your_card) {
- case 0: card_result="None"; break;
- case 1: card_result="SB"; break;
- case 2: card_result="SBPro"; break;
- case 3: card_result="SB16"; break;
- case 4: card_result="Pas"; break;
- case 5: card_result="PasPlus"; break;
- case 6: card_result="Pas16"; break;
- case 7: card_result="Aria"; break;
- case 8: card_result="WinSound"; break;
- case 9: card_result="Gravis"; break;
- case 10: card_result="DacLPT"; break;
- case 11: card_result="StereoDacs"; break;
- case 12: card_result="StereoOn1"; break;
- case 13: card_result="Speaker"; break;
- }
- return card_result;
+static string card() {
+ string card_result;
+ switch (your_card) {
+ case 0:
+ card_result = "None";
+ break;
+ case 1:
+ card_result = "SB";
+ break;
+ case 2:
+ card_result = "SBPro";
+ break;
+ case 3:
+ card_result = "SB16";
+ break;
+ case 4:
+ card_result = "Pas";
+ break;
+ case 5:
+ card_result = "PasPlus";
+ break;
+ case 6:
+ card_result = "Pas16";
+ break;
+ case 7:
+ card_result = "Aria";
+ break;
+ case 8:
+ card_result = "WinSound";
+ break;
+ case 9:
+ card_result = "Gravis";
+ break;
+ case 10:
+ card_result = "DacLPT";
+ break;
+ case 11:
+ card_result = "StereoDacs";
+ break;
+ case 12:
+ card_result = "StereoOn1";
+ break;
+ case 13:
+ card_result = "Speaker";
+ break;
+ }
+ return card_result;
}
-static void entail(string x)
-{
- string before,after;
+static void entail(string x) {
+ string before, after;
- before=copy((*moby)[fv],1,pos("=",(*moby)[fv])-1);
+ before = copy((*moby)[fv], 1, pos("=", (*moby)[fv]) - 1);
- if (pos(";",(*moby)[fv])==0)
- {
- (*moby)[fv]=before+'='+x;
- } else
- {
- after=copy((*moby)[fv],pos(";",(*moby)[fv]),255);
+ if (pos(";", (*moby)[fv]) == 0) {
+ (*moby)[fv] = before + '=' + x;
+ } else {
+ after = copy((*moby)[fv], pos(";", (*moby)[fv]), 255);
- (*moby)[fv]=before+'='+x+' ';
- while (length((*moby)[fv])<25) (*moby)[fv]=(*moby)[fv]+' ';
+ (*moby)[fv] = before + '=' + x + ' ';
+ while (length((*moby)[fv]) < 25)(*moby)[fv] = (*moby)[fv] + ' ';
- (*moby)[fv]=(*moby)[fv]+after;
- }
+ (*moby)[fv] = (*moby)[fv] + after;
+ }
}
-void update_moby()
-{
- option o;
+void update_moby() {
+ option o;
- for( fv=1; fv <= mobylength; fv ++)
- {
- get_field((*moby)[fv]);
+ for (fv = 1; fv <= mobylength; fv ++) {
+ get_field((*moby)[fv]);
- if (field!="")
- {
- o=string_2_option(field);
+ if (field != "") {
+ o = string_2_option(field);
- if (o==_overrideegacheck) entail(yn1(override_ega)); else
- if (o==_zoomystart) entail(yn1(skip_loading_screens)); else
- if (o==_loadfirst) entail(load_particular); else
- if (o==_numlockhold) entail(yn1(force_numlock)); else
- if (o==_usemouse) entail(yn1(ignore_mouse)); else
- if (o==_controller) entail(kj(use_keyboard)); else
- if (o==_logging) entail(put_logcodes()); else
- if (o==_logfile) entail(log_filename); else
+ if (o == _overrideegacheck) entail(yn1(override_ega));
+ else if (o == _zoomystart) entail(yn1(skip_loading_screens));
+ else if (o == _loadfirst) entail(load_particular);
+ else if (o == _numlockhold) entail(yn1(force_numlock));
+ else if (o == _usemouse) entail(yn1(ignore_mouse));
+ else if (o == _controller) entail(kj(use_keyboard));
+ else if (o == _logging) entail(put_logcodes());
+ else if (o == _logfile) entail(log_filename);
+ else
- /* joystick */
+ /* joystick */
- if (o==_joystickinstalled) entail(yn1(has_a_joystick)); else
- if (o==_joytop) entail(strf(jtop)); else
- if (o==_joybottom) entail(strf(jbottom)); else
- if (o==_joyleft) entail(strf(jleft)); else
- if (o==_joyright) entail(strf(jright)); else
- if (o==_joymidx) entail(strf(jmidx)); else
- if (o==_joymidy) entail(strf(jmidy)); else
- if (o==_joycentringfactor) entail(strf(jcentre)); else
- if (o==_whichjoy) entail(strf(whichjoy)); else
+ if (o == _joystickinstalled) entail(yn1(has_a_joystick));
+ else if (o == _joytop) entail(strf(jtop));
+ else if (o == _joybottom) entail(strf(jbottom));
+ else if (o == _joyleft) entail(strf(jleft));
+ else if (o == _joyright) entail(strf(jright));
+ else if (o == _joymidx) entail(strf(jmidx));
+ else if (o == _joymidy) entail(strf(jmidy));
+ else if (o == _joycentringfactor) entail(strf(jcentre));
+ else if (o == _whichjoy) entail(strf(whichjoy));
+ else
- /* sound */
+ /* sound */
- if (o==_quiet) entail(yn1(suppress_sfx)); else
- if (o==_soundcard) entail(card()); else
- if (o==_samplerate) entail(strf(samplerate)); else
- if (o==_baseaddress) entail(strhf(sound_addr)); else
- if (o==_irq) entail(strf(sound_irq)); else
- if (o==_dma) entail(strf(sound_dma)); else
- if (o==_keyboardclick) entail(yn1(wants_keyclick)); else
+ if (o == _quiet) entail(yn1(suppress_sfx));
+ else if (o == _soundcard) entail(card());
+ else if (o == _samplerate) entail(strf(samplerate));
+ else if (o == _baseaddress) entail(strhf(sound_addr));
+ else if (o == _irq) entail(strf(sound_irq));
+ else if (o == _dma) entail(strf(sound_dma));
+ else if (o == _keyboardclick) entail(yn1(wants_keyclick));
+ else
- /* printer */
+ /* printer */
- if (o==_printer) entail(this_printer);
+ if (o == _printer) entail(this_printer);
- }
- }
+ }
+ }
}
-void save_file()
-{
- text t;
- word fv;
+void save_file() {
+ text t;
+ word fv;
- textattr=10;
- update_moby();
+ textattr = 10;
+ update_moby();
- clear_to(black);
- centre(14,14,"Saving...");
+ clear_to(black);
+ centre(14, 14, "Saving...");
- assign(t,"avalot.ini");
- rewrite(t);
+ assign(t, "avalot.ini");
+ rewrite(t);
- for( fv=1; fv <= mobylength; fv ++)
- {
- t << (*moby)[fv] << NL;
- }
+ for (fv = 1; fv <= mobylength; fv ++) {
+ t << (*moby)[fv] << NL;
+ }
- close(t);
+ close(t);
}
-boolean detect()
-{
- word x,y,xo,yo;
- byte count;
-
- boolean detect_result;
- count=0;
- if (joystickpresent())
- {
- detect_result=true;
- return detect_result;
- }
- readjoya(xo,yo);
- do {
- if (count<7) count += 1; /* Take advantage of "flutter" */
- if (count==6)
- {
- centre(7,1,"The Bios says you don't have a joystick. However, it's often wrong");
- centre(8,1,"about such matters. So, do you? If you do, move joystick A to");
- centre(9,1,"continue. If you don't, press any key to cancel.");
- }
- readjoya(x,y);
- } while (!((keypressed()) | (x!=xo) || (y!=yo)));
- detect_result=~ keypressed();
- return detect_result;
+boolean detect() {
+ word x, y, xo, yo;
+ byte count;
+
+ boolean detect_result;
+ count = 0;
+ if (joystickpresent()) {
+ detect_result = true;
+ return detect_result;
+ }
+ readjoya(xo, yo);
+ do {
+ if (count < 7) count += 1; /* Take advantage of "flutter" */
+ if (count == 6) {
+ centre(7, 1, "The Bios says you don't have a joystick. However, it's often wrong");
+ centre(8, 1, "about such matters. So, do you? If you do, move joystick A to");
+ centre(9, 1, "continue. If you don't, press any key to cancel.");
+ }
+ readjoya(x, y);
+ } while (!((keypressed()) | (x != xo) || (y != yo)));
+ detect_result = ~ keypressed();
+ return detect_result;
}
-void display()
-{
- gotoxy(28,10); output << jleft << " ";
- gotoxy(28,11); output << jright;
- gotoxy(28,12); output << jtop << " ";
- gotoxy(28,13); output << jbottom;
+void display() {
+ gotoxy(28, 10);
+ output << jleft << " ";
+ gotoxy(28, 11);
+ output << jright;
+ gotoxy(28, 12);
+ output << jtop << " ";
+ gotoxy(28, 13);
+ output << jbottom;
}
-void readjoy(word& x,word& y)
-{
- if (whichjoy==1) readjoya(x,y); else readjoyb(x,y);
+void readjoy(word &x, word &y) {
+ if (whichjoy == 1) readjoya(x, y);
+ else readjoyb(x, y);
}
-void getmaxmin()
-{
- word x,y; char r;
-
- clear_to(green);
- centre(5,1,"Rotate the joystick around in a circle, as far from the centre as it");
- centre(6,1,"can get. Then press any key.");
- centre(7,1,"Press Esc to cancel this part.");
- centre(16,1,"(To reset these figures, set \"Do you have a joystick?\" to No, then Yes.)");
-
- gotoxy(20,10); output << "Left :";
- gotoxy(20,11); output << "Right :";
- gotoxy(20,12); output << "Top :";
- gotoxy(20,13); output << "Bottom:";
-
-
- if (jleft==0) jleft=maxint;
- if (jtop==0) jtop=maxint;
- do {
- readjoy(x,y);
- if (x<jleft) jleft=x;
- if (y<jtop) jtop=y;
- if (x>jright) jright=x;
- if (y>jbottom) jbottom=y;
- display();
- } while (!keypressed());
-
- do { r=readkey(); } while (!(~ keypressed()));
- if (r=='\33') return;
-
- centre(19,1,"Thank you. Now please centre your joystick and hit a button.");
- do {; } while (!(buttona1() || buttona2()));
-
- readjoya(jmidx,jmidy);
-
- has_a_joystick=true;
+void getmaxmin() {
+ word x, y;
+ char r;
+
+ clear_to(green);
+ centre(5, 1, "Rotate the joystick around in a circle, as far from the centre as it");
+ centre(6, 1, "can get. Then press any key.");
+ centre(7, 1, "Press Esc to cancel this part.");
+ centre(16, 1, "(To reset these figures, set \"Do you have a joystick?\" to No, then Yes.)");
+
+ gotoxy(20, 10);
+ output << "Left :";
+ gotoxy(20, 11);
+ output << "Right :";
+ gotoxy(20, 12);
+ output << "Top :";
+ gotoxy(20, 13);
+ output << "Bottom:";
+
+
+ if (jleft == 0) jleft = maxint;
+ if (jtop == 0) jtop = maxint;
+ do {
+ readjoy(x, y);
+ if (x < jleft) jleft = x;
+ if (y < jtop) jtop = y;
+ if (x > jright) jright = x;
+ if (y > jbottom) jbottom = y;
+ display();
+ } while (!keypressed());
+
+ do {
+ r = readkey();
+ } while (!(~ keypressed()));
+ if (r == '\33') return;
+
+ centre(19, 1, "Thank you. Now please centre your joystick and hit a button.");
+ do {
+ ;
+ } while (!(buttona1() || buttona2()));
+
+ readjoya(jmidx, jmidy);
+
+ has_a_joystick = true;
}
-void joysetup()
-{
- clear_to(green);
- if (! detect()) return;
- getmaxmin();
+void joysetup() {
+ clear_to(green);
+ if (! detect()) return;
+ getmaxmin();
}
byte choose_one_of(byteset which);
@@ -478,564 +515,660 @@ byte choose_one_of(byteset which);
static shortint direction;
-static void move(shortint d)
-{
- direction=d; line=line+d;
+static void move(shortint d) {
+ direction = d;
+ line = line + d;
}
-static void highlight(word where,word how)
-{
- byte fv;
+static void highlight(word where, word how) {
+ byte fv;
- where=where*160-159;
- for( fv=0; fv <= 79; fv ++)
- mem[0xb800*where+fv*2]=(mem[0xb800*where+fv*2] & 0xf)+how;
+ where = where * 160 - 159;
+ for (fv = 0; fv <= 79; fv ++)
+ mem[0xb800 * where + fv * 2] = (mem[0xb800 * where + fv * 2] & 0xf) + how;
}
byte choose_one_of(byteset which)
{
- const integer upwards = -1;
- const integer downwards = 1;
-
- boolean done;
- char r;
-
-
- byte choose_one_of_result;
- done=false; direction=1;
- do {
- while (! (which.has(line)))
- {
- line=line+direction;
- if (line>26) line=1;
- if (line==0) line=26;
- }
-
- highlight(line,selected);
- r=readkey();
- highlight(line,background);
- switch (r) {
- case '\0': switch (readkey()) {
- case cup: move(upwards); break;
- case cdown: move(downwards); break;
- }
- break;
- case creturn: done=true; break;
- case cescape: {
- choose_one_of_result=15; /* bottom line is always 15. */
- return choose_one_of_result;
- }
- break;
- }
-
- } while (!done);
-
- choose_one_of_result=line;
- return choose_one_of_result;
+ const integer upwards = -1;
+ const integer downwards = 1;
+
+ boolean done;
+ char r;
+
+
+ byte choose_one_of_result;
+ done = false;
+ direction = 1;
+ do {
+ while (!(which.has(line))) {
+ line = line + direction;
+ if (line > 26) line = 1;
+ if (line == 0) line = 26;
+ }
+
+ highlight(line, selected);
+ r = readkey();
+ highlight(line, background);
+ switch (r) {
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ move(upwards);
+ break;
+ case cdown:
+ move(downwards);
+ break;
+ }
+ break;
+ case creturn:
+ done = true;
+ break;
+ case cescape: {
+ choose_one_of_result = 15; /* bottom line is always 15. */
+ return choose_one_of_result;
+ }
+ break;
+ }
+
+ } while (!done);
+
+ choose_one_of_result = line;
+ return choose_one_of_result;
}
void bottom_bar();
static void load_regi_info();
-static char decode1(char c)
-{
- byte b;
+static char decode1(char c) {
+ byte b;
- char decode1_result;
- b=ord(c)-32;
- decode1_result=chr(( (b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4));
- return decode1_result;
+ char decode1_result;
+ b = ord(c) - 32;
+ decode1_result = chr(((b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4));
+ return decode1_result;
}
-static char decode2(char c)
-{
- char decode2_result;
- decode2_result=chr( ((ord(c) & 0xf) << 2) + 0x43);
- return decode2_result;
+static char decode2(char c) {
+ char decode2_result;
+ decode2_result = chr(((ord(c) & 0xf) << 2) + 0x43);
+ return decode2_result;
}
-static boolean checker(string proper,string check)
-{
- byte fv; boolean ok;
+static boolean checker(string proper, string check) {
+ byte fv;
+ boolean ok;
- boolean checker_result;
- ok=true;
- for( fv=1; fv <= length(proper); fv ++)
- if ((ord(proper[fv]) & 0xf)!=((cardinal)(ord(check[fv])-0x43) >> 2))
- ok=false;
+ boolean checker_result;
+ ok = true;
+ for (fv = 1; fv <= length(proper); fv ++)
+ if ((ord(proper[fv]) & 0xf) != ((cardinal)(ord(check[fv]) - 0x43) >> 2))
+ ok = false;
- checker_result=ok;
- return checker_result;
+ checker_result = ok;
+ return checker_result;
}
-static void load_regi_info()
-{
- text t;
- byte fv;
- string x;
- byte namelen,numlen;
- string namechk,numchk;
+static void load_regi_info() {
+ text t;
+ byte fv;
+ string x;
+ byte namelen, numlen;
+ string namechk, numchk;
- /*$I-*/
- assign(t,"register.dat"); reset(t);
- /*$I+*/
+ /*$I-*/
+ assign(t, "register.dat");
+ reset(t);
+ /*$I+*/
- if (ioresult!=0)
- {
- registrant="";
- return;
- }
+ if (ioresult != 0) {
+ registrant = "";
+ return;
+ }
- for( fv=1; fv <= 53; fv ++) t >> NL;
- t >> x >> NL;
- close(t);
+ for (fv = 1; fv <= 53; fv ++) t >> NL;
+ t >> x >> NL;
+ close(t);
- namelen=107-ord(x[1]); numlen=107-ord(x[2]);
+ namelen = 107 - ord(x[1]);
+ numlen = 107 - ord(x[2]);
- registrant=copy(x,3,namelen);
- reginum=copy(x,4+namelen,numlen);
- namechk=copy(x,4+namelen+numlen,namelen);
- numchk=copy(x,4+namelen+numlen+namelen,numlen);
+ registrant = copy(x, 3, namelen);
+ reginum = copy(x, 4 + namelen, numlen);
+ namechk = copy(x, 4 + namelen + numlen, namelen);
+ numchk = copy(x, 4 + namelen + numlen + namelen, numlen);
- for( fv=1; fv <= namelen; fv ++) registrant[fv]=decode1(registrant[fv]);
- for( fv=1; fv <= numlen; fv ++) reginum[fv]=decode1(reginum[fv]);
+ for (fv = 1; fv <= namelen; fv ++) registrant[fv] = decode1(registrant[fv]);
+ for (fv = 1; fv <= numlen; fv ++) reginum[fv] = decode1(reginum[fv]);
- if ((! checker(registrant,namechk)) || (! checker(reginum,numchk)))
- { registrant="\?\"!?"; reginum="(."; }
+ if ((! checker(registrant, namechk)) || (! checker(reginum, numchk))) {
+ registrant = "\?\"!?";
+ reginum = "(.";
+ }
}
-void bottom_bar()
-{
- load_regi_info();
- textattr=96; background=96;
- window(1,1,80,25);
- gotoxy(1,25); clreol;
- if (registrant=="")
- centre(25,15,"Unregistered copy.");
- else
- centre(25,15,string("Registered to ")+registrant+" ("+reginum+").");
+void bottom_bar() {
+ load_regi_info();
+ textattr = 96;
+ background = 96;
+ window(1, 1, 80, 25);
+ gotoxy(1, 25);
+ clreol;
+ if (registrant == "")
+ centre(25, 15, "Unregistered copy.");
+ else
+ centre(25, 15, string("Registered to ") + registrant + " (" + reginum + ").");
}
-void new_menu()
-{
- line=1; /* now that we've got a new menu. */
+void new_menu() {
+ line = 1; /* now that we've got a new menu. */
}
-string two_answers(string ans_true,string ans_false, boolean which)
-{
- string two_answers_result;
- if (which)
- two_answers_result=string(" (")+ans_true+')';
- else
- two_answers_result=string(" (")+ans_false+')';
- return two_answers_result;
+string two_answers(string ans_true, string ans_false, boolean which) {
+ string two_answers_result;
+ if (which)
+ two_answers_result = string(" (") + ans_true + ')';
+ else
+ two_answers_result = string(" (") + ans_false + ')';
+ return two_answers_result;
}
-string yes_or_no(boolean which)
-{
- string yes_or_no_result;
- yes_or_no_result=two_answers("yes","no",which);
- return yes_or_no_result;
+string yes_or_no(boolean which) {
+ string yes_or_no_result;
+ yes_or_no_result = two_answers("yes", "no", which);
+ return yes_or_no_result;
}
-string give_name(string what)
-{
- string give_name_result;
- if (what=="")
- give_name_result=" (none)";
- else
- give_name_result=string(" (\"")+what+"\")";
- return give_name_result;
+string give_name(string what) {
+ string give_name_result;
+ if (what == "")
+ give_name_result = " (none)";
+ else
+ give_name_result = string(" (\"") + what + "\")";
+ return give_name_result;
}
-string sound_card(byte which)
-{
- string sound_card_result;
- switch (which) {
- case 0: sound_card_result="none"; break;
- case 1: sound_card_result="SoundBlaster"; break;
- case 2: sound_card_result="SoundBlaster Pro"; break;
- case 3: sound_card_result="SoundBlaster 16"; break;
- case 4: sound_card_result="Pro Audio Spectrum"; break;
- case 5: sound_card_result="Pro Audio Spectrum+"; break;
- case 6: sound_card_result="Pro Audio Spectrum 16"; break;
- case 7: sound_card_result="Aria"; break;
- case 8: sound_card_result="Windows Sound System or compatible"; break;
- case 9: sound_card_result="Gravis Ultrasound"; break;
- case 10: sound_card_result="DAC on LPT1"; break;
- case 11: sound_card_result="Stereo DACs on LPT1 and LPT2"; break;
- case 12: sound_card_result="Stereo-on-1 DAC on LPT"; break;
- case 13: sound_card_result="PC speaker"; break;
- }
- return sound_card_result;
+string sound_card(byte which) {
+ string sound_card_result;
+ switch (which) {
+ case 0:
+ sound_card_result = "none";
+ break;
+ case 1:
+ sound_card_result = "SoundBlaster";
+ break;
+ case 2:
+ sound_card_result = "SoundBlaster Pro";
+ break;
+ case 3:
+ sound_card_result = "SoundBlaster 16";
+ break;
+ case 4:
+ sound_card_result = "Pro Audio Spectrum";
+ break;
+ case 5:
+ sound_card_result = "Pro Audio Spectrum+";
+ break;
+ case 6:
+ sound_card_result = "Pro Audio Spectrum 16";
+ break;
+ case 7:
+ sound_card_result = "Aria";
+ break;
+ case 8:
+ sound_card_result = "Windows Sound System or compatible";
+ break;
+ case 9:
+ sound_card_result = "Gravis Ultrasound";
+ break;
+ case 10:
+ sound_card_result = "DAC on LPT1";
+ break;
+ case 11:
+ sound_card_result = "Stereo DACs on LPT1 and LPT2";
+ break;
+ case 12:
+ sound_card_result = "Stereo-on-1 DAC on LPT";
+ break;
+ case 13:
+ sound_card_result = "PC speaker";
+ break;
+ }
+ return sound_card_result;
}
-void get_str(string& n)
-{
- string x;
- char r;
+void get_str(string &n) {
+ string x;
+ char r;
- clear_to(black);
- centre(3,3,"Enter the new value. Press Enter to accept, or Esc to cancel.");
- x="";
+ clear_to(black);
+ centre(3, 3, "Enter the new value. Press Enter to accept, or Esc to cancel.");
+ x = "";
- do {
+ do {
- r=readkey();
+ r = readkey();
- switch (r) {
- case cbackspace: if (x[0]>'\0') x[0] -= 1; break;
- case creturn: {
- n=x;
- return;
- }
- break;
- case cescape: return; break;
+ switch (r) {
+ case cbackspace:
+ if (x[0] > '\0') x[0] -= 1;
+ break;
+ case creturn: {
+ n = x;
+ return;
+ }
+ break;
+ case cescape:
+ return;
+ break;
- default:
- if (x[0]<'\106') x=x+r;
- }
+ default:
+ if (x[0] < '\106') x = x + r;
+ }
- centre(7,2,string(' ')+x+' ');
+ centre(7, 2, string(' ') + x + ' ');
- } while (!false);
+ } while (!false);
}
-void get_num(longint& n)
-{
- string x;
- char r;
- integer e;
+void get_num(longint &n) {
+ string x;
+ char r;
+ integer e;
- clear_to(black);
- centre(3,3,"Enter the new value. Press Enter to accept, or Esc to cancel.");
- centre(4,3,"Precede with $ for a hex value.");
- x="";
+ clear_to(black);
+ centre(3, 3, "Enter the new value. Press Enter to accept, or Esc to cancel.");
+ centre(4, 3, "Precede with $ for a hex value.");
+ x = "";
- do {
+ do {
- r=upcase(readkey());
+ r = upcase(readkey());
- switch (r) {
- case cbackspace: if (x[0]>'\0') x[0] -= 1; break;
- case creturn: {
- val(x,n,e);
- return;
- }
- break;
- case cescape: return; break;
+ switch (r) {
+ case cbackspace:
+ if (x[0] > '\0') x[0] -= 1;
+ break;
+ case creturn: {
+ val(x, n, e);
+ return;
+ }
+ break;
+ case cescape:
+ return;
+ break;
- default:
- if ((x[0]<'\106') &&
- ((set::of(range('0','9'), eos).has(r)) || ((x[1]=='$') && (set::of(range('A','F'), eos).has(r))) ||
- ((x=="") && (r=='$'))))
- x=x+r;
- }
+ default:
+ if ((x[0] < '\106') &&
+ ((set::of(range('0', '9'), eos).has(r)) || ((x[1] == '$') && (set::of(range('A', 'F'), eos).has(r))) ||
+ ((x == "") && (r == '$'))))
+ x = x + r;
+ }
- centre(7,2,string(' ')+x+' ');
+ centre(7, 2, string(' ') + x + ' ');
- } while (!false);
+ } while (!false);
}
-void general_menu()
-{
- new_menu();
- do {
- clear_to(blue);
-
- centre( 3,15,"General Menu");
-
- centre( 5, 7,string("Override EGA check?")+yes_or_no(override_ega));
- centre( 6, 7,string("Skip loading screens?")+yes_or_no(skip_loading_screens));
- centre( 7, 7,string("Load a particular file by default?")+give_name(load_particular));
- centre( 8, 7,string("Force NumLock off?")+yes_or_no(force_numlock));
-/* centre( 9, 7,'Ignore the mouse?'+yes_or_no(ignore_mouse));*/
- centre(10, 7,string("Default controller?")+two_answers("keyboard","joystick",use_keyboard));
- centre(12, 7,string("Log to printer?")+yes_or_no(log_to_printer));
- centre(13, 7,string("Log to file?")+yes_or_no(log_to_file));
- centre(14, 7,string("Filename to log to?")+give_name(log_filename));
-
- centre(15,15,"Return to main menu.");
-
- switch (choose_one_of(set::of(5,6,7,8,/*9,*/10,12,13,14,15, eos))) {
- case 5: override_ega=! override_ega; break;
- case 6: skip_loading_screens=! skip_loading_screens; break;
- case 7: get_str(load_particular); break;
- case 8: force_numlock=! force_numlock; break;
-/* 9: ignore_mouse:=not ignore_mouse;*/
- case 10: use_keyboard=! use_keyboard; break;
- case 12: {
- log_to_printer=! log_to_printer;
- if (log_to_file && log_to_printer) log_to_file=false;
- }
- break;
- case 13: {
- log_to_file=! log_to_file;
- if (log_to_file && log_to_printer) log_to_printer=false;
- }
- break;
- case 14: get_str(log_filename); break;
- case 15: { new_menu(); return; } break;
- }
-
- } while (!false);
+void general_menu() {
+ new_menu();
+ do {
+ clear_to(blue);
+
+ centre(3, 15, "General Menu");
+
+ centre(5, 7, string("Override EGA check?") + yes_or_no(override_ega));
+ centre(6, 7, string("Skip loading screens?") + yes_or_no(skip_loading_screens));
+ centre(7, 7, string("Load a particular file by default?") + give_name(load_particular));
+ centre(8, 7, string("Force NumLock off?") + yes_or_no(force_numlock));
+ /* centre( 9, 7,'Ignore the mouse?'+yes_or_no(ignore_mouse));*/
+ centre(10, 7, string("Default controller?") + two_answers("keyboard", "joystick", use_keyboard));
+ centre(12, 7, string("Log to printer?") + yes_or_no(log_to_printer));
+ centre(13, 7, string("Log to file?") + yes_or_no(log_to_file));
+ centre(14, 7, string("Filename to log to?") + give_name(log_filename));
+
+ centre(15, 15, "Return to main menu.");
+
+ switch (choose_one_of(set::of(5, 6, 7, 8,/*9,*/10, 12, 13, 14, 15, eos))) {
+ case 5:
+ override_ega = ! override_ega;
+ break;
+ case 6:
+ skip_loading_screens = ! skip_loading_screens;
+ break;
+ case 7:
+ get_str(load_particular);
+ break;
+ case 8:
+ force_numlock = ! force_numlock;
+ break;
+ /* 9: ignore_mouse:=not ignore_mouse;*/
+ case 10:
+ use_keyboard = ! use_keyboard;
+ break;
+ case 12: {
+ log_to_printer = ! log_to_printer;
+ if (log_to_file && log_to_printer) log_to_file = false;
+ }
+ break;
+ case 13: {
+ log_to_file = ! log_to_file;
+ if (log_to_file && log_to_printer) log_to_printer = false;
+ }
+ break;
+ case 14:
+ get_str(log_filename);
+ break;
+ case 15: {
+ new_menu();
+ return;
+ }
+ break;
+ }
+
+ } while (!false);
}
-void joystick_menu()
-{
- new_menu();
- do {
- clear_to(green);
-
- centre(3,15,"Joystick Menu");
-
- centre(5,14,string("Do you have a joystick?")+yes_or_no(has_a_joystick));
- centre(6,14,string("Which joystick to use? ")+chr(whichjoy+48));
- centre(7,14,"Select this one to set it up.");
-
- centre(15,15,"Return to main menu");
-
- switch (choose_one_of(set::of(5,6,7,15, eos))) {
- case 5: {
- has_a_joystick=! has_a_joystick;
- if (! has_a_joystick)
- { jleft=0; jright=0; jtop=0; jbottom=0; }
- }
- break;
- case 6: whichjoy=3-whichjoy; break; /* Flips between 2 and 1. */
- case 7: joysetup(); break;
- case 15: { new_menu(); return; } break;
- }
-
- } while (!false);
+void joystick_menu() {
+ new_menu();
+ do {
+ clear_to(green);
+
+ centre(3, 15, "Joystick Menu");
+
+ centre(5, 14, string("Do you have a joystick?") + yes_or_no(has_a_joystick));
+ centre(6, 14, string("Which joystick to use? ") + chr(whichjoy + 48));
+ centre(7, 14, "Select this one to set it up.");
+
+ centre(15, 15, "Return to main menu");
+
+ switch (choose_one_of(set::of(5, 6, 7, 15, eos))) {
+ case 5: {
+ has_a_joystick = ! has_a_joystick;
+ if (! has_a_joystick) {
+ jleft = 0;
+ jright = 0;
+ jtop = 0;
+ jbottom = 0;
+ }
+ }
+ break;
+ case 6:
+ whichjoy = 3 - whichjoy;
+ break; /* Flips between 2 and 1. */
+ case 7:
+ joysetup();
+ break;
+ case 15: {
+ new_menu();
+ return;
+ }
+ break;
+ }
+
+ } while (!false);
}
-void cycle(byte& what, byte upper_limit)
-{
- if (what==upper_limit)
- what=0;
- else
- what += 1;
+void cycle(byte &what, byte upper_limit) {
+ if (what == upper_limit)
+ what = 0;
+ else
+ what += 1;
}
-void sound_menu()
-{
- new_menu();
- do {
- clear_to(cyan);
-
- centre(3, 0,"Sound menu");
-
- centre(5, 0,string("Do you want to suppress sound effects?")+yes_or_no(suppress_sfx));
- centre(6, 0,string("Sound output device\? (")+sound_card(your_card)+')');
- centre(7, 0,string("Sampling rate\? (")+strf(samplerate)+"Hz)");
- centre(8, 0,string("Base address\? (")+strhf(sound_addr)+" *hex*)");
- centre(9, 0,string("IRQ\? (")+strf(sound_irq)+')');
- centre(10,0,string("DMA\? (")+strf(sound_dma)+')');
- centre(11,0,string("Do you want keyclick?")+yes_or_no(wants_keyclick));
-
- centre(15,15,"Return to main menu");
-
- centre(17,1,"WARNING: Incorrect values of IRQ and DMA may damage your computer!");
- centre(18,1,"Read AVALOT.INI for the correct values.");
-
- switch (choose_one_of(set::of(5,6,7,8,9,10,11,15, eos))) {
- case 5: suppress_sfx=! suppress_sfx; break;
- case 6: cycle(your_card,13); break;
- case 7: get_num(samplerate); break;
- case 8: get_num(sound_addr); break;
- case 9: get_num(sound_irq); break;
- case 10: get_num(sound_dma); break;
- case 11: wants_keyclick=! wants_keyclick; break;
- case 15: { new_menu(); return; } break;
- }
-
- } while (!false);
+void sound_menu() {
+ new_menu();
+ do {
+ clear_to(cyan);
+
+ centre(3, 0, "Sound menu");
+
+ centre(5, 0, string("Do you want to suppress sound effects?") + yes_or_no(suppress_sfx));
+ centre(6, 0, string("Sound output device\? (") + sound_card(your_card) + ')');
+ centre(7, 0, string("Sampling rate\? (") + strf(samplerate) + "Hz)");
+ centre(8, 0, string("Base address\? (") + strhf(sound_addr) + " *hex*)");
+ centre(9, 0, string("IRQ\? (") + strf(sound_irq) + ')');
+ centre(10, 0, string("DMA\? (") + strf(sound_dma) + ')');
+ centre(11, 0, string("Do you want keyclick?") + yes_or_no(wants_keyclick));
+
+ centre(15, 15, "Return to main menu");
+
+ centre(17, 1, "WARNING: Incorrect values of IRQ and DMA may damage your computer!");
+ centre(18, 1, "Read AVALOT.INI for the correct values.");
+
+ switch (choose_one_of(set::of(5, 6, 7, 8, 9, 10, 11, 15, eos))) {
+ case 5:
+ suppress_sfx = ! suppress_sfx;
+ break;
+ case 6:
+ cycle(your_card, 13);
+ break;
+ case 7:
+ get_num(samplerate);
+ break;
+ case 8:
+ get_num(sound_addr);
+ break;
+ case 9:
+ get_num(sound_irq);
+ break;
+ case 10:
+ get_num(sound_dma);
+ break;
+ case 11:
+ wants_keyclick = ! wants_keyclick;
+ break;
+ case 15: {
+ new_menu();
+ return;
+ }
+ break;
+ }
+
+ } while (!false);
}
-void printer_menu()
-{
- byte fv;
- byteset chooseable_lines;
+void printer_menu() {
+ byte fv;
+ byteset chooseable_lines;
- new_menu();
+ new_menu();
- chooseable_lines=set::of(15, eos);
- for( fv=1; fv <= num_printers; fv ++)
- chooseable_lines=chooseable_lines+set::of(fv+8, eos);
+ chooseable_lines = set::of(15, eos);
+ for (fv = 1; fv <= num_printers; fv ++)
+ chooseable_lines = chooseable_lines + set::of(fv + 8, eos);
- do {
- clear_to(red);
+ do {
+ clear_to(red);
- centre(3,15,"Printer menu");
+ centre(3, 15, "Printer menu");
- centre(5,15,"Select one of the following printers:");
- centre(6,15,string("The current choice is ")+this_printer+'.');
+ centre(5, 15, "Select one of the following printers:");
+ centre(6, 15, string("The current choice is ") + this_printer + '.');
- for( fv=1; fv <= num_printers; fv ++)
- centre(8+fv,14,printers[fv]);
+ for (fv = 1; fv <= num_printers; fv ++)
+ centre(8 + fv, 14, printers[fv]);
- centre(15,15,"Return to main menu");
+ centre(15, 15, "Return to main menu");
- fv=choose_one_of(chooseable_lines);
+ fv = choose_one_of(chooseable_lines);
- if (fv==15) { new_menu(); return; }
+ if (fv == 15) {
+ new_menu();
+ return;
+ }
- this_printer=printers[fv-8];
+ this_printer = printers[fv - 8];
- } while (!false);
+ } while (!false);
}
-void regi_split(string x)
-{
- byte fv;
+void regi_split(string x) {
+ byte fv;
- regname[0]=chr(107-ord(x[1])); chkname[0]=regname[0];
- regnum[0]=chr(107-ord(x[2])); chknum[0]=chknum[0];
+ regname[0] = chr(107 - ord(x[1]));
+ chkname[0] = regname[0];
+ regnum[0] = chr(107 - ord(x[2]));
+ chknum[0] = chknum[0];
- move(x[3],regname[1],ord(regname[0]));
- for( fv=1; fv <= length(regname); fv ++)
- regname[fv]=chr(abs(((ord(regname[fv])-33)-177*fv) % 94)+33);
+ move(x[3], regname[1], ord(regname[0]));
+ for (fv = 1; fv <= length(regname); fv ++)
+ regname[fv] = chr(abs(((ord(regname[fv]) - 33) - 177 * fv) % 94) + 33);
}
-void registration_menu()
-{
- char r;
- text t,o;
- string x;
- byte fv;
-
- clear_to(black);
-
- centre(3,15,"REGISTRATION");
- centre(5,14,"Please insert the disk you were sent when you registered");
- centre(6,14,"into any drive, and press its letter. For example, if the");
- centre(7,14,"disk is in drive A:, press A.");
- centre(9,14,"Press Esc to cancel this menu.");
-
- do { r=upcase(readkey()); } while (!(set::of('\33',range('A','Z'), eos).has(r))); if (r=='\33') return;
-
- /*$I-*/
- assign(t,string(r)+":\\REGISTER.DAT");
- reset(t);
- /*$I+*/
- if (ioresult!=0)
- {
- centre(17,15,"But it isn't in that drive...");
- centre(19,15,"Press any key.");
- r=readkey();
- return;
- }
- for( fv=1; fv <= 54; fv ++) t >> x >> NL;
- regi_split(x);
-
- /* Copy the file... */
-
- assign(o,"register.dat"); rewrite(o); reset(t);
-
- while (! eof(t))
- {
- t >> x >> NL; o << x << NL;
- }
- close(t); close(o);
-
- centre(17,15,"Done! Press any key...");
- bottom_bar();
- r=readkey();
+void registration_menu() {
+ char r;
+ text t, o;
+ string x;
+ byte fv;
+
+ clear_to(black);
+
+ centre(3, 15, "REGISTRATION");
+ centre(5, 14, "Please insert the disk you were sent when you registered");
+ centre(6, 14, "into any drive, and press its letter. For example, if the");
+ centre(7, 14, "disk is in drive A:, press A.");
+ centre(9, 14, "Press Esc to cancel this menu.");
+
+ do {
+ r = upcase(readkey());
+ } while (!(set::of('\33', range('A', 'Z'), eos).has(r)));
+ if (r == '\33') return;
+
+ /*$I-*/
+ assign(t, string(r) + ":\\REGISTER.DAT");
+ reset(t);
+ /*$I+*/
+ if (ioresult != 0) {
+ centre(17, 15, "But it isn't in that drive...");
+ centre(19, 15, "Press any key.");
+ r = readkey();
+ return;
+ }
+ for (fv = 1; fv <= 54; fv ++) t >> x >> NL;
+ regi_split(x);
+
+ /* Copy the file... */
+
+ assign(o, "register.dat");
+ rewrite(o);
+ reset(t);
+
+ while (! eof(t)) {
+ t >> x >> NL;
+ o << x << NL;
+ }
+ close(t);
+ close(o);
+
+ centre(17, 15, "Done! Press any key...");
+ bottom_bar();
+ r = readkey();
}
-void menu()
-{
- bottom_bar();
- new_menu();
- do {
- clear_to(black);
-
- centre(3,15,"Avalot Setup - Main Menu");
-
- centre(5, 9,"General setup");
- centre(6,10,"Joystick setup");
- centre(7,11,"Sound setup");
- centre(8,12,"Printer setup");
- centre(9,14,"REGISTRATION setup");
-
- centre(15,15,"--- EXIT SETUP ---");
-
- switch (choose_one_of(set::of(5,6,7,8,9,15, eos))) {
- case 5: general_menu(); break;
- case 6: joystick_menu(); break;
- case 7: sound_menu(); break;
- case 8: printer_menu(); break;
- case 9: registration_menu(); break;
- case 15: {
- new_menu();
- clear_to(lightgray);
- centre(3,0,"Quit: would you like to save changes?");
- centre(5,1,"Quit and SAVE changes.");
- centre(6,1,"Quit and DON'T save changes.");
- centre(15,0,"Cancel and return to the main menu.");
- switch (choose_one_of(set::of(5,6,15, eos))) {
- case 5: {
- save_file();
- return;
- }
- break;
- case 6: return; break;
- }
- new_menu();
- }
- break;
- }
-
- } while (!false);
+void menu() {
+ bottom_bar();
+ new_menu();
+ do {
+ clear_to(black);
+
+ centre(3, 15, "Avalot Setup - Main Menu");
+
+ centre(5, 9, "General setup");
+ centre(6, 10, "Joystick setup");
+ centre(7, 11, "Sound setup");
+ centre(8, 12, "Printer setup");
+ centre(9, 14, "REGISTRATION setup");
+
+ centre(15, 15, "--- EXIT SETUP ---");
+
+ switch (choose_one_of(set::of(5, 6, 7, 8, 9, 15, eos))) {
+ case 5:
+ general_menu();
+ break;
+ case 6:
+ joystick_menu();
+ break;
+ case 7:
+ sound_menu();
+ break;
+ case 8:
+ printer_menu();
+ break;
+ case 9:
+ registration_menu();
+ break;
+ case 15: {
+ new_menu();
+ clear_to(lightgray);
+ centre(3, 0, "Quit: would you like to save changes?");
+ centre(5, 1, "Quit and SAVE changes.");
+ centre(6, 1, "Quit and DON'T save changes.");
+ centre(15, 0, "Cancel and return to the main menu.");
+ switch (choose_one_of(set::of(5, 6, 15, eos))) {
+ case 5: {
+ save_file();
+ return;
+ }
+ break;
+ case 6:
+ return;
+ break;
+ }
+ new_menu();
+ }
+ break;
+ }
+
+ } while (!false);
}
-void defaults() /* Sets everything to its default value. */
-{
- /* general */
+void defaults() { /* Sets everything to its default value. */
+ /* general */
- override_ega=false;
- skip_loading_screens=false;
- load_particular="";
- force_numlock=true;
- ignore_mouse=false;
- use_keyboard=true;
- log_to_printer=false;
- log_to_file=false;
- log_filename="avalot.log";
+ override_ega = false;
+ skip_loading_screens = false;
+ load_particular = "";
+ force_numlock = true;
+ ignore_mouse = false;
+ use_keyboard = true;
+ log_to_printer = false;
+ log_to_file = false;
+ log_filename = "avalot.log";
- /* joystick */
+ /* joystick */
- has_a_joystick=false;
- /* jtop,jbottom,jleft,jright,jmidx,jmidy need no initialisation. */
+ has_a_joystick = false;
+ /* jtop,jbottom,jleft,jright,jmidx,jmidy need no initialisation. */
- /* sound */
+ /* sound */
- suppress_sfx=false;
- your_card=0; /* none */
- wants_keyclick=false;
+ suppress_sfx = false;
+ your_card = 0; /* none */
+ wants_keyclick = false;
- /* other stuff */
+ /* other stuff */
- registrant="";
+ registrant = "";
- num_printers=0; this_printer="??";
+ num_printers = 0;
+ this_printer = "??";
}
void parse_file();
@@ -1053,243 +1186,256 @@ const integer parse_weird_logcode = 5;
const integer parse_weird_card = 6;
-static varying_string<80> this_,thiswas;
-
-static boolean error_found,ignoring;
-
-
-static void error(byte what)
-{
- textattr=15;
- if (! error_found)
- {
- clrscr; textattr=12;
- output << "SETUP: *** ERROR FOUND IN AVALOT.INI! ***" << NL; textattr=15;
- }
- output << ' ';
- switch (what) {
- case parse_weird_field: output << "Unknown identifier on the left"; break;
- case parse_not_yes_or_no: output << "Value on the right should be Yes or No"; break;
- case parse_not_numeric: output << "Value on the right is not numeric"; break;
- case parse_not_kbd_or_joy: output << "Value on the right should be Keyboard or Joystick"; break;
- case parse_weird_logcode: output << "Value on the right should be No, Printer or Disk"; break;
- case parse_weird_card: output << "Never heard of the card"; break;
- }
- output << " in:" << NL; textattr=10; output << thiswas << NL;
- error_found=true;
+static varying_string<80> this_, thiswas;
+
+static boolean error_found, ignoring;
+
+
+static void error(byte what) {
+ textattr = 15;
+ if (! error_found) {
+ clrscr;
+ textattr = 12;
+ output << "SETUP: *** ERROR FOUND IN AVALOT.INI! ***" << NL;
+ textattr = 15;
+ }
+ output << ' ';
+ switch (what) {
+ case parse_weird_field:
+ output << "Unknown identifier on the left";
+ break;
+ case parse_not_yes_or_no:
+ output << "Value on the right should be Yes or No";
+ break;
+ case parse_not_numeric:
+ output << "Value on the right is not numeric";
+ break;
+ case parse_not_kbd_or_joy:
+ output << "Value on the right should be Keyboard or Joystick";
+ break;
+ case parse_weird_logcode:
+ output << "Value on the right should be No, Printer or Disk";
+ break;
+ case parse_weird_card:
+ output << "Never heard of the card";
+ break;
+ }
+ output << " in:" << NL;
+ textattr = 10;
+ output << thiswas << NL;
+ error_found = true;
}
-static boolean yesno(string x)
-{
- boolean yesno_result;
- if (x=="YES")
- yesno_result=true;
- else if (x=="NO")
- yesno_result=false;
- else
- {
- error(parse_not_yes_or_no);
- yesno_result=false;
- }
- return yesno_result;
+static boolean yesno(string x) {
+ boolean yesno_result;
+ if (x == "YES")
+ yesno_result = true;
+ else if (x == "NO")
+ yesno_result = false;
+ else {
+ error(parse_not_yes_or_no);
+ yesno_result = false;
+ }
+ return yesno_result;
}
-static boolean kbdjoy(string x)
-{
- boolean kbdjoy_result;
- if (x=="KEYBOARD")
- kbdjoy_result=true;
- else if (x=="JOYSTICK")
- kbdjoy_result=false;
- else
- {
- error(parse_not_kbd_or_joy);
- kbdjoy_result=false;
- }
- return kbdjoy_result;
+static boolean kbdjoy(string x) {
+ boolean kbdjoy_result;
+ if (x == "KEYBOARD")
+ kbdjoy_result = true;
+ else if (x == "JOYSTICK")
+ kbdjoy_result = false;
+ else {
+ error(parse_not_kbd_or_joy);
+ kbdjoy_result = false;
+ }
+ return kbdjoy_result;
}
-static word numeric(string x)
-{
- const varying_string<15> hexdigits = "0123456789ABCDEF";
- word answer; integer e;
-
- word numeric_result;
- if (x[1]=='$')
- {
- answer=0;
- for( e=2; e <= length(x); e ++)
- {
- answer=answer << 4;
- answer += pos(upcase(x[e]),hexdigits)-1;
- }
- } else
- {
- val(x,answer,e);
- if (e!=0) error(parse_not_numeric);
- }
- numeric_result=answer;
- return numeric_result;
+static word numeric(string x) {
+ const varying_string<15> hexdigits = "0123456789ABCDEF";
+ word answer;
+ integer e;
+
+ word numeric_result;
+ if (x[1] == '$') {
+ answer = 0;
+ for (e = 2; e <= length(x); e ++) {
+ answer = answer << 4;
+ answer += pos(upcase(x[e]), hexdigits) - 1;
+ }
+ } else {
+ val(x, answer, e);
+ if (e != 0) error(parse_not_numeric);
+ }
+ numeric_result = answer;
+ return numeric_result;
}
-static void get_logcodes(string x)
-{
- if (x=="NO") { log_to_file=false; log_to_printer=false; } else
- if (x=="DISK") { log_to_file=true; log_to_printer=false; } else
- if (x=="PRINTER") { log_to_file=false; log_to_printer=true; } else
- error(parse_weird_logcode);
+static void get_logcodes(string x) {
+ if (x == "NO") {
+ log_to_file = false;
+ log_to_printer = false;
+ } else if (x == "DISK") {
+ log_to_file = true;
+ log_to_printer = false;
+ } else if (x == "PRINTER") {
+ log_to_file = false;
+ log_to_printer = true;
+ } else
+ error(parse_weird_logcode);
}
-static void get_card(string x)
-{
- if (x=="NONE") your_card=0; else
- if (x=="SB") your_card=1; else
- if (x=="SBPRO") your_card=2; else
- if (x=="SB16") your_card=3; else
- if (x=="PAS") your_card=4; else
- if (x=="PASPLUS") your_card=5; else
- if (x=="PAS16") your_card=6; else
- if (x=="ARIA") your_card=7; else
- if (x=="WINSOUND") your_card=8; else
- if (x=="GRAVIS") your_card=9; else
- if (x=="DACLPT") your_card=10; else
- if (x=="STEREODACS") your_card=11; else
- if (x=="STEREOON1") your_card=12; else
- if (x=="SPEAKER") your_card=13; else
- error(parse_weird_card);
+static void get_card(string x) {
+ if (x == "NONE") your_card = 0;
+ else if (x == "SB") your_card = 1;
+ else if (x == "SBPRO") your_card = 2;
+ else if (x == "SB16") your_card = 3;
+ else if (x == "PAS") your_card = 4;
+ else if (x == "PASPLUS") your_card = 5;
+ else if (x == "PAS16") your_card = 6;
+ else if (x == "ARIA") your_card = 7;
+ else if (x == "WINSOUND") your_card = 8;
+ else if (x == "GRAVIS") your_card = 9;
+ else if (x == "DACLPT") your_card = 10;
+ else if (x == "STEREODACS") your_card = 11;
+ else if (x == "STEREOON1") your_card = 12;
+ else if (x == "SPEAKER") your_card = 13;
+ else
+ error(parse_weird_card);
}
-void parse_file(){
+void parse_file() {
- word where;
- byte position;
- varying_string<80> field,data,pure_data;
- option o;
+ word where;
+ byte position;
+ varying_string<80> field, data, pure_data;
+ option o;
- error_found=false;
- ignoring=false;
+ error_found = false;
+ ignoring = false;
- for( where=1; where <= mobylength; where ++)
- {
- this_=(*moby)[where]; thiswas=this_;
+ for (where = 1; where <= mobylength; where ++) {
+ this_ = (*moby)[where];
+ thiswas = this_;
- position=pos(";",this_);
- if (position>0) this_=copy(this_,1,position-1);
+ position = pos(";", this_);
+ if (position > 0) this_ = copy(this_, 1, position - 1);
- if (this_=="") continue_; /* Don't carry on if by now it's empty. */
+ if (this_ == "") continue_; /* Don't carry on if by now it's empty. */
- if (this_[1]=='[')
- {
- ignoring=! (trim_and_caps(this_)=="[END]");
+ if (this_[1] == '[') {
+ ignoring = !(trim_and_caps(this_) == "[END]");
- if (copy(this_,1,8)=="[printer")
- {
- num_printers += 1;
- printers[num_printers]=copy(this_,10,length(this_)-10);
- }
- }
+ if (copy(this_, 1, 8) == "[printer") {
+ num_printers += 1;
+ printers[num_printers] = copy(this_, 10, length(this_) - 10);
+ }
+ }
- if (ignoring) continue_;
+ if (ignoring) continue_;
- position=pos("=",this_);
- field=trim_and_caps(copy(this_,1,position-1)); if (field=="") continue_;
- pure_data=copy(this_,position+1,255);
- data=trim_and_caps(pure_data);
- o=string_2_option(field);
+ position = pos("=", this_);
+ field = trim_and_caps(copy(this_, 1, position - 1));
+ if (field == "") continue_;
+ pure_data = copy(this_, position + 1, 255);
+ data = trim_and_caps(pure_data);
+ o = string_2_option(field);
- /* general */
+ /* general */
- if (o==_overrideegacheck) override_ega=yesno(data); else
- if (o==_zoomystart) skip_loading_screens=yesno(data); else
- if (o==_loadfirst) load_particular=data; else
- if (o==_numlockhold) force_numlock=yesno(data); else
- if (o==_usemouse) ignore_mouse=yesno(data); else
- if (o==_controller) use_keyboard=kbdjoy(data); else
- if (o==_logging) get_logcodes(data); else
- if (o==_logfile) log_filename=data; else
+ if (o == _overrideegacheck) override_ega = yesno(data);
+ else if (o == _zoomystart) skip_loading_screens = yesno(data);
+ else if (o == _loadfirst) load_particular = data;
+ else if (o == _numlockhold) force_numlock = yesno(data);
+ else if (o == _usemouse) ignore_mouse = yesno(data);
+ else if (o == _controller) use_keyboard = kbdjoy(data);
+ else if (o == _logging) get_logcodes(data);
+ else if (o == _logfile) log_filename = data;
+ else
- /* joystick */
+ /* joystick */
- if (o==_joystickinstalled) has_a_joystick=yesno(data); else
- if (o==_joytop) jtop=numeric(data); else
- if (o==_joybottom) jbottom=numeric(data); else
- if (o==_joyleft) jleft=numeric(data); else
- if (o==_joyright) jright=numeric(data); else
- if (o==_joymidx) jmidx=numeric(data); else
- if (o==_joymidy) jmidy=numeric(data); else
- if (o==_joycentringfactor) jcentre=numeric(data); else
- if (o==_whichjoy) whichjoy=numeric(data); else
+ if (o == _joystickinstalled) has_a_joystick = yesno(data);
+ else if (o == _joytop) jtop = numeric(data);
+ else if (o == _joybottom) jbottom = numeric(data);
+ else if (o == _joyleft) jleft = numeric(data);
+ else if (o == _joyright) jright = numeric(data);
+ else if (o == _joymidx) jmidx = numeric(data);
+ else if (o == _joymidy) jmidy = numeric(data);
+ else if (o == _joycentringfactor) jcentre = numeric(data);
+ else if (o == _whichjoy) whichjoy = numeric(data);
+ else
- /* sound */
+ /* sound */
- if (o==_quiet) suppress_sfx=yesno(data); else
- if (o==_soundcard) get_card(data); else
- if (o==_samplerate) samplerate=numeric(data); else
- if (o==_baseaddress) sound_addr=numeric(data); else
- if (o==_irq) sound_irq=numeric(data); else
- if (o==_dma) sound_dma=numeric(data); else
- if (o==_keyboardclick) wants_keyclick=yesno(data); else
+ if (o == _quiet) suppress_sfx = yesno(data);
+ else if (o == _soundcard) get_card(data);
+ else if (o == _samplerate) samplerate = numeric(data);
+ else if (o == _baseaddress) sound_addr = numeric(data);
+ else if (o == _irq) sound_irq = numeric(data);
+ else if (o == _dma) sound_dma = numeric(data);
+ else if (o == _keyboardclick) wants_keyclick = yesno(data);
+ else
- /* printer */
+ /* printer */
- if (o==_printer) this_printer=pure_data; else
+ if (o == _printer) this_printer = pure_data;
+ else
- /* others */
+ /* others */
- error(parse_weird_field);
- }
+ error(parse_weird_field);
+ }
- if (error_found)
- {
- textattr=15;
- output << " Try and fix the above errors. As a last resort, try deleting or" << NL;
- output << " renaming AVALOT.INI, and the default values will be used. Good luck." << NL;
- exit(177);
- }
- }
+ if (error_found) {
+ textattr = 15;
+ output << " Try and fix the above errors. As a last resort, try deleting or" << NL;
+ output << " renaming AVALOT.INI, and the default values will be used. Good luck." << NL;
+ exit(177);
+ }
+}
-void clear_up()
-{
- window(1,1,80,25);
- textattr=31;
- clrscr;
- output << NL;
- output << "Enjoy the game..." << NL;
- output << NL;
- cga_cursor_on;
+void clear_up() {
+ window(1, 1, 80, 25);
+ textattr = 31;
+ clrscr;
+ output << NL;
+ output << "Enjoy the game..." << NL;
+ output << NL;
+ cga_cursor_on;
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- cursor_off;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ cursor_off;
- moby = new mobytype; /* Allocate memory space */
+ moby = new mobytype; /* Allocate memory space */
- defaults();
+ defaults();
- load_file();
+ load_file();
- parse_file();
+ parse_file();
- menu();
+ menu();
- delete moby; /* Deallocate memory space again */
+ delete moby; /* Deallocate memory space again */
- clear_up();
- return EXIT_SUCCESS;
+ clear_up();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/seu.cpp b/engines/avalanche/seu.cpp
index 883a810cdb..8025b9a4c1 100644
--- a/engines/avalanche/seu.cpp
+++ b/engines/avalanche/seu.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -45,7 +45,7 @@ const integer avvy_y = 150;
const integer left_margin = 10;
const integer right_margin = 605;
-const array<0,6,byte> shooting = {{87,80,81,82,81,80,87}};
+const array<0, 6, byte> shooting = {{87, 80, 81, 82, 81, 80, 87}};
const integer stocks = 28;
@@ -56,7 +56,7 @@ const integer maxrunners = 4;
const integer times_a_second = /*31*/18;
const integer flash_time = 20; /* If flash_time is <= this, the word "time" will flash. */
- /* Should be about 20. */
+/* Should be about 20. */
/* --- Scores for various things --- */
@@ -64,42 +64,43 @@ const integer score_for_hitting_face = 3;
const integer bonus_for_hitting_escaper = 5;
struct mtype {
- shortint ix,iy;
- integer x,y;
- byte p;
- integer timeout;
- boolean cameo;
- byte cameo_frame;
- boolean missile;
- boolean wipe;
+ shortint ix, iy;
+ integer x, y;
+ byte p;
+ integer timeout;
+ boolean cameo;
+ byte cameo_frame;
+ boolean missile;
+ boolean wipe;
};
struct xtype {
- word s;
- pointer p;
+ word s;
+ pointer p;
};
class rectype {
public:
- integer x1,y1,x2,y2;
+ integer x1, y1, x2, y2;
};
class plottype : public rectype {
public:
- byte which;
+ byte which;
};
class plotmasktype : public plottype {
public:
- byte whichmask;
+ byte whichmask;
};
-array<1,100,xtype> x;
-array<1,100,mtype> m;
-matrix<0,1,1,100,rectype> r;
-array<0,1,byte> rsize;
+array<1, 100, xtype> x;
+array<1, 100, mtype> m;
+matrix<0, 1, 1, 100, rectype> r;
+array<0, 1, byte> rsize;
byte cp;
-word score; byte time1;
+word score;
+byte time1;
byte shiftstate; /*ABSOLUTE $40:$17; */
@@ -116,15 +117,15 @@ byte throw_next;
boolean firing;
-array<0,6,byte> stockstatus;
+array<0, 6, byte> stockstatus;
-array<1,maxrunners,struct A1 {
- integer x,y;
- byte frame;
- byte toohigh,lowest;
- shortint ix,iy;
- byte framedelay;
- }> running;
+array < 1, maxrunners, struct A1 {
+ integer x, y;
+ byte frame;
+ byte toohigh, lowest;
+ shortint ix, iy;
+ byte framedelay;
+} > running;
varying_string<5> score_is;
varying_string<3> time_is;
@@ -133,432 +134,418 @@ byte time_this_second;
word escape_count;
byte escape_stock;
-boolean escaping,got_out;
+boolean escaping, got_out;
-array<0,6,boolean> has_escaped;
+array<0, 6, boolean> has_escaped;
byte count321;
-word storage_seg,storage_ofs;
+word storage_seg, storage_ofs;
byte how_many_have_escaped;
-void flippage()
-{
- setactivepage(cp);
- cp=1-cp;
- setvisualpage(cp);
+void flippage() {
+ setactivepage(cp);
+ cp = 1 - cp;
+ setvisualpage(cp);
}
-void flesh_colours() {; /*assembler;
+void flesh_colours() {
+ ; /*assembler;
asm
mov ax,$1012;
mov bx,21; { 21 = light pink (why?) */
- /*mov cx,1;
- mov dx,seg @flesh;
- mov es,dx;
- mov dx,offset @flesh;
- int $10;
+ /*mov cx,1;
+ mov dx,seg @flesh;
+ mov es,dx;
+ mov dx,offset @flesh;
+ int $10;
- mov dx,seg @darkflesh;
- mov es,dx;
- mov dx,offset @darkflesh;
- mov bx,5; { 5 = dark pink. */
- /*int $10;
-
- jmp @TheEnd;
-
- @flesh:
- db 56,35,35;
-
- @darkflesh:
- db 43,22,22;
-
- @TheEnd: */
- }
-
-boolean overlap(word a1x,word a1y,word a2x,word a2y,word b1x,word b1y,word b2x,word b2y)
-{ /* By De Morgan's law: */
- boolean overlap_result;
- overlap_result=(a2x>=b1x) && (b2x>=a1x) && (a2y>=b1y) && (b2y>=a1y);
- return overlap_result;
-}
-
-void getsize(byte w, integer& xx,integer& yy)
-{
- array<0,1,integer> n;
-
- move(x[w].p,n,4);
- xx=n[0]; yy=n[1];
-}
-
-void display(integer xx,integer yy, byte w)
-{
- putimage(xx,yy,x[w].p,0);
-}
-
-byte get_stock_number(byte x)
-{
- byte get_stock_number_result;
- while (has_escaped[x])
- {
- x += 1;
- if (x==7) x=0;
- }
- get_stock_number_result=x;
- return get_stock_number_result;
-}
-
-void cameo_display(integer xx,integer yy, byte w1,byte w2)
-{
- putimage(xx,yy,x[w2].p,andput);
- putimage(xx,yy,x[w1].p,xorput);
-}
-
-void blankit()
-{
- byte fv;
-
- for( fv=1; fv <= rsize[cp]; fv ++)
- { rectype& with = r[cp][fv];
- bar(with.x1,with.y1,with.x2,with.y2);}
- rsize[cp]=0;
-}
-
-void blank(integer xx1,integer yy1,integer xx2,integer yy2)
-{
- rsize[cp] += 1;
- {
- rectype& with = r[cp][rsize[cp]];
-
- with.x1=xx1;
- with.y1=yy1;
- with.x2=xx2;
- with.y2=yy2;
- }
-}
-
-void movethem()
-{
- byte fv;
-
- for( fv=1; fv <= msize; fv ++)
- { mtype& with = m[fv];
- if (with.x!=flag)
- {
- with.x=with.x+with.ix;
- with.y=with.y+with.iy;
- }}
-}
-
-void plotthem()
-{
- byte fv; integer xx,yy;
-
- for( fv=1; fv <= msize; fv ++)
- { mtype& with = m[fv];
- if (with.x!=flag)
- {
- if (with.cameo)
- {
- cameo_display(with.x,with.y,with.p,with.cameo_frame);
- if (cp==0) { with.cameo_frame += 2; with.p += 2; }
- } else display(with.x,with.y,with.p);
- getsize(with.p,xx,yy);
- if (with.wipe) blank(with.x,with.y,with.x+xx,with.y+yy);
- if (with.timeout>0)
- {
- with.timeout -= 1;
- if (with.timeout==0) with.x=flag;
- }
- }}
-}
-
-void define(integer xx,integer yy, byte pp, shortint ixx,shortint iyy, integer timetime,
- boolean is_a_missile,boolean do_we_wipe)
-{
- byte which;
-
- for( which=1; which <= msize; which ++)
- {
- mtype& with = m[which];
-
- if (with.x==flag)
- {
- with.x=xx;
- with.y=yy;
- with.p=pp;
- with.ix=ixx;
- with.iy=iyy;
- with.timeout=timetime;
- with.cameo=false;
- with.missile=is_a_missile;
- with.wipe=do_we_wipe;
-
- return;
- }
- }
-}
-
-void define_cameo(integer xx,integer yy, byte pp, integer timetime)
-{
- byte which;
-
- for( which=1; which <= msize; which ++)
- {
- mtype& with = m[which];
-
- if (with.x==flag)
- {
- with.x=xx;
- with.y=yy;
- with.p=pp;
- with.ix=0;
- with.iy=0;
- with.timeout=timetime;
- with.cameo=true;
- with.cameo_frame=pp+1;
- with.missile=false;
- with.wipe=false;
-
- return;
- }
- }
-}
-
-void get_score()
-{
- byte fv;
-
- str(score,5,score_is);
- for( fv=1; fv <= 5; fv ++)
- if (score_is[fv]==' ')
- score_is[fv]='0';
-}
-
-void get_time1()
-{
- byte fv;
-
- str(time1,5,time_is);
- for( fv=1; fv <= 3; fv ++)
- if (time_is[fv]==' ')
- time_is[fv]='0';
-}
-
-void display_const(integer x,integer y, byte what)
-{
- byte page_;
-
- for( page_=0; page_ <= 1; page_ ++)
- {
- setactivepage(page_);
- display(x,y,what);
- }
- setactivepage(1-cp);
-}
-
-void show_stock(byte x)
-{
- if (escaping && (x==escape_stock))
- {
- display_const(x*90+20,30,stocks+2);
- return;
- }
- if (stockstatus[x]>5) return;
- display_const(x*90+20,30,stocks+stockstatus[x]);
- stockstatus[x]=1-stockstatus[x];
-}
-
-void show_score()
-{
- byte fv;
- varying_string<5> score_was;
-
- score_was=score_is; get_score();
- for( fv=1; fv <= 5; fv ++)
- if (score_was[fv]!=score_is[fv])
- display_const(30+fv*10,0,ord(score_is[fv])-47);
-}
-
-void show_time()
-{
- byte fv;
- varying_string<3> time_was;
-
- time_was=time_is; get_time1();
- for( fv=1; fv <= 3; fv ++)
- if (time_was[fv]!=time_is[fv])
- display_const(130+fv*10,0,ord(time_is[fv])-47);
+ mov dx,seg @darkflesh;
+ mov es,dx;
+ mov dx,offset @darkflesh;
+ mov bx,5; { 5 = dark pink. */
+ /*int $10;
+
+ jmp @TheEnd;
+
+ @flesh:
+ db 56,35,35;
+
+ @darkflesh:
+ db 43,22,22;
+
+ @TheEnd: */
+}
+
+boolean overlap(word a1x, word a1y, word a2x, word a2y, word b1x, word b1y, word b2x, word b2y) {
+ /* By De Morgan's law: */
+ boolean overlap_result;
+ overlap_result = (a2x >= b1x) && (b2x >= a1x) && (a2y >= b1y) && (b2y >= a1y);
+ return overlap_result;
+}
+
+void getsize(byte w, integer &xx, integer &yy) {
+ array<0, 1, integer> n;
+
+ move(x[w].p, n, 4);
+ xx = n[0];
+ yy = n[1];
+}
+
+void display(integer xx, integer yy, byte w) {
+ putimage(xx, yy, x[w].p, 0);
+}
+
+byte get_stock_number(byte x) {
+ byte get_stock_number_result;
+ while (has_escaped[x]) {
+ x += 1;
+ if (x == 7) x = 0;
+ }
+ get_stock_number_result = x;
+ return get_stock_number_result;
+}
+
+void cameo_display(integer xx, integer yy, byte w1, byte w2) {
+ putimage(xx, yy, x[w2].p, andput);
+ putimage(xx, yy, x[w1].p, xorput);
+}
+
+void blankit() {
+ byte fv;
+
+ for (fv = 1; fv <= rsize[cp]; fv ++) {
+ rectype &with = r[cp][fv];
+ bar(with.x1, with.y1, with.x2, with.y2);
+ }
+ rsize[cp] = 0;
+}
+
+void blank(integer xx1, integer yy1, integer xx2, integer yy2) {
+ rsize[cp] += 1;
+ {
+ rectype &with = r[cp][rsize[cp]];
+
+ with.x1 = xx1;
+ with.y1 = yy1;
+ with.x2 = xx2;
+ with.y2 = yy2;
+ }
+}
+
+void movethem() {
+ byte fv;
+
+ for (fv = 1; fv <= msize; fv ++) {
+ mtype &with = m[fv];
+ if (with.x != flag) {
+ with.x = with.x + with.ix;
+ with.y = with.y + with.iy;
+ }
+ }
+}
+
+void plotthem() {
+ byte fv;
+ integer xx, yy;
+
+ for (fv = 1; fv <= msize; fv ++) {
+ mtype &with = m[fv];
+ if (with.x != flag) {
+ if (with.cameo) {
+ cameo_display(with.x, with.y, with.p, with.cameo_frame);
+ if (cp == 0) {
+ with.cameo_frame += 2;
+ with.p += 2;
+ }
+ } else display(with.x, with.y, with.p);
+ getsize(with.p, xx, yy);
+ if (with.wipe) blank(with.x, with.y, with.x + xx, with.y + yy);
+ if (with.timeout > 0) {
+ with.timeout -= 1;
+ if (with.timeout == 0) with.x = flag;
+ }
+ }
+ }
}
-void gain(shortint howmuch)
-{
- if (-howmuch>score) score=0; else
- score=score+howmuch;
- show_score();
+void define(integer xx, integer yy, byte pp, shortint ixx, shortint iyy, integer timetime,
+ boolean is_a_missile, boolean do_we_wipe) {
+ byte which;
+
+ for (which = 1; which <= msize; which ++) {
+ mtype &with = m[which];
+
+ if (with.x == flag) {
+ with.x = xx;
+ with.y = yy;
+ with.p = pp;
+ with.ix = ixx;
+ with.iy = iyy;
+ with.timeout = timetime;
+ with.cameo = false;
+ with.missile = is_a_missile;
+ with.wipe = do_we_wipe;
+
+ return;
+ }
+ }
+}
+
+void define_cameo(integer xx, integer yy, byte pp, integer timetime) {
+ byte which;
+
+ for (which = 1; which <= msize; which ++) {
+ mtype &with = m[which];
+
+ if (with.x == flag) {
+ with.x = xx;
+ with.y = yy;
+ with.p = pp;
+ with.ix = 0;
+ with.iy = 0;
+ with.timeout = timetime;
+ with.cameo = true;
+ with.cameo_frame = pp + 1;
+ with.missile = false;
+ with.wipe = false;
+
+ return;
+ }
+ }
+}
+
+void get_score() {
+ byte fv;
+
+ str(score, 5, score_is);
+ for (fv = 1; fv <= 5; fv ++)
+ if (score_is[fv] == ' ')
+ score_is[fv] = '0';
+}
+
+void get_time1() {
+ byte fv;
+
+ str(time1, 5, time_is);
+ for (fv = 1; fv <= 3; fv ++)
+ if (time_is[fv] == ' ')
+ time_is[fv] = '0';
}
-void new_escape()
-{
- escape_count=Random(18)*20;
- escaping=false;
+void display_const(integer x, integer y, byte what) {
+ byte page_;
+
+ for (page_ = 0; page_ <= 1; page_ ++) {
+ setactivepage(page_);
+ display(x, y, what);
+ }
+ setactivepage(1 - cp);
+}
+
+void show_stock(byte x) {
+ if (escaping && (x == escape_stock)) {
+ display_const(x * 90 + 20, 30, stocks + 2);
+ return;
+ }
+ if (stockstatus[x] > 5) return;
+ display_const(x * 90 + 20, 30, stocks + stockstatus[x]);
+ stockstatus[x] = 1 - stockstatus[x];
+}
+
+void show_score() {
+ byte fv;
+ varying_string<5> score_was;
+
+ score_was = score_is;
+ get_score();
+ for (fv = 1; fv <= 5; fv ++)
+ if (score_was[fv] != score_is[fv])
+ display_const(30 + fv * 10, 0, ord(score_is[fv]) - 47);
+}
+
+void show_time() {
+ byte fv;
+ varying_string<3> time_was;
+
+ time_was = time_is;
+ get_time1();
+ for (fv = 1; fv <= 3; fv ++)
+ if (time_was[fv] != time_is[fv])
+ display_const(130 + fv * 10, 0, ord(time_is[fv]) - 47);
+}
+
+void gain(shortint howmuch) {
+ if (-howmuch > score) score = 0;
+ else
+ score = score + howmuch;
+ show_score();
+}
+
+void new_escape() {
+ escape_count = Random(18) * 20;
+ escaping = false;
}
void instructions();
-static void nextpage()
-{
- char c;
-
- outtextxy(400,190,"Press a key for next page >");
- c=readkey();
- cleardevice();
-}
-
-void instructions()
-{
- display(25,25,facing_right);
- outtextxy(60,35,"< Avvy, our hero, needs your help - you must move him around.");
- outtextxy(80,45,"(He's too terrified to move himself!)");
-
- outtextxy(0,75,"Your task is to prevent the people in the stocks from escaping");
- outtextxy(0,85,"by pelting them with rotten fruit, eggs and bread. The keys are:");
- outtextxy(80,115,"LEFT SHIFT"); outtextxy(200,115,"Move left.");
- outtextxy(72,135,"RIGHT SHIFT"); outtextxy(200,135,"Move right.");
- outtextxy(136,155,"ALT"); outtextxy(200,155,"Throw something.");
- nextpage();
-
- display(25,35,stocks);
- outtextxy(80,35,"This man is in the stocks. Your job is to stop him getting out.");
- outtextxy(88,45,"UNFORTUNATELY... the locks on the stocks are loose, and every");
- outtextxy(88,55,"so often, someone will discover this and try to get out.");
- display(25, 85,stocks+2);
- outtextxy(80, 85,"< Someone who has found a way out!");
- outtextxy(88, 95,"You MUST IMMEDIATELY hit people smiling like this, or they");
- outtextxy(88,105,"will disappear and lose you points.");
- display(25,125,stocks+5);
- display(25,155,stocks+4);
- outtextxy(80,125,"< Oh dear!");
- nextpage();
-
- outtextxy(0,35,"Your task is made harder by:");
- display(25,55,48);
- outtextxy(60,55,"< Yokels. These people will run in front of you. If you hit");
- outtextxy(68,65,"them, you will lose MORE points than you get hitting people");
- outtextxy(68,75,"in the stocks. So BEWARE!");
- outtextxy(80,125,"Good luck with the game!");
- nextpage();
-}
-
-void setup()
-{
- integer gd,gm;
- untyped_file f;
- char rkv;
-
- rkv=upcase(readkey());
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- flesh_colours();
-
- assign(f,"notts.avd");
- reset(f,1); gd=1;
- score=0; time1=120; score_is="(c)94";
- time_this_second=0;
-
- while (! eof(f))
- {
- xtype& with = x[gd];
-
- blockread(f,with.s,2);
- getmem(with.p,with.s);
- blockread(f,with.p,with.s);
- gd += 1;
- }
- close(f);
-
- if ((rkv=='I') || ((rkv=='\0') && (readkey()==cf1))) instructions();
-
- for( gd=0; gd <= 6; gd ++)
- {
- stockstatus[gd]=Random(2);
- show_stock(gd);
- }
-
- fillchar(m,sizeof(m),'\261');
- setfillstyle(1,0);
- cp=0;
- flippage();
- fillchar(rsize,sizeof(rsize),'\0');
- avvywas=320;
- avvypos=320;
- avvyanim=1;
- avvyfacing=facing_left;
-
- alt_was_pressed_before=false;
- throw_next=74;
- firing=false;
-
- for( gd=1; gd <= maxrunners; gd ++)
- {
- A1& with = running[gd];
-
- with.x=flag;
- }
-
- new_escape();
- fillchar(has_escaped,sizeof(has_escaped),'\0'); /* All false. */
- count321=255; /* Counting down. */
-
- /* Set up status line. */
-
- display_const(0,0,17); /* Score: */
- show_score(); /* value of score (00000 here) */
- display_const(110,0,20); /* Time: */
- show_time(); /* value of time */
-
- Randomize();
-
- how_many_have_escaped=0;
-}
-
-void init_runner(integer xx,integer yy, byte f1,byte f2, shortint ixx,shortint iyy)
-{
- byte fv;
-
- for( fv=1; fv <= maxrunners; fv ++)
- { A1& with = running[fv];
- if (with.x==flag)
- {
- with.x=xx; with.y=yy;
- with.frame=f1;
- with.toohigh=f2;
- with.lowest=f1;
- with.ix=ixx; with.iy=iyy;
- if ((with.ix==0) && (with.iy==0)) with.ix=2; /* To stop them running on the spot! */
- with.framedelay=framedelaymax;
- return;
- }}
-}
-
-void titles()
-{
- registers r;
- byte a; /*absolute $A000:0; */
- untyped_file f;
- byte bit;
-
- r.ax=0xd;
- intr(0x10,r);
-
- assign(f,"shoot1.avd");
- reset(f,1);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,8000);
- }
- close(f);
+static void nextpage() {
+ char c;
+
+ outtextxy(400, 190, "Press a key for next page >");
+ c = readkey();
+ cleardevice();
+}
+
+void instructions() {
+ display(25, 25, facing_right);
+ outtextxy(60, 35, "< Avvy, our hero, needs your help - you must move him around.");
+ outtextxy(80, 45, "(He's too terrified to move himself!)");
+
+ outtextxy(0, 75, "Your task is to prevent the people in the stocks from escaping");
+ outtextxy(0, 85, "by pelting them with rotten fruit, eggs and bread. The keys are:");
+ outtextxy(80, 115, "LEFT SHIFT");
+ outtextxy(200, 115, "Move left.");
+ outtextxy(72, 135, "RIGHT SHIFT");
+ outtextxy(200, 135, "Move right.");
+ outtextxy(136, 155, "ALT");
+ outtextxy(200, 155, "Throw something.");
+ nextpage();
+
+ display(25, 35, stocks);
+ outtextxy(80, 35, "This man is in the stocks. Your job is to stop him getting out.");
+ outtextxy(88, 45, "UNFORTUNATELY... the locks on the stocks are loose, and every");
+ outtextxy(88, 55, "so often, someone will discover this and try to get out.");
+ display(25, 85, stocks + 2);
+ outtextxy(80, 85, "< Someone who has found a way out!");
+ outtextxy(88, 95, "You MUST IMMEDIATELY hit people smiling like this, or they");
+ outtextxy(88, 105, "will disappear and lose you points.");
+ display(25, 125, stocks + 5);
+ display(25, 155, stocks + 4);
+ outtextxy(80, 125, "< Oh dear!");
+ nextpage();
+
+ outtextxy(0, 35, "Your task is made harder by:");
+ display(25, 55, 48);
+ outtextxy(60, 55, "< Yokels. These people will run in front of you. If you hit");
+ outtextxy(68, 65, "them, you will lose MORE points than you get hitting people");
+ outtextxy(68, 75, "in the stocks. So BEWARE!");
+ outtextxy(80, 125, "Good luck with the game!");
+ nextpage();
+}
+
+void setup() {
+ integer gd, gm;
+ untyped_file f;
+ char rkv;
+
+ rkv = upcase(readkey());
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ flesh_colours();
+
+ assign(f, "notts.avd");
+ reset(f, 1);
+ gd = 1;
+ score = 0;
+ time1 = 120;
+ score_is = "(c)94";
+ time_this_second = 0;
+
+ while (! eof(f)) {
+ xtype &with = x[gd];
+
+ blockread(f, with.s, 2);
+ getmem(with.p, with.s);
+ blockread(f, with.p, with.s);
+ gd += 1;
+ }
+ close(f);
+
+ if ((rkv == 'I') || ((rkv == '\0') && (readkey() == cf1))) instructions();
+
+ for (gd = 0; gd <= 6; gd ++) {
+ stockstatus[gd] = Random(2);
+ show_stock(gd);
+ }
+
+ fillchar(m, sizeof(m), '\261');
+ setfillstyle(1, 0);
+ cp = 0;
+ flippage();
+ fillchar(rsize, sizeof(rsize), '\0');
+ avvywas = 320;
+ avvypos = 320;
+ avvyanim = 1;
+ avvyfacing = facing_left;
+
+ alt_was_pressed_before = false;
+ throw_next = 74;
+ firing = false;
+
+ for (gd = 1; gd <= maxrunners; gd ++) {
+ A1 &with = running[gd];
+
+ with.x = flag;
+ }
+
+ new_escape();
+ fillchar(has_escaped, sizeof(has_escaped), '\0'); /* All false. */
+ count321 = 255; /* Counting down. */
+
+ /* Set up status line. */
+
+ display_const(0, 0, 17); /* Score: */
+ show_score(); /* value of score (00000 here) */
+ display_const(110, 0, 20); /* Time: */
+ show_time(); /* value of time */
+
+ Randomize();
+
+ how_many_have_escaped = 0;
+}
+
+void init_runner(integer xx, integer yy, byte f1, byte f2, shortint ixx, shortint iyy) {
+ byte fv;
+
+ for (fv = 1; fv <= maxrunners; fv ++) {
+ A1 &with = running[fv];
+ if (with.x == flag) {
+ with.x = xx;
+ with.y = yy;
+ with.frame = f1;
+ with.toohigh = f2;
+ with.lowest = f1;
+ with.ix = ixx;
+ with.iy = iyy;
+ if ((with.ix == 0) && (with.iy == 0)) with.ix = 2; /* To stop them running on the spot! */
+ with.framedelay = framedelaymax;
+ return;
+ }
+ }
+}
+
+void titles() {
+ registers r;
+ byte a; /*absolute $A000:0; */
+ untyped_file f;
+ byte bit;
+
+ r.ax = 0xd;
+ intr(0x10, r);
+
+ assign(f, "shoot1.avd");
+ reset(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 8000);
+ }
+ close(f);
}
/*
procedure animate3;
@@ -608,397 +595,395 @@ begin
end;
*/
-void move_avvy()
-{
- if (avvywas<avvypos)
- {
-/* bar(avvyWas,avvy_Y,avvyPos,Avvy_Y+85);*/
- avvyfacing=facing_right;
- } else if (avvywas>avvypos)
- {
-/* bar(avvyWas+32,Avvy_Y,avvyPos+33,Avvy_Y+85);*/
- avvyfacing=facing_left;
- }
-
- if (! firing)
- {
- if (avvywas==avvypos)
- avvyanim=1;
- else
- {
- avvyanim += 1;
- if (avvyanim==6) avvyanim=0;
- }
- }
-
- if (avvyfacing==avvy_shoot)
- define(avvypos,avvy_y,shooting[avvyanim],0,0,1,false,true);
- else
- define(avvypos,avvy_y,avvyanim+avvyfacing,0,0,1,false,true);
-
- avvywas=avvypos;
-
- if (avvyfacing==avvy_shoot)
- {
- if (avvyanim==6)
- {
- avvyfacing=was_facing;
- avvyanim=0;
- firing=false;
- } else avvyanim += 1;
- }
-}
-
-void read_kbd()
-{
-
- if (firing) return;
-
- if ((shiftstate & 8)>0)
- { /* Alt - shoot */
- if ((alt_was_pressed_before) || (count321!=0)) return;
- alt_was_pressed_before=true;
- firing=true;
- define(avvypos+27,avvy_y+5,throw_next,0,-2,53,true,true);
- throw_next += 1; if (throw_next==80) throw_next=74;
- avvyanim=0;
- was_facing=avvyfacing;
- avvyfacing=avvy_shoot;
- return;
- }
-
- alt_was_pressed_before=false;
-
- if ((shiftstate & 1)>0)
- { /* Move right. */
- avvypos += 5;
- if (avvypos>right_margin) avvypos=right_margin;
- return;
- }
-
- if ((shiftstate & 2)>0)
- { /* Move left. */
- avvypos -= 5;
- if (avvypos<left_margin) avvypos=left_margin;
- }
-
-}
-
-void animate()
-{
- byte fv;
-
- if (Random(10)==1) show_stock(get_stock_number(Random(6)));
- for( fv=0; fv <= 6; fv ++)
- if (stockstatus[fv]>5)
- {
- stockstatus[fv] -= 1;
- if (stockstatus[fv]==8)
- {
- stockstatus[fv]=0;
- show_stock(fv);
- }
- }
-}
-
-void collision_check()
-{
- byte fv;
- integer dist_from_side;
- byte this_stock;
-
- for( fv=1; fv <= 100; fv ++)
- { mtype& with = m[fv];
- if (with.x!=flag)
- {
- if ((with.missile) && (with.y<60) && (with.timeout==1))
- {
-/* sound(177); delay(1); nosound;*/
- dist_from_side=(with.x-20) % 90;
- this_stock=((with.x-20) / 90);
- if ((! has_escaped[this_stock]) &&
- (dist_from_side>17) && (dist_from_side<34))
- {
- sound(999); delay(3); nosound;
- define(with.x+20,with.y,26+Random(2),3,1,12,false,true); /* Well done! */
- define(this_stock*90+20,30,31,0,0,7,false,false); /* Face of man */
- define_cameo(this_stock*90+20+10,35,40,7); /* Splat! */
- define(this_stock*90+20+20,50,34+Random(5),0,2,9,false,true); /* Oof! */
- stockstatus[this_stock]=17;
- gain(score_for_hitting_face);
-
- if ((escaping) && (escape_stock==this_stock))
- { /* Hit the escaper. */
- sound(1777); delay(1); nosound;
- gain(bonus_for_hitting_escaper);
- escaping=false; new_escape();
- }
- } else
- {
- define(with.x,with.y,83+Random(3),2,2,17,false,true); /* Missed! */
- if ((! has_escaped[this_stock]) &&
- ((dist_from_side>3) && (dist_from_side<43)))
- {
- define(this_stock*90+20,30,30,0,0,7,false,false); /* Face of man */
- if (dist_from_side>35)
- define_cameo(with.x-27,35,40,7); /* Splat! */
- else
- define_cameo(with.x-7,35,40,7);
- stockstatus[this_stock]=17;
- }
- }
- }
- }}
-}
-
-shortint sgn(integer a)
-{
- shortint sgn_result;
- if (a==0) { sgn_result=0; return sgn_result; }
- if (a>0) { sgn_result=1; return sgn_result; }
- sgn_result=-1;
- return sgn_result;
-}
-
-void turn_around(byte who, boolean randomx)
-{
- {
- A1& with = running[who];
-
- if (randomx)
- {
- if (with.ix>0) with.ix=-(Random(5)+1); else with.ix=(Random(5)+1);
- } else
- with.ix=-with.ix;
- with.iy=-with.iy;
- }
-}
-
-void bump_folk()
-{
- byte fv,ff;
-
- for( fv=1; fv <= maxrunners; fv ++)
- if (running[fv].x!=flag)
- for( ff=fv+1; ff <= maxrunners; ff ++)
- if ((running[ff].x!=flag) &&
- overlap(running[fv].x,running[fv].y,
- running[fv].x+17,running[fv].y+24,
- running[ff].x,running[ff].y,
- running[ff].x+17,running[ff].y+24))
- {
- turn_around(fv,false); /* Opp. directions. */
- turn_around(ff,false);
- }
-}
-
-void people_running()
-{
- byte fv;
-
- if (count321!=0) return;
- for( fv=1; fv <= maxrunners; fv ++)
- { A1& with = running[fv];
- if (with.x!=flag)
- {
- if (((with.y+with.iy)<=53) || ((with.y+with.iy)>=120))
- {
- with.iy=-with.iy;
- }
-
- if (with.ix<0)
- define(with.x,with.y,with.frame,0,0,1,false,true);
- else
- define(with.x,with.y,with.frame+7,0,0,1,false,true);
- if (with.framedelay==0)
- {
- with.frame += 1; if (with.frame==with.toohigh) with.frame=with.lowest;
- with.framedelay=framedelaymax;
- with.y=with.y+with.iy;
- } else with.framedelay -= 1;
-
- if (((with.x+with.ix)<=0) || ((with.x+with.ix)>=620)) turn_around(fv,true);
-
- with.x=with.x+with.ix;
- }}
-}
-
-void update_time()
-{
- if (count321!=0) return;
- time_this_second += 1;
- if (time_this_second < times_a_second) return;
- time1 -= 1;
- show_time();
- time_this_second=0;
- if (time1<=flash_time)
- if (odd(time1)) display_const(110,0,20); /* Normal time */
- else display_const(110,0,86); /* Flash time */
-}
-
-void hit_people()
-{
- byte fv,ff;
-
- if (count321!=0) return;
- for( fv=1; fv <= 100; fv ++)
- { mtype& with = m[fv];
- if (with.missile && (with.x!=flag))
- for( ff=1; ff <= maxrunners; ff ++)
- if ((running[ff].x!=flag) &&
- overlap(with.x,with.y,with.x+7,with.y+10,
- running[ff].x,running[ff].y,
- running[ff].x+17,
- running[ff].y+24))
- {
- sound(7177);
-/* setcolor(4);
- rectangle(x,y,x+7,y+10);
- rectangle(running[ff].x,running[ff].y,
- running[ff].x+17,
- running[ff].y+24);*/
- nosound;
- with.x=flag;
- gain(-5);
- define(running[ff].x+20,running[ff].y+3,
- 34+Random(6),1,3,9,false,true); /* Oof! */
- define(with.x,with.y,83,1,0,17,false,true); /* Oops! */
- }}
-}
-
-void escape_check()
-{
- if (count321!=0) return;
- if (escape_count>0) { escape_count -= 1; return; }
-
- /* Escape_count = 0; now what? */
-
- if (escaping)
- {
- if (got_out)
- {
- new_escape(); escaping=false;
- display_const(escape_stock*90+20,30,stocks+4);
- } else
- {
- display_const(escape_stock*90+20,30,stocks+5);
- escape_count=20; got_out=true;
- define(escape_stock*90+20,50,25,0,2,17,false,true); /* Escaped! */
- gain(-10);
- has_escaped[escape_stock]=true;
-
- how_many_have_escaped += 1;
-
- if (how_many_have_escaped == 7)
- {
- for( time1=0; time1 <= 1; time1 ++)
- {
- setactivepage(time1);
- cleardevice();
- }
- setactivepage(1-cp);
-
- memw[storage_seg*storage_ofs+1]=0;
- do {; } while (!(memw[storage_seg*storage_ofs+1]>9));
-
- setvisualpage(1-cp);
- display(266,90,23);
-
- memw[storage_seg*storage_ofs+1]=0;
- do {; } while (!(memw[storage_seg*storage_ofs+1]>72));
-
- setvisualpage(cp);
-
- memw[storage_seg*storage_ofs+1]=0;
- do {; } while (!(memw[storage_seg*storage_ofs+1]>9));
-
- time1=0;
- }
- }
- } else
- {
- escape_stock=get_stock_number(Random(7)); escaping=true; got_out=false;
- display_const(escape_stock*90+20,30,stocks+2); /* Smiling! */
- escape_count=200;
- }
-}
-
-void check321()
-{
- if (count321==0) return;
- count321 -= 1;
- switch (count321) {
- case 84: define(320, 60,16, 2, 1,94,false,true); break;
- case 169: define(320, 60,15, 0, 1,94,false,true); break;
- case 254: {
- define(320, 60,14,-2, 1,94,false,true);
- define( 0,100,18, 2, 0,254,false,true);
- }
- break;
- }
+void move_avvy() {
+ if (avvywas < avvypos) {
+ /* bar(avvyWas,avvy_Y,avvyPos,Avvy_Y+85);*/
+ avvyfacing = facing_right;
+ } else if (avvywas > avvypos) {
+ /* bar(avvyWas+32,Avvy_Y,avvyPos+33,Avvy_Y+85);*/
+ avvyfacing = facing_left;
+ }
+
+ if (! firing) {
+ if (avvywas == avvypos)
+ avvyanim = 1;
+ else {
+ avvyanim += 1;
+ if (avvyanim == 6) avvyanim = 0;
+ }
+ }
+
+ if (avvyfacing == avvy_shoot)
+ define(avvypos, avvy_y, shooting[avvyanim], 0, 0, 1, false, true);
+ else
+ define(avvypos, avvy_y, avvyanim + avvyfacing, 0, 0, 1, false, true);
+
+ avvywas = avvypos;
+
+ if (avvyfacing == avvy_shoot) {
+ if (avvyanim == 6) {
+ avvyfacing = was_facing;
+ avvyanim = 0;
+ firing = false;
+ } else avvyanim += 1;
+ }
+}
+
+void read_kbd() {
+
+ if (firing) return;
+
+ if ((shiftstate & 8) > 0) {
+ /* Alt - shoot */
+ if ((alt_was_pressed_before) || (count321 != 0)) return;
+ alt_was_pressed_before = true;
+ firing = true;
+ define(avvypos + 27, avvy_y + 5, throw_next, 0, -2, 53, true, true);
+ throw_next += 1;
+ if (throw_next == 80) throw_next = 74;
+ avvyanim = 0;
+ was_facing = avvyfacing;
+ avvyfacing = avvy_shoot;
+ return;
+ }
+
+ alt_was_pressed_before = false;
+
+ if ((shiftstate & 1) > 0) {
+ /* Move right. */
+ avvypos += 5;
+ if (avvypos > right_margin) avvypos = right_margin;
+ return;
+ }
+
+ if ((shiftstate & 2) > 0) {
+ /* Move left. */
+ avvypos -= 5;
+ if (avvypos < left_margin) avvypos = left_margin;
+ }
+
+}
+
+void animate() {
+ byte fv;
+
+ if (Random(10) == 1) show_stock(get_stock_number(Random(6)));
+ for (fv = 0; fv <= 6; fv ++)
+ if (stockstatus[fv] > 5) {
+ stockstatus[fv] -= 1;
+ if (stockstatus[fv] == 8) {
+ stockstatus[fv] = 0;
+ show_stock(fv);
+ }
+ }
+}
+
+void collision_check() {
+ byte fv;
+ integer dist_from_side;
+ byte this_stock;
+
+ for (fv = 1; fv <= 100; fv ++) {
+ mtype &with = m[fv];
+ if (with.x != flag) {
+ if ((with.missile) && (with.y < 60) && (with.timeout == 1)) {
+ /* sound(177); delay(1); nosound;*/
+ dist_from_side = (with.x - 20) % 90;
+ this_stock = ((with.x - 20) / 90);
+ if ((! has_escaped[this_stock]) &&
+ (dist_from_side > 17) && (dist_from_side < 34)) {
+ sound(999);
+ delay(3);
+ nosound;
+ define(with.x + 20, with.y, 26 + Random(2), 3, 1, 12, false, true); /* Well done! */
+ define(this_stock * 90 + 20, 30, 31, 0, 0, 7, false, false); /* Face of man */
+ define_cameo(this_stock * 90 + 20 + 10, 35, 40, 7); /* Splat! */
+ define(this_stock * 90 + 20 + 20, 50, 34 + Random(5), 0, 2, 9, false, true); /* Oof! */
+ stockstatus[this_stock] = 17;
+ gain(score_for_hitting_face);
+
+ if ((escaping) && (escape_stock == this_stock)) {
+ /* Hit the escaper. */
+ sound(1777);
+ delay(1);
+ nosound;
+ gain(bonus_for_hitting_escaper);
+ escaping = false;
+ new_escape();
+ }
+ } else {
+ define(with.x, with.y, 83 + Random(3), 2, 2, 17, false, true); /* Missed! */
+ if ((! has_escaped[this_stock]) &&
+ ((dist_from_side > 3) && (dist_from_side < 43))) {
+ define(this_stock * 90 + 20, 30, 30, 0, 0, 7, false, false); /* Face of man */
+ if (dist_from_side > 35)
+ define_cameo(with.x - 27, 35, 40, 7); /* Splat! */
+ else
+ define_cameo(with.x - 7, 35, 40, 7);
+ stockstatus[this_stock] = 17;
+ }
+ }
+ }
+ }
+ }
+}
+
+shortint sgn(integer a) {
+ shortint sgn_result;
+ if (a == 0) {
+ sgn_result = 0;
+ return sgn_result;
+ }
+ if (a > 0) {
+ sgn_result = 1;
+ return sgn_result;
+ }
+ sgn_result = -1;
+ return sgn_result;
+}
+
+void turn_around(byte who, boolean randomx) {
+ {
+ A1 &with = running[who];
+
+ if (randomx) {
+ if (with.ix > 0) with.ix = -(Random(5) + 1);
+ else with.ix = (Random(5) + 1);
+ } else
+ with.ix = -with.ix;
+ with.iy = -with.iy;
+ }
+}
+
+void bump_folk() {
+ byte fv, ff;
+
+ for (fv = 1; fv <= maxrunners; fv ++)
+ if (running[fv].x != flag)
+ for (ff = fv + 1; ff <= maxrunners; ff ++)
+ if ((running[ff].x != flag) &&
+ overlap(running[fv].x, running[fv].y,
+ running[fv].x + 17, running[fv].y + 24,
+ running[ff].x, running[ff].y,
+ running[ff].x + 17, running[ff].y + 24)) {
+ turn_around(fv, false); /* Opp. directions. */
+ turn_around(ff, false);
+ }
+}
+
+void people_running() {
+ byte fv;
+
+ if (count321 != 0) return;
+ for (fv = 1; fv <= maxrunners; fv ++) {
+ A1 &with = running[fv];
+ if (with.x != flag) {
+ if (((with.y + with.iy) <= 53) || ((with.y + with.iy) >= 120)) {
+ with.iy = -with.iy;
+ }
+
+ if (with.ix < 0)
+ define(with.x, with.y, with.frame, 0, 0, 1, false, true);
+ else
+ define(with.x, with.y, with.frame + 7, 0, 0, 1, false, true);
+ if (with.framedelay == 0) {
+ with.frame += 1;
+ if (with.frame == with.toohigh) with.frame = with.lowest;
+ with.framedelay = framedelaymax;
+ with.y = with.y + with.iy;
+ } else with.framedelay -= 1;
+
+ if (((with.x + with.ix) <= 0) || ((with.x + with.ix) >= 620)) turn_around(fv, true);
+
+ with.x = with.x + with.ix;
+ }
+ }
+}
+
+void update_time() {
+ if (count321 != 0) return;
+ time_this_second += 1;
+ if (time_this_second < times_a_second) return;
+ time1 -= 1;
+ show_time();
+ time_this_second = 0;
+ if (time1 <= flash_time)
+ if (odd(time1)) display_const(110, 0, 20); /* Normal time */
+ else display_const(110, 0, 86); /* Flash time */
+}
+
+void hit_people() {
+ byte fv, ff;
+
+ if (count321 != 0) return;
+ for (fv = 1; fv <= 100; fv ++) {
+ mtype &with = m[fv];
+ if (with.missile && (with.x != flag))
+ for (ff = 1; ff <= maxrunners; ff ++)
+ if ((running[ff].x != flag) &&
+ overlap(with.x, with.y, with.x + 7, with.y + 10,
+ running[ff].x, running[ff].y,
+ running[ff].x + 17,
+ running[ff].y + 24)) {
+ sound(7177);
+ /* setcolor(4);
+ rectangle(x,y,x+7,y+10);
+ rectangle(running[ff].x,running[ff].y,
+ running[ff].x+17,
+ running[ff].y+24);*/
+ nosound;
+ with.x = flag;
+ gain(-5);
+ define(running[ff].x + 20, running[ff].y + 3,
+ 34 + Random(6), 1, 3, 9, false, true); /* Oof! */
+ define(with.x, with.y, 83, 1, 0, 17, false, true); /* Oops! */
+ }
+ }
+}
+
+void escape_check() {
+ if (count321 != 0) return;
+ if (escape_count > 0) {
+ escape_count -= 1;
+ return;
+ }
+
+ /* Escape_count = 0; now what? */
+
+ if (escaping) {
+ if (got_out) {
+ new_escape();
+ escaping = false;
+ display_const(escape_stock * 90 + 20, 30, stocks + 4);
+ } else {
+ display_const(escape_stock * 90 + 20, 30, stocks + 5);
+ escape_count = 20;
+ got_out = true;
+ define(escape_stock * 90 + 20, 50, 25, 0, 2, 17, false, true); /* Escaped! */
+ gain(-10);
+ has_escaped[escape_stock] = true;
+
+ how_many_have_escaped += 1;
+
+ if (how_many_have_escaped == 7) {
+ for (time1 = 0; time1 <= 1; time1 ++) {
+ setactivepage(time1);
+ cleardevice();
+ }
+ setactivepage(1 - cp);
+
+ memw[storage_seg * storage_ofs + 1] = 0;
+ do {
+ ;
+ } while (!(memw[storage_seg * storage_ofs + 1] > 9));
+
+ setvisualpage(1 - cp);
+ display(266, 90, 23);
+
+ memw[storage_seg * storage_ofs + 1] = 0;
+ do {
+ ;
+ } while (!(memw[storage_seg * storage_ofs + 1] > 72));
+
+ setvisualpage(cp);
+
+ memw[storage_seg * storage_ofs + 1] = 0;
+ do {
+ ;
+ } while (!(memw[storage_seg * storage_ofs + 1] > 9));
+
+ time1 = 0;
+ }
+ }
+ } else {
+ escape_stock = get_stock_number(Random(7));
+ escaping = true;
+ got_out = false;
+ display_const(escape_stock * 90 + 20, 30, stocks + 2); /* Smiling! */
+ escape_count = 200;
+ }
+}
+
+void check321() {
+ if (count321 == 0) return;
+ count321 -= 1;
+ switch (count321) {
+ case 84:
+ define(320, 60, 16, 2, 1, 94, false, true);
+ break;
+ case 169:
+ define(320, 60, 15, 0, 1, 94, false, true);
+ break;
+ case 254: {
+ define(320, 60, 14, -2, 1, 94, false, true);
+ define(0, 100, 18, 2, 0, 254, false, true);
+ }
+ break;
+ }
}
void check_params();
-static void not_bootstrap()
-{
- output << "This is not a standalone program!" << NL;
- exit(255);
+static void not_bootstrap() {
+ output << "This is not a standalone program!" << NL;
+ exit(255);
}
-void check_params()
-{
- integer e;
+void check_params() {
+ integer e;
- if (paramstr(1)!="jsb") not_bootstrap();
+ if (paramstr(1) != "jsb") not_bootstrap();
- val(paramstr(2),storage_seg,e); if (e!=0) not_bootstrap();
- val(paramstr(3),storage_ofs,e); if (e!=0) not_bootstrap();
+ val(paramstr(2), storage_seg, e);
+ if (e != 0) not_bootstrap();
+ val(paramstr(3), storage_ofs, e);
+ if (e != 0) not_bootstrap();
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- check_params();
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ check_params();
- titles();
- setup();
- init_runner( 20, 70,48,54, Random(5)+1,Random(4)-2);
- init_runner(600, 70,48,54, Random(5)+1,Random(4)-2);
- init_runner(600,100,61,67,-Random(5)+1,Random(4)-2);
- init_runner( 20,100,61,67,-Random(5)+1,Random(4)-2);
- do {
- memw[storage_seg*storage_ofs+1]=0;
+ titles();
+ setup();
+ init_runner(20, 70, 48, 54, Random(5) + 1, Random(4) - 2);
+ init_runner(600, 70, 48, 54, Random(5) + 1, Random(4) - 2);
+ init_runner(600, 100, 61, 67, -Random(5) + 1, Random(4) - 2);
+ init_runner(20, 100, 61, 67, -Random(5) + 1, Random(4) - 2);
+ do {
+ memw[storage_seg * storage_ofs + 1] = 0;
- blankit();
- hit_people();
- plotthem();
- movethem();
- move_avvy();
- bump_folk();
- people_running();
- animate();
- escape_check();
+ blankit();
+ hit_people();
+ plotthem();
+ movethem();
+ move_avvy();
+ bump_folk();
+ people_running();
+ animate();
+ escape_check();
- collision_check();
+ collision_check();
- update_time();
+ update_time();
- check321();
+ check321();
- read_kbd();
- flippage();
- do {; } while (!(memw[storage_seg*storage_ofs+1]>0));
+ read_kbd();
+ flippage();
+ do {
+ ;
+ } while (!(memw[storage_seg * storage_ofs + 1] > 0));
- } while (!(time1==0));
+ } while (!(time1 == 0));
-/* textmode(259);
- textattr:=1;
- writeln('Your final score was: ',score,'.');
- readln;*/
- mem[storage_seg*storage_ofs]=score;
- return EXIT_SUCCESS;
+ /* textmode(259);
+ textattr:=1;
+ writeln('Your final score was: ',score,'.');
+ readln;*/
+ mem[storage_seg * storage_ofs] = score;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/seu_avvy.cpp b/engines/avalanche/seu_avvy.cpp
index 479f8c174a..931fbf05b6 100644
--- a/engines/avalanche/seu_avvy.cpp
+++ b/engines/avalanche/seu_avvy.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,87 +31,97 @@
namespace Avalanche {
struct adxtype {
- varying_string<12> name; /* name of character */
- varying_string<16> comment; /* comment */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
- byte accinum; /* the number according to Acci (1=Avvy, etc.) */
+ varying_string<12> name; /* name of character */
+ varying_string<16> comment; /* comment */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
+ byte accinum; /* the number according to Acci (1=Avvy, etc.) */
};
-integer gd,gm;
+integer gd, gm;
untyped_file sf;
longint id;
word soa;
adxtype a;
byte xw;
-array<5,2053,byte> mani;
-matrix<0,35,0,4,byte> sil;
-array<1,16000,byte> aa;
+array<5, 2053, byte> mani;
+matrix<0, 35, 0, 4, byte> sil;
+array<1, 16000, byte> aa;
untyped_file outfile;
-void plotat(integer xx,integer yy) /* Does NOT cameo the picture!*/
-{
- word soaa;
-;
- move(mani,aa[5],sizeof(mani));
- {;
- aa[1]=a.xl; aa[2]=0; aa[3]=a.yl; aa[4]=0; /* set up x&y codes */
- }
- putimage(xx,yy,aa,0);
- soaa=sizeof(mani);
- blockwrite(outfile,soaa,2);
- blockwrite(outfile,aa,sizeof(mani));
+void plotat(integer xx, integer yy) { /* Does NOT cameo the picture!*/
+ word soaa;
+ ;
+ move(mani, aa[5], sizeof(mani));
+ {
+ ;
+ aa[1] = a.xl;
+ aa[2] = 0;
+ aa[3] = a.yl;
+ aa[4] = 0; /* set up x&y codes */
+ }
+ putimage(xx, yy, aa, 0);
+ soaa = sizeof(mani);
+ blockwrite(outfile, soaa, 2);
+ blockwrite(outfile, aa, sizeof(mani));
}
const integer shouldid = -1317732048;
void explode(byte which) /* 0 is the first one! */
- /* Each character takes five-quarters of (a.size-6) on disk. */
+/* Each character takes five-quarters of (a.size-6) on disk. */
{
- byte fv,ff; word so1; /* size of one */
-;
- {;
- so1=a.size-6; so1 += so1 / 4;
- seek(sf,183+soa+so1*which); /* First is at 221 */
-/* where:=filepos(sf);*/
- xw=a.xl / 8; if ((a.xl % 8)>0) xw += 1;
-
- for( fv=0; fv <= a.yl; fv ++)
- blockread(sf,sil[fv],xw);
- blockread(sf,mani,a.size-6);
- aa[a.size-1]=0; aa[a.size]=0; /* footer */
- }
- plotat(100,100);
- delay(100);
+ byte fv, ff;
+ word so1; /* size of one */
+ ;
+ {
+ ;
+ so1 = a.size - 6;
+ so1 += so1 / 4;
+ seek(sf, 183 + soa + so1 * which); /* First is at 221 */
+ /* where:=filepos(sf);*/
+ xw = a.xl / 8;
+ if ((a.xl % 8) > 0) xw += 1;
+
+ for (fv = 0; fv <= a.yl; fv ++)
+ blockread(sf, sil[fv], xw);
+ blockread(sf, mani, a.size - 6);
+ aa[a.size - 1] = 0;
+ aa[a.size] = 0; /* footer */
+ }
+ plotat(100, 100);
+ delay(100);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
- assign(outfile,"notts.avd");
- reset(outfile,1);
- seek(outfile,filesize(outfile));
+ assign(outfile, "notts.avd");
+ reset(outfile, 1);
+ seek(outfile, filesize(outfile));
- assign(sf,"sprite0.avd");
- reset(sf,1);
+ assign(sf, "sprite0.avd");
+ reset(sf, 1);
- seek(sf,177);
- blockread(sf,id,4);
- blockread(sf,soa,2);
- blockread(sf,a,soa);
+ seek(sf, 177);
+ blockread(sf, id, 4);
+ blockread(sf, soa, 2);
+ blockread(sf, a, soa);
- explode(1);
- for( gd=6; gd <= 11; gd ++) explode(gd);
- for( gd=18; gd <= 23; gd ++) explode(gd);
+ explode(1);
+ for (gd = 6; gd <= 11; gd ++) explode(gd);
+ for (gd = 18; gd <= 23; gd ++) explode(gd);
- close(sf);
- close(outfile);
-return EXIT_SUCCESS;
+ close(sf);
+ close(outfile);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sez.cpp b/engines/avalanche/sez.cpp
index e3261d7c1e..d0f88a1e85 100644
--- a/engines/avalanche/sez.cpp
+++ b/engines/avalanche/sez.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/sezedit.cpp b/engines/avalanche/sezedit.cpp
index 4ec0bf37b0..73f5be19cf 100644
--- a/engines/avalanche/sezedit.cpp
+++ b/engines/avalanche/sezedit.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,400 +34,489 @@ namespace Avalanche {
const char marker = '\33';
const char game[] = "Avalot";
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
struct markertype {
- word length;
- longint offset;
- byte checksum;
+ word length;
+ longint offset;
+ byte checksum;
};
struct sezheader {
- array<1,2,char> initials; /* should be "TT" */
- word gamecode;
- word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
- longint chains; /* number of scroll chains */
- longint size; /* total size of all chains */
+ array<1, 2, char> initials; /* should be "TT" */
+ word gamecode;
+ word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
+ longint chains; /* number of scroll chains */
+ longint size; /* total size of all chains */
};
-array<0,1999,char> buffer,was;
-word bufpos,bufsize;
+array<0, 1999, char> buffer, was;
+word bufpos, bufsize;
longint chainnum;
varying_string<40> nickname;
-array<1,255,char> junk;
+array<1, 255, char> junk;
string temp;
char r;
fonttype font;
integer cpos;
sezheader sezhead;
-untyped_file f,tempf;
+untyped_file f, tempf;
text nicknames;
-byte sumup()
-{
- word fv; byte total;
-byte sumup_result;
-;
- total=0;
- for( fv=0; fv <= bufsize-1; fv ++)
- {;
- total += ord(was[fv]);
- }
- sumup_result=total;
-return sumup_result;
+byte sumup() {
+ word fv;
+ byte total;
+ byte sumup_result;
+ ;
+ total = 0;
+ for (fv = 0; fv <= bufsize - 1; fv ++) {
+ ;
+ total += ord(was[fv]);
+ }
+ sumup_result = total;
+ return sumup_result;
}
-string findname(longint which)
-{
- string x; varying_string<10> q;
-string findname_result;
-;
- str(which,q);
- reset(nicknames);
- do { nicknames >> x >> NL; } while (!(x=="{go}"));
- do {
- nicknames >> x >> NL;
- } while (!(pos(q,x)>0));
- if (eof(nicknames))
- {;
- findname_result="noname";
- } else
- {;
- Delete(x,1,3); /* lose "{__" */
- Delete(x,pos(" ",x),255); /* lose all chars after first space */
- findname_result=x;
- }
- close(nicknames);
-return findname_result;
+string findname(longint which) {
+ string x;
+ varying_string<10> q;
+ string findname_result;
+ ;
+ str(which, q);
+ reset(nicknames);
+ do {
+ nicknames >> x >> NL;
+ } while (!(x == "{go}"));
+ do {
+ nicknames >> x >> NL;
+ } while (!(pos(q, x) > 0));
+ if (eof(nicknames)) {
+ ;
+ findname_result = "noname";
+ } else {
+ ;
+ Delete(x, 1, 3); /* lose "{__" */
+ Delete(x, pos(" ", x), 255); /* lose all chars after first space */
+ findname_result = x;
+ }
+ close(nicknames);
+ return findname_result;
}
-void cursor()
-{
- byte fv;
-;
- for( fv=12; fv <= 15; fv ++)
- mem[0xa000*cpos+fv*80]=~(mem[0xa000*cpos+fv*80]);
+void cursor() {
+ byte fv;
+ ;
+ for (fv = 12; fv <= 15; fv ++)
+ mem[0xa000 * cpos + fv * 80] = ~(mem[0xa000 * cpos + fv * 80]);
}
-void xy()
-{;
- cpos=(bufpos / 80)*1280+(bufpos % 80);
+void xy() {
+ ;
+ cpos = (bufpos / 80) * 1280 + (bufpos % 80);
}
-void show()
-{
- word fv,orig,y;
-;
- for( fv=0; fv <= 1999; fv ++)
- if (buffer[fv]!=was[fv])
- {;
- orig=(fv / 80)*1280+(fv % 80);
- for( y=0; y <= 15; y ++)
- mem[0xa000*orig+y*80]=(byte)(font[buffer[fv]][y]);
- }
- xy();
- move(buffer,was,sizeof(buffer));
+void show() {
+ word fv, orig, y;
+ ;
+ for (fv = 0; fv <= 1999; fv ++)
+ if (buffer[fv] != was[fv]) {
+ ;
+ orig = (fv / 80) * 1280 + (fv % 80);
+ for (y = 0; y <= 15; y ++)
+ mem[0xa000 * orig + y * 80] = (byte)(font[buffer[fv]][y]);
+ }
+ xy();
+ move(buffer, was, sizeof(buffer));
}
-void sizeup()
-{;
- do {
- switch (buffer[bufsize]) {
- case marker: return; break; /* we've found it OK! */
- case '\0': bufsize -= 1; break;
- default: bufsize += 1;
- }
- } while (!false);
+void sizeup() {
+ ;
+ do {
+ switch (buffer[bufsize]) {
+ case marker:
+ return;
+ break; /* we've found it OK! */
+ case '\0':
+ bufsize -= 1;
+ break;
+ default:
+ bufsize += 1;
+ }
+ } while (!false);
}
-void graphics()
-{
- integer gd,gm;
- file<fonttype> fontfile;
-;
- gd=3; gm=1; initgraph(gd,gm,"");
- assign(fontfile,"c:\\thomas\\lanche.fnt");
- reset(fontfile); fontfile >> font; close(fontfile);
+void graphics() {
+ integer gd, gm;
+ file<fonttype> fontfile;
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ assign(fontfile, "c:\\thomas\\lanche.fnt");
+ reset(fontfile);
+ fontfile >> font;
+ close(fontfile);
}
void edit_it();
-static void legit(char r)
-{; /* it's a legit keystroke */
- move(buffer[bufpos],buffer[bufpos+1],1999-bufpos);
- buffer[bufpos]=r;
- bufpos += 1; show();
+static void legit(char r) {
+ ; /* it's a legit keystroke */
+ move(buffer[bufpos], buffer[bufpos + 1], 1999 - bufpos);
+ buffer[bufpos] = r;
+ bufpos += 1;
+ show();
}
-void edit_it()
-{
- byte fv;
-;
- for( fv=1; fv <= bufsize; fv ++) buffer[fv] -= (byte)(177*bufsize);
- fillchar(was,sizeof(was),'\0'); show();
- do {
- cursor(); r=readkey(); cursor();
- switch (r) {
- case '\0': switch (readkey()) { /* extd keystrokes */
- case 'K': if (bufpos>0) {; bufpos -= 1; xy(); } break; /* Left */
- case 'M': if (bufpos<bufsize) {; bufpos += 1; xy(); } break; /* Right */
- case 'H': if (bufpos>80) {; bufpos -= 80; xy(); } break; /* Up */
- case 'P': if (bufpos<(cardinal)bufsize-79) {; bufpos += 80; xy(); } break; /* Down */
- case 'G': {; bufpos=0; xy(); } break; /* Home */
- case 'O': {; bufpos=bufsize; xy(); } break; /* End */
- case 'S': {; /* Del */
- move(buffer[bufpos+1],buffer[bufpos],1999-bufpos); show();
- }
- break;
- case 'A': legit('\357'); break; /* copyright symbol */
- }
- break;
- case '\10': if (bufpos>0) {; /* backspace */
- bufpos -= 1;
- move(buffer[bufpos+1],buffer[bufpos],1999-bufpos);
- show();
- }
- break;
- case '\33': {;
- for( fv=1; fv <= bufsize; fv ++) buffer[fv] += (byte)(177*bufsize);
- restorecrtmode();
- return;
- }
- break; /* end of editing */
- default: legit(r);
- }
- sizeup();
- } while (!false);
+void edit_it() {
+ byte fv;
+ ;
+ for (fv = 1; fv <= bufsize; fv ++) buffer[fv] -= (byte)(177 * bufsize);
+ fillchar(was, sizeof(was), '\0');
+ show();
+ do {
+ cursor();
+ r = readkey();
+ cursor();
+ switch (r) {
+ case '\0':
+ switch (readkey()) { /* extd keystrokes */
+ case 'K':
+ if (bufpos > 0) {
+ ;
+ bufpos -= 1;
+ xy();
+ }
+ break; /* Left */
+ case 'M':
+ if (bufpos < bufsize) {
+ ;
+ bufpos += 1;
+ xy();
+ }
+ break; /* Right */
+ case 'H':
+ if (bufpos > 80) {
+ ;
+ bufpos -= 80;
+ xy();
+ }
+ break; /* Up */
+ case 'P':
+ if (bufpos < (cardinal)bufsize - 79) {
+ ;
+ bufpos += 80;
+ xy();
+ }
+ break; /* Down */
+ case 'G': {
+ ;
+ bufpos = 0;
+ xy();
+ }
+ break; /* Home */
+ case 'O': {
+ ;
+ bufpos = bufsize;
+ xy();
+ }
+ break; /* End */
+ case 'S': {
+ ; /* Del */
+ move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos);
+ show();
+ }
+ break;
+ case 'A':
+ legit('\357');
+ break; /* copyright symbol */
+ }
+ break;
+ case '\10':
+ if (bufpos > 0) {
+ ; /* backspace */
+ bufpos -= 1;
+ move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos);
+ show();
+ }
+ break;
+ case '\33': {
+ ;
+ for (fv = 1; fv <= bufsize; fv ++) buffer[fv] += (byte)(177 * bufsize);
+ restorecrtmode();
+ return;
+ }
+ break; /* end of editing */
+ default:
+ legit(r);
+ }
+ sizeup();
+ } while (!false);
}
-void saveit(longint ourchain, word oldsize,word newsize)
-{
- array<1,17777,byte> buffer;
- word numread,numwritten,total;
- char check;
- word fv;
- markertype m;
- integer sizechange; /* so's it can be +ve or -ve */
- longint wheresit; /* "offset" value for "ourchain" */
-;
- assign(tempf,"sez.tmp");
- /* OK, here goes... */
- sezhead.size=sezhead.size-longint(oldsize)+longint(newsize); /* adjust our size */
- sizechange=newsize-oldsize; /* +ve if bigger, -ve if smaller, 0 if same */
- textattr=27;
-
- rewrite(tempf,1); reset(f,1);
- seek(f,255+sizeof(sezhead)); /* bypass the junk & sezhead (they're in RAM) */
-
- blockwrite(tempf,junk,255); /* move the junk... */
- blockwrite(tempf,sezhead,sizeof(sezhead)); /* and the header to new files */
-
- /* Now to move the markers */
- output << "Moving markers..." << NL;
- for( fv=1; fv <= sezhead.chains; fv ++)
- {;
- output << fv << '\15';
- blockread(f,m,sizeof(m));
- if (fv==ourchain) /* Right, this one's ours! */
- {;
- wheresit=m.offset; /* recorded for later */
- m.length=newsize-1;
- m.checksum=sumup();
- } else
- if (fv>ourchain)
- {; /* After ours- its offset will have to be changed... */
- m.offset=m.offset+longint(sizechange);
- } /* Otherwise, before ours- leave it well alone */
- blockwrite(tempf,m,sizeof(m));
- }
- output << "Done OK." << NL;
-
- /* Right, that's the markers done... thank goodness... now it's just the
- chains themselves! */
-
- total=0;
-
- output << "Updating the chains..." << NL;
- while (total<=wheresit)
- {;
- blockread(f,buffer,1,numread);
- blockwrite(tempf,buffer,numread,numwritten);
- output << '.';
- total += numwritten;
- }
- output << NL; output << "Updating our chain..." << NL;
- /* We're now in the right place (at last...) */
- for( fv=0; fv <= (bufsize-1); fv ++) was[fv] += 3+177*fv*(bufsize-1); /* scramble "was" */
- blockwrite(tempf,was,newsize); /* "was" contains what the values *were* */
- seek(f,filepos(f)+oldsize);
- output << NL; output << "Copying everything else..." << NL;
- while (! eof(f)) /* high-speed copy */
- {;
- blockread(f,buffer,17777,numread);
- blockwrite(tempf,buffer,numread);
- output << '.';
- }
- output << NL;
-
- /* Closedown */
- close(f); close(tempf);
- erase(f); rename(tempf,string(game)+".SEZ");
+void saveit(longint ourchain, word oldsize, word newsize) {
+ array<1, 17777, byte> buffer;
+ word numread, numwritten, total;
+ char check;
+ word fv;
+ markertype m;
+ integer sizechange; /* so's it can be +ve or -ve */
+ longint wheresit; /* "offset" value for "ourchain" */
+ ;
+ assign(tempf, "sez.tmp");
+ /* OK, here goes... */
+ sezhead.size = sezhead.size - longint(oldsize) + longint(newsize); /* adjust our size */
+ sizechange = newsize - oldsize; /* +ve if bigger, -ve if smaller, 0 if same */
+ textattr = 27;
+
+ rewrite(tempf, 1);
+ reset(f, 1);
+ seek(f, 255 + sizeof(sezhead)); /* bypass the junk & sezhead (they're in RAM) */
+
+ blockwrite(tempf, junk, 255); /* move the junk... */
+ blockwrite(tempf, sezhead, sizeof(sezhead)); /* and the header to new files */
+
+ /* Now to move the markers */
+ output << "Moving markers..." << NL;
+ for (fv = 1; fv <= sezhead.chains; fv ++) {
+ ;
+ output << fv << '\15';
+ blockread(f, m, sizeof(m));
+ if (fv == ourchain) { /* Right, this one's ours! */
+ ;
+ wheresit = m.offset; /* recorded for later */
+ m.length = newsize - 1;
+ m.checksum = sumup();
+ } else if (fv > ourchain) {
+ ; /* After ours- its offset will have to be changed... */
+ m.offset = m.offset + longint(sizechange);
+ } /* Otherwise, before ours- leave it well alone */
+ blockwrite(tempf, m, sizeof(m));
+ }
+ output << "Done OK." << NL;
+
+ /* Right, that's the markers done... thank goodness... now it's just the
+ chains themselves! */
+
+ total = 0;
+
+ output << "Updating the chains..." << NL;
+ while (total <= wheresit) {
+ ;
+ blockread(f, buffer, 1, numread);
+ blockwrite(tempf, buffer, numread, numwritten);
+ output << '.';
+ total += numwritten;
+ }
+ output << NL;
+ output << "Updating our chain..." << NL;
+ /* We're now in the right place (at last...) */
+ for (fv = 0; fv <= (bufsize - 1); fv ++) was[fv] += 3 + 177 * fv * (bufsize - 1); /* scramble "was" */
+ blockwrite(tempf, was, newsize); /* "was" contains what the values *were* */
+ seek(f, filepos(f) + oldsize);
+ output << NL;
+ output << "Copying everything else..." << NL;
+ while (! eof(f)) { /* high-speed copy */
+ ;
+ blockread(f, buffer, 17777, numread);
+ blockwrite(tempf, buffer, numread);
+ output << '.';
+ }
+ output << NL;
+
+ /* Closedown */
+ close(f);
+ close(tempf);
+ erase(f);
+ rename(tempf, string(game) + ".SEZ");
}
-void particular()
-{
- word origsize;
-;
- bufsize=0;
- output << "Which one\? (? for a list)"; input >> chainnum >> NL;
- if ((chainnum<0) || (chainnum>sezhead.chains))
- {;
- output << "Don't be silly!" << NL; return;
- }
-
- origsize=0 /*bufsize*/; bufpos=0; cpos=0; nickname=findname(chainnum);
- fillchar(buffer,sizeof(buffer),'\0');
- buffer[0]=marker;
- do {
- textattr=30; output << NL;
- output << "SEZ EDITOR (c) 1992, Thomas Thurman." << NL;
- output << NL;
- output << "Editing scrollchain no." << chainnum << NL;
- output << "Your text is " << bufsize << " bytes long." << NL;
- output << NL;
- output << "Its nickname is \"" << nickname << "\"." << NL;
- output << NL;
- output << "Enter a command:" << NL;
- output << " S) Save the text to disk," << NL;
- output << " E) Edit this particular chain," << NL;
- output << " N) change the Nickname," << NL;
- output << " R) Revert text to the original," << NL;
- output << "Esc) Exit and do something else!" << NL;
- output << NL;
- output << "Your choice? ";
- r=upcase(readkey()); output << r << NL;
- switch (r) {
- case 'N': {;
- output << NL; output << "New nickname (max 40 chars, Enter to cancel)?";
- input >> temp >> NL;
- if (temp!="") nickname=temp;
- }
- break;
- case 'E': {; setgraphmode(1); edit_it(); } break;
- case 'S': saveit(chainnum,origsize,bufsize); break;
- case '\33': return; break;
- }
- } while (!false);
+void particular() {
+ word origsize;
+ ;
+ bufsize = 0;
+ output << "Which one\? (? for a list)";
+ input >> chainnum >> NL;
+ if ((chainnum < 0) || (chainnum > sezhead.chains)) {
+ ;
+ output << "Don't be silly!" << NL;
+ return;
+ }
+
+ origsize = 0 /*bufsize*/;
+ bufpos = 0;
+ cpos = 0;
+ nickname = findname(chainnum);
+ fillchar(buffer, sizeof(buffer), '\0');
+ buffer[0] = marker;
+ do {
+ textattr = 30;
+ output << NL;
+ output << "SEZ EDITOR (c) 1992, Thomas Thurman." << NL;
+ output << NL;
+ output << "Editing scrollchain no." << chainnum << NL;
+ output << "Your text is " << bufsize << " bytes long." << NL;
+ output << NL;
+ output << "Its nickname is \"" << nickname << "\"." << NL;
+ output << NL;
+ output << "Enter a command:" << NL;
+ output << " S) Save the text to disk," << NL;
+ output << " E) Edit this particular chain," << NL;
+ output << " N) change the Nickname," << NL;
+ output << " R) Revert text to the original," << NL;
+ output << "Esc) Exit and do something else!" << NL;
+ output << NL;
+ output << "Your choice? ";
+ r = upcase(readkey());
+ output << r << NL;
+ switch (r) {
+ case 'N': {
+ ;
+ output << NL;
+ output << "New nickname (max 40 chars, Enter to cancel)?";
+ input >> temp >> NL;
+ if (temp != "") nickname = temp;
+ }
+ break;
+ case 'E': {
+ ;
+ setgraphmode(1);
+ edit_it();
+ }
+ break;
+ case 'S':
+ saveit(chainnum, origsize, bufsize);
+ break;
+ case '\33':
+ return;
+ break;
+ }
+ } while (!false);
}
-void titles()
-{
- const varying_string<7> title = "SEZedit";
- byte fv; char r;
-;
- settextstyle(1,0,0);
- for( fv=7; fv >= 1; fv --)
- {;
- setcolor(fv*2);
- setusercharsize(8-fv,1,8-fv,1);
- outtextxy(fv*65,fv*40-30,title[fv-1]);
- }
- setusercharsize(17,7,1,1); setcolor(green);
- outtextxy(300,10,"Thorsoft");
- outtextxy(10,310,"Press any key...");
- do { r=readkey(); } while (!(! keypressed()));
- restorecrtmode(); textattr=30; clrscr;
+void titles() {
+ const varying_string<7> title = "SEZedit";
+ byte fv;
+ char r;
+ ;
+ settextstyle(1, 0, 0);
+ for (fv = 7; fv >= 1; fv --) {
+ ;
+ setcolor(fv * 2);
+ setusercharsize(8 - fv, 1, 8 - fv, 1);
+ outtextxy(fv * 65, fv * 40 - 30, title[fv - 1]);
+ }
+ setusercharsize(17, 7, 1, 1);
+ setcolor(green);
+ outtextxy(300, 10, "Thorsoft");
+ outtextxy(10, 310, "Press any key...");
+ do {
+ r = readkey();
+ } while (!(! keypressed()));
+ restorecrtmode();
+ textattr = 30;
+ clrscr;
}
-void addone() /* Adds a new, empty chain to the end of the list. */
-{
- longint fv;
- markertype m;
- array<1,17777,byte> buffer;
- word numread;
-;
- assign(tempf,"sez.tmp");
- textattr=27;
- rewrite(tempf,1); reset(f,1); /* f = AVALOT.SEZ (original file) */
- seek(f,255+sizeof(sezhead));
- sezhead.chains += 1; /* we're adding a new chain */
-
- blockwrite(tempf,junk,255); /* move the junk */
- blockwrite(tempf,sezhead,sizeof(sezhead)); /* move the header */
-
- /* Now to move the markers */
- output << "Moving markers..." << NL;
- for( fv=1; fv <= sezhead.chains-longint(1); fv ++) /* -1 because we've added 1 to it */
- {;
- output << fv << '\12';
- blockread(f,m,sizeof(m));
- blockwrite(tempf,m,sizeof(m));
- }
- output << "Done OK." << NL;
- /* Now we add a new marker onto the end! */
- {;
- m.offset=sezhead.size; /* right onto the end */
- m.length=0; /* it's empty */
- }
- blockwrite(tempf,m,sizeof(m)); /* write it out to disk */
-
- /* Copy everything else... including the #177 check char */
- output << "Copying everything else over..." << NL;
- while (! eof(f))
- {;
- blockread(f,buffer,17777,numread);
- blockwrite(tempf,buffer,numread);
- output << '.';
- }
- output << NL;
- close(f); close(tempf);
- erase(f); rename(tempf,string(game)+".SEZ");
+void addone() { /* Adds a new, empty chain to the end of the list. */
+ longint fv;
+ markertype m;
+ array<1, 17777, byte> buffer;
+ word numread;
+ ;
+ assign(tempf, "sez.tmp");
+ textattr = 27;
+ rewrite(tempf, 1);
+ reset(f, 1); /* f = AVALOT.SEZ (original file) */
+ seek(f, 255 + sizeof(sezhead));
+ sezhead.chains += 1; /* we're adding a new chain */
+
+ blockwrite(tempf, junk, 255); /* move the junk */
+ blockwrite(tempf, sezhead, sizeof(sezhead)); /* move the header */
+
+ /* Now to move the markers */
+ output << "Moving markers..." << NL;
+ for (fv = 1; fv <= sezhead.chains - longint(1); fv ++) { /* -1 because we've added 1 to it */
+ ;
+ output << fv << '\12';
+ blockread(f, m, sizeof(m));
+ blockwrite(tempf, m, sizeof(m));
+ }
+ output << "Done OK." << NL;
+ /* Now we add a new marker onto the end! */
+ {
+ ;
+ m.offset = sezhead.size; /* right onto the end */
+ m.length = 0; /* it's empty */
+ }
+ blockwrite(tempf, m, sizeof(m)); /* write it out to disk */
+
+ /* Copy everything else... including the #177 check char */
+ output << "Copying everything else over..." << NL;
+ while (! eof(f)) {
+ ;
+ blockread(f, buffer, 17777, numread);
+ blockwrite(tempf, buffer, numread);
+ output << '.';
+ }
+ output << NL;
+ close(f);
+ close(tempf);
+ erase(f);
+ rename(tempf, string(game) + ".SEZ");
}
-void general()
-{
- char r;
-;
- do {
- textattr=31;
- output << NL; output << string(game)+".SEZ" << NL;
- output << NL;
- output << "No. of chains: " << sezhead.chains << NL;
- output << NL;
- output << "Choose one of these:" << NL;
- output << " A) Add a new scrollchain" << NL;
- output << " E) Edit one" << NL;
- output << "Esc) Exit" << NL;
- output << NL;
- output << "Your choice? ";
- r=upcase(readkey()); output << r << NL;
- switch (r) {
- case 'A': addone(); break;
- case 'E': particular(); break;
- case '\33': exit(0); break;
- }
- } while (!false);
+void general() {
+ char r;
+ ;
+ do {
+ textattr = 31;
+ output << NL;
+ output << string(game) + ".SEZ" << NL;
+ output << NL;
+ output << "No. of chains: " << sezhead.chains << NL;
+ output << NL;
+ output << "Choose one of these:" << NL;
+ output << " A) Add a new scrollchain" << NL;
+ output << " E) Edit one" << NL;
+ output << "Esc) Exit" << NL;
+ output << NL;
+ output << "Your choice? ";
+ r = upcase(readkey());
+ output << r << NL;
+ switch (r) {
+ case 'A':
+ addone();
+ break;
+ case 'E':
+ particular();
+ break;
+ case '\33':
+ exit(0);
+ break;
+ }
+ } while (!false);
}
-void loadit()
-{;
- reset(f,1);
- blockread(f,junk,255);
- blockread(f,sezhead,sizeof(sezhead));
- close(f);
+void loadit() {
+ ;
+ reset(f, 1);
+ blockread(f, junk, 255);
+ blockread(f, sezhead, sizeof(sezhead));
+ close(f);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- assign(f,string(game)+".SEZ");
- assign(tempf,"sez.tmp");
- assign(nicknames,string(game)+".NIK");
- loadit();
- graphics();
- titles();
- general();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ assign(f, string(game) + ".SEZ");
+ assign(tempf, "sez.tmp");
+ assign(nicknames, string(game) + ".NIK");
+ loadit();
+ graphics();
+ titles();
+ general();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sezunit.cpp b/engines/avalanche/sezunit.cpp
index e9dda13267..fa7bbb8c79 100644
--- a/engines/avalanche/sezunit.cpp
+++ b/engines/avalanche/sezunit.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,9 +33,9 @@
namespace Avalanche {
struct markertype {
- word length;
- longint offset;
- byte checksum;
+ word length;
+ longint offset;
+ byte checksum;
};
untyped_file f;
@@ -44,60 +44,69 @@ markertype marker;
word fv;
byte sum;
-void sez_setup() /* This procedure sets up the Sez system (obviously!) */
-{;
-
- /* Set up variables */
-
- fillchar(chain,sizeof(chain),'\261'); /* blank out gunk in "chain" */
- chainsize=0; /* it's empty (for now...) */
- sezerror=sezok; /* everything's fine! */
-
- /* Set up AVALOT.SEZ */
-
- assign(f,"avalot.sez"); reset(f,1);
- seek(f,255); blockread(f,sezhead,sizeof(sezhead));
- if (ioresult!=0) {; sezerror=sezgunkyfile; return; } /* too short */
- {;
- if ((sezhead.initials!="TT") || (sezhead.gamecode!=thisgamecode)
- || (sezhead.revision!=thisvercode))
- {;
- sezerror=sezgunkyfile; /* not a valid file */
- return;
- }
- }
+void sez_setup() { /* This procedure sets up the Sez system (obviously!) */
+ ;
+
+ /* Set up variables */
+
+ fillchar(chain, sizeof(chain), '\261'); /* blank out gunk in "chain" */
+ chainsize = 0; /* it's empty (for now...) */
+ sezerror = sezok; /* everything's fine! */
+
+ /* Set up AVALOT.SEZ */
+
+ assign(f, "avalot.sez");
+ reset(f, 1);
+ seek(f, 255);
+ blockread(f, sezhead, sizeof(sezhead));
+ if (ioresult != 0) {
+ ; /* too short */
+ sezerror = sezgunkyfile;
+ return;
+ }
+ {
+ ;
+ if ((sezhead.initials != "TT") || (sezhead.gamecode != thisgamecode)
+ || (sezhead.revision != thisvercode)) {
+ ;
+ sezerror = sezgunkyfile; /* not a valid file */
+ return;
+ }
+ }
}
-byte sumup()
-{
- word fv; byte total;
-byte sumup_result;
-;
- total=0;
- for( fv=0; fv <= chainsize; fv ++)
- {;
- total += ord(chain[fv]);
- }
- sumup_result=total;
-return sumup_result;
+byte sumup() {
+ word fv;
+ byte total;
+ byte sumup_result;
+ ;
+ total = 0;
+ for (fv = 0; fv <= chainsize; fv ++) {
+ ;
+ total += ord(chain[fv]);
+ }
+ sumup_result = total;
+ return sumup_result;
}
-void getchain(longint number)
-{;
- seek(f,longint(262)+number*longint(7)); blockread(f,marker,7);
- {;
- seek(f,longint(270)+sezhead.chains*longint(7)+marker.offset);
- blockread(f,chain,marker.length+1);
- for( fv=0; fv <= marker.length; fv ++) chain[fv] -= 3+177*fv*marker.length; /* unscramble */
- chainsize=marker.length;
- if (sumup()!=marker.checksum)
- {;
- sezerror=sezhacked;
- return;
- }
- }
- close(f);
- sezerror=sezok; /* nowt went wrong */
+void getchain(longint number) {
+ ;
+ seek(f, longint(262) + number * longint(7));
+ blockread(f, marker, 7);
+ {
+ ;
+ seek(f, longint(270) + sezhead.chains * longint(7) + marker.offset);
+ blockread(f, chain, marker.length + 1);
+ for (fv = 0; fv <= marker.length; fv ++) chain[fv] -= 3 + 177 * fv * marker.length; /* unscramble */
+ chainsize = marker.length;
+ if (sumup() != marker.checksum) {
+ ;
+ sezerror = sezhacked;
+ return;
+ }
+ }
+ close(f);
+ sezerror = sezok; /* nowt went wrong */
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sezunit.h b/engines/avalanche/sezunit.h
index fa1f750b0a..5f067e537e 100644
--- a/engines/avalanche/sezunit.h
+++ b/engines/avalanche/sezunit.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,11 +34,11 @@
namespace Avalanche {
struct sezheader {
- array<1,2,char> initials; /* should be "TT" */
- word gamecode;
- word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
- longint chains; /* number of scroll chains */
- longint size; /* total size of all chains */
+ array<1, 2, char> initials; /* should be "TT" */
+ word gamecode;
+ word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */
+ longint chains; /* number of scroll chains */
+ longint size; /* total size of all chains */
};
@@ -48,7 +48,7 @@ struct sezheader {
#define EXTERN
#endif
-EXTERN array<0,1999,char> chain; /* This chain */
+EXTERN array<0, 1999, char> chain; /* This chain */
EXTERN word chainsize; /* Length of "chain" */
EXTERN byte sezerror; /* Error code */
EXTERN sezheader sezhead;
@@ -56,7 +56,7 @@ EXTERN sezheader sezhead;
#define EXTERN extern
- /* Error codes for "sezerror" */
+/* Error codes for "sezerror" */
const integer sezok = 0;
const integer sezgunkyfile = 1;
const integer sezhacked = 2;
diff --git a/engines/avalanche/sezxfr.cpp b/engines/avalanche/sezxfr.cpp
index 3c2cff62f5..7d56e668fe 100644
--- a/engines/avalanche/sezxfr.cpp
+++ b/engines/avalanche/sezxfr.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -26,99 +26,123 @@
*/
/*#include "Crt.h"*/
- /*$V-*/
+/*$V-*/
namespace Avalanche {
text t;
string x;
-matrix<1,100,1,2,string> data;
-word dp,ip,fv;
-array<1,20,word> index1;
-array<1,20,varying_string<10> > names;
-array<1,1777,longint> thumb; longint total;
+matrix<1, 100, 1, 2, string> data;
+word dp, ip, fv;
+array<1, 20, word> index1;
+array<1, 20, varying_string<10> > names;
+array<1, 1777, longint> thumb;
+longint total;
untyped_file f;
-void strip() {; x=copy(x,2,255); }
-
-void squish(string& q)
-{
- string n; boolean ctrl; byte fv;
-;
- ctrl=false; n="";
- for( fv=1; fv <= length(q); fv ++)
- if (q[fv]=='^') ctrl=true; else
- {; /* not a caret */
- if (ctrl) q[fv]=chr(ord(upcase(q[fv]))-64);
- n=n+q[fv]; ctrl=false;
- }
- while (n[length(n)]=='\40') n[0] -= 1; /* strip trailing spaces */
- for( fv=1; fv <= length(n); fv ++) n[fv] += 177; /* scramble */
- q=n;
+void strip() {
+ ;
+ x = copy(x, 2, 255);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- dp=0; ip=0; fillchar(data,sizeof(data),'\0');
- fillchar(thumb,sizeof(thumb),'\261');
- fillchar(index1,sizeof(index1),'\3');
- assign(t,"v:sez.dat"); reset(t);
- while (! eof(t))
- {;
- t >> x >> NL;
- switch (x[1]) {
- case ';': {; textattr=lightred; strip(); } break;
- case ':': {;
- textattr=lightblue; strip();
- if (dp>0) squish(data[dp][2]);
- dp += 1; data[dp][1]=x;
- if (pos("*",x)>0)
- {; /* index */
- ip += 1; index1[ip]=dp; names[ip]=copy(x,1,pos("*",x)-1);
- }
- }
- break;
- default:
- {;
- textattr=white;
- data[dp][2]=data[dp][2]+x+'\40';
- }
- }
- output << x << NL;
- }
- squish(data[dp][2]);
-
- total=1;
- for( fv=1; fv <= dp; fv ++)
- {;
- thumb[fv]=total;
- total += length(data[fv][2])+1;
- }
-
- thumb[dp+1]=total;
-
- /* save it all! Firstly, the Sez file... */
-
- assign(f,"v:avalot.sez"); rewrite(f,1);
- x=string("This is a Sez file for an Avvy game, and it's copyright!")+'\32';
- blockwrite(f,x[1],57);
- blockwrite(f,dp,2); blockwrite(f,ip,2);
- blockwrite(f,index1,40);
- blockwrite(f,thumb,dp*4+4);
- for( fv=1; fv <= dp; fv ++)
- blockwrite(f,data[fv][2],length(data[fv][2])+1);
- close(f);
-
- /* ...then the Sed file. */
-
- assign(t,"v:avalot.sed"); rewrite(t);
- for( fv=1; fv <= ip; fv ++) t << names[fv] << NL;
- for( fv=1; fv <= dp; fv ++) t << data[fv][1] << NL;
- close(t);
-
- /* Done! */
-return EXIT_SUCCESS;
+void squish(string &q) {
+ string n;
+ boolean ctrl;
+ byte fv;
+ ;
+ ctrl = false;
+ n = "";
+ for (fv = 1; fv <= length(q); fv ++)
+ if (q[fv] == '^') ctrl = true;
+ else {
+ ; /* not a caret */
+ if (ctrl) q[fv] = chr(ord(upcase(q[fv])) - 64);
+ n = n + q[fv];
+ ctrl = false;
+ }
+ while (n[length(n)] == '\40') n[0] -= 1; /* strip trailing spaces */
+ for (fv = 1; fv <= length(n); fv ++) n[fv] += 177; /* scramble */
+ q = n;
+}
+
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ dp = 0;
+ ip = 0;
+ fillchar(data, sizeof(data), '\0');
+ fillchar(thumb, sizeof(thumb), '\261');
+ fillchar(index1, sizeof(index1), '\3');
+ assign(t, "v:sez.dat");
+ reset(t);
+ while (! eof(t)) {
+ ;
+ t >> x >> NL;
+ switch (x[1]) {
+ case ';': {
+ ;
+ textattr = lightred;
+ strip();
+ }
+ break;
+ case ':': {
+ ;
+ textattr = lightblue;
+ strip();
+ if (dp > 0) squish(data[dp][2]);
+ dp += 1;
+ data[dp][1] = x;
+ if (pos("*", x) > 0) {
+ ; /* index */
+ ip += 1;
+ index1[ip] = dp;
+ names[ip] = copy(x, 1, pos("*", x) - 1);
+ }
+ }
+ break;
+ default: {
+ ;
+ textattr = white;
+ data[dp][2] = data[dp][2] + x + '\40';
+ }
+ }
+ output << x << NL;
+ }
+ squish(data[dp][2]);
+
+ total = 1;
+ for (fv = 1; fv <= dp; fv ++) {
+ ;
+ thumb[fv] = total;
+ total += length(data[fv][2]) + 1;
+ }
+
+ thumb[dp + 1] = total;
+
+ /* save it all! Firstly, the Sez file... */
+
+ assign(f, "v:avalot.sez");
+ rewrite(f, 1);
+ x = string("This is a Sez file for an Avvy game, and it's copyright!") + '\32';
+ blockwrite(f, x[1], 57);
+ blockwrite(f, dp, 2);
+ blockwrite(f, ip, 2);
+ blockwrite(f, index1, 40);
+ blockwrite(f, thumb, dp * 4 + 4);
+ for (fv = 1; fv <= dp; fv ++)
+ blockwrite(f, data[fv][2], length(data[fv][2]) + 1);
+ close(f);
+
+ /* ...then the Sed file. */
+
+ assign(t, "v:avalot.sed");
+ rewrite(t);
+ for (fv = 1; fv <= ip; fv ++) t << names[fv] << NL;
+ for (fv = 1; fv <= dp; fv ++) t << data[fv][1] << NL;
+ close(t);
+
+ /* Done! */
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/shell1.cpp b/engines/avalanche/shell1.cpp
index 1618174fe4..358f679e61 100644
--- a/engines/avalanche/shell1.cpp
+++ b/engines/avalanche/shell1.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,34 +31,35 @@
namespace Avalanche {
struct infotype {
- matrix<128,255,1,8,byte> chars;
- string data;
+ matrix<128, 255, 1, 8, byte> chars;
+ string data;
};
infotype table;
pointer where;
string comspec;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- getintvec(0x1f,where); move(where,table,1280);
- comspec=getenv("comspec");
- table.data=table.data+"Avalot;";
- setintvec(0x1f,&table);
- output << NL;
- output << "The Astounding Avvy DOS Shell... don't forget to register!" << NL;
- output << NL;
- output << "Use the command EXIT to return to your game." << NL;
- output << NL;
- output << "Remember: You *mustn't* load any TSRs while in this DOS shell." << NL;
- output << NL;
- output << "This includes: GRAPHICS, PRINT, DOSKEY, and pop-up programs (like Sidekick.)" << NL;
- output << NL;
- output << "About to execute \"" << comspec << "\"..." << NL;
- swapvectors;
- exec("c:\\command.com","");
- swapvectors;
- setintvec(0x1f,where);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ getintvec(0x1f, where);
+ move(where, table, 1280);
+ comspec = getenv("comspec");
+ table.data = table.data + "Avalot;";
+ setintvec(0x1f, &table);
+ output << NL;
+ output << "The Astounding Avvy DOS Shell... don't forget to register!" << NL;
+ output << NL;
+ output << "Use the command EXIT to return to your game." << NL;
+ output << NL;
+ output << "Remember: You *mustn't* load any TSRs while in this DOS shell." << NL;
+ output << NL;
+ output << "This includes: GRAPHICS, PRINT, DOSKEY, and pop-up programs (like Sidekick.)" << NL;
+ output << NL;
+ output << "About to execute \"" << comspec << "\"..." << NL;
+ swapvectors;
+ exec("c:\\command.com", "");
+ swapvectors;
+ setintvec(0x1f, where);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/shell2.cpp b/engines/avalanche/shell2.cpp
index 1bc68dfc1c..9ca4e29599 100644
--- a/engines/avalanche/shell2.cpp
+++ b/engines/avalanche/shell2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,24 +31,28 @@
namespace Avalanche {
struct infotype {
- matrix<128,255,1,8,byte> chars;
- string data;
+ matrix<128, 255, 1, 8, byte> chars;
+ string data;
};
infotype table;
pointer where;
-integer gd,gm;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- getintvec(0x1f,where); move(where,table,1280);
- gd=1; gm=0; initgraph(gd,gm,"c:\\turbo");
- output << "Now in CGA low-res 320x200." << NL;
- output << "High ASCII codes work- œœœ °±² ðððññóòôõ" << NL;
- output << "And the code is..." << NL;
- output << table.data << NL;
- output << "Press Enter..." << NL;
- input >> NL; closegraph();
-return EXIT_SUCCESS;
+integer gd, gm;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ getintvec(0x1f, where);
+ move(where, table, 1280);
+ gd = 1;
+ gm = 0;
+ initgraph(gd, gm, "c:\\turbo");
+ output << "Now in CGA low-res 320x200." << NL;
+ output << "High ASCII codes work- œœœ °±² ðððññóòôõ" << NL;
+ output << "And the code is..." << NL;
+ output << table.data << NL;
+ output << "Press Enter..." << NL;
+ input >> NL;
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/slope.cpp b/engines/avalanche/slope.cpp
index 54ab3d0aa8..f54439178b 100644
--- a/engines/avalanche/slope.cpp
+++ b/engines/avalanche/slope.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -28,8 +28,8 @@
namespace Avalanche {
struct joysetup {
- word xmid,ymid,xmin,ymin,xmax,ymax;
- byte centre; /* Size of centre in tenths */
+ word xmid, ymid, xmin, ymin, xmax, ymax;
+ byte centre; /* Size of centre in tenths */
};
const integer bug_twonames = 255;
@@ -42,335 +42,356 @@ const integer bug_weirdcard = 250;
byte fv;
char t;
string bugline;
-boolean usingp,usingl;
-boolean zoomy,numlockhold;
+boolean usingp, usingl;
+boolean zoomy, numlockhold;
boolean doing_syntax;
-joysetup js; boolean use_joy_a;
+joysetup js;
+boolean use_joy_a;
boolean filename_specified;
boolean soundfx;
-string inihead,initail; /* For reading the .INI file. */
+string inihead, initail; /* For reading the .INI file. */
string filetoload;
-boolean cl_override,keyboardclick,demo;
+boolean cl_override, keyboardclick, demo;
string slopeline;
-word storage_seg,storage_ofs;
+word storage_seg, storage_ofs;
string argon;
-longint soundcard,baseaddr,speed,irq,dma;
+longint soundcard, baseaddr, speed, irq, dma;
-string strf(longint x)
-{
- string q;
+string strf(longint x) {
+ string q;
- string strf_result;
- str(x,q); strf_result=q;
- return strf_result;
+ string strf_result;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
}
-void linebug(byte which)
-{
- output << "AVALOT : ";
- switch (which) {
- case bug_twonames : output << "You may only specify ONE filename." << NL; break;
- case bug_pandl : output << "/p and /l cannot be used together." << NL; break;
- case bug_weirdswitch : output << "Unknown switch (\"" << bugline <<
- "\"). Type AVALOT /? for a list of switches." << NL;
- break;
- case bug_invalidini: output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL; break;
- case bug_notyesorno: output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL; break;
- case bug_weirdcard: output << "Unknown card: " << bugline << '.' << NL; break;
- }
-
- exit(which);
+void linebug(byte which) {
+ output << "AVALOT : ";
+ switch (which) {
+ case bug_twonames :
+ output << "You may only specify ONE filename." << NL;
+ break;
+ case bug_pandl :
+ output << "/p and /l cannot be used together." << NL;
+ break;
+ case bug_weirdswitch :
+ output << "Unknown switch (\"" << bugline <<
+ "\"). Type AVALOT /? for a list of switches." << NL;
+ break;
+ case bug_invalidini:
+ output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL;
+ break;
+ case bug_notyesorno:
+ output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL;
+ break;
+ case bug_weirdcard:
+ output << "Unknown card: " << bugline << '.' << NL;
+ break;
+ }
+
+ exit(which);
}
-longint card(string x)
-{
- longint card_result;
- if (x=="NONE") card_result=0; else
- if (x=="SB") card_result=1; else
- if (x=="SBPRO") card_result=2; else
- if (x=="SB16") card_result=3; else
- if (x=="PAS") card_result=4; else
- if (x=="PASPLUS") card_result=5; else
- if (x=="PAS16") card_result=6; else
- if (x=="ARIA") card_result=7; else
- if (x=="WINSOUND") card_result=8; else
- if (x=="GRAVIS") card_result=9; else
- if (x=="DACLPT") card_result=10; else
- if (x=="STEREODACS") card_result=11; else
- if (x=="STEREOON1") card_result=12; else
- if (x=="SPEAKER") card_result=13; else
- linebug(bug_weirdcard);
- return card_result;
+longint card(string x) {
+ longint card_result;
+ if (x == "NONE") card_result = 0;
+ else if (x == "SB") card_result = 1;
+ else if (x == "SBPRO") card_result = 2;
+ else if (x == "SB16") card_result = 3;
+ else if (x == "PAS") card_result = 4;
+ else if (x == "PASPLUS") card_result = 5;
+ else if (x == "PAS16") card_result = 6;
+ else if (x == "ARIA") card_result = 7;
+ else if (x == "WINSOUND") card_result = 8;
+ else if (x == "GRAVIS") card_result = 9;
+ else if (x == "DACLPT") card_result = 10;
+ else if (x == "STEREODACS") card_result = 11;
+ else if (x == "STEREOON1") card_result = 12;
+ else if (x == "SPEAKER") card_result = 13;
+ else
+ linebug(bug_weirdcard);
+ return card_result;
}
-void upstr(string& x)
-{
- byte fv;
+void upstr(string &x) {
+ byte fv;
- for( fv=1; fv <= length(x); fv ++) x[fv]=upcase(x[fv]);
+ for (fv = 1; fv <= length(x); fv ++) x[fv] = upcase(x[fv]);
}
-boolean yesno()
-{
- boolean yesno_result;
- if (initail=="YES") yesno_result=true; else
- if (initail=="NO") yesno_result=false; else
- linebug(bug_notyesorno);
- return yesno_result;
+boolean yesno() {
+ boolean yesno_result;
+ if (initail == "YES") yesno_result = true;
+ else if (initail == "NO") yesno_result = false;
+ else
+ linebug(bug_notyesorno);
+ return yesno_result;
}
-word value(string x)
-{
- const varying_string<15> hexdigits = "0123456789ABCDEF";
- word w; integer e;
-
- word value_result;
- if (x[1]=='$')
- {
- w=0;
- for( e=2; e <= length(x); e ++)
- {
- w=w << 4;
- w += pos(upcase(x[e]),hexdigits)-1;
- }
- value_result=w;
- } else
- {
- val(x,w,e);
- if (e==0) value_result=w; else value_result=0;
- }
- return value_result;
+word value(string x) {
+ const varying_string<15> hexdigits = "0123456789ABCDEF";
+ word w;
+ integer e;
+
+ word value_result;
+ if (x[1] == '$') {
+ w = 0;
+ for (e = 2; e <= length(x); e ++) {
+ w = w << 4;
+ w += pos(upcase(x[e]), hexdigits) - 1;
+ }
+ value_result = w;
+ } else {
+ val(x, w, e);
+ if (e == 0) value_result = w;
+ else value_result = 0;
+ }
+ return value_result;
}
-void ini_parse()
-{
- upstr(inihead);
- upstr(initail);
-
- if (inihead=="QUIET") soundfx=! yesno(); else
- if (inihead=="ZOOMYSTART") zoomy=yesno(); else
- if (inihead=="NUMLOCKHOLD") numlockhold=yesno(); else
- if (inihead=="LOADFIRST") filetoload=initail; else
- if (inihead=="OVERRIDEEGACHECK") cl_override=yesno(); else
- if (inihead=="KEYBOARDCLICK") keyboardclick=yesno(); else
- if (inihead=="JOYTOP") js.ymin=value(initail); else
- if (inihead=="JOYBOTTOM") js.ymax=value(initail); else
- if (inihead=="JOYLEFT") js.xmin=value(initail); else
- if (inihead=="JOYRIGHT") js.xmax=value(initail); else
- if (inihead=="JOYMIDX") js.xmid=value(initail); else
- if (inihead=="JOYMIDY") js.ymid=value(initail); else
- if (inihead=="JOYCENTRINGFACTOR") js.centre=value(initail); else
- if (inihead=="WHICHJOY") use_joy_a=value(initail)==1; else
- if (inihead=="SOUNDCARD") soundcard=card(initail); else
- if (inihead=="BASEADDRESS") baseaddr=value(initail); else
- if (inihead=="IRQ") irq=value(initail); else
- if (inihead=="DMA") dma=value(initail); else
- if (inihead=="SAMPLERATE") speed=value(initail);
+void ini_parse() {
+ upstr(inihead);
+ upstr(initail);
+
+ if (inihead == "QUIET") soundfx = ! yesno();
+ else if (inihead == "ZOOMYSTART") zoomy = yesno();
+ else if (inihead == "NUMLOCKHOLD") numlockhold = yesno();
+ else if (inihead == "LOADFIRST") filetoload = initail;
+ else if (inihead == "OVERRIDEEGACHECK") cl_override = yesno();
+ else if (inihead == "KEYBOARDCLICK") keyboardclick = yesno();
+ else if (inihead == "JOYTOP") js.ymin = value(initail);
+ else if (inihead == "JOYBOTTOM") js.ymax = value(initail);
+ else if (inihead == "JOYLEFT") js.xmin = value(initail);
+ else if (inihead == "JOYRIGHT") js.xmax = value(initail);
+ else if (inihead == "JOYMIDX") js.xmid = value(initail);
+ else if (inihead == "JOYMIDY") js.ymid = value(initail);
+ else if (inihead == "JOYCENTRINGFACTOR") js.centre = value(initail);
+ else if (inihead == "WHICHJOY") use_joy_a = value(initail) == 1;
+ else if (inihead == "SOUNDCARD") soundcard = card(initail);
+ else if (inihead == "BASEADDRESS") baseaddr = value(initail);
+ else if (inihead == "IRQ") irq = value(initail);
+ else if (inihead == "DMA") dma = value(initail);
+ else if (inihead == "SAMPLERATE") speed = value(initail);
}
-void strip_ini()
-{
- byte fv;
+void strip_ini() {
+ byte fv;
- if (inihead=="") return;
+ if (inihead == "") return;
- /* Firstly, delete any comments. */
- fv=pos(";",inihead);
- if (fv>0) Delete(inihead,fv,255);
+ /* Firstly, delete any comments. */
+ fv = pos(";", inihead);
+ if (fv > 0) Delete(inihead, fv, 255);
- /* Lose the whitespace... */
+ /* Lose the whitespace... */
- while (inihead[length(inihead)]==' ') inihead[0] -= 1;
- while ((inihead!="") && (inihead[1]==' ')) Delete(inihead,1,1);
+ while (inihead[length(inihead)] == ' ') inihead[0] -= 1;
+ while ((inihead != "") && (inihead[1] == ' ')) Delete(inihead, 1, 1);
- /* It's possible that now we'll end up with a blank line. */
+ /* It's possible that now we'll end up with a blank line. */
- if ((inihead=="") || (inihead[1]=='[')) return;
+ if ((inihead == "") || (inihead[1] == '[')) return;
- fv=pos("=",inihead);
+ fv = pos("=", inihead);
- if (fv==0)
- { /* No "="! Weird! */
- bugline=inihead;
- linebug(bug_invalidini);
- }
+ if (fv == 0) {
+ /* No "="! Weird! */
+ bugline = inihead;
+ linebug(bug_invalidini);
+ }
- initail=copy(inihead,fv+1,255);
- inihead[0]=chr(fv-1);
+ initail = copy(inihead, fv + 1, 255);
+ inihead[0] = chr(fv - 1);
}
-void load_ini()
-{
- text ini;
+void load_ini() {
+ text ini;
- assign(ini,"AVALOT.INI");
- reset(ini);
+ assign(ini, "AVALOT.INI");
+ reset(ini);
- while (! eof(ini))
- {
- ini >> inihead >> NL;
- strip_ini();
- if (inihead!="") ini_parse();
- }
+ while (! eof(ini)) {
+ ini >> inihead >> NL;
+ strip_ini();
+ if (inihead != "") ini_parse();
+ }
- close(ini);
+ close(ini);
}
void parse(string x);
static string arg;
-static string getarg(string otherwis)
-{
- string getarg_result;
- if (arg=="") getarg_result=otherwis; else getarg_result=arg;
- return getarg_result;
+static string getarg(string otherwis) {
+ string getarg_result;
+ if (arg == "") getarg_result = otherwis;
+ else getarg_result = arg;
+ return getarg_result;
}
void parse(string x)
{
- switch (x[1]) {
- case '/':case '-': {
- arg=copy(x,3,255);
- switch (upcase(x[2])) {
- case '?': doing_syntax=true; break;
- case 'O': cl_override=true; break;
- case 'L': if (! usingp)
- {
- usingl=true;
- argon=getarg("avvy.log");
- } else linebug(bug_pandl);
- break;
- case 'P': if (! usingl)
- {
- usingp=true;
- argon=getarg("prn");
- } else linebug(bug_pandl);
- break;
- case 'Q': soundfx=false; break;
- case 'Z': zoomy=true; break;
- case 'K': keyboardclick=true; break;
- case 'D': demo=true; break;
- default: {
- bugline=x;
- linebug(bug_weirdswitch);
- }
- }
- }
- break;
- case '*': {
- inihead=copy(x,2,255);
- strip_ini();
- if (inihead!="") ini_parse();
- }
- break;
- default: { /* filename */
- if (filename_specified)
- linebug(bug_twonames);
- else
- filetoload=x;
- filename_specified=true;
- }
- }
+ switch (x[1]) {
+ case '/':
+ case '-': {
+ arg = copy(x, 3, 255);
+ switch (upcase(x[2])) {
+ case '?':
+ doing_syntax = true;
+ break;
+ case 'O':
+ cl_override = true;
+ break;
+ case 'L':
+ if (! usingp) {
+ usingl = true;
+ argon = getarg("avvy.log");
+ } else linebug(bug_pandl);
+ break;
+ case 'P':
+ if (! usingl) {
+ usingp = true;
+ argon = getarg("prn");
+ } else linebug(bug_pandl);
+ break;
+ case 'Q':
+ soundfx = false;
+ break;
+ case 'Z':
+ zoomy = true;
+ break;
+ case 'K':
+ keyboardclick = true;
+ break;
+ case 'D':
+ demo = true;
+ break;
+ default: {
+ bugline = x;
+ linebug(bug_weirdswitch);
+ }
+ }
+ }
+ break;
+ case '*': {
+ inihead = copy(x, 2, 255);
+ strip_ini();
+ if (inihead != "") ini_parse();
+ }
+ break;
+ default: { /* filename */
+ if (filename_specified)
+ linebug(bug_twonames);
+ else
+ filetoload = x;
+ filename_specified = true;
+ }
+ }
}
void make_slopeline();
-static char yn1(boolean b)
-{
- char yn1_result;
- if (b) yn1_result='y'; else yn1_result='n';
- return yn1_result;
+static char yn1(boolean b) {
+ char yn1_result;
+ if (b) yn1_result = 'y';
+ else yn1_result = 'n';
+ return yn1_result;
}
-static char pln()
-{
- char pln_result;
- if ((! usingp) && (! usingl)) pln_result='n'; else
- if (usingp) pln_result='p'; else
- if (usingl) pln_result='l';
- return pln_result;
+static char pln() {
+ char pln_result;
+ if ((! usingp) && (! usingl)) pln_result = 'n';
+ else if (usingp) pln_result = 'p';
+ else if (usingl) pln_result = 'l';
+ return pln_result;
}
void make_slopeline()
{
- if (argon=="") argon="nul";
-
- slopeline=string('1')+yn1(doing_syntax)+yn1(soundfx)+yn1(cl_override)+
- yn1(keyboardclick)+pln()+yn1(demo)+yn1(zoomy)+yn1(numlockhold)+
- yn1(use_joy_a)+
- ' '+strf(js.xmid)+
- ' '+strf(js.ymid)+
- ' '+strf(js.xmin)+
- ' '+strf(js.ymin)+
- ' '+strf(js.xmax)+
- ' '+strf(js.ymax)+
- ' '+strf(js.centre)+
- ' '+argon+' '+filetoload;
+ if (argon == "") argon = "nul";
+
+ slopeline = string('1') + yn1(doing_syntax) + yn1(soundfx) + yn1(cl_override) +
+ yn1(keyboardclick) + pln() + yn1(demo) + yn1(zoomy) + yn1(numlockhold) +
+ yn1(use_joy_a) +
+ ' ' + strf(js.xmid) +
+ ' ' + strf(js.ymid) +
+ ' ' + strf(js.xmin) +
+ ' ' + strf(js.ymin) +
+ ' ' + strf(js.xmax) +
+ ' ' + strf(js.ymax) +
+ ' ' + strf(js.centre) +
+ ' ' + argon + ' ' + filetoload;
}
-void store_slopeline()
-{
- move(slopeline,mem[storage_seg*storage_ofs+3],sizeof(slopeline));
- move(js,mem[storage_seg*storage_ofs+300],sizeof(js));
- move(soundcard,mem[storage_seg*storage_ofs+5000],4);
- move(baseaddr,mem[storage_seg*storage_ofs+5004],4);
- move(irq,mem[storage_seg*storage_ofs+5008],4);
- move(dma,mem[storage_seg*storage_ofs+5012],4);
- move(speed,mem[storage_seg*storage_ofs+5016],4);
+void store_slopeline() {
+ move(slopeline, mem[storage_seg * storage_ofs + 3], sizeof(slopeline));
+ move(js, mem[storage_seg * storage_ofs + 300], sizeof(js));
+ move(soundcard, mem[storage_seg * storage_ofs + 5000], 4);
+ move(baseaddr, mem[storage_seg * storage_ofs + 5004], 4);
+ move(irq, mem[storage_seg * storage_ofs + 5008], 4);
+ move(dma, mem[storage_seg * storage_ofs + 5012], 4);
+ move(speed, mem[storage_seg * storage_ofs + 5016], 4);
}
void get_storage_addr();
-static void not_through_bootstrap()
-{ output << "Not standalone!" << NL; exit(255); }
+static void not_through_bootstrap() {
+ output << "Not standalone!" << NL;
+ exit(255);
+}
-void get_storage_addr()
-{
- integer e;
+void get_storage_addr() {
+ integer e;
- if (paramstr(1)!="jsb") not_through_bootstrap();
- val(paramstr(2),storage_seg,e); if (e!=0) not_through_bootstrap();
- val(paramstr(3),storage_ofs,e); if (e!=0) not_through_bootstrap();
+ if (paramstr(1) != "jsb") not_through_bootstrap();
+ val(paramstr(2), storage_seg, e);
+ if (e != 0) not_through_bootstrap();
+ val(paramstr(3), storage_ofs, e);
+ if (e != 0) not_through_bootstrap();
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- get_storage_addr();
-
- filetoload=""; argon="";
- usingl=false;
- usingp=false;
- cl_override=false;
- soundfx=true;
- zoomy=false;
- numlockhold=false;
- filename_specified=false;
- keyboardclick=false;
- doing_syntax=false;
- soundcard=0; baseaddr=0; irq=0; dma=0;
-
- load_ini();
-
- for( fv=4; fv <= paramcount; fv ++)
- parse(paramstr(fv));
-
- make_slopeline();
-
- store_slopeline();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ get_storage_addr();
+
+ filetoload = "";
+ argon = "";
+ usingl = false;
+ usingp = false;
+ cl_override = false;
+ soundfx = true;
+ zoomy = false;
+ numlockhold = false;
+ filename_specified = false;
+ keyboardclick = false;
+ doing_syntax = false;
+ soundcard = 0;
+ baseaddr = 0;
+ irq = 0;
+ dma = 0;
+
+ load_ini();
+
+ for (fv = 4; fv <= paramcount; fv ++)
+ parse(paramstr(fv));
+
+ make_slopeline();
+
+ store_slopeline();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/spread.cpp b/engines/avalanche/spread.cpp
index acc9535b64..21e73cac46 100644
--- a/engines/avalanche/spread.cpp
+++ b/engines/avalanche/spread.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,303 +31,390 @@
namespace Avalanche {
struct adxtype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
varying_string<3> sn;
adxtype a;
-matrix<1,24,0,1,pointer> pic; /* the pictures themselves */
+matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */
word bigsize;
-const array<0,15,varying_string<6> > col =
- {{"Black","Blue","Green","Cyan","Red","Pink","Brown","Grey+",
- "Grey-","Blue+","Green+","Cyan+","Red+","Pink+","Yellow","White"}};
-const string prompt = string('\32')+'\257';
+const array<0, 15, varying_string<6> > col = {
+ {
+ "Black", "Blue", "Green", "Cyan", "Red", "Pink", "Brown", "Grey+",
+ "Grey-", "Blue+", "Green+", "Cyan+", "Red+", "Pink+", "Yellow", "White"
+ }
+};
+const string prompt = string('\32') + '\257';
-void load()
-{
- untyped_file f; byte gd,gm,sort,n; pointer p,q;
-;
- assign(f,string("v:sprite")+sn+".avd"); reset(f,1); seek(f,59);
- blockread(f,a,sizeof(a)); blockread(f,bigsize,2);
- setactivepage(3);
- for( sort=0; sort <= 1; sort ++)
- {;
- mark(q); getmem(p,bigsize);
- blockread(f,p,bigsize);
- putimage(0,0,p,0); release(q); n=1;
- for( gm=0; gm <= (a.num / a.seq)-1; gm ++) /* directions */
- for( gd=0; gd <= a.seq-1; gd ++) /* steps */
- {;
- getmem(pic[n][sort],a.size); /* grab the memory */
- getimage((gm / 2)*(a.xl*6)+gd*a.xl,(gm % 2)*a.yl,
- (gm / 2)*(a.xl*6)+gd*a.xl+a.xl-1,(gm % 2)*a.yl+a.yl-1,
- pic[n][sort]); /* grab the pic */
- n += 1;
- }
- }
- close(f); setactivepage(0);
+void load() {
+ untyped_file f;
+ byte gd, gm, sort, n;
+ pointer p, q;
+ ;
+ assign(f, string("v:sprite") + sn + ".avd");
+ reset(f, 1);
+ seek(f, 59);
+ blockread(f, a, sizeof(a));
+ blockread(f, bigsize, 2);
+ setactivepage(3);
+ for (sort = 0; sort <= 1; sort ++) {
+ ;
+ mark(q);
+ getmem(p, bigsize);
+ blockread(f, p, bigsize);
+ putimage(0, 0, p, 0);
+ release(q);
+ n = 1;
+ for (gm = 0; gm <= (a.num / a.seq) - 1; gm ++) /* directions */
+ for (gd = 0; gd <= a.seq - 1; gd ++) { /* steps */
+ ;
+ getmem(pic[n][sort], a.size); /* grab the memory */
+ getimage((gm / 2) * (a.xl * 6) + gd * a.xl, (gm % 2)*a.yl,
+ (gm / 2) * (a.xl * 6) + gd * a.xl + a.xl - 1, (gm % 2)*a.yl + a.yl - 1,
+ pic[n][sort]); /* grab the pic */
+ n += 1;
+ }
+ }
+ close(f);
+ setactivepage(0);
}
-void save()
-{
- untyped_file f; byte gd,gm,sort,n; pointer p,q;
- string x; integer txl,tyl;
-;
- {;
- txl=a.seq*a.xl*2; tyl=a.yl*2;
- }
+void save() {
+ untyped_file f;
+ byte gd, gm, sort, n;
+ pointer p, q;
+ string x;
+ integer txl, tyl;
+ ;
+ {
+ ;
+ txl = a.seq * a.xl * 2;
+ tyl = a.yl * 2;
+ }
- assign(f,string("v:sprite")+sn+".avd");
- x=string("Sprite file for Avvy - Trippancy IV. Subject to copyright.")+'\32';
- rewrite(f,1); blockwrite(f,x[1],59);
+ assign(f, string("v:sprite") + sn + ".avd");
+ x = string("Sprite file for Avvy - Trippancy IV. Subject to copyright.") + '\32';
+ rewrite(f, 1);
+ blockwrite(f, x[1], 59);
- blockwrite(f,a,sizeof(a)); blockwrite(f,bigsize,2);
- setactivepage(3);
- for( sort=0; sort <= 1; sort ++)
- {;
- mark(q); getmem(p,bigsize); n=1;
- for( gm=0; gm <= (a.num / a.seq)-1; gm ++) /* directions */
- for( gd=0; gd <= a.seq-1; gd ++) /* steps */
- {;
- putimage((gm / 2)*(a.xl*6)+gd*a.xl,(gm % 2)*a.yl,
- pic[n][sort],0); /* drop the pic */
- n += 1;
- }
- getimage(0,0,txl,tyl,p);
- blockwrite(f,p,bigsize); release(q);
- }
- close(f); setactivepage(0);
+ blockwrite(f, a, sizeof(a));
+ blockwrite(f, bigsize, 2);
+ setactivepage(3);
+ for (sort = 0; sort <= 1; sort ++) {
+ ;
+ mark(q);
+ getmem(p, bigsize);
+ n = 1;
+ for (gm = 0; gm <= (a.num / a.seq) - 1; gm ++) /* directions */
+ for (gd = 0; gd <= a.seq - 1; gd ++) { /* steps */
+ ;
+ putimage((gm / 2) * (a.xl * 6) + gd * a.xl, (gm % 2)*a.yl,
+ pic[n][sort], 0); /* drop the pic */
+ n += 1;
+ }
+ getimage(0, 0, txl, tyl, p);
+ blockwrite(f, p, bigsize);
+ release(q);
+ }
+ close(f);
+ setactivepage(0);
}
-void setup()
-{
- integer gd,gm;
-;
- output << "SPREAD (c) 1992, Thomas Thurman." << NL; output << NL;
- output << "Enter number of SPRITE*.AVD file to edit:"; input >> sn >> NL;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
+void setup() {
+ integer gd, gm;
+ ;
+ output << "SPREAD (c) 1992, Thomas Thurman." << NL;
+ output << NL;
+ output << "Enter number of SPRITE*.AVD file to edit:";
+ input >> sn >> NL;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
}
-string strf(longint x)
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
+string strf(longint x) {
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
}
-void likethis()
-{;
- {;
- setfillstyle(1,a.bgc); setcolor(a.fgc); settextstyle(0,0,1);
- bar(0,190,100,200); outtextxy(12,191,"Like this!");
- }
+void likethis() {
+ ;
+ {
+ ;
+ setfillstyle(1, a.bgc);
+ setcolor(a.fgc);
+ settextstyle(0, 0, 1);
+ bar(0, 190, 100, 200);
+ outtextxy(12, 191, "Like this!");
+ }
}
-void values()
-{
- byte fv;
-;
- settextstyle(2,0,9); setcolor(14);
- outtextxy(277,0,string("Spread: editing ")+sn); setcolor(15);
- for( fv=0; fv <= 3; fv ++) putimage(77+(a.xl+10)*fv,17,pic[a.seq*fv+1][1],0);
- settextstyle(2,0,7);
- outtextxy(0, 30,"Views:");
- {;
- outtextxy(0, 50,string("N: Name: ")+a.name);
- outtextxy(0, 70,string("No. of pictures: ")+strf(a.num)+" ("+strf(a.num / a.seq)+" ways)");
- outtextxy(0, 90,string("XY: Size: ")+strf(a.xl)+'x'+strf(a.yl));
- outtextxy(0,110,string("S: Stride size: ")+strf(a.seq));
- outtextxy(0,130,string("Imagesize (bytes): ")+strf(a.size));
- outtextxy(0,150,string("B: Bubble background: ")+col[a.bgc]);
- outtextxy(0,170,string("F: Bubble foreground: ")+col[a.fgc]);
- likethis();
- }
- setcolor(lightgreen); settextstyle(0,0,1);
- outtextxy(400,50,"A) Animate");
- outtextxy(400,60,"E) Edit pictures");
- outtextxy(400,70,"alt-f2) Save");
- outtextxy(400,80,"ctrl-f3) Load");
- outtextxy(400,90,"or any key to the left...");
+void values() {
+ byte fv;
+ ;
+ settextstyle(2, 0, 9);
+ setcolor(14);
+ outtextxy(277, 0, string("Spread: editing ") + sn);
+ setcolor(15);
+ for (fv = 0; fv <= 3; fv ++) putimage(77 + (a.xl + 10)*fv, 17, pic[a.seq * fv + 1][1], 0);
+ settextstyle(2, 0, 7);
+ outtextxy(0, 30, "Views:");
+ {
+ ;
+ outtextxy(0, 50, string("N: Name: ") + a.name);
+ outtextxy(0, 70, string("No. of pictures: ") + strf(a.num) + " (" + strf(a.num / a.seq) + " ways)");
+ outtextxy(0, 90, string("XY: Size: ") + strf(a.xl) + 'x' + strf(a.yl));
+ outtextxy(0, 110, string("S: Stride size: ") + strf(a.seq));
+ outtextxy(0, 130, string("Imagesize (bytes): ") + strf(a.size));
+ outtextxy(0, 150, string("B: Bubble background: ") + col[a.bgc]);
+ outtextxy(0, 170, string("F: Bubble foreground: ") + col[a.fgc]);
+ likethis();
+ }
+ setcolor(lightgreen);
+ settextstyle(0, 0, 1);
+ outtextxy(400, 50, "A) Animate");
+ outtextxy(400, 60, "E) Edit pictures");
+ outtextxy(400, 70, "alt-f2) Save");
+ outtextxy(400, 80, "ctrl-f3) Load");
+ outtextxy(400, 90, "or any key to the left...");
}
-byte ccol()
-{
- byte fv;
-byte ccol_result;
-;
- restorecrtmode();
- output << "Choose a colour- one of these..." << NL;
- for( fv=0; fv <= 15; fv ++)
- {;
- textattr=14; output << fv << ") "; textattr=fv; output << string('\376')+'\40';
- textattr=14; output << col[fv] << NL;
- }
- textattr=14;
- do {
- output << prompt; input >> fv >> NL;
- } while (!(fv<16));
- ccol_result=fv; setgraphmode(0);
-return ccol_result;
+byte ccol() {
+ byte fv;
+ byte ccol_result;
+ ;
+ restorecrtmode();
+ output << "Choose a colour- one of these..." << NL;
+ for (fv = 0; fv <= 15; fv ++) {
+ ;
+ textattr = 14;
+ output << fv << ") ";
+ textattr = fv;
+ output << string('\376') + '\40';
+ textattr = 14;
+ output << col[fv] << NL;
+ }
+ textattr = 14;
+ do {
+ output << prompt;
+ input >> fv >> NL;
+ } while (!(fv < 16));
+ ccol_result = fv;
+ setgraphmode(0);
+ return ccol_result;
}
-string cstr(string oc)
-{
- string x;
-string cstr_result;
-;
- restorecrtmode();
- output << string("Old choice is: <")+oc+'>' << NL;
- output << NL;
- output << "(Anything after a semi-colon will not be displayed by the game, e.g. Avvy;Monk" << NL;
- output << " will be displayed as Avvy.)" << NL;
- output << NL;
- output << string("New choice, Enter for no change, Space+Enter for a blank?")+prompt; input >> x >> NL;
- if (x=="") cstr_result=oc; else if (x==' ') cstr_result=""; else cstr_result=x;
- setgraphmode(0);
-return cstr_result;
+string cstr(string oc) {
+ string x;
+ string cstr_result;
+ ;
+ restorecrtmode();
+ output << string("Old choice is: <") + oc + '>' << NL;
+ output << NL;
+ output << "(Anything after a semi-colon will not be displayed by the game, e.g. Avvy;Monk" << NL;
+ output << " will be displayed as Avvy.)" << NL;
+ output << NL;
+ output << string("New choice, Enter for no change, Space+Enter for a blank?") + prompt;
+ input >> x >> NL;
+ if (x == "") cstr_result = oc;
+ else if (x == ' ') cstr_result = "";
+ else cstr_result = x;
+ setgraphmode(0);
+ return cstr_result;
}
-longint cnum(longint on)
-{
- string x; longint q; integer e;
-longint cnum_result;
-;
- restorecrtmode();
- do {
- output << "Old value is: " << on << '.' << NL;
- output << string("New choice, or Enter for no change?")+prompt; input >> x >> NL;
- if (x=="")
- {;
- e=0; /* must be OK here */ q=on;
- } else val(x,q,e);
- if (e!=0) output << x << " isn't a number, silly!" << NL;
- } while (!(e==0));
- setgraphmode(0); cnum_result=q;
-return cnum_result;
+longint cnum(longint on) {
+ string x;
+ longint q;
+ integer e;
+ longint cnum_result;
+ ;
+ restorecrtmode();
+ do {
+ output << "Old value is: " << on << '.' << NL;
+ output << string("New choice, or Enter for no change?") + prompt;
+ input >> x >> NL;
+ if (x == "") {
+ ;
+ e = 0; /* must be OK here */ q = on;
+ } else val(x, q, e);
+ if (e != 0) output << x << " isn't a number, silly!" << NL;
+ } while (!(e == 0));
+ setgraphmode(0);
+ cnum_result = q;
+ return cnum_result;
}
-void animate()
-{
- byte facing,step,slow,fv;
-;
- cleardevice();
- settextstyle(0,0,2); setcolor(12); outtextxy(0,0,"Animate");
- settextstyle(0,0,1); setcolor(15);
- outtextxy(0,20,"Enter = Turn, + = Faster, - = Slower, Esc = stop this.");
- facing=0; step=1; slow=100;
- do {
- for( fv=0; fv <= 1; fv ++)
- putimage(200*fv+177,77,pic[facing*a.seq+step][fv],4-fv*4);
- if (keypressed())
- switch (upcase(readkey())) {
- case '\15': {;
- facing += 1; if (facing*a.seq>=a.num) facing=0;
- }
- break;
- case '\33': {; cleardevice(); return; } break;
- case '+': if (slow>0) slow -= 5; break;
- case '-': if (slow<255) slow += 5; break; default: output << '\7';
- }
- step += 1; if (step>a.seq) step=1;
- delay(slow);
- } while (!false);
+void animate() {
+ byte facing, step, slow, fv;
+ ;
+ cleardevice();
+ settextstyle(0, 0, 2);
+ setcolor(12);
+ outtextxy(0, 0, "Animate");
+ settextstyle(0, 0, 1);
+ setcolor(15);
+ outtextxy(0, 20, "Enter = Turn, + = Faster, - = Slower, Esc = stop this.");
+ facing = 0;
+ step = 1;
+ slow = 100;
+ do {
+ for (fv = 0; fv <= 1; fv ++)
+ putimage(200 * fv + 177, 77, pic[facing * a.seq + step][fv], 4 - fv * 4);
+ if (keypressed())
+ switch (upcase(readkey())) {
+ case '\15': {
+ ;
+ facing += 1;
+ if (facing * a.seq >= a.num) facing = 0;
+ }
+ break;
+ case '\33': {
+ ;
+ cleardevice();
+ return;
+ }
+ break;
+ case '+':
+ if (slow > 0) slow -= 5;
+ break;
+ case '-':
+ if (slow < 255) slow += 5;
+ break;
+ default:
+ output << '\7';
+ }
+ step += 1;
+ if (step > a.seq) step = 1;
+ delay(slow);
+ } while (!false);
}
-byte tabpel(integer x,integer y)
-{byte tabpel_result;
-;
- if (getpixel(400+x,17+y)==15) tabpel_result=17;
- else tabpel_result=getpixel(500+x,17+y);
-return tabpel_result;
+byte tabpel(integer x, integer y) {
+ byte tabpel_result;
+ ;
+ if (getpixel(400 + x, 17 + y) == 15) tabpel_result = 17;
+ else tabpel_result = getpixel(500 + x, 17 + y);
+ return tabpel_result;
}
-void bigpixel(integer x,integer y, byte size,byte col)
-{;
- if (col==17) setfillstyle(9,8); else setfillstyle(1,col);
- bar(x*size,y*size,x*size+size-2,y*size+size-2);
+void bigpixel(integer x, integer y, byte size, byte col) {
+ ;
+ if (col == 17) setfillstyle(9, 8);
+ else setfillstyle(1, col);
+ bar(x * size, y * size, x * size + size - 2, y * size + size - 2);
}
-void blowup(byte n)
-{
- byte fv,x,y,xyl;
-;
- {;
- for( fv=0; fv <= 1; fv ++) putimage(400+fv*100,17,pic[n][fv],0);
- xyl=200 / a.yl;
- for( x=0; x <= a.xl; x ++)
- for( y=0; y <= a.yl; y ++)
- bigpixel(x,y,xyl,tabpel(x,y));
- }
+void blowup(byte n) {
+ byte fv, x, y, xyl;
+ ;
+ {
+ ;
+ for (fv = 0; fv <= 1; fv ++) putimage(400 + fv * 100, 17, pic[n][fv], 0);
+ xyl = 200 / a.yl;
+ for (x = 0; x <= a.xl; x ++)
+ for (y = 0; y <= a.yl; y ++)
+ bigpixel(x, y, xyl, tabpel(x, y));
+ }
}
void edit();
-static void putnum(byte x,byte p)
-{
- varying_string<2> z;
-;
- str(x,z); outtextxy(x*53+17,87,z); putimage(x*53,100,pic[p][1],0);
+static void putnum(byte x, byte p) {
+ varying_string<2> z;
+ ;
+ str(x, z);
+ outtextxy(x * 53 + 17, 87, z);
+ putimage(x * 53, 100, pic[p][1], 0);
}
-static void title()
-{;
- cleardevice(); setcolor(11); settextstyle(0,0,2);
- outtextxy(0,0,"Edit- which one?"); settextstyle(0,0,1); setcolor(15);
+static void title() {
+ ;
+ cleardevice();
+ setcolor(11);
+ settextstyle(0, 0, 2);
+ outtextxy(0, 0, "Edit- which one?");
+ settextstyle(0, 0, 1);
+ setcolor(15);
}
-void edit()
-{
- byte fv,ra,rb;
-;
- {;
- title(); for( fv=1; fv <= (a.num / a.seq); fv ++) putnum(fv,fv*a.seq);
- do { ra=ord(readkey())-48; } while (!(ra<(a.num / a.seq))); ra -= 1;
- title(); for( fv=1; fv <= a.seq; fv ++) putnum(fv,ra*a.seq+fv);
- do { rb=ord(readkey())-48; } while (!(rb<a.seq));
- cleardevice();
- blowup(ra*a.seq+rb); input >> NL;
- cleardevice();
- }
+void edit() {
+ byte fv, ra, rb;
+ ;
+ {
+ ;
+ title();
+ for (fv = 1; fv <= (a.num / a.seq); fv ++) putnum(fv, fv * a.seq);
+ do {
+ ra = ord(readkey()) - 48;
+ } while (!(ra < (a.num / a.seq)));
+ ra -= 1;
+ title();
+ for (fv = 1; fv <= a.seq; fv ++) putnum(fv, ra * a.seq + fv);
+ do {
+ rb = ord(readkey()) - 48;
+ } while (!(rb < a.seq));
+ cleardevice();
+ blowup(ra * a.seq + rb);
+ input >> NL;
+ cleardevice();
+ }
}
-void pickone()
-{
- char r;
-;
- r=upcase(readkey());
- switch (r) {
- case 'N': a.name=cstr(a.name); break;
- case 'S': a.seq=cnum(a.seq); break;
- case 'F': a.fgc=ccol(); break;
- case 'B': a.bgc=ccol(); break;
- case 'A': animate(); break;
- case 'E': edit(); break;
- case '\0': switch (readkey()) {
- case 'i': save(); break; /* alt-f2 */
- }
- break;
- }
+void pickone() {
+ char r;
+ ;
+ r = upcase(readkey());
+ switch (r) {
+ case 'N':
+ a.name = cstr(a.name);
+ break;
+ case 'S':
+ a.seq = cnum(a.seq);
+ break;
+ case 'F':
+ a.fgc = ccol();
+ break;
+ case 'B':
+ a.bgc = ccol();
+ break;
+ case 'A':
+ animate();
+ break;
+ case 'E':
+ edit();
+ break;
+ case '\0':
+ switch (readkey()) {
+ case 'i':
+ save();
+ break; /* alt-f2 */
+ }
+ break;
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- setup();
- do {
- values();
- pickone();
- } while (!false);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ setup();
+ do {
+ values();
+ pickone();
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/spread2.cpp b/engines/avalanche/spread2.cpp
index 6fa215900e..c6c586921d 100644
--- a/engines/avalanche/spread2.cpp
+++ b/engines/avalanche/spread2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,723 +34,919 @@
namespace Avalanche {
const integer pattern = 12; /* Pattern for transparencies. */
-const fillpatterntype grey50 = {{0xaa, 0x55, 0xaa,
- 0x55, 0xaa, 0x55, 0xaa, 0x55}};
+const fillpatterntype grey50 = {{
+ 0xaa, 0x55, 0xaa,
+ 0x55, 0xaa, 0x55, 0xaa, 0x55
+ }
+};
struct adxtype {
- varying_string<12> name; /* name of character */
- varying_string<16> comment; /* comment */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
- byte accinum; /* the number according to Acci (1=Avvy, etc.) */
+ varying_string<12> name; /* name of character */
+ varying_string<16> comment; /* comment */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
+ byte accinum; /* the number according to Acci (1=Avvy, etc.) */
};
untyped_file sf;
adxtype a;
char r;
-boolean adxmodi,picmodi;
-array<5,2053,byte> mani;
-matrix<0,99,0,10,byte> sil;
-array<1,16000,byte> aa;
+boolean adxmodi, picmodi;
+array<5, 2053, byte> mani;
+matrix<0, 99, 0, 10, byte> sil;
+array<1, 16000, byte> aa;
word soa;
byte xw;
-byte leftc,rightc;
+byte leftc, rightc;
boolean lmo;
-array<1,2,pointer> clip;
-integer clipx,clipy;
+array<1, 2, pointer> clip;
+integer clipx, clipy;
boolean boardfull;
-integer xofs,yofs; /* Distance of TL corner of cut from TL corner of pic. */
+integer xofs, yofs; /* Distance of TL corner of cut from TL corner of pic. */
+
+byte bigpix_size, bigpix_gap; /* Size & gap betwixt big pixels. */
+
+void setup() {
+ const integer shouldid = -1317732048;
+ boolean ok;
+ longint id;
+ varying_string<2> sn;
+ ;
+ output << "Sprite Editor 2 (c) 1993, Thomas Thurman." << NL;
+ bigpix_size = 3;
+ bigpix_gap = 5;
+ do {
+ ok = true;
+ output << "Number of sprite?";
+ input >> sn >> NL;
+ assign(sf, string("v:\\sprite") + sn + ".avd");
+ reset(sf, 1);
+ seek(sf, 177);
+ blockread(sf, id, 4);
+ if (id != shouldid) {
+ ;
+ output << "That isn't a valid Trip5 spritefile." << NL;
+ output << "Please choose another." << NL;
+ output << NL;
+ ok = false;
+ close(sf);
+ } else {
+ ;
+ blockread(sf, soa, 2);
+ if (soa != (cardinal)sizeof(a)) { /* to change this, just change the "type adx=" bit.*/
+ ;
+ output << "That spritefile contains an unknown ADX field type." << NL;
+ output << "Please choose another." << NL;
+ output << NL;
+ ok = false;
+ close(sf);
+ }
+ }
+ } while (!ok);
+ blockread(sf, a, soa);
+ output << filepos(sf) << NL;
+ adxmodi = false;
+ picmodi = false;
+ getmem(clip[1], a.size);
+ getmem(clip[2], a.size);
+ boardfull = false;
+}
-byte bigpix_size,bigpix_gap; /* Size & gap betwixt big pixels. */
+string strf(longint x) {
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
+}
-void setup()
-{
- const integer shouldid = -1317732048;
- boolean ok;
- longint id;
- varying_string<2> sn;
-;
- output << "Sprite Editor 2 (c) 1993, Thomas Thurman." << NL;
- bigpix_size=3; bigpix_gap=5;
- do {
- ok=true;
- output << "Number of sprite?"; input >> sn >> NL;
- assign(sf,string("v:\\sprite")+sn+".avd");
- reset(sf,1);
- seek(sf,177);
- blockread(sf,id,4);
- if (id!=shouldid)
- {;
- output << "That isn't a valid Trip5 spritefile." << NL;
- output << "Please choose another." << NL;
- output << NL;
- ok=false; close(sf);
- } else
- {;
- blockread(sf,soa,2);
- if (soa!=(cardinal)sizeof(a)) /* to change this, just change the "type adx=" bit.*/
- {;
- output << "That spritefile contains an unknown ADX field type." << NL;
- output << "Please choose another." << NL;
- output << NL;
- ok=false; close(sf);
- }
- }
- } while (!ok);
- blockread(sf,a,soa);
- output << filepos(sf) << NL;
- adxmodi=false; picmodi=false;
- getmem(clip[1],a.size); getmem(clip[2],a.size); boardfull=false;
-}
-
-string strf(longint x)
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
-}
-
-void centre(byte y, string z)
-{;
- gotoxy(40-length(z) / 2,y); output << z;
-}
-
-void info(byte x,byte y, string p,string q)
-{;
- gotoxy(x,y);
- textattr=6; output << p+":ú";
- textattr=11; output << q;
- textattr=8; output << 'ú';
-}
-
-void colours(byte f,byte b)
-{;
- gotoxy(35,11);
- textattr=6;
- output << "Bubbles";
- textattr=b*16+f;
- output << " like this! ";
-}
-
-void adxinfo()
-{;
- {;
- info( 5, 8,"Name",a.name);
- info(35, 8,"Comment",a.comment);
- info( 5, 9,"Width",strf(a.xl));
- info(15, 9,"Height",strf(a.yl));
- info(35, 9,"Size of one pic",strf(a.size));
- info( 5,10,"Number in a stride",strf(a.seq));
- info(35,10,"Number of strides",strf(a.num / a.seq));
- info( 5,11,"Total number",strf(a.num));
- info( 5,12,"Acci number",strf(a.accinum));
- colours(a.fgc,a.bgc);
- }
-}
-
-void status()
-{;
- textattr=7;
- clrscr;
- textattr=10; centre(3,"Sprite Editor 2 (c) 1993, Thomas Thurman.");
- textattr=6; gotoxy(3,7); output << "ADX information:";
- adxinfo();
- textattr=6;
- gotoxy(3,14); output << "Options:";
- gotoxy(5,15); output << "A) edit ADX information";
- gotoxy(5,16); output << "P) edit pictures";
- gotoxy(5,17); output << "S) save the ADX info (pics are saved automatically)";
-}
-
-void enterstring(string w, byte l, string& q)
-{
- string t;
-;
- textattr=13; clrscr;
- output << NL;
- output << "Press Return for no change, Space+Return for a blank." << NL;
- do {
- output << "New value for " << w << " (max length " << l << ")?";
- input >> t >> NL;
- } while (!(length(t)<=l));
- if (t==' ') q=""; else if (t!="") q=t;
- adxmodi=true;
-}
-
-void entercolour(string w, byte& c);
+void centre(byte y, string z) {
+ ;
+ gotoxy(40 - length(z) / 2, y);
+ output << z;
+}
+
+void info(byte x, byte y, string p, string q) {
+ ;
+ gotoxy(x, y);
+ textattr = 6;
+ output << p + ":ú";
+ textattr = 11;
+ output << q;
+ textattr = 8;
+ output << 'ú';
+}
+
+void colours(byte f, byte b) {
+ ;
+ gotoxy(35, 11);
+ textattr = 6;
+ output << "Bubbles";
+ textattr = b * 16 + f;
+ output << " like this! ";
+}
+
+void adxinfo() {
+ ;
+ {
+ ;
+ info(5, 8, "Name", a.name);
+ info(35, 8, "Comment", a.comment);
+ info(5, 9, "Width", strf(a.xl));
+ info(15, 9, "Height", strf(a.yl));
+ info(35, 9, "Size of one pic", strf(a.size));
+ info(5, 10, "Number in a stride", strf(a.seq));
+ info(35, 10, "Number of strides", strf(a.num / a.seq));
+ info(5, 11, "Total number", strf(a.num));
+ info(5, 12, "Acci number", strf(a.accinum));
+ colours(a.fgc, a.bgc);
+ }
+}
+
+void status() {
+ ;
+ textattr = 7;
+ clrscr;
+ textattr = 10;
+ centre(3, "Sprite Editor 2 (c) 1993, Thomas Thurman.");
+ textattr = 6;
+ gotoxy(3, 7);
+ output << "ADX information:";
+ adxinfo();
+ textattr = 6;
+ gotoxy(3, 14);
+ output << "Options:";
+ gotoxy(5, 15);
+ output << "A) edit ADX information";
+ gotoxy(5, 16);
+ output << "P) edit pictures";
+ gotoxy(5, 17);
+ output << "S) save the ADX info (pics are saved automatically)";
+}
+
+void enterstring(string w, byte l, string &q) {
+ string t;
+ ;
+ textattr = 13;
+ clrscr;
+ output << NL;
+ output << "Press Return for no change, Space+Return for a blank." << NL;
+ do {
+ output << "New value for " << w << " (max length " << l << ")?";
+ input >> t >> NL;
+ } while (!(length(t) <= l));
+ if (t == ' ') q = "";
+ else if (t != "") q = t;
+ adxmodi = true;
+}
+
+void entercolour(string w, byte &c);
static byte fv;
-static void loseold() {; output << string('\10')+'\377'; }
-
-
-static void drawnew() {; gotoxy(3+fv*5,11); output << '\30'; }
-
-void entercolour(string w, byte& c)
-{;
- textattr=13; clrscr;
- output << NL; output << "New value for " << w << '?' << NL;
- output << " Use \32\33 to move about, Enter=OK, Esc=Cancel." << NL;
- for( fv=1; fv <= 15; fv ++)
- {;
- gotoxy(3+fv*5,10); textattr=fv; output << 'þ';
- }
- fv=c;
- do {
- drawnew();
- r=readkey();
- switch (r) {
- case '\33': return; break; /* no change to c */
- case '\15': {;
- c=fv; adxmodi=true;
- return;
- }
- break;
- case '\0': switch (readkey()) {
- case 'G': {; loseold(); fv= 0; drawnew(); } break; /* home */
- case 'O': {; loseold(); fv=15; drawnew(); } break; /* end */
- case 'K': if (fv> 0) {; loseold(); fv -= 1; drawnew(); } break; /* left */
- case 'M': if (fv<15) {; loseold(); fv += 1; drawnew(); } break; /* right */
- }
- break;
- }
- } while (!false);
-}
-
-void enternum(string w, byte& q)
-{
- string t; integer e; byte r;
-;
- textattr=13; clrscr;
- output << NL;
- output << "Press Return for no change." << NL;
- do {
- output << "New value for " << w << '?';
- input >> t >> NL;
- if (t=="") return; /* No change... */
- val(t,r,e);
- } while (!(e==0));
- q=r; /* Update variable. */
- adxmodi=true;
-}
-
-void editadx()
-{
- char r;
-;
- do {
- clrscr;
- textattr=10; centre(3,"ADX Editor:");
- textattr= 9; centre(5,"N: Name, C: Comment, F: Foreground, B: Background, A: Accinum, X: eXit.");
- adxinfo();
- r=upcase(readkey());
- switch (r) {
- case 'N': enterstring("Name",12,a.name); break;
- case 'C': enterstring("Comment",16,a.comment); break;
- case 'F': entercolour("Foreground",a.fgc); break;
- case 'B': entercolour("Background",a.bgc); break;
- case 'A': enternum("Accinum",a.accinum); break;
- case 'X':case '\33': return; break;
- default: output << '\7';
- }
- } while (!false);
-}
-
-void saveit()
-{
- char pak;
- integer oldsoa;
-;
- textattr=10; clrscr;
- centre(7,"Saving!");
- if (adxmodi)
- {;
- centre(10,"ADX information being saved...");
- seek(sf,181); /* start of ADX info */
- soa=sizeof(a);
- blockread(sf,oldsoa,2);
-/* if soa=oldsoa then
- begin;*/
- seek(sf,181);
- blockwrite(sf,soa,2);
- blockwrite(sf,a,soa);
- adxmodi=false;
-/* end else write(#7);*/
- } else centre(10,"No changes were made to ADX...");
- centre(25,"Press any key..."); pak=readkey();
-}
-
-void quit()
-{;
- close(sf);
- exit(0);
-}
-
-void getsilmani() /* Reclaims original sil & mani arrays */
-{
- byte x,y,z; word offs;
-;
+static void loseold() {
+ ;
+ output << string('\10') + '\377';
+}
- /* Sil... */
- getimage(500,150,500+a.xl,150+a.yl,aa);
+static void drawnew() {
+ ;
+ gotoxy(3 + fv * 5, 11);
+ output << '\30';
+}
- for( x=0; x <= 3; x ++)
- for( y=0; y <= a.yl; y ++)
- for( z=0; z <= (a.xl / 8); z ++)
- {;
- offs=5+y*xw*4+xw*x+z;
- sil[y][z]=aa[offs];
- }
+void entercolour(string w, byte &c) {
+ ;
+ textattr = 13;
+ clrscr;
+ output << NL;
+ output << "New value for " << w << '?' << NL;
+ output << " Use \32\33 to move about, Enter=OK, Esc=Cancel." << NL;
+ for (fv = 1; fv <= 15; fv ++) {
+ ;
+ gotoxy(3 + fv * 5, 10);
+ textattr = fv;
+ output << 'þ';
+ }
+ fv = c;
+ do {
+ drawnew();
+ r = readkey();
+ switch (r) {
+ case '\33':
+ return;
+ break; /* no change to c */
+ case '\15': {
+ ;
+ c = fv;
+ adxmodi = true;
+ return;
+ }
+ break;
+ case '\0':
+ switch (readkey()) {
+ case 'G': {
+ ;
+ loseold();
+ fv = 0;
+ drawnew();
+ }
+ break; /* home */
+ case 'O': {
+ ;
+ loseold();
+ fv = 15;
+ drawnew();
+ }
+ break; /* end */
+ case 'K':
+ if (fv > 0) {
+ ;
+ loseold();
+ fv -= 1;
+ drawnew();
+ }
+ break; /* left */
+ case 'M':
+ if (fv < 15) {
+ ;
+ loseold();
+ fv += 1;
+ drawnew();
+ }
+ break; /* right */
+ }
+ break;
+ }
+ } while (!false);
+}
- /* ...Mani. */
+void enternum(string w, byte &q) {
+ string t;
+ integer e;
+ byte r;
+ ;
+ textattr = 13;
+ clrscr;
+ output << NL;
+ output << "Press Return for no change." << NL;
+ do {
+ output << "New value for " << w << '?';
+ input >> t >> NL;
+ if (t == "") return; /* No change... */
+ val(t, r, e);
+ } while (!(e == 0));
+ q = r; /* Update variable. */
+ adxmodi = true;
+}
- getimage(500,50,500+a.xl,50+a.yl,aa);
+void editadx() {
+ char r;
+ ;
+ do {
+ clrscr;
+ textattr = 10;
+ centre(3, "ADX Editor:");
+ textattr = 9;
+ centre(5, "N: Name, C: Comment, F: Foreground, B: Background, A: Accinum, X: eXit.");
+ adxinfo();
+ r = upcase(readkey());
+ switch (r) {
+ case 'N':
+ enterstring("Name", 12, a.name);
+ break;
+ case 'C':
+ enterstring("Comment", 16, a.comment);
+ break;
+ case 'F':
+ entercolour("Foreground", a.fgc);
+ break;
+ case 'B':
+ entercolour("Background", a.bgc);
+ break;
+ case 'A':
+ enternum("Accinum", a.accinum);
+ break;
+ case 'X':
+ case '\33':
+ return;
+ break;
+ default:
+ output << '\7';
+ }
+ } while (!false);
+}
- move(aa[5],mani,sizeof(mani));
+void saveit() {
+ char pak;
+ integer oldsoa;
+ ;
+ textattr = 10;
+ clrscr;
+ centre(7, "Saving!");
+ if (adxmodi) {
+ ;
+ centre(10, "ADX information being saved...");
+ seek(sf, 181); /* start of ADX info */
+ soa = sizeof(a);
+ blockread(sf, oldsoa, 2);
+ /* if soa=oldsoa then
+ begin;*/
+ seek(sf, 181);
+ blockwrite(sf, soa, 2);
+ blockwrite(sf, a, soa);
+ adxmodi = false;
+ /* end else write(#7);*/
+ } else centre(10, "No changes were made to ADX...");
+ centre(25, "Press any key...");
+ pak = readkey();
+}
+
+void quit() {
+ ;
+ close(sf);
+ exit(0);
+}
+
+void getsilmani() { /* Reclaims original sil & mani arrays */
+ byte x, y, z;
+ word offs;
+ ;
+
+ /* Sil... */
+
+ getimage(500, 150, 500 + a.xl, 150 + a.yl, aa);
+
+ for (x = 0; x <= 3; x ++)
+ for (y = 0; y <= a.yl; y ++)
+ for (z = 0; z <= (a.xl / 8); z ++) {
+ ;
+ offs = 5 + y * xw * 4 + xw * x + z;
+ sil[y][z] = aa[offs];
+ }
+
+ /* ...Mani. */
+
+ getimage(500, 50, 500 + a.xl, 50 + a.yl, aa);
+
+ move(aa[5], mani, sizeof(mani));
}
void explode(byte which) /* 0 is the first one! */
- /* Each character takes five-quarters of (a.size-6) on disk. */
-{
- byte fv,ff; word so1; /* size of one */
-;
- {;
- so1=a.size-6; so1 += so1 / 4;
- seek(sf,183+soa+so1*which); /* First is at 221 */
-/* where:=filepos(sf);*/
- xw=a.xl / 8; if ((a.xl % 8)>0) xw += 1;
-
- for( fv=0; fv <= a.yl; fv ++)
- blockread(sf,sil[fv],xw);
- blockread(sf,mani,a.size-6);
- aa[a.size-1]=0; aa[a.size]=0; /* footer */
- }
-}
-
-void implode(byte which) /* Writes a pic back onto the disk */
+/* Each character takes five-quarters of (a.size-6) on disk. */
{
- byte fv,ff; word so1; /* size of one */
-;
- {;
+ byte fv, ff;
+ word so1; /* size of one */
+ ;
+ {
+ ;
+ so1 = a.size - 6;
+ so1 += so1 / 4;
+ seek(sf, 183 + soa + so1 * which); /* First is at 221 */
+ /* where:=filepos(sf);*/
+ xw = a.xl / 8;
+ if ((a.xl % 8) > 0) xw += 1;
+
+ for (fv = 0; fv <= a.yl; fv ++)
+ blockread(sf, sil[fv], xw);
+ blockread(sf, mani, a.size - 6);
+ aa[a.size - 1] = 0;
+ aa[a.size] = 0; /* footer */
+ }
+}
- getsilmani(); /* Restore original arrays */
+void implode(byte which) { /* Writes a pic back onto the disk */
+ byte fv, ff;
+ word so1; /* size of one */
+ ;
+ {
+ ;
- so1=a.size-6; so1 += so1 / 4;
- seek(sf,183+soa+so1*which); /* First is at 221 */
+ getsilmani(); /* Restore original arrays */
- xw=a.xl / 8; if ((a.xl % 8)>0) xw += 1;
+ so1 = a.size - 6;
+ so1 += so1 / 4;
+ seek(sf, 183 + soa + so1 * which); /* First is at 221 */
- for( fv=0; fv <= a.yl; fv ++)
- blockwrite(sf,sil[fv],xw);
- blockwrite(sf,mani,a.size-6);
- aa[a.size-1]=0; aa[a.size]=0; /* footer */
- }
+ xw = a.xl / 8;
+ if ((a.xl % 8) > 0) xw += 1;
+
+ for (fv = 0; fv <= a.yl; fv ++)
+ blockwrite(sf, sil[fv], xw);
+ blockwrite(sf, mani, a.size - 6);
+ aa[a.size - 1] = 0;
+ aa[a.size] = 0; /* footer */
+ }
}
-void plotat(integer xx,integer yy) /* Does NOT cameo the picture!*/
-{;
- move(mani,aa[5],sizeof(mani));
- {;
- aa[1]=a.xl; aa[2]=0; aa[3]=a.yl; aa[4]=0; /* set up x&y codes */
- }
- putimage(xx,yy,aa,0);
+void plotat(integer xx, integer yy) { /* Does NOT cameo the picture!*/
+ ;
+ move(mani, aa[5], sizeof(mani));
+ {
+ ;
+ aa[1] = a.xl;
+ aa[2] = 0;
+ aa[3] = a.yl;
+ aa[4] = 0; /* set up x&y codes */
+ }
+ putimage(xx, yy, aa, 0);
}
-void plotsil(integer xx,integer yy) /* Plots silhouette- rarely used */
-{
- byte x,y,z; word offs;
-;
- for( x=0; x <= 3; x ++)
- for( y=0; y <= a.yl; y ++)
- for( z=0; z <= (a.xl / 8); z ++)
- {;
- offs=5+y*xw*4+xw*x+z;
- aa[offs]=sil[y][z];
- }
-
- {;
- aa[1]=a.xl; aa[2]=0; aa[3]=a.yl; aa[4]=0; /* set up x&y codes */
- }
-
- putimage(xx,yy,aa,0);
-
-}
-
-void style(byte x)
-{;
- if (x==16)
- /*setfillstyle(pattern,8)*/setfillpattern(grey50,8);
- else
- setfillstyle(1,x);
-}
-
-void bigpixel(integer x,integer y)
-{;
- if (getpixel(500+x,150+y)==15)
- /*setfillstyle(pattern,8)*/setfillpattern(grey50,8);
- else
- setfillstyle(1,getpixel(500+x,50+y));
-
- bar(x*bigpix_gap,y*bigpix_gap,
- x*bigpix_gap+bigpix_size,y*bigpix_gap+bigpix_size);
-}
-
-void subplot(byte y, integer x, char c)
-{;
- setfillstyle(1,0); bar(x,0,x+9,170); outtextxy(x+5,y*10+5,c);
-}
-
-void plotleft() {; subplot( leftc,239,'\32'); } /* palette arrows */
-void plotright() {; subplot(rightc,351,'\33'); }
-
-void plotbig(byte x,byte y,byte c)
-{;
- style(c);
- bar(x*bigpix_gap,y*bigpix_gap,
- x*bigpix_gap+bigpix_size,y*bigpix_gap+bigpix_size);
- if (c==16)
- {;
- putpixel(500+x,150+y,15);
- putpixel(500+x, 50+y,0);
- } else
- {;
- putpixel(500+x,150+y,0);
- putpixel(500+x, 50+y,c);
- }
-}
-
-void changepic()
-{;
- mx=mx / bigpix_gap; my=my / bigpix_gap;
- if ((mx>a.xl) || (my>a.yl)) return;
- if (mkey==left)
- plotbig(mx,my,leftc); else
- plotbig(mx,my,rightc);
-}
-
-void changecol()
-{;
- my=my / 10; if (my>16) return;
- if (mkey==left)
- {;
- leftc=my; plotleft();
- } else
- {;
- rightc=my; plotright();
- }
-}
-
-void showcutpic()
-{;
- setfillstyle(5,1); bar(20,160,40+clipx,180+clipy);
- putimage(30,170,clip[2],andput);
- putimage(30,170,clip[1],xorput);
-}
-
-void movesquare(integer& xc,integer& yc, integer xl,integer yl)
-{
- integer x2,y2;
-;
- do {
- x2=xl+xc; y2=yl+yc;
- setcolor(15);
- do {
- rectangle(xc*bigpix_gap-1,yc*bigpix_gap-1,
- x2*(bigpix_gap+1)-1,y2*(bigpix_gap+1)-1);
- } while (!keypressed());
- setcolor(0); rectangle(xc*bigpix_gap-1,yc*bigpix_gap-1,
- x2*(bigpix_gap+1)-1,y2*(bigpix_gap+1)-1);
- switch (readkey()) {
- case '\0': switch (readkey()) {
- case '\110': yc -= 1; break;
- case '\113': xc -= 1; break;
- case '\115': xc += 1; break;
- case '\120': yc += 1; break;
- }
- break;
- case '\15': return; break;
- }
- while ((xl+xc)>a.xl) xc -= 1;
- while ((yl+yc)>a.yl) yc -= 1;
- if (xc<0) xc=0;
- if (yc<0) yc=0;
- } while (!false);
-}
-
-void switch_(integer& v1,integer& v2)
- /* Swaps over the values of v1 and v2. */
-{
- integer temp;
-;
- temp=v1; v1=v2; v2=temp;
+void plotsil(integer xx, integer yy) { /* Plots silhouette- rarely used */
+ byte x, y, z;
+ word offs;
+ ;
+ for (x = 0; x <= 3; x ++)
+ for (y = 0; y <= a.yl; y ++)
+ for (z = 0; z <= (a.xl / 8); z ++) {
+ ;
+ offs = 5 + y * xw * 4 + xw * x + z;
+ aa[offs] = sil[y][z];
+ }
+
+ {
+ ;
+ aa[1] = a.xl;
+ aa[2] = 0;
+ aa[3] = a.yl;
+ aa[4] = 0; /* set up x&y codes */
+ }
+
+ putimage(xx, yy, aa, 0);
+
}
-void choosesquare(integer& x1,integer& y1,integer& x2,integer& y2)
-{
- boolean tl;
-;
- do {
- setcolor(15);
- do {
- rectangle(x1*bigpix_gap-1,y1*bigpix_gap-1,
- (x2+1)*bigpix_gap-1,(y2+1)*bigpix_gap-1);
- } while (!keypressed());
- setcolor(0);
- rectangle(x1*bigpix_gap-1,y1*bigpix_gap-1,
- (x2+1)*bigpix_gap-1,(y2+1)*bigpix_gap-1);
- switch (readkey()) {
- case '\0': switch (readkey()) {
- case '\110': if (tl) y1 -= 1; else y2 -= 1; break;
- case '\113': if (tl) x1 -= 1; else x2 -= 1; break;
- case '\115': if (tl) x1 += 1; else x2 += 1; break;
- case '\120': if (tl) y1 += 1; else y2 += 1; break;
- }
- break;
- case '\11': tl=! tl; break;
- case '\15': {;
- if (x1>x2) switch_(x1,x2); /* Get the square the right way up. */
- if (y1>y2) switch_(y1,y2);
- y2 -= y1; x2 -= x1; /* y1 & y2 have to be the OFFSETS! */
- return;
- }
- break;
- }
- if (x1<0) x1=0; if (y1<0) y1=0;
- {;
- if (y2>a.yl) y2=a.yl; if (x2>a.xl) x2=a.xl;
- }
- } while (!false);
-}
-
-void paste()
-{
- byte x,y;
-;
- if (! boardfull)
- {;
- output << '\7';
- return;
- }
- if (! ((clipx==a.xl) && (clipy==a.yl)))
- movesquare(xofs,yofs,clipx,clipy);
- putimage(500+xofs, 50+yofs,clip[1],0);
- putimage(500+xofs,150+yofs,clip[2],0);
- for( x=0; x <= a.xl; x ++)
- for( y=0; y <= a.yl; y ++)
- {;
- bigpixel(x,y);
- }
-}
-
-void cut()
-{;
- xofs=0; yofs=0; /* From the TL. */
- {;
- getimage(500, 50,500+a.xl, 50+a.yl,clip[1]);
- getimage(500,150,500+a.xl,150+a.yl,clip[2]);
- clipx=a.xl; clipy=a.yl;
- }
- showcutpic();
- boardfull=true;
-}
-
-void cutsome()
-{;
- {;
- choosesquare(xofs,yofs,clipx,clipy);
- getimage(500+xofs, 50+yofs,500+xofs+clipx, 50+yofs+clipy,clip[1]);
- getimage(500+xofs,150+yofs,500+xofs+clipx,150+yofs+clipy,clip[2]);
- }
- showcutpic();
- boardfull=true;
-}
-
-boolean confirm(char c, string x)
+void style(byte x) {
+ ;
+ if (x == 16)
+ /*setfillstyle(pattern,8)*/setfillpattern(grey50, 8);
+ else
+ setfillstyle(1, x);
+}
+
+void bigpixel(integer x, integer y) {
+ ;
+ if (getpixel(500 + x, 150 + y) == 15)
+ /*setfillstyle(pattern,8)*/setfillpattern(grey50, 8);
+ else
+ setfillstyle(1, getpixel(500 + x, 50 + y));
+
+ bar(x * bigpix_gap, y * bigpix_gap,
+ x * bigpix_gap + bigpix_size, y * bigpix_gap + bigpix_size);
+}
+
+void subplot(byte y, integer x, char c) {
+ ;
+ setfillstyle(1, 0);
+ bar(x, 0, x + 9, 170);
+ outtextxy(x + 5, y * 10 + 5, c);
+}
+
+void plotleft() {
+ ; /* palette arrows */
+ subplot(leftc, 239, '\32');
+}
+void plotright() {
+ ;
+ subplot(rightc, 351, '\33');
+}
+
+void plotbig(byte x, byte y, byte c) {
+ ;
+ style(c);
+ bar(x * bigpix_gap, y * bigpix_gap,
+ x * bigpix_gap + bigpix_size, y * bigpix_gap + bigpix_size);
+ if (c == 16) {
+ ;
+ putpixel(500 + x, 150 + y, 15);
+ putpixel(500 + x, 50 + y, 0);
+ } else {
+ ;
+ putpixel(500 + x, 150 + y, 0);
+ putpixel(500 + x, 50 + y, c);
+ }
+}
+
+void changepic() {
+ ;
+ mx = mx / bigpix_gap;
+ my = my / bigpix_gap;
+ if ((mx > a.xl) || (my > a.yl)) return;
+ if (mkey == left)
+ plotbig(mx, my, leftc);
+ else
+ plotbig(mx, my, rightc);
+}
+
+void changecol() {
+ ;
+ my = my / 10;
+ if (my > 16) return;
+ if (mkey == left) {
+ ;
+ leftc = my;
+ plotleft();
+ } else {
+ ;
+ rightc = my;
+ plotright();
+ }
+}
+
+void showcutpic() {
+ ;
+ setfillstyle(5, 1);
+ bar(20, 160, 40 + clipx, 180 + clipy);
+ putimage(30, 170, clip[2], andput);
+ putimage(30, 170, clip[1], xorput);
+}
+
+void movesquare(integer &xc, integer &yc, integer xl, integer yl) {
+ integer x2, y2;
+ ;
+ do {
+ x2 = xl + xc;
+ y2 = yl + yc;
+ setcolor(15);
+ do {
+ rectangle(xc * bigpix_gap - 1, yc * bigpix_gap - 1,
+ x2 * (bigpix_gap + 1) - 1, y2 * (bigpix_gap + 1) - 1);
+ } while (!keypressed());
+ setcolor(0);
+ rectangle(xc * bigpix_gap - 1, yc * bigpix_gap - 1,
+ x2 * (bigpix_gap + 1) - 1, y2 * (bigpix_gap + 1) - 1);
+ switch (readkey()) {
+ case '\0':
+ switch (readkey()) {
+ case '\110':
+ yc -= 1;
+ break;
+ case '\113':
+ xc -= 1;
+ break;
+ case '\115':
+ xc += 1;
+ break;
+ case '\120':
+ yc += 1;
+ break;
+ }
+ break;
+ case '\15':
+ return;
+ break;
+ }
+ while ((xl + xc) > a.xl) xc -= 1;
+ while ((yl + yc) > a.yl) yc -= 1;
+ if (xc < 0) xc = 0;
+ if (yc < 0) yc = 0;
+ } while (!false);
+}
+
+void switch_(integer &v1, integer &v2)
+/* Swaps over the values of v1 and v2. */
{
- byte col; char groi;
-boolean confirm_result;
-;
- while (keypressed()) groi=readkey();
- x=x+"? "+c+" to confirm.";
- col=1;
- do {
- setcolor(col); outtextxy(555,5,x);
- col += 1; if (col==16) col=1;
- } while (!keypressed());
- confirm_result=upcase(readkey())==c;
- setfillstyle(1,0); bar(470,0,640,10);
-return confirm_result;
+ integer temp;
+ ;
+ temp = v1;
+ v1 = v2;
+ v2 = temp;
+}
+
+void choosesquare(integer &x1, integer &y1, integer &x2, integer &y2) {
+ boolean tl;
+ ;
+ do {
+ setcolor(15);
+ do {
+ rectangle(x1 * bigpix_gap - 1, y1 * bigpix_gap - 1,
+ (x2 + 1)*bigpix_gap - 1, (y2 + 1)*bigpix_gap - 1);
+ } while (!keypressed());
+ setcolor(0);
+ rectangle(x1 * bigpix_gap - 1, y1 * bigpix_gap - 1,
+ (x2 + 1)*bigpix_gap - 1, (y2 + 1)*bigpix_gap - 1);
+ switch (readkey()) {
+ case '\0':
+ switch (readkey()) {
+ case '\110':
+ if (tl) y1 -= 1;
+ else y2 -= 1;
+ break;
+ case '\113':
+ if (tl) x1 -= 1;
+ else x2 -= 1;
+ break;
+ case '\115':
+ if (tl) x1 += 1;
+ else x2 += 1;
+ break;
+ case '\120':
+ if (tl) y1 += 1;
+ else y2 += 1;
+ break;
+ }
+ break;
+ case '\11':
+ tl = ! tl;
+ break;
+ case '\15': {
+ ;
+ if (x1 > x2) switch_(x1, x2); /* Get the square the right way up. */
+ if (y1 > y2) switch_(y1, y2);
+ y2 -= y1;
+ x2 -= x1; /* y1 & y2 have to be the OFFSETS! */
+ return;
+ }
+ break;
+ }
+ if (x1 < 0) x1 = 0;
+ if (y1 < 0) y1 = 0;
+ {
+ ;
+ if (y2 > a.yl) y2 = a.yl;
+ if (x2 > a.xl) x2 = a.xl;
+ }
+ } while (!false);
}
-void checkbutton(byte which)
-{;
- my=(my-12) / 25;
- switch (my) {
- case 0: if (confirm('S',"Save")) {; implode(which); lmo=true; } break;
- case 1: if (confirm('C',"Cancel")) lmo=true; break;
- case 4: cut(); break;
- case 5: if (confirm('P',"Paste")) paste(); break;
- case 6: cutsome(); break;
- }
+void paste() {
+ byte x, y;
+ ;
+ if (! boardfull) {
+ ;
+ output << '\7';
+ return;
+ }
+ if (!((clipx == a.xl) && (clipy == a.yl)))
+ movesquare(xofs, yofs, clipx, clipy);
+ putimage(500 + xofs, 50 + yofs, clip[1], 0);
+ putimage(500 + xofs, 150 + yofs, clip[2], 0);
+ for (x = 0; x <= a.xl; x ++)
+ for (y = 0; y <= a.yl; y ++) {
+ ;
+ bigpixel(x, y);
+ }
}
-void animate()
-{;
+void cut() {
+ ;
+ xofs = 0;
+ yofs = 0; /* From the TL. */
+ {
+ ;
+ getimage(500, 50, 500 + a.xl, 50 + a.yl, clip[1]);
+ getimage(500, 150, 500 + a.xl, 150 + a.yl, clip[2]);
+ clipx = a.xl;
+ clipy = a.yl;
+ }
+ showcutpic();
+ boardfull = true;
}
-void undo()
-{;
+void cutsome() {
+ ;
+ {
+ ;
+ choosesquare(xofs, yofs, clipx, clipy);
+ getimage(500 + xofs, 50 + yofs, 500 + xofs + clipx, 50 + yofs + clipy, clip[1]);
+ getimage(500 + xofs, 150 + yofs, 500 + xofs + clipx, 150 + yofs + clipy, clip[2]);
+ }
+ showcutpic();
+ boardfull = true;
+}
+
+boolean confirm(char c, string x) {
+ byte col;
+ char groi;
+ boolean confirm_result;
+ ;
+ while (keypressed()) groi = readkey();
+ x = x + "? " + c + " to confirm.";
+ col = 1;
+ do {
+ setcolor(col);
+ outtextxy(555, 5, x);
+ col += 1;
+ if (col == 16) col = 1;
+ } while (!keypressed());
+ confirm_result = upcase(readkey()) == c;
+ setfillstyle(1, 0);
+ bar(470, 0, 640, 10);
+ return confirm_result;
+}
+
+void checkbutton(byte which) {
+ ;
+ my = (my - 12) / 25;
+ switch (my) {
+ case 0:
+ if (confirm('S', "Save")) {
+ ;
+ implode(which);
+ lmo = true;
+ }
+ break;
+ case 1:
+ if (confirm('C', "Cancel")) lmo = true;
+ break;
+ case 4:
+ cut();
+ break;
+ case 5:
+ if (confirm('P', "Paste")) paste();
+ break;
+ case 6:
+ cutsome();
+ break;
+ }
+}
+
+void animate() {
+ ;
+}
+
+void undo() {
+ ;
}
void fliplr();
-static void flipline(integer x1,integer x2,integer y)
-{
- integer fv,ff;
-;
- for( fv=x1; fv <= x2; fv ++) putpixel(fv,0,getpixel(fv,y));
- ff=x2;
- for( fv=x1; fv <= x2; fv ++)
- {;
- putpixel(fv,y,getpixel(ff,0));
- ff -= 1;
- }
-}
-
-void fliplr() /* Flips left-to-right. */
-{
- integer fv,ff;
-;
- for( fv=0; fv <= a.yl; fv ++)
- {;
- flipline(500,500+a.xl, 50+fv);
- flipline(500,500+a.xl,150+fv);
- }
- for( fv=0; fv <= a.xl; fv ++)
- for( ff=0; ff <= a.yl; ff ++)
- bigpixel(fv,ff);
-}
-
-void change_colours() /* Swaps one colour with another. */
-{
- byte fv,ff;
-;
+static void flipline(integer x1, integer x2, integer y) {
+ integer fv, ff;
+ ;
+ for (fv = x1; fv <= x2; fv ++) putpixel(fv, 0, getpixel(fv, y));
+ ff = x2;
+ for (fv = x1; fv <= x2; fv ++) {
+ ;
+ putpixel(fv, y, getpixel(ff, 0));
+ ff -= 1;
+ }
+}
- if ((leftc==16) || (rightc==16)) /* See-through can't be one of the colours. */
- {;
- output << '\7'; /* Bleep! */
- return;
- }
+void fliplr() { /* Flips left-to-right. */
+ integer fv, ff;
+ ;
+ for (fv = 0; fv <= a.yl; fv ++) {
+ ;
+ flipline(500, 500 + a.xl, 50 + fv);
+ flipline(500, 500 + a.xl, 150 + fv);
+ }
+ for (fv = 0; fv <= a.xl; fv ++)
+ for (ff = 0; ff <= a.yl; ff ++)
+ bigpixel(fv, ff);
+}
- for( fv=0; fv <= a.yl; fv ++)
- for( ff=0; ff <= a.xl; ff ++)
- if (getpixel(500+ff,50+fv)==leftc)
- putpixel(500+ff,50+fv,rightc);
+void change_colours() { /* Swaps one colour with another. */
+ byte fv, ff;
+ ;
- for( fv=0; fv <= a.xl; fv ++)
- for( ff=0; ff <= a.yl; ff ++)
- bigpixel(fv,ff);
+ if ((leftc == 16) || (rightc == 16)) { /* See-through can't be one of the colours. */
+ ;
+ output << '\7'; /* Bleep! */
+ return;
+ }
+
+ for (fv = 0; fv <= a.yl; fv ++)
+ for (ff = 0; ff <= a.xl; ff ++)
+ if (getpixel(500 + ff, 50 + fv) == leftc)
+ putpixel(500 + ff, 50 + fv, rightc);
+
+ for (fv = 0; fv <= a.xl; fv ++)
+ for (ff = 0; ff <= a.yl; ff ++)
+ bigpixel(fv, ff);
}
-void redraw()
-{
- byte x,y;
-;
- setfillstyle(1,0);
- bar(0,0,250,200);
-
- for( x=0; x <= a.xl; x ++)
- for( y=0; y <= a.yl; y ++)
- {;
- bigpixel(x,y);
- }
-}
-
-void parse(char c) /* Parses keystrokes */
-{;
- switch (upcase(c)) {
- case '\26':case 'P': paste(); break;
- case '\3':case 'C': cut(); break;
- case '\30':case 'X': cutsome(); break;
- case 'A': animate(); break;
- case 'U': undo(); break;
- case '@': fliplr(); break;
- case '!': change_colours(); break;
- case '<': if (bigpix_size>1)
- {;
- bigpix_size -= 1; bigpix_gap -= 1;
- redraw();
- }
- break;
- case '>': if (bigpix_size<8)
- {;
- bigpix_size += 1; bigpix_gap += 1;
- redraw();
- }
- break;
- case '\33': if (confirm('X',"Exit")) lmo=true; break;
- }
-}
-
-void editone(byte which)
-{
- byte x,y;
-;
- cleardevice();
- explode(which);
- plotat(500,50);
- plotsil(500,150);
- for( x=0; x <= a.xl; x ++)
- for( y=0; y <= a.yl; y ++)
- {;
- bigpixel(x,y);
- }
- for( y=0; y <= 16; y ++)
- {;
- style(y);
- bar(251,y*10+1,349,y*10+9);
- rectangle(250,y*10,350,y*10+10);
- }
-
- settextstyle(0,0,1); leftc=15; rightc=16; plotleft(); plotright(); lmo=false;
-
- outtextxy(410, 25,"Save");
- outtextxy(410, 50,"Cancel");
- outtextxy(410, 75,"Animate");
- outtextxy(410,100,"Undo");
- outtextxy(410,125,"Cut");
- outtextxy(410,150,"Paste");
- outtextxy(410,175,"X: Cut Some");
- if (boardfull) showcutpic();
- setfillstyle(6,15);
- for( y=0; y <= 7; y ++)
- bar(370,y*25+12,450,y*25+12);
-
- do {
- on;
- do {
- if (keypressed()) parse(readkey());
- } while (!(anyo | lmo));
- off;
-
- if (! lmo)
- {;
- getbuttonstatus;
-
- switch (mx) {
- case 1 ... 249: changepic(); break;
- case 250 ... 350: changecol(); break;
- case 370 ... 450: checkbutton(which); break;
- }
- }
- } while (!lmo);
- settextstyle(2,0,7); setcolor(15);
+void redraw() {
+ byte x, y;
+ ;
+ setfillstyle(1, 0);
+ bar(0, 0, 250, 200);
+
+ for (x = 0; x <= a.xl; x ++)
+ for (y = 0; y <= a.yl; y ++) {
+ ;
+ bigpixel(x, y);
+ }
+}
+
+void parse(char c) { /* Parses keystrokes */
+ ;
+ switch (upcase(c)) {
+ case '\26':
+ case 'P':
+ paste();
+ break;
+ case '\3':
+ case 'C':
+ cut();
+ break;
+ case '\30':
+ case 'X':
+ cutsome();
+ break;
+ case 'A':
+ animate();
+ break;
+ case 'U':
+ undo();
+ break;
+ case '@':
+ fliplr();
+ break;
+ case '!':
+ change_colours();
+ break;
+ case '<':
+ if (bigpix_size > 1) {
+ ;
+ bigpix_size -= 1;
+ bigpix_gap -= 1;
+ redraw();
+ }
+ break;
+ case '>':
+ if (bigpix_size < 8) {
+ ;
+ bigpix_size += 1;
+ bigpix_gap += 1;
+ redraw();
+ }
+ break;
+ case '\33':
+ if (confirm('X', "Exit")) lmo = true;
+ break;
+ }
+}
+
+void editone(byte which) {
+ byte x, y;
+ ;
+ cleardevice();
+ explode(which);
+ plotat(500, 50);
+ plotsil(500, 150);
+ for (x = 0; x <= a.xl; x ++)
+ for (y = 0; y <= a.yl; y ++) {
+ ;
+ bigpixel(x, y);
+ }
+ for (y = 0; y <= 16; y ++) {
+ ;
+ style(y);
+ bar(251, y * 10 + 1, 349, y * 10 + 9);
+ rectangle(250, y * 10, 350, y * 10 + 10);
+ }
+
+ settextstyle(0, 0, 1);
+ leftc = 15;
+ rightc = 16;
+ plotleft();
+ plotright();
+ lmo = false;
+
+ outtextxy(410, 25, "Save");
+ outtextxy(410, 50, "Cancel");
+ outtextxy(410, 75, "Animate");
+ outtextxy(410, 100, "Undo");
+ outtextxy(410, 125, "Cut");
+ outtextxy(410, 150, "Paste");
+ outtextxy(410, 175, "X: Cut Some");
+ if (boardfull) showcutpic();
+ setfillstyle(6, 15);
+ for (y = 0; y <= 7; y ++)
+ bar(370, y * 25 + 12, 450, y * 25 + 12);
+
+ do {
+ on;
+ do {
+ if (keypressed()) parse(readkey());
+ } while (!(anyo | lmo));
+ off;
+
+ if (! lmo) {
+ ;
+ getbuttonstatus;
+
+ switch (mx) {
+ case 1 ... 249:
+ changepic();
+ break;
+ case 250 ... 350:
+ changecol();
+ break;
+ case 370 ... 450:
+ checkbutton(which);
+ break;
+ }
+ }
+ } while (!lmo);
+ settextstyle(2, 0, 7);
+ setcolor(15);
}
void editstride(byte which);
@@ -759,125 +955,142 @@ static char whichc;
static shortint first;
-static void drawup(byte& which)
-{
- byte fv;
-;
- whichc=chr(which+48);
- cleardevice();
- outtextxy(320,10,string("Edit stride ")+whichc);
- first=(which-1)*a.seq-1;
- for( fv=1; fv <= a.seq; fv ++)
- {;
- explode(fv+first);
- plotat(fv*73,77);
- outtextxy(17+fv*73,64,chr(fv+48));
- }
- outtextxy(320,177,"Which?");
-}
-
-void editstride(byte which)
-{
- char r;
-;
- drawup(which);
- do {
- r=readkey();
- if ((r>'0') && (r<=chr(a.seq+48)))
- {;
- editone(ord(r)-48+first);
- drawup(which);
- }
- } while (!(r=='\33'));
+static void drawup(byte &which) {
+ byte fv;
+ ;
+ whichc = chr(which + 48);
+ cleardevice();
+ outtextxy(320, 10, string("Edit stride ") + whichc);
+ first = (which - 1) * a.seq - 1;
+ for (fv = 1; fv <= a.seq; fv ++) {
+ ;
+ explode(fv + first);
+ plotat(fv * 73, 77);
+ outtextxy(17 + fv * 73, 64, chr(fv + 48));
+ }
+ outtextxy(320, 177, "Which?");
+}
+
+void editstride(byte which) {
+ char r;
+ ;
+ drawup(which);
+ do {
+ r = readkey();
+ if ((r > '0') && (r <= chr(a.seq + 48))) {
+ ;
+ editone(ord(r) - 48 + first);
+ drawup(which);
+ }
+ } while (!(r == '\33'));
}
void editpics();
static byte nds; /* num div seq */
-static void drawup1()
-{
- byte fv;
-;
- setgraphmode(0); directvideo=false; settextjustify(1,1);
- nds=a.num / a.seq;
- settextstyle(2,0,7);
- outtextxy(320,10,"Edit pictures...");
- outtextxy(320,40,"(Usually, 1=away, 2=right, 3=towards, 4=left.)");
- for( fv=1; fv <= nds; fv ++)
- {;
- explode((fv-1)*a.seq);
- plotat(fv*73,100);
- outtextxy(17+fv*73,87,chr(fv+48));
- }
- outtextxy(320,60,string("There are ")+strf(nds)+" strides available.");
- outtextxy(320,177,"Which do you want?");
-}
-
-void editpics()
-{
- char r; byte which; integer e;
-;
- drawup1();
- do {
- r=readkey();
- if ((r>'0') && (r<=chr(nds+48)))
- {;
- editstride(ord(r)-48);
- drawup1();
- }
- } while (!(r=='\33'));
- restorecrtmode();
-}
-
-void titles()
-{
- integer gd,gm;
- char pak; word wait;
-;
- gd=3; gm=1; initgraph(gd,gm,"c:\\bp\\bgi");
- settextstyle(5,0,10); settextjustify(1,1);
- gm=getmaxy() / 2; wait=0;
- do {
- for( gm=0; gm <= 15; gm ++)
- {;
- setcolor(15-gm);
- for( gd=0; gd <= (150-gm*10); gd ++)
- {;
- outtextxy(320,124-gd,"Spread 2");
- outtextxy(320,125+gd,"Spread 2");
- if ((gd==5) && (gm==0)) wait=2345;
- if ((gd==6) && (gm==0)) wait=0;
- do {
- if (keypressed())
- {;
- while (keypressed()) pak=readkey();
- restorecrtmode();
- return;
- }
- if (wait>0) {; wait -= 1; delay(1); }
- } while (!(wait==0));
- }
- }
- } while (!false);
-}
-
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- titles();
- setup();
- do {
- status();
- r=upcase(readkey());
- switch (r) {
- case 'A': editadx(); break;
- case 'P': editpics(); break;
- case 'S': saveit(); break;
- case 'X':case '\33': quit(); break;
- }
- } while (!false);
-return EXIT_SUCCESS;
+static void drawup1() {
+ byte fv;
+ ;
+ setgraphmode(0);
+ directvideo = false;
+ settextjustify(1, 1);
+ nds = a.num / a.seq;
+ settextstyle(2, 0, 7);
+ outtextxy(320, 10, "Edit pictures...");
+ outtextxy(320, 40, "(Usually, 1=away, 2=right, 3=towards, 4=left.)");
+ for (fv = 1; fv <= nds; fv ++) {
+ ;
+ explode((fv - 1)*a.seq);
+ plotat(fv * 73, 100);
+ outtextxy(17 + fv * 73, 87, chr(fv + 48));
+ }
+ outtextxy(320, 60, string("There are ") + strf(nds) + " strides available.");
+ outtextxy(320, 177, "Which do you want?");
+}
+
+void editpics() {
+ char r;
+ byte which;
+ integer e;
+ ;
+ drawup1();
+ do {
+ r = readkey();
+ if ((r > '0') && (r <= chr(nds + 48))) {
+ ;
+ editstride(ord(r) - 48);
+ drawup1();
+ }
+ } while (!(r == '\33'));
+ restorecrtmode();
+}
+
+void titles() {
+ integer gd, gm;
+ char pak;
+ word wait;
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ settextstyle(5, 0, 10);
+ settextjustify(1, 1);
+ gm = getmaxy() / 2;
+ wait = 0;
+ do {
+ for (gm = 0; gm <= 15; gm ++) {
+ ;
+ setcolor(15 - gm);
+ for (gd = 0; gd <= (150 - gm * 10); gd ++) {
+ ;
+ outtextxy(320, 124 - gd, "Spread 2");
+ outtextxy(320, 125 + gd, "Spread 2");
+ if ((gd == 5) && (gm == 0)) wait = 2345;
+ if ((gd == 6) && (gm == 0)) wait = 0;
+ do {
+ if (keypressed()) {
+ ;
+ while (keypressed()) pak = readkey();
+ restorecrtmode();
+ return;
+ }
+ if (wait > 0) {
+ ;
+ wait -= 1;
+ delay(1);
+ }
+ } while (!(wait == 0));
+ }
+ }
+ } while (!false);
+}
+
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ titles();
+ setup();
+ do {
+ status();
+ r = upcase(readkey());
+ switch (r) {
+ case 'A':
+ editadx();
+ break;
+ case 'P':
+ editpics();
+ break;
+ case 'S':
+ saveit();
+ break;
+ case 'X':
+ case '\33':
+ quit();
+ break;
+ }
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/squish.cpp b/engines/avalanche/squish.cpp
index 231aae2168..fc49a5e7f1 100644
--- a/engines/avalanche/squish.cpp
+++ b/engines/avalanche/squish.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -44,12 +44,12 @@ const integer empty = -3 /* Indicates empty */;
typedef varying_string<255> anystr/* General string type */;
- /* One node in parsing table. */
+/* One node in parsing table. */
struct string_table_entry {
- boolean used /* Is this node used yet? */;
- integer prevchar /* Code for preceding string */;
- integer follchar /* Code for current character */;
- integer next /* Next dupl in collision list */;
+ boolean used /* Is this node used yet? */;
+ integer prevchar /* Code for preceding string */;
+ integer follchar /* Code for current character */;
+ integer next /* Next dupl in collision list */;
};
untyped_file input_file /* Input file */;
@@ -57,15 +57,15 @@ untyped_file output_file /* Output file */;
integer inbufsize /* Count of chars in input buffer */;
-array<1,maxbuff,byte> input_buffer /* Input buffer area */;
-array<1,maxbuff,byte> output_buffer /* Output buffer area */;
+array<1, maxbuff, byte> input_buffer /* Input buffer area */;
+array<1, maxbuff, byte> output_buffer /* Output buffer area */;
integer input_pos /* Cur. pos. in input buffer */;
integer output_pos /* Cur. pos. in output buffer */;
- /* String table */
+/* String table */
-array<0,maxtab,string_table_entry> string_table;
+array<0, maxtab, string_table_entry> string_table;
integer table_used /* # string table entries used */;
integer output_code /* Output compressed code */;
@@ -73,25 +73,28 @@ integer input_code /* Input compressed code */;
boolean if_compressing /* TRUE if compressing file */;
integer ierr /* Input/output error */;
-string header; varying_string<30> describe; byte method;
+string header;
+varying_string<30> describe;
+byte method;
void terminate()
-{ /* Terminate */
- /* Write any remaining characters */
- /* to output file. */
- if ( output_pos > 0 )
- blockwrite( output_file, output_buffer, output_pos );
+{
+ /* Terminate */
+ /* Write any remaining characters */
+ /* to output file. */
+ if (output_pos > 0)
+ blockwrite(output_file, output_buffer, output_pos);
- ierr = ioresult;
- /* Close input and output files */
- close( input_file );
- ierr = ioresult;
+ ierr = ioresult;
+ /* Close input and output files */
+ close(input_file);
+ ierr = ioresult;
- close( output_file );
- ierr = ioresult;
+ close(output_file);
+ ierr = ioresult;
- output << "done." << NL;
+ output << "done." << NL;
} /* Terminate */
@@ -99,90 +102,90 @@ void terminate()
/* Get_Hash_Code --- Gets hash code for given <w>C string */
/*--------------------------------------------------------------------------*/
-integer get_hash_code( integer prevc, integer follc )
+integer get_hash_code(integer prevc, integer follc)
{
- integer index;
- integer index2;
+ integer index;
+ integer index2;
- /* Get_Hash_Code */
- /* Get initial index using hashing */
+ /* Get_Hash_Code */
+ /* Get initial index using hashing */
- integer get_hash_code_result;
- index = ( ( prevc << 5 ) ^ follc ) & maxtab;
+ integer get_hash_code_result;
+ index = ((prevc << 5) ^ follc) & maxtab;
- /* If entry not already used, return */
- /* its index as hash code for <w>C. */
+ /* If entry not already used, return */
+ /* its index as hash code for <w>C. */
- if ( ! string_table[index].used )
- get_hash_code_result = index;
- else
- /* If entry already used, search to */
- /* end of list of hash collision */
- /* entries for this hash code. */
- /* Do linear probe to find an */
- /* available slot. */
- {
+ if (! string_table[index].used)
+ get_hash_code_result = index;
+ else
+ /* If entry already used, search to */
+ /* end of list of hash collision */
+ /* entries for this hash code. */
+ /* Do linear probe to find an */
+ /* available slot. */
+ {
- /* Skip to end of collision list ... */
+ /* Skip to end of collision list ... */
- while ( string_table[index].next != end_list )
- index = string_table[index].next;
+ while (string_table[index].next != end_list)
+ index = string_table[index].next;
- /* Begin linear probe down a bit from */
- /* last entry in collision list ... */
+ /* Begin linear probe down a bit from */
+ /* last entry in collision list ... */
- index2 = ( index + 101 ) & maxtab;
+ index2 = (index + 101) & maxtab;
- /* Look for unused entry using linear */
- /* probing ... */
+ /* Look for unused entry using linear */
+ /* probing ... */
- while ( string_table[index2].used )
- index2 = succ(integer, index2 ) & maxtab;
+ while (string_table[index2].used)
+ index2 = succ(integer, index2) & maxtab;
- /* Point prior end of collision list */
- /* to this new node. */
+ /* Point prior end of collision list */
+ /* to this new node. */
- string_table[index].next = index2;
+ string_table[index].next = index2;
- /* Return hash code for <w>C */
+ /* Return hash code for <w>C */
- get_hash_code_result = index2;
+ get_hash_code_result = index2;
- }
+ }
- return get_hash_code_result;
+ return get_hash_code_result;
} /* Get_Hash_Code */
/*--------------------------------------------------------------------------*/
/* Make_Table_Entry --- Enter <w>C string in string table */
/*--------------------------------------------------------------------------*/
-void make_table_entry( integer prevc, integer follc )
-
-{ /* Make_Table_Entry */
- /* Only enter string if there is room left */
-
- if ( table_used <= maxtab )
- {
- {
- string_table_entry& with = string_table[ get_hash_code( prevc , follc ) ];
+void make_table_entry(integer prevc, integer follc)
- with.used = true;
- with.next = end_list;
- with.prevchar = prevc;
- with.follchar = follc;
- }
- /* Increment count of items used */
-
- table_used += 1;
-/*
- IF ( Table_Used > ( MaxTab + 1 ) ) THEN
- BEGIN
- WRITELN('Hash table full.');
- END;
-*/
- }
+{
+ /* Make_Table_Entry */
+ /* Only enter string if there is room left */
+
+ if (table_used <= maxtab) {
+ {
+ string_table_entry &with = string_table[ get_hash_code(prevc , follc) ];
+
+ with.used = true;
+ with.next = end_list;
+ with.prevchar = prevc;
+ with.follchar = follc;
+ }
+ /* Increment count of items used */
+
+ table_used += 1;
+ /*
+ IF ( Table_Used > ( MaxTab + 1 ) ) THEN
+ BEGIN
+ WRITELN('Hash table full.');
+ END;
+ */
+ }
} /* Make_Table_Entry */
@@ -193,26 +196,25 @@ void make_table_entry( integer prevc, integer follc )
void initialize_string_table()
{
- integer i;
-
- /* Initialize_String_Table */
-
- /* No entries used in table yet */
- table_used = 0;
- /* Clear all table entries */
- for( i = 0; i <= maxtab; i ++)
- {
- string_table_entry& with = string_table[i];
-
- with.prevchar = no_prev;
- with.follchar = no_prev;
- with.next = -1;
- with.used = false;
- }
- /* Enter all single characters into */
- /* table */
- for( i = 0; i <= 255; i ++)
- make_table_entry( no_prev , i );
+ integer i;
+
+ /* Initialize_String_Table */
+
+ /* No entries used in table yet */
+ table_used = 0;
+ /* Clear all table entries */
+ for (i = 0; i <= maxtab; i ++) {
+ string_table_entry &with = string_table[i];
+
+ with.prevchar = no_prev;
+ with.follchar = no_prev;
+ with.next = -1;
+ with.used = false;
+ }
+ /* Enter all single characters into */
+ /* table */
+ for (i = 0; i <= 255; i ++)
+ make_table_entry(no_prev , i);
} /* Initialize_String_Table */
@@ -223,60 +225,61 @@ void initialize_string_table()
void initialize()
{
- anystr input_name /* Input file name */;
- anystr output_name /* Output file name */;
-
- /* Initialize */
-
- output << "Number of file to compress:"; input >> input_name >> NL;
- output << "For the moment, I'm writing the compressed version to v:compr" <<
- input_name << ".avd." << NL;
- output_name=string("d:compr")+input_name+".avd";
- input_name=string("d:place")+input_name+".avd";
-
- output << "Wait... ";
-
- /* Open input file */
-
- assign ( input_file , input_name );
- reset ( input_file , 1 );
- ierr = ioresult;
-
- blockread(input_file,header,146);
- blockread(input_file,describe,30);
- blockread(input_file,method,1);
-
- if (method==177)
- {;
- output << "It's already compressed!" << NL;
- exit(177);
- }
-
- /* Open output file */
-
- assign ( output_file , output_name );
- rewrite( output_file , 1 );
- ierr = ioresult;
-
- method=177;
-
- blockwrite(output_file,header,146);
- blockwrite(output_file,describe,30);
- blockwrite(output_file,method,1);
-
- /* Point input point past end of */
- /* buffer to force initial read */
- input_pos = maxbuff + 1;
- /* Nothing written out yet */
- output_pos = 0;
- /* Nothing read in yet */
- inbufsize = 0;
- /* No input or output codes yet */
- /* constructed */
- output_code = empty;
- input_code = empty;
- /* Initialize string hash table */
- initialize_string_table();
+ anystr input_name /* Input file name */;
+ anystr output_name /* Output file name */;
+
+ /* Initialize */
+
+ output << "Number of file to compress:";
+ input >> input_name >> NL;
+ output << "For the moment, I'm writing the compressed version to v:compr" <<
+ input_name << ".avd." << NL;
+ output_name = string("d:compr") + input_name + ".avd";
+ input_name = string("d:place") + input_name + ".avd";
+
+ output << "Wait... ";
+
+ /* Open input file */
+
+ assign(input_file , input_name);
+ reset(input_file , 1);
+ ierr = ioresult;
+
+ blockread(input_file, header, 146);
+ blockread(input_file, describe, 30);
+ blockread(input_file, method, 1);
+
+ if (method == 177) {
+ ;
+ output << "It's already compressed!" << NL;
+ exit(177);
+ }
+
+ /* Open output file */
+
+ assign(output_file , output_name);
+ rewrite(output_file , 1);
+ ierr = ioresult;
+
+ method = 177;
+
+ blockwrite(output_file, header, 146);
+ blockwrite(output_file, describe, 30);
+ blockwrite(output_file, method, 1);
+
+ /* Point input point past end of */
+ /* buffer to force initial read */
+ input_pos = maxbuff + 1;
+ /* Nothing written out yet */
+ output_pos = 0;
+ /* Nothing read in yet */
+ inbufsize = 0;
+ /* No input or output codes yet */
+ /* constructed */
+ output_code = empty;
+ input_code = empty;
+ /* Initialize string hash table */
+ initialize_string_table();
} /* Initialize */
@@ -284,66 +287,66 @@ void initialize()
/* Lookup_String --- Look for string <w>C in string table */
/*--------------------------------------------------------------------------*/
-integer lookup_string( integer prevc, integer follc )
+integer lookup_string(integer prevc, integer follc)
{
- integer index;
- integer index2;
- boolean found;
+ integer index;
+ integer index2;
+ boolean found;
- /* Lookup_String */
- /* Initialize index to check from hash */
+ /* Lookup_String */
+ /* Initialize index to check from hash */
- integer lookup_string_result;
- index = ( ( prevc << 5 ) ^ follc ) & maxtab;
+ integer lookup_string_result;
+ index = ((prevc << 5) ^ follc) & maxtab;
- /* Assume we won't find string */
- lookup_string_result = end_list;
- /* Search through list of hash collision */
- /* entries for one that matches <w>C */
- do {
+ /* Assume we won't find string */
+ lookup_string_result = end_list;
+ /* Search through list of hash collision */
+ /* entries for one that matches <w>C */
+ do {
- found = ( string_table[index].prevchar == prevc ) &&
- ( string_table[index].follchar == follc );
+ found = (string_table[index].prevchar == prevc) &&
+ (string_table[index].follchar == follc);
- if ( ! found )
- index = string_table[index].next;
+ if (! found)
+ index = string_table[index].next;
- } while (!(found || ( index == end_list )));
+ } while (!(found || (index == end_list)));
- /* Return index if <w>C found in table. */
- if (found)
- lookup_string_result = index;
+ /* Return index if <w>C found in table. */
+ if (found)
+ lookup_string_result = index;
- return lookup_string_result;
+ return lookup_string_result;
} /* Lookup_String */
/*--------------------------------------------------------------------------*/
/* Get_Char --- Read character from input file */
/*--------------------------------------------------------------------------*/
-void get_char( integer& c )
-
-{ /* Get_Char */
- /* Point to next character in buffer */
- input_pos += 1;
- /* If past end of block read in, then */
- /* reset input pointer and read in */
- /* next block. */
-
- if ( input_pos > inbufsize )
- {
- blockread( input_file, input_buffer, maxbuff, inbufsize );
- input_pos = 1;
- ierr = ioresult;
- }
- /* If end of file hit, return EOF_Char */
- /* otherwise return next character in */
- /* input buffer. */
- if ( inbufsize == 0 )
- c = eof_char;
- else
- c = input_buffer[input_pos];
+void get_char(integer &c)
+
+{
+ /* Get_Char */
+ /* Point to next character in buffer */
+ input_pos += 1;
+ /* If past end of block read in, then */
+ /* reset input pointer and read in */
+ /* next block. */
+
+ if (input_pos > inbufsize) {
+ blockread(input_file, input_buffer, maxbuff, inbufsize);
+ input_pos = 1;
+ ierr = ioresult;
+ }
+ /* If end of file hit, return EOF_Char */
+ /* otherwise return next character in */
+ /* input buffer. */
+ if (inbufsize == 0)
+ c = eof_char;
+ else
+ c = input_buffer[input_pos];
} /* Get_Char */
@@ -351,23 +354,23 @@ void get_char( integer& c )
/* Write_Char --- Write character to output file */
/*--------------------------------------------------------------------------*/
-void put_char( integer c )
+void put_char(integer c)
-{ /* Put_Char */
- /* If buffer full, write it out and */
- /* reset output buffer pointer. */
+{
+ /* Put_Char */
+ /* If buffer full, write it out and */
+ /* reset output buffer pointer. */
- if ( output_pos >= maxbuff )
- {
- blockwrite( output_file, output_buffer, maxbuff );
- output_pos = 0;
- ierr = ioresult;
- }
- /* Place character in next slot in */
- /* output buffer. */
+ if (output_pos >= maxbuff) {
+ blockwrite(output_file, output_buffer, maxbuff);
+ output_pos = 0;
+ ierr = ioresult;
+ }
+ /* Place character in next slot in */
+ /* output buffer. */
- output_pos += 1;
- output_buffer[output_pos] = c;
+ output_pos += 1;
+ output_buffer[output_pos] = c;
} /* Put_Char */
@@ -375,31 +378,30 @@ void put_char( integer c )
/* Put_Code --- Write hash code to output file. */
/*--------------------------------------------------------------------------*/
-void put_code( integer hash_code )
-
-{ /* Put_Code */
- /* Output code word is empty. */
- /* Put out 1st 8 bits of compression */
- /* code and save last 4 bit for next */
- /* time through. */
-
- if ( output_code == empty )
- {
- put_char( ( (cardinal)hash_code >> 4 ) & 0xff );
- output_code = hash_code & 0xf;
- }
- else
- /* Output code word not empty. */
- /* Put out last 4 bits of previous */
- /* code appended to 1st 4 bits of this */
- /* code. Then put out last 8 bits of */
- /* this code. */
- {
- put_char( ( ( output_code << 4 ) & 0xff0 ) +
- ( ( (cardinal)hash_code >> 8 ) & 0xf ) );
- put_char( hash_code & 0xff );
- output_code = empty;
- }
+void put_code(integer hash_code)
+
+{
+ /* Put_Code */
+ /* Output code word is empty. */
+ /* Put out 1st 8 bits of compression */
+ /* code and save last 4 bit for next */
+ /* time through. */
+
+ if (output_code == empty) {
+ put_char(((cardinal)hash_code >> 4) & 0xff);
+ output_code = hash_code & 0xf;
+ } else
+ /* Output code word not empty. */
+ /* Put out last 4 bits of previous */
+ /* code appended to 1st 4 bits of this */
+ /* code. Then put out last 8 bits of */
+ /* this code. */
+ {
+ put_char(((output_code << 4) & 0xff0) +
+ (((cardinal)hash_code >> 8) & 0xf));
+ put_char(hash_code & 0xff);
+ output_code = empty;
+ }
} /* Put_Code */
@@ -410,53 +412,50 @@ void put_code( integer hash_code )
void do_compression()
{
- integer c /* Current input character = C */;
- integer wc /* Hash code value for <w>C */;
- integer w /* Hash code value for <w> */;
+ integer c /* Current input character = C */;
+ integer wc /* Hash code value for <w>C */;
+ integer w /* Hash code value for <w> */;
- /* Do_Compression */
- /* Read first character ==> Step 2 */
- get_char( c );
- /* Initial hash code -- first character */
- /* has no previous string (<w> is null) */
+ /* Do_Compression */
+ /* Read first character ==> Step 2 */
+ get_char(c);
+ /* Initial hash code -- first character */
+ /* has no previous string (<w> is null) */
- w = lookup_string( no_prev , c );
+ w = lookup_string(no_prev , c);
- /* Get next character ==> Step 3 */
- get_char( c );
- /* Loop over input characters until */
- /* end of file reached ==> Step 4. */
- while( c != eof_char )
- {
- /* See if <w>C is in table. */
+ /* Get next character ==> Step 3 */
+ get_char(c);
+ /* Loop over input characters until */
+ /* end of file reached ==> Step 4. */
+ while (c != eof_char) {
+ /* See if <w>C is in table. */
- wc = lookup_string( w , c );
+ wc = lookup_string(w , c);
- /* If <w>C is not in the table, */
- /* enter it into the table and */
- /* output <w>. Reset <w> to */
- /* be the code for C ==> Step 6 */
+ /* If <w>C is not in the table, */
+ /* enter it into the table and */
+ /* output <w>. Reset <w> to */
+ /* be the code for C ==> Step 6 */
- if ( wc == end_list )
- {
+ if (wc == end_list) {
- make_table_entry( w , c );
- put_code( w );
- w = lookup_string( no_prev , c );
+ make_table_entry(w , c);
+ put_code(w);
+ w = lookup_string(no_prev , c);
- }
- else /* If <w>C is in table, keep looking */
- /* for longer strings == Step 5 */
+ } else /* If <w>C is in table, keep looking */
+ /* for longer strings == Step 5 */
- w = wc;
+ w = wc;
- /* Get next input character ==> Step 3 */
- get_char( c );
+ /* Get next input character ==> Step 3 */
+ get_char(c);
- }
- /* Make sure last code is */
- /* written out ==> Step 4. */
- put_code( w );
+ }
+ /* Make sure last code is */
+ /* written out ==> Step 4. */
+ put_code(w);
} /* Do_Compression */
@@ -464,19 +463,19 @@ void do_compression()
/* PibCompr --- Main program */
/*--------------------------------------------------------------------------*/
-int main(int argc, const char* argv[])
-{ /* PibCompr */
- /* We are doing compression */
- pio_initialize(argc, argv);
- if_compressing = true;
- /* Initialize compression */
- initialize();
- /* Perform compression */
- do_compression();
- /* Clean up and exit */
- terminate();
-
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ /* PibCompr */
+ /* We are doing compression */
+ pio_initialize(argc, argv);
+ if_compressing = true;
+ /* Initialize compression */
+ initialize();
+ /* Perform compression */
+ do_compression();
+ /* Clean up and exit */
+ terminate();
+
+ return EXIT_SUCCESS;
} /* PibCompr */
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/ss_blank.cpp b/engines/avalanche/ss_blank.cpp
index 907c09f91c..04f0da9e6b 100644
--- a/engines/avalanche/ss_blank.cpp
+++ b/engines/avalanche/ss_blank.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,34 +33,40 @@ namespace Avalanche {
byte fv;
boolean test;
-boolean the_cows_come_home()
-{
- registers rmove,rclick;
-boolean the_cows_come_home_result;
-;
- rmove.ax=11; intr(0x33,rmove);
- rclick.ax=3; intr(0x33,rclick);
- the_cows_come_home_result=
- (keypressed()) | /* key pressed */
- (rmove.cx>0) || /* mouse moved */
- (rmove.dx>0) ||
- (rclick.bx>0); /* button clicked */
-return the_cows_come_home_result;
+boolean the_cows_come_home() {
+ registers rmove, rclick;
+ boolean the_cows_come_home_result;
+ ;
+ rmove.ax = 11;
+ intr(0x33, rmove);
+ rclick.ax = 3;
+ intr(0x33, rclick);
+ the_cows_come_home_result =
+ (keypressed()) | /* key pressed */
+ (rmove.cx > 0) || /* mouse moved */
+ (rmove.dx > 0) ||
+ (rclick.bx > 0); /* button clicked */
+ return the_cows_come_home_result;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- test=the_cows_come_home();
- textattr=0; clrscr;
- do {; } while (!the_cows_come_home());
- textattr=30; clrscr;
- output << "*** Blank Screen *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL;
- for( fv=1; fv <= 46; fv ++) output << '~'; output << NL;
- output << "This program may be freely copied." << NL;
- output << NL;
- output << "Have fun!" << NL;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ test = the_cows_come_home();
+ textattr = 0;
+ clrscr;
+ do {
+ ;
+ } while (!the_cows_come_home());
+ textattr = 30;
+ clrscr;
+ output << "*** Blank Screen *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL;
+ for (fv = 1; fv <= 46; fv ++) output << '~';
+ output << NL;
+ output << "This program may be freely copied." << NL;
+ output << NL;
+ output << "Have fun!" << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/ss_clock.cpp b/engines/avalanche/ss_clock.cpp
index b73576506b..aa74b806ed 100644
--- a/engines/avalanche/ss_clock.cpp
+++ b/engines/avalanche/ss_clock.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -35,77 +35,100 @@ namespace Avalanche {
const integer width = 88;
const integer height = 8; /* width & height of string returned by "time" */
-integer gd,gm;
-integer xx,yy;
-shortint ix,iy;
+integer gd, gm;
+integer xx, yy;
+shortint ix, iy;
byte cp;
byte count;
-array<0,1,pointtype> pages;
+array<0, 1, pointtype> pages;
boolean test;
-boolean the_cows_come_home()
-{
- registers rmove,rclick;
-boolean the_cows_come_home_result;
-;
- rmove.ax=11; intr(0x33,rmove);
- rclick.ax=3; intr(0x33,rclick);
- the_cows_come_home_result=
- (keypressed()) || /* key pressed */
- (rmove.cx>0) || /* mouse moved */
- (rmove.dx>0) ||
- (rclick.bx>0); /* button clicked */
-return the_cows_come_home_result;
+boolean the_cows_come_home() {
+ registers rmove, rclick;
+ boolean the_cows_come_home_result;
+ ;
+ rmove.ax = 11;
+ intr(0x33, rmove);
+ rclick.ax = 3;
+ intr(0x33, rclick);
+ the_cows_come_home_result =
+ (keypressed()) || /* key pressed */
+ (rmove.cx > 0) || /* mouse moved */
+ (rmove.dx > 0) ||
+ (rclick.bx > 0); /* button clicked */
+ return the_cows_come_home_result;
}
-string time1()
-{
- word h,m,s,s1; varying_string<2> hh,mm,ss; char ampm;
-string time1_result;
-;
- gettime(h,m,s,s1);
- if (h<12)
- ampm='a';
- else {;
- ampm='p';
- if (h==0) h=12; else h -= 12; /* 24-hr adjustment */
- }
- str(h,2,hh); str(m,2,mm); str(s,2,ss); /* stringify them */
- time1_result=hh+'.'+mm+'.'+ss+' '+ampm+'m';
-return time1_result;
+string time1() {
+ word h, m, s, s1;
+ varying_string<2> hh, mm, ss;
+ char ampm;
+ string time1_result;
+ ;
+ gettime(h, m, s, s1);
+ if (h < 12)
+ ampm = 'a';
+ else {
+ ;
+ ampm = 'p';
+ if (h == 0) h = 12;
+ else h -= 12; /* 24-hr adjustment */
+ }
+ str(h, 2, hh);
+ str(m, 2, mm);
+ str(s, 2, ss); /* stringify them */
+ time1_result = hh + '.' + mm + '.' + ss + ' ' + ampm + 'm';
+ return time1_result;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- test=the_cows_come_home();
- gm=registerbgidriver(&egavgadriverproc);
- gd=3; gm=1; initgraph(gd,gm,"");
- ix=3; iy=1; xx=177; yy=177; setcolor(11); cp=0;
- setfillstyle(1,0); count=2;
- do {
- setactivepage(cp); setvisualpage(1-cp); cp=1-cp;
- delay(20); if (count>0) count -= 1;
- {
- pointtype& with = pages[cp];
- ;
- if (count==0)
- bar(with.x,with.y,with.x+width,with.y+height);
- with.x=xx; with.y=yy; /* update record for next time */
- }
- outtextxy(xx,yy,time1());
- xx=xx+ix; yy=yy+iy;
- if (xx<= 10) ix=Random(9)+1; if (xx>=629-width) ix=-Random(9)+1;
- if (yy<= 10) iy=Random(9)+1; if (yy>=339-height) iy=-Random(9)+1;
- } while (!the_cows_come_home());
- closegraph();
- textattr=30; clrscr;
- output << "*** Bouncing Clock *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL;
- for( gd=1; gd <= 48; gd ++) output << '~'; output << NL;
- output << "This program may be freely copied." << NL;
- output << NL;
- output << "Have fun!" << NL;
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ test = the_cows_come_home();
+ gm = registerbgidriver(&egavgadriverproc);
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ ix = 3;
+ iy = 1;
+ xx = 177;
+ yy = 177;
+ setcolor(11);
+ cp = 0;
+ setfillstyle(1, 0);
+ count = 2;
+ do {
+ setactivepage(cp);
+ setvisualpage(1 - cp);
+ cp = 1 - cp;
+ delay(20);
+ if (count > 0) count -= 1;
+ {
+ pointtype &with = pages[cp];
+ ;
+ if (count == 0)
+ bar(with.x, with.y, with.x + width, with.y + height);
+ with.x = xx;
+ with.y = yy; /* update record for next time */
+ }
+ outtextxy(xx, yy, time1());
+ xx = xx + ix;
+ yy = yy + iy;
+ if (xx <= 10) ix = Random(9) + 1;
+ if (xx >= 629 - width) ix = -Random(9) + 1;
+ if (yy <= 10) iy = Random(9) + 1;
+ if (yy >= 339 - height) iy = -Random(9) + 1;
+ } while (!the_cows_come_home());
+ closegraph();
+ textattr = 30;
+ clrscr;
+ output << "*** Bouncing Clock *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL;
+ for (gd = 1; gd <= 48; gd ++) output << '~';
+ output << NL;
+ output << "This program may be freely copied." << NL;
+ output << NL;
+ output << "Have fun!" << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/stars.cpp b/engines/avalanche/stars.cpp
index aaeada2a36..83490de6d5 100644
--- a/engines/avalanche/stars.cpp
+++ b/engines/avalanche/stars.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,21 +34,22 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
-typedef matrix<'\0','\377',0,15,byte> fonttype;
+typedef matrix < '\0', '\377', 0, 15, byte > fonttype;
boolean reverse;
word spinnum;
-array<0,1,fonttype> f;
+array<0, 1, fonttype> f;
file<fonttype> ff;
-array<0,7,0,15,0,79,byte> strip;
+array<0, 7, 0, 15, 0, 79, byte> strip;
byte across;
-word w; byte y;
+word w;
+byte y;
byte charnum;
byte cfont; /* current font. 0=roman, 1=italic. */
-char* c;
+char *c;
boolean nomusic;
@@ -56,309 +57,328 @@ const integer colours = 12; /* Run Workout to see possible values of these two.
const integer steps = 6; /* 60,30,20,15,12,10,6,5,4,3,2,1 */
const integer gmtop = 360 / steps;
- const integer scardcount = 13;
-
- const array<0,scardcount-1,integer> soundcards =
- {{1,2,6,3,4,5,8,9,10,7,7,7,7}};
-
-/*$L credits.obj*/ extern void credits();
-
-void bigo2(string date)
-{
- integer gd,gm;
- byte c;
- palettetype p;
- untyped_file f; pointer pp; word s;
-
-
- getpalette(p);
- setvisualpage(1); setactivepage(0);
- assign(f,"logo.avd"); reset(f,1);
- for( gd=7; gd <= 194; gd ++)
- blockread(f,mem[0xa000*(gd*80)],53);
- close(f);
- s=imagesize(0,7,415,194); getmem(pp,s); getimage(0,7,415,194,pp);
-
- cleardevice();
- for( gd=1; gd <= 64; gd ++)
- {
- for( gm=0; gm <= gmtop; gm ++)
- {
- c=(c % colours)+1;
-/* putpixel(trunc(sin(gm*steps*n)*gd*6)+320,
- trunc(cos(gm*steps*n)*gd*3)+175,c); */
- if (c>5) continue_;
- setcolor(c); arc(320,175,gm*steps,gm*steps+1,gd*6);
- }
- if (keypressed()) { closegraph(); exit(0); }
- }
- settextstyle(0,0,1); setcolor(13);
- outtextxy(550,343,"(press any key)");
-
- putimage(112,0,pp,orput); freemem(pp,s);
- resetmouse; setvisualpage(0);
+const integer scardcount = 13;
+
+const array < 0, scardcount - 1, integer > soundcards =
+{{1, 2, 6, 3, 4, 5, 8, 9, 10, 7, 7, 7, 7}};
+
+/*$L credits.obj*/ extern void credits();
+
+void bigo2(string date) {
+ integer gd, gm;
+ byte c;
+ palettetype p;
+ untyped_file f;
+ pointer pp;
+ word s;
+
+
+ getpalette(p);
+ setvisualpage(1);
+ setactivepage(0);
+ assign(f, "logo.avd");
+ reset(f, 1);
+ for (gd = 7; gd <= 194; gd ++)
+ blockread(f, mem[0xa000 * (gd * 80)], 53);
+ close(f);
+ s = imagesize(0, 7, 415, 194);
+ getmem(pp, s);
+ getimage(0, 7, 415, 194, pp);
+
+ cleardevice();
+ for (gd = 1; gd <= 64; gd ++) {
+ for (gm = 0; gm <= gmtop; gm ++) {
+ c = (c % colours) + 1;
+ /* putpixel(trunc(sin(gm*steps*n)*gd*6)+320,
+ trunc(cos(gm*steps*n)*gd*3)+175,c); */
+ if (c > 5) continue_;
+ setcolor(c);
+ arc(320, 175, gm * steps, gm * steps + 1, gd * 6);
+ }
+ if (keypressed()) {
+ closegraph();
+ exit(0);
+ }
+ }
+ settextstyle(0, 0, 1);
+ setcolor(13);
+ outtextxy(550, 343, "(press any key)");
+
+ putimage(112, 0, pp, orput);
+ freemem(pp, s);
+ resetmouse;
+ setvisualpage(0);
}
-void nextchar() /* Sets up charnum & cline for the next character. */
-{
+void nextchar() { /* Sets up charnum & cline for the next character. */
- c += 1;
+ c += 1;
}
-void getchar()
-{
- do {
- nextchar();
-
- switch (*c) {
- case '@': { cfont=1; nextchar(); } break;
- case '^': { cfont=0; nextchar(); } break;
- case '%': if (nomusic)
- {
- closegraph(); exit(0); /* End of text and no music => stop. */
- }
- else c=addr(credits());
- break; /* End of test, but still playing => again. */
- }
-
- } while (!((*c!='\15') && (*c!='\12')));
-
- for( w=0; w <= 7; w ++)
- for( y=0; y <= 15; y ++)
- move(strip[w][y][1],strip[w][y][0],79);
-
- for( w=0; w <= 7; w ++)
- for( y=0; y <= 15; y ++)
- strip[w][y][79]=(byte)((strip[7][y][78] << (w+1)))+
- ((cardinal)f[cfont][*c][y] >> (7-w));
-
- across=0;
+void getchar() {
+ do {
+ nextchar();
+
+ switch (*c) {
+ case '@': {
+ cfont = 1;
+ nextchar();
+ }
+ break;
+ case '^': {
+ cfont = 0;
+ nextchar();
+ }
+ break;
+ case '%':
+ if (nomusic) {
+ closegraph();
+ exit(0); /* End of text and no music => stop. */
+ } else c = addr(credits());
+ break; /* End of test, but still playing => again. */
+ }
+
+ } while (!((*c != '\15') && (*c != '\12')));
+
+ for (w = 0; w <= 7; w ++)
+ for (y = 0; y <= 15; y ++)
+ move(strip[w][y][1], strip[w][y][0], 79);
+
+ for (w = 0; w <= 7; w ++)
+ for (y = 0; y <= 15; y ++)
+ strip[w][y][79] = (byte)((strip[7][y][78] << (w + 1))) +
+ ((cardinal)f[cfont][*c][y] >> (7 - w));
+
+ across = 0;
}
-void scrolltext()
-{
- byte c,w,y;
+void scrolltext() {
+ byte c, w, y;
- across += 1;
- if (across==8) getchar();
+ across += 1;
+ if (across == 8) getchar();
- for( y=0; y <= 15; y ++)
- for( w=0; w <= 1; w ++)
- move(strip[across][y][0],mem[0xa000*24000+(y*2+w)*80],80);
+ for (y = 0; y <= 15; y ++)
+ for (w = 0; w <= 1; w ++)
+ move(strip[across][y][0], mem[0xa000 * 24000 + (y * 2 + w) * 80], 80);
}
-void do_stuff()
-{
- switch (spinnum) {
- case 50 ... 110: {
- setfillstyle(1,14);
- bar(0,315+(spinnum-50) / 3,640,315+(spinnum-50) / 3);
- bar(0,316-(spinnum-50) / 3,640,316-(spinnum-50) / 3);
- if (spinnum>56)
- {
- setfillstyle(1,13);
- bar(0,315+(spinnum-56) / 3,640,315+(spinnum-56) / 3);
- bar(0,316-(spinnum-56) / 3,640,316-(spinnum-56) / 3);
- }
- }
- break;
- case 150 ... 198: {
- setfillstyle(1,0);
- bar(0,315+(spinnum-150) / 3,640,315+(spinnum-150) / 3);
- bar(0,316-(spinnum-150) / 3,640,316-(spinnum-150) / 3);
- }
- break;
- case 200: scrolltext(); break;
- }
+void do_stuff() {
+ switch (spinnum) {
+ case 50 ... 110: {
+ setfillstyle(1, 14);
+ bar(0, 315 + (spinnum - 50) / 3, 640, 315 + (spinnum - 50) / 3);
+ bar(0, 316 - (spinnum - 50) / 3, 640, 316 - (spinnum - 50) / 3);
+ if (spinnum > 56) {
+ setfillstyle(1, 13);
+ bar(0, 315 + (spinnum - 56) / 3, 640, 315 + (spinnum - 56) / 3);
+ bar(0, 316 - (spinnum - 56) / 3, 640, 316 - (spinnum - 56) / 3);
+ }
+ }
+ break;
+ case 150 ... 198: {
+ setfillstyle(1, 0);
+ bar(0, 315 + (spinnum - 150) / 3, 640, 315 + (spinnum - 150) / 3);
+ bar(0, 316 - (spinnum - 150) / 3, 640, 316 - (spinnum - 150) / 3);
+ }
+ break;
+ case 200:
+ scrolltext();
+ break;
+ }
}
-void setcol(byte which,byte what)
+void setcol(byte which, byte what)
/*var dummy:byte;*/
-{;
-/* setpalette(which,what);
- asm
-(* mov dx,$3DA;
- in ax,dx;
-
- or ah,ah;
-
- mov dx,$3C0;
- mov al,which;
- out dx,al;
-
- mov dx,$3C0;
- mov al,what;
- out dx,al;
- end;
-(* dummy:=port[$3DA];
- port[$3C0]:=which; port[$3C0]:=what;*/
+{
+ ;
+ /* setpalette(which,what);
+ asm
+ (* mov dx,$3DA;
+ in ax,dx;
+
+ or ah,ah;
+
+ mov dx,$3C0;
+ mov al,which;
+ out dx,al;
+
+ mov dx,$3C0;
+ mov al,what;
+ out dx,al;
+ end;
+ (* dummy:=port[$3DA];
+ port[$3C0]:=which; port[$3C0]:=what;*/
}
-void bigo2go()
-{
- palettetype p; byte c; boolean lmo;
- boolean altnow,altbefore;
-
- for( gd=0; gd <= 13; gd ++) p.colors[gd]=0;
-
- setcol(13,24); /* murk */ setcol(14,38); /* gold */
- setcol(15,egawhite); /* white- of course */
- p.colors[13]=24; p.colors[14]=38; p.colors[15]=egawhite;
-
- /***/
-
- p.colors[5]=egawhite;
- p.colors[4]=egalightcyan;
- p.colors[3]=egacyan;
- p.colors[2]=egalightblue;
- p.colors[1]=egablue;
-
- /***/
-
- c=1; p.size=16; lmo=false;
- setallpalette(p);
-
- do {
-/* if reverse then
- begin
- dec(c); if c=0 then c:=colours;
- end else
- begin
- inc(c); if c>colours then c:=1;
- end;
- for gm:=1 to colours do
- case p.colors[gm] of
- egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end;
- egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end;
- egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end;
- egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end;
- egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end;
- end;
- p.colors[c]:=egaWhite; setcol(c,egaWhite);
-
- AltBefore:=AltNow; AltNow:=testkey(sAlt);*/
-
- if (anymousekeypressed) lmo=true;
- if (keypressed()) lmo=true;
- if ((! nomusic) && (ampgetmodulestatus != md_playing)) lmo=true;
-
- /* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/
-
- do_stuff();
- if (spinnum<200) spinnum += 1;
- } while (!lmo);
+void bigo2go() {
+ palettetype p;
+ byte c;
+ boolean lmo;
+ boolean altnow, altbefore;
+
+ for (gd = 0; gd <= 13; gd ++) p.colors[gd] = 0;
+
+ setcol(13, 24); /* murk */ setcol(14, 38); /* gold */
+ setcol(15, egawhite); /* white- of course */
+ p.colors[13] = 24;
+ p.colors[14] = 38;
+ p.colors[15] = egawhite;
+
+ /***/
+
+ p.colors[5] = egawhite;
+ p.colors[4] = egalightcyan;
+ p.colors[3] = egacyan;
+ p.colors[2] = egalightblue;
+ p.colors[1] = egablue;
+
+ /***/
+
+ c = 1;
+ p.size = 16;
+ lmo = false;
+ setallpalette(p);
+
+ do {
+ /* if reverse then
+ begin
+ dec(c); if c=0 then c:=colours;
+ end else
+ begin
+ inc(c); if c>colours then c:=1;
+ end;
+ for gm:=1 to colours do
+ case p.colors[gm] of
+ egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end;
+ egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end;
+ egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end;
+ egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end;
+ egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end;
+ end;
+ p.colors[c]:=egaWhite; setcol(c,egaWhite);
+
+ AltBefore:=AltNow; AltNow:=testkey(sAlt);*/
+
+ if (anymousekeypressed) lmo = true;
+ if (keypressed()) lmo = true;
+ if ((! nomusic) && (ampgetmodulestatus != md_playing)) lmo = true;
+
+ /* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/
+
+ do_stuff();
+ if (spinnum < 200) spinnum += 1;
+ } while (!lmo);
}
-void parse_cline()
-{
- integer e;
+void parse_cline() {
+ integer e;
- if (paramstr(1)!="jsb")
- {
- output << "Not a standalone program." << NL; exit(255);
- }
+ if (paramstr(1) != "jsb") {
+ output << "Not a standalone program." << NL;
+ exit(255);
+ }
}
-integer getsoundhardware(psoundcard scard)
-{
- integer sc,i,autosel,select;
- char ch;
- integer e;
+integer getsoundhardware(psoundcard scard) {
+ integer sc, i, autosel, select;
+ char ch;
+ integer e;
-integer getsoundhardware_result;
+ integer getsoundhardware_result;
Lagain:
- sc=detectgus(scard);
- if (sc!=0) sc=detectpas(scard);
- if (sc!=0) sc=detectaria(scard);
- if (sc!=0) sc=detectsb(scard);
-
- /* if no sound card found, zero scard */
- if (sc!=0) fillchar(scard,sizeof(tsoundcard),0);
-
- autosel=-1;
-/* if sc=0 then
- for i:=0 to scardcount-1 do
- if scard^.ID=soundcards[i].ID then begin
- { Set auto selection mark }
- autosel:=i+1;
- break;
- end;*/
-
- /* Print the list of sound cards */
-
- val(paramstr(13),select,e);
-
- /* Default entry? */
- if (select==0) select=autosel;
- if (select!=autosel) {
- /* clear all assumptions */
- sc=-1;
- fillchar(scard,sizeof(tsoundcard),0);
- scard->id=soundcards[select-1]; /* set correct ID */
- }
-
- /* Query I/O address */
- if (scard->id==id_dac) scard->ioport=0x378;
-
- /* Read user input */
- val(paramstr(15),i,e);
-
- if (i!=0) scard->ioport=i;
- if (sc!=1) /* Not autodetected */
- switch (scard->id) {
- case id_sb16:
- case id_pas16:
- case id_wss:
- case id_aria:
- case id_gus : scard->samplesize=2;
- break; /* 16-bit card */
- case id_sbpro:
- case id_pas:
- case id_pasplus: scard->stereo=true;
- break; /* enable stereo */
- default: {
- scard->samplesize=1;
- scard->stereo=false;
- }
- }
-
- if (scard->id!=id_dac) {
- val(paramstr(17),i,e);
-
- if (i!=0) scard->dmairq=i;
-
- val(paramstr(16),i,e);
-
- if (i!=0) scard->dmachannel=i;
- } else {
- /* Select correct DAC */
- scard->maxrate=44100;
- if (select==11) {
- scard->stereo=true;
- scard->dmachannel=1; /* Special 'mark' */
- scard->maxrate=60000;
- } else
- if (select==12) {
- scard->stereo=true;
- scard->dmachannel=2;
- scard->maxrate=60000;
- if (scard->ioport==0) scard->ioport=0x378;
- } else
- if (select==13) {
- scard->dmachannel=0;
- scard->ioport=0x42; /* Special 'mark' */
- scard->maxrate=44100;
- }
- }
-
-/* writeln('Your selection: ',select,' at ',scard^.ioPort,
- ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel);
- readln;*/
-
- getsoundhardware_result=0;
-return getsoundhardware_result;
+ sc = detectgus(scard);
+ if (sc != 0) sc = detectpas(scard);
+ if (sc != 0) sc = detectaria(scard);
+ if (sc != 0) sc = detectsb(scard);
+
+ /* if no sound card found, zero scard */
+ if (sc != 0) fillchar(scard, sizeof(tsoundcard), 0);
+
+ autosel = -1;
+ /* if sc=0 then
+ for i:=0 to scardcount-1 do
+ if scard^.ID=soundcards[i].ID then begin
+ { Set auto selection mark }
+ autosel:=i+1;
+ break;
+ end;*/
+
+ /* Print the list of sound cards */
+
+ val(paramstr(13), select, e);
+
+ /* Default entry? */
+ if (select == 0) select = autosel;
+ if (select != autosel) {
+ /* clear all assumptions */
+ sc = -1;
+ fillchar(scard, sizeof(tsoundcard), 0);
+ scard->id = soundcards[select - 1]; /* set correct ID */
+ }
+
+ /* Query I/O address */
+ if (scard->id == id_dac) scard->ioport = 0x378;
+
+ /* Read user input */
+ val(paramstr(15), i, e);
+
+ if (i != 0) scard->ioport = i;
+ if (sc != 1) /* Not autodetected */
+ switch (scard->id) {
+ case id_sb16:
+ case id_pas16:
+ case id_wss:
+ case id_aria:
+ case id_gus :
+ scard->samplesize = 2;
+ break; /* 16-bit card */
+ case id_sbpro:
+ case id_pas:
+ case id_pasplus:
+ scard->stereo = true;
+ break; /* enable stereo */
+ default: {
+ scard->samplesize = 1;
+ scard->stereo = false;
+ }
+ }
+
+ if (scard->id != id_dac) {
+ val(paramstr(17), i, e);
+
+ if (i != 0) scard->dmairq = i;
+
+ val(paramstr(16), i, e);
+
+ if (i != 0) scard->dmachannel = i;
+ } else {
+ /* Select correct DAC */
+ scard->maxrate = 44100;
+ if (select == 11) {
+ scard->stereo = true;
+ scard->dmachannel = 1; /* Special 'mark' */
+ scard->maxrate = 60000;
+ } else if (select == 12) {
+ scard->stereo = true;
+ scard->dmachannel = 2;
+ scard->maxrate = 60000;
+ if (scard->ioport == 0) scard->ioport = 0x378;
+ } else if (select == 13) {
+ scard->dmachannel = 0;
+ scard->ioport = 0x42; /* Special 'mark' */
+ scard->maxrate = 44100;
+ }
+ }
+
+ /* writeln('Your selection: ',select,' at ',scard^.ioPort,
+ ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel);
+ readln;*/
+
+ getsoundhardware_result = 0;
+ return getsoundhardware_result;
}
tsoundcard scard;
@@ -367,225 +387,241 @@ tdds dds;
pmodule module;
tsdi_init sdi;
integer e,
-bufsize;
+ bufsize;
char ch;
boolean v86,
-vdsok;
-longint a,rate,
-tempseg;
+ vdsok;
+longint a, rate,
+ tempseg;
string answer;
pointer temp;
word flags;
word curch;
byte modulevolume;
-array<0,4,tsampleinfo> sample;
-array<0,31,word> voltable;
-
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- parse_cline();
-
- nomusic=paramstr(13)=='0';
-
- if (! nomusic)
- {
- /* Read sound card information */
- if (getsoundhardware(&scard)==-1) exit(1);
-
-
- /* Initialize Timer Service */
- tsinit;
- atexit(&tsclose);
- if (scard.id==id_gus) {
- /* Initialize GUS player */
- #ifndef DPMI
- scard.extrafield[2]=1; /* GUS DMA transfer does not work in V86 */
- #endif
- gusinit(&scard);
- atexit(&gusclose);
-
- /* Initialize GUS heap manager */
- gushminit;
-
- /* Init CDI */
- cdiinit;
-
- /* Register GUS into CDI */
- cdiregister(&cdi_gus,0,31);
-
- /* Add GUS event player engine into Timer Service */
- tsaddroutine(&gusinterrupt,gus_timer);
- } else {
- /* Initialize Virtual DMA Specification */
- #ifndef DPMI
- vdsok=vdsinit==0;
- #else
- vdsok=false;
- #endif
-
- fillchar(mcpstrc,sizeof(tmcpstruct),0);
-
- /* Query for sampling rate */
- val(paramstr(14),a,e);
- if (a>4000) rate=a; else rate=21000;
-
- /* Query for quality */
- mcpstrc.options=mcp_quality;
-
- switch (scard.id) {
- case id_sb : {
- sdi=sdi_sb;
- scard.maxrate=22000;
- }
- break;
- case id_sbpro : {
- sdi=sdi_sbpro;
- scard.maxrate=22000;
- }
- break;
- case id_pas:
- case id_pasplus:
- case id_pas16 : {
- sdi=sdi_pas;
- scard.maxrate=44100;
- }
- break;
- case id_sb16 : {
- sdi=sdi_sb16;
- scard.maxrate=44100;
- }
- break;
- case id_aria : {
- sdi=sdi_aria;
- scard.maxrate=44100;
- }
- break;
- case id_wss : {
- sdi=sdi_wss;
- scard.maxrate=48000;
- }
- break;
- #ifndef DPMI
- case id_dac : sdi=sdi_dac; break; /* Only available in real mode */
- #endif
- }
-
- mcpinitsounddevice(sdi,&scard);
- a=mcp_tablesize;
- mcpstrc.reqsize=0;
-
- /* Calculate mixing buffer size */
- bufsize=(longint)(2800*(integer)(scard.samplesize) << (byte)(scard.stereo))*
- (longint)(rate) / (longint)(22000);
- mcpstrc.reqsize=0;
- if ((mcpstrc.options & mcp_quality)>0)
- if (scard.samplesize==1) a += mcp_qualitysize; else
- a=mcp_tablesize16+mcp_qualitysize16;
- if ((longint)(bufsize)+(longint)(a)>65500) bufsize=longint(65500)-a;
-
- #ifdef DPMI
- dpmiversion((byte)(e),(byte)(e),(byte)(e),flags);
- v86=(flags & 2)==0;
- #endif
-
- /* Allocate volume table + mixing buffer */
- #ifdef DPMI
-
- /* In the V86 mode, the buffer must be allocated below 1M */
- if (v86) {
- tempseg=0;
- dpmiallocdos((a+longint(bufsize)) / longint(16)+longint(1),flags,(word)(tempseg));
- } else {
- #endif
- getmem(temp,a+longint(bufsize));
- if (temp==nil) exit(2);
- #ifdef DPMI
- tempseg=seg(temp);
- }
- #else
- tempseg=seg(temp)+ofs(temp) / 16+1;
- #endif
- mcpstrc.bufferseg=tempseg;
- mcpstrc.bufferphysical=-1;
-
- if (vdsok && (scard.id!=id_dac)) {
- dds.size=bufsize;
- dds.segment=tempseg;
- dds.offset=0;
-
- /* Lock DMA buffer if VDS present */
- if (vdslockdma(&dds)==0) mcpstrc.bufferphysical=dds.address;
- }
- if (mcpstrc.bufferphysical==-1)
- #ifdef DPMI
- mcpstrc.bufferphysical=dpmigetlinearaddr(tempseg);
- #else
- mcpstrc.bufferphysical=(longint)(tempseg) << 4;
- #endif
-
- mcpstrc.buffersize=bufsize;
- mcpstrc.samplingrate=rate;
- /* Initialize Multi Channel Player */
- if (mcpinit(&mcpstrc)!=0) exit(3);
- atexit(&mcpclose);
-
- /* Initialize Channel Distributor */
- cdiinit;
-
- /* Register MCP into CDI*/
- cdiregister(&cdi_mcp,0,31);
- }
-
- /* Try to initialize AMP */
- if (ampinit(0)!=0) exit(3);
- atexit(&ampclose);
-
- /* Hook AMP player routine into Timer Service */
- tsaddroutine(&ampinterrupt,amp_timer);
-
- #ifndef DPMI
- /* If using DAC, then adjust DAC timer */
- if (scard.id==id_dac) setdactimer(tsgettimerrate);
- #endif
-
- if (scard.id!=id_gus) mcpstartvoice; else gusstartvoice;
-
- /* Load an example AMF */
- module=amploadmod("avalot2.mod",0);
- if (module==nil) exit(4);
-
- /* Is it MCP, Quality mode and 16-bit card? */
- if ((scard.id!=id_gus) && ((mcpstrc.options & mcp_quality)>0)
- && (scard.samplesize==2)) {
- /* Open module+2 channels with amplified volumetable (4.7 gain) */
- for( a=1; a <= 32; a ++) voltable[a-longint(1)]=a*longint(150) / longint(32);
- cdisetupchannels(0,module->channelcount+2,&voltable);
- } else {
- /* Open module+2 channels with regular volumetable */
- cdisetupchannels(0,module->channelcount+2,nil);
- }
-
- curch=module->channelcount;
- modulevolume=64;
-
- /***/ ampplaymodule(module,0);
- }
-
- gd=3; gm=1; initgraph(gd,gm,"");
- assign(ff,"avalot.fnt"); reset(ff); ff >> f[0]; close(ff);
- assign(ff,"avitalic.fnt"); reset(ff); ff >> f[1]; close(ff);
-
- c=addr(credits()); c -= 1;
-
- fillchar(strip,sizeof(strip),'\0');
- reverse=false; spinnum=0; across=7; charnum=1; cfont=0;
- bigo2("1189"); /* 1189? 79? 2345? 1967? */
- bigo2go();
-
- if (! nomusic) ampstopmodule;
- closegraph();
- return EXIT_SUCCESS;
+array<0, 4, tsampleinfo> sample;
+array<0, 31, word> voltable;
+
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ parse_cline();
+
+ nomusic = paramstr(13) == '0';
+
+ if (! nomusic) {
+ /* Read sound card information */
+ if (getsoundhardware(&scard) == -1) exit(1);
+
+
+ /* Initialize Timer Service */
+ tsinit;
+ atexit(&tsclose);
+ if (scard.id == id_gus) {
+ /* Initialize GUS player */
+#ifndef DPMI
+ scard.extrafield[2] = 1; /* GUS DMA transfer does not work in V86 */
+#endif
+ gusinit(&scard);
+ atexit(&gusclose);
+
+ /* Initialize GUS heap manager */
+ gushminit;
+
+ /* Init CDI */
+ cdiinit;
+
+ /* Register GUS into CDI */
+ cdiregister(&cdi_gus, 0, 31);
+
+ /* Add GUS event player engine into Timer Service */
+ tsaddroutine(&gusinterrupt, gus_timer);
+ } else {
+ /* Initialize Virtual DMA Specification */
+#ifndef DPMI
+ vdsok = vdsinit == 0;
+#else
+ vdsok = false;
+#endif
+
+ fillchar(mcpstrc, sizeof(tmcpstruct), 0);
+
+ /* Query for sampling rate */
+ val(paramstr(14), a, e);
+ if (a > 4000) rate = a;
+ else rate = 21000;
+
+ /* Query for quality */
+ mcpstrc.options = mcp_quality;
+
+ switch (scard.id) {
+ case id_sb : {
+ sdi = sdi_sb;
+ scard.maxrate = 22000;
+ }
+ break;
+ case id_sbpro : {
+ sdi = sdi_sbpro;
+ scard.maxrate = 22000;
+ }
+ break;
+ case id_pas:
+ case id_pasplus:
+ case id_pas16 : {
+ sdi = sdi_pas;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_sb16 : {
+ sdi = sdi_sb16;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_aria : {
+ sdi = sdi_aria;
+ scard.maxrate = 44100;
+ }
+ break;
+ case id_wss : {
+ sdi = sdi_wss;
+ scard.maxrate = 48000;
+ }
+ break;
+#ifndef DPMI
+ case id_dac :
+ sdi = sdi_dac;
+ break; /* Only available in real mode */
+#endif
+ }
+
+ mcpinitsounddevice(sdi, &scard);
+ a = mcp_tablesize;
+ mcpstrc.reqsize = 0;
+
+ /* Calculate mixing buffer size */
+ bufsize = (longint)(2800 * (integer)(scard.samplesize) << (byte)(scard.stereo)) *
+ (longint)(rate) / (longint)(22000);
+ mcpstrc.reqsize = 0;
+ if ((mcpstrc.options & mcp_quality) > 0)
+ if (scard.samplesize == 1) a += mcp_qualitysize;
+ else
+ a = mcp_tablesize16 + mcp_qualitysize16;
+ if ((longint)(bufsize) + (longint)(a) > 65500) bufsize = longint(65500) - a;
+
+#ifdef DPMI
+ dpmiversion((byte)(e), (byte)(e), (byte)(e), flags);
+ v86 = (flags & 2) == 0;
+#endif
+
+ /* Allocate volume table + mixing buffer */
+#ifdef DPMI
+
+ /* In the V86 mode, the buffer must be allocated below 1M */
+ if (v86) {
+ tempseg = 0;
+ dpmiallocdos((a + longint(bufsize)) / longint(16) + longint(1), flags, (word)(tempseg));
+ } else {
+#endif
+ getmem(temp, a + longint(bufsize));
+ if (temp == nil) exit(2);
+#ifdef DPMI
+ tempseg = seg(temp);
+ }
+#else
+ tempseg = seg(temp) + ofs(temp) / 16 + 1;
+#endif
+ mcpstrc.bufferseg = tempseg;
+ mcpstrc.bufferphysical = -1;
+
+ if (vdsok && (scard.id != id_dac)) {
+ dds.size = bufsize;
+ dds.segment = tempseg;
+ dds.offset = 0;
+
+ /* Lock DMA buffer if VDS present */
+ if (vdslockdma(&dds) == 0) mcpstrc.bufferphysical = dds.address;
+ }
+ if (mcpstrc.bufferphysical == -1)
+#ifdef DPMI
+ mcpstrc.bufferphysical = dpmigetlinearaddr(tempseg);
+#else
+ mcpstrc.bufferphysical = (longint)(tempseg) << 4;
+#endif
+
+ mcpstrc.buffersize = bufsize;
+ mcpstrc.samplingrate = rate;
+ /* Initialize Multi Channel Player */
+ if (mcpinit(&mcpstrc) != 0) exit(3);
+ atexit(&mcpclose);
+
+ /* Initialize Channel Distributor */
+ cdiinit;
+
+ /* Register MCP into CDI*/
+ cdiregister(&cdi_mcp, 0, 31);
+ }
+
+ /* Try to initialize AMP */
+ if (ampinit(0) != 0) exit(3);
+ atexit(&ampclose);
+
+ /* Hook AMP player routine into Timer Service */
+ tsaddroutine(&ampinterrupt, amp_timer);
+
+#ifndef DPMI
+ /* If using DAC, then adjust DAC timer */
+ if (scard.id == id_dac) setdactimer(tsgettimerrate);
+#endif
+
+ if (scard.id != id_gus) mcpstartvoice;
+ else gusstartvoice;
+
+ /* Load an example AMF */
+ module = amploadmod("avalot2.mod", 0);
+ if (module == nil) exit(4);
+
+ /* Is it MCP, Quality mode and 16-bit card? */
+ if ((scard.id != id_gus) && ((mcpstrc.options & mcp_quality) > 0)
+ && (scard.samplesize == 2)) {
+ /* Open module+2 channels with amplified volumetable (4.7 gain) */
+ for (a = 1; a <= 32; a ++) voltable[a - longint(1)] = a * longint(150) / longint(32);
+ cdisetupchannels(0, module->channelcount + 2, &voltable);
+ } else {
+ /* Open module+2 channels with regular volumetable */
+ cdisetupchannels(0, module->channelcount + 2, nil);
+ }
+
+ curch = module->channelcount;
+ modulevolume = 64;
+
+ /***/ ampplaymodule(module, 0);
+ }
+
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ assign(ff, "avalot.fnt");
+ reset(ff);
+ ff >> f[0];
+ close(ff);
+ assign(ff, "avitalic.fnt");
+ reset(ff);
+ ff >> f[1];
+ close(ff);
+
+ c = addr(credits());
+ c -= 1;
+
+ fillchar(strip, sizeof(strip), '\0');
+ reverse = false;
+ spinnum = 0;
+ across = 7;
+ charnum = 1;
+ cfont = 0;
+ bigo2("1189"); /* 1189? 79? 2345? 1967? */
+ bigo2go();
+
+ if (! nomusic) ampstopmodule;
+ closegraph();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/status.cpp b/engines/avalanche/status.cpp
index f9c5ddb75b..b4dd206c2a 100644
--- a/engines/avalanche/status.cpp
+++ b/engines/avalanche/status.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,34 +29,44 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
-void data(integer y, string a,string b)
-{;
- setcolor(1); settextjustify(2,0); outtextxy(315,y,a+':');
- setcolor(0); settextjustify(0,0); outtextxy(325,y,b);
+void data(integer y, string a, string b) {
+ ;
+ setcolor(1);
+ settextjustify(2, 0);
+ outtextxy(315, y, a + ':');
+ setcolor(0);
+ settextjustify(0, 0);
+ outtextxy(325, y, b);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\turbo");
- setcolor(1); setfillstyle(1,7); bar(0,0,640,200);
- settextstyle(1,0,0); setusercharsize(10,4,8,6); settextjustify(1,1);
- outtextxy(317,20,"Status Screen");
- settextstyle(0,0,1);
- data( 60,"Current game","NoName.ASG");
- data( 70,"Saved?","Yes");
- data( 90,"Current town","Thurringham");
- data(100,"Score","177");
- data(110,"Cash","1/-");
- data(130,"Game","Lord Avalot D'Argent");
- data(140,"Version","1.00 (beta)");
- data(150,"Registered to","Unregistered!");
- data(160,"Number","nix");
- data(177,"Bios/keyboard","AT (enhanced)"); /* or XT (bog standard) */
- data(187,"Display","VGA");
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\turbo");
+ setcolor(1);
+ setfillstyle(1, 7);
+ bar(0, 0, 640, 200);
+ settextstyle(1, 0, 0);
+ setusercharsize(10, 4, 8, 6);
+ settextjustify(1, 1);
+ outtextxy(317, 20, "Status Screen");
+ settextstyle(0, 0, 1);
+ data(60, "Current game", "NoName.ASG");
+ data(70, "Saved?", "Yes");
+ data(90, "Current town", "Thurringham");
+ data(100, "Score", "177");
+ data(110, "Cash", "1/-");
+ data(130, "Game", "Lord Avalot D'Argent");
+ data(140, "Version", "1.00 (beta)");
+ data(150, "Registered to", "Unregistered!");
+ data(160, "Number", "nix");
+ data(177, "Bios/keyboard", "AT (enhanced)"); /* or XT (bog standard) */
+ data(187, "Display", "VGA");
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sticks.cpp b/engines/avalanche/sticks.cpp
index 840ca27ab7..97b60f74f6 100644
--- a/engines/avalanche/sticks.cpp
+++ b/engines/avalanche/sticks.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -39,80 +39,110 @@
namespace Avalanche {
-enum lmc {l,m,r, last_lmc}; /* Left, middle & right */
+enum lmc {l, m, r, last_lmc}; /* Left, middle & right */
file<joysetup> jf;
byte joyway();
-static lmc getlmc(word n,word max,word min)
-{lmc getlmc_result;
-;
- if (n<min) getlmc_result=l; else
- if (n>max) getlmc_result=r; else
- getlmc_result=m;
-return getlmc_result;
+static lmc getlmc(word n, word max, word min) {
+ lmc getlmc_result;
+ ;
+ if (n < min) getlmc_result = l;
+ else if (n > max) getlmc_result = r;
+ else
+ getlmc_result = m;
+ return getlmc_result;
}
-byte joyway()
-{
- word x,y;
- lmc xx,yy;
-byte joyway_result;
-;
- if (~ dna.user_moves_avvy) return joyway_result;
- if (use_joy_a) readjoya(x,y); else readjoyb(x,y);
-
- {;
- xx=getlmc(x,cxmax,cxmin);
- yy=getlmc(y,cymax,cymin);
- }
-
- switch (xx) {
- case l: switch (yy) {
- case l: joyway_result=ul; break;
- case m: joyway_result=left; break;
- case r: joyway_result=dl; break;
- }
- break;
- case m: switch (yy) {
- case l: joyway_result=up; break;
- case m: joyway_result=stopped; break;
- case r: joyway_result=down; break;
- }
- break;
- case r: switch (yy) {
- case l: joyway_result=ur; break;
- case m: joyway_result=right; break;
- case r: joyway_result=dr; break;
- }
- break;
- }
-return joyway_result;
+byte joyway() {
+ word x, y;
+ lmc xx, yy;
+ byte joyway_result;
+ ;
+ if (~ dna.user_moves_avvy) return joyway_result;
+ if (use_joy_a) readjoya(x, y);
+ else readjoyb(x, y);
+
+ {
+ ;
+ xx = getlmc(x, cxmax, cxmin);
+ yy = getlmc(y, cymax, cymin);
+ }
+
+ switch (xx) {
+ case l:
+ switch (yy) {
+ case l:
+ joyway_result = ul;
+ break;
+ case m:
+ joyway_result = left;
+ break;
+ case r:
+ joyway_result = dl;
+ break;
+ }
+ break;
+ case m:
+ switch (yy) {
+ case l:
+ joyway_result = up;
+ break;
+ case m:
+ joyway_result = stopped;
+ break;
+ case r:
+ joyway_result = down;
+ break;
+ }
+ break;
+ case r:
+ switch (yy) {
+ case l:
+ joyway_result = ur;
+ break;
+ case m:
+ joyway_result = right;
+ break;
+ case r:
+ joyway_result = dr;
+ break;
+ }
+ break;
+ }
+ return joyway_result;
}
void joykeys()
- /* The 2 joystick keys may be reprogrammed. This parses them. */
+/* The 2 joystick keys may be reprogrammed. This parses them. */
{
- byte v;
-;
- if (use_joy_a)
- {
- v=(byte)(buttona1); v += (byte)(buttona2)*2;
- } else
- {
- v=(byte)(buttonb1); v += (byte)(buttonb2)*2;
- }
-
- switch (v) {
- case 0: return; break; /* No buttons pressed. */
- case 1: opendoor; break; /* Button 1 pressed: open door. */
-/* 2: blip; { Button 2 pressed: nothing (joylock?). }*/
- case 2:case 3: lookaround; break; /* Both buttons pressed: look around. */
- }
+ byte v;
+ ;
+ if (use_joy_a) {
+ v = (byte)(buttona1);
+ v += (byte)(buttona2) * 2;
+ } else {
+ v = (byte)(buttonb1);
+ v += (byte)(buttonb2) * 2;
+ }
+
+ switch (v) {
+ case 0:
+ return;
+ break; /* No buttons pressed. */
+ case 1:
+ opendoor;
+ break; /* Button 1 pressed: open door. */
+ /* 2: blip; { Button 2 pressed: nothing (joylock?). }*/
+ case 2:
+ case 3:
+ lookaround;
+ break; /* Both buttons pressed: look around. */
+ }
}
- /* No init code. */
+/* No init code. */
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/sticks.h b/engines/avalanche/sticks.h
index c9235c065d..fef3464d22 100644
--- a/engines/avalanche/sticks.h
+++ b/engines/avalanche/sticks.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,7 +32,7 @@
/*#include "Joystick.h"*/
/*#include "Acci.h"*/
/*#include "Gyro.h"*/
- /* for solidarity */
+/* for solidarity */
namespace Avalanche {
diff --git a/engines/avalanche/sunrise.cpp b/engines/avalanche/sunrise.cpp
index a5c6b28d9b..7baa88fe87 100644
--- a/engines/avalanche/sunrise.cpp
+++ b/engines/avalanche/sunrise.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,56 +30,67 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
longint tskellern /*absolute $0:244*/; /* Over int $61 */
-void hold()
-{;
- do {; } while (!(tskellern>=1));
- tskellern=0;
+void hold() {
+ ;
+ do {
+ ;
+ } while (!(tskellern >= 1));
+ tskellern = 0;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=1; initgraph(gd,gm,"c:\\bp\\bgi");
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "c:\\bp\\bgi");
- setvisualpage(1);
- setfillstyle(1,1);
- for( gd=1; gd <= 640; gd ++)
- bar(gd,177+trunc(20*sin((real)(gd)/39)),gd,350);
- setfillstyle(1,3); setcolor(3);
- fillellipse(320,277,60,50);
- settextjustify(1,1); settextstyle(0,0,2); setcolor(9);
- outtextxy(320,50,"The sun rises over Hertfordshire...");
- settextjustify(2,0); settextstyle(0,0,1); setcolor(0);
- outtextxy(635,350,"Press any key...");
+ setvisualpage(1);
+ setfillstyle(1, 1);
+ for (gd = 1; gd <= 640; gd ++)
+ bar(gd, 177 + trunc(20 * sin((real)(gd) / 39)), gd, 350);
+ setfillstyle(1, 3);
+ setcolor(3);
+ fillellipse(320, 277, 60, 50);
+ settextjustify(1, 1);
+ settextstyle(0, 0, 2);
+ setcolor(9);
+ outtextxy(320, 50, "The sun rises over Hertfordshire...");
+ settextjustify(2, 0);
+ settextstyle(0, 0, 1);
+ setcolor(0);
+ outtextxy(635, 350, "Press any key...");
- setpalette(0,egablue);
- setpalette(1,egagreen);
- setpalette(2,egayellow);
- setpalette(3,egagreen);
- setpalette(9,egalightblue);
- setpalette(11,egalightblue);
- setvisualpage(0);
+ setpalette(0, egablue);
+ setpalette(1, egagreen);
+ setpalette(2, egayellow);
+ setpalette(3, egagreen);
+ setpalette(9, egalightblue);
+ setpalette(11, egalightblue);
+ setvisualpage(0);
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << 1; port[0x3cf]=1;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << 1;
+ port[0x3cf] = 1;
- for( gm=227; gm >= 1; gm --) /* <<< try running this loop the other way round! */
- {;
- move(mem[0xa000*gm*80+80],mem[0xa000*gm*80],8042);
- hold();
- if (keypressed()) return 0;
- }
+ for (gm = 227; gm >= 1; gm --) { /* <<< try running this loop the other way round! */
+ ;
+ move(mem[0xa000 * gm * 80 + 80], mem[0xa000 * gm * 80], 8042);
+ hold();
+ if (keypressed()) return 0;
+ }
- for( gm=101; gm >= 1; gm --)
- {;
- move(mem[0xa000*80],mem[0xa000*0],gm*80);
- hold();
- if (keypressed()) return 0;
- }
-return EXIT_SUCCESS;
+ for (gm = 101; gm >= 1; gm --) {
+ ;
+ move(mem[0xa000 * 80], mem[0xa000 * 0], gm * 80);
+ hold();
+ if (keypressed()) return 0;
+ }
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/tempo.cpp b/engines/avalanche/tempo.cpp
index 21ee150ea1..914ba60d3a 100644
--- a/engines/avalanche/tempo.cpp
+++ b/engines/avalanche/tempo.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,76 +29,80 @@
namespace Avalanche {
-enum flavourtype {ch_ega,ch_bgi,ch_natural,ch_two,ch_one, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, ch_natural, ch_two, ch_one, last_flavourtype};
struct chunkblocktype {
- union {
- struct {flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;} s_true;
- array<1,14,byte> all;
- };
+ union {
+ struct {
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
+ } s_true;
+ array<1, 14, byte> all;
+ };
};
byte screennum;
untyped_file f;
-string strf(longint x)
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
+string strf(longint x) {
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
}
-void load()
-{
- byte a /*absolute $A000:1200*/; byte bit;
-;
- reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,12080);
- }
- close(f);
- bit=getpixel(0,0);
+void load() {
+ byte a /*absolute $A000:1200*/;
+ byte bit;
+ ;
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-void init()
-{
- integer gd,gm;
-;
- output << "*** Tempo file creater ***" << NL;
- output << "Enter place*.avd number:";
- input >> screennum >> NL;
- gd=3; gm=0;
- initgraph(gd,gm,"c:\\bp\\bgi");
- assign(f,string("place")+strf(screennum)+".avd");
- load();
- setactivepage(1);
- setcolor(10);
- outtextxy(0,150,"CHUNK FILE: please don't change these codes! ->");
- setactivepage(0);
+void init() {
+ integer gd, gm;
+ ;
+ output << "*** Tempo file creater ***" << NL;
+ output << "Enter place*.avd number:";
+ input >> screennum >> NL;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ assign(f, string("place") + strf(screennum) + ".avd");
+ load();
+ setactivepage(1);
+ setcolor(10);
+ outtextxy(0, 150, "CHUNK FILE: please don't change these codes! ->");
+ setactivepage(0);
}
-void choose()
-{
- integer x1,y1,xl,yl;
-;
+void choose() {
+ integer x1, y1, xl, yl;
+ ;
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- init();
- choose();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ init();
+ choose();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/test.cpp b/engines/avalanche/test.cpp
index 22e49d0872..220c92c2c2 100644
--- a/engines/avalanche/test.cpp
+++ b/engines/avalanche/test.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,18 +30,18 @@
namespace Avalanche {
-const array<1,22,char> signature = string("*AVALOT* v1.00 ±tt± ")+'\3'+'\0';
+const array<1, 22, char> signature = string("*AVALOT* v1.00 ±tt± ") + '\3' + '\0';
pointer saveint1f;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- getintvec(0x1f,saveint1f);
- setintvec(0x1f,&signature);
- swapvectors;
- exec("c:\\command.com","");
- swapvectors;
- setintvec(0x1f,saveint1f);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ getintvec(0x1f, saveint1f);
+ setintvec(0x1f, &signature);
+ swapvectors;
+ exec("c:\\command.com", "");
+ swapvectors;
+ setintvec(0x1f, saveint1f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/test2.cpp b/engines/avalanche/test2.cpp
index 7efe64e77e..dfdaae5227 100644
--- a/engines/avalanche/test2.cpp
+++ b/engines/avalanche/test2.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,17 +29,18 @@
namespace Avalanche {
-const array<1,22,char> signature = string("*AVALOT* v1.00 ±tt± ")+'\3'+'\0';
+const array<1, 22, char> signature = string("*AVALOT* v1.00 ±tt± ") + '\3' + '\0';
pointer getint1f;
-array<1,22,char> x;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- getintvec(0x1f,getint1f);
- move(getint1f,x,22);
- if (x==signature)
- output << "Signature found." << NL; else output << "Signature NOT found!" << NL;
-return EXIT_SUCCESS;
+array<1, 22, char> x;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ getintvec(0x1f, getint1f);
+ move(getint1f, x, 22);
+ if (x == signature)
+ output << "Signature found." << NL;
+ else output << "Signature NOT found!" << NL;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/testblit.cpp b/engines/avalanche/testblit.cpp
index 5fe1e3aca1..b58ddc628d 100644
--- a/engines/avalanche/testblit.cpp
+++ b/engines/avalanche/testblit.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,43 +34,51 @@ const integer borland = xorput;
const integer mb1 = 2; /* 2 */
const integer mb2 = 4; /* 4 */
-integer gd,gm;
+integer gd, gm;
pointer p;
word s;
-void mblit()
-{
- byte bit; longint st;
-;
- st=ttp;
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=mb1;
- portw[0x3ce]=copyput*256+3;
- portw[0x3ce]=0x205;
- port[0x3ce]=0x8;
- port[0x3c5]=1 << bit;
- port[0x3cf]=bit;
- move(mem[longint(0xa000)*st],mem[0xa000*0],7200);
- }
+void mblit() {
+ byte bit;
+ longint st;
+ ;
+ st = ttp;
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = mb1;
+ portw[0x3ce] = copyput * 256 + 3;
+ portw[0x3ce] = 0x205;
+ port[0x3ce] = 0x8;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ move(mem[longint(0xa000)*st], mem[0xa000 * 0], 7200);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- settextstyle(1,0,7);
- for( gd=0; gd <= 1; gd ++)
- {;
- setactivepage(gd); setcolor(6*gd+6);
- outtextxy(0,0,chr(65+gd));
- }
- s=imagesize(0,0,90,90); setactivepage(0); getmem(p,s);
- getimage(0,0,90,90,p); putimage(100,100,p,0);
- setactivepage(1); getimage(0,0,90,90,p); setactivepage(0);
- putimage(100,100,p,borland);
- mblit();
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ settextstyle(1, 0, 7);
+ for (gd = 0; gd <= 1; gd ++) {
+ ;
+ setactivepage(gd);
+ setcolor(6 * gd + 6);
+ outtextxy(0, 0, chr(65 + gd));
+ }
+ s = imagesize(0, 0, 90, 90);
+ setactivepage(0);
+ getmem(p, s);
+ getimage(0, 0, 90, 90, p);
+ putimage(100, 100, p, 0);
+ setactivepage(1);
+ getimage(0, 0, 90, 90, p);
+ setactivepage(0);
+ putimage(100, 100, p, borland);
+ mblit();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/testcard.cpp b/engines/avalanche/testcard.cpp
index f435df0c9b..aec0d92aed 100644
--- a/engines/avalanche/testcard.cpp
+++ b/engines/avalanche/testcard.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,55 +30,65 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
string filename;
-untyped_file f; byte bit;
+untyped_file f;
+byte bit;
byte a /*absolute $A000:800*/;
searchrec r;
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
- for( gd=0; gd <= 14; gd ++)
- for( gm=0; gm <= 11; gm ++)
- {;
- setfillstyle(gm,gd+1);
- bar(gd*43,gm*12+10,42+gd*43,gm*12+21);
- }
+ for (gd = 0; gd <= 14; gd ++)
+ for (gm = 0; gm <= 11; gm ++) {
+ ;
+ setfillstyle(gm, gd + 1);
+ bar(gd * 43, gm * 12 + 10, 42 + gd * 43, gm * 12 + 21);
+ }
- output << NL; output << NL; output << NL; output << NL;
+ output << NL;
+ output << NL;
+ output << NL;
+ output << NL;
- output << "Thorsoft testcard." << NL;
- output << NL;
- output << "Room number? "; input >> filename >> NL;
+ output << "Thorsoft testcard." << NL;
+ output << NL;
+ output << "Room number? ";
+ input >> filename >> NL;
- findfirst(string("place")+filename+".avd",anyfile,r);
- if (doserror==0)
- {;
- output << "*** ALREADY EXISTS! CANCELLED! ***" << NL;
- input >> NL;
- exit(0);
- }
+ findfirst(string("place") + filename + ".avd", anyfile, r);
+ if (doserror == 0) {
+ ;
+ output << "*** ALREADY EXISTS! CANCELLED! ***" << NL;
+ input >> NL;
+ exit(0);
+ }
- output << NL;
- output << "*** Until this room is drawn, this screen is standing in for it. ***" << NL;
- output << NL;
- output << "Any other comments? ";
- input >> NL;
+ output << NL;
+ output << "*** Until this room is drawn, this screen is standing in for it. ***" << NL;
+ output << NL;
+ output << "Any other comments? ";
+ input >> NL;
- assign(f,string("place")+filename+".avd");
- rewrite(f,1);
- blockwrite(f,gd,177); /* just anything */
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,a,12080);
- }
- close(f);
-return EXIT_SUCCESS;
+ assign(f, string("place") + filename + ".avd");
+ rewrite(f, 1);
+ blockwrite(f, gd, 177); /* just anything */
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, a, 12080);
+ }
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/testenh.cpp b/engines/avalanche/testenh.cpp
index 86b01b5737..d0a0ac31f6 100644
--- a/engines/avalanche/testenh.cpp
+++ b/engines/avalanche/testenh.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,18 +29,23 @@
namespace Avalanche {
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- do {
- readkeye;
- switch (inchar) {
- case '\0': output << string('[')+extd+']'; break;
- case '\340': output << string('<')+extd+'>'; break;
- default: output << inchar;
- }
- } while (!(inchar=='\33'));
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ do {
+ readkeye;
+ switch (inchar) {
+ case '\0':
+ output << string('[') + extd + ']';
+ break;
+ case '\340':
+ output << string('<') + extd + '>';
+ break;
+ default:
+ output << inchar;
+ }
+ } while (!(inchar == '\33'));
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/timeout.cpp b/engines/avalanche/timeout.cpp
index 2c83104a5d..553d503d0d 100644
--- a/engines/avalanche/timeout.cpp
+++ b/engines/avalanche/timeout.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -51,89 +51,169 @@ namespace Avalanche {
byte fv;
-void set_up_timer(longint howlong, byte whither,byte why)
-{
- fv=1;
- while ((fv<8) && (times[fv].time_left!=0)) fv += 1;
- if (fv==8) return; /* Oh dear... */
-
- {
- timetype& with = times[fv]; /* Everything's OK here! */
-
- with.time_left=howlong;
- with.then_where=whither;
- with.what_for=why;
- }
-}
-
-void one_tick()
-{
-
- if (ddmnow) return;
-
- for( fv=1; fv <= 7; fv ++)
- { timetype& with = times[fv];
- if (with.time_left>0)
- {
- with.time_left -= 1;
-
- if (with.time_left==0)
- switch (with.then_where) {
- case procopen_drawbridge : open_drawbridge(); break;
- case procavaricius_talks : avaricius_talks(); break;
- case procurinate : urinate(); break;
- case proctoilet2 : toilet2(); break;
- case procbang: bang(); break;
- case procbang2: bang2(); break;
- case procstairs: stairs(); break;
- case proccardiffsurvey: cardiff_survey(); break;
- case proccardiff_return: cardiff_return(); break;
- case proc_cwytalot_in_herts: cwytalot_in_herts(); break;
- case procget_tied_up: get_tied_up(); break;
- case procget_tied_up2: get_tied_up2(); break;
- case prochang_around: hang_around(); break;
- case prochang_around2: hang_around2(); break;
- case procafter_the_shootemup: after_the_shootemup(); break;
- case procjacques_wakes_up: jacques_wakes_up(); break;
- case procnaughty_duke: naughty_duke(); break;
- case procnaughty_duke2: naughty_duke2(); break;
- case procnaughty_duke3: naughty_duke3(); break;
- case procjump: jump(); break;
- case procsequence: call_sequencer(); break;
- case proccrapulus_splud_out: crapulus_says_splud_out(); break;
- case procdawn_delay: dawn(); break;
- case procbuydrinks: buydrinks(); break;
- case procbuywine: buywine(); break;
- case proccallsguards: callsguards(); break;
- case procgreetsmonk: greetsmonk(); break;
- case procfall_down_oubliette: fall_down_oubliette(); break;
- case procmeet_avaroid: meet_avaroid(); break;
- case procrise_up_oubliette: rise_up_oubliette(); break;
- case procrobin_hood_and_geida: robin_hood_and_geida(); break;
- case procrobin_hood_and_geida_talk: robin_hood_and_geida_talk(); break;
- case procavalot_returns: avalot_returns(); break;
- case procavvy_sit_down: avvy_sit_down(); break;
- case procghost_room_phew: ghost_room_phew(); break;
- case procarkata_shouts: arkata_shouts(); break;
- case procwinning: winning(); break;
- case procavalot_falls: avalot_falls(); break;
- case procspludwick_goes_to_cauldron: spludwick_goes_to_cauldron(); break;
- case procspludwick_leaves_cauldron: spludwick_leaves_cauldron(); break;
- case procgive_lute_to_geida: give_lute_to_geida(); break;
- }
- }}
- roomtime += 1; /* Cycles since you've been in this room. */
- dna.total_time += 1; /* Total amount of time for this game. */
-}
-
-void lose_timer(byte which)
-{
- byte fv;
-
- for( fv=1; fv <= 7; fv ++)
- { timetype& with = times[fv];
- if (with.what_for==which)
- with.time_left=0;} /* Cancel this one! */
+void set_up_timer(longint howlong, byte whither, byte why) {
+ fv = 1;
+ while ((fv < 8) && (times[fv].time_left != 0)) fv += 1;
+ if (fv == 8) return; /* Oh dear... */
+
+ {
+ timetype &with = times[fv]; /* Everything's OK here! */
+
+ with.time_left = howlong;
+ with.then_where = whither;
+ with.what_for = why;
+ }
+}
+
+void one_tick() {
+
+ if (ddmnow) return;
+
+ for (fv = 1; fv <= 7; fv ++) {
+ timetype &with = times[fv];
+ if (with.time_left > 0) {
+ with.time_left -= 1;
+
+ if (with.time_left == 0)
+ switch (with.then_where) {
+ case procopen_drawbridge :
+ open_drawbridge();
+ break;
+ case procavaricius_talks :
+ avaricius_talks();
+ break;
+ case procurinate :
+ urinate();
+ break;
+ case proctoilet2 :
+ toilet2();
+ break;
+ case procbang:
+ bang();
+ break;
+ case procbang2:
+ bang2();
+ break;
+ case procstairs:
+ stairs();
+ break;
+ case proccardiffsurvey:
+ cardiff_survey();
+ break;
+ case proccardiff_return:
+ cardiff_return();
+ break;
+ case proc_cwytalot_in_herts:
+ cwytalot_in_herts();
+ break;
+ case procget_tied_up:
+ get_tied_up();
+ break;
+ case procget_tied_up2:
+ get_tied_up2();
+ break;
+ case prochang_around:
+ hang_around();
+ break;
+ case prochang_around2:
+ hang_around2();
+ break;
+ case procafter_the_shootemup:
+ after_the_shootemup();
+ break;
+ case procjacques_wakes_up:
+ jacques_wakes_up();
+ break;
+ case procnaughty_duke:
+ naughty_duke();
+ break;
+ case procnaughty_duke2:
+ naughty_duke2();
+ break;
+ case procnaughty_duke3:
+ naughty_duke3();
+ break;
+ case procjump:
+ jump();
+ break;
+ case procsequence:
+ call_sequencer();
+ break;
+ case proccrapulus_splud_out:
+ crapulus_says_splud_out();
+ break;
+ case procdawn_delay:
+ dawn();
+ break;
+ case procbuydrinks:
+ buydrinks();
+ break;
+ case procbuywine:
+ buywine();
+ break;
+ case proccallsguards:
+ callsguards();
+ break;
+ case procgreetsmonk:
+ greetsmonk();
+ break;
+ case procfall_down_oubliette:
+ fall_down_oubliette();
+ break;
+ case procmeet_avaroid:
+ meet_avaroid();
+ break;
+ case procrise_up_oubliette:
+ rise_up_oubliette();
+ break;
+ case procrobin_hood_and_geida:
+ robin_hood_and_geida();
+ break;
+ case procrobin_hood_and_geida_talk:
+ robin_hood_and_geida_talk();
+ break;
+ case procavalot_returns:
+ avalot_returns();
+ break;
+ case procavvy_sit_down:
+ avvy_sit_down();
+ break;
+ case procghost_room_phew:
+ ghost_room_phew();
+ break;
+ case procarkata_shouts:
+ arkata_shouts();
+ break;
+ case procwinning:
+ winning();
+ break;
+ case procavalot_falls:
+ avalot_falls();
+ break;
+ case procspludwick_goes_to_cauldron:
+ spludwick_goes_to_cauldron();
+ break;
+ case procspludwick_leaves_cauldron:
+ spludwick_leaves_cauldron();
+ break;
+ case procgive_lute_to_geida:
+ give_lute_to_geida();
+ break;
+ }
+ }
+ }
+ roomtime += 1; /* Cycles since you've been in this room. */
+ dna.total_time += 1; /* Total amount of time for this game. */
+}
+
+void lose_timer(byte which) {
+ byte fv;
+
+ for (fv = 1; fv <= 7; fv ++) {
+ timetype &with = times[fv];
+ if (with.what_for == which)
+ with.time_left = 0;
+ } /* Cancel this one! */
}
/*function timer_is_on(which:byte):boolean;
@@ -151,472 +231,469 @@ end;*/
/* Timeout procedures: */
-void open_drawbridge()
-{
- {
- dnatype& with = dna;
+void open_drawbridge() {
+ {
+ dnatype &with = dna;
- with.drawbridge_open += 1;
- show_one(with.drawbridge_open-1);
+ with.drawbridge_open += 1;
+ show_one(with.drawbridge_open - 1);
- if (with.drawbridge_open==4)
- magics[2].op=nix; /* You may enter the drawbridge. */
- else set_up_timer(7,procopen_drawbridge,reason_drawbridgefalls);
- }
+ if (with.drawbridge_open == 4)
+ magics[2].op = nix; /* You may enter the drawbridge. */
+ else set_up_timer(7, procopen_drawbridge, reason_drawbridgefalls);
+ }
}
/* --- */
-void avaricius_talks()
-{
- {
- dnatype& with = dna;
+void avaricius_talks() {
+ {
+ dnatype &with = dna;
- dixi('q',with.avaricius_talk);
- with.avaricius_talk += 1;
+ dixi('q', with.avaricius_talk);
+ with.avaricius_talk += 1;
- if (with.avaricius_talk<17)
- set_up_timer(177,procavaricius_talks,reason_avariciustalks);
- else points(3);
+ if (with.avaricius_talk < 17)
+ set_up_timer(177, procavaricius_talks, reason_avariciustalks);
+ else points(3);
- }
+ }
}
-void urinate()
-{
- tr[1].turn(up);
- stopwalking();
- showrw();
- set_up_timer(14,proctoilet2,reason_gototoilet);
+void urinate() {
+ tr[1].turn(up);
+ stopwalking();
+ showrw();
+ set_up_timer(14, proctoilet2, reason_gototoilet);
}
-void toilet2()
-{
- display("That's better!");
+void toilet2() {
+ display("That's better!");
}
-void bang()
-{
- display("\6< BANG! >");
- set_up_timer(30,procbang2,reason_explosion);
+void bang() {
+ display("\6< BANG! >");
+ set_up_timer(30, procbang2, reason_explosion);
}
-void bang2()
-{
- display("Hmm... sounds like Spludwick's up to something...");
+void bang2() {
+ display("Hmm... sounds like Spludwick's up to something...");
}
-void stairs()
-{
- blip();
- tr[1].walkto(4);
- show_one(2);
- dna.brummie_stairs=2;
- magics[11].op=special;
- magics[11].data=2; /* Reached the bottom of the stairs. */
- magics[4].op=nix; /* Stop them hitting the sides (or the game will hang.) */
+void stairs() {
+ blip();
+ tr[1].walkto(4);
+ show_one(2);
+ dna.brummie_stairs = 2;
+ magics[11].op = special;
+ magics[11].data = 2; /* Reached the bottom of the stairs. */
+ magics[4].op = nix; /* Stop them hitting the sides (or the game will hang.) */
}
-void cardiff_survey()
-{
- {
- dnatype& with = dna;
-
- switch (with.cardiff_things) {
- case 0: {
- with.cardiff_things += 1;
- dixi('q',27);
- }
- break;
- }
- dixi('z',with.cardiff_things);
- }
- interrogation=dna.cardiff_things;
- set_up_timer(182,proccardiffsurvey,reason_cardiffsurvey);
-}
-
-void cardiff_return()
-{
- dixi('q',28);
- cardiff_survey(); /* add end of question. */
-}
+void cardiff_survey() {
+ {
+ dnatype &with = dna;
-void cwytalot_in_herts()
-{
- dixi('q',29);
+ switch (with.cardiff_things) {
+ case 0: {
+ with.cardiff_things += 1;
+ dixi('q', 27);
+ }
+ break;
+ }
+ dixi('z', with.cardiff_things);
+ }
+ interrogation = dna.cardiff_things;
+ set_up_timer(182, proccardiffsurvey, reason_cardiffsurvey);
}
-void get_tied_up()
-{
- dixi('q',34); /* ...Trouble! */
- dna.user_moves_avvy=false;
- dna.been_tied_up=true;
- stopwalking();
- tr[2].stopwalk(); tr[2].stophoming();
- tr[2].call_eachstep=true;
- tr[2].eachstep=procgrab_avvy;
- set_up_timer(70,procget_tied_up2,reason_getting_tied_up);
+void cardiff_return() {
+ dixi('q', 28);
+ cardiff_survey(); /* add end of question. */
}
-void get_tied_up2()
-{
- tr[1].walkto(4);
- tr[2].walkto(5);
- magics[4].op=nix; /* No effect when you touch the boundaries. */
- dna.friar_will_tie_you_up=true;
+void cwytalot_in_herts() {
+ dixi('q', 29);
}
-void hang_around()
-{
- tr[2].check_me=false;
- tr[1].init(7,true); /* Robin Hood */
- whereis[probinhood]=r__robins;
- apped(1,2);
- dixi('q',39);
- tr[1].walkto(7);
- set_up_timer(55,prochang_around2,reason_hanging_around);
-}
-
-void hang_around2()
-{
- dixi('q',40);
- tr[2].vanishifstill=false;
- tr[2].walkto(4);
- whereis[pfriartuck]=r__robins;
- dixi('q',41);
- tr[1].done(); tr[2].done(); /* Get rid of Robin Hood and Friar Tuck. */
-
- set_up_timer(1,procafter_the_shootemup,reason_hanging_around); /* Immediately
- call the following proc (when you have a chance). */
-
- dna.tied_up=false;
-
- back_to_bootstrap(1); /* Call the shoot-'em-up. */
+void get_tied_up() {
+ dixi('q', 34); /* ...Trouble! */
+ dna.user_moves_avvy = false;
+ dna.been_tied_up = true;
+ stopwalking();
+ tr[2].stopwalk();
+ tr[2].stophoming();
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procgrab_avvy;
+ set_up_timer(70, procget_tied_up2, reason_getting_tied_up);
}
-void after_the_shootemup()
-{
- byte shootscore,gain;
-
- tr[1].init(0,true); /* Avalot. */
- apped(1,2); dna.user_moves_avvy=true;
- dna.obj[crossbow]=true; objectlist();
-
- shootscore=mem[storage_seg*storage_ofs];
- gain=(shootscore+5) / 10; /* Rounding up. */
-
- display(string("\6Your score was ")+strf(shootscore)+'.'+"\r\rYou gain ("+
- strf(shootscore)+" ö 10) = "+strf(gain)+" points.");
-
- if (gain>20)
- {
- display("But we won't let you have more than 20 points!");
- points(20);
- } else
- points(gain);
-
- dixi('q',70);
+void get_tied_up2() {
+ tr[1].walkto(4);
+ tr[2].walkto(5);
+ magics[4].op = nix; /* No effect when you touch the boundaries. */
+ dna.friar_will_tie_you_up = true;
}
-void jacques_wakes_up()
-{
- dna.jacques_awake += 1;
-
- switch (dna.jacques_awake) { /* Additional pictures. */
- case 1 : {
- show_one(1); /* Eyes open. */
- dixi('Q',45);
- }
- break;
- case 2 : { /* Going through the door. */
- show_one(2); /* Not on the floor. */
- show_one(3); /* But going through the door. */
- magics[6].op=nix; /* You can't wake him up now. */
- }
- break;
- case 3 : { /* Gone through the door. */
- show_one(2); /* Not on the floor, either. */
- show_one(4); /* He's gone... so the door's open. */
- whereis[pjacques]=0; /* Gone! */
- }
- break;
- }
-
-
- if (dna.jacques_awake==5)
- {
- dna.ringing_bells=true;
- dna.ayles_is_awake=true;
- points(2);
- }
-
- switch (dna.jacques_awake) {
- case RANGE_3(1,3): set_up_timer(12,procjacques_wakes_up,reason_jacques_waking_up);
- break;
- case 4: set_up_timer(24,procjacques_wakes_up,reason_jacques_waking_up); break;
- }
-
+void hang_around() {
+ tr[2].check_me = false;
+ tr[1].init(7, true); /* Robin Hood */
+ whereis[probinhood] = r__robins;
+ apped(1, 2);
+ dixi('q', 39);
+ tr[1].walkto(7);
+ set_up_timer(55, prochang_around2, reason_hanging_around);
}
-void naughty_duke()
- /* This is when the Duke comes in and takes your money. */
-{
- tr[2].init(9,false); /* Here comes the Duke. */
- apped(2,1); /* He starts at the door... */
- tr[2].walkto(3); /* He walks over to you. */
+void hang_around2() {
+ dixi('q', 40);
+ tr[2].vanishifstill = false;
+ tr[2].walkto(4);
+ whereis[pfriartuck] = r__robins;
+ dixi('q', 41);
+ tr[1].done();
+ tr[2].done(); /* Get rid of Robin Hood and Friar Tuck. */
- /* Let's get the door opening. */
+ set_up_timer(1, procafter_the_shootemup, reason_hanging_around); /* Immediately
+ call the following proc (when you have a chance). */
- show_one(1); first_show(2); start_to_close();
+ dna.tied_up = false;
- set_up_timer(50,procnaughty_duke2,reason_naughty_duke);
+ back_to_bootstrap(1); /* Call the shoot-'em-up. */
}
-void naughty_duke2()
-{
- dixi('q',48); /* Ha ha, it worked again! */
- tr[2].walkto(1); /* Walk to the door. */
- tr[2].vanishifstill=true; /* Then go away! */
- set_up_timer(32,procnaughty_duke3,reason_naughty_duke);
-}
+void after_the_shootemup() {
+ byte shootscore, gain;
-void naughty_duke3()
-{
- show_one(1); first_show(2); start_to_close();
-}
+ tr[1].init(0, true); /* Avalot. */
+ apped(1, 2);
+ dna.user_moves_avvy = true;
+ dna.obj[crossbow] = true;
+ objectlist();
-void jump()
-{
- {
- dnatype& with = dna;
-
- with.jumpstatus += 1;
-
- { triptype& with1 = tr[1];
- switch (with.jumpstatus) {
- case 1:case 2:case 3:case 5:case 7:case 9: with1.y -= 1; break;
- case 12:case 13:case 14:case 16:case 18:case 19: with1.y += 1; break;
- }}
-
- if (with.jumpstatus==20)
- { /* End of jump. */
- dna.user_moves_avvy=true;
- dna.jumpstatus=0;
- } else
- { /* Still jumping. */
- set_up_timer(1,procjump,reason_jumping);
- }
-
- if ((with.jumpstatus==10) /* You're at the highest point of your jump. */
- && (dna.room==r__insidecardiffcastle)
- && (dna.arrow_in_the_door==true)
- && (infield(3))) /* beside the wall*/
- { /* Grab the arrow! */
- if (dna.carrying>=maxobjs)
- display("You fail to grab it, because your hands are full.");
- else
- {
- show_one(2);
- dna.arrow_in_the_door=false; /* You've got it. */
- dna.obj[bolt]=true;
- objectlist();
- dixi('q',50);
- points(3);
- }
- }
- }
-}
-
-void crapulus_says_splud_out()
-{
- dixi('q',56);
- dna.crapulus_will_tell=false;
-}
+ shootscore = mem[storage_seg * storage_ofs];
+ gain = (shootscore + 5) / 10; /* Rounding up. */
-void buydrinks()
-{
- show_one(11); /* Malagauche gets up again. */
- dna.malagauche=0;
+ display(string("\6Your score was ") + strf(shootscore) + '.' + "\r\rYou gain (" +
+ strf(shootscore) + " ö 10) = " + strf(gain) + " points.");
- dixi('D',ord(dna.drinking)); /* Display message about it. */
- wobble(); /* Do the special effects. */
- dixi('D',1); /* That'll be thruppence. */
- if (pennycheck(3)) /* Pay 3d. */
- dixi('D',3); /* Tell 'em you paid up. */
- have_a_drink();
-}
+ if (gain > 20) {
+ display("But we won't let you have more than 20 points!");
+ points(20);
+ } else
+ points(gain);
-void buywine()
-{
- show_one(11); /* Malagauche gets up again. */
- dna.malagauche=0;
-
- dixi('D',50); /* You buy the wine. */
- dixi('D',1); /* It'll be thruppence. */
- if (pennycheck(3))
- {
- dixi('D',4); /* You paid up. */
- dna.obj[wine]=true;
- objectlist();
- dna.winestate=1; /* OK Wine */
- }
+ dixi('q', 70);
}
-void callsguards()
-{
- dixi('Q',58); /* GUARDS!!! */
- gameover();
-}
+void jacques_wakes_up() {
+ dna.jacques_awake += 1;
-void greetsmonk()
-{
- dixi('Q',59); dna.entered_lusties_room_as_monk=true;
-}
+ switch (dna.jacques_awake) { /* Additional pictures. */
+ case 1 : {
+ show_one(1); /* Eyes open. */
+ dixi('Q', 45);
+ }
+ break;
+ case 2 : { /* Going through the door. */
+ show_one(2); /* Not on the floor. */
+ show_one(3); /* But going through the door. */
+ magics[6].op = nix; /* You can't wake him up now. */
+ }
+ break;
+ case 3 : { /* Gone through the door. */
+ show_one(2); /* Not on the floor, either. */
+ show_one(4); /* He's gone... so the door's open. */
+ whereis[pjacques] = 0; /* Gone! */
+ }
+ break;
+ }
-void fall_down_oubliette()
-{
- magics[9].op=nix;
- tr[1].iy += 1; /* increments dx/dy! */
- tr[1].y += tr[1].iy; /* Dowwwn we go... */
- set_up_timer(3,procfall_down_oubliette,reason_falling_down_oubliette);
-}
-void meet_avaroid()
-{
- if (dna.met_avaroid)
- {
- display("You can't expect to be \6that\22 lucky twice in a row!");
- gameover();
- } else
- {
- dixi('Q',60); dna.met_avaroid=true;
- set_up_timer(1,procrise_up_oubliette,reason_rising_up_oubliette);
- {
- triptype& with = tr[1]; with.face=left; with.x=151; with.ix=-3; with.iy=-5; }
- background(2);
- }
-}
-
-void rise_up_oubliette()
-{
- {
- triptype& with = tr[1];
+ if (dna.jacques_awake == 5) {
+ dna.ringing_bells = true;
+ dna.ayles_is_awake = true;
+ points(2);
+ }
- with.visible=true;
- with.iy += 1; /* decrements dx/dy! */
- with.y -= with.iy; /* Uuuupppp we go... */
- if (with.iy>0)
- set_up_timer(3,procrise_up_oubliette,reason_rising_up_oubliette);
- else
- dna.user_moves_avvy=true;
- }
-}
+ switch (dna.jacques_awake) {
+ case RANGE_3(1, 3):
+ set_up_timer(12, procjacques_wakes_up, reason_jacques_waking_up);
+ break;
+ case 4:
+ set_up_timer(24, procjacques_wakes_up, reason_jacques_waking_up);
+ break;
+ }
-void robin_hood_and_geida()
-{
- tr[1].init(7,true);
- apped(1,7);
- tr[1].walkto(6);
- tr[2].stopwalk();
- tr[2].face=left;
- set_up_timer(20,procrobin_hood_and_geida_talk,reason_robin_hood_and_geida);
- dna.geida_follows=false;
}
-void robin_hood_and_geida_talk()
-{
- dixi('q',66); tr[1].walkto(2); tr[2].walkto(2);
- tr[1].vanishifstill=true; tr[2].vanishifstill=true;
- set_up_timer(162,procavalot_returns,reason_robin_hood_and_geida);
+void naughty_duke()
+/* This is when the Duke comes in and takes your money. */
+{
+ tr[2].init(9, false); /* Here comes the Duke. */
+ apped(2, 1); /* He starts at the door... */
+ tr[2].walkto(3); /* He walks over to you. */
+
+ /* Let's get the door opening. */
+
+ show_one(1);
+ first_show(2);
+ start_to_close();
+
+ set_up_timer(50, procnaughty_duke2, reason_naughty_duke);
+}
+
+void naughty_duke2() {
+ dixi('q', 48); /* Ha ha, it worked again! */
+ tr[2].walkto(1); /* Walk to the door. */
+ tr[2].vanishifstill = true; /* Then go away! */
+ set_up_timer(32, procnaughty_duke3, reason_naughty_duke);
+}
+
+void naughty_duke3() {
+ show_one(1);
+ first_show(2);
+ start_to_close();
+}
+
+void jump() {
+ {
+ dnatype &with = dna;
+
+ with.jumpstatus += 1;
+
+ {
+ triptype &with1 = tr[1];
+ switch (with.jumpstatus) {
+ case 1:
+ case 2:
+ case 3:
+ case 5:
+ case 7:
+ case 9:
+ with1.y -= 1;
+ break;
+ case 12:
+ case 13:
+ case 14:
+ case 16:
+ case 18:
+ case 19:
+ with1.y += 1;
+ break;
+ }
+ }
+
+ if (with.jumpstatus == 20) {
+ /* End of jump. */
+ dna.user_moves_avvy = true;
+ dna.jumpstatus = 0;
+ } else {
+ /* Still jumping. */
+ set_up_timer(1, procjump, reason_jumping);
+ }
+
+ if ((with.jumpstatus == 10) /* You're at the highest point of your jump. */
+ && (dna.room == r__insidecardiffcastle)
+ && (dna.arrow_in_the_door == true)
+ && (infield(3))) { /* beside the wall*/
+ /* Grab the arrow! */
+ if (dna.carrying >= maxobjs)
+ display("You fail to grab it, because your hands are full.");
+ else {
+ show_one(2);
+ dna.arrow_in_the_door = false; /* You've got it. */
+ dna.obj[bolt] = true;
+ objectlist();
+ dixi('q', 50);
+ points(3);
+ }
+ }
+ }
+}
+
+void crapulus_says_splud_out() {
+ dixi('q', 56);
+ dna.crapulus_will_tell = false;
+}
+
+void buydrinks() {
+ show_one(11); /* Malagauche gets up again. */
+ dna.malagauche = 0;
+
+ dixi('D', ord(dna.drinking)); /* Display message about it. */
+ wobble(); /* Do the special effects. */
+ dixi('D', 1); /* That'll be thruppence. */
+ if (pennycheck(3)) /* Pay 3d. */
+ dixi('D', 3); /* Tell 'em you paid up. */
+ have_a_drink();
+}
+
+void buywine() {
+ show_one(11); /* Malagauche gets up again. */
+ dna.malagauche = 0;
+
+ dixi('D', 50); /* You buy the wine. */
+ dixi('D', 1); /* It'll be thruppence. */
+ if (pennycheck(3)) {
+ dixi('D', 4); /* You paid up. */
+ dna.obj[wine] = true;
+ objectlist();
+ dna.winestate = 1; /* OK Wine */
+ }
+}
+
+void callsguards() {
+ dixi('Q', 58); /* GUARDS!!! */
+ gameover();
+}
+
+void greetsmonk() {
+ dixi('Q', 59);
+ dna.entered_lusties_room_as_monk = true;
+}
+
+void fall_down_oubliette() {
+ magics[9].op = nix;
+ tr[1].iy += 1; /* increments dx/dy! */
+ tr[1].y += tr[1].iy; /* Dowwwn we go... */
+ set_up_timer(3, procfall_down_oubliette, reason_falling_down_oubliette);
+}
+
+void meet_avaroid() {
+ if (dna.met_avaroid) {
+ display("You can't expect to be \6that\22 lucky twice in a row!");
+ gameover();
+ } else {
+ dixi('Q', 60);
+ dna.met_avaroid = true;
+ set_up_timer(1, procrise_up_oubliette, reason_rising_up_oubliette);
+ {
+ triptype &with = tr[1];
+ with.face = left;
+ with.x = 151;
+ with.ix = -3;
+ with.iy = -5;
+ }
+ background(2);
+ }
+}
+
+void rise_up_oubliette() {
+ {
+ triptype &with = tr[1];
+
+ with.visible = true;
+ with.iy += 1; /* decrements dx/dy! */
+ with.y -= with.iy; /* Uuuupppp we go... */
+ if (with.iy > 0)
+ set_up_timer(3, procrise_up_oubliette, reason_rising_up_oubliette);
+ else
+ dna.user_moves_avvy = true;
+ }
+}
+
+void robin_hood_and_geida() {
+ tr[1].init(7, true);
+ apped(1, 7);
+ tr[1].walkto(6);
+ tr[2].stopwalk();
+ tr[2].face = left;
+ set_up_timer(20, procrobin_hood_and_geida_talk, reason_robin_hood_and_geida);
+ dna.geida_follows = false;
+}
+
+void robin_hood_and_geida_talk() {
+ dixi('q', 66);
+ tr[1].walkto(2);
+ tr[2].walkto(2);
+ tr[1].vanishifstill = true;
+ tr[2].vanishifstill = true;
+ set_up_timer(162, procavalot_returns, reason_robin_hood_and_geida);
}
-
-void avalot_returns()
-{
- tr[1].done(); tr[2].done();
- tr[1].init(0,true);
- apped(1,1);
- dixi('q',67);
- dna.user_moves_avvy=true;
+
+void avalot_returns() {
+ tr[1].done();
+ tr[2].done();
+ tr[1].init(0, true);
+ apped(1, 1);
+ dixi('q', 67);
+ dna.user_moves_avvy = true;
}
void avvy_sit_down()
- /* This is used when you sit down in the pub in Notts. It loops around so
- that it will happen when Avvy stops walking. */
+/* This is used when you sit down in the pub in Notts. It loops around so
+ that it will happen when Avvy stops walking. */
{
- if (tr[1].homing) /* Still walking */
- set_up_timer(1,procavvy_sit_down,reason_sitting_down);
- else
- {
- show_one(3);
- dna.sitting_in_pub=true;
- dna.user_moves_avvy=false;
- tr[1].visible=false;
- }
-}
-
-void ghost_room_phew()
-{
- display("\6PHEW!\22 You're glad to get out of \6there!");
+ if (tr[1].homing) /* Still walking */
+ set_up_timer(1, procavvy_sit_down, reason_sitting_down);
+ else {
+ show_one(3);
+ dna.sitting_in_pub = true;
+ dna.user_moves_avvy = false;
+ tr[1].visible = false;
+ }
}
-void arkata_shouts()
-{
- if (dna.teetotal) return;
- dixi('q',76);
- set_up_timer(160,procarkata_shouts,reason_arkata_shouts);
+void ghost_room_phew() {
+ display("\6PHEW!\22 You're glad to get out of \6there!");
}
-void winning()
-{
- dixi('q',79);
- winning_pic();
- do { checkclick(); } while (!(mrelease==0));
- callverb(vb_score);
- display(" T H E E N D ");
- lmo=true;
+void arkata_shouts() {
+ if (dna.teetotal) return;
+ dixi('q', 76);
+ set_up_timer(160, procarkata_shouts, reason_arkata_shouts);
}
-void avalot_falls()
-{
- if (tr[1].step<5)
- {
- tr[1].step += 1;
- set_up_timer(3,procavalot_falls,reason_falling_over);
- } else
- display("\r\r\r\r\r\r\n\n\n\n\n\n\23Z\26");
+void winning() {
+ dixi('q', 79);
+ winning_pic();
+ do {
+ checkclick();
+ } while (!(mrelease == 0));
+ callverb(vb_score);
+ display(" T H E E N D ");
+ lmo = true;
}
-void spludwick_goes_to_cauldron()
-{
- if (tr[2].homing)
- set_up_timer(1,procspludwick_goes_to_cauldron,reason_spludwalk);
- else
- set_up_timer(17,procspludwick_leaves_cauldron,reason_spludwalk);
+void avalot_falls() {
+ if (tr[1].step < 5) {
+ tr[1].step += 1;
+ set_up_timer(3, procavalot_falls, reason_falling_over);
+ } else
+ display("\r\r\r\r\r\r\n\n\n\n\n\n\23Z\26");
}
-void spludwick_leaves_cauldron()
-{
- tr[2].call_eachstep=true; /* So that normal procs will continue. */
+void spludwick_goes_to_cauldron() {
+ if (tr[2].homing)
+ set_up_timer(1, procspludwick_goes_to_cauldron, reason_spludwalk);
+ else
+ set_up_timer(17, procspludwick_leaves_cauldron, reason_spludwalk);
}
-void give_lute_to_geida() /* Moved here from Acci. */
-{
- dixi('Q',86);
- points(4);
- dna.lustie_is_asleep=true;
- first_show(5); then_show(6); /* He falls asleep... */
- start_to_close(); /* Not really closing, but we're using the same procedure. */
+void spludwick_leaves_cauldron() {
+ tr[2].call_eachstep = true; /* So that normal procs will continue. */
+}
+
+void give_lute_to_geida() { /* Moved here from Acci. */
+ dixi('Q', 86);
+ points(4);
+ dna.lustie_is_asleep = true;
+ first_show(5);
+ then_show(6); /* He falls asleep... */
+ start_to_close(); /* Not really closing, but we're using the same procedure. */
}
/* "This is all!" */
class unit_timeout_initialize {
- public: unit_timeout_initialize();
+public:
+ unit_timeout_initialize();
};
static unit_timeout_initialize timeout_constructor;
unit_timeout_initialize::unit_timeout_initialize() {
- fillchar(times,sizeof(times),'\0');
+ fillchar(times, sizeof(times), '\0');
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/timeout.h b/engines/avalanche/timeout.h
index ceb8c36dcc..8bb2f8798c 100644
--- a/engines/avalanche/timeout.h
+++ b/engines/avalanche/timeout.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -150,9 +150,9 @@ const integer procspludwick_leaves_cauldron = 40;
const integer procgive_lute_to_geida = 41;
struct timetype {
- longint time_left;
- byte then_where;
- byte what_for;
+ longint time_left;
+ byte then_where;
+ byte what_for;
};
@@ -161,12 +161,12 @@ struct timetype {
#define EXTERN
#endif
-EXTERN array<1,7,timetype> times;
+EXTERN array<1, 7, timetype> times;
#undef EXTERN
#define EXTERN extern
-void set_up_timer(longint howlong, byte whither,byte why);
+void set_up_timer(longint howlong, byte whither, byte why);
void one_tick();
@@ -174,86 +174,86 @@ void lose_timer(byte which);
/*function timer_is_on(which:byte):boolean;*/
- /* Procedures to do things at the end of amounts of time: */
+/* Procedures to do things at the end of amounts of time: */
- void open_drawbridge();
+void open_drawbridge();
- void avaricius_talks();
+void avaricius_talks();
- void urinate();
+void urinate();
- void toilet2();
+void toilet2();
- void bang();
+void bang();
- void bang2();
+void bang2();
- void stairs();
+void stairs();
- void cardiff_survey();
+void cardiff_survey();
- void cardiff_return();
+void cardiff_return();
- void cwytalot_in_herts();
+void cwytalot_in_herts();
- void get_tied_up();
+void get_tied_up();
- void get_tied_up2();
+void get_tied_up2();
- void hang_around();
+void hang_around();
- void hang_around2();
+void hang_around2();
- void after_the_shootemup();
+void after_the_shootemup();
- void jacques_wakes_up();
+void jacques_wakes_up();
- void naughty_duke();
+void naughty_duke();
- void naughty_duke2();
+void naughty_duke2();
- void naughty_duke3();
+void naughty_duke3();
- void jump();
+void jump();
- void crapulus_says_splud_out();
+void crapulus_says_splud_out();
- void buydrinks();
+void buydrinks();
- void buywine();
+void buywine();
- void callsguards();
+void callsguards();
- void greetsmonk();
+void greetsmonk();
- void fall_down_oubliette();
+void fall_down_oubliette();
- void meet_avaroid();
+void meet_avaroid();
- void rise_up_oubliette();
+void rise_up_oubliette();
- void robin_hood_and_geida();
+void robin_hood_and_geida();
- void robin_hood_and_geida_talk();
+void robin_hood_and_geida_talk();
- void avalot_returns();
+void avalot_returns();
- void avvy_sit_down();
+void avvy_sit_down();
- void ghost_room_phew();
+void ghost_room_phew();
- void arkata_shouts();
+void arkata_shouts();
- void winning();
+void winning();
- void avalot_falls();
+void avalot_falls();
- void spludwick_goes_to_cauldron();
+void spludwick_goes_to_cauldron();
- void spludwick_leaves_cauldron();
+void spludwick_leaves_cauldron();
- void give_lute_to_geida();
+void give_lute_to_geida();
- } // End of namespace Avalanche.
+} // End of namespace Avalanche.
#endif \ No newline at end of file
diff --git a/engines/avalanche/travel.cpp b/engines/avalanche/travel.cpp
index a9117c2e74..84b6f04ed7 100644
--- a/engines/avalanche/travel.cpp
+++ b/engines/avalanche/travel.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,63 +30,65 @@
namespace Avalanche {
-integer gd,gm;
+integer gd, gm;
-void zoomout(integer x,integer y)
-{
- integer x1,y1,x2,y2;
- byte fv;
-;
- setcolor(white); setwritemode(xorput);
- setlinestyle(dottedln,0,1);
+void zoomout(integer x, integer y) {
+ integer x1, y1, x2, y2;
+ byte fv;
+ ;
+ setcolor(white);
+ setwritemode(xorput);
+ setlinestyle(dottedln, 0, 1);
- for( fv=1; fv <= 20; fv ++)
- {;
- x1=x-(x / 20)*fv;
- y1=y-((y-10) / 20)*fv;
- x2=x+(((639-x) / 20)*fv);
- y2=y+(((161-y) / 20)*fv);
+ for (fv = 1; fv <= 20; fv ++) {
+ ;
+ x1 = x - (x / 20) * fv;
+ y1 = y - ((y - 10) / 20) * fv;
+ x2 = x + (((639 - x) / 20) * fv);
+ y2 = y + (((161 - y) / 20) * fv);
- rectangle(x1,y1,x2,y2);
- delay(17);
- rectangle(x1,y1,x2,y2);
- }
+ rectangle(x1, y1, x2, y2);
+ delay(17);
+ rectangle(x1, y1, x2, y2);
+ }
}
-void zoomin(integer x,integer y)
-{
- integer x1,y1,x2,y2;
- byte fv;
-;
- setcolor(white); setwritemode(xorput);
- setlinestyle(dottedln,0,1);
+void zoomin(integer x, integer y) {
+ integer x1, y1, x2, y2;
+ byte fv;
+ ;
+ setcolor(white);
+ setwritemode(xorput);
+ setlinestyle(dottedln, 0, 1);
- for( fv=20; fv >= 1; fv --)
- {;
- x1=x-(x / 20)*fv;
- y1=y-((y-10) / 20)*fv;
- x2=x+(((639-x) / 20)*fv);
- y2=y+(((161-y) / 20)*fv);
+ for (fv = 20; fv >= 1; fv --) {
+ ;
+ x1 = x - (x / 20) * fv;
+ y1 = y - ((y - 10) / 20) * fv;
+ x2 = x + (((639 - x) / 20) * fv);
+ y2 = y + (((161 - y) / 20) * fv);
- rectangle(x1,y1,x2,y2);
- delay(17);
- rectangle(x1,y1,x2,y2);
- }
+ rectangle(x1, y1, x2, y2);
+ delay(17);
+ rectangle(x1, y1, x2, y2);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- zoomout(177,77);
- zoomout(7,31);
- zoomout(577,124);
- zoomout(320,85);
- zoomin(177,77);
- zoomin(7,31);
- zoomin(577,124);
- zoomin(320,85);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ zoomout(177, 77);
+ zoomout(7, 31);
+ zoomout(577, 124);
+ zoomout(320, 85);
+ zoomin(177, 77);
+ zoomin(7, 31);
+ zoomin(577, 124);
+ zoomin(320, 85);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/trip.cpp b/engines/avalanche/trip.cpp
index 867ea344bc..8ef57c591a 100644
--- a/engines/avalanche/trip.cpp
+++ b/engines/avalanche/trip.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -51,115 +51,187 @@ namespace Avalanche {
/* Description: Write a array of colors in a vertical line. The current */
/* merge setting is used to control the combining of bits. */
/* */
- void gpwtcol(void* buf, integer n) /* Cedola */
- {; /*
+void gpwtcol(void *buf, integer n) { /* Cedola */
+ ; /*
inline
($1E/$A1/GDCUR_Y/$D1/$E0/$D1/$E0/$03/$06/GDCUR_Y/$05/$A000/$8E/$C0/$8B/$3E/
GDCUR_X/$8B/$CF/$D1/$EF/$D1/$EF/$D1/$EF/$BA/$03CE/$8A/$26/GDMERGE/$B0/$03/
$EF/$B8/$0205/$EF/$B0/$08/$EE/$42/$B0/$80/$80/$E1/$07/$D2/$C8/$EE/$8B/$4E/
$04/$C5/$76/$06/$8A/$24/$46/$26/$8A/$1D/$26/$88/$25/$83/$C7/$50/$E2/$F2/
$B0/$FF/$EE/$4A/$B8/>$05/$EF/$B8/>$03/$EF/$1F); */
- }
+}
-void loadtrip()
-{
- untyped_file inf;
-;
- assign(inf,"t:avvy.trp"); reset(inf,1);
- seek(inf,0x27);
- blockread(inf,pozzes,sizeof(pozzes));
- blockread(inf,blue3,sizeof(blue3)); close(inf);
+void loadtrip() {
+ untyped_file inf;
+ ;
+ assign(inf, "t:avvy.trp");
+ reset(inf, 1);
+ seek(inf, 0x27);
+ blockread(inf, pozzes, sizeof(pozzes));
+ blockread(inf, blue3, sizeof(blue3));
+ close(inf);
}
-void plot(word count, integer ox,integer oy) /* orig x & y. Page is always 1. */
-{
- byte x,y,len;
-;
- do {
- len=blue3[count]; if (len==177) return;
- x=blue3[count+1]; y=blue3[count+2]; count += 3;
- {;
- gdcur_x=x+ox; gdcur_y=y+oy;
- /* fiddle xy coords to match page 1 */
- gdcur_y += 205; /* 203 */ gdcur_x -= 128; /* 114 */
- if (gdcur_x<0)
- {; gdcur_x += 640; gdcur_y -= 1; }
- gpwtcol(&blue3[count],len); count += len;
- }
- } while (!false);
+void plot(word count, integer ox, integer oy) { /* orig x & y. Page is always 1. */
+ byte x, y, len;
+ ;
+ do {
+ len = blue3[count];
+ if (len == 177) return;
+ x = blue3[count + 1];
+ y = blue3[count + 2];
+ count += 3;
+ {
+ ;
+ gdcur_x = x + ox;
+ gdcur_y = y + oy;
+ /* fiddle xy coords to match page 1 */
+ gdcur_y += 205; /* 203 */ gdcur_x -= 128; /* 114 */
+ if (gdcur_x < 0) {
+ ;
+ gdcur_x += 640;
+ gdcur_y -= 1;
+ }
+ gpwtcol(&blue3[count], len);
+ count += len;
+ }
+ } while (!false);
}
-void boundscheck()
-{;
- if (dna.uy>123) dna.uy=123;
- if (dna.uy<10) dna.uy=10;
- if (dna.ux<5) dna.ux=5;
- if (dna.ux>600) dna.ux=600;
+void boundscheck() {
+ ;
+ if (dna.uy > 123) dna.uy = 123;
+ if (dna.uy < 10) dna.uy = 10;
+ if (dna.ux < 5) dna.ux = 5;
+ if (dna.ux > 600) dna.ux = 600;
}
-void budge()
-{;
- if (set::of(up,ul,ur, eos).has(dna.rw)) dna.uy -= 3;
- if (set::of(down,dl,dr, eos).has(dna.rw)) dna.uy += 3;
- if (set::of(left,ul,dl, eos).has(dna.rw)) dna.ux -= 5;
- if (set::of(right,ur,dr, eos).has(dna.rw)) dna.ux += 5;
+void budge() {
+ ;
+ if (set::of(up, ul, ur, eos).has(dna.rw)) dna.uy -= 3;
+ if (set::of(down, dl, dr, eos).has(dna.rw)) dna.uy += 3;
+ if (set::of(left, ul, dl, eos).has(dna.rw)) dna.ux -= 5;
+ if (set::of(right, ur, dr, eos).has(dna.rw)) dna.ux += 5;
- boundscheck();
+ boundscheck();
- if (dna.rw>0)
- {;
- anim += 1; if (anim==7) anim=1;
- }
+ if (dna.rw > 0) {
+ ;
+ anim += 1;
+ if (anim == 7) anim = 1;
+ }
}
-void tripkey(char dir)
-{;
- if (cw!=177) return;
- {
- dnatype& with = dna;
- ;
- switch (dir) {
- case 'H': if (with.rw!=up) {; with.rw=up; ww=up; } else with.rw=0; break;
- case 'P': if (with.rw!=down) {; with.rw=down; ww=down; } else with.rw=0; break;
- case 'K': if (with.rw!=left) {; with.rw=left; ww=left; } else with.rw=0; break;
- case 'M': if (with.rw!=right) {; with.rw=right; ww=right; } else with.rw=0; break;
- case 'I': if (with.rw!=ur) {; with.rw=ur; ww=right; } else with.rw=0; break;
- case 'Q': if (with.rw!=dr) {; with.rw=dr; ww=right; } else with.rw=0; break;
- case 'O': if (with.rw!=dl) {; with.rw=dl; ww=left; } else with.rw=0; break;
- case 'G': if (with.rw!=ul) {; with.rw=ul; ww=left; } else with.rw=0; break;
- }
- if (with.rw==0)
- {;
- ux=ppos[0][0]; uy=ppos[0][1]; anim -= 1;
- if (anim==0) anim=6;
- }
- }
+void tripkey(char dir) {
+ ;
+ if (cw != 177) return;
+ {
+ dnatype &with = dna;
+ ;
+ switch (dir) {
+ case 'H':
+ if (with.rw != up) {
+ ;
+ with.rw = up;
+ ww = up;
+ } else with.rw = 0;
+ break;
+ case 'P':
+ if (with.rw != down) {
+ ;
+ with.rw = down;
+ ww = down;
+ } else with.rw = 0;
+ break;
+ case 'K':
+ if (with.rw != left) {
+ ;
+ with.rw = left;
+ ww = left;
+ } else with.rw = 0;
+ break;
+ case 'M':
+ if (with.rw != right) {
+ ;
+ with.rw = right;
+ ww = right;
+ } else with.rw = 0;
+ break;
+ case 'I':
+ if (with.rw != ur) {
+ ;
+ with.rw = ur;
+ ww = right;
+ } else with.rw = 0;
+ break;
+ case 'Q':
+ if (with.rw != dr) {
+ ;
+ with.rw = dr;
+ ww = right;
+ } else with.rw = 0;
+ break;
+ case 'O':
+ if (with.rw != dl) {
+ ;
+ with.rw = dl;
+ ww = left;
+ } else with.rw = 0;
+ break;
+ case 'G':
+ if (with.rw != ul) {
+ ;
+ with.rw = ul;
+ ww = left;
+ } else with.rw = 0;
+ break;
+ }
+ if (with.rw == 0) {
+ ;
+ ux = ppos[0][0];
+ uy = ppos[0][1];
+ anim -= 1;
+ if (anim == 0) anim = 6;
+ }
+ }
}
-void trippancy()
-{;
- if ((dna.rw==0) || (cw!=177) || (! dropsok)) return;
- r.ax=11; intr(0x33,r);
- setactivepage(1); off();
- if (ppos[0][1]!=-177)
- {;
- putimage(ppos[0][0],ppos[0][1],replace[0],0);
- }
-
- getimage(dna.ux,dna.uy,dna.ux+xw,dna.uy+yw,replace[0]);
- ppos[0][0]=dna.ux; ppos[0][1]=dna.uy;
-
- plot(pozzes[anim*4+dna.ww-4],dna.ux,dna.uy);
-
- { void& with = r; if ((cx==0) && (dx==0)) on();}
- getimage(dna.ux-margin,dna.uy-margin,dna.ux+xw+margin,dna.uy+yw+margin,copier);
- setactivepage(0); off(); putimage(dna.ux-margin,dna.uy-margin,copier,0); on();
-
- {
- void& with = mouths[0]; ; x=dna.ux+20; y=dna.uy; }
-
- budge();
+void trippancy() {
+ ;
+ if ((dna.rw == 0) || (cw != 177) || (! dropsok)) return;
+ r.ax = 11;
+ intr(0x33, r);
+ setactivepage(1);
+ off();
+ if (ppos[0][1] != -177) {
+ ;
+ putimage(ppos[0][0], ppos[0][1], replace[0], 0);
+ }
+
+ getimage(dna.ux, dna.uy, dna.ux + xw, dna.uy + yw, replace[0]);
+ ppos[0][0] = dna.ux;
+ ppos[0][1] = dna.uy;
+
+ plot(pozzes[anim * 4 + dna.ww - 4], dna.ux, dna.uy);
+
+ {
+ void &with = r;
+ if ((cx == 0) && (dx == 0)) on();
+ }
+ getimage(dna.ux - margin, dna.uy - margin, dna.ux + xw + margin, dna.uy + yw + margin, copier);
+ setactivepage(0);
+ off();
+ putimage(dna.ux - margin, dna.uy - margin, copier, 0);
+ on();
+
+ {
+ void &with = mouths[0]; ;
+ x = dna.ux + 20;
+ y = dna.uy;
+ }
+
+ budge();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/trip.h b/engines/avalanche/trip.h
index bfb645e3b5..0e55717158 100644
--- a/engines/avalanche/trip.h
+++ b/engines/avalanche/trip.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,17 +30,17 @@
namespace Avalanche {
- void loadtrip();
+void loadtrip();
- void plot(word count, integer ox,integer oy);
+void plot(word count, integer ox, integer oy);
- void boundscheck();
+void boundscheck();
- void budge();
+void budge();
- void tripkey(char dir);
+void tripkey(char dir);
- void trippancy();
+void trippancy();
} // End of namespace Avalanche.
diff --git a/engines/avalanche/trip3.cpp b/engines/avalanche/trip3.cpp
index 1ca78fbf47..4889b264a5 100644
--- a/engines/avalanche/trip3.cpp
+++ b/engines/avalanche/trip3.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -26,7 +26,7 @@
*/
#define __trip3_implementation__
- /* Project Minstrel- Trippancy routines */
+/* Project Minstrel- Trippancy routines */
#include "trip3.h"
@@ -42,22 +42,29 @@ const integer avvy = 1;
const integer test = 177;
struct triprec {
- byte handle; /* who is it? */
- integer x,y; /* current x&y */
- byte xm,ym; /* x&y margins */
- shortint ix,iy; /* inc x&y */
- byte stage; /* animation */
- integer xl,yl; /* x&y length */
- boolean prime; /* true on first move */
- boolean alive; /* true if it moves */
+ byte handle; /* who is it? */
+ integer x, y; /* current x&y */
+ byte xm, ym; /* x&y margins */
+ shortint ix, iy; /* inc x&y */
+ byte stage; /* animation */
+ integer xl, yl; /* x&y length */
+ boolean prime; /* true on first move */
+ boolean alive; /* true if it moves */
};
-array<1,10,triprec> tr;
+array<1, 10, triprec> tr;
byte tramt;
-array<1,20000,byte> blue3;
-array<1,24,word> pozzes;
-
-const integer up = 1; const integer right = 2; const integer down = 3; const integer left = 4; const integer ur = 5; const integer dr = 6; const integer dl = 7; const integer ul = 8;
+array<1, 20000, byte> blue3;
+array<1, 24, word> pozzes;
+
+const integer up = 1;
+const integer right = 2;
+const integer down = 3;
+const integer left = 4;
+const integer ur = 5;
+const integer dr = 6;
+const integer dl = 7;
+const integer ul = 8;
/* */
/* EGA Graphic Primitive for Turbo Pascal 3.01A, Version 01FEB86. */
@@ -66,195 +73,299 @@ const integer up = 1; const integer right = 2; const integer down = 3; const int
/* Description: Write a array of colors in a vertical line. The current */
/* merge setting is used to control the combining of bits. */
/* */
- void gpwtcol(void* buf, integer n) /* Cedola */
- {;
- /* inline
- ($1E/$A1/GDCUR_Y/$D1/$E0/$D1/$E0/$03/$06/GDCUR_Y/$05/$A000/$8E/$C0/$8B/$3E/
- GDCUR_X/$8B/$CF/$D1/$EF/$D1/$EF/$D1/$EF/$BA/$03CE/$8A/$26/GDMERGE/$B0/$03/
- $EF/$B8/$0205/$EF/$B0/$08/$EE/$42/$B0/$80/$80/$E1/$07/$D2/$C8/$EE/$8B/$4E/
- $04/$C5/$76/$06/$8A/$24/$46/$26/$8A/$1D/$26/$88/$25/$83/$C7/$50/$E2/$F2/
- $B0/$FF/$EE/$4A/$B8/>$05/$EF/$B8/>$03/$EF/$1F); */
- }
-
-
-void loadtrip()
-{
- untyped_file inf;
-;
- assign(inf,"t:avvy.trp"); reset(inf,1);
- seek(inf,0x27);
- blockread(inf,pozzes,sizeof(pozzes));
- blockread(inf,blue3,sizeof(blue3)); close(inf);
+void gpwtcol(void *buf, integer n) { /* Cedola */
+ ;
+ /* inline
+ ($1E/$A1/GDCUR_Y/$D1/$E0/$D1/$E0/$03/$06/GDCUR_Y/$05/$A000/$8E/$C0/$8B/$3E/
+ GDCUR_X/$8B/$CF/$D1/$EF/$D1/$EF/$D1/$EF/$BA/$03CE/$8A/$26/GDMERGE/$B0/$03/
+ $EF/$B8/$0205/$EF/$B0/$08/$EE/$42/$B0/$80/$80/$E1/$07/$D2/$C8/$EE/$8B/$4E/
+ $04/$C5/$76/$06/$8A/$24/$46/$26/$8A/$1D/$26/$88/$25/$83/$C7/$50/$E2/$F2/
+ $B0/$FF/$EE/$4A/$B8/>$05/$EF/$B8/>$03/$EF/$1F); */
+}
+
+
+void loadtrip() {
+ untyped_file inf;
+ ;
+ assign(inf, "t:avvy.trp");
+ reset(inf, 1);
+ seek(inf, 0x27);
+ blockread(inf, pozzes, sizeof(pozzes));
+ blockread(inf, blue3, sizeof(blue3));
+ close(inf);
}
-void enter(byte what_handle, integer xx,integer yy,integer lx,integer ly, byte mmx,byte mmy,byte st)
-{;
- tramt += 1;
- {
- triprec& with = tr[tramt];
- ;
- with.handle=what_handle;
- with.ix=0; with.iy=0;
- with.x=xx; with.y=yy;
- with.xl=lx; with.yl=ly;
- with.xm=mmx; with.ym=mmy; with.stage=st;
- with.prime=true; with.alive=true;
- }
+void enter(byte what_handle, integer xx, integer yy, integer lx, integer ly, byte mmx, byte mmy, byte st) {
+ ;
+ tramt += 1;
+ {
+ triprec &with = tr[tramt];
+ ;
+ with.handle = what_handle;
+ with.ix = 0;
+ with.iy = 0;
+ with.x = xx;
+ with.y = yy;
+ with.xl = lx;
+ with.yl = ly;
+ with.xm = mmx;
+ with.ym = mmy;
+ with.stage = st;
+ with.prime = true;
+ with.alive = true;
+ }
}
-void plot(byte stage, integer ox,integer oy) /* orig x & y. Page is always 1/UNSEEN. */
-{
- byte x,y,len; word count;
-;
- count=pozzes[stage];
- do {
- len=blue3[count]; if (len==177) return;
- x=blue3[count+1]; y=blue3[count+2]; count += 3;
- {;
- gdcur_x=x+ox; gdcur_y=y+oy;
- /* fiddle xy coords to match page 1 */
- gdcur_y += 205; /* 203 */ gdcur_x -= 128; /* 114 */
- if (gdcur_x<0)
- {; gdcur_x += 640; gdcur_y -= 1; }
- gpwtcol(&blue3[count],len); count += len;
- }
- } while (!false);
+void plot(byte stage, integer ox, integer oy) { /* orig x & y. Page is always 1/UNSEEN. */
+ byte x, y, len;
+ word count;
+ ;
+ count = pozzes[stage];
+ do {
+ len = blue3[count];
+ if (len == 177) return;
+ x = blue3[count + 1];
+ y = blue3[count + 2];
+ count += 3;
+ {
+ ;
+ gdcur_x = x + ox;
+ gdcur_y = y + oy;
+ /* fiddle xy coords to match page 1 */
+ gdcur_y += 205; /* 203 */ gdcur_x -= 128; /* 114 */
+ if (gdcur_x < 0) {
+ ;
+ gdcur_x += 640;
+ gdcur_y -= 1;
+ }
+ gpwtcol(&blue3[count], len);
+ count += len;
+ }
+ } while (!false);
}
-void trippancy()
-{
- byte fv; pointer p,saved1,saved2; word s; array<1,10,pointer> q;
- boolean allstill;
-;
- if ((cw!=177) || (! dropsok) || keypressed()) return;
-
- /* Do the Avvy Walk */
-
- switch (dna.rw) {
- case up: budge(avvy, 0,-3,anim*4-3); break;
- case down: budge(avvy, 0, 3,anim*4-1); break;
- case right: budge(avvy, 5, 0,anim*4-2); break;
- case left: budge(avvy,-5, 0,anim*4 ); break;
- case ul: budge(avvy,-5,-3,anim*4 ); break;
- case dl: budge(avvy,-5, 3,anim*4 ); break;
- case ur: budge(avvy, 5,-3,anim*4-2); break;
- case dr: budge(avvy, 5, 3,anim*4-2); break;
- }
-
- for( fv=1; fv <= tramt; fv ++) { triprec& with = tr[fv]; boundscheck(with.x,with.y,with.xm,with.ym);}
-
- allstill=true;
- for( fv=1; fv <= tramt; fv ++)
- { triprec& with = tr[fv];
- if (((with.alive) && (! ((with.ix==0) && (with.iy==0)))) || with.prime) allstill=false;}
- if (allstill) return;
-
- if (dna.rw>0)
- {;
- anim += 1; if (anim==7) anim=1;
- }
-
- /* Trippancy Step 1 - Grab moon array of unmargined sprites (phew) */
- mark(saved1);
- setactivepage(1); off();
- for( fv=1; fv <= tramt; fv ++)
- {
- triprec& with = tr[fv];
- ;
- s=imagesize(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym);
- getmem(q[fv],s); getimage(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym,q[fv]);
- }
- /* Step 2 - Plot sprites on 1/UNSEEN */
- for( fv=1; fv <= tramt; fv ++)
- {
- triprec& with = tr[fv];
- ;
- plot(with.stage,with.x,with.y);
- }
- /* Step 3 - Copy all eligible from 1/UNSEEN to 0/SEEN */
- mark(saved2);
- for( fv=1; fv <= tramt; fv ++)
- { triprec& with = tr[fv];
- if (((with.alive) && (! ((with.ix==0) && (with.iy==0)))) || with.prime)
- {;
- s=imagesize(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym);
- getmem(p,s);
- setactivepage(1); getimage(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym,p);
- setactivepage(0); putimage(with.x-with.xm,with.y-with.ym,p,0);
- release(saved2); with.prime=false;
- }}
- /* Step 4 - Unplot sprites from 1/UNSEEN */
- setactivepage(1);
- for( fv=1; fv <= tramt; fv ++)
- {
- triprec& with = tr[fv];
- ;
- putimage(with.x-with.xm,with.y-with.ym,q[fv],0);
- if (with.ix!=0) with.x=with.x+with.ix;
- if (with.iy!=0) with.y=with.y+with.iy;
- with.ix=0; with.iy=0;
- if (with.handle==avvy) {
- dnatype& with1 = dna; ; ux=with.x; uy=with.y; }
- }
- on(); release(saved1);
- for( fv=1; fv <= tramt; fv ++) /* synch xy coords of mouths */
- {
- triprec& with = tr[fv];
- ; mouths[fv].x=with.x+20; mouths[fv].y=with.y; }
-
- setactivepage(0);
+void trippancy() {
+ byte fv;
+ pointer p, saved1, saved2;
+ word s;
+ array<1, 10, pointer> q;
+ boolean allstill;
+ ;
+ if ((cw != 177) || (! dropsok) || keypressed()) return;
+
+ /* Do the Avvy Walk */
+
+ switch (dna.rw) {
+ case up:
+ budge(avvy, 0, -3, anim * 4 - 3);
+ break;
+ case down:
+ budge(avvy, 0, 3, anim * 4 - 1);
+ break;
+ case right:
+ budge(avvy, 5, 0, anim * 4 - 2);
+ break;
+ case left:
+ budge(avvy, -5, 0, anim * 4);
+ break;
+ case ul:
+ budge(avvy, -5, -3, anim * 4);
+ break;
+ case dl:
+ budge(avvy, -5, 3, anim * 4);
+ break;
+ case ur:
+ budge(avvy, 5, -3, anim * 4 - 2);
+ break;
+ case dr:
+ budge(avvy, 5, 3, anim * 4 - 2);
+ break;
+ }
+
+ for (fv = 1; fv <= tramt; fv ++) {
+ triprec &with = tr[fv];
+ boundscheck(with.x, with.y, with.xm, with.ym);
+ }
+
+ allstill = true;
+ for (fv = 1; fv <= tramt; fv ++) {
+ triprec &with = tr[fv];
+ if (((with.alive) && (!((with.ix == 0) && (with.iy == 0)))) || with.prime) allstill = false;
+ }
+ if (allstill) return;
+
+ if (dna.rw > 0) {
+ ;
+ anim += 1;
+ if (anim == 7) anim = 1;
+ }
+
+ /* Trippancy Step 1 - Grab moon array of unmargined sprites (phew) */
+ mark(saved1);
+ setactivepage(1);
+ off();
+ for (fv = 1; fv <= tramt; fv ++) {
+ triprec &with = tr[fv];
+ ;
+ s = imagesize(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym);
+ getmem(q[fv], s);
+ getimage(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym, q[fv]);
+ }
+ /* Step 2 - Plot sprites on 1/UNSEEN */
+ for (fv = 1; fv <= tramt; fv ++) {
+ triprec &with = tr[fv];
+ ;
+ plot(with.stage, with.x, with.y);
+ }
+ /* Step 3 - Copy all eligible from 1/UNSEEN to 0/SEEN */
+ mark(saved2);
+ for (fv = 1; fv <= tramt; fv ++) {
+ triprec &with = tr[fv];
+ if (((with.alive) && (!((with.ix == 0) && (with.iy == 0)))) || with.prime) {
+ ;
+ s = imagesize(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym);
+ getmem(p, s);
+ setactivepage(1);
+ getimage(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym, p);
+ setactivepage(0);
+ putimage(with.x - with.xm, with.y - with.ym, p, 0);
+ release(saved2);
+ with.prime = false;
+ }
+ }
+ /* Step 4 - Unplot sprites from 1/UNSEEN */
+ setactivepage(1);
+ for (fv = 1; fv <= tramt; fv ++) {
+ triprec &with = tr[fv];
+ ;
+ putimage(with.x - with.xm, with.y - with.ym, q[fv], 0);
+ if (with.ix != 0) with.x = with.x + with.ix;
+ if (with.iy != 0) with.y = with.y + with.iy;
+ with.ix = 0;
+ with.iy = 0;
+ if (with.handle == avvy) {
+ dnatype &with1 = dna; ;
+ ux = with.x;
+ uy = with.y;
+ }
+ }
+ on();
+ release(saved1);
+ for (fv = 1; fv <= tramt; fv ++) { /* synch xy coords of mouths */
+ triprec &with = tr[fv];
+ ;
+ mouths[fv].x = with.x + 20;
+ mouths[fv].y = with.y;
+ }
+
+ setactivepage(0);
}
-void budge(byte who, shortint xx,shortint yy, byte frame) /* Moving & animation controller */
-{
- byte fv;
-;
- for( fv=1; fv <= tramt; fv ++)
- { triprec& with = tr[fv];
- if (with.handle==who)
- {;
- with.ix=xx; with.iy=yy;
- with.stage=frame;
- }}
+void budge(byte who, shortint xx, shortint yy, byte frame) { /* Moving & animation controller */
+ byte fv;
+ ;
+ for (fv = 1; fv <= tramt; fv ++) {
+ triprec &with = tr[fv];
+ if (with.handle == who) {
+ ;
+ with.ix = xx;
+ with.iy = yy;
+ with.stage = frame;
+ }
+ }
}
-void tripkey(char dir)
-{;
- if (cw!=177) return;
- {
- dnatype& with = dna;
- ;
- switch (dir) {
- case 'H': if (with.rw!=up) {; with.rw=up; ww=up; } else with.rw=0; break;
- case 'P': if (with.rw!=down) {; with.rw=down; ww=down; } else with.rw=0; break;
- case 'K': if (with.rw!=left) {; with.rw=left; ww=left; } else with.rw=0; break;
- case 'M': if (with.rw!=right) {; with.rw=right; ww=right; } else with.rw=0; break;
- case 'I': if (with.rw!=ur) {; with.rw=ur; ww=right; } else with.rw=0; break;
- case 'Q': if (with.rw!=dr) {; with.rw=dr; ww=right; } else with.rw=0; break;
- case 'O': if (with.rw!=dl) {; with.rw=dl; ww=left; } else with.rw=0; break;
- case 'G': if (with.rw!=ul) {; with.rw=ul; ww=left; } else with.rw=0; break;
- }
- if (with.rw==0)
- {;
- ux=ppos[0][0]; uy=ppos[0][1]; anim -= 1;
- if (anim==0) anim=6;
- }
- }
+void tripkey(char dir) {
+ ;
+ if (cw != 177) return;
+ {
+ dnatype &with = dna;
+ ;
+ switch (dir) {
+ case 'H':
+ if (with.rw != up) {
+ ;
+ with.rw = up;
+ ww = up;
+ } else with.rw = 0;
+ break;
+ case 'P':
+ if (with.rw != down) {
+ ;
+ with.rw = down;
+ ww = down;
+ } else with.rw = 0;
+ break;
+ case 'K':
+ if (with.rw != left) {
+ ;
+ with.rw = left;
+ ww = left;
+ } else with.rw = 0;
+ break;
+ case 'M':
+ if (with.rw != right) {
+ ;
+ with.rw = right;
+ ww = right;
+ } else with.rw = 0;
+ break;
+ case 'I':
+ if (with.rw != ur) {
+ ;
+ with.rw = ur;
+ ww = right;
+ } else with.rw = 0;
+ break;
+ case 'Q':
+ if (with.rw != dr) {
+ ;
+ with.rw = dr;
+ ww = right;
+ } else with.rw = 0;
+ break;
+ case 'O':
+ if (with.rw != dl) {
+ ;
+ with.rw = dl;
+ ww = left;
+ } else with.rw = 0;
+ break;
+ case 'G':
+ if (with.rw != ul) {
+ ;
+ with.rw = ul;
+ ww = left;
+ } else with.rw = 0;
+ break;
+ }
+ if (with.rw == 0) {
+ ;
+ ux = ppos[0][0];
+ uy = ppos[0][1];
+ anim -= 1;
+ if (anim == 0) anim = 6;
+ }
+ }
}
-void boundscheck(integer& x,integer& y, byte xm,byte ym)
-{;
- if (y>127-ym) y=127-ym; if (y<ym+10) y=ym+10;
- if (x<xm) x=xm; if (x>640-xm) x=640-xm;
+void boundscheck(integer &x, integer &y, byte xm, byte ym) {
+ ;
+ if (y > 127 - ym) y = 127 - ym;
+ if (y < ym + 10) y = ym + 10;
+ if (x < xm) x = xm;
+ if (x > 640 - xm) x = 640 - xm;
}
class unit_trip3_initialize {
- public: unit_trip3_initialize();
+public:
+ unit_trip3_initialize();
};
static unit_trip3_initialize trip3_constructor;
-unit_trip3_initialize::unit_trip3_initialize() {; /* init portion of Trip3 */
- tramt=0;
+unit_trip3_initialize::unit_trip3_initialize() {
+ ; /* init portion of Trip3 */
+ tramt = 0;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/trip3.h b/engines/avalanche/trip3.h
index 4a5f6fb9d0..01428081d6 100644
--- a/engines/avalanche/trip3.h
+++ b/engines/avalanche/trip3.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,18 +33,18 @@
namespace Avalanche {
- void loadtrip();
+void loadtrip();
- void boundscheck(integer& x,integer& y, byte xm,byte ym);
+void boundscheck(integer &x, integer &y, byte xm, byte ym);
- void budge(byte who, shortint xx,shortint yy, byte frame); /* Moving & animation controller */
+void budge(byte who, shortint xx, shortint yy, byte frame); /* Moving & animation controller */
- void tripkey(char dir);
+void tripkey(char dir);
- void trippancy();
+void trippancy();
- void enter(byte what_handle, integer xx,integer yy,integer lx,integer ly, byte mmx,byte mmy,byte st);
+void enter(byte what_handle, integer xx, integer yy, integer lx, integer ly, byte mmx, byte mmy, byte st);
- } // End of namespace Avalanche.
+} // End of namespace Avalanche.
#endif \ No newline at end of file
diff --git a/engines/avalanche/trip42.cpp b/engines/avalanche/trip42.cpp
index a587dc1e7e..04acf36f74 100644
--- a/engines/avalanche/trip42.cpp
+++ b/engines/avalanche/trip42.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,7 +33,7 @@
TRIP42 Trippancy IV point 2 - "Trip Oop 2" */
#define __trip42_implementation__
- /* Trippancy IV.2 (Trip Oop) */
+/* Trippancy IV.2 (Trip Oop) */
#include "trip42.h"
@@ -76,403 +76,584 @@ begin;
end;
end; */
-void loadtrip()
-{
- byte gm;
-;
- for( gm=1; gm <= numtr; gm ++) tr[gm].original();
- tr[1].init(0);
-}
-
-byte checkfeet(integer x1,integer x2,integer oy,integer y, byte yl)
-{
- byte a,c; integer fv,ff;
-byte checkfeet_result;
-;
- a=0; setactivepage(2); if (x1<0) x1=0; if (x2>639) x2=639;
- if (oy<y)
- for( fv=x1; fv <= x2; fv ++)
- for( ff=oy+yl; ff <= y+yl; ff ++)
- {;
- c=getpixel(fv,ff);
- if (c>a) a=c;
- } else
- for( fv=x1; fv <= x2; fv ++)
- for( ff=y+yl; ff <= oy+yl; ff ++)
- {;
- c=getpixel(fv,ff);
- if (c>a) a=c;
- }
- checkfeet_result=a; setactivepage(1-cp);
-return checkfeet_result;
+void loadtrip() {
+ byte gm;
+ ;
+ for (gm = 1; gm <= numtr; gm ++) tr[gm].original();
+ tr[1].init(0);
+}
+
+byte checkfeet(integer x1, integer x2, integer oy, integer y, byte yl) {
+ byte a, c;
+ integer fv, ff;
+ byte checkfeet_result;
+ ;
+ a = 0;
+ setactivepage(2);
+ if (x1 < 0) x1 = 0;
+ if (x2 > 639) x2 = 639;
+ if (oy < y)
+ for (fv = x1; fv <= x2; fv ++)
+ for (ff = oy + yl; ff <= y + yl; ff ++) {
+ ;
+ c = getpixel(fv, ff);
+ if (c > a) a = c;
+ }
+ else
+ for (fv = x1; fv <= x2; fv ++)
+ for (ff = y + yl; ff <= oy + yl; ff ++) {
+ ;
+ c = getpixel(fv, ff);
+ if (c > a) a = c;
+ }
+ checkfeet_result = a;
+ setactivepage(1 - cp);
+ return checkfeet_result;
}
void touchcol(byte tc);
-static boolean bug;
-
-static void fr(byte a,byte b) {; fliproom(a,b); bug=false; }
-
-void touchcol(byte tc)
-{;
- bug=true; /* j.i.c. */
- switch (dna.room) {
- case 1: fr(2,3); break;
- case 2: {; /* main corridor */
- switch (tc) {
- case 1: fr(3,1); break; /* to the other corridor */
- case 2: fr(2,1); break; /* to this corridor! Fix this later... */
- }
- }
- break;
- case 3: {; /* turn corridor */
- switch (tc) {
- case 1: fr(2,1); break; /* to the other corridor */
- case 2: fr(12,1); break; /* through Spludwick's door */
- }
- }
- break;
- case 12: fr(3,2); break;
- }
- if (bug)
- {;
- display(string('\7')+"Unknown touchcolour ("+strf(tc)+')'+" in "+strf(dna.room)
- +'.'); tr[1].bounce();
- }
-}
-
-triptype* triptype::init(byte spritenum)
-{
- integer gd,gm; word s; untyped_file f; varying_string<2> xx; byte sort,n;
- word bigsize; pointer p,q;
-;
- str(spritenum,xx); assign(f,string("c:\\avalot\\sprite")+xx+".avd");
- reset(f,1); seek(f,59);
- blockread(f,a,sizeof(a)); blockread(f,bigsize,2);
- setactivepage(3);
- for( sort=0; sort <= 1; sort ++)
- {;
- mark(q); getmem(p,bigsize);
- blockread(f,p,bigsize);
- off; putimage(0,0,p,0); release(q); n=1;
- { adxtype& with = a;
- for( gm=0; gm <= (with.num / with.seq)-1; gm ++) /* directions */
- for( gd=0; gd <= with.seq-1; gd ++) /* steps */
- {;
- getmem(pic[n][sort],a.size); /* grab the memory */
- getimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl,
- (gm / 2)*(with.xl*6)+gd*with.xl+with.xl-1,(gm % 2)*with.yl+with.yl-1,
- pic[n][sort]); /* grab the pic */
- n += 1;
- }} /*on;*/
- }
- close(f); setactivepage(1-cp);
-
- x=0; y=0; quick=true; visible=false;
-/* for x:=0 to 1 do getmem(behind[x],a.size);*/
- homing=false; ix=0; iy=0; step=0; check_me=a.name=="Avalot";
- count=0;
-return this;
-}
-
-void triptype::original()
-{;
- quick=false;
-}
-
-void triptype::andexor()
-{
- byte picnum; /* Picnum, Picnic, what ye heck */
-;
- picnum=face*a.seq+step+1; off;
- putimage(x,y,pic[picnum][0],andput);
- putimage(x,y,pic[picnum][1],xorput); /*on;*/
-}
-
-void triptype::turn(byte whichway)
-{;
- if (whichway==8) face=0; else face=whichway;
-}
-
-void triptype::appear(integer wx,integer wy, byte wf)
-{;
- x=(wx / 8)*8; y=wy; ox[cp]=wx; oy[cp]=wy; turn(wf);
- visible=true; ix=0; iy=0;
-}
-
-void triptype::walk()
-{
- byte tc; fieldtype r;
-;
- {;
- x1=x-1; y1=y-2; x2=x+a.xl+1; y2=y+a.yl+2;
- }
- getset[1-cp].remember(r);
- ox[cp]=x; oy[cp]=y;
- if (homing) homestep();
- x=x+ix; y=y+iy;
- if (check_me) {;
- tc=checkfeet(x,x+a.xl,oy[cp],y,a.yl);
- if (tc!=0)
- { void& with = magics[tc];
- switch (op) {
- case exclaim: {; bounce(); dixi('x',data); } break;
- case bounces: bounce(); break;
- case transport: fliproom(hi(data),lo(data)); break;
- case unfinished: {;
- bounce();
- display("\7Sorry.\3\rThis place is not avaliable yet!");
- }
- break;
- }}
- }
- count += 1;
- if (((ix!=0) || (iy!=0)) && (count>1))
- {;
- step += 1; if (step==a.seq) step=0; count=0;
- }
-}
-
-void triptype::bounce()
-{; x=ox[cp]; y=oy[cp]; stopwalk(); return; }
-
-void triptype::walkto(integer xx,integer yy)
-{;
- speed(xx-x,yy-y); hx=xx; hy=yy; homing=true;
-}
-
-void triptype::stophoming()
-{;
- homing=false;
-}
-
-void triptype::homestep()
-{
- integer temp;
-;
- if ((hx==x) && (hy==y))
- {; /* touching the target */
- homing=false; return;
- }
- ix=0; iy=0;
- if (hy!=y)
- {;
- temp=hy-y; if (temp>4) iy=4; else if (temp<-4) iy=-4; else iy=temp;
- }
- if (hx!=x)
- {;
- temp=hx-x; if (temp>4) ix=4; else if (temp<-4) ix=-4; else ix=temp;
- }
-}
-
-void triptype::speed(shortint xx,shortint yy)
-{;
- ix=xx; iy=yy;
- if ((ix==0) && (iy==0)) return; /* no movement */
- if (ix==0)
- {; /* No horz movement */
- if (iy<0) turn(up); else turn(down);
- } else
- {;
- if (ix<0) turn(left); else turn(right);
- }
-}
-
-void triptype::stopwalk()
-{;
- ix=0; iy=0; homing=false;
-}
-
-void triptype::chatter()
-{;
- talkx=x+a.xl / 2; talky=y; talkf=a.fgc; talkb=a.bgc;
-}
-
-getsettype* getsettype::init()
-{;
- numleft=0; /* initialise array pointer */
- return this;
-}
-
-void getsettype::remember(fieldtype r)
-{;
- numleft += 1;
- gs[numleft]=r;
-}
-
-void getsettype::recall(fieldtype& r)
-{;
- r=gs[numleft];
- numleft -= 1;
-}
-
-void rwsp(byte t,byte r)
-{
- const integer xs = 3; const integer ys = 1;
-;
- { triptype& with = tr[t]; switch (r) {
- case up: speed( 0,-ys); break; case down: speed( 0, ys); break; case left: speed(-xs, 0); break;
- case right: speed( xs, 0); break; case ul: speed(-xs,-ys); break; case ur: speed( xs,-ys); break;
- case dl: speed(-xs, ys); break; case dr: speed( xs, ys); break;
- }}
-}
-
-void apped(byte trn,byte np)
-{;
- {
- triptype& with = tr[trn];
- ; { void& with1 = peds[np]; appear(with.x-with.a.xl / 2,with.y-with.a.yl,dir);}
- rwsp(trn,tr[trn].face); }
-}
-
-void getback()
-{
- byte fv;
- fieldtype r;
-;
- { getsettype& with = getset[1-cp];
- while (with.numleft>0)
- {;
- recall(r);
- mblit(x1,y1,x2,y2,3,1-cp);
- }}
-}
-
-void trippancy_link()
-{
- byte fv;
-;
- if ((ddm_o.menunow) | ontoolbar | seescroll | (~ alive)) return;
- for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv]; if (with.quick) getback();}
- for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv]; if (with.quick) walk();}
- for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv]; if (with.quick && with.visible) andexor();}
-}
-
-void stopwalking()
-{;
- tr[1].stopwalk(); dna.rw=stopped;
-}
-
-void tripkey(char dir)
-{;
- if (ctrl==cjoy) return;
-
- { triptype& with = tr[1];
- {;
- switch (dir) {
- case 'H': if (rw!=up)
- {; rw=up; rwsp(1,rw); } else stopwalking();
- break;
- case 'P': if (rw!=down)
- {; rw=down; rwsp(1,rw); } else stopwalking();
- break;
- case 'K': if (rw!=left)
- {; rw=left; rwsp(1,rw); } else stopwalking();
- break;
- case 'M': if (rw!=right)
- {; rw=right; rwsp(1,rw); } else stopwalking();
- break;
- case 'I': if (rw!=ur)
- {; rw=ur; rwsp(1,rw); } else stopwalking();
- break;
- case 'Q': if (rw!=dr)
- {; rw=dr; rwsp(1,rw); } else stopwalking();
- break;
- case 'O': if (rw!=dl)
- {; rw=dl; rwsp(1,rw); } else stopwalking();
- break;
- case 'G': if (rw!=ul)
- {; rw=ul; rwsp(1,rw); } else stopwalking();
- break;
- case 'L': stopwalking(); break;
- }
- }}
-}
-
-void getsetclear()
-{
- byte fv;
-;
- for( fv=0; fv <= 1; fv ++) getset[fv].init();
-}
-
-void fliproom(byte room,byte ped)
-{;
- dusk; getsetclear(); enterroom(room); apped(1,ped);
- oldrw=dna.rw; dna.rw=tr[1].face; showrw; dawn;
-}
-
-boolean infield(byte x) /* returns True if you're within field "x" */
-{
- integer yy;
-boolean infield_result;
-;
- { void& with = fields[x]; {
- triptype& with = tr[1];
- ;
- yy=with.y+with.a.yl;
- infield_result=(with.x>=x1) && (with.x<=x2) && (yy>=y1) && (yy<=y2);
- }}
-return infield_result;
-}
-
-boolean neardoor() /* returns True if you're near a door! */
-{
- integer ux,uy; byte fv; boolean nd;
-boolean neardoor_result;
-;
- if (numfields<9)
- {; /* there ARE no doors here! */
- neardoor_result=false;
- return neardoor_result;
- }
- {
- triptype& with = tr[1];
- ;
- ux=with.x;
- uy=with.y+with.a.yl;
- } nd=false;
- for( fv=9; fv <= numfields; fv ++)
- {
- void& with = fields[fv];
- ;
- if ((ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2)) nd=true;
- }
- neardoor_result=nd;
-return neardoor_result;
-}
-
-void readstick()
-{
- byte jw;
-;
- if (ctrl==ckey) return;
-
- jw=joyway;
-
- {
- triptype& with = tr[1];
- ;
- if (jw==stopped) stopwalking(); else
- {;
- dna.rw=jw; rwsp(1,dna.rw);
- }
- }
-
- if (jw!=oldjw)
- {;
- showrw;
- oldjw=jw;
- }
+static boolean bug;
+
+static void fr(byte a, byte b) {
+ ;
+ fliproom(a, b);
+ bug = false;
+}
+
+void touchcol(byte tc) {
+ ;
+ bug = true; /* j.i.c. */
+ switch (dna.room) {
+ case 1:
+ fr(2, 3);
+ break;
+ case 2: {
+ ; /* main corridor */
+ switch (tc) {
+ case 1:
+ fr(3, 1);
+ break; /* to the other corridor */
+ case 2:
+ fr(2, 1);
+ break; /* to this corridor! Fix this later... */
+ }
+ }
+ break;
+ case 3: {
+ ; /* turn corridor */
+ switch (tc) {
+ case 1:
+ fr(2, 1);
+ break; /* to the other corridor */
+ case 2:
+ fr(12, 1);
+ break; /* through Spludwick's door */
+ }
+ }
+ break;
+ case 12:
+ fr(3, 2);
+ break;
+ }
+ if (bug) {
+ ;
+ display(string('\7') + "Unknown touchcolour (" + strf(tc) + ')' + " in " + strf(dna.room)
+ + '.');
+ tr[1].bounce();
+ }
+}
+
+triptype *triptype::init(byte spritenum) {
+ integer gd, gm;
+ word s;
+ untyped_file f;
+ varying_string<2> xx;
+ byte sort, n;
+ word bigsize;
+ pointer p, q;
+ ;
+ str(spritenum, xx);
+ assign(f, string("c:\\avalot\\sprite") + xx + ".avd");
+ reset(f, 1);
+ seek(f, 59);
+ blockread(f, a, sizeof(a));
+ blockread(f, bigsize, 2);
+ setactivepage(3);
+ for (sort = 0; sort <= 1; sort ++) {
+ ;
+ mark(q);
+ getmem(p, bigsize);
+ blockread(f, p, bigsize);
+ off;
+ putimage(0, 0, p, 0);
+ release(q);
+ n = 1;
+ {
+ adxtype &with = a;
+ for (gm = 0; gm <= (with.num / with.seq) - 1; gm ++) /* directions */
+ for (gd = 0; gd <= with.seq - 1; gd ++) { /* steps */
+ ;
+ getmem(pic[n][sort], a.size); /* grab the memory */
+ getimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl,
+ (gm / 2) * (with.xl * 6) + gd * with.xl + with.xl - 1, (gm % 2)*with.yl + with.yl - 1,
+ pic[n][sort]); /* grab the pic */
+ n += 1;
+ }
+ } /*on;*/
+ }
+ close(f);
+ setactivepage(1 - cp);
+
+ x = 0;
+ y = 0;
+ quick = true;
+ visible = false;
+ /* for x:=0 to 1 do getmem(behind[x],a.size);*/
+ homing = false;
+ ix = 0;
+ iy = 0;
+ step = 0;
+ check_me = a.name == "Avalot";
+ count = 0;
+ return this;
+}
+
+void triptype::original() {
+ ;
+ quick = false;
+}
+
+void triptype::andexor() {
+ byte picnum; /* Picnum, Picnic, what ye heck */
+ ;
+ picnum = face * a.seq + step + 1;
+ off;
+ putimage(x, y, pic[picnum][0], andput);
+ putimage(x, y, pic[picnum][1], xorput); /*on;*/
+}
+
+void triptype::turn(byte whichway) {
+ ;
+ if (whichway == 8) face = 0;
+ else face = whichway;
+}
+
+void triptype::appear(integer wx, integer wy, byte wf) {
+ ;
+ x = (wx / 8) * 8;
+ y = wy;
+ ox[cp] = wx;
+ oy[cp] = wy;
+ turn(wf);
+ visible = true;
+ ix = 0;
+ iy = 0;
+}
+
+void triptype::walk() {
+ byte tc;
+ fieldtype r;
+ ;
+ {
+ ;
+ x1 = x - 1;
+ y1 = y - 2;
+ x2 = x + a.xl + 1;
+ y2 = y + a.yl + 2;
+ }
+ getset[1 - cp].remember(r);
+ ox[cp] = x;
+ oy[cp] = y;
+ if (homing) homestep();
+ x = x + ix;
+ y = y + iy;
+ if (check_me) {
+ ;
+ tc = checkfeet(x, x + a.xl, oy[cp], y, a.yl);
+ if (tc != 0) {
+ void &with = magics[tc];
+ switch (op) {
+ case exclaim: {
+ ;
+ bounce();
+ dixi('x', data);
+ }
+ break;
+ case bounces:
+ bounce();
+ break;
+ case transport:
+ fliproom(hi(data), lo(data));
+ break;
+ case unfinished: {
+ ;
+ bounce();
+ display("\7Sorry.\3\rThis place is not avaliable yet!");
+ }
+ break;
+ }
+ }
+ }
+ count += 1;
+ if (((ix != 0) || (iy != 0)) && (count > 1)) {
+ ;
+ step += 1;
+ if (step == a.seq) step = 0;
+ count = 0;
+ }
+}
+
+void triptype::bounce() {
+ ;
+ x = ox[cp];
+ y = oy[cp];
+ stopwalk();
+ return;
+}
+
+void triptype::walkto(integer xx, integer yy) {
+ ;
+ speed(xx - x, yy - y);
+ hx = xx;
+ hy = yy;
+ homing = true;
+}
+
+void triptype::stophoming() {
+ ;
+ homing = false;
+}
+
+void triptype::homestep() {
+ integer temp;
+ ;
+ if ((hx == x) && (hy == y)) {
+ ; /* touching the target */
+ homing = false;
+ return;
+ }
+ ix = 0;
+ iy = 0;
+ if (hy != y) {
+ ;
+ temp = hy - y;
+ if (temp > 4) iy = 4;
+ else if (temp < -4) iy = -4;
+ else iy = temp;
+ }
+ if (hx != x) {
+ ;
+ temp = hx - x;
+ if (temp > 4) ix = 4;
+ else if (temp < -4) ix = -4;
+ else ix = temp;
+ }
+}
+
+void triptype::speed(shortint xx, shortint yy) {
+ ;
+ ix = xx;
+ iy = yy;
+ if ((ix == 0) && (iy == 0)) return; /* no movement */
+ if (ix == 0) {
+ ; /* No horz movement */
+ if (iy < 0) turn(up);
+ else turn(down);
+ } else {
+ ;
+ if (ix < 0) turn(left);
+ else turn(right);
+ }
+}
+
+void triptype::stopwalk() {
+ ;
+ ix = 0;
+ iy = 0;
+ homing = false;
+}
+
+void triptype::chatter() {
+ ;
+ talkx = x + a.xl / 2;
+ talky = y;
+ talkf = a.fgc;
+ talkb = a.bgc;
+}
+
+getsettype *getsettype::init() {
+ ;
+ numleft = 0; /* initialise array pointer */
+ return this;
+}
+
+void getsettype::remember(fieldtype r) {
+ ;
+ numleft += 1;
+ gs[numleft] = r;
+}
+
+void getsettype::recall(fieldtype &r) {
+ ;
+ r = gs[numleft];
+ numleft -= 1;
+}
+
+void rwsp(byte t, byte r) {
+ const integer xs = 3;
+ const integer ys = 1;
+ ;
+ {
+ triptype &with = tr[t];
+ switch (r) {
+ case up:
+ speed(0, -ys);
+ break;
+ case down:
+ speed(0, ys);
+ break;
+ case left:
+ speed(-xs, 0);
+ break;
+ case right:
+ speed(xs, 0);
+ break;
+ case ul:
+ speed(-xs, -ys);
+ break;
+ case ur:
+ speed(xs, -ys);
+ break;
+ case dl:
+ speed(-xs, ys);
+ break;
+ case dr:
+ speed(xs, ys);
+ break;
+ }
+ }
+}
+
+void apped(byte trn, byte np) {
+ ;
+ {
+ triptype &with = tr[trn];
+ ;
+ {
+ void &with1 = peds[np];
+ appear(with.x - with.a.xl / 2, with.y - with.a.yl, dir);
+ }
+ rwsp(trn, tr[trn].face);
+ }
+}
+
+void getback() {
+ byte fv;
+ fieldtype r;
+ ;
+ {
+ getsettype &with = getset[1 - cp];
+ while (with.numleft > 0) {
+ ;
+ recall(r);
+ mblit(x1, y1, x2, y2, 3, 1 - cp);
+ }
+ }
+}
+
+void trippancy_link() {
+ byte fv;
+ ;
+ if ((ddm_o.menunow) | ontoolbar | seescroll | (~ alive)) return;
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick) getback();
+ }
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick) walk();
+ }
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick && with.visible) andexor();
+ }
+}
+
+void stopwalking() {
+ ;
+ tr[1].stopwalk();
+ dna.rw = stopped;
+}
+
+void tripkey(char dir) {
+ ;
+ if (ctrl == cjoy) return;
+
+ {
+ triptype &with = tr[1];
+ {
+ ;
+ switch (dir) {
+ case 'H':
+ if (rw != up) {
+ ;
+ rw = up;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'P':
+ if (rw != down) {
+ ;
+ rw = down;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'K':
+ if (rw != left) {
+ ;
+ rw = left;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'M':
+ if (rw != right) {
+ ;
+ rw = right;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'I':
+ if (rw != ur) {
+ ;
+ rw = ur;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'Q':
+ if (rw != dr) {
+ ;
+ rw = dr;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'O':
+ if (rw != dl) {
+ ;
+ rw = dl;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'G':
+ if (rw != ul) {
+ ;
+ rw = ul;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'L':
+ stopwalking();
+ break;
+ }
+ }
+ }
+}
+
+void getsetclear() {
+ byte fv;
+ ;
+ for (fv = 0; fv <= 1; fv ++) getset[fv].init();
+}
+
+void fliproom(byte room, byte ped) {
+ ;
+ dusk;
+ getsetclear();
+ enterroom(room);
+ apped(1, ped);
+ oldrw = dna.rw;
+ dna.rw = tr[1].face;
+ showrw;
+ dawn;
+}
+
+boolean infield(byte x) { /* returns True if you're within field "x" */
+ integer yy;
+ boolean infield_result;
+ ;
+ {
+ void &with = fields[x];
+ {
+ triptype &with = tr[1];
+ ;
+ yy = with.y + with.a.yl;
+ infield_result = (with.x >= x1) && (with.x <= x2) && (yy >= y1) && (yy <= y2);
+ }
+ }
+ return infield_result;
+}
+
+boolean neardoor() { /* returns True if you're near a door! */
+ integer ux, uy;
+ byte fv;
+ boolean nd;
+ boolean neardoor_result;
+ ;
+ if (numfields < 9) {
+ ; /* there ARE no doors here! */
+ neardoor_result = false;
+ return neardoor_result;
+ }
+ {
+ triptype &with = tr[1];
+ ;
+ ux = with.x;
+ uy = with.y + with.a.yl;
+ }
+ nd = false;
+ for (fv = 9; fv <= numfields; fv ++) {
+ void &with = fields[fv];
+ ;
+ if ((ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2)) nd = true;
+ }
+ neardoor_result = nd;
+ return neardoor_result;
+}
+
+void readstick() {
+ byte jw;
+ ;
+ if (ctrl == ckey) return;
+
+ jw = joyway;
+
+ {
+ triptype &with = tr[1];
+ ;
+ if (jw == stopped) stopwalking();
+ else {
+ ;
+ dna.rw = jw;
+ rwsp(1, dna.rw);
+ }
+ }
+
+ if (jw != oldjw) {
+ ;
+ showrw;
+ oldjw = jw;
+ }
}
class unit_trip42_initialize {
- public: unit_trip42_initialize();
+public:
+ unit_trip42_initialize();
};
static unit_trip42_initialize trip42_constructor;
-unit_trip42_initialize::unit_trip42_initialize() {;
- getsetclear();
+unit_trip42_initialize::unit_trip42_initialize() {
+ ;
+ getsetclear();
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/trip42.h b/engines/avalanche/trip42.h
index 644a72190e..69f01c34ac 100644
--- a/engines/avalanche/trip42.h
+++ b/engines/avalanche/trip42.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -40,49 +40,49 @@ namespace Avalanche {
const integer maxgetset = 10;
struct adxtype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
class triptype {
public:
- adxtype a; /* vital statistics */
- byte face,step;
- integer x,y; /* current xy coords */
- array<0,1,integer> ox,oy; /* last xy coords */
- shortint ix,iy; /* amount to move sprite by, each step */
- matrix<1,24,0,1,pointer> pic; /* the pictures themselves */
- boolean quick,visible,homing,check_me;
- integer hx,hy; /* homing x & y coords */
- byte count; /* counts before changing step */
-
- triptype* init(byte spritenum); /* loads & sets up the sprite */
- void original(); /* just sets Quick to false */
- void andexor(); /* drops sprite onto screen */
- void turn(byte whichway); /* turns him round */
- void appear(integer wx,integer wy, byte wf); /* switches him on */
- void bounce(); /* bounces off walls. */
- void walk(); /* prepares for andexor, etc. */
- void walkto(integer xx,integer yy); /* home in on a point */
- void stophoming(); /* self-explanatory */
- void homestep(); /* calculates ix & iy for one homing step */
- void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */
- void stopwalk(); /* Stops the sprite from moving */
- void chatter(); /* Sets up talk vars */
+ adxtype a; /* vital statistics */
+ byte face, step;
+ integer x, y; /* current xy coords */
+ array<0, 1, integer> ox, oy; /* last xy coords */
+ shortint ix, iy; /* amount to move sprite by, each step */
+ matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */
+ boolean quick, visible, homing, check_me;
+ integer hx, hy; /* homing x & y coords */
+ byte count; /* counts before changing step */
+
+ triptype *init(byte spritenum); /* loads & sets up the sprite */
+ void original(); /* just sets Quick to false */
+ void andexor(); /* drops sprite onto screen */
+ void turn(byte whichway); /* turns him round */
+ void appear(integer wx, integer wy, byte wf); /* switches him on */
+ void bounce(); /* bounces off walls. */
+ void walk(); /* prepares for andexor, etc. */
+ void walkto(integer xx, integer yy); /* home in on a point */
+ void stophoming(); /* self-explanatory */
+ void homestep(); /* calculates ix & iy for one homing step */
+ void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */
+ void stopwalk(); /* Stops the sprite from moving */
+ void chatter(); /* Sets up talk vars */
};
class getsettype {
public:
- array<1,maxgetset,fieldtype> gs;
- byte numleft;
+ array<1, maxgetset, fieldtype> gs;
+ byte numleft;
- getsettype* init();
- void remember(fieldtype r);
- void recall(fieldtype& r);
+ getsettype *init();
+ void remember(fieldtype r);
+ void recall(fieldtype &r);
};
const integer numtr = 5; /* current max no. of sprites */
@@ -93,9 +93,9 @@ void loadtrip();
void tripkey(char dir);
-void apped(byte trn,byte np);
+void apped(byte trn, byte np);
-void fliproom(byte room,byte ped);
+void fliproom(byte room, byte ped);
boolean infield(byte x); /* returns True if you're within field "x" */
@@ -109,8 +109,8 @@ void readstick();
#define EXTERN
#endif
-EXTERN array<1,numtr,triptype> tr;
-EXTERN array<0,1,getsettype> getset;
+EXTERN array<1, numtr, triptype> tr;
+EXTERN array<0, 1, getsettype> getset;
#undef EXTERN
#define EXTERN extern
diff --git a/engines/avalanche/trip5.cpp b/engines/avalanche/trip5.cpp
index fc9429bc95..9a6a82f637 100644
--- a/engines/avalanche/trip5.cpp
+++ b/engines/avalanche/trip5.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,7 +33,7 @@
TRIP5 Trippancy V */
#define __trip5_implementation__
- /* Trippancy V */ /* Define NOASM to use Pascal instead of asm. */
+/* Trippancy V */ /* Define NOASM to use Pascal instead of asm. */
/*$S- Fast!*/
#include "trip5.h"
@@ -49,1290 +49,1403 @@
namespace Avalanche {
-void loadtrip()
-{
- byte gm;
+void loadtrip() {
+ byte gm;
- for( gm=1; gm <= numtr; gm ++) tr[gm].original();
- fillchar(aa,sizeof(aa),'\0');
+ for (gm = 1; gm <= numtr; gm ++) tr[gm].original();
+ fillchar(aa, sizeof(aa), '\0');
}
-byte checkfeet(integer x1,integer x2,integer oy,integer y, byte yl)
-{
- byte a,c; integer fv,ff;
-
-/* if not alive then begin checkfeet:=0; exit; end;*/
- byte checkfeet_result;
- a=0; setactivepage(2); if (x1<0) x1=0; if (x2>639) x2=639;
- if (oy<y)
- for( fv=x1; fv <= x2; fv ++)
- for( ff=oy+yl; ff <= y+yl; ff ++)
- {
- c=getpixel(fv,ff);
- if (c>a) a=c;
- } else
- for( fv=x1; fv <= x2; fv ++)
- for( ff=y+yl; ff <= oy+yl; ff ++)
- {
- c=getpixel(fv,ff);
- if (c>a) a=c;
- }
- checkfeet_result=a; setactivepage(1-cp);
- return checkfeet_result;
+byte checkfeet(integer x1, integer x2, integer oy, integer y, byte yl) {
+ byte a, c;
+ integer fv, ff;
+
+ /* if not alive then begin checkfeet:=0; exit; end;*/
+ byte checkfeet_result;
+ a = 0;
+ setactivepage(2);
+ if (x1 < 0) x1 = 0;
+ if (x2 > 639) x2 = 639;
+ if (oy < y)
+ for (fv = x1; fv <= x2; fv ++)
+ for (ff = oy + yl; ff <= y + yl; ff ++) {
+ c = getpixel(fv, ff);
+ if (c > a) a = c;
+ }
+ else
+ for (fv = x1; fv <= x2; fv ++)
+ for (ff = y + yl; ff <= oy + yl; ff ++) {
+ c = getpixel(fv, ff);
+ if (c > a) a = c;
+ }
+ checkfeet_result = a;
+ setactivepage(1 - cp);
+ return checkfeet_result;
}
-byte geida_ped(byte which)
-{
- byte geida_ped_result;
- switch (which) {
- case 1: geida_ped_result= 7; break;
- case 2:case 6: geida_ped_result= 8; break;
- case 3:case 5: geida_ped_result= 9; break;
- case 4: geida_ped_result=10; break;
- }
- return geida_ped_result;
+byte geida_ped(byte which) {
+ byte geida_ped_result;
+ switch (which) {
+ case 1:
+ geida_ped_result = 7;
+ break;
+ case 2:
+ case 6:
+ geida_ped_result = 8;
+ break;
+ case 3:
+ case 5:
+ geida_ped_result = 9;
+ break;
+ case 4:
+ geida_ped_result = 10;
+ break;
+ }
+ return geida_ped_result;
}
void catamove(byte ped)
- /* When you enter a new position in the catacombs, this procedure should
- be called. It changes the Also codes so that they may match the picture
- on the screen. (Coming soon: It draws up the screen, too.) */
+/* When you enter a new position in the catacombs, this procedure should
+ be called. It changes the Also codes so that they may match the picture
+ on the screen. (Coming soon: It draws up the screen, too.) */
{
- longint here;
- word xy_word;
- byte fv,ff;
-
-/* XY_word is cat_x+cat_y*256. Thus, every room in the
- catacombs has a different number for it. */
-
-
- {
- xy_word=cat_x+cat_y*256;
- geida_spin=0;
- }
- switch (xy_word) {
- case 1801: { /* Exit catacombs */
- fliproom(r__lustiesroom,4);
- display("Phew! Nice to be out of there!");
- return;
- }
- break;
- case 1033: { /* Oubliette */
- fliproom(r__oubliette,1);
- display("Oh, NO!\231\2");
- return;
- }
- break;
- case 4: {
- fliproom(r__geidas,1);
- return;
- }
- break;
- case 2307: {
- fliproom(r__lusties,5);
- display("Oh no... here we go again...");
- dna.user_moves_avvy=false;
- tr[1].iy=1; tr[1].ix=0;
- return;
- }
- break;
- }
-
- if (~ dna.enter_catacombs_from_lusties_room) load(29);
- here=catamap[cat_y][cat_x];
-
- switch (here & 0xf) { /* West. */
- case 0: { /* no connection (wall) */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=nix; /* Door. */
- show_one(28);
- }
- break;
- case 0x1: { /* no connection (wall + shield), */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=nix; /* Door. */
- show_one(28); /* Wall, plus... */
- show_one(29); /* ...shield. */
- }
- break;
- case 0x2: { /* wall with door */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=special; /* Door. */
- show_one(28); /* Wall, plus... */
- show_one(30); /* ...door. */
- }
- break;
- case 0x3: { /* wall with door and shield */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=special; /* Door. */
- show_one(28); /* Wall, plus... */
- show_one(30); /* ...door, and... */
- show_one(29); /* ...shield. */
- }
- break;
- case 0x4: { /* no connection (wall + window), */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=nix; /* Door. */
- show_one(28); /* Wall, plus... */
- show_one(5); /* ...window. */
- }
- break;
- case 0x5: { /* wall with door and window */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=special; /* Door. */
- show_one(28); /* Wall, plus... */
- show_one(30); /* ...door, and... */
- show_one(5); /* ...window. */
- }
- break;
- case 0x6: { /* no connection (wall + torches), */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=nix; /* No door. */
- show_one(28); /* Wall, plus... */
- show_one(7); /* ...torches. */
- }
- break;
- case 0x7: { /* wall with door and torches */
- magics[2].op=bounces; /* Sloping wall. */
- magics[3].op=nix; /* Straight wall. */
- portals[13].op=special; /* Door. */
- show_one(28); /* Wall, plus... */
- show_one(30); /* ...door, and... */
- show_one(7); /* ...torches. */
- }
- break;
- case 0xf: { /* straight-through corridor. */
- magics[2].op=nix; /* Sloping wall. */
- magics[3].op=special; /* Straight wall. */
- }
- break;
- }
-
- /* ---- */
-
- switch ((cardinal)(here & 0xf0) >> 4) { /* East */
- case 0: { /* no connection (wall) */
- magics[5].op=bounces; /* Sloping wall. */
- magics[6].op=nix; /* Straight wall. */
- portals[15].op=nix; /* Door. */
- show_one(19);
- }
- break;
- case 0x1: { /* no connection (wall + window), */
- magics[5].op=bounces; /* Sloping wall. */
- magics[6].op=nix; /* Straight wall. */
- portals[15].op=nix; /* Door. */
- show_one(19); /* Wall, plus... */
- show_one(20); /* ...window. */
- }
- break;
- case 0x2: { /* wall with door */
- magics[5].op=bounces; /* Sloping wall. */
- magics[6].op=nix; /* Straight wall. */
- portals[15].op=special; /* Door. */
- show_one(19); /* Wall, plus... */
- show_one(21); /* ...door. */
- }
- break;
- case 0x3: { /* wall with door and window */
- magics[5].op=bounces; /* Sloping wall. */
- magics[6].op=nix; /* Straight wall. */
- portals[15].op=special; /* Door. */
- show_one(19); /* Wall, plus... */
- show_one(20); /* ...door, and... */
- show_one(21); /* ...window. */
- }
- break;
- case 0x6: { /* no connection (wall + torches), */
- magics[5].op=bounces; /* Sloping wall. */
- magics[6].op=nix; /* Straight wall. */
- portals[15].op=nix; /* No door. */
- show_one(19); /* Wall, plus... */
- show_one(18); /* ...torches. */
- }
- break;
- case 0x7: { /* wall with door and torches */
- magics[5].op=bounces; /* Sloping wall. */
- magics[6].op=nix; /* Straight wall. */
- portals[15].op=special; /* Door. */
- show_one(19); /* Wall, plus... */
- show_one(21); /* ...door, and... */
- show_one(18); /* ...torches. */
- }
- break;
- case 0xf: { /* straight-through corridor. */
- magics[5].op=nix; /* Sloping wall. */
- magics[6].op=special; /* Straight wall. */
- portals[15].op=nix; /* Door. */
- }
- break;
- }
-
- /* ---- */
-
- switch ((cardinal)(here & 0xf00) >> 8) { /* South */
- case 0: { /* No connection. */
- magics[7].op=bounces;
- magics[12].op=bounces;
- magics[13].op=bounces;
- }
- break;
- case 0x1: {
- show_one(22);
- { void& with = magics[13];
- if ((xy_word==2051) & (dna.geida_follows))
- op=exclaim;
- else op=special;} /* Right exit south. */
- magics[7].op=bounces;
- magics[12].op=bounces;
- }
- break;
- case 0x2: {
- show_one(23);
- magics[7].op=special; /* Middle exit south. */
- magics[12].op=bounces;
- magics[13].op=bounces;
- }
- break;
- case 0x3: {
- show_one(24);
- magics[12].op=special; /* Left exit south. */
- magics[7].op=bounces;
- magics[13].op=bounces;
- }
- break;
- }
-
- switch ((cardinal)(here & 0xf000) >> 12) { /* North */
- case 0: { /* No connection */
- magics[1].op=bounces;
- portals[12].op=nix; /* Door. */
- }
- break;
- /* LEFT handles: */
-/* $1: begin
- show_one(4);
- magics[1].op:=bounces; { Left exit north. } { Change magic number! }
- portals[12].op:=special; { Door. }
- end;*/
- case 0x2: {
- show_one(4);
- magics[1].op=bounces; /* Middle exit north. */
- portals[12].op=special; /* Door. */
- }
- break;
-/* $3: begin
- show_one(4);
- magics[1].op:=bounces; { Right exit north. } { Change magic number! }
- portals[12].op:=special; { Door. }
- end;
- { RIGHT handles: }
- $4: begin
- show_one(3);
- magics[1].op:=bounces; { Left exit north. } { Change magic number! }
- portals[12].op:=special; { Door. }
- end;*/
- case 0x5: {
- show_one(3);
- magics[1].op=bounces; /* Middle exit north. */
- portals[12].op=special; /* Door. */
- }
- break;
-/* $6: begin
- show_one(3);
- magics[1].op:=bounces; { Right exit north. }
- portals[12].op:=special; { Door. }
- end;*/
- /* ARCHWAYS: */
- case 0x7:case 0x8:case 0x9: {
- show_one(6);
-
- if (((cardinal)(here & 0xf000) >> 12)>0x7) show_one(31);
- if (((cardinal)(here & 0xf000) >> 12)==0x9) show_one(32);
-
- magics[1].op=special; /* Middle arch north. */
- portals[12].op=nix; /* Door. */
- }
- break;
- /* DECORATIONS: */
- case 0xd: { /* No connection + WINDOW */
- magics[1].op=bounces;
- portals[12].op=nix; /* Door. */
- show_one(14);
- }
- break;
- case 0xe: { /* No connection + TORCH */
- magics[1].op=bounces;
- portals[12].op=nix; /* Door. */
- show_one(8);
- }
- break;
- /* Recessed door: */
- case 0xf: {
- magics[1].op=nix; /* Door to Geida's room. */
- show_one(1);
- portals[12].op=special; /* Door. */
- }
- break;
- }
-
- switch (xy_word) {
- case 514: show_one(17); break; /* [2,2] : "Art Gallery" sign over door. */
- case 264: show_one(9); break; /* [8,1] : "The Wrong Way!" sign. */
- case 1797: show_one(2); break; /* [5,7] : "Ite Mingite" sign. */
- case 258: for( fv=0; fv <= 2; fv ++) /* [2,1] : Art gallery - pictures */
- {
- show_one_at(15,130+fv*120,70);
- show_one_at(16,184+fv*120,78);
- }
- break;
- case 1287: for( fv=10; fv <= 13; fv ++) show_one(fv); break; /* [7,5] : 4 candles. */
- case 776: show_one(10); break; /* [8,3] : 1 candle. */
- case 2049: show_one(11); break; /* [1,8] : another candle. */
- case 257: { show_one(12); show_one(13); } break; /* [1,1] : the other two. */
- }
-
- if ((dna.geida_follows) & (ped>0))
- {
- triptype& with = tr[2];
-
- if (! with.quick) /* If we don't already have her... */
- tr[2].init(5,true); /* ...Load Geida. */
- apped(2,geida_ped(ped));
- tr[2].call_eachstep =true;
- tr[2].eachstep=procgeida_procs;
- }
+ longint here;
+ word xy_word;
+ byte fv, ff;
+
+ /* XY_word is cat_x+cat_y*256. Thus, every room in the
+ catacombs has a different number for it. */
+
+
+ {
+ xy_word = cat_x + cat_y * 256;
+ geida_spin = 0;
+ }
+ switch (xy_word) {
+ case 1801: { /* Exit catacombs */
+ fliproom(r__lustiesroom, 4);
+ display("Phew! Nice to be out of there!");
+ return;
+ }
+ break;
+ case 1033: { /* Oubliette */
+ fliproom(r__oubliette, 1);
+ display("Oh, NO!\231\2");
+ return;
+ }
+ break;
+ case 4: {
+ fliproom(r__geidas, 1);
+ return;
+ }
+ break;
+ case 2307: {
+ fliproom(r__lusties, 5);
+ display("Oh no... here we go again...");
+ dna.user_moves_avvy = false;
+ tr[1].iy = 1;
+ tr[1].ix = 0;
+ return;
+ }
+ break;
+ }
+
+ if (~ dna.enter_catacombs_from_lusties_room) load(29);
+ here = catamap[cat_y][cat_x];
+
+ switch (here & 0xf) { /* West. */
+ case 0: { /* no connection (wall) */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = nix; /* Door. */
+ show_one(28);
+ }
+ break;
+ case 0x1: { /* no connection (wall + shield), */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = nix; /* Door. */
+ show_one(28); /* Wall, plus... */
+ show_one(29); /* ...shield. */
+ }
+ break;
+ case 0x2: { /* wall with door */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = special; /* Door. */
+ show_one(28); /* Wall, plus... */
+ show_one(30); /* ...door. */
+ }
+ break;
+ case 0x3: { /* wall with door and shield */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = special; /* Door. */
+ show_one(28); /* Wall, plus... */
+ show_one(30); /* ...door, and... */
+ show_one(29); /* ...shield. */
+ }
+ break;
+ case 0x4: { /* no connection (wall + window), */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = nix; /* Door. */
+ show_one(28); /* Wall, plus... */
+ show_one(5); /* ...window. */
+ }
+ break;
+ case 0x5: { /* wall with door and window */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = special; /* Door. */
+ show_one(28); /* Wall, plus... */
+ show_one(30); /* ...door, and... */
+ show_one(5); /* ...window. */
+ }
+ break;
+ case 0x6: { /* no connection (wall + torches), */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = nix; /* No door. */
+ show_one(28); /* Wall, plus... */
+ show_one(7); /* ...torches. */
+ }
+ break;
+ case 0x7: { /* wall with door and torches */
+ magics[2].op = bounces; /* Sloping wall. */
+ magics[3].op = nix; /* Straight wall. */
+ portals[13].op = special; /* Door. */
+ show_one(28); /* Wall, plus... */
+ show_one(30); /* ...door, and... */
+ show_one(7); /* ...torches. */
+ }
+ break;
+ case 0xf: { /* straight-through corridor. */
+ magics[2].op = nix; /* Sloping wall. */
+ magics[3].op = special; /* Straight wall. */
+ }
+ break;
+ }
+
+ /* ---- */
+
+ switch ((cardinal)(here & 0xf0) >> 4) { /* East */
+ case 0: { /* no connection (wall) */
+ magics[5].op = bounces; /* Sloping wall. */
+ magics[6].op = nix; /* Straight wall. */
+ portals[15].op = nix; /* Door. */
+ show_one(19);
+ }
+ break;
+ case 0x1: { /* no connection (wall + window), */
+ magics[5].op = bounces; /* Sloping wall. */
+ magics[6].op = nix; /* Straight wall. */
+ portals[15].op = nix; /* Door. */
+ show_one(19); /* Wall, plus... */
+ show_one(20); /* ...window. */
+ }
+ break;
+ case 0x2: { /* wall with door */
+ magics[5].op = bounces; /* Sloping wall. */
+ magics[6].op = nix; /* Straight wall. */
+ portals[15].op = special; /* Door. */
+ show_one(19); /* Wall, plus... */
+ show_one(21); /* ...door. */
+ }
+ break;
+ case 0x3: { /* wall with door and window */
+ magics[5].op = bounces; /* Sloping wall. */
+ magics[6].op = nix; /* Straight wall. */
+ portals[15].op = special; /* Door. */
+ show_one(19); /* Wall, plus... */
+ show_one(20); /* ...door, and... */
+ show_one(21); /* ...window. */
+ }
+ break;
+ case 0x6: { /* no connection (wall + torches), */
+ magics[5].op = bounces; /* Sloping wall. */
+ magics[6].op = nix; /* Straight wall. */
+ portals[15].op = nix; /* No door. */
+ show_one(19); /* Wall, plus... */
+ show_one(18); /* ...torches. */
+ }
+ break;
+ case 0x7: { /* wall with door and torches */
+ magics[5].op = bounces; /* Sloping wall. */
+ magics[6].op = nix; /* Straight wall. */
+ portals[15].op = special; /* Door. */
+ show_one(19); /* Wall, plus... */
+ show_one(21); /* ...door, and... */
+ show_one(18); /* ...torches. */
+ }
+ break;
+ case 0xf: { /* straight-through corridor. */
+ magics[5].op = nix; /* Sloping wall. */
+ magics[6].op = special; /* Straight wall. */
+ portals[15].op = nix; /* Door. */
+ }
+ break;
+ }
+
+ /* ---- */
+
+ switch ((cardinal)(here & 0xf00) >> 8) { /* South */
+ case 0: { /* No connection. */
+ magics[7].op = bounces;
+ magics[12].op = bounces;
+ magics[13].op = bounces;
+ }
+ break;
+ case 0x1: {
+ show_one(22);
+ {
+ void &with = magics[13];
+ if ((xy_word == 2051) & (dna.geida_follows))
+ op = exclaim;
+ else op = special;
+ } /* Right exit south. */
+ magics[7].op = bounces;
+ magics[12].op = bounces;
+ }
+ break;
+ case 0x2: {
+ show_one(23);
+ magics[7].op = special; /* Middle exit south. */
+ magics[12].op = bounces;
+ magics[13].op = bounces;
+ }
+ break;
+ case 0x3: {
+ show_one(24);
+ magics[12].op = special; /* Left exit south. */
+ magics[7].op = bounces;
+ magics[13].op = bounces;
+ }
+ break;
+ }
+
+ switch ((cardinal)(here & 0xf000) >> 12) { /* North */
+ case 0: { /* No connection */
+ magics[1].op = bounces;
+ portals[12].op = nix; /* Door. */
+ }
+ break;
+ /* LEFT handles: */
+ /* $1: begin
+ show_one(4);
+ magics[1].op:=bounces; { Left exit north. } { Change magic number! }
+ portals[12].op:=special; { Door. }
+ end;*/
+ case 0x2: {
+ show_one(4);
+ magics[1].op = bounces; /* Middle exit north. */
+ portals[12].op = special; /* Door. */
+ }
+ break;
+ /* $3: begin
+ show_one(4);
+ magics[1].op:=bounces; { Right exit north. } { Change magic number! }
+ portals[12].op:=special; { Door. }
+ end;
+ { RIGHT handles: }
+ $4: begin
+ show_one(3);
+ magics[1].op:=bounces; { Left exit north. } { Change magic number! }
+ portals[12].op:=special; { Door. }
+ end;*/
+ case 0x5: {
+ show_one(3);
+ magics[1].op = bounces; /* Middle exit north. */
+ portals[12].op = special; /* Door. */
+ }
+ break;
+ /* $6: begin
+ show_one(3);
+ magics[1].op:=bounces; { Right exit north. }
+ portals[12].op:=special; { Door. }
+ end;*/
+ /* ARCHWAYS: */
+ case 0x7:
+ case 0x8:
+ case 0x9: {
+ show_one(6);
+
+ if (((cardinal)(here & 0xf000) >> 12) > 0x7) show_one(31);
+ if (((cardinal)(here & 0xf000) >> 12) == 0x9) show_one(32);
+
+ magics[1].op = special; /* Middle arch north. */
+ portals[12].op = nix; /* Door. */
+ }
+ break;
+ /* DECORATIONS: */
+ case 0xd: { /* No connection + WINDOW */
+ magics[1].op = bounces;
+ portals[12].op = nix; /* Door. */
+ show_one(14);
+ }
+ break;
+ case 0xe: { /* No connection + TORCH */
+ magics[1].op = bounces;
+ portals[12].op = nix; /* Door. */
+ show_one(8);
+ }
+ break;
+ /* Recessed door: */
+ case 0xf: {
+ magics[1].op = nix; /* Door to Geida's room. */
+ show_one(1);
+ portals[12].op = special; /* Door. */
+ }
+ break;
+ }
+
+ switch (xy_word) {
+ case 514:
+ show_one(17);
+ break; /* [2,2] : "Art Gallery" sign over door. */
+ case 264:
+ show_one(9);
+ break; /* [8,1] : "The Wrong Way!" sign. */
+ case 1797:
+ show_one(2);
+ break; /* [5,7] : "Ite Mingite" sign. */
+ case 258:
+ for (fv = 0; fv <= 2; fv ++) { /* [2,1] : Art gallery - pictures */
+ show_one_at(15, 130 + fv * 120, 70);
+ show_one_at(16, 184 + fv * 120, 78);
+ }
+ break;
+ case 1287:
+ for (fv = 10; fv <= 13; fv ++) show_one(fv);
+ break; /* [7,5] : 4 candles. */
+ case 776:
+ show_one(10);
+ break; /* [8,3] : 1 candle. */
+ case 2049:
+ show_one(11);
+ break; /* [1,8] : another candle. */
+ case 257: {
+ show_one(12);
+ show_one(13);
+ }
+ break; /* [1,1] : the other two. */
+ }
+
+ if ((dna.geida_follows) & (ped > 0)) {
+ triptype &with = tr[2];
+
+ if (! with.quick) /* If we don't already have her... */
+ tr[2].init(5, true); /* ...Load Geida. */
+ apped(2, geida_ped(ped));
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procgeida_procs;
+ }
}
void call_special(word which);
- /* This proc gets called whenever you touch a line defined as Special. */
-static void dawndelay()
- { set_up_timer(2,procdawn_delay,reason_dawndelay); }
+/* This proc gets called whenever you touch a line defined as Special. */
+static void dawndelay() {
+ set_up_timer(2, procdawn_delay, reason_dawndelay);
+}
-void call_special(word which)
-{
- switch (which) {
- case 1: { /* Special 1: Room 22: top of stairs. */
- show_one(1);
- dna.brummie_stairs=1;
- magics[10].op=nix;
- set_up_timer(10,procstairs,reason_brummiestairs);
- stopwalking();
- dna.user_moves_avvy=false;
- }
- break;
- case 2: { /* Special 2: Room 22: bottom of stairs. */
- dna.brummie_stairs=3;
- magics[11].op=nix;
- magics[12].op=exclaim;
- magics[12].data=5;
- magics[4].op=bounces; /* Now works as planned! */
- stopwalking();
- dixi('q',26);
- dna.user_moves_avvy=true;
- }
- break;
- case 3: { /* Special 3: Room 71: triggers dart. */
- tr[1].bounce(); /* Must include that. */
-
- if (~ dna.arrow_triggered)
- {
- dna.arrow_triggered=true;
- apped(2,4); /* The dart starts at ped 4, and... */
- tr[2].walkto(5); /* flies to ped 5. */
- tr[2].face=0; /* Only face. */
- /* Should call some kind of Eachstep procedure which will deallocate
- the sprite when it hits the wall, and replace it with the chunk
- graphic of the arrow buried in the plaster. */
- /* OK! */
- tr[2].call_eachstep=true;
- tr[2].eachstep=procarrow_procs;
- }
- }
- break;
-
- case 4: { /* This is the ghost room link. */
- dusk;
- tr[1].turn(right); /* you'll see this after we get back from bootstrap */
- set_up_timer(1,procghost_room_phew,reason_ghost_room_phew);
- back_to_bootstrap(3);
- }
- break;
-
- case 5: if (dna.friar_will_tie_you_up)
- { /* Special 5: Room 42: touched tree, and get tied up. */
- magics[4].op=bounces; /* Boundary effect is now working again. */
- dixi('q',35);
- tr[1].done();
- /*tr[1].vanishifstill:=true;*/
- show_one(2);
- dixi('q',36);
- dna.tied_up=true;
- dna.friar_will_tie_you_up=false;
- tr[2].walkto(3);
- tr[2].vanishifstill=true;
- tr[2].check_me=true; /* One of them must have Check_Me switched on. */
- whereis[pfriartuck]=177; /* Not here, then. */
- set_up_timer(364,prochang_around,reason_hanging_around);
- }
- break;
-
- case 6: { /* Special 6: fall down oubliette. */
- dna.user_moves_avvy=false;
- tr[1].ix=3;
- tr[1].iy=0;
- tr[1].face=right;
- set_up_timer(1,procfall_down_oubliette,reason_falling_down_oubliette);
- }
- break;
-
- case 7: { /* Special 7: stop falling down oubliette. */
- tr[1].visible=false;
- magics[10].op=nix;
- stopwalking();
- lose_timer(reason_falling_down_oubliette);
- mblit(12,80,38,160,3,0);
- mblit(12,80,38,160,3,1);
- display("Oh dear, you seem to be down the bottom of an oubliette.");
- set_up_timer(200,procmeet_avaroid,reason_meeting_avaroid);
- }
- break;
-
- case 8: /* Special 8: leave du Lustie's room. */
- if ((geida_follows) & (~ lustie_is_asleep))
- {
- dixi('q',63);
- tr[2].turn(down); tr[2].stopwalk(); tr[2].call_eachstep=false; /* Geida */
- gameover;
- }
- break;
-
- case 9: { /* Special 9: lose Geida to Robin Hood... */
- if (~ dna.geida_follows) return; /* DOESN'T COUNT: no Geida. */
- tr[2].call_eachstep=false; /* She no longer follows Avvy around. */
- tr[2].walkto(4); /* She walks to somewhere... */
- tr[1].done(); /* Lose Avvy. */
- dna.user_moves_avvy=false;
- set_up_timer(40,procrobin_hood_and_geida,reason_robin_hood_and_geida);
- }
- break;
-
- case 10: { /* Special 10: transfer north in catacombs. */
- if ((dna.cat_x==4) && (dna.cat_y==1))
- { /* Into Geida's room. */
- if (dna.obj[key]) dixi('q',62); else
- {
- dixi('q',61);
- return;
- }
- }
- dusk;
- dna.cat_y -= 1;
- catamove(4); if (dna.room!=r__catacombs) return;
- delavvy;
- switch ((cardinal)(catamap[cat_y][cat_x] & 0xf00) >> 8) {
- case 0x1: apped(1,12); break;
- case 0x3: apped(1,11); break;
- default: apped(1,4);
- }
- getback();
- dawndelay();
- }
- break;
- case 11: { /* Special 11: transfer east in catacombs. */
- dusk;
- dna.cat_x += 1;
- catamove(1); if (dna.room!=r__catacombs) return;
- delavvy;
- apped(1,1);
- getback();
- dawndelay();
- }
- break;
- case 12: { /* Special 12: transfer south in catacombs. */
- dusk;
- dna.cat_y += 1;
- catamove(2); if (dna.room!=r__catacombs) return;
- delavvy;
- apped(1,2);
- getback();
- dawndelay();
- }
- break;
- case 13: { /* Special 13: transfer west in catacombs. */
- dusk;
- dna.cat_x -= 1;
- catamove(3); if (dna.room!=r__catacombs) return;
- delavvy;
- apped(1,3);
- getback();
- dawndelay();
- }
- break;
- }
+void call_special(word which) {
+ switch (which) {
+ case 1: { /* Special 1: Room 22: top of stairs. */
+ show_one(1);
+ dna.brummie_stairs = 1;
+ magics[10].op = nix;
+ set_up_timer(10, procstairs, reason_brummiestairs);
+ stopwalking();
+ dna.user_moves_avvy = false;
+ }
+ break;
+ case 2: { /* Special 2: Room 22: bottom of stairs. */
+ dna.brummie_stairs = 3;
+ magics[11].op = nix;
+ magics[12].op = exclaim;
+ magics[12].data = 5;
+ magics[4].op = bounces; /* Now works as planned! */
+ stopwalking();
+ dixi('q', 26);
+ dna.user_moves_avvy = true;
+ }
+ break;
+ case 3: { /* Special 3: Room 71: triggers dart. */
+ tr[1].bounce(); /* Must include that. */
+
+ if (~ dna.arrow_triggered) {
+ dna.arrow_triggered = true;
+ apped(2, 4); /* The dart starts at ped 4, and... */
+ tr[2].walkto(5); /* flies to ped 5. */
+ tr[2].face = 0; /* Only face. */
+ /* Should call some kind of Eachstep procedure which will deallocate
+ the sprite when it hits the wall, and replace it with the chunk
+ graphic of the arrow buried in the plaster. */
+ /* OK! */
+ tr[2].call_eachstep = true;
+ tr[2].eachstep = procarrow_procs;
+ }
+ }
+ break;
+
+ case 4: { /* This is the ghost room link. */
+ dusk;
+ tr[1].turn(right); /* you'll see this after we get back from bootstrap */
+ set_up_timer(1, procghost_room_phew, reason_ghost_room_phew);
+ back_to_bootstrap(3);
+ }
+ break;
+
+ case 5:
+ if (dna.friar_will_tie_you_up) {
+ /* Special 5: Room 42: touched tree, and get tied up. */
+ magics[4].op = bounces; /* Boundary effect is now working again. */
+ dixi('q', 35);
+ tr[1].done();
+ /*tr[1].vanishifstill:=true;*/
+ show_one(2);
+ dixi('q', 36);
+ dna.tied_up = true;
+ dna.friar_will_tie_you_up = false;
+ tr[2].walkto(3);
+ tr[2].vanishifstill = true;
+ tr[2].check_me = true; /* One of them must have Check_Me switched on. */
+ whereis[pfriartuck] = 177; /* Not here, then. */
+ set_up_timer(364, prochang_around, reason_hanging_around);
+ }
+ break;
+
+ case 6: { /* Special 6: fall down oubliette. */
+ dna.user_moves_avvy = false;
+ tr[1].ix = 3;
+ tr[1].iy = 0;
+ tr[1].face = right;
+ set_up_timer(1, procfall_down_oubliette, reason_falling_down_oubliette);
+ }
+ break;
+
+ case 7: { /* Special 7: stop falling down oubliette. */
+ tr[1].visible = false;
+ magics[10].op = nix;
+ stopwalking();
+ lose_timer(reason_falling_down_oubliette);
+ mblit(12, 80, 38, 160, 3, 0);
+ mblit(12, 80, 38, 160, 3, 1);
+ display("Oh dear, you seem to be down the bottom of an oubliette.");
+ set_up_timer(200, procmeet_avaroid, reason_meeting_avaroid);
+ }
+ break;
+
+ case 8: /* Special 8: leave du Lustie's room. */
+ if ((geida_follows) & (~ lustie_is_asleep)) {
+ dixi('q', 63);
+ tr[2].turn(down);
+ tr[2].stopwalk();
+ tr[2].call_eachstep = false; /* Geida */
+ gameover;
+ }
+ break;
+
+ case 9: { /* Special 9: lose Geida to Robin Hood... */
+ if (~ dna.geida_follows) return; /* DOESN'T COUNT: no Geida. */
+ tr[2].call_eachstep = false; /* She no longer follows Avvy around. */
+ tr[2].walkto(4); /* She walks to somewhere... */
+ tr[1].done(); /* Lose Avvy. */
+ dna.user_moves_avvy = false;
+ set_up_timer(40, procrobin_hood_and_geida, reason_robin_hood_and_geida);
+ }
+ break;
+
+ case 10: { /* Special 10: transfer north in catacombs. */
+ if ((dna.cat_x == 4) && (dna.cat_y == 1)) {
+ /* Into Geida's room. */
+ if (dna.obj[key]) dixi('q', 62);
+ else {
+ dixi('q', 61);
+ return;
+ }
+ }
+ dusk;
+ dna.cat_y -= 1;
+ catamove(4);
+ if (dna.room != r__catacombs) return;
+ delavvy;
+ switch ((cardinal)(catamap[cat_y][cat_x] & 0xf00) >> 8) {
+ case 0x1:
+ apped(1, 12);
+ break;
+ case 0x3:
+ apped(1, 11);
+ break;
+ default:
+ apped(1, 4);
+ }
+ getback();
+ dawndelay();
+ }
+ break;
+ case 11: { /* Special 11: transfer east in catacombs. */
+ dusk;
+ dna.cat_x += 1;
+ catamove(1);
+ if (dna.room != r__catacombs) return;
+ delavvy;
+ apped(1, 1);
+ getback();
+ dawndelay();
+ }
+ break;
+ case 12: { /* Special 12: transfer south in catacombs. */
+ dusk;
+ dna.cat_y += 1;
+ catamove(2);
+ if (dna.room != r__catacombs) return;
+ delavvy;
+ apped(1, 2);
+ getback();
+ dawndelay();
+ }
+ break;
+ case 13: { /* Special 13: transfer west in catacombs. */
+ dusk;
+ dna.cat_x -= 1;
+ catamove(3);
+ if (dna.room != r__catacombs) return;
+ delavvy;
+ apped(1, 3);
+ getback();
+ dawndelay();
+ }
+ break;
+ }
}
-void hide_in_the_cupboard();
+void hide_in_the_cupboard();
-void open_the_door(byte whither,byte ped,byte magicnum)
- /* This slides the door open. (The data really ought to be saved in
- the Also file, and will be next time. However, for now, they're
- here.) */
+void open_the_door(byte whither, byte ped, byte magicnum)
+/* This slides the door open. (The data really ought to be saved in
+ the Also file, and will be next time. However, for now, they're
+ here.) */
{
- switch (dna.room) {
- case r__outsideyours:case r__outsidenottspub:case r__outsideducks:
- {
- first_show(1);
- then_show(2);
- then_show(3);
- }
- break;
- case r__insidecardiffcastle:
- {
- first_show(1);
- then_show(5);
- }
- break;
- case r__avvysgarden:case r__entrancehall:case r__insideabbey:
- {
- first_show(1);
- then_show(2);
- }
- break;
- case r__musicroom:case r__outsideargentpub:
- {
- first_show(5);
- then_show(6);
- }
- break;
- case r__lusties:
- switch (magicnum) {
- case 14: if (dna.avvys_in_the_cupboard)
- {
- hide_in_the_cupboard();
- first_show(8); then_show(7);
- start_to_close;
- return;
- } else
- {
- apped(1,6);
- tr[1].face=right; /* added by TT 12/3/1995 */
- first_show(8); then_show(9);
- }
- break;
- case 12: {
- first_show(4); then_show(5); then_show(6);
- }
- break;
- }
- break;
- }
-
- then_flip(whither,ped);
- start_to_open;
+ switch (dna.room) {
+ case r__outsideyours:
+ case r__outsidenottspub:
+ case r__outsideducks: {
+ first_show(1);
+ then_show(2);
+ then_show(3);
+ }
+ break;
+ case r__insidecardiffcastle: {
+ first_show(1);
+ then_show(5);
+ }
+ break;
+ case r__avvysgarden:
+ case r__entrancehall:
+ case r__insideabbey: {
+ first_show(1);
+ then_show(2);
+ }
+ break;
+ case r__musicroom:
+ case r__outsideargentpub: {
+ first_show(5);
+ then_show(6);
+ }
+ break;
+ case r__lusties:
+ switch (magicnum) {
+ case 14:
+ if (dna.avvys_in_the_cupboard) {
+ hide_in_the_cupboard();
+ first_show(8);
+ then_show(7);
+ start_to_close;
+ return;
+ } else {
+ apped(1, 6);
+ tr[1].face = right; /* added by TT 12/3/1995 */
+ first_show(8);
+ then_show(9);
+ }
+ break;
+ case 12: {
+ first_show(4);
+ then_show(5);
+ then_show(6);
+ }
+ break;
+ }
+ break;
+ }
+
+ then_flip(whither, ped);
+ start_to_open;
}
void newspeed()
- /* Given that you've just changed the speed in triptype.xs, this adjusts
- ix. */
+/* Given that you've just changed the speed in triptype.xs, this adjusts
+ ix. */
{
- const bytefield lightspace = {40, 199, 47, 199};
- byte page_;
+ const bytefield lightspace = {40, 199, 47, 199};
+ byte page_;
- {
- triptype& with = tr[1];
+ {
+ triptype &with = tr[1];
- with.ix=(with.ix / 3)*with.xs;
- setactivepage(3);
+ with.ix = (with.ix / 3) * with.xs;
+ setactivepage(3);
- setfillstyle(1,14);
- if (with.xs==run) bar(371,199,373,199); else bar(336,199,338,199);
- setfillstyle(1,9);
- if (with.xs==run) bar(336,199,338,199); else bar(371,199,373,199);
+ setfillstyle(1, 14);
+ if (with.xs == run) bar(371, 199, 373, 199);
+ else bar(336, 199, 338, 199);
+ setfillstyle(1, 9);
+ if (with.xs == run) bar(336, 199, 338, 199);
+ else bar(371, 199, 373, 199);
- setactivepage(1-cp);
- for( page_=0; page_ <= 1; page_ ++) getset[page_].remember(lightspace);
- }
+ setactivepage(1 - cp);
+ for (page_ = 0; page_ <= 1; page_ ++) getset[page_].remember(lightspace);
+ }
}
-triptype* triptype::init(byte spritenum, boolean do_check)
-{
- const integer idshould = -1317732048;
- integer gd,gm; varying_string<2> xx;
- byte fv/*,nds*/;
- byte aa,bb;
- longint id; word soa;
- untyped_file inf;
-
- if (spritenum==177) return; /* Already running! */
- str(spritenum,xx); assign(inf,string("sprite")+xx+".avd");
- reset(inf,1);
- seek(inf,177);
- blockread(inf,id,4);
- if (id!=idshould)
- {
- output << '\7';
- close(inf);
- exit(0);
- }
-
- blockread(inf,soa,2);
- blockread(inf,a,soa);
-
- {
- adxtype& with = a;
-
- /*nds:=num div seq;*/ totalnum=1;
- xw=with.xl / 8; if ((with.xl % 8)>0) xw += 1;
- for( aa=1; aa <= /*nds*seq*/with.num; aa ++)
- {
- getmem(sil[totalnum],11*(with.yl+1));
- getmem(mani[totalnum],with.size-6);
- for( fv=0; fv <= with.yl; fv ++)
- {
- blockread(inf,(*sil[totalnum])[fv],xw);
- }
- blockread(inf,*mani[totalnum],with.size-6);
- totalnum += 1;
- }
- }
-
- /* on; */
- x=0; y=0; quick=true; visible=false; xs=3; ys=1;
-/* if spritenum=1 then newspeed; { Just for the lights. }*/
-
- homing=false; ix=0; iy=0; step=0; check_me=do_check;
- count=0; whichsprite=spritenum; vanishifstill=false;
- call_eachstep=false;
- close(inf);
- return this;
+triptype *triptype::init(byte spritenum, boolean do_check) {
+ const integer idshould = -1317732048;
+ integer gd, gm;
+ varying_string<2> xx;
+ byte fv/*,nds*/;
+ byte aa, bb;
+ longint id;
+ word soa;
+ untyped_file inf;
+
+ if (spritenum == 177) return; /* Already running! */
+ str(spritenum, xx);
+ assign(inf, string("sprite") + xx + ".avd");
+ reset(inf, 1);
+ seek(inf, 177);
+ blockread(inf, id, 4);
+ if (id != idshould) {
+ output << '\7';
+ close(inf);
+ exit(0);
+ }
+
+ blockread(inf, soa, 2);
+ blockread(inf, a, soa);
+
+ {
+ adxtype &with = a;
+
+ /*nds:=num div seq;*/ totalnum = 1;
+ xw = with.xl / 8;
+ if ((with.xl % 8) > 0) xw += 1;
+ for (aa = 1; aa <= /*nds*seq*/with.num; aa ++) {
+ getmem(sil[totalnum], 11 * (with.yl + 1));
+ getmem(mani[totalnum], with.size - 6);
+ for (fv = 0; fv <= with.yl; fv ++) {
+ blockread(inf, (*sil[totalnum])[fv], xw);
+ }
+ blockread(inf, *mani[totalnum], with.size - 6);
+ totalnum += 1;
+ }
+ }
+
+ /* on; */
+ x = 0;
+ y = 0;
+ quick = true;
+ visible = false;
+ xs = 3;
+ ys = 1;
+ /* if spritenum=1 then newspeed; { Just for the lights. }*/
+
+ homing = false;
+ ix = 0;
+ iy = 0;
+ step = 0;
+ check_me = do_check;
+ count = 0;
+ whichsprite = spritenum;
+ vanishifstill = false;
+ call_eachstep = false;
+ close(inf);
+ return this;
}
-void triptype::original()
-{
- quick=false; whichsprite=177;
+void triptype::original() {
+ quick = false;
+ whichsprite = 177;
}
-void triptype::andexor()
-{
- byte picnum; /* Picnum, Picnic, what ye heck */
- byte lay,laz; /* Limits for Qaz and Qay or equivs. (Laz always = 3). */
+void triptype::andexor() {
+ byte picnum; /* Picnum, Picnic, what ye heck */
+ byte lay, laz; /* Limits for Qaz and Qay or equivs. (Laz always = 3). */
#ifdef NOASM
- word offs,fv;
- byte qax,qay,qaz;
+ word offs, fv;
+ byte qax, qay, qaz;
#else
- word segmani,ofsmani;
- word ofsaa,realofsaa;
- word segsil,ofssil;
- word z; byte xwidth;
+ word segmani, ofsmani;
+ word ofsaa, realofsaa;
+ word segsil, ofssil;
+ word z;
+ byte xwidth;
#endif
- if ((vanishifstill) && (ix==0) && (iy==0)) return;
- picnum=face*a.seq+step+1;
+ if ((vanishifstill) && (ix == 0) && (iy == 0)) return;
+ picnum = face * a.seq + step + 1;
- {
- adxtype& with = a;
+ {
+ adxtype &with = a;
- getimage(x,y,x+with.xl,y+with.yl,aa); /* Now loaded into our local buffer. */
+ getimage(x, y, x + with.xl, y + with.yl, aa); /* Now loaded into our local buffer. */
- /* Now we've got to modify it! */
+ /* Now we've got to modify it! */
- /* Qaz ranges over the width of the sprite/8.
- Qay " " the height.
- Qax " " 1 to 4 (the planes). */
+ /* Qaz ranges over the width of the sprite/8.
+ Qay " " the height.
+ Qax " " 1 to 4 (the planes). */
- {
- adxtype& with1 = a;
+ {
+ adxtype &with1 = a;
- #ifdef NOASM
- laz=xw-1; lay=with1.yl; /* -1's only for Pascal. */
- #else
- laz=xw; lay=with1.yl+1; /* +1's only for ASM! */
- #endif
- }
-
- /* ASSEMBLERISED: */
#ifdef NOASM
- for( qax=0; qax <= 3; qax ++) /* 3 */
- for( qay=0; qay <= lay; qay ++) /* 35 */
- for( qaz=0; qaz <= laz; qaz ++) /* 4 */
- {
- offs=5+qay*xw*4+xw*qax+qaz;
- aa[offs]=aa[offs] & (*sil[picnum])[qay][qaz];
- }
-
- for( fv=5; fv <= with.size-2; fv ++)
- aa[fv]=aa[fv] ^ (*mani[picnum])[fv];
-
+ laz = xw - 1;
+ lay = with1.yl; /* -1's only for Pascal. */
#else
- /* OK, here's the same thing in assembler...
-
- AL is Qax,
- BL is Qay,
- CL is Qaz,
- DX is Offs */
-
- /* For the first part: */
- xwidth=xw;
- segsil=seg(*sil[picnum]);
- ofssil=ofs(*sil[picnum]);
-
- /* For the first and second parts: */
- segmani=seg(*mani[picnum]); /* It's easier to do this in Pascal, and */
- ofsmani=ofs(*mani[picnum])+1; /* besides it only goes round once here. */
- /* Segment of AA is always the current data segment. */
- ofsaa=ofs(aa)+5;
- realofsaa=ofs(aa)-1; /* We may not need this. */
- z=with.size-7;
-/*
- asm
-
- xor ax,ax; { Initialise ax, bx, and cx, using a rather }
- @QAXloop: { AL }
-
- xor bx,bx; { nifty speed trick. }
- @QAYloop: { BL }
-
- xor cx,cx;
- @QAZloop: { CL }
-
- { Right, well, here we are. We have to do some rather nifty array
- manipulation, stuff like that. We're trying to assemblerise:
- DX:= 5 + BX * xw * 4 + xw * AX + CX;
- aa[DX]:=aa[DX] and sil[picnum]^[BL,CL]; }
-
- push ax; {AXcdx} { OK, we're going to do some strange things }
- { with ax, so we'd better save it. }
- mov dx,5; { First of all... set dx to 5. }
- add dx,cx; { DX now = 5+CX }
- mul xwidth; { Multiply ax by xw (the Pascal variable.) }
- add dx,ax; { DX now = 5+CX+xw*AX }
-
- { Right. Mul only works on ax. Don't ask me why. Ask Intel. Anyway,
- since ax is saved on the stack, we can move bx over it. Note that
- if xw was a word, using mul would have destroyed the contents of
- dx. NOT a good idea! }
-
- push cx; {CXmul} { We must just borrow cx for a second. }
- mov ax,bx; { Make ax = bx. }
- mul xwidth; { Do the same to it as we did to ax before. }
- mov cl,2;
- shl ax,cl; { And multiply it by 4 (i.e., shl it by 2.) }
- add dx,ax; { DX now = 5+CX+xw*AX+xw*BX*4. That's OK. }
+ laz = xw;
+ lay = with1.yl + 1; /* +1's only for ASM! */
+#endif
+ }
- pop cx; {CXmul}
- pop ax; {AXcdx} { Now we have to get ax and cx back again. }
+ /* ASSEMBLERISED: */
+#ifdef NOASM
+ for (qax = 0; qax <= 3; qax ++) /* 3 */
+ for (qay = 0; qay <= lay; qay ++) /* 35 */
+ for (qaz = 0; qaz <= laz; qaz ++) { /* 4 */
+ offs = 5 + qay * xw * 4 + xw * qax + qaz;
+ aa[offs] = aa[offs] & (*sil[picnum])[qay][qaz];
+ }
- { Registers are now returned to original status. }
+ for (fv = 5; fv <= with.size - 2; fv ++)
+ aa[fv] = aa[fv] ^ (*mani[picnum])[fv];
- { Righto. DX is now all worked out OK. We must now find out the
- contents of: 1) aa[dx], and 2) (harder) sil[picnum]^[BL,CL]. Gulp. }
+#else
+ /* OK, here's the same thing in assembler...
+
+ AL is Qax,
+ BL is Qay,
+ CL is Qaz,
+ DX is Offs */
+
+ /* For the first part: */
+ xwidth = xw;
+ segsil = seg(*sil[picnum]);
+ ofssil = ofs(*sil[picnum]);
+
+ /* For the first and second parts: */
+ segmani = seg(*mani[picnum]); /* It's easier to do this in Pascal, and */
+ ofsmani = ofs(*mani[picnum]) + 1; /* besides it only goes round once here. */
+ /* Segment of AA is always the current data segment. */
+ ofsaa = ofs(aa) + 5;
+ realofsaa = ofs(aa) - 1; /* We may not need this. */
+ z = with.size - 7;
+ /*
+ asm
+
+ xor ax,ax; { Initialise ax, bx, and cx, using a rather }
+ @QAXloop: { AL }
+
+ xor bx,bx; { nifty speed trick. }
+ @QAYloop: { BL }
+
+ xor cx,cx;
+ @QAZloop: { CL }
+
+ { Right, well, here we are. We have to do some rather nifty array
+ manipulation, stuff like that. We're trying to assemblerise:
+ DX:= 5 + BX * xw * 4 + xw * AX + CX;
+ aa[DX]:=aa[DX] and sil[picnum]^[BL,CL]; }
+
+ push ax; {AXcdx} { OK, we're going to do some strange things }
+ { with ax, so we'd better save it. }
+ mov dx,5; { First of all... set dx to 5. }
+ add dx,cx; { DX now = 5+CX }
+ mul xwidth; { Multiply ax by xw (the Pascal variable.) }
+ add dx,ax; { DX now = 5+CX+xw*AX }
+
+ { Right. Mul only works on ax. Don't ask me why. Ask Intel. Anyway,
+ since ax is saved on the stack, we can move bx over it. Note that
+ if xw was a word, using mul would have destroyed the contents of
+ dx. NOT a good idea! }
+
+ push cx; {CXmul} { We must just borrow cx for a second. }
+ mov ax,bx; { Make ax = bx. }
+ mul xwidth; { Do the same to it as we did to ax before. }
+ mov cl,2;
+ shl ax,cl; { And multiply it by 4 (i.e., shl it by 2.) }
+ add dx,ax; { DX now = 5+CX+xw*AX+xw*BX*4. That's OK. }
+
+ pop cx; {CXmul}
+ pop ax; {AXcdx} { Now we have to get ax and cx back again. }
+
+ { Registers are now returned to original status. }
+
+ { Righto. DX is now all worked out OK. We must now find out the
+ contents of: 1) aa[dx], and 2) (harder) sil[picnum]^[BL,CL]. Gulp. }
- { DS already points to the segment of AA. So... let's use CL to
- put aa[dx] in, and use BX for the offset. Looks like we're going
- to have to push a few registers! }
+ { DS already points to the segment of AA. So... let's use CL to
+ put aa[dx] in, and use BX for the offset. Looks like we're going
+ to have to push a few registers! }
- push ax; { AXaa. Saving loop value of AX. }
- { Let's use ax to do our dirty work with. }
- push dx; { Saving Offs(DX.) }
+ push ax; { AXaa. Saving loop value of AX. }
+ { Let's use ax to do our dirty work with. }
+ push dx; { Saving Offs(DX.) }
- push bx; { BXaa. Saving loop value of BX. }
+ push bx; { BXaa. Saving loop value of BX. }
- mov bx,realofsaa; { aa is now pointed to by [ds:bx]. }
- add bx,dx; { Offset is dx bytes. }
- mov dl,[bx]; { cl now holds the contents of aa[dx]. }
+ mov bx,realofsaa; { aa is now pointed to by [ds:bx]. }
+ add bx,dx; { Offset is dx bytes. }
+ mov dl,[bx]; { cl now holds the contents of aa[dx]. }
- pop bx; { BXaa. Restoring loop value of BX. }
+ pop bx; { BXaa. Restoring loop value of BX. }
- { Stack now holds: Offs(DX). }
+ { Stack now holds: Offs(DX). }
- { ^^^ That works. Now to find sil[picnum]^[BL,CL]. Our first task is
- to find the address of sil[picnum]^. Since it's dynamic, we must
- push and pop ds. }
+ { ^^^ That works. Now to find sil[picnum]^[BL,CL]. Our first task is
+ to find the address of sil[picnum]^. Since it's dynamic, we must
+ push and pop ds. }
- push ds; { DXaa. Saving value of Trip5's data segment. }
- { Push ds. Now we can put the segment of sil[picnum]^... }
- mov ds,segsil; { ...into ds, and... }
- mov ax,ofssil; { ...its offset into ax. }
- { Addr of sil[picnum]^ is now in [ds:ax]. BUT we want a particular
- offset: to wit, [BL,CL]. Now, siltype is defined so that this offset
- will be at an offset of (BL*11)+CL. }
+ push ds; { DXaa. Saving value of Trip5's data segment. }
+ { Push ds. Now we can put the segment of sil[picnum]^... }
+ mov ds,segsil; { ...into ds, and... }
+ mov ax,ofssil; { ...its offset into ax. }
+ { Addr of sil[picnum]^ is now in [ds:ax]. BUT we want a particular
+ offset: to wit, [BL,CL]. Now, siltype is defined so that this offset
+ will be at an offset of (BL*11)+CL. }
- push bx; { Saving loop value of BX. }
- push cx; { Saving loop value of CX. }
- push ax; { Saving offset of sil[picnum]^. }
- { Save them for a bit (!) }
- mov al,bl; { Put bl into al. }
- mov bl,11; { ... }
- mul bl; { ...times it by 11. }
- mov bx,ax; { Put it back into bx (now = bx*11) }
- pop ax; { Restoring offset of sil[picnum]^. }
- { Get ax back again. }
- add ax,bx; { Add (original bl)*11 to al. }
- add ax,cx; { Add cl to al. }
- { AX now holds the offset of sil[picnum]^[bx,cl]. }
+ push bx; { Saving loop value of BX. }
+ push cx; { Saving loop value of CX. }
+ push ax; { Saving offset of sil[picnum]^. }
+ { Save them for a bit (!) }
+ mov al,bl; { Put bl into al. }
+ mov bl,11; { ... }
+ mul bl; { ...times it by 11. }
+ mov bx,ax; { Put it back into bx (now = bx*11) }
+ pop ax; { Restoring offset of sil[picnum]^. }
+ { Get ax back again. }
+ add ax,bx; { Add (original bl)*11 to al. }
+ add ax,cx; { Add cl to al. }
+ { AX now holds the offset of sil[picnum]^[bx,cl]. }
- { Stack now holds: loop value of AX, Trip5's DS, lv of BX, lv of CX. }
+ { Stack now holds: loop value of AX, Trip5's DS, lv of BX, lv of CX. }
- { Right. Now the address of sil[picnum]^[bl,cl] is in [ds:ax]. Let's
- get the elusive byte itself, and put it into ax. Firstly, we must
- swap ax and bx. }
+ { Right. Now the address of sil[picnum]^[bl,cl] is in [ds:ax]. Let's
+ get the elusive byte itself, and put it into ax. Firstly, we must
+ swap ax and bx. }
- xchg ax,bx;
- mov al,[bx]; { AX now contains sil[picnum]^[bl,cl], AT LAST!! }
+ xchg ax,bx;
+ mov al,[bx]; { AX now contains sil[picnum]^[bl,cl], AT LAST!! }
- { So now AL contains the sil stuff, and DL holds aa[offs]. }
+ { So now AL contains the sil stuff, and DL holds aa[offs]. }
- and al,dl; { aa[offs]:=aa[offs] and sil[picnum]^[Qay,Qaz]. }
+ and al,dl; { aa[offs]:=aa[offs] and sil[picnum]^[Qay,Qaz]. }
- pop cx; { Restoring loop value of CX. }
- pop bx; { Restoring loop value of BX. }
- pop ds; { Restore value of Trip5's data segment. }
+ pop cx; { Restoring loop value of CX. }
+ pop bx; { Restoring loop value of BX. }
+ pop ds; { Restore value of Trip5's data segment. }
- { Right. AL contains the byte we need to replace aa[offs] with.
- All that's left to do is to put it back. Remember that we already
- have the segment of aa in the current DS, so... }
+ { Right. AL contains the byte we need to replace aa[offs] with.
+ All that's left to do is to put it back. Remember that we already
+ have the segment of aa in the current DS, so... }
- pop dx; { Restore Offs(DX). }
+ pop dx; { Restore Offs(DX). }
- { Stack is now as when we entered the loop. Since this copy of DX
- is now being used for the last time, we can muck around with it. }
+ { Stack is now as when we entered the loop. Since this copy of DX
+ is now being used for the last time, we can muck around with it. }
- { Recap: DX now holds the offset from the start of AA. If we add
- the offset of aa to it, we'll get the offset of the byte we want.
- DS is already set up. }
+ { Recap: DX now holds the offset from the start of AA. If we add
+ the offset of aa to it, we'll get the offset of the byte we want.
+ DS is already set up. }
- push bx; { I'm just borrowing bx for a sec. I'll put it back in 5 lines.}
- mov bx,realofsaa;
- add dx,bx; { Now aa[offs] is at aa[ds:dx]. }
- mov bx,dx; { But we can't address memory with dx, so use bx. }
- mov [bx],al; { Shove it into the memory! }
- pop bx; { See! I said I would. }
+ push bx; { I'm just borrowing bx for a sec. I'll put it back in 5 lines.}
+ mov bx,realofsaa;
+ add dx,bx; { Now aa[offs] is at aa[ds:dx]. }
+ mov bx,dx; { But we can't address memory with dx, so use bx. }
+ mov [bx],al; { Shove it into the memory! }
+ pop bx; { See! I said I would. }
- pop ax; { Restore loop value of AX. }
+ pop ax; { Restore loop value of AX. }
- { Right, the fancy stuff's all done now. Finish off the loop code. }
+ { Right, the fancy stuff's all done now. Finish off the loop code. }
- inc cl;
- cmp cl,laz; { CL must not reach 5. Does it? }
- jnz @QAZloop; { no, keep going around the QAZloop. }
+ inc cl;
+ cmp cl,laz; { CL must not reach 5. Does it? }
+ jnz @QAZloop; { no, keep going around the QAZloop. }
- inc bl;
- cmp bl,lay; { BL must not reach 36. Does it? }
- jnz @QAYloop; { no, keep going around the QAYloop. }
+ inc bl;
+ cmp bl,lay; { BL must not reach 36. Does it? }
+ jnz @QAYloop; { no, keep going around the QAYloop. }
- inc al;
- cmp al,4; { AL must not reach 4. Does it? }
- jnz @QAXloop; { no, keep going around the QAXloop. }
+ inc al;
+ cmp al,4; { AL must not reach 4. Does it? }
+ jnz @QAXloop; { no, keep going around the QAXloop. }
- { al, bl and cl are now at their maxima, so we can stop the loops. }
+ { al, bl and cl are now at their maxima, so we can stop the loops. }
- { *** SECOND ASSEMBLER BIT. *** }
+ { *** SECOND ASSEMBLER BIT. *** }
- mov cx,z; { Find the size of the array, -7. }
- mov bx,ofsmani; { Now find the offset and put that into bx. }
- mov dx,ofsaa; { We'll use dx to be the same as fv, +5. }
+ mov cx,z; { Find the size of the array, -7. }
+ mov bx,ofsmani; { Now find the offset and put that into bx. }
+ mov dx,ofsaa; { We'll use dx to be the same as fv, +5. }
- { DS should already hold the segment of aa. }
+ { DS should already hold the segment of aa. }
- @nextbyte: { Main loop... }
+ @nextbyte: { Main loop... }
- { Firstly, we must get hold of aa[fv] (here called aa[dx].)}
- push bx; { We need to "borrow" bx for a second... }
- mov bx,dx; { Wrong register- shove it into bx. }
- mov al,[bx]; { Get aa[fv] and put it into al. }
- pop bx; { Right, you can have bx back again. }
+ { Firstly, we must get hold of aa[fv] (here called aa[dx].)}
+ push bx; { We need to "borrow" bx for a second... }
+ mov bx,dx; { Wrong register- shove it into bx. }
+ mov al,[bx]; { Get aa[fv] and put it into al. }
+ pop bx; { Right, you can have bx back again. }
- { Secondly, we must get hold of mani[picnum]^[fv]. }
- push cx; { Let's borrow cx for this one. }
- push ds; { we must use ds to point to segmani. }
- mov ds,segmani; { Find the segment of mani[picnum]^, }
- mov cl,[bx]; { now get the byte at [ds:bx] and put it into cl. }
- pop ds; { Put ds back to being the current data segment. }
+ { Secondly, we must get hold of mani[picnum]^[fv]. }
+ push cx; { Let's borrow cx for this one. }
+ push ds; { we must use ds to point to segmani. }
+ mov ds,segmani; { Find the segment of mani[picnum]^, }
+ mov cl,[bx]; { now get the byte at [ds:bx] and put it into cl. }
+ pop ds; { Put ds back to being the current data segment. }
- { Right: now we can do what we came here for in the first place.
- AL contains aa[fv], CL contains mani[picnum]^[fv]. }
+ { Right: now we can do what we came here for in the first place.
+ AL contains aa[fv], CL contains mani[picnum]^[fv]. }
- xor al,cl; { Xor al with bl. That's it! }
+ xor al,cl; { Xor al with bl. That's it! }
- pop cx; { We don't need cx any more for this now. }
+ pop cx; { We don't need cx any more for this now. }
- push bx; { Borrow bx... }
- mov bx,dx; { Put dx into bx. }
- mov [bx],al; { Put the changed al back into [ds:bx] (ie, [ds:dx].}
- pop bx; { Get it back. }
+ push bx; { Borrow bx... }
+ mov bx,dx; { Put dx into bx. }
+ mov [bx],al; { Put the changed al back into [ds:bx] (ie, [ds:dx].}
+ pop bx; { Get it back. }
- inc bx; { Add one to bx, for the next char. }
- inc dx; { And dx, for the same reason. }
+ inc bx; { Add one to bx, for the next char. }
+ inc dx; { And dx, for the same reason. }
- loop @nextbyte; { Keep going round until cx=0. }
-*/
-{;
-}
+ loop @nextbyte; { Keep going round until cx=0. }
+ */
+ {
+ ;
+ }
#endif
- /* Now.. let's try pasting it back again! */
+ /* Now.. let's try pasting it back again! */
- putimage(x,y,aa,0);
- }
+ putimage(x, y, aa, 0);
+ }
}
-void triptype::turn(byte whichway)
-{
- if (whichway==8) face=0; else face=whichway;
+void triptype::turn(byte whichway) {
+ if (whichway == 8) face = 0;
+ else face = whichway;
}
-void triptype::appear(integer wx,integer wy, byte wf)
-{
- x=(wx / 8)*8; y=wy; ox[cp]=wx; oy[cp]=wy; turn(wf);
- visible=true; ix=0; iy=0;
+void triptype::appear(integer wx, integer wy, byte wf) {
+ x = (wx / 8) * 8;
+ y = wy;
+ ox[cp] = wx;
+ oy[cp] = wy;
+ turn(wf);
+ visible = true;
+ ix = 0;
+ iy = 0;
}
-static boolean collision_check()
-{
- byte fv;
-
- boolean collision_check_result;
- for( fv=1; fv <= numtr; fv ++)
- if (tr[fv].quick && (tr[fv].whichsprite!=whichsprite) &&
- ((x+a.xl)>tr[fv].x) &&
- (x<(tr[fv].x+tr[fv].a.xl)) &&
- (tr[fv].y==y))
- {
- collision_check_result=true;
- return collision_check_result;
- }
- collision_check_result=false;
- return collision_check_result;
+static boolean collision_check() {
+ byte fv;
+
+ boolean collision_check_result;
+ for (fv = 1; fv <= numtr; fv ++)
+ if (tr[fv].quick && (tr[fv].whichsprite != whichsprite) &&
+ ((x + a.xl) > tr[fv].x) &&
+ (x < (tr[fv].x + tr[fv].a.xl)) &&
+ (tr[fv].y == y)) {
+ collision_check_result = true;
+ return collision_check_result;
+ }
+ collision_check_result = false;
+ return collision_check_result;
}
-void triptype::walk()
-{
- byte tc; bytefield r;
-
-
- if (visible)
- {
- {
- x1=(x / 8)-1;
- if (x1==255) x1=0;
- y1=y-2;
- x2=((x+a.xl) / 8)+1;
- y2=y+a.yl+2;
- }
- getset[1-cp].remember(r);
- }
-
- if (~ doing_sprite_run)
- {
- ox[cp]=x; oy[cp]=y;
- if (homing) homestep();
- x=x+ix; y=y+iy;
- }
-
- if (check_me)
- {
- if (collision_check())
- {
- bounce();
- return;
- }
-
- tc=checkfeet(x,x+a.xl,oy[cp],y,a.yl);
-
- if ((tc!=0) & (~ doing_sprite_run))
- { void& with = magics[tc];
- switch (op) {
- case exclaim: {
- bounce(); mustexclaim=true; saywhat=data;
- }
- break;
- case bounces: bounce(); break;
- case transport: fliproom(hi(data),lo(data)); break;
- case unfinished: {
- bounce();
- display("\7Sorry.\3\rThis place is not available yet!");
- }
- break;
- case special: call_special(data); break;
- case mopendoor: open_the_door(hi(data),lo(data),tc); break;
- }}
- }
-
- if (~ doing_sprite_run)
- {
- count += 1;
- if (((ix!=0) || (iy!=0)) && (count>1))
- {
- step += 1; if (step==a.seq) step=0; count=0;
- }
- }
+void triptype::walk() {
+ byte tc;
+ bytefield r;
+
+
+ if (visible) {
+ {
+ x1 = (x / 8) - 1;
+ if (x1 == 255) x1 = 0;
+ y1 = y - 2;
+ x2 = ((x + a.xl) / 8) + 1;
+ y2 = y + a.yl + 2;
+ }
+ getset[1 - cp].remember(r);
+ }
+
+ if (~ doing_sprite_run) {
+ ox[cp] = x;
+ oy[cp] = y;
+ if (homing) homestep();
+ x = x + ix;
+ y = y + iy;
+ }
+
+ if (check_me) {
+ if (collision_check()) {
+ bounce();
+ return;
+ }
+
+ tc = checkfeet(x, x + a.xl, oy[cp], y, a.yl);
+
+ if ((tc != 0) & (~ doing_sprite_run)) {
+ void &with = magics[tc];
+ switch (op) {
+ case exclaim: {
+ bounce();
+ mustexclaim = true;
+ saywhat = data;
+ }
+ break;
+ case bounces:
+ bounce();
+ break;
+ case transport:
+ fliproom(hi(data), lo(data));
+ break;
+ case unfinished: {
+ bounce();
+ display("\7Sorry.\3\rThis place is not available yet!");
+ }
+ break;
+ case special:
+ call_special(data);
+ break;
+ case mopendoor:
+ open_the_door(hi(data), lo(data), tc);
+ break;
+ }
+ }
+ }
+
+ if (~ doing_sprite_run) {
+ count += 1;
+ if (((ix != 0) || (iy != 0)) && (count > 1)) {
+ step += 1;
+ if (step == a.seq) step = 0;
+ count = 0;
+ }
+ }
}
-void triptype::bounce()
-{
- x=ox[cp]; y=oy[cp];
- if (check_me) stopwalking(); else stopwalk();
- oncandopageswap=false;
- showrw;
- oncandopageswap=true;
+void triptype::bounce() {
+ x = ox[cp];
+ y = oy[cp];
+ if (check_me) stopwalking();
+ else stopwalk();
+ oncandopageswap = false;
+ showrw;
+ oncandopageswap = true;
}
-shortint sgn(integer x)
-{
- shortint sgn_result;
- if (x>0) sgn_result=1; else
- if (x<0) sgn_result=-1; else
- sgn_result=0; /* x=0 */
- return sgn_result;
+shortint sgn(integer x) {
+ shortint sgn_result;
+ if (x > 0) sgn_result = 1;
+ else if (x < 0) sgn_result = -1;
+ else
+ sgn_result = 0; /* x=0 */
+ return sgn_result;
}
-void triptype::walkto(byte pednum)
-{
- speed(sgn(peds[pednum].x-x)*4,sgn(peds[pednum].y-y));
- hx=peds[pednum].x-a.xl / 2;
- hy=peds[pednum].y-a.yl; homing=true;
+void triptype::walkto(byte pednum) {
+ speed(sgn(peds[pednum].x - x) * 4, sgn(peds[pednum].y - y));
+ hx = peds[pednum].x - a.xl / 2;
+ hy = peds[pednum].y - a.yl;
+ homing = true;
}
-void triptype::stophoming()
-{
- homing=false;
+void triptype::stophoming() {
+ homing = false;
}
-void triptype::homestep()
-{
- integer temp;
-
- if ((hx==x) && (hy==y))
- { /* touching the target */
- stopwalk();
- return;
- }
- ix=0; iy=0;
- if (hy!=y)
- {
- temp=hy-y; if (temp>4) iy=4; else if (temp<-4) iy=-4; else iy=temp;
- }
- if (hx!=x)
- {
- temp=hx-x; if (temp>4) ix=4; else if (temp<-4) ix=-4; else ix=temp;
- }
+void triptype::homestep() {
+ integer temp;
+
+ if ((hx == x) && (hy == y)) {
+ /* touching the target */
+ stopwalk();
+ return;
+ }
+ ix = 0;
+ iy = 0;
+ if (hy != y) {
+ temp = hy - y;
+ if (temp > 4) iy = 4;
+ else if (temp < -4) iy = -4;
+ else iy = temp;
+ }
+ if (hx != x) {
+ temp = hx - x;
+ if (temp > 4) ix = 4;
+ else if (temp < -4) ix = -4;
+ else ix = temp;
+ }
}
-void triptype::speed(shortint xx,shortint yy)
-{
- ix=xx; iy=yy;
- if ((ix==0) && (iy==0)) return; /* no movement */
- if (ix==0)
- { /* No horz movement */
- if (iy<0) turn(up); else turn(down);
- } else
- {
- if (ix<0) turn(left); else turn(right);
- }
+void triptype::speed(shortint xx, shortint yy) {
+ ix = xx;
+ iy = yy;
+ if ((ix == 0) && (iy == 0)) return; /* no movement */
+ if (ix == 0) {
+ /* No horz movement */
+ if (iy < 0) turn(up);
+ else turn(down);
+ } else {
+ if (ix < 0) turn(left);
+ else turn(right);
+ }
}
-void triptype::stopwalk()
-{
- ix=0; iy=0; homing=false;
+void triptype::stopwalk() {
+ ix = 0;
+ iy = 0;
+ homing = false;
}
-void triptype::chatter()
-{
- talkx=x+a.xl / 2; talky=y; talkf=a.fgc; talkb=a.bgc;
+void triptype::chatter() {
+ talkx = x + a.xl / 2;
+ talky = y;
+ talkf = a.fgc;
+ talkb = a.bgc;
}
-void triptype::set_up_saver(trip_saver_type& v)
-{
- v.whichsprite=whichsprite;
- v.face=face;
- v.step=step;
- v.x=x;
- v.y=y;
- v.ix=ix;
- v.iy=iy;
- v.visible=visible;
- v.homing=homing;
- v.check_me=check_me;
- v.count=count;
- v.xw=xw;
- v.xs=xs;
- v.ys=ys;
- v.totalnum=totalnum;
- v.hx=hx;
- v.hy=hy;
- v.call_eachstep=call_eachstep;
- v.eachstep=eachstep;
- v.vanishifstill=vanishifstill;
+void triptype::set_up_saver(trip_saver_type &v) {
+ v.whichsprite = whichsprite;
+ v.face = face;
+ v.step = step;
+ v.x = x;
+ v.y = y;
+ v.ix = ix;
+ v.iy = iy;
+ v.visible = visible;
+ v.homing = homing;
+ v.check_me = check_me;
+ v.count = count;
+ v.xw = xw;
+ v.xs = xs;
+ v.ys = ys;
+ v.totalnum = totalnum;
+ v.hx = hx;
+ v.hy = hy;
+ v.call_eachstep = call_eachstep;
+ v.eachstep = eachstep;
+ v.vanishifstill = vanishifstill;
}
-void triptype::unload_saver(trip_saver_type v)
-{
- whichsprite=v.whichsprite;
- face=v.face;
- step=v.step;
- x=v.x;
- y=v.y;
- ix=v.ix;
- iy=v.iy;
- visible=v.visible;
- homing=v.homing;
- check_me=v.check_me;
- count=v.count;
- xw=v.xw;
- xs=v.xs;
- ys=v.ys;
- totalnum=v.totalnum;
- hx=v.hx;
- hy=v.hy;
- call_eachstep=v.call_eachstep;
- eachstep=v.eachstep;
- vanishifstill=v.vanishifstill;
+void triptype::unload_saver(trip_saver_type v) {
+ whichsprite = v.whichsprite;
+ face = v.face;
+ step = v.step;
+ x = v.x;
+ y = v.y;
+ ix = v.ix;
+ iy = v.iy;
+ visible = v.visible;
+ homing = v.homing;
+ check_me = v.check_me;
+ count = v.count;
+ xw = v.xw;
+ xs = v.xs;
+ ys = v.ys;
+ totalnum = v.totalnum;
+ hx = v.hx;
+ hy = v.hy;
+ call_eachstep = v.call_eachstep;
+ eachstep = v.eachstep;
+ vanishifstill = v.vanishifstill;
}
-void triptype::savedata(untyped_file& f)
-{
- trip_saver_type tripsaver;
-
- set_up_saver(tripsaver);
-
- {
- blockwrite(f,tripsaver.whichsprite,1);
- blockwrite(f,tripsaver.face,1); blockwrite(f,tripsaver.step,1);
- blockwrite(f,tripsaver.x,2); blockwrite(f,tripsaver.y,2);
- blockwrite(f,tripsaver.ix,1); blockwrite(f,tripsaver.iy,1);
- blockwrite(f,tripsaver.visible,1);
- blockwrite(f,tripsaver.homing,1);
- blockwrite(f,tripsaver.check_me,1);
- blockwrite(f,tripsaver.count,1);
- blockwrite(f,tripsaver.xw,1);
- blockwrite(f,tripsaver.xs,1); blockwrite(f,tripsaver.ys,1);
- blockwrite(f,tripsaver.totalnum,1);
- blockwrite(f,tripsaver.hx,2); blockwrite(f,tripsaver.hy,2);
- blockwrite(f,tripsaver.call_eachstep,1);
- blockwrite(f,tripsaver.eachstep,1);
- blockwrite(f,tripsaver.vanishifstill,1);
- }
+void triptype::savedata(untyped_file &f) {
+ trip_saver_type tripsaver;
+
+ set_up_saver(tripsaver);
+
+ {
+ blockwrite(f, tripsaver.whichsprite, 1);
+ blockwrite(f, tripsaver.face, 1);
+ blockwrite(f, tripsaver.step, 1);
+ blockwrite(f, tripsaver.x, 2);
+ blockwrite(f, tripsaver.y, 2);
+ blockwrite(f, tripsaver.ix, 1);
+ blockwrite(f, tripsaver.iy, 1);
+ blockwrite(f, tripsaver.visible, 1);
+ blockwrite(f, tripsaver.homing, 1);
+ blockwrite(f, tripsaver.check_me, 1);
+ blockwrite(f, tripsaver.count, 1);
+ blockwrite(f, tripsaver.xw, 1);
+ blockwrite(f, tripsaver.xs, 1);
+ blockwrite(f, tripsaver.ys, 1);
+ blockwrite(f, tripsaver.totalnum, 1);
+ blockwrite(f, tripsaver.hx, 2);
+ blockwrite(f, tripsaver.hy, 2);
+ blockwrite(f, tripsaver.call_eachstep, 1);
+ blockwrite(f, tripsaver.eachstep, 1);
+ blockwrite(f, tripsaver.vanishifstill, 1);
+ }
}
-void triptype::loaddata(untyped_file& f)
-{
- word spritewas,spriteis,saveface,savex,savey,savestep;
- boolean wasquick;
- trip_saver_type tripsaver;
-
-
- wasquick=quick;
- quick=true; spritewas=whichsprite;
-
- {
- blockread(f,tripsaver.whichsprite,1);
- blockread(f,tripsaver.face,1); blockread(f,tripsaver.step,1);
- blockread(f,tripsaver.x,2); blockread(f,tripsaver.y,2);
- blockread(f,tripsaver.ix,1); blockread(f,tripsaver.iy,1);
-
- if ((! wasquick) || ((unsigned char)tripsaver.whichsprite!=spritewas))
- {
- spriteis=tripsaver.whichsprite;
- savex=tripsaver.x; savey=tripsaver.y; saveface=tripsaver.face; savestep=tripsaver.step;
-
- if (wasquick) done();
-
- init(spriteis,tripsaver.check_me);
-
- appear(savex,savey,saveface); tripsaver.step=savestep;
- }
-
- blockread(f,tripsaver.visible,1);
- blockread(f,tripsaver.homing,1);
- blockread(f,tripsaver.check_me,1);
- blockread(f,tripsaver.count,1);
- blockread(f,tripsaver.xw,1);
- blockread(f,tripsaver.xs,1); blockread(f,tripsaver.ys,1);
- blockread(f,tripsaver.totalnum,1);
- blockread(f,tripsaver.hx,2); blockread(f,tripsaver.hy,2);
- blockread(f,tripsaver.call_eachstep,1);
- blockread(f,tripsaver.eachstep,1);
- blockread(f,tripsaver.vanishifstill,1);
- }
-
- unload_saver(tripsaver);
+void triptype::loaddata(untyped_file &f) {
+ word spritewas, spriteis, saveface, savex, savey, savestep;
+ boolean wasquick;
+ trip_saver_type tripsaver;
+
+
+ wasquick = quick;
+ quick = true;
+ spritewas = whichsprite;
+
+ {
+ blockread(f, tripsaver.whichsprite, 1);
+ blockread(f, tripsaver.face, 1);
+ blockread(f, tripsaver.step, 1);
+ blockread(f, tripsaver.x, 2);
+ blockread(f, tripsaver.y, 2);
+ blockread(f, tripsaver.ix, 1);
+ blockread(f, tripsaver.iy, 1);
+
+ if ((! wasquick) || ((unsigned char)tripsaver.whichsprite != spritewas)) {
+ spriteis = tripsaver.whichsprite;
+ savex = tripsaver.x;
+ savey = tripsaver.y;
+ saveface = tripsaver.face;
+ savestep = tripsaver.step;
+
+ if (wasquick) done();
+
+ init(spriteis, tripsaver.check_me);
+
+ appear(savex, savey, saveface);
+ tripsaver.step = savestep;
+ }
+
+ blockread(f, tripsaver.visible, 1);
+ blockread(f, tripsaver.homing, 1);
+ blockread(f, tripsaver.check_me, 1);
+ blockread(f, tripsaver.count, 1);
+ blockread(f, tripsaver.xw, 1);
+ blockread(f, tripsaver.xs, 1);
+ blockread(f, tripsaver.ys, 1);
+ blockread(f, tripsaver.totalnum, 1);
+ blockread(f, tripsaver.hx, 2);
+ blockread(f, tripsaver.hy, 2);
+ blockread(f, tripsaver.call_eachstep, 1);
+ blockread(f, tripsaver.eachstep, 1);
+ blockread(f, tripsaver.vanishifstill, 1);
+ }
+
+ unload_saver(tripsaver);
}
-triptype* triptype::done()
-{
- integer gd,gm; varying_string<2> xx;
- byte fv/*,nds*/;
- byte aa,bb;
- longint id; word soa;
-
- {
- adxtype& with = a;
-
-/* nds:=num div seq;*/
- xw=with.xl / 8; if ((with.xl % 8)>0) xw += 1;
- for( aa=1; aa <= /*nds*seq*/ with.num; aa ++)
- {
- totalnum -= 1;
- freemem(mani[totalnum],with.size-6);
- freemem(sil[totalnum],11*(with.yl+1)); /* <<- Width of a siltype. */
- }
- }
-
- quick=false; whichsprite=177;
- return this;
+triptype *triptype::done() {
+ integer gd, gm;
+ varying_string<2> xx;
+ byte fv/*,nds*/;
+ byte aa, bb;
+ longint id;
+ word soa;
+
+ {
+ adxtype &with = a;
+
+ /* nds:=num div seq;*/
+ xw = with.xl / 8;
+ if ((with.xl % 8) > 0) xw += 1;
+ for (aa = 1; aa <= /*nds*seq*/ with.num; aa ++) {
+ totalnum -= 1;
+ freemem(mani[totalnum], with.size - 6);
+ freemem(sil[totalnum], 11 * (with.yl + 1)); /* <<- Width of a siltype. */
+ }
+ }
+
+ quick = false;
+ whichsprite = 177;
+ return this;
}
-getsettype* getsettype::init()
-{
- numleft=0; /* initialise array pointer */
- return this;
+getsettype *getsettype::init() {
+ numleft = 0; /* initialise array pointer */
+ return this;
}
-void getsettype::remember(bytefield r)
-{
- numleft += 1;
- if (numleft>maxgetset) runerror(runerr_getset_overflow);
- gs[numleft]=r;
+void getsettype::remember(bytefield r) {
+ numleft += 1;
+ if (numleft > maxgetset) runerror(runerr_getset_overflow);
+ gs[numleft] = r;
}
-void getsettype::recall(bytefield& r)
-{
- r=gs[numleft];
- numleft -= 1;
+void getsettype::recall(bytefield &r) {
+ r = gs[numleft];
+ numleft -= 1;
}
-void rwsp(byte t,byte r)
-{
- { triptype& with = tr[t]; switch (r) {
- case up: speed( 0,-with.ys); break; case down: speed( 0, with.ys); break; case left: speed(-with.xs, 0); break;
- case right: speed( with.xs, 0); break; case ul: speed(-with.xs,-with.ys); break; case ur: speed( with.xs,-with.ys); break;
- case dl: speed(-with.xs, with.ys); break; case dr: speed( with.xs, with.ys); break;
- }}
+void rwsp(byte t, byte r) {
+ {
+ triptype &with = tr[t];
+ switch (r) {
+ case up:
+ speed(0, -with.ys);
+ break;
+ case down:
+ speed(0, with.ys);
+ break;
+ case left:
+ speed(-with.xs, 0);
+ break;
+ case right:
+ speed(with.xs, 0);
+ break;
+ case ul:
+ speed(-with.xs, -with.ys);
+ break;
+ case ur:
+ speed(with.xs, -with.ys);
+ break;
+ case dl:
+ speed(-with.xs, with.ys);
+ break;
+ case dr:
+ speed(with.xs, with.ys);
+ break;
+ }
+ }
}
-void apped(byte trn,byte np)
-{
- { triptype& with = tr[trn];
- {
- void& with1 = peds[np];
+void apped(byte trn, byte np) {
+ {
+ triptype &with = tr[trn];
+ {
+ void &with1 = peds[np];
- appear(with.x-with.a.xl / 2,with.y-with.a.yl,dir);
- rwsp(trn,dir);
- }}
+ appear(with.x - with.a.xl / 2, with.y - with.a.yl, dir);
+ rwsp(trn, dir);
+ }
+ }
}
void getback();
@@ -1344,122 +1457,126 @@ static bytefield r;
begin { By De Morgan's law: }
overlap:=(x2>=x3) and (x4>=x1) and (y2>=y3) and (y4>=y1);
end;*/
- /* x1,x2 - as bytefield, but *8. y1,y2 - as bytefield.
- x3,y3 = mx,my. x4,y4 = mx+16,my+16. */
-static boolean overlaps_with_mouse()
-{
- boolean overlaps_with_mouse_result;
- overlaps_with_mouse_result=
- (x2*8>=mx) && (mx+16>=x1*8) && (y2>=my) && (my+16>=y1);
- return overlaps_with_mouse_result;
+/* x1,x2 - as bytefield, but *8. y1,y2 - as bytefield.
+ x3,y3 = mx,my. x4,y4 = mx+16,my+16. */
+static boolean overlaps_with_mouse() {
+ boolean overlaps_with_mouse_result;
+ overlaps_with_mouse_result =
+ (x2 * 8 >= mx) && (mx + 16 >= x1 * 8) && (y2 >= my) && (my + 16 >= y1);
+ return overlaps_with_mouse_result;
}
-void getback()
-{
- byte fv;
- boolean endangered;
+void getback() {
+ byte fv;
+ boolean endangered;
- endangered=false;
-/* Super_Off;*/
+ endangered = false;
+ /* Super_Off;*/
- { getsettype& with = getset[1-cp];
- while (with.numleft>0)
- {
- recall(r);
+ {
+ getsettype &with = getset[1 - cp];
+ while (with.numleft > 0) {
+ recall(r);
-/* if overlaps_with_mouse and not endangered then
- begin
- endangered:=true;
- blitfix;
- Super_Off;
- end;*/
+ /* if overlaps_with_mouse and not endangered then
+ begin
+ endangered:=true;
+ blitfix;
+ Super_Off;
+ end;*/
- mblit(x1,y1,x2,y2,3,1-cp);
- }}
+ mblit(x1, y1, x2, y2, 3, 1 - cp);
+ }
+ }
- blitfix;
- /*if endangered then*/ /*Super_On;*/
+ blitfix;
+ /*if endangered then*/ /*Super_On;*/
}
/* Eachstep procedures: */
-void follow_avvy_y(byte tripnum)
-{
- {
- triptype& with = tr[tripnum];
-
- if (tr[1].face==left) return;
- if (with.homing) with.hy=tr[1].y; else
- {
- if (with.y<tr[1].y)
- with.y += 1; else
- if (with.y>tr[1].y)
- with.y -= 1; else
- return;
- if (with.ix==0) { with.step += 1; if (with.step==with.a.seq) with.step=0; with.count=0; }
- }
- }
+void follow_avvy_y(byte tripnum) {
+ {
+ triptype &with = tr[tripnum];
+
+ if (tr[1].face == left) return;
+ if (with.homing) with.hy = tr[1].y;
+ else {
+ if (with.y < tr[1].y)
+ with.y += 1;
+ else if (with.y > tr[1].y)
+ with.y -= 1;
+ else
+ return;
+ if (with.ix == 0) {
+ with.step += 1;
+ if (with.step == with.a.seq) with.step = 0;
+ with.count = 0;
+ }
+ }
+ }
}
-void back_and_forth(byte tripnum)
-{
- { triptype& with = tr[tripnum];
- if (! with.homing)
- {
- if (with.face==right) walkto(4); else walkto(5);
- }}
+void back_and_forth(byte tripnum) {
+ {
+ triptype &with = tr[tripnum];
+ if (! with.homing) {
+ if (with.face == right) walkto(4);
+ else walkto(5);
+ }
+ }
}
-void face_avvy(byte tripnum)
-{
- { triptype& with = tr[tripnum];
- if (! with.homing)
- {
- if (tr[1].x>=with.x) with.face=right;
- else with.face=left;
- }}
+void face_avvy(byte tripnum) {
+ {
+ triptype &with = tr[tripnum];
+ if (! with.homing) {
+ if (tr[1].x >= with.x) with.face = right;
+ else with.face = left;
+ }
+ }
}
-void arrow_procs(byte tripnum)
-{
- byte fv;
-
- { triptype& with = tr[tripnum];
- if (with.homing)
- { /* Arrow is still in flight. */
- /* We must check whether or not the arrow has collided with Avvy's head.
- This is so if: a) the bottom of the arrow is below Avvy's head,
- b) the left of the arrow is left of the right of Avvy's head, and
- c) the right of the arrow is right of the left of Avvy's head. */
- if (((with.y+with.a.yl)>=tr[1].y) /* A */
- && (with.x<=(tr[1].x+tr[1].a.xl)) /* B */
- && ((with.x+with.a.xl)>=tr[1].x)) /* C */
- { /* OK, it's hit him... what now? */
-
- tr[2].call_eachstep=false; /* prevent recursion. */
- dixi('Q',47); /* Complaint! */
- done(); /* Deallocate the arrow. */
-/* tr[1].done; { Deallocate normal pic of Avvy. }
-
- off;
- for fv:=0 to 1 do
- begin
- cp:=1-cp;
- getback;
- end;
- on;*/
-
- gameover;
-
- dna.user_moves_avvy=false; /* Stop the user from moving him. */
- set_up_timer(55,procnaughty_duke,reason_naughty_duke);
- }
- } else /* Arrow has hit the wall! */
- {
- done(); /* Deallocate the arrow. */
- show_one(3); /* Show pic of arrow stuck into the door. */
- dna.arrow_in_the_door=true; /* So that we can pick it up. */
- }}
+void arrow_procs(byte tripnum) {
+ byte fv;
+
+ {
+ triptype &with = tr[tripnum];
+ if (with.homing) {
+ /* Arrow is still in flight. */
+ /* We must check whether or not the arrow has collided with Avvy's head.
+ This is so if: a) the bottom of the arrow is below Avvy's head,
+ b) the left of the arrow is left of the right of Avvy's head, and
+ c) the right of the arrow is right of the left of Avvy's head. */
+ if (((with.y + with.a.yl) >= tr[1].y) /* A */
+ && (with.x <= (tr[1].x + tr[1].a.xl)) /* B */
+ && ((with.x + with.a.xl) >= tr[1].x)) { /* C */
+ /* OK, it's hit him... what now? */
+
+ tr[2].call_eachstep = false; /* prevent recursion. */
+ dixi('Q', 47); /* Complaint! */
+ done(); /* Deallocate the arrow. */
+ /* tr[1].done; { Deallocate normal pic of Avvy. }
+
+ off;
+ for fv:=0 to 1 do
+ begin
+ cp:=1-cp;
+ getback;
+ end;
+ on;*/
+
+ gameover;
+
+ dna.user_moves_avvy = false; /* Stop the user from moving him. */
+ set_up_timer(55, procnaughty_duke, reason_naughty_duke);
+ }
+ } else { /* Arrow has hit the wall! */
+ done(); /* Deallocate the arrow. */
+ show_one(3); /* Show pic of arrow stuck into the door. */
+ dna.arrow_in_the_door = true; /* So that we can pick it up. */
+ }
+ }
}
/*procedure Spludwick_procs(tripnum:byte);
@@ -1476,441 +1593,490 @@ begin
end;
end;*/
-void grab_avvy(byte tripnum) /* For Friar Tuck, in Nottingham. */
-{
- byte fv; integer tox,toy;
-
- { triptype& with = tr[tripnum];
- {
- tox=tr[1].x + 17;
- toy=tr[1].y - 1;
- if ((with.x==tox) && (with.y==toy))
- {
- with.call_eachstep=false;
- with.face=left;
- stopwalk();
- /* ... whatever ... */
- } else
- { /* Still some way to go. */
- if (with.x<tox)
- {
- with.x += 5;
- if (with.x>tox) with.x=tox;
- }
- if (with.y<toy) with.y += 1;
- with.step += 1; if (with.step==with.a.seq) with.step=0;
- }
- }}
+void grab_avvy(byte tripnum) { /* For Friar Tuck, in Nottingham. */
+ byte fv;
+ integer tox, toy;
+
+ {
+ triptype &with = tr[tripnum];
+ {
+ tox = tr[1].x + 17;
+ toy = tr[1].y - 1;
+ if ((with.x == tox) && (with.y == toy)) {
+ with.call_eachstep = false;
+ with.face = left;
+ stopwalk();
+ /* ... whatever ... */
+ } else {
+ /* Still some way to go. */
+ if (with.x < tox) {
+ with.x += 5;
+ if (with.x > tox) with.x = tox;
+ }
+ if (with.y < toy) with.y += 1;
+ with.step += 1;
+ if (with.step == with.a.seq) with.step = 0;
+ }
+ }
+ }
}
void geida_procs(byte tripnum);
-static void take_a_step(byte& tripnum)
-{
- { triptype& with = tr[tripnum];
- if (with.ix==0)
- { with.step += 1; if (with.step==with.a.seq) with.step=0; with.count=0; }}
+static void take_a_step(byte &tripnum) {
+ {
+ triptype &with = tr[tripnum];
+ if (with.ix == 0) {
+ with.step += 1;
+ if (with.step == with.a.seq) with.step = 0;
+ with.count = 0;
+ }
+ }
}
-static void spin(byte whichway, byte& tripnum)
-{
- { triptype& with = tr[tripnum];
- if (with.face!=whichway)
- {
- with.face=whichway;
- if (with.whichsprite==2) return; /* Not for Spludwick */
-
- dna.geida_spin += 1;
- dna.geida_time=20;
- if (dna.geida_spin==5)
- {
- display("Steady on, Avvy, you'll make the poor girl dizzy!");
- dna.geida_spin=0; dna.geida_time=0; /* knock out records */
- }
- }}
+static void spin(byte whichway, byte &tripnum) {
+ {
+ triptype &with = tr[tripnum];
+ if (with.face != whichway) {
+ with.face = whichway;
+ if (with.whichsprite == 2) return; /* Not for Spludwick */
+
+ dna.geida_spin += 1;
+ dna.geida_time = 20;
+ if (dna.geida_spin == 5) {
+ display("Steady on, Avvy, you'll make the poor girl dizzy!");
+ dna.geida_spin = 0;
+ dna.geida_time = 0; /* knock out records */
+ }
+ }
+ }
}
-void geida_procs(byte tripnum)
-{
- {
- triptype& with = tr[tripnum];
-
- if (dna.geida_time>0)
- {
- dna.geida_time -= 1;
- if (dna.geida_time==0) dna.geida_spin=0;
- }
-
- if (with.y<(tr[1].y-2))
- { /* Geida is further from the screen than Avvy. */
- spin(down, tripnum);
- with.iy=1; with.ix=0;
- take_a_step(tripnum);
- return;
- } else
- if (with.y>(tr[1].y+2))
- { /* Avvy is further from the screen than Geida. */
- spin(up, tripnum);
- with.iy=-1; with.ix=0;
- take_a_step(tripnum);
- return;
- }
-
- with.iy=0;
- if (with.x<tr[1].x-tr[1].xs*8)
- {
- with.ix=tr[1].xs;
- spin(right, tripnum);
- take_a_step(tripnum);
- } else
- if (with.x>tr[1].x+tr[1].xs*8)
- {
- with.ix=-tr[1].xs;
- spin(left, tripnum);
- take_a_step(tripnum);
- } else with.ix=0;
- }
+void geida_procs(byte tripnum) {
+ {
+ triptype &with = tr[tripnum];
+
+ if (dna.geida_time > 0) {
+ dna.geida_time -= 1;
+ if (dna.geida_time == 0) dna.geida_spin = 0;
+ }
+
+ if (with.y < (tr[1].y - 2)) {
+ /* Geida is further from the screen than Avvy. */
+ spin(down, tripnum);
+ with.iy = 1;
+ with.ix = 0;
+ take_a_step(tripnum);
+ return;
+ } else if (with.y > (tr[1].y + 2)) {
+ /* Avvy is further from the screen than Geida. */
+ spin(up, tripnum);
+ with.iy = -1;
+ with.ix = 0;
+ take_a_step(tripnum);
+ return;
+ }
+
+ with.iy = 0;
+ if (with.x < tr[1].x - tr[1].xs * 8) {
+ with.ix = tr[1].xs;
+ spin(right, tripnum);
+ take_a_step(tripnum);
+ } else if (with.x > tr[1].x + tr[1].xs * 8) {
+ with.ix = -tr[1].xs;
+ spin(left, tripnum);
+ take_a_step(tripnum);
+ } else with.ix = 0;
+ }
}
/* That's all... */
-void call_andexors()
-{
- array<1,5,byte> order;
- byte fv,temp;
- boolean ok;
-
- fillchar(order,5,'\0');
- for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];
- if (with.quick && with.visible)
- order[fv]=fv;}
-
- do {
- ok=true;
- for( fv=1; fv <= 4; fv ++)
- if (((order[fv]!=0) && (order[fv+1]!=0))
- && (tr[order[fv]].y>tr[order[fv+1]].y))
- { /* Swap them! */
- temp=order[fv];
- order[fv]=order[fv+1];
- order[fv+1]=temp;
- ok=false;
- }
- } while (!ok);
-
- for( fv=1; fv <= 5; fv ++)
- if (order[fv]>0)
- tr[order[fv]].andexor();
+void call_andexors() {
+ array<1, 5, byte> order;
+ byte fv, temp;
+ boolean ok;
+
+ fillchar(order, 5, '\0');
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick && with.visible)
+ order[fv] = fv;
+ }
+
+ do {
+ ok = true;
+ for (fv = 1; fv <= 4; fv ++)
+ if (((order[fv] != 0) && (order[fv + 1] != 0))
+ && (tr[order[fv]].y > tr[order[fv + 1]].y)) {
+ /* Swap them! */
+ temp = order[fv];
+ order[fv] = order[fv + 1];
+ order[fv + 1] = temp;
+ ok = false;
+ }
+ } while (!ok);
+
+ for (fv = 1; fv <= 5; fv ++)
+ if (order[fv] > 0)
+ tr[order[fv]].andexor();
}
-void trippancy_link()
-{
- byte fv;
-
- if (ddmnow | ontoolbar | seescroll) return;
- for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv]; if (with.quick) walk();}
- call_andexors();
- for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];
- if (with.quick && with.call_eachstep)
- {
- switch (tr[fv].eachstep) {
- case procfollow_avvy_y : follow_avvy_y(fv); break;
- case procback_and_forth : back_and_forth(fv); break;
- case procface_avvy : face_avvy(fv); break;
- case procarrow_procs : arrow_procs(fv); break;
-/* PROCSpludwick_procs : spludwick_procs(fv);*/
- case procgrab_avvy : grab_avvy(fv); break;
- case procgeida_procs : geida_procs(fv); break;
- }
- }}
- if (mustexclaim)
- {
- mustexclaim=false;
- dixi('x',saywhat);
- }
+void trippancy_link() {
+ byte fv;
+
+ if (ddmnow | ontoolbar | seescroll) return;
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick) walk();
+ }
+ call_andexors();
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick && with.call_eachstep) {
+ switch (tr[fv].eachstep) {
+ case procfollow_avvy_y :
+ follow_avvy_y(fv);
+ break;
+ case procback_and_forth :
+ back_and_forth(fv);
+ break;
+ case procface_avvy :
+ face_avvy(fv);
+ break;
+ case procarrow_procs :
+ arrow_procs(fv);
+ break;
+ /* PROCSpludwick_procs : spludwick_procs(fv);*/
+ case procgrab_avvy :
+ grab_avvy(fv);
+ break;
+ case procgeida_procs :
+ geida_procs(fv);
+ break;
+ }
+ }
+ }
+ if (mustexclaim) {
+ mustexclaim = false;
+ dixi('x', saywhat);
+ }
}
-void get_back_loretta()
-{
- byte fv;
-
-/* for fv:=1 to numtr do with tr[fv] do if quick then getback;*/
- for( fv=1; fv <= numtr; fv ++) if (tr[fv].quick)
- {
- getback();
- return;
- }
-/* for fv:=0 to 1 do begin cp:=1-cp; getback; end;*/
+void get_back_loretta() {
+ byte fv;
+
+ /* for fv:=1 to numtr do with tr[fv] do if quick then getback;*/
+ for (fv = 1; fv <= numtr; fv ++) if (tr[fv].quick) {
+ getback();
+ return;
+ }
+ /* for fv:=0 to 1 do begin cp:=1-cp; getback; end;*/
}
-void stopwalking()
-{
- tr[1].stopwalk(); dna.rw=stopped; if (alive) tr[1].step=1;
+void stopwalking() {
+ tr[1].stopwalk();
+ dna.rw = stopped;
+ if (alive) tr[1].step = 1;
}
-void tripkey(char dir)
-{
- if ((ctrl==cjoy) | (~ dna.user_moves_avvy)) return;
-
- { triptype& with = tr[1];
- {
- switch (dir) {
- case 'H': if (rw!=up)
- { rw=up; rwsp(1,rw); } else stopwalking();
- break;
- case 'P': if (rw!=down)
- { rw=down; rwsp(1,rw); } else stopwalking();
- break;
- case 'K': if (rw!=left)
- { rw=left; rwsp(1,rw); } else stopwalking();
- break;
- case 'M': if (rw!=right)
- { rw=right; rwsp(1,rw); } else stopwalking();
- break;
- case 'I': if (rw!=ur)
- { rw=ur; rwsp(1,rw); } else stopwalking();
- break;
- case 'Q': if (rw!=dr)
- { rw=dr; rwsp(1,rw); } else stopwalking();
- break;
- case 'O': if (rw!=dl)
- { rw=dl; rwsp(1,rw); } else stopwalking();
- break;
- case 'G': if (rw!=ul)
- { rw=ul; rwsp(1,rw); } else stopwalking();
- break;
- case 'L': stopwalking(); break;
- }
- }}
+void tripkey(char dir) {
+ if ((ctrl == cjoy) | (~ dna.user_moves_avvy)) return;
+
+ {
+ triptype &with = tr[1];
+ {
+ switch (dir) {
+ case 'H':
+ if (rw != up) {
+ rw = up;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'P':
+ if (rw != down) {
+ rw = down;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'K':
+ if (rw != left) {
+ rw = left;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'M':
+ if (rw != right) {
+ rw = right;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'I':
+ if (rw != ur) {
+ rw = ur;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'Q':
+ if (rw != dr) {
+ rw = dr;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'O':
+ if (rw != dl) {
+ rw = dl;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'G':
+ if (rw != ul) {
+ rw = ul;
+ rwsp(1, rw);
+ } else stopwalking();
+ break;
+ case 'L':
+ stopwalking();
+ break;
+ }
+ }
+ }
}
-void readstick()
-{
- byte jw;
+void readstick() {
+ byte jw;
- if (ctrl==ckey) return;
+ if (ctrl == ckey) return;
- jw=joyway;
+ jw = joyway;
- {
- triptype& with = tr[1];
+ {
+ triptype &with = tr[1];
- if (jw==stopped) stopwalking(); else
- {
- dna.rw=jw; rwsp(1,dna.rw);
- }
- }
+ if (jw == stopped) stopwalking();
+ else {
+ dna.rw = jw;
+ rwsp(1, dna.rw);
+ }
+ }
- if (jw!=oldjw)
- {
- showrw;
- oldjw=jw;
- }
+ if (jw != oldjw) {
+ showrw;
+ oldjw = jw;
+ }
}
-void getsetclear()
-{
- byte fv;
+void getsetclear() {
+ byte fv;
- for( fv=0; fv <= 1; fv ++) getset[fv].init();
+ for (fv = 0; fv <= 1; fv ++) getset[fv].init();
}
-void hide_in_the_cupboard()
-{
- const char nowt = '\372'; /* As in Acci. */
-
- {
- if (avvys_in_the_cupboard)
- {
- if (wearing==nowt)
- display("\6AVVY!\22 Get dressed first!");
- else
- {
- tr[1].visible=true;
- user_moves_avvy=true;
- apped(1,3); /* Walk out of the cupboard. */
- display("You leave the cupboard. Nice to be out of there!");
- avvys_in_the_cupboard=false;
- first_show(8); then_show(7); start_to_close;
- }
- } else
- { /* Not hiding in the cupboard */
- tr[1].visible=false;
- user_moves_avvy=false;
- display(string("You walk into the room...\20It seems to be an empty, ")+
- "but dusty, cupboard. Hmmmm... you leave the door slightly open to "+
- "avoid suffocation.");
- avvys_in_the_cupboard=true;
- show_one(8);
- }
- }
+void hide_in_the_cupboard() {
+ const char nowt = '\372'; /* As in Acci. */
+
+ {
+ if (avvys_in_the_cupboard) {
+ if (wearing == nowt)
+ display("\6AVVY!\22 Get dressed first!");
+ else {
+ tr[1].visible = true;
+ user_moves_avvy = true;
+ apped(1, 3); /* Walk out of the cupboard. */
+ display("You leave the cupboard. Nice to be out of there!");
+ avvys_in_the_cupboard = false;
+ first_show(8);
+ then_show(7);
+ start_to_close;
+ }
+ } else {
+ /* Not hiding in the cupboard */
+ tr[1].visible = false;
+ user_moves_avvy = false;
+ display(string("You walk into the room...\20It seems to be an empty, ") +
+ "but dusty, cupboard. Hmmmm... you leave the door slightly open to " +
+ "avoid suffocation.");
+ avvys_in_the_cupboard = true;
+ show_one(8);
+ }
+ }
}
-void fliproom(byte room,byte ped);
-static integer beforex,beforey;
+void fliproom(byte room, byte ped);
+static integer beforex, beforey;
static void tidy_after_mouse();
-static void tidy_up(integer a,integer b,integer c,integer d)
-{
- bytefield bf;
-
- {
- x1=a / 8;
- y1=b;
- x2=(c+7) / 8;
- y2=d;
- setactivepage(0);
- rectangle(x1*8,y1,x2*8+7,y2);
- }
- getset[0].remember(bf);
- getset[1].remember(bf);
+static void tidy_up(integer a, integer b, integer c, integer d) {
+ bytefield bf;
+
+ {
+ x1 = a / 8;
+ y1 = b;
+ x2 = (c + 7) / 8;
+ y2 = d;
+ setactivepage(0);
+ rectangle(x1 * 8, y1, x2 * 8 + 7, y2);
+ }
+ getset[0].remember(bf);
+ getset[1].remember(bf);
}
-static void tidy_after_mouse()
-{
- tidy_up(beforex,beforey,beforex+15,beforey+15);
- xycheck;
- tidy_up(mx,my,mx+15,my+15);
+static void tidy_after_mouse() {
+ tidy_up(beforex, beforey, beforex + 15, beforey + 15);
+ xycheck;
+ tidy_up(mx, my, mx + 15, my + 15);
}
-void fliproom(byte room,byte ped)
-{
- byte fv;
+void fliproom(byte room, byte ped) {
+ byte fv;
- if (~ alive)
- { /* You can't leave the room if you're dead. */
- tr[1].ix=0; tr[1].iy=0; /* Stop him from moving. */
- return;
- }
+ if (~ alive) {
+ /* You can't leave the room if you're dead. */
+ tr[1].ix = 0;
+ tr[1].iy = 0; /* Stop him from moving. */
+ return;
+ }
- if ((ped==177) && (dna.room==r__lusties))
- {
- hide_in_the_cupboard();
- return;
- }
+ if ((ped == 177) && (dna.room == r__lusties)) {
+ hide_in_the_cupboard();
+ return;
+ }
- if ((dna.jumpstatus>0) && (dna.room==r__insidecardiffcastle))
- { /* You can't *jump* out of Cardiff Castle! */
- tr[1].ix=0;
- return;
- }
+ if ((dna.jumpstatus > 0) && (dna.room == r__insidecardiffcastle)) {
+ /* You can't *jump* out of Cardiff Castle! */
+ tr[1].ix = 0;
+ return;
+ }
- xycheck; beforex=mx; beforey=my;
+ xycheck;
+ beforex = mx;
+ beforey = my;
- exitroom(dna.room);
- dusk; getsetclear();
+ exitroom(dna.room);
+ dusk;
+ getsetclear();
- for( fv=2; fv <= numtr; fv ++)
- { triptype& with = tr[fv];
- if (with.quick) done();} /* Deallocate sprite */
+ for (fv = 2; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ if (with.quick) done();
+ } /* Deallocate sprite */
- if (dna.room==r__lustiesroom)
- dna.enter_catacombs_from_lusties_room=true;
+ if (dna.room == r__lustiesroom)
+ dna.enter_catacombs_from_lusties_room = true;
- enterroom(room,ped); apped(1,ped);
- dna.enter_catacombs_from_lusties_room=false;
- oldrw=dna.rw; dna.rw=tr[1].face; showrw;
+ enterroom(room, ped);
+ apped(1, ped);
+ dna.enter_catacombs_from_lusties_room = false;
+ oldrw = dna.rw;
+ dna.rw = tr[1].face;
+ showrw;
- for( fv=0; fv <= 1; fv ++)
- {
- cp=1-cp;
- getback();
- }
- dawn;
+ for (fv = 0; fv <= 1; fv ++) {
+ cp = 1 - cp;
+ getback();
+ }
+ dawn;
- /* Tidy up after mouse. I know it's a kludge... */
-/* tidy_after_mouse;*/
+ /* Tidy up after mouse. I know it's a kludge... */
+ /* tidy_after_mouse;*/
}
boolean infield(byte which)
- /* returns True if you're within field "which" */
+/* returns True if you're within field "which" */
{
- integer yy;
-
- boolean infield_result;
- { void& with = fields[which]; {
- triptype& with = tr[1];
-
- yy=with.y+with.a.yl;
- infield_result=(with.x>=x1) && (with.x<=x2) && (yy>=y1) && (yy<=y2);
- }}
- return infield_result;
+ integer yy;
+
+ boolean infield_result;
+ {
+ void &with = fields[which];
+ {
+ triptype &with = tr[1];
+
+ yy = with.y + with.a.yl;
+ infield_result = (with.x >= x1) && (with.x <= x2) && (yy >= y1) && (yy <= y2);
+ }
+ }
+ return infield_result;
}
-boolean neardoor() /* returns True if you're near a door! */
-{
- integer ux,uy; byte fv; boolean nd;
-
- boolean neardoor_result;
- if (numfields<9)
- { /* there ARE no doors here! */
- neardoor_result=false;
- return neardoor_result;
- }
- {
- triptype& with = tr[1];
-
- ux=with.x;
- uy=with.y+with.a.yl;
- } nd=false;
- for( fv=9; fv <= numfields; fv ++)
- {
- void& with = fields[fv];
-
- if ((ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2)) nd=true;
- }
- neardoor_result=nd;
- return neardoor_result;
+boolean neardoor() { /* returns True if you're near a door! */
+ integer ux, uy;
+ byte fv;
+ boolean nd;
+
+ boolean neardoor_result;
+ if (numfields < 9) {
+ /* there ARE no doors here! */
+ neardoor_result = false;
+ return neardoor_result;
+ }
+ {
+ triptype &with = tr[1];
+
+ ux = with.x;
+ uy = with.y + with.a.yl;
+ }
+ nd = false;
+ for (fv = 9; fv <= numfields; fv ++) {
+ void &with = fields[fv];
+
+ if ((ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2)) nd = true;
+ }
+ neardoor_result = nd;
+ return neardoor_result;
}
-void new_game_for_trippancy() /* Called by gyro.newgame */
-{
- tr[1].visible=false;
+void new_game_for_trippancy() { /* Called by gyro.newgame */
+ tr[1].visible = false;
}
-void triptype::save_data_to_mem(word& where)
-{
- trip_saver_type tripsaver;
+void triptype::save_data_to_mem(word &where) {
+ trip_saver_type tripsaver;
- set_up_saver(tripsaver);
- move(tripsaver,mem[storage_seg*where],sizeof(tripsaver));
- where += sizeof(tripsaver);
+ set_up_saver(tripsaver);
+ move(tripsaver, mem[storage_seg * where], sizeof(tripsaver));
+ where += sizeof(tripsaver);
}
-void triptype::load_data_from_mem(word& where)
-{
- word spritewas,spriteis,saveface,savex,savey,savestep;
- boolean wasquick;
- trip_saver_type tripsaver;
+void triptype::load_data_from_mem(word &where) {
+ word spritewas, spriteis, saveface, savex, savey, savestep;
+ boolean wasquick;
+ trip_saver_type tripsaver;
- move(mem[storage_seg*where],tripsaver,sizeof(tripsaver));
- where += sizeof(tripsaver);
- unload_saver(tripsaver);
+ move(mem[storage_seg * where], tripsaver, sizeof(tripsaver));
+ where += sizeof(tripsaver);
+ unload_saver(tripsaver);
- spriteis=whichsprite;
- savex=x; savey=y; saveface=face; savestep=step;
+ spriteis = whichsprite;
+ savex = x;
+ savey = y;
+ saveface = face;
+ savestep = step;
- init(spriteis,check_me);
+ init(spriteis, check_me);
- appear(savex,savey,saveface); unload_saver(tripsaver);
- step=savestep;
+ appear(savex, savey, saveface);
+ unload_saver(tripsaver);
+ step = savestep;
}
class unit_trip5_initialize {
- public: unit_trip5_initialize();
+public:
+ unit_trip5_initialize();
};
static unit_trip5_initialize trip5_constructor;
unit_trip5_initialize::unit_trip5_initialize() {
- getsetclear(); mustexclaim=false;
+ getsetclear();
+ mustexclaim = false;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/trip5.h b/engines/avalanche/trip5.h
index 6c18232110..06642813e6 100644
--- a/engines/avalanche/trip5.h
+++ b/engines/avalanche/trip5.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -39,90 +39,94 @@ namespace Avalanche {
const integer maxgetset = 35;
-typedef array<5,2053,byte> manitype;
+typedef array<5, 2053, byte> manitype;
-typedef matrix<0,50,0,10,byte> siltype; /* 35, 4 */
+typedef matrix<0, 50, 0, 10, byte> siltype; /* 35, 4 */
struct adxtype { /* Second revision of ADX type */
- varying_string<12> name; /* name of character */
- varying_string<16> comment; /* comment */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
- byte accinum; /* the number according to Acci (1=Avvy, etc.) */
+ varying_string<12> name; /* name of character */
+ varying_string<16> comment; /* comment */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
+ byte accinum; /* the number according to Acci (1=Avvy, etc.) */
};
struct trip_saver_type {
- byte whichsprite;
- byte face; byte step;
- integer x; integer y;
- shortint ix; shortint iy;
- boolean visible;
- boolean homing;
- boolean check_me;
- byte count;
- byte xw,xs,ys;
- byte totalnum;
- integer hx; integer hy;
- boolean call_eachstep;
- byte eachstep;
- boolean vanishifstill;
+ byte whichsprite;
+ byte face;
+ byte step;
+ integer x;
+ integer y;
+ shortint ix;
+ shortint iy;
+ boolean visible;
+ boolean homing;
+ boolean check_me;
+ byte count;
+ byte xw, xs, ys;
+ byte totalnum;
+ integer hx;
+ integer hy;
+ boolean call_eachstep;
+ byte eachstep;
+ boolean vanishifstill;
};
class triptype {
public:
- adxtype a; /* vital statistics */
- byte face,step;
- integer x,y; /* current xy coords */
- array<0,1,integer> ox,oy; /* last xy coords */
- shortint ix,iy; /* amount to move sprite by, each step */
- array<1,24,manitype*> mani;
- array<1,24,siltype*> sil;
- byte whichsprite;
- boolean quick,visible,homing,check_me;
- integer hx,hy; /* homing x & y coords */
- byte count; /* counts before changing step */
- byte xw; /* x-width in bytes */
- byte xs,ys; /* x & y speed */
- byte totalnum; /* total number of sprites */
- boolean vanishifstill; /* Do we show this sprite if it's still? */
-
- boolean call_eachstep; /* Do we call the eachstep procedure? */
- byte eachstep;
-
- triptype* init(byte spritenum, boolean do_check);
- /* loads & sets up the sprite */
- void original(); /* just sets Quick to false */
- void andexor(); /* drops sprite onto screen */
- void turn(byte whichway); /* turns him round */
- void appear(integer wx,integer wy, byte wf); /* switches him on */
- void bounce(); /* bounces off walls. */
- void walk(); /* prepares for andexor, etc. */
- void walkto(byte pednum); /* home in on a point */
- void stophoming(); /* self-explanatory */
- void homestep(); /* calculates ix & iy for one homing step */
- void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */
- void stopwalk(); /* Stops the sprite from moving */
- void chatter(); /* Sets up talk vars */
- void set_up_saver(trip_saver_type& v);
- void unload_saver(trip_saver_type v);
- void savedata(untyped_file& f); /* Self-explanatory, */
- void loaddata(untyped_file& f); /* really. */
- void save_data_to_mem(word& where);
- void load_data_from_mem(word& where);
- triptype* done();
+ adxtype a; /* vital statistics */
+ byte face, step;
+ integer x, y; /* current xy coords */
+ array<0, 1, integer> ox, oy; /* last xy coords */
+ shortint ix, iy; /* amount to move sprite by, each step */
+ array<1, 24, manitype *> mani;
+ array<1, 24, siltype *> sil;
+ byte whichsprite;
+ boolean quick, visible, homing, check_me;
+ integer hx, hy; /* homing x & y coords */
+ byte count; /* counts before changing step */
+ byte xw; /* x-width in bytes */
+ byte xs, ys; /* x & y speed */
+ byte totalnum; /* total number of sprites */
+ boolean vanishifstill; /* Do we show this sprite if it's still? */
+
+ boolean call_eachstep; /* Do we call the eachstep procedure? */
+ byte eachstep;
+
+ triptype *init(byte spritenum, boolean do_check);
+ /* loads & sets up the sprite */
+ void original(); /* just sets Quick to false */
+ void andexor(); /* drops sprite onto screen */
+ void turn(byte whichway); /* turns him round */
+ void appear(integer wx, integer wy, byte wf); /* switches him on */
+ void bounce(); /* bounces off walls. */
+ void walk(); /* prepares for andexor, etc. */
+ void walkto(byte pednum); /* home in on a point */
+ void stophoming(); /* self-explanatory */
+ void homestep(); /* calculates ix & iy for one homing step */
+ void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */
+ void stopwalk(); /* Stops the sprite from moving */
+ void chatter(); /* Sets up talk vars */
+ void set_up_saver(trip_saver_type &v);
+ void unload_saver(trip_saver_type v);
+ void savedata(untyped_file &f); /* Self-explanatory, */
+ void loaddata(untyped_file &f); /* really. */
+ void save_data_to_mem(word &where);
+ void load_data_from_mem(word &where);
+ triptype *done();
};
class getsettype {
public:
- array<1,maxgetset,bytefield> gs;
- byte numleft;
+ array<1, maxgetset, bytefield> gs;
+ byte numleft;
- getsettype* init();
- void remember(bytefield r);
- void recall(bytefield& r);
+ getsettype *init();
+ void remember(bytefield r);
+ void recall(bytefield &r);
};
@@ -130,7 +134,10 @@ const integer up = 0;
const integer right = 1;
const integer down = 2;
const integer left = 3;
-const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7;
+const integer ur = 4;
+const integer dr = 5;
+const integer dl = 6;
+const integer ul = 7;
const integer stopped = 8;
const integer numtr = 5; /* current max no. of sprites */
@@ -160,7 +167,7 @@ void loadtrip();
void call_special(word which);
-void open_the_door(byte whither,byte ped,byte magicnum); /* Handles slidey-open doors. */
+void open_the_door(byte whither, byte ped, byte magicnum); /* Handles slidey-open doors. */
void catamove(byte ped);
@@ -168,13 +175,13 @@ void stopwalking();
void tripkey(char dir);
-void rwsp(byte t,byte r);
+void rwsp(byte t, byte r);
-void apped(byte trn,byte np);
+void apped(byte trn, byte np);
void getback();
-void fliproom(byte room,byte ped);
+void fliproom(byte room, byte ped);
boolean infield(byte which); /* returns True if you're within field "which" */
@@ -192,11 +199,12 @@ void new_game_for_trippancy();
#define EXTERN
#endif
-EXTERN array<1,numtr,triptype> tr;
-EXTERN array<0,1,getsettype> getset;
-EXTERN array<1,16000,byte> aa;
+EXTERN array<1, numtr, triptype> tr;
+EXTERN array<0, 1, getsettype> getset;
+EXTERN array<1, 16000, byte> aa;
-EXTERN boolean mustexclaim; EXTERN word saywhat;
+EXTERN boolean mustexclaim;
+EXTERN word saywhat;
#undef EXTERN
#define EXTERN extern
diff --git a/engines/avalanche/trip5tst.cpp b/engines/avalanche/trip5tst.cpp
index 8dbd985ab4..191d8f3756 100644
--- a/engines/avalanche/trip5tst.cpp
+++ b/engines/avalanche/trip5tst.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -33,131 +33,135 @@
namespace Avalanche {
struct adxtype {
- varying_string<12> name; /* name of character */
- varying_string<16> comment; /* comment */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ varying_string<16> comment; /* comment */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
-integer gd,gm;
+integer gd, gm;
untyped_file inf;
adxtype a;
-array<1,16000,byte> aa;
-array<5,2053,byte> mani;
-matrix<0,35,0,4,byte> sil;
+array<1, 16000, byte> aa;
+array<5, 2053, byte> mani;
+matrix<0, 35, 0, 4, byte> sil;
byte xw;
-void filesetup()
-{
- const integer idshould = -1317732048;
- longint id;
- word soa;
-;
- assign(inf,"v:sprite2.avd");
- reset(inf,1);
- seek(inf,177);
- blockread(inf,id,4);
- if (id!=idshould)
- {;
- output << '\7';
- close(inf);
- exit(0);
- }
-
- blockread(inf,soa,2);
- blockread(inf,a,soa);
+void filesetup() {
+ const integer idshould = -1317732048;
+ longint id;
+ word soa;
+ ;
+ assign(inf, "v:sprite2.avd");
+ reset(inf, 1);
+ seek(inf, 177);
+ blockread(inf, id, 4);
+ if (id != idshould) {
+ ;
+ output << '\7';
+ close(inf);
+ exit(0);
+ }
+
+ blockread(inf, soa, 2);
+ blockread(inf, a, soa);
}
-void loadpic()
-{
- byte fv,ff;
-;
- {;
- xw=a.xl / 8; if ((a.xl % 8)>0) xw += 1;
-
-/* aa[1]:=xl; aa[2]:=0; aa[3]:=yl; aa[4]:=0;*/
- /* The putimage x&y codes are words but xl & yl are bytes, hence the #0s. */
-/* seek(inf,filepos(inf)+xw*(yl+1));*/
- for( fv=0; fv <= a.yl; fv ++)
- blockread(inf,sil[fv],xw);
- blockread(inf,mani,a.size-6);
-/* blockread(inf,aa[5+fv*xw*4+xw*ff],xw);*/
- aa[a.size-1]=0; aa[a.size]=0; /* footer */
- }
-/* putimage(0,0,aa,0);*/
+void loadpic() {
+ byte fv, ff;
+ ;
+ {
+ ;
+ xw = a.xl / 8;
+ if ((a.xl % 8) > 0) xw += 1;
+
+ /* aa[1]:=xl; aa[2]:=0; aa[3]:=yl; aa[4]:=0;*/
+ /* The putimage x&y codes are words but xl & yl are bytes, hence the #0s. */
+ /* seek(inf,filepos(inf)+xw*(yl+1));*/
+ for (fv = 0; fv <= a.yl; fv ++)
+ blockread(inf, sil[fv], xw);
+ blockread(inf, mani, a.size - 6);
+ /* blockread(inf,aa[5+fv*xw*4+xw*ff],xw);*/
+ aa[a.size - 1] = 0;
+ aa[a.size] = 0; /* footer */
+ }
+ /* putimage(0,0,aa,0);*/
}
-void plotone(integer xx,integer yy)
-{
- word s;
- word ofs,fv;
- byte x,y,z;
-;
- {;
- s=imagesize(x,y,xx+a.xl,yy+a.yl);
- getimage(xx,yy,xx+a.xl,yy+a.yl,aa); /* Now loaded into our local buffer. */
-
- /* Now we've got to modify it! */
-
- for( x=0; x <= 3; x ++)
- for( y=0; y <= 35; y ++)
- for( z=0; z <= 4; z ++)
- {;
- ofs=5+y*xw*4+xw*x+z;
- aa[ofs]=aa[ofs] & sil[y][z];
- }
-
- /* mov ax,5 ; AX = ofs
- mov bx,xw ; wherever we get xw from
- mov cx,x ; ditto
- mov dx,y ; ditto
- mul cx,bx ; x*xw
- mul dx,bx ; y*yw
- add ax,cx ; now add 'em all up
- add ax,dx ; ...
- mov bx,z ; get z (we don't need x any more)
- mov cx,syz ; get silyz (where from??!)
- add ax,bx ; add on the last part of the addition
- and ax,cx ; AND ax with cx. That's it! */
-
-/*
- for x:=1 to 4 do
- begin;
- for y:=0 to 35 do
- for z:=0 to 4 do
- begin;
- ofs:=5+y*xw*4+xw*x+z;
- aa[ofs]:=aa[ofs] xor pic[x,y,z];
- end;
- end;
-*/
-
- for( fv=5; fv <= a.size-2; fv ++)
- aa[fv]=aa[fv] ^ mani[fv];
-
- /* Now.. let's try pasting it back again! */
-
- putimage(xx,yy,aa,0);
- }
+void plotone(integer xx, integer yy) {
+ word s;
+ word ofs, fv;
+ byte x, y, z;
+ ;
+ {
+ ;
+ s = imagesize(x, y, xx + a.xl, yy + a.yl);
+ getimage(xx, yy, xx + a.xl, yy + a.yl, aa); /* Now loaded into our local buffer. */
+
+ /* Now we've got to modify it! */
+
+ for (x = 0; x <= 3; x ++)
+ for (y = 0; y <= 35; y ++)
+ for (z = 0; z <= 4; z ++) {
+ ;
+ ofs = 5 + y * xw * 4 + xw * x + z;
+ aa[ofs] = aa[ofs] & sil[y][z];
+ }
+
+ /* mov ax,5 ; AX = ofs
+ mov bx,xw ; wherever we get xw from
+ mov cx,x ; ditto
+ mov dx,y ; ditto
+ mul cx,bx ; x*xw
+ mul dx,bx ; y*yw
+ add ax,cx ; now add 'em all up
+ add ax,dx ; ...
+ mov bx,z ; get z (we don't need x any more)
+ mov cx,syz ; get silyz (where from??!)
+ add ax,bx ; add on the last part of the addition
+ and ax,cx ; AND ax with cx. That's it! */
+
+ /*
+ for x:=1 to 4 do
+ begin;
+ for y:=0 to 35 do
+ for z:=0 to 4 do
+ begin;
+ ofs:=5+y*xw*4+xw*x+z;
+ aa[ofs]:=aa[ofs] xor pic[x,y,z];
+ end;
+ end;
+ */
+
+ for (fv = 5; fv <= a.size - 2; fv ++)
+ aa[fv] = aa[fv] ^ mani[fv];
+
+ /* Now.. let's try pasting it back again! */
+
+ putimage(xx, yy, aa, 0);
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- initgraph(gd,gm,"");
- setfillstyle(6,1); bar(0,0,640,200);
- filesetup();
- for( gd=1; gd <= 9; gd ++) loadpic();
- do {
- plotone(Random(500),Random(150));
- } while (!keypressed());
- plotone(0,0);
- close(inf);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ initgraph(gd, gm, "");
+ setfillstyle(6, 1);
+ bar(0, 0, 640, 200);
+ filesetup();
+ for (gd = 1; gd <= 9; gd ++) loadpic();
+ do {
+ plotone(Random(500), Random(150));
+ } while (!keypressed());
+ plotone(0, 0);
+ close(inf);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/trip5xf.cpp b/engines/avalanche/trip5xf.cpp
index f83f9c7ec2..eecfa75de2 100644
--- a/engines/avalanche/trip5xf.cpp
+++ b/engines/avalanche/trip5xf.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,170 +30,187 @@
namespace Avalanche {
-const string crlf = string('\15')+'\12'; const char eof_ = '\32';
-const array<1,177,char> trip5head =
- string("Sprite*.AVD ... data file for Trippancy Five")+crlf+crlf+
- "[Thorsoft relocatable fiveplane sprite image format]"+crlf+crlf+
- "Thomas Thurman was here. ... Have fun!"+crlf+crlf+eof_+
- "±±±±±±± * G. I. E. D. ! * ";
+const string crlf = string('\15') + '\12';
+const char eof_ = '\32';
+const array<1, 177, char> trip5head =
+ string("Sprite*.AVD ... data file for Trippancy Five") + crlf + crlf +
+ "[Thorsoft relocatable fiveplane sprite image format]" + crlf + crlf +
+ "Thomas Thurman was here. ... Have fun!" + crlf + crlf + eof_ +
+ "±±±±±±± * G. I. E. D. ! * ";
-const array<1,4,char> tripid = string('\x30')+'\x1'+'\x75'+'\261';
+const array<1, 4, char> tripid = string('\x30') + '\x1' + '\x75' + '\261';
-const array<1,50,char> trip5foot = crlf+crlf+
- " and that's it! Enjoy the game. "+'\3'+crlf+crlf+
- "\n\n\n\n\n\n\n"+"tt";
+const array<1, 50, char> trip5foot = crlf + crlf +
+ " and that's it! Enjoy the game. " + '\3' + crlf + crlf +
+ "\n\n\n\n\n\n\n" + "tt";
struct adxotype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
struct adxtype {
- varying_string<12> name; /* name of character */
- varying_string<16> comment; /* comment */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ varying_string<16> comment; /* comment */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
varying_string<2> sn;
adxotype oa;
adxtype a;
-matrix<1,24,0,1,pointer> pic; /* the pictures themselves */
-array<1,16000,byte> aa;
+matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */
+array<1, 16000, byte> aa;
untyped_file out;
integer bigsize;
-void copyaoa()
-{;
- {;
- a.name=oa.name;
- a.comment="Transferred";
- a.num=oa.num;
- a.xl=oa.xl;
- a.yl=oa.yl;
- a.seq=oa.seq;
- a.size=oa.size;
- a.fgc=oa.fgc;
- a.bgc=oa.bgc;
- }
+void copyaoa() {
+ ;
+ {
+ ;
+ a.name = oa.name;
+ a.comment = "Transferred";
+ a.num = oa.num;
+ a.xl = oa.xl;
+ a.yl = oa.yl;
+ a.seq = oa.seq;
+ a.size = oa.size;
+ a.fgc = oa.fgc;
+ a.bgc = oa.bgc;
+ }
}
-void load()
-{
- untyped_file f; byte gd,gm,sort,n; pointer p,q;
- pointer xf;
-;
- assign(f,string("v:osprte")+sn+".avd"); reset(f,1); seek(f,59);
- blockread(f,oa,sizeof(oa)); blockread(f,bigsize,2);
- copyaoa();
-
- getmem(xf,a.size);
-
- for( sort=0; sort <= 1; sort ++)
- {;
- mark(q); getmem(p,bigsize);
- blockread(f,p,bigsize);
- putimage(0,0,p,0); release(q); n=1;
-
- if (sort==0) setfillstyle(1,15); else setfillstyle(1,0);
- bar(177,125,300,200);
-
- for( gm=0; gm <= (a.num / a.seq)-1; gm ++) /* directions */
- for( gd=0; gd <= a.seq-1; gd ++) /* steps */
- {;
- getmem(pic[n][sort],a.size); /* grab the memory */
- getimage((gm / 2)*(a.xl*6)+gd*a.xl,(gm % 2)*a.yl,
- (gm / 2)*(a.xl*6)+gd*a.xl+a.xl-1,(gm % 2)*a.yl+a.yl-1,
- xf);
- putimage(177,125,xf,0);
- getimage(177,125,177+a.xl,125+a.yl,pic[n][sort]); /* grab the pic */
- n += 1;
- }
- }
- close(f);
- freemem(xf,a.size);
- cleardevice();
- for( gm=0; gm <= 1; gm ++)
- for( gd=1; gd <= a.num; gd ++)
- putimage(gd*15,gm*40,pic[gd][gm],0);
+void load() {
+ untyped_file f;
+ byte gd, gm, sort, n;
+ pointer p, q;
+ pointer xf;
+ ;
+ assign(f, string("v:osprte") + sn + ".avd");
+ reset(f, 1);
+ seek(f, 59);
+ blockread(f, oa, sizeof(oa));
+ blockread(f, bigsize, 2);
+ copyaoa();
+
+ getmem(xf, a.size);
+
+ for (sort = 0; sort <= 1; sort ++) {
+ ;
+ mark(q);
+ getmem(p, bigsize);
+ blockread(f, p, bigsize);
+ putimage(0, 0, p, 0);
+ release(q);
+ n = 1;
+
+ if (sort == 0) setfillstyle(1, 15);
+ else setfillstyle(1, 0);
+ bar(177, 125, 300, 200);
+
+ for (gm = 0; gm <= (a.num / a.seq) - 1; gm ++) /* directions */
+ for (gd = 0; gd <= a.seq - 1; gd ++) { /* steps */
+ ;
+ getmem(pic[n][sort], a.size); /* grab the memory */
+ getimage((gm / 2) * (a.xl * 6) + gd * a.xl, (gm % 2)*a.yl,
+ (gm / 2) * (a.xl * 6) + gd * a.xl + a.xl - 1, (gm % 2)*a.yl + a.yl - 1,
+ xf);
+ putimage(177, 125, xf, 0);
+ getimage(177, 125, 177 + a.xl, 125 + a.yl, pic[n][sort]); /* grab the pic */
+ n += 1;
+ }
+ }
+ close(f);
+ freemem(xf, a.size);
+ cleardevice();
+ for (gm = 0; gm <= 1; gm ++)
+ for (gd = 1; gd <= a.num; gd ++)
+ putimage(gd * 15, gm * 40, pic[gd][gm], 0);
}
-void setup()
-{
- integer gd,gm;
-;
- output << "TRIP5XF (c) 1992, Thomas Thurman." << NL; output << NL;
- output << "Enter number of SPRITE*.AVD file to convert:"; input >> sn >> NL;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- load();
+void setup() {
+ integer gd, gm;
+ ;
+ output << "TRIP5XF (c) 1992, Thomas Thurman." << NL;
+ output << NL;
+ output << "Enter number of SPRITE*.AVD file to convert:";
+ input >> sn >> NL;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ load();
}
-string strf(longint x)
-{
- string q;
-string strf_result;
-;
- str(x,q); strf_result=q;
-return strf_result;
+string strf(longint x) {
+ string q;
+ string strf_result;
+ ;
+ str(x, q);
+ strf_result = q;
+ return strf_result;
}
-void save()
-{
- byte sort,n;
- word fv,ff; char r; byte xw;
- byte nxl,nyl;
- word soa;
-;
- cleardevice();
- {;
- a.size=imagesize(0,0,a.xl,a.yl);
- soa=sizeof(a);
-
- assign(out,string("v:sprite")+sn+".avd"); rewrite(out,1);
- blockwrite(out,trip5head,177);
- blockwrite(out,tripid,4);
- blockwrite(out,soa,2);
- blockwrite(out,a,soa);
-
- nxl=a.xl; nyl=a.yl;
- xw=nxl / 8;
- if ((nxl % 8)>0) xw += 1;
-
- for( n=1; n <= a.num; n ++)
- {;
- putimage( 0,0,pic[n][0],0);
- getimage( 0,0,a.xl,a.yl,aa);
- for( fv=0; fv <= nyl; fv ++)
- blockwrite(out,aa[5+fv*xw*4],xw);
-
- putimage(100,0,pic[n][1],0);
- getimage(100,0,100+a.xl,a.yl,aa);
- putimage(100,100,aa,4);
-/* for ff:=1 to 4 do { actually 2 to 5, but it doesn't matter here }
- for fv:=0 to nyl do*/
-/* for ff:=5 to size-2 do
- blockwrite(out,aa[ff],1);*/
- blockwrite(out,aa[5],a.size-6);
- }
- }
+void save() {
+ byte sort, n;
+ word fv, ff;
+ char r;
+ byte xw;
+ byte nxl, nyl;
+ word soa;
+ ;
+ cleardevice();
+ {
+ ;
+ a.size = imagesize(0, 0, a.xl, a.yl);
+ soa = sizeof(a);
+
+ assign(out, string("v:sprite") + sn + ".avd");
+ rewrite(out, 1);
+ blockwrite(out, trip5head, 177);
+ blockwrite(out, tripid, 4);
+ blockwrite(out, soa, 2);
+ blockwrite(out, a, soa);
+
+ nxl = a.xl;
+ nyl = a.yl;
+ xw = nxl / 8;
+ if ((nxl % 8) > 0) xw += 1;
+
+ for (n = 1; n <= a.num; n ++) {
+ ;
+ putimage(0, 0, pic[n][0], 0);
+ getimage(0, 0, a.xl, a.yl, aa);
+ for (fv = 0; fv <= nyl; fv ++)
+ blockwrite(out, aa[5 + fv * xw * 4], xw);
+
+ putimage(100, 0, pic[n][1], 0);
+ getimage(100, 0, 100 + a.xl, a.yl, aa);
+ putimage(100, 100, aa, 4);
+ /* for ff:=1 to 4 do { actually 2 to 5, but it doesn't matter here }
+ for fv:=0 to nyl do*/
+ /* for ff:=5 to size-2 do
+ blockwrite(out,aa[ff],1);*/
+ blockwrite(out, aa[5], a.size - 6);
+ }
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- setup();
- save();
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ setup();
+ save();
- blockwrite(out,trip5foot,50);
- close(out);
-return EXIT_SUCCESS;
+ blockwrite(out, trip5foot, 50);
+ close(out);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/tripoop.cpp b/engines/avalanche/tripoop.cpp
index 0edd926628..2fe8f5f4cb 100644
--- a/engines/avalanche/tripoop.cpp
+++ b/engines/avalanche/tripoop.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -39,280 +39,344 @@ const integer left = 3;
const integer numtr = 1; /* current max no. of sprites */
struct adxtype {
- varying_string<12> name; /* name of character */
- byte num; /* number of pictures */
- byte xl,yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc,bgc; /* foreground & background bubble colours */
+ varying_string<12> name; /* name of character */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ word size; /* the size of one picture */
+ byte fgc, bgc; /* foreground & background bubble colours */
};
class triptype {
public:
- adxtype a; /* vital statistics */
- byte face,step;
- integer x,y; /* current xy coords */
- integer ox,oy; /* last xy coords */
- integer tax,tay; /* "behind" taken at... */
- shortint ix,iy; /* amount to move sprite by, each step */
- matrix<1,24,0,1,pointer> pic; /* the pictures themselves */
- boolean quick,visible,homing;
- pointer behind; /* what's behind you */
- integer hx,hy; /* homing x & y coords */
-
- triptype* init(byte spritenum); /* loads & sets up the sprite */
- void original(); /* just sets Quick to false */
- void andexor(); /* drops sprite onto screen 1 */
- void turn(byte whichway); /* turns him round */
- void appear(integer wx,integer wy, byte wf); /* switches him on */
- void walk(); /* prepares for do_it, andexor, etc. */
- void do_it(); /* Actually copies the picture over */
- void getback(); /* gets background before sprite is drawn */
- void putback(); /* ...and wipes sprite from screen 1 */
- void walkto(integer xx,integer yy); /* home in on a point */
- void stophoming(); /* self-explanatory */
- void homestep(); /* calculates ix & iy for one homing step */
- void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */
- void halt(); /* Stops the sprite from moving */
+ adxtype a; /* vital statistics */
+ byte face, step;
+ integer x, y; /* current xy coords */
+ integer ox, oy; /* last xy coords */
+ integer tax, tay; /* "behind" taken at... */
+ shortint ix, iy; /* amount to move sprite by, each step */
+ matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */
+ boolean quick, visible, homing;
+ pointer behind; /* what's behind you */
+ integer hx, hy; /* homing x & y coords */
+
+ triptype *init(byte spritenum); /* loads & sets up the sprite */
+ void original(); /* just sets Quick to false */
+ void andexor(); /* drops sprite onto screen 1 */
+ void turn(byte whichway); /* turns him round */
+ void appear(integer wx, integer wy, byte wf); /* switches him on */
+ void walk(); /* prepares for do_it, andexor, etc. */
+ void do_it(); /* Actually copies the picture over */
+ void getback(); /* gets background before sprite is drawn */
+ void putback(); /* ...and wipes sprite from screen 1 */
+ void walkto(integer xx, integer yy); /* home in on a point */
+ void stophoming(); /* self-explanatory */
+ void homestep(); /* calculates ix & iy for one homing step */
+ void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */
+ void halt(); /* Stops the sprite from moving */
};
-integer gd,gm;
-array<1,1,triptype> tr;
+integer gd, gm;
+array<1, 1, triptype> tr;
-void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4);
+void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4);
-static boolean dropin(integer xc,integer yc,integer x1,integer y1,integer x2,integer y2)
+static boolean dropin(integer xc, integer yc, integer x1, integer y1, integer x2, integer y2)
/* Dropin returns True if the point xc,yc falls within the 1-2 rectangle. */
-{boolean dropin_result;
-;
- dropin_result=((xc>=x1) && (xc<=x2) && (yc>=y1) && (yc<=y2));
-return dropin_result;
+{
+ boolean dropin_result;
+ ;
+ dropin_result = ((xc >= x1) && (xc <= x2) && (yc >= y1) && (yc <= y2));
+ return dropin_result;
}
-static void transfer(integer x1,integer y1,integer x2,integer y2)
-{
- pointer p,q; word s;
-;
- s=imagesize(x1,y1,x2,y2); setfillstyle(1,0);
- mark(q); getmem(p,s);
- setactivepage(1); getimage(x1,y1,x2,y2,p);
- setactivepage(0); putimage(x1,y1,p,copyput);
- setactivepage(1); release(q);
+static void transfer(integer x1, integer y1, integer x2, integer y2) {
+ pointer p, q;
+ word s;
+ ;
+ s = imagesize(x1, y1, x2, y2);
+ setfillstyle(1, 0);
+ mark(q);
+ getmem(p, s);
+ setactivepage(1);
+ getimage(x1, y1, x2, y2, p);
+ setactivepage(0);
+ putimage(x1, y1, p, copyput);
+ setactivepage(1);
+ release(q);
}
-static integer lesser(integer a,integer b)
-{integer lesser_result;
-;
- if (a<b) lesser_result=a; else lesser_result=b;
-return lesser_result;
+static integer lesser(integer a, integer b) {
+ integer lesser_result;
+ ;
+ if (a < b) lesser_result = a;
+ else lesser_result = b;
+ return lesser_result;
}
-static integer greater(integer a,integer b)
-{integer greater_result;
-;
- if (a>b) greater_result=a; else greater_result=b;
-return greater_result;
+static integer greater(integer a, integer b) {
+ integer greater_result;
+ ;
+ if (a > b) greater_result = a;
+ else greater_result = b;
+ return greater_result;
}
-void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4)
-
-{;
- if (dropin(x3,y3,x1,y1,x2,y2)
- || dropin(x3,y4,x1,y1,x2,y2)
- || dropin(x4,y3,x1,y1,x2,y2)
- || dropin(x4,y4,x1,y1,x2,y2))
- {; /* Overlaps */
- transfer(lesser(x1,x3),lesser(y1,y3),greater(x2,x4),greater(y2,y4));
- } else
- {; /* Doesn't overlap- copy both of them seperately */
- transfer(x3,y3,x4,y4); /* backwards- why not...? */
- transfer(x1,y1,x2,y2);
- }
-}
+void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4)
-void setup()
{
- integer gd,gm;
-;
- gd=3; gm=0; initgraph(gd,gm,"");
- for( gd=0; gd <= 1; gd ++)
- {;
- setactivepage(gd);
- setfillstyle(9,1); bar(0,0,640,200);
- }
- for( gm=1; gm <= numtr; gm ++) tr[gm].original();
+ ;
+ if (dropin(x3, y3, x1, y1, x2, y2)
+ || dropin(x3, y4, x1, y1, x2, y2)
+ || dropin(x4, y3, x1, y1, x2, y2)
+ || dropin(x4, y4, x1, y1, x2, y2)) {
+ ; /* Overlaps */
+ transfer(lesser(x1, x3), lesser(y1, y3), greater(x2, x4), greater(y2, y4));
+ } else {
+ ; /* Doesn't overlap- copy both of them seperately */
+ transfer(x3, y3, x4, y4); /* backwards- why not...? */
+ transfer(x1, y1, x2, y2);
+ }
}
-triptype* triptype::init(byte spritenum)
-{
- integer gd,gm; word s; untyped_file f; varying_string<2> xx; pointer p,q; word bigsize;
- byte sort,n;
-;
- str(spritenum,xx); assign(f,string("v:sprite")+xx+".avd");
- reset(f,1); seek(f,59);
- blockread(f,a,sizeof(a)); blockread(f,bigsize,2);
- setvisualpage(3); setactivepage(3);
- for( sort=0; sort <= 1; sort ++)
- {;
- mark(q); getmem(p,bigsize);
- blockread(f,p,bigsize);
- putimage(0,0,p,0); release(q); n=1;
- { adxtype& with = a;
- for( gm=0; gm <= (with.num / with.seq)-1; gm ++) /* directions */
- for( gd=0; gd <= with.seq-1; gd ++) /* steps */
- {;
- getmem(pic[n][sort],a.size); /* grab the memory */
- getimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl,
- (gm / 2)*(with.xl*6)+gd*with.xl+with.xl-1,(gm % 2)*with.yl+with.yl-1,
- pic[n][sort]); /* grab the pic */
- putimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl,
- pic[n][sort],notput); /* test the pic */
- n += 1;
- }}
- }
- close(f); setactivepage(0); setvisualpage(0);
- x=0; y=0; quick=true; visible=false; getmem(behind,a.size);
- homing=false; ix=0; iy=0;
-return this;
+void setup() {
+ integer gd, gm;
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "");
+ for (gd = 0; gd <= 1; gd ++) {
+ ;
+ setactivepage(gd);
+ setfillstyle(9, 1);
+ bar(0, 0, 640, 200);
+ }
+ for (gm = 1; gm <= numtr; gm ++) tr[gm].original();
}
-void triptype::original()
-{;
- quick=false;
+triptype *triptype::init(byte spritenum) {
+ integer gd, gm;
+ word s;
+ untyped_file f;
+ varying_string<2> xx;
+ pointer p, q;
+ word bigsize;
+ byte sort, n;
+ ;
+ str(spritenum, xx);
+ assign(f, string("v:sprite") + xx + ".avd");
+ reset(f, 1);
+ seek(f, 59);
+ blockread(f, a, sizeof(a));
+ blockread(f, bigsize, 2);
+ setvisualpage(3);
+ setactivepage(3);
+ for (sort = 0; sort <= 1; sort ++) {
+ ;
+ mark(q);
+ getmem(p, bigsize);
+ blockread(f, p, bigsize);
+ putimage(0, 0, p, 0);
+ release(q);
+ n = 1;
+ {
+ adxtype &with = a;
+ for (gm = 0; gm <= (with.num / with.seq) - 1; gm ++) /* directions */
+ for (gd = 0; gd <= with.seq - 1; gd ++) { /* steps */
+ ;
+ getmem(pic[n][sort], a.size); /* grab the memory */
+ getimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl,
+ (gm / 2) * (with.xl * 6) + gd * with.xl + with.xl - 1, (gm % 2)*with.yl + with.yl - 1,
+ pic[n][sort]); /* grab the pic */
+ putimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl,
+ pic[n][sort], notput); /* test the pic */
+ n += 1;
+ }
+ }
+ }
+ close(f);
+ setactivepage(0);
+ setvisualpage(0);
+ x = 0;
+ y = 0;
+ quick = true;
+ visible = false;
+ getmem(behind, a.size);
+ homing = false;
+ ix = 0;
+ iy = 0;
+ return this;
}
-void triptype::getback()
-{;
- tax=x; tay=y;
- getimage(x,y,x+a.xl,y+a.yl,behind);
+void triptype::original() {
+ ;
+ quick = false;
}
-void triptype::andexor()
-{
- byte picnum; /* Picnum, Picnic, what ye heck */
-;
- picnum=face*a.seq+step+1;
- putimage(x,y,pic[picnum][0],andput);
- putimage(x,y,pic[picnum][1],xorput);
+void triptype::getback() {
+ ;
+ tax = x;
+ tay = y;
+ getimage(x, y, x + a.xl, y + a.yl, behind);
}
-void triptype::turn(byte whichway)
-{;
- face=whichway; step=0;
+void triptype::andexor() {
+ byte picnum; /* Picnum, Picnic, what ye heck */
+ ;
+ picnum = face * a.seq + step + 1;
+ putimage(x, y, pic[picnum][0], andput);
+ putimage(x, y, pic[picnum][1], xorput);
}
-void triptype::appear(integer wx,integer wy, byte wf)
-{;
- x=wx; y=wy; ox=wx; oy=wy; turn(wf); visible=true;
+void triptype::turn(byte whichway) {
+ ;
+ face = whichway;
+ step = 0;
}
-void triptype::walk()
-{;
- ox=x; oy=y;
- if (homing) homestep();
- x=x+ix; y=y+iy;
- step += 1; if (step==a.seq) step=0; getback();
+void triptype::appear(integer wx, integer wy, byte wf) {
+ ;
+ x = wx;
+ y = wy;
+ ox = wx;
+ oy = wy;
+ turn(wf);
+ visible = true;
}
-void triptype::do_it()
-{;
- copier(ox,oy,ox+a.xl,oy+a.yl,x,y,x+a.xl,y+a.yl);
+void triptype::walk() {
+ ;
+ ox = x;
+ oy = y;
+ if (homing) homestep();
+ x = x + ix;
+ y = y + iy;
+ step += 1;
+ if (step == a.seq) step = 0;
+ getback();
}
-void triptype::putback()
-{;
- putimage(tax,tay,behind,0);
+void triptype::do_it() {
+ ;
+ copier(ox, oy, ox + a.xl, oy + a.yl, x, y, x + a.xl, y + a.yl);
}
-void triptype::walkto(integer xx,integer yy)
-{;
- speed(xx-x,yy-y); hx=xx; hy=yy; homing=true;
+void triptype::putback() {
+ ;
+ putimage(tax, tay, behind, 0);
}
-void triptype::stophoming()
-{;
- homing=false;
+void triptype::walkto(integer xx, integer yy) {
+ ;
+ speed(xx - x, yy - y);
+ hx = xx;
+ hy = yy;
+ homing = true;
}
-void triptype::homestep()
-{
- integer temp;
-;
- if ((hx==x) && (hy==y))
- {; /* touching the target */
- homing=false; return;
- }
- ix=0; iy=0;
- if (hy!=y)
- {;
- temp=hy-y; if (temp>4) iy=4; else if (temp<-4) iy=-4; else iy=temp;
- }
- if (hx!=x)
- {;
- temp=hx-x; if (temp>4) ix=4; else if (temp<-4) ix=-4; else ix=temp;
- }
+void triptype::stophoming() {
+ ;
+ homing = false;
}
-void triptype::speed(shortint xx,shortint yy)
-{;
- ix=xx; iy=yy;
- if ((ix==0) && (iy==0)) return; /* no movement */
- if (ix==0)
- {; /* No horz movement */
- if (iy<0) turn(up); else turn(down);
- } else
- {;
- if (ix<0) turn(left); else turn(right);
- }
+void triptype::homestep() {
+ integer temp;
+ ;
+ if ((hx == x) && (hy == y)) {
+ ; /* touching the target */
+ homing = false;
+ return;
+ }
+ ix = 0;
+ iy = 0;
+ if (hy != y) {
+ ;
+ temp = hy - y;
+ if (temp > 4) iy = 4;
+ else if (temp < -4) iy = -4;
+ else iy = temp;
+ }
+ if (hx != x) {
+ ;
+ temp = hx - x;
+ if (temp > 4) ix = 4;
+ else if (temp < -4) ix = -4;
+ else ix = temp;
+ }
}
-void triptype::halt()
-{;
- ix=0; iy=0; homing=false;
+void triptype::speed(shortint xx, shortint yy) {
+ ;
+ ix = xx;
+ iy = yy;
+ if ((ix == 0) && (iy == 0)) return; /* no movement */
+ if (ix == 0) {
+ ; /* No horz movement */
+ if (iy < 0) turn(up);
+ else turn(down);
+ } else {
+ ;
+ if (ix < 0) turn(left);
+ else turn(right);
+ }
}
-void trip()
-{
- byte fv;
-;
- for( fv=1; fv <= numtr; fv ++)
- {
- triptype& with = tr[fv];
- ;
- walk();
- if (with.quick && with.visible) andexor();
- do_it();
- putback();
- }
+void triptype::halt() {
+ ;
+ ix = 0;
+ iy = 0;
+ homing = false;
+}
+
+void trip() {
+ byte fv;
+ ;
+ for (fv = 1; fv <= numtr; fv ++) {
+ triptype &with = tr[fv];
+ ;
+ walk();
+ if (with.quick && with.visible) andexor();
+ do_it();
+ putback();
+ }
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- setup();
- {
- triptype& with = tr[1];
- ;
- init(1);
- appear(600,100,left);
- do {
- /*
- speed(-5,0); repeat trip until keypressed or (x= 0);
- speed( 5,0); repeat trip until keypressed or (x=600);
- */
- walkto( 10, 10); do { trip(); } while (!(keypressed() || ! with.homing));
- walkto( 70,150); do { trip(); } while (!(keypressed() || ! with.homing));
- walkto(600, 77); do { trip(); } while (!(keypressed() || ! with.homing));
- } while (!keypressed());
- }
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ setup();
+ {
+ triptype &with = tr[1];
+ ;
+ init(1);
+ appear(600, 100, left);
+ do {
+ /*
+ speed(-5,0); repeat trip until keypressed or (x= 0);
+ speed( 5,0); repeat trip until keypressed or (x=600);
+ */
+ walkto(10, 10);
+ do {
+ trip();
+ } while (!(keypressed() || ! with.homing));
+ walkto(70, 150);
+ do {
+ trip();
+ } while (!(keypressed() || ! with.homing));
+ walkto(600, 77);
+ do {
+ trip();
+ } while (!(keypressed() || ! with.homing));
+ } while (!keypressed());
+ }
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/ttmenuxf.cpp b/engines/avalanche/ttmenuxf.cpp
index 536ebcdccc..1a10794940 100644
--- a/engines/avalanche/ttmenuxf.cpp
+++ b/engines/avalanche/ttmenuxf.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -31,110 +31,141 @@
namespace Avalanche {
-integer gd,gm;
-word s; pointer p;
+integer gd, gm;
+word s;
+pointer p;
file<byte> f;
byte bit;
-void load() /* Load2, actually */
-{
- byte a0; /*absolute $A000:800;*/
- byte a1; /*absolute $A000:17184;*/
- byte bit;
- untyped_file f; varying_string<2> xx;
- boolean was_virtual;
-
- assign(f,"v:ttmenu.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
- bit=getpixel(0,0);
+void load() { /* Load2, actually */
+ byte a0; /*absolute $A000:800;*/
+ byte a1; /*absolute $A000:17184;*/
+ byte bit;
+ untyped_file f;
+ varying_string<2> xx;
+ boolean was_virtual;
+
+ assign(f, "v:ttmenu.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-void finder()
-{
- char r; integer x,y;
-;
- setfillstyle(0,0); setcolor(14);
- x=320; y=100; setwritemode(xorput);
- do {
- bar(0,0,200,10);
- outtextxy(0,0,strf(x)+','+strf(y));
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- do {; } while (!keypressed());
- line(x-20,y,x+20,y); line(x,y-20,x,y+20);
- switch (readkey()) {
- case '\15': return; break;
- case '8': y -= 10; break;
- case '4': x -= 10; break;
- case '6': x += 10; break;
- case '2': y += 10; break;
- case '\0': switch (readkey()) {
- case cup: y -= 1; break;
- case cdown: y += 1; break;
- case cleft: x -= 1; break;
- case cright: x += 1; break;
- }
- break;
- }
- } while (!false);
+void finder() {
+ char r;
+ integer x, y;
+ ;
+ setfillstyle(0, 0);
+ setcolor(14);
+ x = 320;
+ y = 100;
+ setwritemode(xorput);
+ do {
+ bar(0, 0, 200, 10);
+ outtextxy(0, 0, strf(x) + ',' + strf(y));
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ do {
+ ;
+ } while (!keypressed());
+ line(x - 20, y, x + 20, y);
+ line(x, y - 20, x, y + 20);
+ switch (readkey()) {
+ case '\15':
+ return;
+ break;
+ case '8':
+ y -= 10;
+ break;
+ case '4':
+ x -= 10;
+ break;
+ case '6':
+ x += 10;
+ break;
+ case '2':
+ y += 10;
+ break;
+ case '\0':
+ switch (readkey()) {
+ case cup:
+ y -= 1;
+ break;
+ case cdown:
+ y += 1;
+ break;
+ case cleft:
+ x -= 1;
+ break;
+ case cright:
+ x += 1;
+ break;
+ }
+ break;
+ }
+ } while (!false);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gd=3; gm=1; initgraph(gd,gm,"");
- load();
- finder();
- s=imagesize(342,21,407,119);
- getmem(p,s);
- getimage(342,21,407,119,p);
- putimage(342,21,p,4);
- input >> NL;
- putimage(264,120,p,0);
- input >> NL;
- freemem(p,s);
-
- s=imagesize(264,12,329,217);
- getmem(p,s);
- getimage(264,21,329,218,p);
- putimage(264,21,p,4);
- putimage(0,0,p,0);
- freemem(p,s);
- input >> NL;
-
- s=imagesize(180,103,188,135);
- getmem(p,s);
- getimage(180,103,188,135,p);
- putimage(0,200,p,0);
- input >> NL;
-
- assign(f,"v:menu.avd");
- rewrite(f);
-
- for( bit=0; bit <= 3; bit ++)
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( gd=0; gd <= 196; gd ++)
- for( gm=0; gm <= 8; gm ++)
- {
- f << mem[0xa000*gd*80+gm];
- mem[0xa000*gd*80+gm]=~ mem[0xa000*gd*80+gm];
- }
-
- for( gd=200; gd <= 232; gd ++)
- {
- f << mem[0xa000*gd*80];
- mem[0xa000*gd*80]=~ mem[0xa000*gd*80];
- }
- }
-
- close(f);
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gd = 3;
+ gm = 1;
+ initgraph(gd, gm, "");
+ load();
+ finder();
+ s = imagesize(342, 21, 407, 119);
+ getmem(p, s);
+ getimage(342, 21, 407, 119, p);
+ putimage(342, 21, p, 4);
+ input >> NL;
+ putimage(264, 120, p, 0);
+ input >> NL;
+ freemem(p, s);
+
+ s = imagesize(264, 12, 329, 217);
+ getmem(p, s);
+ getimage(264, 21, 329, 218, p);
+ putimage(264, 21, p, 4);
+ putimage(0, 0, p, 0);
+ freemem(p, s);
+ input >> NL;
+
+ s = imagesize(180, 103, 188, 135);
+ getmem(p, s);
+ getimage(180, 103, 188, 135, p);
+ putimage(0, 200, p, 0);
+ input >> NL;
+
+ assign(f, "v:menu.avd");
+ rewrite(f);
+
+ for (bit = 0; bit <= 3; bit ++) {
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (gd = 0; gd <= 196; gd ++)
+ for (gm = 0; gm <= 8; gm ++) {
+ f << mem[0xa000 * gd * 80 + gm];
+ mem[0xa000 * gd * 80 + gm] = ~ mem[0xa000 * gd * 80 + gm];
+ }
+
+ for (gd = 200; gd <= 232; gd ++) {
+ f << mem[0xa000 * gd * 80];
+ mem[0xa000 * gd * 80] = ~ mem[0xa000 * gd * 80];
+ }
+ }
+
+ close(f);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/unsquish.cpp b/engines/avalanche/unsquish.cpp
index e0ede8e35d..63d2562f8b 100644
--- a/engines/avalanche/unsquish.cpp
+++ b/engines/avalanche/unsquish.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,53 +30,62 @@
namespace Avalanche {
-typedef array<1,50000,byte> buffertype;
+typedef array<1, 50000, byte> buffertype;
-integer gd,gm;
+integer gd, gm;
varying_string<29> describe;
byte method;
shortint bit;
word offset;
byte a0; /*absolute $A000:800;*/
-array<1,12080,byte> a7; /*absolute $A000:800;*/
-buffertype* buffer;
+array<1, 12080, byte> a7; /*absolute $A000:800;*/
+buffertype *buffer;
word bufsize;
-void putup(byte what)
-{;
- if (offset>12080)
- {;
- bit += 1;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- offset=1;
- }
-
- a7[offset]=what;
- offset += 1;
+void putup(byte what) {
+ ;
+ if (offset > 12080) {
+ ;
+ bit += 1;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ offset = 1;
+ }
+
+ a7[offset] = what;
+ offset += 1;
}
void load_uncomp(string xx) /* Load2, actually */
/* a1:byte absolute $A000:17184;*/
{
- byte this_;
- untyped_file f;
- word place;
-;
- assign(f,string("v:place")+xx+".avd"); reset(f,1); seek(f,146);
- blockread(f,describe,30); blockread(f,method,1);
- bufsize=filesize(f)-177; blockread(f,*buffer,bufsize);
- close(f);
-
- bit=-1; offset=12081; place=1;
-
- while (place<=bufsize)
- {;
- this_=(*buffer)[place];
- place += 1;
- putup(this_);
- }
-
- output << method << " : \"" << describe << '"' << NL;
+ byte this_;
+ untyped_file f;
+ word place;
+ ;
+ assign(f, string("v:place") + xx + ".avd");
+ reset(f, 1);
+ seek(f, 146);
+ blockread(f, describe, 30);
+ blockread(f, method, 1);
+ bufsize = filesize(f) - 177;
+ blockread(f, *buffer, bufsize);
+ close(f);
+
+ bit = -1;
+ offset = 12081;
+ place = 1;
+
+ while (place <= bufsize) {
+ ;
+ this_ = (*buffer)[place];
+ place += 1;
+ putup(this_);
+ }
+
+ output << method << " : \"" << describe << '"' << NL;
}
void load_comp(string xx);
@@ -92,33 +101,33 @@ const integer maxstack = 4096 /* Decompression stack size */;
- /* One node in parsing table. */
+/* One node in parsing table. */
struct string_table_entry {
- boolean unused /* Is this node *NOT* used yet?*/;
- integer prevchar /* Code for preceding string */;
- integer follchar /* Code for current character */;
- integer next /* Next dupl in collision list */;
+ boolean unused /* Is this node *NOT* used yet?*/;
+ integer prevchar /* Code for preceding string */;
+ integer follchar /* Code for current character */;
+ integer next /* Next dupl in collision list */;
};
-typedef array<0,maxtab,string_table_entry> sttype;
+typedef array<0, maxtab, string_table_entry> sttype;
- /* String table */
+/* String table */
-static sttype* string_table;
+static sttype *string_table;
static integer table_used /* # string table entries used */;
static byte input_code /* Input compressed code */;
-static boolean inempty,popempty;
+static boolean inempty, popempty;
- /* Decompression stack */
+/* Decompression stack */
-static array<1,maxstack,byte> stack;
+static array<1, maxstack, byte> stack;
static integer stack_pointer /* Decompression stack depth */;
@@ -126,92 +135,92 @@ static integer stack_pointer /* Decompression stack depth */;
static word place;
-static integer get_hash_code( integer& prevc, integer& follc )
+static integer get_hash_code(integer &prevc, integer &follc)
{
- integer index;
- integer index2;
+ integer index;
+ integer index2;
- /* Get_Hash_Code */
- /* Get initial index using hashing */
+ /* Get_Hash_Code */
+ /* Get initial index using hashing */
- integer get_hash_code_result;
- index = ( ( prevc << 5 ) ^ follc ) & maxtab;
+ integer get_hash_code_result;
+ index = ((prevc << 5) ^ follc) & maxtab;
- /* If entry not already used, return */
- /* its index as hash code for <w>C. */
+ /* If entry not already used, return */
+ /* its index as hash code for <w>C. */
- if ( (*string_table)[index].unused )
- get_hash_code_result = index;
- else
- /* If entry already used, search to */
- /* end of list of hash collision */
- /* entries for this hash code. */
- /* Do linear probe to find an */
- /* available slot. */
- {
+ if ((*string_table)[index].unused)
+ get_hash_code_result = index;
+ else
+ /* If entry already used, search to */
+ /* end of list of hash collision */
+ /* entries for this hash code. */
+ /* Do linear probe to find an */
+ /* available slot. */
+ {
- /* Skip to end of collision list ... */
+ /* Skip to end of collision list ... */
- while ( (*string_table)[index].next != end_list )
- index = (*string_table)[index].next;
+ while ((*string_table)[index].next != end_list)
+ index = (*string_table)[index].next;
- /* Begin linear probe down a bit from */
- /* last entry in collision list ... */
+ /* Begin linear probe down a bit from */
+ /* last entry in collision list ... */
- index2 = ( index + 101 ) & maxtab;
+ index2 = (index + 101) & maxtab;
- /* Look for unused entry using linear */
- /* probing ... */
+ /* Look for unused entry using linear */
+ /* probing ... */
- while ( ! (*string_table)[index2].unused )
- index2 = succ(integer, index2 ) & maxtab;
+ while (!(*string_table)[index2].unused)
+ index2 = succ(integer, index2) & maxtab;
- /* Point prior end of collision list */
- /* to this new node. */
+ /* Point prior end of collision list */
+ /* to this new node. */
- (*string_table)[index].next = index2;
+ (*string_table)[index].next = index2;
- /* Return hash code for <w>C */
+ /* Return hash code for <w>C */
- get_hash_code_result = index2;
+ get_hash_code_result = index2;
- }
+ }
- return get_hash_code_result;
+ return get_hash_code_result;
} /* Get_Hash_Code */
- /*--------------------------------------------------------------------------*/
- /* Make_Table_Entry --- Enter <w>C string in string table */
- /*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+/* Make_Table_Entry --- Enter <w>C string in string table */
+/*--------------------------------------------------------------------------*/
-static void make_table_entry( integer& prevc, integer& follc )
+static void make_table_entry(integer &prevc, integer &follc)
-{ /* Make_Table_Entry */
- /* Only enter string if there is room left */
-
- if ( table_used <= maxtab )
- {
- {
- string_table_entry& with = (*string_table)[ get_hash_code( prevc , follc ) ];
-
- with.unused = false;
- with.next = end_list;
- with.prevchar = prevc;
- with.follchar = follc;
- }
- /* Increment count of items used */
-
- table_used += 1;
-/*
- IF ( Table_Used > ( MaxTab + 1 ) ) THEN
- BEGIN
- WRITELN('Hash table full.');
- END;
- */
- }
+{
+ /* Make_Table_Entry */
+ /* Only enter string if there is room left */
+
+ if (table_used <= maxtab) {
+ {
+ string_table_entry &with = (*string_table)[ get_hash_code(prevc , follc) ];
+
+ with.unused = false;
+ with.next = end_list;
+ with.prevchar = prevc;
+ with.follchar = follc;
+ }
+ /* Increment count of items used */
+
+ table_used += 1;
+ /*
+ IF ( Table_Used > ( MaxTab + 1 ) ) THEN
+ BEGIN
+ WRITELN('Hash table full.');
+ END;
+ */
+ }
} /* Make_Table_Entry */
@@ -221,330 +230,332 @@ static void firstentries()
/* This is just a fast version of the above, when PrevC = No_Prev. TT. */
{
- integer i,j;
+ integer i, j;
- /* There MUST be room- we've only just started! */
+ /* There MUST be room- we've only just started! */
- j=no_prev;
+ j = no_prev;
- for( i=0; i <= 255; i ++)
- {
- string_table_entry& with = (*string_table)[ ((no_prev << 5 ) ^ i) & maxtab];
+ for (i = 0; i <= 255; i ++) {
+ string_table_entry &with = (*string_table)[((no_prev << 5) ^ i) & maxtab];
- with.unused = false;
- with.next = end_list;
- with.prevchar = no_prev;
- with.follchar = i;
- }
+ with.unused = false;
+ with.next = end_list;
+ with.prevchar = no_prev;
+ with.follchar = i;
+ }
- table_used += 256; /* Increment count of items used */
+ table_used += 256; /* Increment count of items used */
}
- /*--------------------------------------------------------------------------*/
- /* Initialize_String_Table --- Initialize string table */
- /*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+/* Initialize_String_Table --- Initialize string table */
+/*--------------------------------------------------------------------------*/
static void initialize_string_table()
{
- integer i;
+ integer i;
- /* Initialize_String_Table */
+ /* Initialize_String_Table */
- /* No entries used in table yet */
- table_used = 0;
+ /* No entries used in table yet */
+ table_used = 0;
- fillchar(*string_table,(maxtab+1)*sizeof((*string_table)[1]),'\377');
- /* Enter all single characters into */
- /* table */
- firstentries();
+ fillchar(*string_table, (maxtab + 1)*sizeof((*string_table)[1]), '\377');
+ /* Enter all single characters into */
+ /* table */
+ firstentries();
} /* Initialize_String_Table */
- /*--------------------------------------------------------------------------*/
- /* Lookup_String --- Look for string <w>C in string table */
- /*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+/* Lookup_String --- Look for string <w>C in string table */
+/*--------------------------------------------------------------------------*/
-static integer lookup_string( integer prevc, integer follc )
+static integer lookup_string(integer prevc, integer follc)
{
- integer index;
- integer index2;
- boolean found;
+ integer index;
+ integer index2;
+ boolean found;
- /* Lookup_String */
- /* Initialize index to check from hash */
+ /* Lookup_String */
+ /* Initialize index to check from hash */
- integer lookup_string_result;
- index = ( ( prevc << 5 ) ^ follc ) & maxtab;
+ integer lookup_string_result;
+ index = ((prevc << 5) ^ follc) & maxtab;
- /* Assume we won't find string */
- lookup_string_result = end_list;
- /* Search through list of hash collision */
- /* entries for one that matches <w>C */
- do {
+ /* Assume we won't find string */
+ lookup_string_result = end_list;
+ /* Search through list of hash collision */
+ /* entries for one that matches <w>C */
+ do {
- found = ( (*string_table)[index].prevchar == prevc ) &&
- ( (*string_table)[index].follchar == follc );
+ found = ((*string_table)[index].prevchar == prevc) &&
+ ((*string_table)[index].follchar == follc);
- if ( ! found )
- index = (*string_table)[index].next;
+ if (! found)
+ index = (*string_table)[index].next;
- } while (!(found || ( index == end_list )));
+ } while (!(found || (index == end_list)));
- /* Return index if <w>C found in table. */
- if (found)
- lookup_string_result = index;
+ /* Return index if <w>C found in table. */
+ if (found)
+ lookup_string_result = index;
- return lookup_string_result;
+ return lookup_string_result;
} /* Lookup_String */
- /*--------------------------------------------------------------------------*/
- /* Push --- Push character onto stack */
- /*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+/* Push --- Push character onto stack */
+/*--------------------------------------------------------------------------*/
-static void push( byte c)
+static void push(byte c)
-{ /* Push */
+{
+ /* Push */
- stack_pointer += 1;
- stack[ stack_pointer ] = c;
+ stack_pointer += 1;
+ stack[ stack_pointer ] = c;
- if ( stack_pointer >= maxstack )
- {
- output << "Stack overflow!" << NL;
- exit(0);
- }
+ if (stack_pointer >= maxstack) {
+ output << "Stack overflow!" << NL;
+ exit(0);
+ }
} /* Push */
- /*--------------------------------------------------------------------------*/
- /* Pop --- Pop character from stack */
- /*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+/* Pop --- Pop character from stack */
+/*--------------------------------------------------------------------------*/
-static void pop( integer& c )
+static void pop(integer &c)
-{ /* Pop */
+{
+ /* Pop */
- popempty=stack_pointer==0;
+ popempty = stack_pointer == 0;
- if (! popempty)
- {
- c = stack[stack_pointer];
- stack_pointer -= 1;
- }
+ if (! popempty) {
+ c = stack[stack_pointer];
+ stack_pointer -= 1;
+ }
} /* Pop */
- /*--------------------------------------------------------------------------*/
- /* Get_Code --- Get compression code from input file */
- /*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+/* Get_Code --- Get compression code from input file */
+/*--------------------------------------------------------------------------*/
-static void get_code( integer& hash_code )
+static void get_code(integer &hash_code)
{
- byte local_buf;
+ byte local_buf;
- /* Get_Code */
+ /* Get_Code */
- if (inempty)
- {
+ if (inempty) {
- if (place>bufsize) return; else
- {;
- local_buf=(*buffer)[place];
- place += 1;
- }
+ if (place > bufsize) return;
+ else {
+ ;
+ local_buf = (*buffer)[place];
+ place += 1;
+ }
- if (place>bufsize) return; else
- {;
- input_code=(*buffer)[place];
- place += 1;
- }
+ if (place > bufsize) return;
+ else {
+ ;
+ input_code = (*buffer)[place];
+ place += 1;
+ }
- hash_code = ( ( local_buf << 4 ) & 0xff0 ) +
- ( ( (cardinal)input_code >> 4 ) & 0xf );
+ hash_code = ((local_buf << 4) & 0xff0) +
+ (((cardinal)input_code >> 4) & 0xf);
- input_code = input_code & 0xf;
- inempty=false;
+ input_code = input_code & 0xf;
+ inempty = false;
- }
- else
- {
+ } else {
- if (place>bufsize) return; else
- {;
- local_buf=(*buffer)[place];
- place += 1;
- }
+ if (place > bufsize) return;
+ else {
+ ;
+ local_buf = (*buffer)[place];
+ place += 1;
+ }
- hash_code = local_buf + ( ( input_code << 8 ) & 0xf00 );
- inempty=true;
+ hash_code = local_buf + ((input_code << 8) & 0xf00);
+ inempty = true;
- }
+ }
} /* Get_Code */
- /*--------------------------------------------------------------------------*/
- /* Do_Decompression --- Perform decompression */
- /*--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
+/* Do_Decompression --- Perform decompression */
+/*--------------------------------------------------------------------------*/
static void do_decompression()
{
- integer c /* Current input character */;
- integer code /* Current code string */;
- integer old_code /* Previous code string */;
- integer fin_char /* Final input character */;
- integer in_code /* Current input code */;
- integer last_char /* Previous character */;
- boolean unknown /* TRUE if code not found */;
- integer temp_c /* Char popped off stack */;
-
- /* Do_Decompression */
-
- stack_pointer = 0; /* Decompression stack is empty */
- unknown = false; /* First string is always known */
- get_code( old_code ); /* Get first string == Step 1 */
- code = old_code;
-
- c=(*string_table)[code].follchar; /* Output corresponding character */
- putup( c );
- fin_char = c; /* Remember this character -- it */
- /* is final character of next string */
-
- get_code( in_code ); /* Get next code == Step 2 */
-
- while (place<=bufsize)
- {
- code = in_code; /* Set code to this input code */
-
- /* If code not in table, do special */
- /* case ==> Step 3 */
-
- if ( (*string_table)[code].unused )
- {
- last_char = fin_char;
- code = old_code;
- unknown = true;
- }
- /* Run through code extracting single */
- /* characters from code string until */
- /* no more characters can be removed. */
- /* Push these onto stack. They will */
- /* be entered in reverse order, and */
- /* will come out in forwards order */
- /* when popped off. */
- /* */
- /* ==> Step 4 */
-
- while( (*string_table)[code].prevchar != no_prev )
- {
- string_table_entry& with = (*string_table)[code];
-
- push( with.follchar );
- code = with.prevchar;
- }
- /* We now have the first character in */
- /* the string. */
-
- fin_char = (*string_table)[code].follchar;
-
- /* Output first character ==> Step 5 */
- putup( fin_char );
- /* While the stack is not empty, remove */
- /* and output all characters from stack */
- /* which are rest of characters in the */
- /* string. */
- /* */
- /* ==> Step 6 */
- pop( temp_c );
-
- while (! popempty)
- {
- putup( temp_c );
- pop( temp_c );
- }
- /* If code isn't known, output the */
- /* follower character of last character */
- /* of string. */
- if (unknown)
- {
- fin_char = last_char;
- putup( fin_char );
- unknown = false;
- }
- /* Enter code into table ==> Step 7 */
-
- make_table_entry( old_code , fin_char );
-
- /* Make current code the previous code */
- old_code = in_code;
-
- /* Get next code == Step 2 */
- get_code( in_code );
-
- }
+ integer c /* Current input character */;
+ integer code /* Current code string */;
+ integer old_code /* Previous code string */;
+ integer fin_char /* Final input character */;
+ integer in_code /* Current input code */;
+ integer last_char /* Previous character */;
+ boolean unknown /* TRUE if code not found */;
+ integer temp_c /* Char popped off stack */;
+
+ /* Do_Decompression */
+
+ stack_pointer = 0; /* Decompression stack is empty */
+ unknown = false; /* First string is always known */
+ get_code(old_code); /* Get first string == Step 1 */
+ code = old_code;
+
+ c = (*string_table)[code].follchar; /* Output corresponding character */
+ putup(c);
+ fin_char = c; /* Remember this character -- it */
+ /* is final character of next string */
+
+ get_code(in_code); /* Get next code == Step 2 */
+
+ while (place <= bufsize) {
+ code = in_code; /* Set code to this input code */
+
+ /* If code not in table, do special */
+ /* case ==> Step 3 */
+
+ if ((*string_table)[code].unused) {
+ last_char = fin_char;
+ code = old_code;
+ unknown = true;
+ }
+ /* Run through code extracting single */
+ /* characters from code string until */
+ /* no more characters can be removed. */
+ /* Push these onto stack. They will */
+ /* be entered in reverse order, and */
+ /* will come out in forwards order */
+ /* when popped off. */
+ /* */
+ /* ==> Step 4 */
+
+ while ((*string_table)[code].prevchar != no_prev) {
+ string_table_entry &with = (*string_table)[code];
+
+ push(with.follchar);
+ code = with.prevchar;
+ }
+ /* We now have the first character in */
+ /* the string. */
+
+ fin_char = (*string_table)[code].follchar;
+
+ /* Output first character ==> Step 5 */
+ putup(fin_char);
+ /* While the stack is not empty, remove */
+ /* and output all characters from stack */
+ /* which are rest of characters in the */
+ /* string. */
+ /* */
+ /* ==> Step 6 */
+ pop(temp_c);
+
+ while (! popempty) {
+ putup(temp_c);
+ pop(temp_c);
+ }
+ /* If code isn't known, output the */
+ /* follower character of last character */
+ /* of string. */
+ if (unknown) {
+ fin_char = last_char;
+ putup(fin_char);
+ unknown = false;
+ }
+ /* Enter code into table ==> Step 7 */
+
+ make_table_entry(old_code , fin_char);
+
+ /* Make current code the previous code */
+ old_code = in_code;
+
+ /* Get next code == Step 2 */
+ get_code(in_code);
+
+ }
} /* Do_Decompression */
-void load_comp(string xx){
+void load_comp(string xx) {
- /* This loads in the compressed file. */
+ /* This loads in the compressed file. */
-const integer maxbuff = 8192 /* Buffer size for input and output files */;
+ const integer maxbuff = 8192 /* Buffer size for input and output files */;
-integer output_code /* Output compressed code */;
-boolean if_compressing /* TRUE if compressing file */;
+ integer output_code /* Output compressed code */;
+ boolean if_compressing /* TRUE if compressing file */;
-byte this_;
-untyped_file f;
+ byte this_;
+ untyped_file f;
-;
-string_table = new sttype;
-inempty=true;
-initialize_string_table();
+ ;
+ string_table = new sttype;
+ inempty = true;
+ initialize_string_table();
-assign(f,string("v:compr")+xx+".avd"); reset(f,1); seek(f,146);
-blockread(f,describe,30); blockread(f,method,1);
-bufsize=filesize(f)-177; blockread(f,*buffer,bufsize);
-close(f);
+ assign(f, string("v:compr") + xx + ".avd");
+ reset(f, 1);
+ seek(f, 146);
+ blockread(f, describe, 30);
+ blockread(f, method, 1);
+ bufsize = filesize(f) - 177;
+ blockread(f, *buffer, bufsize);
+ close(f);
-bit=-1; offset=12081; place=1;
+ bit = -1;
+ offset = 12081;
+ place = 1;
-do_decompression();
+ do_decompression();
-output << method << " : \"" << describe << '"' << NL;
+ output << method << " : \"" << describe << '"' << NL;
-delete string_table;
- }
+ delete string_table;
+}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
-gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
-buffer = new buffertype;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ buffer = new buffertype;
#ifdef uncomp
-load_uncomp("21");
+ load_uncomp("21");
#else
-load_comp("21");
+ load_comp("21");
#endif
-delete buffer;
-return EXIT_SUCCESS;
+ delete buffer;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/viewdocs.cpp b/engines/avalanche/viewdocs.cpp
index 58dc7b6e35..b205474879 100644
--- a/engines/avalanche/viewdocs.cpp
+++ b/engines/avalanche/viewdocs.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,519 +32,561 @@
namespace Avalanche {
-typedef array<0,49999,byte> bigtextarray;
+typedef array<0, 49999, byte> bigtextarray;
struct chaptertype {
- varying_string<60> headername;
- word headeroffset;
+ varying_string<60> headername;
+ word headeroffset;
};
-typedef array<1,1120,byte> sbtype;
+typedef array<1, 1120, byte> sbtype;
const integer contsize = 29; /*number of headers in AVALOT.DOC*/
const varying_string<80> contentsheader = " -=- The contents of the Lord AVALOT D'Argent (version 1.3) documentation -=-";
-const array<0,15,byte> listpal = {{1,0,3,0,7,0,7,7,0,0,0,0,0,0,0,0}};
-const array<0,15,byte> blankpal = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
+const array<0, 15, byte> listpal = {{1, 0, 3, 0, 7, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0}};
+const array<0, 15, byte> blankpal = {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};
const integer tabstop = 8; /*length of tab stops*/
/*NOTE: Tabs are not properly implemented. The program just interprets them*/
/*as a number of spaces.*/
-matrix<1,256, 0,15,byte> textvar,textvar8;
-array<0,1500,word> posof13;
-array<1,65535,byte> scvar; /*absolute $A000:$0000;*/
-sbtype stbar,stbar2;
+matrix<1, 256, 0, 15, byte> textvar, textvar8;
+array<0, 1500, word> posof13;
+array<1, 65535, byte> scvar; /*absolute $A000:$0000;*/
+sbtype stbar, stbar2;
pointer dpt;
-word sot,nol,bat,bab,tlab,nosl,bfseg,bfofs,useless;
-bigtextarray* textmem;
-boolean atsof,fast,regimode;
+word sot, nol, bat, bab, tlab, nosl, bfseg, bfofs, useless;
+bigtextarray *textmem;
+boolean atsof, fast, regimode;
byte hol;
varying_string<80> stline;
-array<1,contsize,chaptertype> contlist;
+array<1, contsize, chaptertype> contlist;
integer lat;
-void wipeit(longint pos, word count) /*Like fillchar, but wraps*/
-{
- longint wpos;
+void wipeit(longint pos, word count) { /*Like fillchar, but wraps*/
+ longint wpos;
- wpos=(word)(pos);
- fillchar(mem[longint(0xa000)+wpos / longint(16)*wpos % longint(16)],count,0);
+ wpos = (word)(pos);
+ fillchar(mem[longint(0xa000) + wpos / longint(16)*wpos % longint(16)], count, 0);
}
-void wrapcopy(sbtype fromarr, longint pos) /*Like fillchar, but wraps*/
-{
- longint wpos;
+void wrapcopy(sbtype fromarr, longint pos) { /*Like fillchar, but wraps*/
+ longint wpos;
- wpos=(word)(pos);
- move(fromarr,mem[longint(0xa000)+wpos / longint(16)*wpos % longint(16)],1120);
+ wpos = (word)(pos);
+ move(fromarr, mem[longint(0xa000) + wpos / longint(16)*wpos % longint(16)], 1120);
}
-void blankscreen() /*blanks the screen (!)*/
-{
- registers r;
+void blankscreen() { /*blanks the screen (!)*/
+ registers r;
- r.ax=0x1002;
- r.es=seg(blankpal);
- r.dx=ofs(blankpal);
- intr(0x10,r);
+ r.ax = 0x1002;
+ r.es = seg(blankpal);
+ r.dx = ofs(blankpal);
+ intr(0x10, r);
}
-void showscreen() /*shows the screen (!)*/
-{
- registers r;
+void showscreen() { /*shows the screen (!)*/
+ registers r;
- r.ax=0x1002;
- r.es=seg(listpal);
- r.dx=ofs(listpal);
- intr(0x10,r);
+ r.ax = 0x1002;
+ r.es = seg(listpal);
+ r.dx = ofs(listpal);
+ intr(0x10, r);
}
-void wipesb(word wheretop)
-{
- byte plane;
-
- for( plane=2; plane <= 3; plane ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane;
- fillchar(scvar[(wheretop+336)*80+1],1120,0);
- }
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1;
+void wipesb(word wheretop) {
+ byte plane;
+
+ for (plane = 2; plane <= 3; plane ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << plane;
+ port[0x3cf] = plane;
+ fillchar(scvar[(wheretop + 336) * 80 + 1], 1120, 0);
+ }
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 2;
+ port[0x3cf] = 1;
}
-void displstat(byte wipepos) /*displays the status bar*/
-{
- byte plane;
-
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=4; port[0x3cf]=2;
- wrapcopy(stbar,(lat+336)*80);
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=8; port[0x3cf]=3;
- wrapcopy(stbar2,(lat+336)*80);
- for( plane=2; plane <= 3; plane ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane;
- switch (wipepos) {
- case 0: wipeit((lat+335)*80-1,80); break;
- case 1: wipeit(lat*80-1,80); break;
- }
- }
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1;
+void displstat(byte wipepos) { /*displays the status bar*/
+ byte plane;
+
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 4;
+ port[0x3cf] = 2;
+ wrapcopy(stbar, (lat + 336) * 80);
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 8;
+ port[0x3cf] = 3;
+ wrapcopy(stbar2, (lat + 336) * 80);
+ for (plane = 2; plane <= 3; plane ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << plane;
+ port[0x3cf] = plane;
+ switch (wipepos) {
+ case 0:
+ wipeit((lat + 335) * 80 - 1, 80);
+ break;
+ case 1:
+ wipeit(lat * 80 - 1, 80);
+ break;
+ }
+ }
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 2;
+ port[0x3cf] = 1;
}
-void udstat() /*updates the status bar*/
-{
- varying_string<3> pt;
- byte fv,fv2;
-
- fillchar(pt,4,'\0');
- str(round((real)((tlab-21))/(nol-21)*100),pt);
- for( fv=1; fv <= 3; fv ++)
- for( fv2=0; fv2 <= 13; fv2 ++)
- {;
- stbar[fv2*80+fv+68]=~ textvar[ord(pt[fv])+1][fv2];
- stbar2[fv2*80+fv+68]=textvar[ord(pt[fv])+1][fv2];
- }
+void udstat() { /*updates the status bar*/
+ varying_string<3> pt;
+ byte fv, fv2;
+
+ fillchar(pt, 4, '\0');
+ str(round((real)((tlab - 21)) / (nol - 21) * 100), pt);
+ for (fv = 1; fv <= 3; fv ++)
+ for (fv2 = 0; fv2 <= 13; fv2 ++) {
+ ;
+ stbar[fv2 * 80 + fv + 68] = ~ textvar[ord(pt[fv]) + 1][fv2];
+ stbar2[fv2 * 80 + fv + 68] = textvar[ord(pt[fv]) + 1][fv2];
+ }
}
void finddocinfo() /*finds the line breaks in AVALOT.DOC & finds the
headers by searching for '"""'*/
{
- word wv,oldwv,varpos,varpos2,contlpos;
- boolean thisaheader;
- varying_string<60> headerstring;
-
- thisaheader=false;
- posof13[0]=65535; /*this +2 will wrap around to 1*/
- wv=1;
- oldwv=1;
- varpos=1;
- contlist[1].headername="Start of documentation";
- contlist[1].headeroffset=0;
- contlpos=2;
- while (wv<sot)
- {
- while (((*textmem)[wv]!=13) && ((*textmem)[wv]!=34) && (wv-oldwv<80)) wv += 1;
- switch ((*textmem)[wv]) {
- case 13: {
- posof13[varpos]=wv;
- varpos += 1;
- oldwv=wv+1;
- thisaheader=false;
- }
- break;
- case 34: if (((*textmem)[wv-1]==34) && ((*textmem)[wv-2]==34) && (varpos>12)
- && (thisaheader==false))
- {
- thisaheader=true;
- headerstring[0]='\0';
- varpos2=posof13[varpos-2]+2;
- while (((*textmem)[varpos2]==32) || ((*textmem)[varpos2]==9)) varpos2 += 1;
- while (varpos2!=posof13[varpos-1])
- {;
- headerstring=headerstring+chr((*textmem)[varpos2]);
- varpos2 += 1;
- }
- contlist[contlpos].headername=headerstring;
- contlist[contlpos].headeroffset=varpos-2;
- contlpos += 1;
- }
- break;
- }
- wv += 1;
- }
- nol=varpos-2;
- nosl=nol*14;
+ word wv, oldwv, varpos, varpos2, contlpos;
+ boolean thisaheader;
+ varying_string<60> headerstring;
+
+ thisaheader = false;
+ posof13[0] = 65535; /*this +2 will wrap around to 1*/
+ wv = 1;
+ oldwv = 1;
+ varpos = 1;
+ contlist[1].headername = "Start of documentation";
+ contlist[1].headeroffset = 0;
+ contlpos = 2;
+ while (wv < sot) {
+ while (((*textmem)[wv] != 13) && ((*textmem)[wv] != 34) && (wv - oldwv < 80)) wv += 1;
+ switch ((*textmem)[wv]) {
+ case 13: {
+ posof13[varpos] = wv;
+ varpos += 1;
+ oldwv = wv + 1;
+ thisaheader = false;
+ }
+ break;
+ case 34:
+ if (((*textmem)[wv - 1] == 34) && ((*textmem)[wv - 2] == 34) && (varpos > 12)
+ && (thisaheader == false)) {
+ thisaheader = true;
+ headerstring[0] = '\0';
+ varpos2 = posof13[varpos - 2] + 2;
+ while (((*textmem)[varpos2] == 32) || ((*textmem)[varpos2] == 9)) varpos2 += 1;
+ while (varpos2 != posof13[varpos - 1]) {
+ ;
+ headerstring = headerstring + chr((*textmem)[varpos2]);
+ varpos2 += 1;
+ }
+ contlist[contlpos].headername = headerstring;
+ contlist[contlpos].headeroffset = varpos - 2;
+ contlpos += 1;
+ }
+ break;
+ }
+ wv += 1;
+ }
+ nol = varpos - 2;
+ nosl = nol * 14;
}
-void graphmode(byte gm) /*puts the display adaptor into a specified mode*/
-{
- registers regs;
+void graphmode(byte gm) { /*puts the display adaptor into a specified mode*/
+ registers regs;
- regs.ax=gm;
- intr(0x10,regs);
+ regs.ax = gm;
+ intr(0x10, regs);
}
-void setoffset(word where_on_screen) {; /*assembler; {for scrolling the screen*/
-/*asm
- mov bx, where_on_screen
- mov dx, $03D4
- mov ah, bh
- mov al, $C
- out dx, ax
-
- mov ah, bl
- inc al
- out dx, ax*/
- }
+void setoffset(word where_on_screen) {
+ ; /*assembler; {for scrolling the screen*/
+ /*asm
+ mov bx, where_on_screen
+ mov dx, $03D4
+ mov ah, bh
+ mov al, $C
+ out dx, ax
+
+ mov ah, bl
+ inc al
+ out dx, ax*/
+}
-void setupsb(byte sbtype) /*sets up the status bar in several styles*/
-{
- integer fv;
-
- switch (sbtype) {
- case 1: if (regimode==false) stline=string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits. C=")
- +'\32'+"contents "+'\263'+" % through "; else
- stline=string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits to main menu.")
- +'\263'+" % through";
- break;
- case 2: stline=string("Esc=to doc lister ")+'\263'+" Press the key listed next to the section you wish to jump to"; break;
- }
- for( fv=0; fv <= 1118; fv ++) {;
- stbar[fv+1]=~ textvar[ord(stline[fv % 80+1])+1][fv / 80];
- stbar2[fv+1]=textvar[ord(stline[fv % 80+1])+1][fv / 80];
- }
+void setupsb(byte sbtype) { /*sets up the status bar in several styles*/
+ integer fv;
+
+ switch (sbtype) {
+ case 1:
+ if (regimode == false) stline = string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits. C=")
+ + '\32' + "contents " + '\263' + " % through ";
+ else
+ stline = string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits to main menu.")
+ + '\263' + " % through";
+ break;
+ case 2:
+ stline = string("Esc=to doc lister ") + '\263' + " Press the key listed next to the section you wish to jump to";
+ break;
+ }
+ for (fv = 0; fv <= 1118; fv ++) {
+ ;
+ stbar[fv + 1] = ~ textvar[ord(stline[fv % 80 + 1]) + 1][fv / 80];
+ stbar2[fv + 1] = textvar[ord(stline[fv % 80 + 1]) + 1][fv / 80];
+ }
}
-void setup() /*sets up graphics, variables, etc.*/
-{
- untyped_file f;
- integer fv;
- registers r;
-
- if ((paramstr(1)!="REGI") && (paramstr(1)!="ELMPOYTEN"))
-
- {
- clrscr;
- output << "This program cannot be run on its own. Run AVALOT.EXE." << NL;
- exit(123);
- }
- val(paramstr(2),bfseg,useless);
- val(paramstr(3),bfofs,useless);
- bfofs += 1;
- atsof=true;
- fast=false;
- assign(f,"avalot.fnt");
- reset(f,1);
- blockread(f,textvar,4096);
- close(f);
- assign(f,"ttsmall.fnt");
- reset(f,1);
- blockread(f,textvar8,4096);
- close(f);
- assign(f,"avalot.doc");
- reset(f,1);
- sot=filesize(f);
- mark(dpt);
- textmem = new bigtextarray;
- blockread(f,*textmem,sot);
- close(f);
- finddocinfo();
- if (paramstr(1)=="REGI")
- {;
- regimode=true;
- tlab=contlist[contsize].headeroffset+24;
- lat=contlist[contsize].headeroffset*14;
- }
- else
- {;
- lat=0; tlab=24;
- regimode=false;
- }
- setupsb(1);
- graphmode(16);
- directvideo=false;
- showscreen();
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1;
+void setup() { /*sets up graphics, variables, etc.*/
+ untyped_file f;
+ integer fv;
+ registers r;
+
+ if ((paramstr(1) != "REGI") && (paramstr(1) != "ELMPOYTEN"))
+
+ {
+ clrscr;
+ output << "This program cannot be run on its own. Run AVALOT.EXE." << NL;
+ exit(123);
+ }
+ val(paramstr(2), bfseg, useless);
+ val(paramstr(3), bfofs, useless);
+ bfofs += 1;
+ atsof = true;
+ fast = false;
+ assign(f, "avalot.fnt");
+ reset(f, 1);
+ blockread(f, textvar, 4096);
+ close(f);
+ assign(f, "ttsmall.fnt");
+ reset(f, 1);
+ blockread(f, textvar8, 4096);
+ close(f);
+ assign(f, "avalot.doc");
+ reset(f, 1);
+ sot = filesize(f);
+ mark(dpt);
+ textmem = new bigtextarray;
+ blockread(f, *textmem, sot);
+ close(f);
+ finddocinfo();
+ if (paramstr(1) == "REGI") {
+ ;
+ regimode = true;
+ tlab = contlist[contsize].headeroffset + 24;
+ lat = contlist[contsize].headeroffset * 14;
+ } else {
+ ;
+ lat = 0;
+ tlab = 24;
+ regimode = false;
+ }
+ setupsb(1);
+ graphmode(16);
+ directvideo = false;
+ showscreen();
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 2;
+ port[0x3cf] = 1;
}
void drawscreenf(integer tl) /*draws a screen from a line forwards*/
/*N.B. tl>1*/
{
- word fv,fv2,curbyte,plane;
- byte xpos;
-
- blankscreen();
- wipesb(lat);
- if (tl>nol-24) tl=nol-24;
- if (tl<0) tl=0;
- lat=tl*14;
- for( plane=2; plane <= 3; plane ++) /*wipe sb off*/
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane;
- /*fillchar(mem [$A000:((lat-1)*80) mod 65536],26800,0);*/
- wipeit(lat*80,26800);
- }
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1; /*back to normal*/
- if (tl>0) curbyte=posof13[tl-1]+2; else curbyte=0;
- bat=curbyte;
- for( fv=lat; fv <= lat+335; fv ++)
- {
- fv2=curbyte;
- xpos=1;
- while (xpos<=80)
- {
- if (fv2<posof13[tl])
- {
- if ((*textmem)[fv2]==9)
- {
- wipeit(fv*80+xpos,tabstop);
- xpos += tabstop;
- } else
- {
- mem[0xa000*(word)(fv*80+xpos-1)]=
- textvar[(*textmem)[fv2]+1][fv % 14];
- xpos += 1;
- }
- } else
- {
- wipeit(fv*80+xpos-1,82-xpos);
- xpos=81;
- }
- fv2 += 1;
- }
- if (fv % 14==0)
- {
- tl += 1;
- curbyte=posof13[tl-1]+2;
- }
- }
- bab=curbyte;
- tlab=tl;
- udstat();
- displstat(2);
- setoffset((word)(lat*80));
- if (tl-23>1) atsof=false;
- showscreen();
+ word fv, fv2, curbyte, plane;
+ byte xpos;
+
+ blankscreen();
+ wipesb(lat);
+ if (tl > nol - 24) tl = nol - 24;
+ if (tl < 0) tl = 0;
+ lat = tl * 14;
+ for (plane = 2; plane <= 3; plane ++) { /*wipe sb off*/
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << plane;
+ port[0x3cf] = plane;
+ /*fillchar(mem [$A000:((lat-1)*80) mod 65536],26800,0);*/
+ wipeit(lat * 80, 26800);
+ }
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 2;
+ port[0x3cf] = 1; /*back to normal*/
+ if (tl > 0) curbyte = posof13[tl - 1] + 2;
+ else curbyte = 0;
+ bat = curbyte;
+ for (fv = lat; fv <= lat + 335; fv ++) {
+ fv2 = curbyte;
+ xpos = 1;
+ while (xpos <= 80) {
+ if (fv2 < posof13[tl]) {
+ if ((*textmem)[fv2] == 9) {
+ wipeit(fv * 80 + xpos, tabstop);
+ xpos += tabstop;
+ } else {
+ mem[0xa000 * (word)(fv * 80 + xpos - 1)] =
+ textvar[(*textmem)[fv2] + 1][fv % 14];
+ xpos += 1;
+ }
+ } else {
+ wipeit(fv * 80 + xpos - 1, 82 - xpos);
+ xpos = 81;
+ }
+ fv2 += 1;
+ }
+ if (fv % 14 == 0) {
+ tl += 1;
+ curbyte = posof13[tl - 1] + 2;
+ }
+ }
+ bab = curbyte;
+ tlab = tl;
+ udstat();
+ displstat(2);
+ setoffset((word)(lat * 80));
+ if (tl - 23 > 1) atsof = false;
+ showscreen();
}
-void displcont() /*displays the contents*/
-{
- byte fv,fv2,fv3,keyon,jumppos,plane;
- word olat;
- varying_string<62> curstr;
- char rkv;
-
- blankscreen();
- olat=lat; lat=0; keyon=1; jumppos=0;
- setoffset(0);
- for( plane=1; plane <= 3; plane ++) /*wipe sb off*/
- {
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane;
- fillchar(scvar,26800,0);
- }
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1; /*back to normal*/
- setupsb(2);
- displstat(2);
- for( fv=1; fv <= 80; fv ++)
- for( fv2=0; fv2 <= 27; fv2 ++)
- {
- scvar[fv2*80+fv]=textvar[ord(contentsheader[fv-1])+1][fv2 / 2];
- }
- for( fv=1; fv <= contsize; fv ++)
- {
- if (keyon<10) curstr=strf(keyon)+". "+contlist[fv].headername; else
- curstr=string(chr(keyon+55))+". "+contlist[fv].headername;
- for( fv2=1; fv2 <= length(curstr); fv2 ++)
- for( fv3=0; fv3 <= 7; fv3 ++)
- scvar[(fv+3)*640+fv3*80+fv2]=textvar8[ord(curstr[fv2])+1][fv3];
- keyon += 1;
- }
- showscreen();
- do {; } while (!keypressed());
- rkv=readkey();
- switch (rkv) {
- case RANGE_9('\61','\71'): jumppos=ord(rkv)-48;
- break;
- case RANGE_26('\101','\132'): jumppos=ord(rkv)-55;
- break;
- case RANGE_26('\141','\172'): jumppos=ord(rkv)-87;
- break;
- default: lat=olat;
- }
- if (jumppos>0) lat=contlist[jumppos].headeroffset;
- setupsb(1);
- if (fast==false) wipesb(0);
- drawscreenf(lat);
+void displcont() { /*displays the contents*/
+ byte fv, fv2, fv3, keyon, jumppos, plane;
+ word olat;
+ varying_string<62> curstr;
+ char rkv;
+
+ blankscreen();
+ olat = lat;
+ lat = 0;
+ keyon = 1;
+ jumppos = 0;
+ setoffset(0);
+ for (plane = 1; plane <= 3; plane ++) { /*wipe sb off*/
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << plane;
+ port[0x3cf] = plane;
+ fillchar(scvar, 26800, 0);
+ }
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 2;
+ port[0x3cf] = 1; /*back to normal*/
+ setupsb(2);
+ displstat(2);
+ for (fv = 1; fv <= 80; fv ++)
+ for (fv2 = 0; fv2 <= 27; fv2 ++) {
+ scvar[fv2 * 80 + fv] = textvar[ord(contentsheader[fv - 1]) + 1][fv2 / 2];
+ }
+ for (fv = 1; fv <= contsize; fv ++) {
+ if (keyon < 10) curstr = strf(keyon) + ". " + contlist[fv].headername;
+ else
+ curstr = string(chr(keyon + 55)) + ". " + contlist[fv].headername;
+ for (fv2 = 1; fv2 <= length(curstr); fv2 ++)
+ for (fv3 = 0; fv3 <= 7; fv3 ++)
+ scvar[(fv + 3) * 640 + fv3 * 80 + fv2] = textvar8[ord(curstr[fv2]) + 1][fv3];
+ keyon += 1;
+ }
+ showscreen();
+ do {
+ ;
+ } while (!keypressed());
+ rkv = readkey();
+ switch (rkv) {
+ case RANGE_9('\61', '\71'):
+ jumppos = ord(rkv) - 48;
+ break;
+ case RANGE_26('\101', '\132'):
+ jumppos = ord(rkv) - 55;
+ break;
+ case RANGE_26('\141', '\172'):
+ jumppos = ord(rkv) - 87;
+ break;
+ default:
+ lat = olat;
+ }
+ if (jumppos > 0) lat = contlist[jumppos].headeroffset;
+ setupsb(1);
+ if (fast == false) wipesb(0);
+ drawscreenf(lat);
}
-void down() /*scrolls the screen down one line*/
-{
- word fv,xpos,wpos,lab;
-
- lat += 1;
- lab=lat+335;
- setoffset((word)(lat*80));
- if (lab % 14==0) {
- bat=posof13[tlab-24]+2; bab=posof13[tlab]+2; tlab += 1; udstat(); }
- fv=bab;
- xpos=1;
- while (xpos<=80)
- {
- if (fv<posof13[tlab])
- {
- if ((*textmem)[fv]==9)
- {
- wipeit(lab*80+xpos-1,tabstop);
- xpos += tabstop;
- } else
- {
- wpos=(lab*80+xpos) % 65536;
- /*fillchar(mem[$A000+wpos div 16*wpos mod 16],count,0)*/
- mem[0xa000*wpos-1]=textvar[(*textmem)[fv]+1][lab % 14];
- xpos += 1;
- }
- } else
- {
- wipeit(lab*80+xpos-1,81-xpos);
- xpos=81;
- }
- fv += 1;
- }
- atsof=false;
- if (fast==true) displstat(0);
+void down() { /*scrolls the screen down one line*/
+ word fv, xpos, wpos, lab;
+
+ lat += 1;
+ lab = lat + 335;
+ setoffset((word)(lat * 80));
+ if (lab % 14 == 0) {
+ bat = posof13[tlab - 24] + 2;
+ bab = posof13[tlab] + 2;
+ tlab += 1;
+ udstat();
+ }
+ fv = bab;
+ xpos = 1;
+ while (xpos <= 80) {
+ if (fv < posof13[tlab]) {
+ if ((*textmem)[fv] == 9) {
+ wipeit(lab * 80 + xpos - 1, tabstop);
+ xpos += tabstop;
+ } else {
+ wpos = (lab * 80 + xpos) % 65536;
+ /*fillchar(mem[$A000+wpos div 16*wpos mod 16],count,0)*/
+ mem[0xa000 * wpos - 1] = textvar[(*textmem)[fv] + 1][lab % 14];
+ xpos += 1;
+ }
+ } else {
+ wipeit(lab * 80 + xpos - 1, 81 - xpos);
+ xpos = 81;
+ }
+ fv += 1;
+ }
+ atsof = false;
+ if (fast == true) displstat(0);
}
-void up() /*scrolls the screen up one line*/
-{
- word fv,xpos,wpos;
-
- if (lat==0) { atsof=true; return; }
- if (lat % 14==0)
- if (tlab>24)
- {
- tlab -= 1; bat=posof13[tlab-24]+2; bab=posof13[tlab-1]+2; udstat(); } else
- { atsof=true; udstat(); return; }
- lat -= 1;
- setoffset((word)(lat*80));
- fv=bat;
- xpos=1;
- while (xpos<=80)
- {
- if (fv<posof13[tlab-23])
- {
- if ((*textmem)[fv]==9)
- {
- wipeit(lat*80+xpos-1,tabstop);
- xpos += tabstop;
- } else
- {
- wpos=(word)((lat*80+xpos) % 65536);
- mem[0xa000*wpos-1]=textvar[(*textmem)[fv]+1][lat % 14];
- xpos += 1;
- }
- } else
- {
- wipeit(lat*80+xpos-1,81-xpos);
- xpos=81;
- }
- fv += 1;
- }
- if (fast==true) displstat(1);
- /*ateof:=false;*/
+void up() { /*scrolls the screen up one line*/
+ word fv, xpos, wpos;
+
+ if (lat == 0) {
+ atsof = true;
+ return;
+ }
+ if (lat % 14 == 0)
+ if (tlab > 24) {
+ tlab -= 1;
+ bat = posof13[tlab - 24] + 2;
+ bab = posof13[tlab - 1] + 2;
+ udstat();
+ } else {
+ atsof = true;
+ udstat();
+ return;
+ }
+ lat -= 1;
+ setoffset((word)(lat * 80));
+ fv = bat;
+ xpos = 1;
+ while (xpos <= 80) {
+ if (fv < posof13[tlab - 23]) {
+ if ((*textmem)[fv] == 9) {
+ wipeit(lat * 80 + xpos - 1, tabstop);
+ xpos += tabstop;
+ } else {
+ wpos = (word)((lat * 80 + xpos) % 65536);
+ mem[0xa000 * wpos - 1] = textvar[(*textmem)[fv] + 1][lat % 14];
+ xpos += 1;
+ }
+ } else {
+ wipeit(lat * 80 + xpos - 1, 81 - xpos);
+ xpos = 81;
+ }
+ fv += 1;
+ }
+ if (fast == true) displstat(1);
+ /*ateof:=false;*/
}
-void endit() /*Ends the program*/
-{
- release(dpt);
- graphmode(2);
+void endit() { /*Ends the program*/
+ release(dpt);
+ graphmode(2);
}
-void control() /*User control*/
-{
- char rkv,rkv2/*the sequel*/,rkv3;
- integer fv;
- boolean first;
-
- if (regimode==false) displcont(); else drawscreenf(tlab-24);
- first=true;
- do {;
- rkv=readkey();
- switch (rkv) {
- case '\0': {
- rkv2=readkey();
- switch (rkv2) {
- case chome:drawscreenf(0); break;
- case cend: drawscreenf(nol-24); break;
- case cpgdn:
- {;
- memw[bfseg*bfofs]=0;
- if (fast==false) wipesb(lat);
- fv=1;
- while (((cardinal)lat+336<nosl) && (fv<337))
- {
- fv += 1;
- down();
- }
- if ((first==true) && (memw[bfseg*bfofs]<=2)) fast=true;
- if ((fast==false) || (first==true)) displstat(0);
- }
- break;
- case cpgup:
- {;
- memw[bfseg*bfofs]=0;
- if (fast==false) wipesb(lat);
- fv=1;
- while ((atsof==false) && (fv<337))
- {
- fv += 1;
- up();
- }
- if ((first==true) && (memw[bfseg*bfofs]<=2)) fast=true;
- if ((fast==false) || (first==true)) displstat(0);
- }
- break;
-/* cUp:repeat;
- up;
- readkey;
- until (readkey<>cUp) or (atsof=true);
- cDown: repeat;
- down;
- readkey;
- until (readkey<>cDown) or (ateof=true);*/
- }
- first=false;
- }
- break;
- case '\33': return; break;
- case '\103':case '\143': if (regimode==false) { wipesb(lat); displcont(); } break;
- }
- } while (!false);
+void control() { /*User control*/
+ char rkv, rkv2/*the sequel*/, rkv3;
+ integer fv;
+ boolean first;
+
+ if (regimode == false) displcont();
+ else drawscreenf(tlab - 24);
+ first = true;
+ do {
+ ;
+ rkv = readkey();
+ switch (rkv) {
+ case '\0': {
+ rkv2 = readkey();
+ switch (rkv2) {
+ case chome:
+ drawscreenf(0);
+ break;
+ case cend:
+ drawscreenf(nol - 24);
+ break;
+ case cpgdn: {
+ ;
+ memw[bfseg * bfofs] = 0;
+ if (fast == false) wipesb(lat);
+ fv = 1;
+ while (((cardinal)lat + 336 < nosl) && (fv < 337)) {
+ fv += 1;
+ down();
+ }
+ if ((first == true) && (memw[bfseg * bfofs] <= 2)) fast = true;
+ if ((fast == false) || (first == true)) displstat(0);
+ }
+ break;
+ case cpgup: {
+ ;
+ memw[bfseg * bfofs] = 0;
+ if (fast == false) wipesb(lat);
+ fv = 1;
+ while ((atsof == false) && (fv < 337)) {
+ fv += 1;
+ up();
+ }
+ if ((first == true) && (memw[bfseg * bfofs] <= 2)) fast = true;
+ if ((fast == false) || (first == true)) displstat(0);
+ }
+ break;
+ /* cUp:repeat;
+ up;
+ readkey;
+ until (readkey<>cUp) or (atsof=true);
+ cDown: repeat;
+ down;
+ readkey;
+ until (readkey<>cDown) or (ateof=true);*/
+ }
+ first = false;
+ }
+ break;
+ case '\33':
+ return;
+ break;
+ case '\103':
+ case '\143':
+ if (regimode == false) {
+ wipesb(lat);
+ displcont();
+ }
+ break;
+ }
+ } while (!false);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- setup();
- control();
- endit();
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ setup();
+ control();
+ endit();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/visa.cpp b/engines/avalanche/visa.cpp
index c801a741d6..b705fac675 100644
--- a/engines/avalanche/visa.cpp
+++ b/engines/avalanche/visa.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -51,240 +51,240 @@ const boolean report_dixi_errors = true;
boolean went_ok;
-void unskrimble()
-{
- word fv;
+void unskrimble() {
+ word fv;
- for( fv=1; fv <= bufsize; fv ++) buffer[fv]=(char)((~(ord(buffer[fv])-fv)) % 256);
+ for (fv = 1; fv <= bufsize; fv ++) buffer[fv] = (char)((~(ord(buffer[fv]) - fv)) % 256);
}
-void do_the_bubble()
-{
- bufsize += 1;
- buffer[bufsize]='\2';
+void do_the_bubble() {
+ bufsize += 1;
+ buffer[bufsize] = '\2';
}
-void dixi(char block, byte point)
-{
- untyped_file indexfile,sezfile;
- word idx_offset,sez_offset;
- boolean error;
+void dixi(char block, byte point) {
+ untyped_file indexfile, sezfile;
+ word idx_offset, sez_offset;
+ boolean error;
- error=false;
+ error = false;
- assign(indexfile,"avalot.idx"); assign(sezfile,"avalot.sez");
+ assign(indexfile, "avalot.idx");
+ assign(sezfile, "avalot.sez");
- reset(indexfile,1);
- seek(indexfile,(ord(upcase(block))-65)*2);
- blockread(indexfile,idx_offset,2);
- if (idx_offset==0) error=true;
- seek(indexfile,idx_offset+point*2);
- blockread(indexfile,sez_offset,2);
- if (sez_offset==0) error=true;
- close(indexfile);
+ reset(indexfile, 1);
+ seek(indexfile, (ord(upcase(block)) - 65) * 2);
+ blockread(indexfile, idx_offset, 2);
+ if (idx_offset == 0) error = true;
+ seek(indexfile, idx_offset + point * 2);
+ blockread(indexfile, sez_offset, 2);
+ if (sez_offset == 0) error = true;
+ close(indexfile);
- went_ok=! error;
+ went_ok = ! error;
- if (error)
- {
- if (report_dixi_errors)
- display(string('\7')+"Error accessing scroll "+block+strf(point));
- return;
- }
+ if (error) {
+ if (report_dixi_errors)
+ display(string('\7') + "Error accessing scroll " + block + strf(point));
+ return;
+ }
- reset(sezfile,1);
- seek(sezfile,sez_offset);
- blockread(sezfile,bufsize,2);
- blockread(sezfile,buffer,bufsize);
- close(sezfile);
- unskrimble();
+ reset(sezfile, 1);
+ seek(sezfile, sez_offset);
+ blockread(sezfile, bufsize, 2);
+ blockread(sezfile, buffer, bufsize);
+ close(sezfile);
+ unskrimble();
- if (bubbling) do_the_bubble();
+ if (bubbling) do_the_bubble();
- calldrivers;
+ calldrivers;
}
-void speech(byte who, byte subject)
-{
- untyped_file indexfile,sezfile;
- word idx_offset,sez_offset,next_idx_offset;
-
- if (subject==0)
- { /* No subject. */
- bubbling=true; report_dixi_errors=false;
- dixi('s',who);
- bubbling=false; report_dixi_errors=true;
- } else
- { /* Subject given. */
- assign(indexfile,"converse.avd"); assign(sezfile,"avalot.sez");
-
- went_ok=false; /* Assume that until we know otherwise. */
- reset(indexfile,1);
- seek(indexfile,who*2-2);
- blockread(indexfile,idx_offset,2);
- blockread(indexfile,next_idx_offset,2);
-
- if ((idx_offset==0) ||
- ((((next_idx_offset-idx_offset) / 2)-1) < subject)) return;
-
- seek(indexfile,idx_offset+subject*2);
- /*$I-*/
- blockread(indexfile,sez_offset,2);
- if ((sez_offset==0) || (ioresult!=0)) return;
- /*$I+*/
- close(indexfile);
-
- reset(sezfile,1);
- seek(sezfile,sez_offset);
- blockread(sezfile,bufsize,2);
- blockread(sezfile,buffer,bufsize);
- close(sezfile);
-
- unskrimble();
- do_the_bubble();
-
- calldrivers;
- went_ok=true;
- }
+void speech(byte who, byte subject) {
+ untyped_file indexfile, sezfile;
+ word idx_offset, sez_offset, next_idx_offset;
+
+ if (subject == 0) {
+ /* No subject. */
+ bubbling = true;
+ report_dixi_errors = false;
+ dixi('s', who);
+ bubbling = false;
+ report_dixi_errors = true;
+ } else {
+ /* Subject given. */
+ assign(indexfile, "converse.avd");
+ assign(sezfile, "avalot.sez");
+
+ went_ok = false; /* Assume that until we know otherwise. */
+ reset(indexfile, 1);
+ seek(indexfile, who * 2 - 2);
+ blockread(indexfile, idx_offset, 2);
+ blockread(indexfile, next_idx_offset, 2);
+
+ if ((idx_offset == 0) ||
+ ((((next_idx_offset - idx_offset) / 2) - 1) < subject)) return;
+
+ seek(indexfile, idx_offset + subject * 2);
+ /*$I-*/
+ blockread(indexfile, sez_offset, 2);
+ if ((sez_offset == 0) || (ioresult != 0)) return;
+ /*$I+*/
+ close(indexfile);
+
+ reset(sezfile, 1);
+ seek(sezfile, sez_offset);
+ blockread(sezfile, bufsize, 2);
+ blockread(sezfile, buffer, bufsize);
+ close(sezfile);
+
+ unskrimble();
+ do_the_bubble();
+
+ calldrivers;
+ went_ok = true;
+ }
}
-void talkto(byte whom)
-{
- byte fv;
- boolean no_matches;
-
- if (person==pardon)
- {
- person=chr(subjnumber);
- subjnumber=0;
- }
-
- if (subjnumber==0)
- switch (chr(whom)) {
- case pspludwick:
-
- if ((dna.lustie_is_asleep) & (~ dna.obj[potion]))
- {
- dixi('q',68);
- dna.obj[potion]=true;
- objectlist; points(3); return;
- } else
- {
- if (dna.talked_to_crapulus)
- switch (dna.given2spludwick) { /* Spludwick - what does he need? */
- /* 0 - let it through to use normal routine. */
- case RANGE_2(1,2): {
- display(string("Can you get me ")+
- get_better(spludwick_order[dna.given2spludwick])+", please?"+
- "\232\2");
- return;
- }
- break;
- case 3: {
- dixi('q',30); /* need any help with the game? */
- return;
- }
- break;
- }
- else {
- dixi('q',42); /* Haven't talked to Crapulus. Go and talk to him. */
- return;
- }
- }
- break;
-
- case pibythneth: if (dna.givenbadgetoiby)
- {
- dixi('q',33); /* Thanks a lot! */
- return; /* And leave the proc. */
- }
- break; /* Or... just continue, 'cos he hasn't got it. */
- case pdogfood: if (dna.wonnim)
- { /* We've won the game. */
- dixi('q',6); /* "I'm Not Playing!" */
- return; /* Zap back. */
- } else dna.asked_dogfood_about_nim=true;
- break;
- case payles: if (~ dna.ayles_is_awake)
- {
- dixi('q',43); /* He's fast asleep! */
- return;
- } else
- if (~ dna.given_pen_to_ayles)
- {
- dixi('q',44); /* Can you get me a pen, Avvy? */
- return;
- }
- break;
-
- case pjacques: { dixi('q',43); return; } break;
- case pgeida: if (dna.geida_given_potion)
- dna.geida_follows=true; else
- {
- dixi('u',17);
- return;
- }
- break;
- case pspurge: if (~ dna.sitting_in_pub)
- {
- dixi('q',71); /* Try going over and sitting down. */
- return;
- } else
- {
- if (spurge_talk<5) spurge_talk += 1;
- if (spurge_talk>1)
- { /* no. 1 falls through */
- dixi('q',70+spurge_talk);
- return;
- }
- }
- break;
- } else /* On a subject. Is there any reason to block it? */
- switch (chr(whom)) {
- case payles: if (~ dna.ayles_is_awake)
- {
- dixi('q',43); /* He's fast asleep! */
- return;
- }
- break;
- }
-
- if (whom>149) whom -= 149;
-
- no_matches=true;
- for( fv=1; fv <= numtr; fv ++)
- if (tr[fv].a.accinum==whom)
- {
- display(string('\23')+chr(fv+48)+'\4');
- no_matches=false;
- flush();
- }
-
- if (no_matches) display("\23\23\4");
-
- speech(whom,subjnumber);
- if (! went_ok) /* File not found! */
- dixi('n',whom);
-
- if (subjnumber==0)
- switch (chr(whom+149)) {
- case pcrapulus:
- { /* Crapulus: get the badge - first time only */
- dna.obj[badge]=true;
- objectlist;
- dixi('q',1); /* Circular from Cardiff. */
- dna.talked_to_crapulus=true;
-
- whereis[pcrapulus]=177; /* Crapulus walks off. */
-
- tr[2].vanishifstill=true;
- tr[2].walkto(4); /* Walks away. */
-
- points(2);
- }
- break;
-
- }
+void talkto(byte whom) {
+ byte fv;
+ boolean no_matches;
+
+ if (person == pardon) {
+ person = chr(subjnumber);
+ subjnumber = 0;
+ }
+
+ if (subjnumber == 0)
+ switch (chr(whom)) {
+ case pspludwick:
+
+ if ((dna.lustie_is_asleep) & (~ dna.obj[potion])) {
+ dixi('q', 68);
+ dna.obj[potion] = true;
+ objectlist;
+ points(3);
+ return;
+ } else {
+ if (dna.talked_to_crapulus)
+ switch (dna.given2spludwick) { /* Spludwick - what does he need? */
+ /* 0 - let it through to use normal routine. */
+ case RANGE_2(1, 2): {
+ display(string("Can you get me ") +
+ get_better(spludwick_order[dna.given2spludwick]) + ", please?" +
+ "\232\2");
+ return;
+ }
+ break;
+ case 3: {
+ dixi('q', 30); /* need any help with the game? */
+ return;
+ }
+ break;
+ }
+ else {
+ dixi('q', 42); /* Haven't talked to Crapulus. Go and talk to him. */
+ return;
+ }
+ }
+ break;
+
+ case pibythneth:
+ if (dna.givenbadgetoiby) {
+ dixi('q', 33); /* Thanks a lot! */
+ return; /* And leave the proc. */
+ }
+ break; /* Or... just continue, 'cos he hasn't got it. */
+ case pdogfood:
+ if (dna.wonnim) {
+ /* We've won the game. */
+ dixi('q', 6); /* "I'm Not Playing!" */
+ return; /* Zap back. */
+ } else dna.asked_dogfood_about_nim = true;
+ break;
+ case payles:
+ if (~ dna.ayles_is_awake) {
+ dixi('q', 43); /* He's fast asleep! */
+ return;
+ } else if (~ dna.given_pen_to_ayles) {
+ dixi('q', 44); /* Can you get me a pen, Avvy? */
+ return;
+ }
+ break;
+
+ case pjacques: {
+ dixi('q', 43);
+ return;
+ }
+ break;
+ case pgeida:
+ if (dna.geida_given_potion)
+ dna.geida_follows = true;
+ else {
+ dixi('u', 17);
+ return;
+ }
+ break;
+ case pspurge:
+ if (~ dna.sitting_in_pub) {
+ dixi('q', 71); /* Try going over and sitting down. */
+ return;
+ } else {
+ if (spurge_talk < 5) spurge_talk += 1;
+ if (spurge_talk > 1) {
+ /* no. 1 falls through */
+ dixi('q', 70 + spurge_talk);
+ return;
+ }
+ }
+ break;
+ }
+ else /* On a subject. Is there any reason to block it? */
+ switch (chr(whom)) {
+ case payles:
+ if (~ dna.ayles_is_awake) {
+ dixi('q', 43); /* He's fast asleep! */
+ return;
+ }
+ break;
+ }
+
+ if (whom > 149) whom -= 149;
+
+ no_matches = true;
+ for (fv = 1; fv <= numtr; fv ++)
+ if (tr[fv].a.accinum == whom) {
+ display(string('\23') + chr(fv + 48) + '\4');
+ no_matches = false;
+ flush();
+ }
+
+ if (no_matches) display("\23\23\4");
+
+ speech(whom, subjnumber);
+ if (! went_ok) /* File not found! */
+ dixi('n', whom);
+
+ if (subjnumber == 0)
+ switch (chr(whom + 149)) {
+ case pcrapulus: {
+ /* Crapulus: get the badge - first time only */
+ dna.obj[badge] = true;
+ objectlist;
+ dixi('q', 1); /* Circular from Cardiff. */
+ dna.talked_to_crapulus = true;
+
+ whereis[pcrapulus] = 177; /* Crapulus walks off. */
+
+ tr[2].vanishifstill = true;
+ tr[2].walkto(4); /* Walks away. */
+
+ points(2);
+ }
+ break;
+
+ }
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/visa.h b/engines/avalanche/visa.h
index 474a0098c6..6a1ee6265e 100644
--- a/engines/avalanche/visa.h
+++ b/engines/avalanche/visa.h
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/visatest.cpp b/engines/avalanche/visatest.cpp
index 8544239473..487cc142ab 100644
--- a/engines/avalanche/visatest.cpp
+++ b/engines/avalanche/visatest.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -32,80 +32,79 @@ namespace Avalanche {
char block;
word point;
-array<1,2000,char> result;
+array<1, 2000, char> result;
word result_len;
-void unskrimble()
-{
- word fv;
+void unskrimble() {
+ word fv;
- for( fv=1; fv <= 2000; fv ++) result[fv]=(char)((~(ord(result[fv])-fv)) % 256);
+ for (fv = 1; fv <= 2000; fv ++) result[fv] = (char)((~(ord(result[fv]) - fv)) % 256);
}
-void visa_get_scroll(char block, word point)
-{
- untyped_file indexfile,sezfile;
- word idx_offset,sez_offset;
-
- assign(indexfile,"avalot.idx"); assign(sezfile,"avalot.sez");
-
- reset(indexfile,1);
- seek(indexfile,(ord(upcase(block))-65)*2);
- blockread(indexfile,idx_offset,2);
- seek(indexfile,idx_offset+point*2);
- blockread(indexfile,sez_offset,2);
- close(indexfile);
-
- reset(sezfile,1);
- seek(sezfile,sez_offset);
- blockread(sezfile,result_len,2);
- blockread(sezfile,result,result_len);
- close(sezfile);
- unskrimble();
+void visa_get_scroll(char block, word point) {
+ untyped_file indexfile, sezfile;
+ word idx_offset, sez_offset;
+
+ assign(indexfile, "avalot.idx");
+ assign(sezfile, "avalot.sez");
+
+ reset(indexfile, 1);
+ seek(indexfile, (ord(upcase(block)) - 65) * 2);
+ blockread(indexfile, idx_offset, 2);
+ seek(indexfile, idx_offset + point * 2);
+ blockread(indexfile, sez_offset, 2);
+ close(indexfile);
+
+ reset(sezfile, 1);
+ seek(sezfile, sez_offset);
+ blockread(sezfile, result_len, 2);
+ blockread(sezfile, result, result_len);
+ close(sezfile);
+ unskrimble();
}
-void access_get_scroll(char block, word point)
-{
- string x;
- untyped_file f;
-
- str(point,x);
- x=string('S')+block+x+".RAW";
- assign(f,x);
- reset(f,1);
- result_len=filesize(f);
- blockread(f,result,result_len);
- close(f);
+void access_get_scroll(char block, word point) {
+ string x;
+ untyped_file f;
+
+ str(point, x);
+ x = string('S') + block + x + ".RAW";
+ assign(f, x);
+ reset(f, 1);
+ result_len = filesize(f);
+ blockread(f, result, result_len);
+ close(f);
}
-void display_it()
-{
- word fv;
+void display_it() {
+ word fv;
- for( fv=1; fv <= result_len; fv ++) output << result[fv];
+ for (fv = 1; fv <= result_len; fv ++) output << result[fv];
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- do {
- output << NL;
- output << NL;
- output << "Block?"; input >> block >> NL;
- output << "Point?"; input >> point >> NL;
-
- output << "ACCESS reports (this one is always correct):" << NL;
- output << NL;
- access_get_scroll(block,point);
- display_it();
-
- output << NL; output << NL;
- output << "VISA reports:" << NL;
- output << NL;
- visa_get_scroll(block,point);
- display_it();
- } while (!false);
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ do {
+ output << NL;
+ output << NL;
+ output << "Block?";
+ input >> block >> NL;
+ output << "Point?";
+ input >> point >> NL;
+
+ output << "ACCESS reports (this one is always correct):" << NL;
+ output << NL;
+ access_get_scroll(block, point);
+ display_it();
+
+ output << NL;
+ output << NL;
+ output << "VISA reports:" << NL;
+ output << NL;
+ visa_get_scroll(block, point);
+ display_it();
+ } while (!false);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/waver.cpp b/engines/avalanche/waver.cpp
index e3261d7c1e..d0f88a1e85 100644
--- a/engines/avalanche/waver.cpp
+++ b/engines/avalanche/waver.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
diff --git a/engines/avalanche/xf_gover.cpp b/engines/avalanche/xf_gover.cpp
index 074c3b1178..f8726c3a62 100644
--- a/engines/avalanche/xf_gover.cpp
+++ b/engines/avalanche/xf_gover.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,94 +29,99 @@
namespace Avalanche {
-void load()
-{
- byte a; /*absolute $A000:1200;*/ byte bit; untyped_file f;
-;
- assign(f,"avagame.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,12080);
- }
- close(f);
- bit=getpixel(0,0);
+void load() {
+ byte a; /*absolute $A000:1200;*/ byte bit;
+ untyped_file f;
+ ;
+ assign(f, "avagame.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-void gfx()
-{
- integer gd,gm;
+void gfx() {
+ integer gd, gm;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
}
-void blit(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3)
-{
- pointer p,q; word s;
+void blit(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3) {
+ pointer p, q;
+ word s;
- mark(q);
+ mark(q);
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
- putimage(x3,y3,p,0);
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+ putimage(x3, y3, p, 0);
- release(q);
+ release(q);
}
-void copy_hammer()
-{
- blit(274,47,311,67,92,10);
+void copy_hammer() {
+ blit(274, 47, 311, 67, 92, 10);
}
-void do_text()
-{
- settextjustify(1,1); setcolor(0);
- settextstyle(2,0,4);
- setusercharsize(120,100,100,100);
- outtextxy(112,32,"Thorsoft of Letchworth presents");
- blit(3,30,218,31,4,30);
- blit(4,35,219,38,3,35);
+void do_text() {
+ settextjustify(1, 1);
+ setcolor(0);
+ settextstyle(2, 0, 4);
+ setusercharsize(120, 100, 100, 100);
+ outtextxy(112, 32, "Thorsoft of Letchworth presents");
+ blit(3, 30, 218, 31, 4, 30);
+ blit(4, 35, 219, 38, 3, 35);
}
-void dump_to_file(byte x1,byte y1,byte x2,byte y2, string fn)
-{
- byte y,bit;
- untyped_file f;
+void dump_to_file(byte x1, byte y1, byte x2, byte y2, string fn) {
+ byte y, bit;
+ untyped_file f;
- assign(f,fn);
- rewrite(f,1);
+ assign(f, fn);
+ rewrite(f, 1);
- for( y=y1; y <= y2; y ++)
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(f,mem[0xa000*y*80+x1],x2-x1);
- }
+ for (y = y1; y <= y2; y ++)
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(f, mem[0xa000 * y * 80 + x1], x2 - x1);
+ }
- close(f);
+ close(f);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- gfx();
- load();
-
- setfillstyle(1,7);
- bar(2,10,219,37);
- bar(0,0,1,200);
- bar(220,0,250, 88);
- bar(0,88,213,147);
- bar(622,88,640,147);
- copy_hammer();
- do_text();
-
- dump_to_file( 0,10,28,86,"about.avd");
- dump_to_file(26,88,78,147,"gameover.avd");
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ gfx();
+ load();
+
+ setfillstyle(1, 7);
+ bar(2, 10, 219, 37);
+ bar(0, 0, 1, 200);
+ bar(220, 0, 250, 88);
+ bar(0, 88, 213, 147);
+ bar(622, 88, 640, 147);
+ copy_hammer();
+ do_text();
+
+ dump_to_file(0, 10, 28, 86, "about.avd");
+ dump_to_file(26, 88, 78, 147, "gameover.avd");
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/xf_help.cpp b/engines/avalanche/xf_help.cpp
index 7a99b50646..fc953a5628 100644
--- a/engines/avalanche/xf_help.cpp
+++ b/engines/avalanche/xf_help.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -37,77 +37,76 @@ text i;
untyped_file o;
string x;
char t;
-byte p,w;
+byte p, w;
-array<0,max_pages,word> where;
+array<0, max_pages, word> where;
-void out(string x)
-{
- byte fz;
+void out(string x) {
+ byte fz;
- for( fz=1; fz <= length(x); fz ++)
- x[fz]=chr(ord(x[fz]) ^ 177);
- blockwrite(o,x[0],1);
- blockwrite(o,x[1],length(x));
+ for (fz = 1; fz <= length(x); fz ++)
+ x[fz] = chr(ord(x[fz]) ^ 177);
+ blockwrite(o, x[0], 1);
+ blockwrite(o, x[1], length(x));
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- assign(o,"help.avd");
- rewrite(o,1);
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ assign(o, "help.avd");
+ rewrite(o, 1);
- blockwrite(o,where,sizeof(where));
+ blockwrite(o, where, sizeof(where));
- for( fv=0; fv <= max_pages; fv ++)
- {
- where[fv]=filepos(o);
+ for (fv = 0; fv <= max_pages; fv ++) {
+ where[fv] = filepos(o);
- assign(i,string('h')+strf(fv)+".raw");
- reset(i);
+ assign(i, string('h') + strf(fv) + ".raw");
+ reset(i);
- i >> x >> NL; /* Title. */
- out(x);
+ i >> x >> NL; /* Title. */
+ out(x);
- i >> p >> NL; /* Picture. */
- blockwrite(o,p,1);
+ i >> p >> NL; /* Picture. */
+ blockwrite(o, p, 1);
- do {
- i >> x >> NL;
- out(x);
- } while (!(x=='!'));
+ do {
+ i >> x >> NL;
+ out(x);
+ } while (!(x == '!'));
- while (! eof(i))
- {
- i >> x >> NL;
- if (x=='-')
- { /* Null point */
- t='\0'; p=0; w=177;
- } else
- { /* Has a point. */
- i >> t >> NL;
- i >> p >> NL;
- i >> w >> NL;
- }
+ while (! eof(i)) {
+ i >> x >> NL;
+ if (x == '-') {
+ /* Null point */
+ t = '\0';
+ p = 0;
+ w = 177;
+ } else {
+ /* Has a point. */
+ i >> t >> NL;
+ i >> p >> NL;
+ i >> w >> NL;
+ }
- blockwrite(o,t,1);
- blockwrite(o,p,1);
- blockwrite(o,w,1);
- }
+ blockwrite(o, t, 1);
+ blockwrite(o, p, 1);
+ blockwrite(o, w, 1);
+ }
- t='\261';
- blockwrite(o,t,1);
- blockwrite(o,p,1);
- blockwrite(o,w,1);
+ t = '\261';
+ blockwrite(o, t, 1);
+ blockwrite(o, p, 1);
+ blockwrite(o, w, 1);
- close(i);
+ close(i);
- }
+ }
- seek(o,0); blockwrite(o,where,sizeof(where));
+ seek(o, 0);
+ blockwrite(o, where, sizeof(where));
- close(o);
- return EXIT_SUCCESS;
+ close(o);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/xf_visa.cpp b/engines/avalanche/xf_visa.cpp
index 4df55cdce5..4dde0e3fc4 100644
--- a/engines/avalanche/xf_visa.cpp
+++ b/engines/avalanche/xf_visa.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,173 +34,167 @@ namespace Avalanche {
const varying_string<9> used = "DNPQSTUXZ";
-const varying_string<12> header = string("Avalot Sez:")+'\32';
+const varying_string<12> header = string("Avalot Sez:") + '\32';
-untyped_file sez,infile;
+untyped_file sez, infile;
searchrec s;
-matrix<'A','Z',0,99,word> positions;
-array<'A','Z',word> maxlen;
+matrix < 'A', 'Z', 0, 99, word > positions;
+array < 'A', 'Z', word > maxlen;
-matrix<1,50,0,255,word> speak_positions;
-array<1,50,word> speak_maxlen;
+matrix<1, 50, 0, 255, word> speak_positions;
+array<1, 50, word> speak_maxlen;
-array<1,2000,char> data;
+array<1, 2000, char> data;
word data_length;
byte fv;
-byte numeric_bit()
-{
- varying_string<5> x; integer e; byte result;
-
- byte numeric_bit_result;
- x=copy(s.name,3,pos(".",s.name)-3);
- val(x,result,e);
- if (e!=0)
- {
- output << "NUMERIC ERROR: " << s.name << '/' << x << NL;
- exit(255);
- }
- numeric_bit_result=result;
- return numeric_bit_result;
+byte numeric_bit() {
+ varying_string<5> x;
+ integer e;
+ byte result;
+
+ byte numeric_bit_result;
+ x = copy(s.name, 3, pos(".", s.name) - 3);
+ val(x, result, e);
+ if (e != 0) {
+ output << "NUMERIC ERROR: " << s.name << '/' << x << NL;
+ exit(255);
+ }
+ numeric_bit_result = result;
+ return numeric_bit_result;
}
-byte speak_left()
-{
- string x; integer e; byte result;
-
- byte speak_left_result;
- x=copy(s.name,3,pos(".",s.name)-3);
- x=copy(x,1,pos("-",x)-1);
- val(x,result,e);
- if (e!=0)
- {
- output << "NUMERIC ERROR (left): " << s.name << '/' << x << NL;
- exit(255);
- }
- speak_left_result=result;
- return speak_left_result;
+byte speak_left() {
+ string x;
+ integer e;
+ byte result;
+
+ byte speak_left_result;
+ x = copy(s.name, 3, pos(".", s.name) - 3);
+ x = copy(x, 1, pos("-", x) - 1);
+ val(x, result, e);
+ if (e != 0) {
+ output << "NUMERIC ERROR (left): " << s.name << '/' << x << NL;
+ exit(255);
+ }
+ speak_left_result = result;
+ return speak_left_result;
}
-byte speak_right()
-{
- string x; integer e; byte result;
-
- byte speak_right_result;
- x=copy(s.name,3,pos(".",s.name)-3);
- x=copy(x,pos("-",x)+1,255);
- val(x,result,e);
- if (e!=0)
- {
- output << "NUMERIC ERROR (right): " << s.name << '/' << x << NL;
- exit(255);
- }
- speak_right_result=result;
- return speak_right_result;
+byte speak_right() {
+ string x;
+ integer e;
+ byte result;
+
+ byte speak_right_result;
+ x = copy(s.name, 3, pos(".", s.name) - 3);
+ x = copy(x, pos("-", x) + 1, 255);
+ val(x, result, e);
+ if (e != 0) {
+ output << "NUMERIC ERROR (right): " << s.name << '/' << x << NL;
+ exit(255);
+ }
+ speak_right_result = result;
+ return speak_right_result;
}
-void write_out()
-{
- array<'A','Z',word> points;
- array<1,50,word> speak_points;
- untyped_file outf;
- byte fv;
+void write_out() {
+ array < 'A', 'Z', word > points;
+ array<1, 50, word> speak_points;
+ untyped_file outf;
+ byte fv;
- fillchar(points,sizeof(points),'\0');
- fillchar(speak_points,sizeof(speak_points),'\0');
+ fillchar(points, sizeof(points), '\0');
+ fillchar(speak_points, sizeof(speak_points), '\0');
- assign(outf,"v:avalot.idx");
- rewrite(outf,1);
- blockwrite(outf,points,sizeof(points));
+ assign(outf, "v:avalot.idx");
+ rewrite(outf, 1);
+ blockwrite(outf, points, sizeof(points));
- for( fv=1; fv <= length(used); fv ++)
- {
- points[used[fv-1]]=filepos(outf);
- blockwrite(outf,positions[used[fv-1]],maxlen[used[fv-1]]*2+2);
- }
+ for (fv = 1; fv <= length(used); fv ++) {
+ points[used[fv - 1]] = filepos(outf);
+ blockwrite(outf, positions[used[fv - 1]], maxlen[used[fv - 1]] * 2 + 2);
+ }
- seek(outf,0);
- blockwrite(outf,points,sizeof(points));
+ seek(outf, 0);
+ blockwrite(outf, points, sizeof(points));
- close(outf);
+ close(outf);
- /* --- now the speech records --- */
+ /* --- now the speech records --- */
- assign(outf,"v:converse.avd");
- rewrite(outf,1);
- blockwrite(outf,speak_points,sizeof(speak_points));
+ assign(outf, "v:converse.avd");
+ rewrite(outf, 1);
+ blockwrite(outf, speak_points, sizeof(speak_points));
- for( fv=1; fv <= 15; fv ++)
- {
- speak_points[fv]=filepos(outf);
+ for (fv = 1; fv <= 15; fv ++) {
+ speak_points[fv] = filepos(outf);
- blockwrite(outf,speak_positions[fv],speak_maxlen[fv]*2+2);
- }
+ blockwrite(outf, speak_positions[fv], speak_maxlen[fv] * 2 + 2);
+ }
- seek(outf,0);
- blockwrite(outf,speak_points,sizeof(speak_points));
+ seek(outf, 0);
+ blockwrite(outf, speak_points, sizeof(speak_points));
- close(outf);
+ close(outf);
}
-void skrimble()
-{
- word fv;
+void skrimble() {
+ word fv;
- for( fv=1; fv <= 2000; fv ++) data[fv]=(char)((~(ord(data[fv]))+fv) % 256);
+ for (fv = 1; fv <= 2000; fv ++) data[fv] = (char)((~(ord(data[fv])) + fv) % 256);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- fillchar(positions,sizeof(positions),'\0');
- fillchar(maxlen,sizeof(maxlen),'\0');
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ fillchar(positions, sizeof(positions), '\0');
+ fillchar(maxlen, sizeof(maxlen), '\0');
- clrscr;
+ clrscr;
- assign(sez,"v:avalot.sez");
- rewrite(sez,1);
- blockwrite(sez,header[1],12);
+ assign(sez, "v:avalot.sez");
+ rewrite(sez, 1);
+ blockwrite(sez, header[1], 12);
- findfirst("s*.raw",anyfile,s);
- while (doserror==0)
- {
- assign(infile,s.name);
- reset(infile,1);
- blockread(infile,data,2000,data_length);
- close(infile);
+ findfirst("s*.raw", anyfile, s);
+ while (doserror == 0) {
+ assign(infile, s.name);
+ reset(infile, 1);
+ blockread(infile, data, 2000, data_length);
+ close(infile);
- clrscr;
- if (pos("-",s.name)==0)
- { /* Not a speech record. */
- output << s.name << format(numeric_bit(),10) << NL;
+ clrscr;
+ if (pos("-", s.name) == 0) {
+ /* Not a speech record. */
+ output << s.name << format(numeric_bit(), 10) << NL;
- positions[s.name[2]][numeric_bit()]=filepos(sez);
- if (maxlen[s.name[2]]<(unsigned char)numeric_bit()) maxlen[s.name[2]]=numeric_bit();
+ positions[s.name[2]][numeric_bit()] = filepos(sez);
+ if (maxlen[s.name[2]] < (unsigned char)numeric_bit()) maxlen[s.name[2]] = numeric_bit();
- } else
- { /* A speech record. */
- output << s.name << format(speak_left(),10) << format(speak_right(),10) << " SR" << NL;
+ } else {
+ /* A speech record. */
+ output << s.name << format(speak_left(), 10) << format(speak_right(), 10) << " SR" << NL;
- speak_positions[speak_left()][speak_right()]=filepos(sez);
- if (speak_maxlen[speak_left()]<(unsigned char)speak_right())
- speak_maxlen[speak_left()]=speak_right();
- }
+ speak_positions[speak_left()][speak_right()] = filepos(sez);
+ if (speak_maxlen[speak_left()] < (unsigned char)speak_right())
+ speak_maxlen[speak_left()] = speak_right();
+ }
- skrimble();
+ skrimble();
- blockwrite(sez,data_length,2);
- blockwrite(sez,data,data_length);
+ blockwrite(sez, data_length, 2);
+ blockwrite(sez, data, data_length);
- findnext(s);
- clreol;
- }
+ findnext(s);
+ clreol;
+ }
- close(sez);
+ close(sez);
- write_out();
- return EXIT_SUCCESS;
+ write_out();
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/xfbutton.cpp b/engines/avalanche/xfbutton.cpp
index 013a121666..d2c552dae9 100644
--- a/engines/avalanche/xfbutton.cpp
+++ b/engines/avalanche/xfbutton.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -29,62 +29,65 @@
namespace Avalanche {
-integer x,y;
-untyped_file f,out;
+integer x, y;
+untyped_file f, out;
-void load() /* Load2, actually */
-{
- byte a0; /*absolute $A000:800;*/
- byte bit;
- untyped_file f;
- integer gd,gm;
+void load() { /* Load2, actually */
+ byte a0; /*absolute $A000:800;*/
+ byte bit;
+ untyped_file f;
+ integer gd, gm;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
- assign(f,"d:butnraw.avd"); reset(f,1);
- seek(f,177);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a0,12080);
- }
- close(f);
- bit=getpixel(0,0);
+ assign(f, "d:butnraw.avd");
+ reset(f, 1);
+ seek(f, 177);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a0, 12080);
+ }
+ close(f);
+ bit = getpixel(0, 0);
}
-void grab(integer x1,integer y1,integer x2,integer y2) /* s=930 */
-{
- word s; pointer p;
+void grab(integer x1, integer y1, integer x2, integer y2) { /* s=930 */
+ word s;
+ pointer p;
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
- putimage(0,0,p,0);
- blockwrite(out,p,s);
- freemem(p,s);
- rectangle(x1,y1,x2,y2);
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+ putimage(0, 0, p, 0);
+ blockwrite(out, p, s);
+ freemem(p, s);
+ rectangle(x1, y1, x2, y2);
}
-int main(int argc, const char* argv[])
-{
- pio_initialize(argc, argv);
- assign(f,"d:butnraw.avd");
- assign(out,"v:buttons.avd"); rewrite(out,1);
- load();
- for( x=0; x <= 5; x ++)
- for( y=0; y <= 3; y ++)
- {
- if (!
- (((x==1) && (y==0))
- || ((x==4) && (y==2))
- || ((y==3) && (x>2) && (x<5))))
- {
- input >> NL;
- grab(100+x*83,51+y*22,180+x*83,71+y*22);
- }
- }
- close(out);
- return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ assign(f, "d:butnraw.avd");
+ assign(out, "v:buttons.avd");
+ rewrite(out, 1);
+ load();
+ for (x = 0; x <= 5; x ++)
+ for (y = 0; y <= 3; y ++) {
+ if (!
+ (((x == 1) && (y == 0))
+ || ((x == 4) && (y == 2))
+ || ((y == 3) && (x > 2) && (x < 5)))) {
+ input >> NL;
+ grab(100 + x * 83, 51 + y * 22, 180 + x * 83, 71 + y * 22);
+ }
+ }
+ close(out);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/xfghost.cpp b/engines/avalanche/xfghost.cpp
index 1c7673c401..28e7efddd6 100644
--- a/engines/avalanche/xfghost.cpp
+++ b/engines/avalanche/xfghost.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -30,244 +30,281 @@
namespace Avalanche {
-const array<1,44,char> chunkheader =
-string("Spooky file! Nearly a Chunk... (c) MT.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261';
+const array<1, 44, char> chunkheader =
+ string("Spooky file! Nearly a Chunk... (c) MT.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';
const integer n = -1; /* "No change" in new-whatever */
const integer aa = -2; /* This is an aargh. */
-const integer aargh_x_ofs = -177; const integer aargh_y_ofs = 52;
+const integer aargh_x_ofs = -177;
+const integer aargh_y_ofs = 52;
-enum flavourtype {ch_ega,ch_bgi,ch_natural,ch_two,ch_one, last_flavourtype};
+enum flavourtype {ch_ega, ch_bgi, ch_natural, ch_two, ch_one, last_flavourtype};
struct chunkblocktype {
- flavourtype flavour;
- integer x,y;
- integer xl,yl;
- longint size;
+ flavourtype flavour;
+ integer x, y;
+ integer xl, yl;
+ longint size;
};
-integer gd,gm,x,y;
-untyped_file f; byte bit;
+integer gd, gm, x, y;
+untyped_file f;
+byte bit;
byte a; /*absolute $A000:0;*/
palettetype cc;
-char r; text t;
-word s; pointer p;
+char r;
+text t;
+word s;
+pointer p;
untyped_file chunkfile;
chunkblocktype cb;
-pointer a_p; word a_s;
+pointer a_p;
+word a_s;
-void open_chunk()
-{;
- assign(chunkfile,"v:spooky.avd");
- rewrite(chunkfile,1);
- blockwrite(chunkfile,chunkheader,sizeof(chunkheader));
+void open_chunk() {
+ ;
+ assign(chunkfile, "v:spooky.avd");
+ rewrite(chunkfile, 1);
+ blockwrite(chunkfile, chunkheader, sizeof(chunkheader));
}
-void close_chunk()
-{;
- close(chunkfile);
+void close_chunk() {
+ ;
+ close(chunkfile);
}
-void grab(integer x1,integer y1,integer x2,integer y2, flavourtype how, integer newx,integer newy)
-{
- pointer p;
- word s;
- integer y;
- byte bit;
+void grab(integer x1, integer y1, integer x2, integer y2, flavourtype how, integer newx, integer newy) {
+ pointer p;
+ word s;
+ integer y;
+ byte bit;
-;
+ ;
#ifndef DRYRUN
- {;
- cb.flavour=how;
- switch (newx) {
- case n: cb.x=x1; break;
- case aa: cb.x=x1+aargh_x_ofs; break;
- default: cb.x=newx;
- }
-
- switch (newy) {
- case n: cb.y=y1; break;
- case aa: cb.y=y1+aargh_y_ofs; break;
- default: cb.y=newy;
- }
-
- cb.xl=x2-x1;
- if (set_of_enum(flavourtype)::of(ch_ega,ch_one,ch_two, eos).has(how)) cb.xl=((cb.xl+7) / 8)*8;
- cb.yl=y2-y1;
- }
-
- if (how!=ch_natural)
- {;
- s=imagesize(x1,y1,x2,y2);
- getmem(p,s);
- getimage(x1,y1,x2,y2,p);
- }
-
- rectangle(x1,y1,x2,y2);
-
- switch (how) {
- case ch_bgi: cb.size=s; break;
- }
-
- blockwrite(chunkfile,cb,sizeof(cb));
-
- switch (how) {
- case ch_bgi: blockwrite(chunkfile,p,s); break;
- case ch_ega: {;
- setactivepage(1);
- cleardevice();
- putimage(0,0,p,0);
- setactivepage(0);
-
- for( bit=0; bit <= 3; bit ++)
- for( y=0; y <= cb.yl; y ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(chunkfile,mem[0xa400*y*80],cb.xl / 8);
- }
-
- y=getpixel(0,0);
- }
- break;
- case ch_two: {; /* Same as EGA, but with only 2 planes. */
- setactivepage(1);
- cleardevice();
- putimage(0,0,p,0);
- setactivepage(0);
-
- for( bit=2; bit <= 3; bit ++) /* << Bit to grab? */
- for( y=0; y <= cb.yl; y ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(chunkfile,mem[0xa400*y*80],cb.xl / 8);
- }
-
- y=getpixel(0,0);
- }
- break;
- case ch_one: {; /* ...but with only one plane! */
- setactivepage(1);
- cleardevice();
- putimage(0,0,p,0);
- setactivepage(0);
-
- for( bit=3; bit <= 3; bit ++)
- for( y=0; y <= cb.yl; y ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4;
- port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockwrite(chunkfile,mem[0xa400*y*80],cb.xl / 8);
- }
-
- y=getpixel(0,0);
- }
- break;
- }
-
- freemem(p,s); #endif
- rectangle(x1,y1,x2,y2);
+ {
+ ;
+ cb.flavour = how;
+ switch (newx) {
+ case n:
+ cb.x = x1;
+ break;
+ case aa:
+ cb.x = x1 + aargh_x_ofs;
+ break;
+ default:
+ cb.x = newx;
+ }
+
+ switch (newy) {
+ case n:
+ cb.y = y1;
+ break;
+ case aa:
+ cb.y = y1 + aargh_y_ofs;
+ break;
+ default:
+ cb.y = newy;
+ }
+
+ cb.xl = x2 - x1;
+ if (set_of_enum(flavourtype)::of(ch_ega, ch_one, ch_two, eos).has(how)) cb.xl = ((cb.xl + 7) / 8) * 8;
+ cb.yl = y2 - y1;
+ }
+
+ if (how != ch_natural) {
+ ;
+ s = imagesize(x1, y1, x2, y2);
+ getmem(p, s);
+ getimage(x1, y1, x2, y2, p);
+ }
+
+ rectangle(x1, y1, x2, y2);
+
+ switch (how) {
+ case ch_bgi:
+ cb.size = s;
+ break;
+ }
+
+ blockwrite(chunkfile, cb, sizeof(cb));
+
+ switch (how) {
+ case ch_bgi:
+ blockwrite(chunkfile, p, s);
+ break;
+ case ch_ega: {
+ ;
+ setactivepage(1);
+ cleardevice();
+ putimage(0, 0, p, 0);
+ setactivepage(0);
+
+ for (bit = 0; bit <= 3; bit ++)
+ for (y = 0; y <= cb.yl; y ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(chunkfile, mem[0xa400 * y * 80], cb.xl / 8);
+ }
+
+ y = getpixel(0, 0);
+ }
+ break;
+ case ch_two: {
+ ; /* Same as EGA, but with only 2 planes. */
+ setactivepage(1);
+ cleardevice();
+ putimage(0, 0, p, 0);
+ setactivepage(0);
+
+ for (bit = 2; bit <= 3; bit ++) /* << Bit to grab? */
+ for (y = 0; y <= cb.yl; y ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(chunkfile, mem[0xa400 * y * 80], cb.xl / 8);
+ }
+
+ y = getpixel(0, 0);
+ }
+ break;
+ case ch_one: {
+ ; /* ...but with only one plane! */
+ setactivepage(1);
+ cleardevice();
+ putimage(0, 0, p, 0);
+ setactivepage(0);
+
+ for (bit = 3; bit <= 3; bit ++)
+ for (y = 0; y <= cb.yl; y ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockwrite(chunkfile, mem[0xa400 * y * 80], cb.xl / 8);
+ }
+
+ y = getpixel(0, 0);
+ }
+ break;
+ }
+
+ freemem(p, s);
+#endif
+ rectangle(x1, y1, x2, y2);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
#ifndef DRYRUN
- open_chunk();
+ open_chunk();
#endif
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- assign(f,"c:\\sleep4\\colour.ptx"); reset(f,1);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- blockread(f,a,16000); /* 28000 */
- }
- close(f);
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ assign(f, "c:\\sleep4\\colour.ptx");
+ reset(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ blockread(f, a, 16000); /* 28000 */
+ }
+ close(f);
- setwritemode(xorput);
+ setwritemode(xorput);
- /* Grab the big ghost. */
+ /* Grab the big ghost. */
- grab( 0, 0,160, 65,ch_two,n,n); /* First column, */
- grab( 0, 67,172,127,ch_two,n,n);
- grab( 0,132,158,190,ch_two,n,n);
+ grab(0, 0, 160, 65, ch_two, n, n); /* First column, */
+ grab(0, 67, 172, 127, ch_two, n, n);
+ grab(0, 132, 158, 190, ch_two, n, n);
- a_s=imagesize(349,36,361,43); getmem(a_p,a_s);
- getimage(349,36,361,43,a_p);
- setfillstyle(1,0); bar(349,36,361,43);
+ a_s = imagesize(349, 36, 361, 43);
+ getmem(a_p, a_s);
+ getimage(349, 36, 361, 43, a_p);
+ setfillstyle(1, 0);
+ bar(349, 36, 361, 43);
- grab(173, 66,347,124,ch_two,n,n); /* Second column. */
- grab(173, 6,352, 64,ch_two,n,n);
+ grab(173, 66, 347, 124, ch_two, n, n); /* Second column. */
+ grab(173, 6, 352, 64, ch_two, n, n);
- putimage(349,36,a_p,0);
+ putimage(349, 36, a_p, 0);
- /* Grab Avvy's eyes and the exclamation mark. */
+ /* Grab Avvy's eyes and the exclamation mark. */
- grab(605, 10,620, 12,ch_bgi,n,n); /* Eyes looking left */
- grab(622, 10,638, 12,ch_bgi,n,n); /* Ditto looking right (eye eye, sir) */
- grab(611, 0,616, 5,ch_bgi,n,n); /* ! */
+ grab(605, 10, 620, 12, ch_bgi, n, n); /* Eyes looking left */
+ grab(622, 10, 638, 12, ch_bgi, n, n); /* Ditto looking right (eye eye, sir) */
+ grab(611, 0, 616, 5, ch_bgi, n, n); /* ! */
- /* Grab the cobweb. */
+ /* Grab the cobweb. */
- grab(535, 25,639, 75,ch_one,n,0);
- /* ^^^ Interesting point here: the ch_EGA save routine pads with black
- space to the RIGHT of the object. Since this cobweb needs to be right-
- justified, we must decrease x1 until xl is a multiple of 8. */
+ grab(535, 25, 639, 75, ch_one, n, 0);
+ /* ^^^ Interesting point here: the ch_EGA save routine pads with black
+ space to the RIGHT of the object. Since this cobweb needs to be right-
+ justified, we must decrease x1 until xl is a multiple of 8. */
- /* Grab Mark's signature. */
+ /* Grab Mark's signature. */
- grab(462, 61,525, 65,ch_ega,576,195);
+ grab(462, 61, 525, 65, ch_ega, 576, 195);
- /* Grab the open door. */
+ /* Grab the open door. */
- grab(180,132,294,180,ch_ega,520,127);
+ grab(180, 132, 294, 180, ch_ega, 520, 127);
- /* Grab the bat. */
+ /* Grab the bat. */
- grab(354, 0,474, 28,ch_bgi,n,n);
- grab(484, 0,526, 23,ch_bgi,n,n);
- grab(542, 2,564, 22,ch_bgi,n,n);
+ grab(354, 0, 474, 28, ch_bgi, n, n);
+ grab(484, 0, 526, 23, ch_bgi, n, n);
+ grab(542, 2, 564, 22, ch_bgi, n, n);
- /* Grab the big fade-in face. */
+ /* Grab the big fade-in face. */
- grab(350, 71,420,105,ch_ega,n,n); /* Top line. */
- grab(421, 71,491,105,ch_ega,n,n);
+ grab(350, 71, 420, 105, ch_ega, n, n); /* Top line. */
+ grab(421, 71, 491, 105, ch_ega, n, n);
- grab(350,107,419,141,ch_ega,n,n); /* Second line. */
- grab(421,107,490,141,ch_ega,n,n);
+ grab(350, 107, 419, 141, ch_ega, n, n); /* Second line. */
+ grab(421, 107, 490, 141, ch_ega, n, n);
- grab(350,143,420,177,ch_ega,n,n); /* Third line. */
- grab(422,143,489,177,ch_ega,n,n);
+ grab(350, 143, 420, 177, ch_ega, n, n); /* Third line. */
+ grab(422, 143, 489, 177, ch_ega, n, n);
- /* Grab the "AARGH!" */
+ /* Grab the "AARGH!" */
- grab(349, 36,361, 43,ch_bgi,aa,aa); /* A */
- grab(366, 31,385, 46,ch_bgi,aa,aa); /* Aa */
- grab(394, 34,415, 52,ch_bgi,aa,aa); /* Aar */
- grab(428, 33,457, 57,ch_bgi,aa,aa); /* Aarg */
- grab(471, 30,508, 59,ch_bgi,aa,aa); /* Aargh */
- grab(524, 30,524, 58,ch_bgi,aa,aa); /* Aargh! */
+ grab(349, 36, 361, 43, ch_bgi, aa, aa); /* A */
+ grab(366, 31, 385, 46, ch_bgi, aa, aa); /* Aa */
+ grab(394, 34, 415, 52, ch_bgi, aa, aa); /* Aar */
+ grab(428, 33, 457, 57, ch_bgi, aa, aa); /* Aarg */
+ grab(471, 30, 508, 59, ch_bgi, aa, aa); /* Aargh */
+ grab(524, 30, 524, 58, ch_bgi, aa, aa); /* Aargh! */
- for( gd=0; gd <= 4; gd ++)
- grab(509, 76+gd*22,551, 96+gd*22,ch_bgi,n,n); /* The big green eyes. */
+ for (gd = 0; gd <= 4; gd ++)
+ grab(509, 76 + gd * 22, 551, 96 + gd * 22, ch_bgi, n, n); /* The big green eyes. */
- for( gd=5; gd >= 0; gd --)
- grab(181+gd*34,186,214+gd*34,199,ch_bgi,n,n); /* The red greldet. */
+ for (gd = 5; gd >= 0; gd --)
+ grab(181 + gd * 34, 186, 214 + gd * 34, 199, ch_bgi, n, n); /* The red greldet. */
- for( gd=0; gd <= 5; gd ++)
- grab(390+gd*34,186,423+gd*34,199,ch_bgi,n,n); /* The blue greldet. */
+ for (gd = 0; gd <= 5; gd ++)
+ grab(390 + gd * 34, 186, 423 + gd * 34, 199, ch_bgi, n, n); /* The blue greldet. */
#ifndef DRYRUN
- close_chunk();
+ close_chunk();
#endif
-return EXIT_SUCCESS;
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file
diff --git a/engines/avalanche/zapdraw.cpp b/engines/avalanche/zapdraw.cpp
index fe1619a4c3..cae7b04cf6 100644
--- a/engines/avalanche/zapdraw.cpp
+++ b/engines/avalanche/zapdraw.cpp
@@ -11,7 +11,7 @@
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
@@ -34,32 +34,37 @@ namespace Avalanche {
untyped_file f;
byte bit;
byte a; /*absolute $A000:0; */
-integer gd,gm;
+integer gd, gm;
-void graphmode(integer mode)
-{
- registers regs;
-;
- regs.ax=(mode % 0x100);
- intr(0x10,regs);
+void graphmode(integer mode) {
+ registers regs;
+ ;
+ regs.ax = (mode % 0x100);
+ intr(0x10, regs);
}
-int main(int argc, const char* argv[])
-{pio_initialize(argc, argv);
-;
- gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi");
- assign(f,"d:avltzap.raw"); reset(f,1);
- for( bit=0; bit <= 3; bit ++)
- {;
- port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit;
- for( gd=0; gd <= 199; gd ++)
- blockread(f,mem[0xa000*gd*80],40); /* 28000 */
- }
- close(f);
- setwritemode(xorput);
- rectangle( 0, 0, 5, 8);
- rectangle( 0, 10, 27, 19);
-return EXIT_SUCCESS;
+int main(int argc, const char *argv[]) {
+ pio_initialize(argc, argv);
+ ;
+ gd = 3;
+ gm = 0;
+ initgraph(gd, gm, "c:\\bp\\bgi");
+ assign(f, "d:avltzap.raw");
+ reset(f, 1);
+ for (bit = 0; bit <= 3; bit ++) {
+ ;
+ port[0x3c4] = 2;
+ port[0x3ce] = 4;
+ port[0x3c5] = 1 << bit;
+ port[0x3cf] = bit;
+ for (gd = 0; gd <= 199; gd ++)
+ blockread(f, mem[0xa000 * gd * 80], 40); /* 28000 */
+ }
+ close(f);
+ setwritemode(xorput);
+ rectangle(0, 0, 5, 8);
+ rectangle(0, 10, 27, 19);
+ return EXIT_SUCCESS;
}
} // End of namespace Avalanche. \ No newline at end of file