X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fgame_sp%2FMurphy.c;fp=src%2Fgame_sp%2FMurphy.c;h=b00aef58f70eb9bb4b41ee1d5f36525146b368fc;hp=c50ecb87f68273d4a3b38d95e1f1bbf3c5ec4cf6;hb=61ca162f9268de1fa4fe0df3f561189b1a71770d;hpb=be1c10e7863850eba871b2c0da9d635313b2bc01 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)