From 61ca162f9268de1fa4fe0df3f561189b1a71770d Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Wed, 10 Feb 2010 00:30:20 +0100 Subject: [PATCH] rnd-20100210-1-src --- src/conftime.h | 2 +- src/game_sp/BugsTerminals.c | 6 +- src/game_sp/Globals.h | 26 ++++++++ src/game_sp/Murphy.c | 123 ++++++++++++++++++++++++++++++++++-- src/game_sp/Murphy.h | 1 + 5 files changed, 152 insertions(+), 6 deletions(-) diff --git a/src/conftime.h b/src/conftime.h index 22c49103..e4ae1e55 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2010-02-07 16:03" +#define COMPILE_DATE_STRING "2010-02-10 00:26" diff --git a/src/game_sp/BugsTerminals.c b/src/game_sp/BugsTerminals.c index 191ce52e..70aa7b64 100644 --- a/src/game_sp/BugsTerminals.c +++ b/src/game_sp/BugsTerminals.c @@ -113,12 +113,13 @@ int subAnimateTerminals(int si) if (game.use_native_sp_graphics_engine) GfxFrame[lx][ly]--; + /* get last random animation delay */ bl = HighByte(PlayField16[si]); if ((bl & 0x80) == 0x80) bl = (bl | 0xFF00); bl = bl + 1; - if (bl <= 0) + if (bl <= 0) /* return if random animation delay not yet reached */ { MovHighByte(&PlayField16[si], bl); @@ -130,8 +131,11 @@ int subAnimateTerminals(int si) #endif } + /* calculate new random animation delay */ bl = -(subGetRandomNumber() & TerminalMaxCycles); // generate new random number MovHighByte(&PlayField16[si], bl); // save new sequence# + + /* check terminal state (active or inactive) */ bl = TerminalState[si] + 1; if (bl == 8) { diff --git a/src/game_sp/Globals.h b/src/game_sp/Globals.h index 7a618ed9..dcf6c799 100644 --- a/src/game_sp/Globals.h +++ b/src/game_sp/Globals.h @@ -31,6 +31,29 @@ #endif #define aniExplosionInfo (111) + +#if 1 + +#define aniMurphy (IMG_SP_MURPHY) + +#define aniMurphySleepLeft (IMG_SP_MURPHY_SLEEPING_LEFT) +#define aniMurphySleepRight (IMG_SP_MURPHY_SLEEPING_RIGHT) +#define aniMurphyTouchDown (IMG_SP_MURPHY_SNAPPING_DOWN) +#define aniMurphyTouchLeft (IMG_SP_MURPHY_SNAPPING_LEFT) +#define aniMurphyTouchRight (IMG_SP_MURPHY_SNAPPING_RIGHT) +#define aniMurphyTouchUp (IMG_SP_MURPHY_SNAPPING_UP) +#define aniMurphyYawn (IMG_SP_MURPHY_BORING_1) +#define aniPushLeft (IMG_SP_MURPHY_PUSHING_LEFT) +#define aniPushRight (IMG_SP_MURPHY_PUSHING_RIGHT) +#define aniPushUpDown (IMG_SP_MURPHY_PUSHING_RIGHT) + +#define aniSnikSnakDown (167) +#define aniSnikSnakLeft (239) +#define aniSnikSnakRight (247) +#define aniSnikSnakUp (159) + +#else + #define aniMurphySleepLeft (71) #define aniMurphySleepRight (68) #define aniMurphyTouchDown (47) @@ -41,11 +64,14 @@ #define aniPushLeft (45) #define aniPushRight (44) #define aniPushUpDown (79) + #define aniSnikSnakDown (167) #define aniSnikSnakLeft (239) #define aniSnikSnakRight (247) #define aniSnikSnakUp (159) +#endif + #define fiBase (2) #define fiBug (25) #define fiElectron (24) diff --git a/src/game_sp/Murphy.c b/src/game_sp/Murphy.c index c50ecb87..b00aef58 100644 --- a/src/game_sp/Murphy.c +++ b/src/game_sp/Murphy.c @@ -34,7 +34,12 @@ int subAnimateMurphy(int *si) // int ax, al, ah, bx, bl, i, X, Y; // int tX, tY, tDeltaX, tDeltaY, tPos, Tmp; +#if 1 + int ax, al, bl, i, X, Y; + int time1, time2; +#else int ax, al, bx, bl, i, X, Y; +#endif int tDeltaX, tDeltaY, tPos, Tmp; // Variables that hold information about the animation sequence @@ -54,6 +59,11 @@ int subAnimateMurphy(int *si) *si, *si % 60, *si / 60, ax, al, (al == fiMurphy)); #endif +#if 0 + printf("::: Murphy.c: subAnimateMurphy(): %d [%d] [%d]\n", + YawnSleepCounter, FrameCounter, TimerVar); +#endif + if (al != fiMurphy) { MurphyMoveCounter = 0; // We have no Murphy! Exit! @@ -99,6 +109,96 @@ int subAnimateMurphy(int *si) goto loc_g_6364; } +#if 1 + +#if 0 + ax = (TimerVar & 3); + if (ax != 0) + return subAnimateMurphy; +#endif + + // ------------------------------------------------------------------ + // Murphy's YAWN & SLEEP sequence, counted down by YawnSleepCounter: + + YawnSleepCounter = YawnSleepCounter + 1; + + if (YawnSleepCounter < 16) + return subAnimateMurphy; + + if (YawnSleepCounter < 2000) + { + // normal grin + // (default: single graphic, no animation) + subCopyImageToScreen(*si, aniMurphy, YawnSleepCounter - 16); + + return subAnimateMurphy; + } + + if (YawnSleepCounter < 4000) + { + // yawn! and look depressed afterwards... + // (default: 12 animation frames with delay of 8) + subCopyImageToScreen(*si, aniMurphyYawn, YawnSleepCounter - 2000); + + return subAnimateMurphy; + } + + if (YawnSleepCounter < 6400) + { + // yawn again! + // (default: 12 animation frames with delay of 8) + subCopyImageToScreen(*si, aniMurphyYawn, YawnSleepCounter - 4000); + + return subAnimateMurphy; + } + + // time1 = 6400 + 12 * 8; // (default: 6496 == 6400 + 12 * 8) + time1 = 6400 + 12 * 10; + + if (YawnSleepCounter < time1) + { + // yawn again! - third time + // (default: 12 animation frames with delay of 8) + subCopyImageToScreen(*si, aniMurphyYawn, YawnSleepCounter - 6400); + + return subAnimateMurphy; + } + + // time2 = 6496 + 3 * 64; // (default: 6688 == 6496 + 3 * 64) + time2 = 6496 + 3 * 100; + + if (YawnSleepCounter > time2) // Murphy already went to sleep + return subAnimateMurphy; + + if (PlayField16[*si - 1] == 0) + { + if (PlayField16[*si + 1] == 0) + { + // no sleep -- go back to "wait and start yawning" phase + YawnSleepCounter = 144; + + return subAnimateMurphy; + } + else + { + // go to sleep (right side) + // (default: 3 animation frames with delay of 64) + subCopyImageToScreen(*si, aniMurphySleepRight, YawnSleepCounter - time1); + + return subAnimateMurphy; + } + } + + // go to sleep (left side) + // (default: 3 animation frames with delay of 64) + subCopyImageToScreen(*si, aniMurphySleepLeft, YawnSleepCounter - time1); + + return subAnimateMurphy; + + // end of YAWN-SLEEP-Sequence + +#else + ax = (TimerVar & 3); if (ax != 0) return subAnimateMurphy; @@ -163,9 +263,13 @@ int subAnimateMurphy(int *si) bx = (YawnSleepCounter - 1622) / 16; subCopyFieldToScreen(*si, aniMurphySleepLeft + bx); // go to sleep + return subAnimateMurphy; // end of YAWN-SLEEP-Sequence + +#endif + // ------------------------------------------------------------------ // ========================================================================== // (Direct Jump) a key was pressed @@ -1010,7 +1114,7 @@ loc_g_6817: subCopyFieldToScreen(*si, aniMurphyTouchUp); if (YellowDisksExploded != 0) { - YawnSleepCounter = 10; // stay hypnotized + YawnSleepCounter = 40; // stay hypnotized return subAnimateMurphy; } // loc_g_6838: @@ -1026,7 +1130,7 @@ loc_g_684E: subCopyFieldToScreen(*si, aniMurphyTouchLeft); if (YellowDisksExploded != 0) { - YawnSleepCounter = 10; // stay hypnotized + YawnSleepCounter = 40; // stay hypnotized return subAnimateMurphy; } // loc_g_6838: @@ -1042,7 +1146,7 @@ loc_g_6884: subCopyFieldToScreen(*si, aniMurphyTouchDown); if (YellowDisksExploded != 0) { - YawnSleepCounter = 10; // stay hypnotized + YawnSleepCounter = 40; // stay hypnotized return subAnimateMurphy; } // loc_g_6838: @@ -1058,7 +1162,7 @@ loc_g_68BA: subCopyFieldToScreen(*si, aniMurphyTouchRight); if (YellowDisksExploded != 0) { - YawnSleepCounter = 10; // stay hypnotized + YawnSleepCounter = 40; // stay hypnotized return subAnimateMurphy; } // loc_g_6838: @@ -2398,6 +2502,17 @@ void subCopyFieldToScreen(int si, int fi) // +++++++++++++++++++++++++++++++++++++++++ } +void subCopyImageToScreen(int si, int graphic, int sync_frame) +{ + int X, Y; + + // +++++++++++++++++++++++++++++++++++++++++ + X = GetStretchX(si); + Y = GetStretchY(si); + StretchedSprites.BltImg(X, Y, graphic, sync_frame); + // +++++++++++++++++++++++++++++++++++++++++ +} + static void subEatRedDisk(int si) { if (AllowRedDiskCheat == 0) diff --git a/src/game_sp/Murphy.h b/src/game_sp/Murphy.h index 3708b48c..8f0dd400 100644 --- a/src/game_sp/Murphy.h +++ b/src/game_sp/Murphy.h @@ -15,6 +15,7 @@ extern int subAdjustZonksInfotronsAboveMurphy(int si); extern int subAnimateMurphy(int *si); extern void subCopyFieldToScreen(int si, int fi); +extern void subCopyImageToScreen(int si, int graphic, int sync_frame); extern int subExplodeSnikSnaksBelow(int si); extern int subSpPortTest(int si); -- 2.34.1