aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/trip6.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/trip6.h')
-rw-r--r--engines/avalanche/trip6.h227
1 files changed, 227 insertions, 0 deletions
diff --git a/engines/avalanche/trip6.h b/engines/avalanche/trip6.h
new file mode 100644
index 0000000000..0227bab7b6
--- /dev/null
+++ b/engines/avalanche/trip6.h
@@ -0,0 +1,227 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * 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
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/*
+ * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
+ * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
+ */
+
+/* TRIP5 Trippancy V */
+
+
+#ifndef TRIP6_H
+#define TRIP6_H
+
+
+
+#include "common/scummsys.h"
+#include "common/str.h"
+
+#include "avalanche/gyro2.h"
+
+namespace Avalanche {
+
+ namespace Trip {
+
+ // Call it where Trip is first used.
+ // Procuded to replace the initizalization part of the original Pascal unit.
+ void initialize_trip();
+
+ const int16 maxgetset = 35;
+
+ typedef byte manitype[2049]; // manitype = array[5..2053] of byte;
+ // Be aware!!!
+
+ typedef byte siltype[51][11]; /* 35, 4 */
+
+ struct adxtype { /* Second revision of ADX type */
+ Common::String name; /* name of character */
+ Common::String comment; /* comment */
+ byte num; /* number of pictures */
+ byte xl, yl; /* x & y lengths of pictures */
+ byte seq; /* how many in one stride */
+ uint16 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;
+ int16 x;
+ int16 y;
+ int8 ix;
+ int8 iy;
+ bool visible;
+ bool homing;
+ bool check_me;
+ byte count;
+ byte xw, xs, ys;
+ byte totalnum;
+ int16 hx;
+ int16 hy;
+ bool call_eachstep;
+ byte eachstep;
+ bool vanishifstill;
+ };
+
+ class triptype {
+ public:
+ adxtype a; /* vital statistics */
+ byte face, step;
+ int16 x, y; /* current xy coords */
+ int16 ox[2], oy[2]; /* last xy coords */
+ int8 ix, iy; /* amount to move sprite by, each step */
+ manitype *mani[24];
+ siltype *sil[24];
+ byte whichsprite;
+ bool quick, visible, homing, check_me;
+ int16 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 */
+ bool vanishifstill; /* Do we show this sprite if it's still? */
+
+ bool call_eachstep; /* Do we call the eachstep procedure? */
+ byte eachstep;
+
+ triptype *init(byte spritenum, bool 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(int16 wx, int16 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(int8 xx, int8 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(uint16 &where);
+ void load_data_from_mem(uint16 &where);
+ triptype *done();
+
+ private:
+ bool collision_check();
+ };
+
+ class getsettype {
+ public:
+ Gyro::bytefield gs[maxgetset];
+ byte numleft;
+
+ getsettype *init();
+ void remember(Gyro::bytefield r);
+ void recall(Gyro::bytefield &r);
+ };
+
+
+ const int16 up = 0;
+ const int16 right = 1;
+ const int16 down = 2;
+ const int16 left = 3;
+ const int16 ur = 4;
+ const int16 dr = 5;
+ const int16 dl = 6;
+ const int16 ul = 7;
+ const int16 stopped = 8;
+
+ const int16 numtr = 5; /* current max no. of sprites */
+
+
+
+ const int16 procfollow_avvy_y = 1;
+
+ const int16 procback_and_forth = 2;
+
+ const int16 procface_avvy = 3;
+
+ const int16 procarrow_procs = 4;
+
+ const int16 procspludwick_procs = 5;
+
+ const int16 procgrab_avvy = 6;
+
+ const int16 procgeida_procs = 7;
+
+
+ void trippancy_link();
+
+ void get_back_loretta();
+
+ void loadtrip();
+
+ void call_special(uint16 which);
+
+ void open_the_door(byte whither, byte ped, byte magicnum); /* Handles slidey-open doors. */
+
+ void catamove(byte ped);
+
+ void stopwalking();
+
+ void tripkey(char dir);
+
+ void rwsp(byte t, byte r);
+
+ void apped(byte trn, byte np);
+
+ void getback();
+
+ void fliproom(byte room, byte ped);
+
+ bool infield(byte which); /* returns True if you're within field "which" */
+
+ bool neardoor(); /* returns True if you're near a door! */
+
+ void readstick();
+
+ void newspeed();
+
+ void new_game_for_trippancy();
+
+
+
+ triptype tr[numtr];
+ getsettype getset[2];
+ byte aa[1600];
+
+ bool mustexclaim;
+ uint16 saywhat;
+
+ } // End of namespace Trip.
+
+} // End of namespace Avalanche.
+
+#endif // TRIP6_H