projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed setting flag for initialized video for headless mode
[rocksndiamonds.git]
/
src
/
game_mm
/
mm_game.c
diff --git
a/src/game_mm/mm_game.c
b/src/game_mm/mm_game.c
index ed84121dd2d75d463aeb4f6535e4ffa47d7d5e41..195407d94638992461961a53bac874b30512de0b 100644
(file)
--- a/
src/game_mm/mm_game.c
+++ b/
src/game_mm/mm_game.c
@@
-66,12
+66,17
@@
#define DL_LASER_ENABLED 1
/* values for 'click_delay_value' in ClickElement() */
#define DL_LASER_ENABLED 1
/* values for 'click_delay_value' in ClickElement() */
-#define CLICK_DELAY_
SHORT 125
-#define CLICK_DELAY
_LONG 250
+#define CLICK_DELAY_
FIRST 12 /* delay (frames) after first click */
+#define CLICK_DELAY
6 /* delay (frames) for pressed butten */
-#define AUTO_ROTATE_DELAY CLICK_DELAY
_SHORT
-#define INIT_GAME_ACTIONS_DELAY
ONE_SECOND_DELAY
+#define AUTO_ROTATE_DELAY CLICK_DELAY
+#define INIT_GAME_ACTIONS_DELAY
(ONE_SECOND_DELAY / GAME_FRAME_DELAY)
#define NUM_INIT_CYCLE_STEPS 16
#define NUM_INIT_CYCLE_STEPS 16
+#define PACMAN_MOVE_DELAY 12
+#define ENERGY_DELAY (4 * ONE_SECOND_DELAY / GAME_FRAME_DELAY)
+#define HEALTH_DEC_DELAY 3
+#define HEALTH_INC_DELAY 9
+#define HEALTH_DELAY(x) ((x) ? HEALTH_DEC_DELAY : HEALTH_INC_DELAY)
/* forward declaration for internal use */
static int MovingOrBlocked2Element_MM(int, int);
/* forward declaration for internal use */
static int MovingOrBlocked2Element_MM(int, int);
@@
-83,6
+88,191
@@
static void ContinueMoving_MM(int, int);
static void Moving2Blocked_MM(int, int, int *, int *);
static void Moving2Blocked_MM(int, int, int *, int *);
+/* element masks for scanning pixels of MM elements */
+static const char mm_masks[10][16][16 + 1] =
+{
+ {
+ " ",
+ " XXXXX ",
+ " XXXXXXX ",
+ " XXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX",
+ " XXXXXXXXXXXXXX",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ },
+ {
+ " ",
+ " XXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ },
+ {
+ " ",
+ " XXXXXX ",
+ " XXXXXXXXX ",
+ " XXXXXXXXXXX ",
+ "XXXXXXXXXXXXX ",
+ "XXXXXXXXXXXXX ",
+ "XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ },
+ {
+ " ",
+ " XXXXXX ",
+ " XXXXXXXX ",
+ " XXXXXXXXXX ",
+ " XXXXXXXXXXX ",
+ " XXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXX XXXXX ",
+ },
+ {
+ " XXXXXX XXXXXX ",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ " ",
+ " ",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ " XXXXXX XXXXXX ",
+ },
+ {
+ " XXXXXX XXXXXX ",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ " XXXXXX XXXXXX ",
+ " XXXXXX XXXXXX ",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ "XXXXXXX XXXXXXX",
+ " XXXXXX XXXXXX ",
+ },
+ {
+ " XX XXXXX ",
+ " XXX XXXX ",
+ " XXXX XXX X",
+ " XXXXXXXXX XX",
+ " XXXXXXXXX XXX",
+ "XXXXXXXXX XXXX",
+ "XXXXXXXX XXXXX",
+ " XXXX XXX ",
+ " XXX XXXX ",
+ "XXXXX XXXXXXXX",
+ "XXXX XXXXXXXXX",
+ "XXX XXXXXXXXX ",
+ "XX XXXXXXXXX ",
+ "X XXX XXXX ",
+ " XXXX XXX ",
+ " XXXXX XX ",
+ },
+ {
+ " XXXXX XX ",
+ " XXXX XXX ",
+ "X XXX XXXX ",
+ "XX XXXXXXXXX ",
+ "XXX XXXXXXXXX ",
+ "XXXX XXXXXXXXX",
+ "XXXXX XXXXXXXX",
+ " XXX XXXX ",
+ " XXXX XXX ",
+ "XXXXXXXX XXXXX",
+ "XXXXXXXXX XXXX",
+ " XXXXXXXXX XXX",
+ " XXXXXXXXX XX",
+ " XXXX XXX X",
+ " XXX XXXX ",
+ " XX XXXXX ",
+ },
+ {
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXX",
+ },
+ {
+ " ",
+ " XXXX ",
+ " XXXXXXXX ",
+ " XXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXXXX ",
+ " XXXXXXXXXX ",
+ " XXXXXXXX ",
+ " XXXX ",
+ " ",
+ },
+};
+
static int get_element_angle(int element)
{
int element_phase = get_element_phase(element);
static int get_element_angle(int element)
{
int element_phase = get_element_phase(element);
@@
-270,6
+460,9
@@
static void InitLaser()
laser.num_beamers = 0;
laser.beamer_edge[0] = 0;
laser.num_beamers = 0;
laser.beamer_edge[0] = 0;
+ laser.dest_element = EL_EMPTY;
+ laser.wall_mask = 0;
+
AddLaserEdge(LX, LY); /* set laser starting edge */
pen_ray = GetPixelFromRGB(window,
AddLaserEdge(LX, LY); /* set laser starting edge */
pen_ray = GetPixelFromRGB(window,
@@
-342,7
+535,7
@@
void InitGameEngine_MM()
void InitGameActions_MM()
{
void InitGameActions_MM()
{
- int num_init_game_frames = INIT_GAME_ACTIONS_DELAY
/ GAME_FRAME_DELAY
;
+ int num_init_game_frames = INIT_GAME_ACTIONS_DELAY;
int cycle_steps_done = 0;
int i;
int cycle_steps_done = 0;
int i;
@@
-520,17
+713,9
@@
int ScanPixel()
}
else
{
}
else
{
- int graphic_mask = getMaskFromElement(element);
- Bitmap *bitmap;
- int src_x, src_y;
- int mask_x, mask_y;
-
- getGraphicSource(graphic_mask, 0, &bitmap, &src_x, &src_y);
-
- mask_x = src_x + dx;
- mask_y = src_y + dy;
+ int pos = getMaskFromElement(element) - IMG_MM_MASK_MCDUFFIN_RIGHT;
- pixel = (
ReadPixel(bitmap, mask_x, mask_y)
? 1 : 0);
+ pixel = (
mm_masks[pos][dy / 2][dx / 2] == 'X'
? 1 : 0);
}
}
else
}
}
else
@@
-733,7
+918,7
@@
void ScanLaser()
if (rf)
DrawLaser(rf - 1, DL_LASER_ENABLED);
if (rf)
DrawLaser(rf - 1, DL_LASER_ENABLED);
- Ct = CT =
Counter()
;
+ Ct = CT =
FrameCounter
;
#if 0
if (!IN_LEV_FIELD(ELX, ELY))
#if 0
if (!IN_LEV_FIELD(ELX, ELY))
@@
-1075,7
+1260,7
@@
boolean HitElement(int element, int hit_mask)
((element - EL_POLAR_START) % 2 ||
(element - EL_POLAR_START) / 2 != laser.current_angle % 8))
{
((element - EL_POLAR_START) % 2 ||
(element - EL_POLAR_START) / 2 != laser.current_angle % 8))
{
- Play
SoundStereo(SND_KINK, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
laser.num_damages--;
laser.num_damages--;
@@
-1085,7
+1270,7
@@
boolean HitElement(int element, int hit_mask)
if (IS_POLAR_CROSS(element) &&
(element - EL_POLAR_CROSS_START) != laser.current_angle % 4)
{
if (IS_POLAR_CROSS(element) &&
(element - EL_POLAR_CROSS_START) != laser.current_angle % 4)
{
- Play
SoundStereo(SND_KINK, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
laser.num_damages--;
laser.num_damages--;
@@
-1163,7
+1348,7
@@
boolean HitElement(int element, int hit_mask)
if ((!IS_POLAR(element) && !IS_POLAR_CROSS(element)) &&
current_angle != laser.current_angle)
if ((!IS_POLAR(element) && !IS_POLAR_CROSS(element)) &&
current_angle != laser.current_angle)
- Play
SoundStereo(SND_LASER, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
laser.overloaded =
(get_opposite_angle(laser.current_angle) ==
laser.overloaded =
(get_opposite_angle(laser.current_angle) ==
@@
-1181,7
+1366,7
@@
boolean HitElement(int element, int hit_mask)
if (element == EL_BOMB || element == EL_MINE)
{
if (element == EL_BOMB || element == EL_MINE)
{
- Play
SoundStereo(SND_KINK, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
if (element == EL_MINE)
laser.overloaded = TRUE;
if (element == EL_MINE)
laser.overloaded = TRUE;
@@
-1209,6
+1394,7
@@
boolean HitElement(int element, int hit_mask)
if (game_mm.kettles_still_needed == 0)
{
if (game_mm.kettles_still_needed == 0)
{
+ int exit_element = (element == EL_KETTLE ? EL_EXIT_OPEN : EL_RECEIVER);
int x, y;
static int xy[4][2] =
{
int x, y;
static int xy[4][2] =
{
@@
-1218,7
+1404,7
@@
boolean HitElement(int element, int hit_mask)
{ 0, +1 }
};
{ 0, +1 }
};
-
PlaySoundStereo(SND_KLING, ST(ELX)
);
+
PlayLevelSound_MM(ELX, ELY, exit_element, MM_ACTION_OPENING
);
for (y = 0; y < lev_fieldy; y++)
{
for (y = 0; y < lev_fieldy; y++)
{
@@
-1269,7
+1455,7
@@
boolean HitElement(int element, int hit_mask)
if (element == EL_LIGHTBULB_OFF || element == EL_LIGHTBULB_ON)
{
if (element == EL_LIGHTBULB_OFF || element == EL_LIGHTBULB_ON)
{
- Play
SoundStereo(SND_KINK, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
DrawLaser(0, DL_LASER_ENABLED);
DrawLaser(0, DL_LASER_ENABLED);
@@
-1626,13
+1812,14
@@
boolean HitBlock(int element, int hit_mask)
boolean HitLaserSource(int element, int hit_mask)
{
boolean HitLaserSource(int element, int hit_mask)
{
-
if (HitOnlyAnEdge(element, hit_mask))
-
return FALSE;
+ if (HitOnlyAnEdge(element, hit_mask))
+ return FALSE;
- PlaySoundStereo(SND_AUTSCH, ST(ELX));
- laser.overloaded = TRUE;
+ PlayLevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING);
- return TRUE;
+ laser.overloaded = TRUE;
+
+ return TRUE;
}
boolean HitLaserDestination(int element, int hit_mask)
}
boolean HitLaserDestination(int element, int hit_mask)
@@
-1645,7
+1832,8
@@
boolean HitLaserDestination(int element, int hit_mask)
game_mm.kettles_still_needed == 0 &&
laser.current_angle == get_opposite_angle(get_element_angle(element))))
{
game_mm.kettles_still_needed == 0 &&
laser.current_angle == get_opposite_angle(get_element_angle(element))))
{
- PlaySoundStereo(SND_HOLZ, ST(ELX));
+ PlayLevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING);
+
return TRUE;
}
return TRUE;
}
@@
-1684,7
+1872,7
@@
boolean HitReflectingWalls(int element, int hit_mask)
hit_mask == HIT_MASK_RIGHT ||
hit_mask == HIT_MASK_BOTTOM))
{
hit_mask == HIT_MASK_RIGHT ||
hit_mask == HIT_MASK_BOTTOM))
{
- Play
SoundStereo(SND_HUI, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
LX -= XS;
LY -= YS;
LX -= XS;
LY -= YS;
@@
-1783,7
+1971,7
@@
boolean HitReflectingWalls(int element, int hit_mask)
(hit_mask == HIT_MASK_TOPRIGHT || hit_mask == HIT_MASK_BOTTOMLEFT ?
ANG_MIRROR_135 : ANG_MIRROR_45);
(hit_mask == HIT_MASK_TOPRIGHT || hit_mask == HIT_MASK_BOTTOMLEFT ?
ANG_MIRROR_135 : ANG_MIRROR_45);
- Play
SoundStereo(SND_HUI, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
AddDamagedField(ELX, ELY);
AddLaserEdge(LX, LY);
AddDamagedField(ELX, ELY);
AddLaserEdge(LX, LY);
@@
-1819,7
+2007,7
@@
boolean HitReflectingWalls(int element, int hit_mask)
hit_mask == (HIT_MASK_ALL ^ HIT_MASK_TOPRIGHT) ?
ANG_MIRROR_135 : ANG_MIRROR_45);
hit_mask == (HIT_MASK_ALL ^ HIT_MASK_TOPRIGHT) ?
ANG_MIRROR_135 : ANG_MIRROR_45);
- Play
SoundStereo(SND_HUI, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
/*
AddDamagedField(ELX, ELY);
/*
AddDamagedField(ELX, ELY);
@@
-1912,7
+2100,7
@@
boolean HitAbsorbingWalls(int element, int hit_mask)
element == EL_BLOCK_WOOD ||
element == EL_GATE_WOOD)
{
element == EL_BLOCK_WOOD ||
element == EL_GATE_WOOD)
{
- Play
SoundStereo(SND_HOLZ, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_HITTING
);
return TRUE;
}
return TRUE;
}
@@
-2173,17
+2361,19
@@
static void Explode_MM(int x, int y, int phase, int mode)
{
if (Store[x][y] == EL_BOMB)
{
{
if (Store[x][y] == EL_BOMB)
{
- laser.num_damages--;
DrawLaser(0, DL_LASER_DISABLED);
DrawLaser(0, DL_LASER_DISABLED);
-
laser.num_edges = 0
;
+
InitLaser()
;
Bang_MM(laser.start_edge.x, laser.start_edge.y);
Store[x][y] = EL_EMPTY;
Bang_MM(laser.start_edge.x, laser.start_edge.y);
Store[x][y] = EL_EMPTY;
+
+ game_mm.game_over = TRUE;
+ game_mm.game_over_cause = GAME_OVER_BOMB;
+
+ laser.overloaded = FALSE;
}
else if (IS_MCDUFFIN(Store[x][y]))
{
}
else if (IS_MCDUFFIN(Store[x][y]))
{
- game_mm.game_over = TRUE;
- game_mm.game_over_cause = GAME_OVER_BOMB;
Store[x][y] = EL_EMPTY;
}
Store[x][y] = EL_EMPTY;
}
@@
-2265,13
+2455,13
@@
static void Bang_MM(int x, int y)
}
if (IS_PACMAN(element))
}
if (IS_PACMAN(element))
- Play
SoundStereo(SND_QUIEK, ST(x)
);
+ Play
LevelSound_MM(x, y, element, MM_ACTION_EXPLODING
);
else if (element == EL_BOMB || IS_MCDUFFIN(element))
else if (element == EL_BOMB || IS_MCDUFFIN(element))
- Play
SoundStereo(SND_ROAAAR, ST(x)
);
+ Play
LevelSound_MM(x, y, element, MM_ACTION_EXPLODING
);
else if (element == EL_KEY)
else if (element == EL_KEY)
- Play
SoundStereo(SND_KLING, ST(x)
);
+ Play
LevelSound_MM(x, y, element, MM_ACTION_EXPLODING
);
else
else
- Play
SoundStereo((mode == EX_SHORT ? SND_WHOOSH : SND_KABUMM), ST(x)
);
+ Play
LevelSound_MM(x, y, element, MM_ACTION_EXPLODING
);
Explode_MM(x, y, EX_PHASE_START, mode);
}
Explode_MM(x, y, EX_PHASE_START, mode);
}
@@
-2431,7
+2621,7
@@
static void ContinueMoving_MM(int x, int y)
void ClickElement(int x, int y, int button)
{
static unsigned int click_delay = 0;
void ClickElement(int x, int y, int button)
{
static unsigned int click_delay = 0;
- static int click_delay_value = CLICK_DELAY
_SHORT
;
+ static int click_delay_value = CLICK_DELAY;
static boolean new_button = TRUE;
int element;
static boolean new_button = TRUE;
int element;
@@
-2442,7
+2632,7
@@
void ClickElement(int x, int y, int button)
if (button == MB_RELEASED)
{
new_button = TRUE;
if (button == MB_RELEASED)
{
new_button = TRUE;
- click_delay_value = CLICK_DELAY
_SHORT
;
+ click_delay_value = CLICK_DELAY;
/* release eventually hold auto-rotating mirror */
RotateMirror(x, y, MB_RELEASED);
/* release eventually hold auto-rotating mirror */
RotateMirror(x, y, MB_RELEASED);
@@
-2450,7
+2640,7
@@
void ClickElement(int x, int y, int button)
return;
}
return;
}
- if (!
Delay
Reached(&click_delay, click_delay_value) && !new_button)
+ if (!
Frame
Reached(&click_delay, click_delay_value) && !new_button)
return;
if (button == MB_MIDDLEBUTTON) /* middle button has no function */
return;
if (button == MB_MIDDLEBUTTON) /* middle button has no function */
@@
-2527,7
+2717,7
@@
void ClickElement(int x, int y, int button)
DrawLaser(0, DL_LASER_ENABLED);
}
DrawLaser(0, DL_LASER_ENABLED);
}
- click_delay_value = (new_button ? CLICK_DELAY_
LONG : CLICK_DELAY_SHORT
);
+ click_delay_value = (new_button ? CLICK_DELAY_
FIRST : CLICK_DELAY
);
new_button = FALSE;
}
new_button = FALSE;
}
@@
-2633,7
+2823,7
@@
void AutoRotateMirrors()
static unsigned int rotate_delay = 0;
int x, y;
static unsigned int rotate_delay = 0;
int x, y;
- if (!
Delay
Reached(&rotate_delay, AUTO_ROTATE_DELAY))
+ if (!
Frame
Reached(&rotate_delay, AUTO_ROTATE_DELAY))
return;
for (x = 0; x < lev_fieldx; x++)
return;
for (x = 0; x < lev_fieldx; x++)
@@
-2725,9
+2915,9
@@
void ColorCycling(void)
if (color_status == STATIC_COLORS)
return;
if (color_status == STATIC_COLORS)
return;
- CC =
Counter()
;
+ CC =
FrameCounter
;
- if (CC < Cc || CC > Cc +
50
)
+ if (CC < Cc || CC > Cc +
2
)
{
Cc = CC;
{
Cc = CC;
@@
-2761,7
+2951,6
@@
void ColorCycling(void)
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
{
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
{
- static unsigned int action_delay = 0;
static unsigned int pacman_delay = 0;
static unsigned int energy_delay = 0;
static unsigned int overload_delay = 0;
static unsigned int pacman_delay = 0;
static unsigned int energy_delay = 0;
static unsigned int overload_delay = 0;
@@
-2770,8
+2959,6
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
int r, d;
int r, d;
- WaitUntilDelayReached(&action_delay, GameFrameDelay);
-
for (y = 0; y < lev_fieldy; y++) for (x = 0; x < lev_fieldx; x++)
Stop[x][y] = FALSE;
for (y = 0; y < lev_fieldy; y++) for (x = 0; x < lev_fieldx; x++)
Stop[x][y] = FALSE;
@@
-2806,9
+2993,9
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
laser.redraw = FALSE;
#endif
laser.redraw = FALSE;
#endif
- CT =
Counter()
;
+ CT =
FrameCounter
;
- if (game_mm.num_pacman &&
DelayReached(&pacman_delay, 250
))
+ if (game_mm.num_pacman &&
FrameReached(&pacman_delay, PACMAN_MOVE_DELAY
))
{
MovePacMen();
{
MovePacMen();
@@
-2819,7
+3006,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
}
}
}
}
- if (
DelayReached(&energy_delay, 4000
))
+ if (
FrameReached(&energy_delay, ENERGY_DELAY
))
{
game_mm.energy_left--;
if (game_mm.energy_left >= 0)
{
game_mm.energy_left--;
if (game_mm.energy_left >= 0)
@@
-2851,7
+3038,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
Delay(50);
}
Delay(50);
}
- StopSound
(SND_WARNTON
);
+ StopSound
_MM(SND_MM_GAME_HEALTH_CHARGING
);
FadeMusic();
DrawLaser(0, DL_LASER_DISABLED);
FadeMusic();
DrawLaser(0, DL_LASER_DISABLED);
@@
-2899,7
+3086,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
if (((laser.overloaded && laser.overload_value < MAX_LASER_OVERLOAD) ||
(!laser.overloaded && laser.overload_value > 0)) &&
if (((laser.overloaded && laser.overload_value < MAX_LASER_OVERLOAD) ||
(!laser.overloaded && laser.overload_value > 0)) &&
-
DelayReached(&overload_delay, 60 + !laser.overloaded * 120
))
+
FrameReached(&overload_delay, HEALTH_DELAY(laser.overloaded)
))
{
if (laser.overloaded)
laser.overload_value++;
{
if (laser.overloaded)
laser.overload_value++;
@@
-2930,20
+3117,17
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
(native_mm_level.laser_blue ? color_down : 0x00));
DrawLaser(0, DL_LASER_ENABLED);
(native_mm_level.laser_blue ? color_down : 0x00));
DrawLaser(0, DL_LASER_ENABLED);
+#if 0
BackToFront();
BackToFront();
- }
-
- if (laser.overloaded)
- {
- if (setup.sound_loops)
- PlaySoundExt(SND_WARNTON, SOUND_MAX_VOLUME, SOUND_MAX_RIGHT,
- SND_CTRL_PLAY_LOOP);
- else
- PlaySoundStereo(SND_WARNTON, SOUND_MAX_RIGHT);
+#endif
}
if (!laser.overloaded)
}
if (!laser.overloaded)
- StopSound(SND_WARNTON);
+ StopSound_MM(SND_MM_GAME_HEALTH_CHARGING);
+ else if (setup.sound_loops)
+ PlaySoundLoop_MM(SND_MM_GAME_HEALTH_CHARGING);
+ else
+ PlaySound_MM(SND_MM_GAME_HEALTH_CHARGING);
if (laser.overloaded)
{
if (laser.overloaded)
{
@@
-3013,7
+3197,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
CT -= Ct;
CT -= Ct;
- if (element == EL_BOMB && CT >
1500
)
+ if (element == EL_BOMB && CT >
75
)
{
if (game_mm.cheat_no_explosion)
return;
{
if (game_mm.cheat_no_explosion)
return;
@@
-3051,7
+3235,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
return;
}
return;
}
- if (element == EL_FUSE_ON && CT >
500
)
+ if (element == EL_FUSE_ON && CT >
25
)
{
laser.fuse_off = TRUE;
laser.fuse_x = ELX;
{
laser.fuse_off = TRUE;
laser.fuse_x = ELX;
@@
-3061,7
+3245,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
DrawGraphic_MM(ELX, ELY, IMG_MM_FUSE);
}
DrawGraphic_MM(ELX, ELY, IMG_MM_FUSE);
}
- if (element == EL_BALL_GRAY && CT >
1500
)
+ if (element == EL_BALL_GRAY && CT >
75
)
{
static int new_elements[] =
{
{
static int new_elements[] =
{
@@
-3180,9
+3364,9
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
return;
}
return;
}
- if (IS_WALL_ICE(element) && CT >
100
0)
+ if (IS_WALL_ICE(element) && CT >
5
0)
{
{
- Play
SoundStereo(SND_SLURP, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_SHRINKING
);
{
Feld[ELX][ELY] = Feld[ELX][ELY] - EL_WALL_ICE + EL_WALL_CHANGING;
{
Feld[ELX][ELY] = Feld[ELX][ELY] - EL_WALL_ICE + EL_WALL_CHANGING;
@@
-3232,7
+3416,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
return;
}
return;
}
- if (IS_WALL_AMOEBA(element) && CT >
120
0)
+ if (IS_WALL_AMOEBA(element) && CT >
6
0)
{
int k1, k2, k3, dx, dy, de, dm;
int element2 = Feld[ELX][ELY];
{
int k1, k2, k3, dx, dy, de, dm;
int element2 = Feld[ELX][ELY];
@@
-3320,7
+3504,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
ScanLaser();
DrawLaser(0, DL_LASER_ENABLED);
ScanLaser();
DrawLaser(0, DL_LASER_ENABLED);
- Play
SoundStereo(SND_AMOEBE, ST(dx)
);
+ Play
LevelSound_MM(dx, dy, element, MM_ACTION_GROWING
);
Feld[x][y] = Feld[x][y] - EL_WALL_AMOEBA + EL_WALL_CHANGING;
Store[x][y] = EL_WALL_AMOEBA;
Feld[x][y] = Feld[x][y] - EL_WALL_AMOEBA + EL_WALL_CHANGING;
Store[x][y] = EL_WALL_AMOEBA;
@@
-3334,7
+3518,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
ScanLaser();
DrawLaser(0, DL_LASER_ENABLED);
ScanLaser();
DrawLaser(0, DL_LASER_ENABLED);
- Play
SoundStereo(SND_AMOEBE, ST(dx)
);
+ Play
LevelSound_MM(dx, dy, element, MM_ACTION_GROWING
);
for (i = 4; i >= 0; i--)
{
for (i = 4; i >= 0; i--)
{
@@
-3350,7
+3534,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
}
if ((element == EL_BLOCK_WOOD || element == EL_BLOCK_STONE) &&
}
if ((element == EL_BLOCK_WOOD || element == EL_BLOCK_STONE) &&
- laser.stops_inside_element && CT >
1500
)
+ laser.stops_inside_element && CT >
75
)
{
int x, y;
int k;
{
int x, y;
int k;
@@
-3388,7
+3572,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
return;
}
return;
}
- Play
SoundStereo(SND_BONG, ST(ELX)
);
+ Play
LevelSound_MM(ELX, ELY, element, MM_ACTION_PUSHING
);
Feld[ELX][ELY] = 0;
Feld[x][y] = element;
Feld[ELX][ELY] = 0;
Feld[x][y] = element;
@@
-3407,7
+3591,7
@@
static void GameActions_MM_Ext(struct MouseActionInfo action, boolean warp_mode)
return;
}
return;
}
- if (element == EL_FUEL_FULL && CT >
20
0)
+ if (element == EL_FUEL_FULL && CT >
1
0)
{
for (i = game_mm.energy_left; i <= MAX_LASER_ENERGY; i+=2)
{
{
for (i = game_mm.energy_left; i <= MAX_LASER_ENERGY; i+=2)
{
@@
-3509,7
+3693,7
@@
void MovePacMen()
getGraphicSource(graphic, 0, &bitmap, &src_x, &src_y);
getGraphicSource(graphic, 0, &bitmap, &src_x, &src_y);
- CT =
Counter()
;
+ CT =
FrameCounter
;
ox = SX + ox * TILEX;
oy = SY + oy * TILEY;
ox = SX + ox * TILEX;
oy = SY + oy * TILEY;
@@
-3517,7
+3701,7
@@
void MovePacMen()
BlitBitmap(bitmap, window,
src_x, src_y, TILEX, TILEY,
ox + i * mx, oy + i * my);
BlitBitmap(bitmap, window,
src_x, src_y, TILEX, TILEY,
ox + i * mx, oy + i * my);
- Ct = Ct +
Counter()
- CT;
+ Ct = Ct +
FrameCounter
- CT;
}
DrawField_MM(nx, ny);
}
DrawField_MM(nx, ny);