aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche
diff options
context:
space:
mode:
authoruruk2013-06-26 15:42:05 +0200
committeruruk2013-06-26 15:42:05 +0200
commitb8073372827401f1e3e271666490696a4bd9f9f4 (patch)
tree2675bd30292d237ca79578b874e63dc098321325 /engines/avalanche
parent3e48a4e18725f2b3b6b1f1a3476b848a93af2f42 (diff)
downloadscummvm-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.cpp109
-rw-r--r--engines/avalanche/sequence2.h65
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