aboutsummaryrefslogtreecommitdiff
path: root/sword2/sync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sword2/sync.cpp')
-rw-r--r--sword2/sync.cpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/sword2/sync.cpp b/sword2/sync.cpp
new file mode 100644
index 0000000000..7f8454db52
--- /dev/null
+++ b/sword2/sync.cpp
@@ -0,0 +1,179 @@
+/* Copyright (C) 1994-2003 Revolution Software Ltd
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ */
+
+//------------------------------------------------------------------------------------
+#include <stdio.h>
+
+//#include "src\driver96.h"
+#include "console.h"
+#include "debug.h"
+#include "defs.h"
+#include "interpreter.h"
+#include "memory.h"
+#include "object.h"
+#include "sync.h"
+//------------------------------------------------------------------------------------
+typedef struct
+{
+ uint32 id;
+ uint32 sync;
+} _sync_unit; //haaaaaaaa
+
+#define MAX_syncs 10 //there wont be many will there. probably 2 at most i reckon
+
+
+_sync_unit sync_list[MAX_syncs];
+
+//------------------------------------------------------------------------------------
+void Init_sync_system(void) //Tony27Nov96
+{
+//set list to 0's
+
+ uint32 j;
+
+
+
+ for (j=0;j<MAX_syncs;j++)
+ sync_list[j].id=0;
+
+
+}
+//------------------------------------------------------------------------------------
+int32 FN_send_sync(int32 *params) //Tony27Nov96
+{
+//param 0 sync's recipient
+//param 1 sync value
+
+
+ uint32 current_sync=0;
+
+
+ if (sync_list[current_sync].id)
+ {
+ do
+ current_sync++;
+ while(sync_list[current_sync].id); //zip along until we find a free slot
+
+ }
+
+// Zdebug(" %d sending sync %d to %d", ID, params[1], params[0]);
+
+
+ sync_list[current_sync].id=params[0];
+ sync_list[current_sync].sync=params[1];
+
+
+
+ return(IR_CONT);
+}
+//------------------------------------------------------------------------------------
+void Clear_syncs(uint32 id) //Tony27Nov96
+{
+//clear any syncs registered for this id
+//call this just after the id has been processed
+
+ uint32 j;
+
+
+//there could in theory be more than one sync waiting for us so clear the lot
+
+ for (j=0;j<MAX_syncs;j++)
+ if (sync_list[j].id==id)
+ { //Zdebug("removing sync %d for %d", j, id);
+ sync_list[j].id=0;
+ }
+
+
+}
+//------------------------------------------------------------------------------------
+uint32 Get_sync(void) //Tony27Nov96
+{
+ // check for a sync waiting for this character
+ // - called from system code eg. from inside FN_anim(), to see if animation to be quit
+
+ uint32 j;
+
+
+ for (j=0;j<MAX_syncs;j++)
+ if (sync_list[j].id == ID)
+ return(1); //means sync found Tony12July97
+
+// return(sync_list[j].sync); //return sync value waiting
+
+
+
+ return(0); //no sync found
+
+}
+//------------------------------------------------------------------------------------
+int32 FN_get_sync(int32 *params) //Tony27Nov96
+{
+// check for a sync waiting for this character
+// - called from script
+
+//params none
+
+
+ uint32 j;
+
+
+ for (j=0;j<MAX_syncs;j++)
+ if (sync_list[j].id == ID)
+ { RESULT=sync_list[j].sync;
+ return(IR_CONT); //return sync value waiting
+ }
+
+ RESULT=0;
+
+ if (params);
+
+ return(IR_CONT); //no sync found
+
+}
+//------------------------------------------------------------------------------------
+int32 FN_wait_sync(int32 *params) //Tony27Nov96
+{
+//keep calling until a sync recieved
+
+//params none
+
+
+ uint32 j;
+
+ j=ID;
+
+
+// Zdebug("%d waits", ID);
+
+
+ for (j=0;j<MAX_syncs;j++)
+ if (sync_list[j].id == ID)
+ { RESULT=sync_list[j].sync;
+ //Zdebug(" go");
+ return(IR_CONT); //return sync value waiting
+ }
+
+ if (params);
+
+ return(IR_REPEAT); //back again next cycle
+
+}
+//------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------------
+