diff options
Diffstat (limited to 'engines/avalanche/trip6.h')
-rw-r--r-- | engines/avalanche/trip6.h | 227 |
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 |