diff options
author | uruk | 2013-06-26 15:42:05 +0200 |
---|---|---|
committer | uruk | 2013-06-26 15:42:05 +0200 |
commit | b8073372827401f1e3e271666490696a4bd9f9f4 (patch) | |
tree | 2675bd30292d237ca79578b874e63dc098321325 /engines/avalanche | |
parent | 3e48a4e18725f2b3b6b1f1a3476b848a93af2f42 (diff) | |
download | scummvm-rg350-b8073372827401f1e3e271666490696a4bd9f9f4.tar.gz scummvm-rg350-b8073372827401f1e3e271666490696a4bd9f9f4.tar.bz2 scummvm-rg350-b8073372827401f1e3e271666490696a4bd9f9f4.zip |
AVALANCHE: Add Sequence.
Diffstat (limited to 'engines/avalanche')
-rw-r--r-- | engines/avalanche/sequence2.cpp | 109 | ||||
-rw-r--r-- | engines/avalanche/sequence2.h | 65 |
2 files changed, 174 insertions, 0 deletions
diff --git a/engines/avalanche/sequence2.cpp b/engines/avalanche/sequence2.cpp new file mode 100644 index 0000000000..851dcb139a --- /dev/null +++ b/engines/avalanche/sequence2.cpp @@ -0,0 +1,109 @@ +/* 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. + */ + +/* SEQUENCE The sequencer. */ + +#include "avalanche/sequence2.h" +#include "common/scummsys.h" +#include "avalanche/gyro2.h" +#include "avalanche/timeout2.h" +#include "avalanche/celer2.h" +#include "avalanche/trip6.h" + +namespace Avalanche { + + namespace Sequence { + + 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. */ + for (int i = 0; i < sizeof(seq); i++) + seq[i] = 0; + + /* Then it's just the same as then_show. */ + then_show(what); + + } + + void then_flip(byte where, byte ped) { + then_show(now_flip); + + Gyro::dna.flip_to_where = where; + Gyro::dna.flip_to_ped = ped; + } + + void start_to_close() { + Timeout::lose_timer(Timeout::reason_sequencer); + Timeout::set_up_timer(7, Timeout::PROCsequence, Timeout::reason_sequencer); + } + + void start_to_open() { + Gyro::dna.user_moves_avvy = false; /* They can't move. */ + Trip::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() { + memcpy(seq, seq+1, seq_length - 1); /* Shift everything to the left. */ + } + + void call_sequencer() { + switch (seq[0]) { + case 0: + return; + break; /* No more routines. */ + case 177: { + Gyro::dna.user_moves_avvy = true; + Trip::fliproom(Gyro::dna.flip_to_where, Gyro::dna.flip_to_ped); /* 177 = Flip room. */ + if (seq[0] == 177) shove_left(); + } + break; + } + + if ((seq[0] >= 1) && (seq[0] <= 176)) { + /* Show a frame. */ + Celer::show_one(seq[1]); + shove_left(); + } + + start_to_close(); /* Make sure this PROC gets called again. */ + } + + } // End of namespace Sequence . + +} // End of namespace Avalanche. diff --git a/engines/avalanche/sequence2.h b/engines/avalanche/sequence2.h new file mode 100644 index 0000000000..0e53ccf2a1 --- /dev/null +++ b/engines/avalanche/sequence2.h @@ -0,0 +1,65 @@ +/* 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. + */ + +/* SEQUENCE The sequencer. */ + +#ifndef SEQUENCE2_H +#define SEQUENCE2_H + +#include "common/scummsys.h" + +namespace Avalanche { + + namespace Sequence { + + const int16 now_flip = 177; + + const int16 seq_length = 10; + + + + byte seq[seq_length]; + + + + void first_show(byte what); + + void then_show(byte what); + + void then_flip(byte where, byte ped); + + void start_to_close(); + + void start_to_open(); + + void call_sequencer(); + + } // End of namespace Sequence . + +} // End of namespace Avalanche. + +#endif // SEQUENCE2_H |