diff -ruN imaze-1.4/MPV-README mpv-imaze-1.4/MPV-README --- imaze-1.4/MPV-README Wed Dec 31 19:00:00 1969 +++ mpv-imaze-1.4/MPV-README Sun Jan 6 13:42:18 2002 @@ -0,0 +1,44 @@ + + +PATCH: + +patch was built with: +diff -ruN imaze-1.4 mpv-imaze-1.4 > mpv-imaze-1.4-strafe-patch.diff + +patch is applied with: +make sure directory imaze-1.4 and patch file are in the same directory +and do: +patch -p 0 < mpv-imaze-1.4-strafe-patch.diff + + + +BUILDING ON LINUX: + +cd source +./configure athena +make + + + + +RUNNING: + +./imazesrv -Q ../labs/12x12.lab +./imaze -H localhost + +1 - strafe left +2 - turn around (make sure start server with -Q option) +3 - strafe right +And Arrow keys as normal + + + + +FILES MODIFIED: + +signale.h - defines valid signals (Define strafing constants) +X_tasten.c - define keyboard events (set signals based on key event) + (also specify that strafing should not be interuppted HAT_REPEAT) +bewegung.c - (motion.c) Calculate position based on signals + + diff -ruN imaze-1.4/source/X_tasten.c mpv-imaze-1.4/source/X_tasten.c --- imaze-1.4/source/X_tasten.c Sun Dec 9 19:47:34 2001 +++ mpv-imaze-1.4/source/X_tasten.c Sun Jan 6 13:35:21 2002 @@ -68,7 +68,8 @@ /* die Cursor-Tasten haben eine Repeat-Funktion, alle anderen nicht */ #define HAT_REPEAT(signalnr) \ ((signalnr) == VORSIGNAL || (signalnr) == ZURUECKSIGNAL || \ - (signalnr) == LINKSSIGNAL || (signalnr) == RECHTSSIGNAL) + (signalnr) == LINKSSIGNAL || (signalnr) == RECHTSSIGNAL || \ + (signalnr) == LSTRAFESIGNAL || (signalnr) == RSTRAFESIGNAL) struct arg_option X_eingabe_opts[] = @@ -142,7 +143,7 @@ return; case KeyPress: case KeyRelease: - break; + break; default: return; } @@ -195,8 +196,14 @@ signalnr = AKTIONSSIGNALE + 9; break; case XK_1: + signalnr = LSTRAFESIGNAL; + break; case XK_2: + signalnr = QUICKTURNSIGNAL; + break; case XK_3: + signalnr = RSTRAFESIGNAL; + break; case XK_4: case XK_5: case XK_6: diff -ruN imaze-1.4/source/bewegung.c mpv-imaze-1.4/source/bewegung.c --- imaze-1.4/source/bewegung.c Sun Dec 9 19:47:36 2001 +++ mpv-imaze-1.4/source/bewegung.c Sun Jan 6 13:55:15 2002 @@ -1445,7 +1445,7 @@ ** *spieler wird veraendert */ static void bewege_spieler(int spieler_nr, struct spieler *spieler, int vor, - int zurueck, int links, int rechts) + int zurueck, int links, int rechts, int left_strafe, int right_strafe) { int rest_schritt; /* Strecke, die der Spieler noch zuruecklegen darf */ @@ -1466,18 +1466,84 @@ /* erst drehen */ spieler->blick = (spieler->blick + links - rechts + WINKANZ) % WINKANZ; + - /* weder vor noch zurueck? */ - if (vor == zurueck) + + + /* No Movement */ + if ((vor == zurueck) && (left_strafe == right_strafe)) /* dann fertig */ return; - /* Richtung feststellen, in die der Spieler laufen will */ - if (vor > zurueck) - winkel = spieler->blick * (TRIGANZ / WINKANZ); - else - winkel = (spieler->blick * (TRIGANZ / WINKANZ) + - TRIGANZ / 2) % TRIGANZ; + + + /* North/South movement only */ + if ((vor != zurueck) && (left_strafe == right_strafe)){ + + /* Richtung feststellen, in die der Spieler laufen will */ + if (vor > zurueck) + winkel = spieler->blick * (TRIGANZ / WINKANZ); + else + winkel = (spieler->blick * (TRIGANZ / WINKANZ) + + TRIGANZ / 2) % TRIGANZ; + } + + + + /* East/West movement only */ + else if ((vor == zurueck) && (left_strafe != right_strafe)){ + if (left_strafe > right_strafe){ + winkel = spieler->blick * (TRIGANZ / WINKANZ); + winkel = (winkel + TRIGANZ/4) % TRIGANZ; + } + else{ + winkel = (spieler->blick * (TRIGANZ / WINKANZ) + + TRIGANZ / 2) % TRIGANZ; + winkel = (winkel + TRIGANZ/4) % TRIGANZ; + } + } + + + + + /* Both North/South movement AND East/West movement */ + else{ + + /* Going forward and strafing */ + if (vor > zurueck){ + winkel = spieler->blick * (TRIGANZ / WINKANZ); + + /* Going forward and strafing left */ + if (left_strafe > right_strafe) + winkel += TRIGANZ/8; + + /* Going forward and strafing right */ + else + winkel += (TRIGANZ/8 * 7); + + winkel = winkel % TRIGANZ; + } + + + /* Going backward and strafing */ + else{ + winkel = (spieler->blick * (TRIGANZ / WINKANZ) + TRIGANZ / 2); + + /* Going backward and strafing left */ + if (left_strafe > right_strafe) + winkel += TRIGANZ/8 * 7; + + /* Going backward and strafing right */ + else + winkel += TRIGANZ/8; + + winkel = winkel % TRIGANZ; + } + } + + + + /* rest_schritt initialisieren */ rest_schritt = SCHRITT; @@ -2374,7 +2440,8 @@ /* Spieler bewegen */ bewege_spieler(spieler_nr, &alle_spieler[spieler_nr], signale[VORSIGNAL], signale[ZURUECKSIGNAL], - signale[LINKSSIGNAL], signale[RECHTSSIGNAL]); + signale[LINKSSIGNAL], signale[RECHTSSIGNAL], + signale[LSTRAFESIGNAL], signale[RSTRAFESIGNAL]); /* Schuss ausloesen? Kameras duerfen nicht */ if (!ist_kamera[spieler_nr] && signale[SCHUSSSIGNAL]) diff -ruN imaze-1.4/source/signale.h mpv-imaze-1.4/source/signale.h --- imaze-1.4/source/signale.h Sun Dec 9 19:47:44 2001 +++ mpv-imaze-1.4/source/signale.h Sun Jan 6 13:35:13 2002 @@ -42,7 +42,7 @@ static char sccsid_signale[] = "@(#)signale.h 3.2 12/3/01"; -#define AKTIONSSIGNALANZ 10 /* Anzahl der frei verfuegbaren Signale +#define AKTIONSSIGNALANZ 12 /* Anzahl der frei verfuegbaren Signale (diese Signale sind fuer die Kompabilitaet mit zukuenfigen Versionen vorgesehen) */ @@ -54,6 +54,11 @@ #define STOPSIGNAL 5 /* Spiel temporaer verlassen */ #define WEITERSIGNAL 6 /* ins Spiel zurueckkehren */ #define QUICKTURNSIGNAL 7 /* Spieler dreht sich um 180 Grad */ +#define LSTRAFESIGNAL 8 /* Signal to strafe left */ +#define RSTRAFESIGNAL 9 /* Signal to strafe right */ -#define AKTIONSSIGNALE 8 /* Offset */ +#define AKTIONSSIGNALE 10 /* Offset */ #define SIGNALANZ (AKTIONSSIGNALE + AKTIONSSIGNALANZ) + + +