DrawText(DX_DYNAMITE, DY_DYNAMITE, int2str(value, 3), FONT_TEXT_2);
}
-inline void DrawGameValue_Keys(int key[4])
+inline void DrawGameValue_Keys(int key[MAX_NUM_KEYS])
{
int i;
- for (i = 0; i < MAX_KEYS; i++)
+ /* currently only 4 of 8 possible keys are displayed */
+ for (i = 0; i < STD_NUM_KEYS; i++)
if (key[i])
DrawMiniGraphicExt(drawto, DX_KEYS + i * MINI_TILEX, DY_KEYS,
el2edimg(EL_KEY_1 + i));
void DrawAllGameValues(int emeralds, int dynamite, int score, int time,
int key_bits)
{
- int key[4];
+ int key[MAX_NUM_KEYS];
int i;
- for (i = 0; i < MAX_KEYS; i++)
+ for (i = 0; i < MAX_NUM_KEYS; i++)
key[i] = key_bits & (1 << i);
+ DrawGameValue_Level(level_nr);
+
DrawGameValue_Emeralds(emeralds);
DrawGameValue_Dynamite(dynamite);
DrawGameValue_Score(score);
player->lights_still_needed = 0;
player->friends_still_needed = 0;
- for (j = 0; j < MAX_KEYS; j++)
+ for (j = 0; j < MAX_NUM_KEYS; j++)
player->key[j] = FALSE;
player->dynabomb_count = 0;
Feld[x][y] = getInvisibleActiveFromInvisibleElement(element);
DrawLevelField(x, y);
+
+ /* uncrumble neighbour fields, if needed */
+ if (element == EL_INVISIBLE_SAND)
+ DrawLevelFieldCrumbledSandNeighbours(x, y);
}
else if (element == EL_INVISIBLE_STEELWALL_ACTIVE ||
element == EL_INVISIBLE_WALL_ACTIVE ||
Feld[x][y] = getInvisibleFromInvisibleActiveElement(element);
DrawLevelField(x, y);
+
+ /* re-crumble neighbour fields, if needed */
+ if (element == EL_INVISIBLE_SAND)
+ DrawLevelFieldCrumbledSandNeighbours(x, y);
}
}
}
/* check if DigField() has caused relocation of the player */
if (player->jx != jx || player->jy != jy)
- return MF_NO_ACTION;
+ return MF_NO_ACTION; /* <-- !!! CHECK THIS [-> MF_ACTION ?] !!! */
StorePlayer[jx][jy] = 0;
player->last_jx = jx;
return MF_NO_ACTION; /* player cannot walk here due to gravity */
#endif
- if (IS_GATE(element))
+ if (IS_RND_GATE(element))
{
- if (!player->key[element - EL_GATE_1])
+ if (!player->key[RND_GATE_NR(element)])
return MF_NO_ACTION;
}
- else if (IS_GATE_GRAY(element))
+ else if (IS_RND_GATE_GRAY(element))
{
- if (!player->key[element - EL_GATE_1_GRAY])
+ if (!player->key[RND_GATE_GRAY_NR(element)])
return MF_NO_ACTION;
}
else if (element == EL_EXIT_OPEN ||
if (IS_EM_GATE(element))
{
- if (!player->key[element - EL_EM_GATE_1])
+ if (!player->key[EM_GATE_NR(element)])
return MF_NO_ACTION;
}
else if (IS_EM_GATE_GRAY(element))
{
- if (!player->key[element - EL_EM_GATE_1_GRAY])
+ if (!player->key[EM_GATE_GRAY_NR(element)])
return MF_NO_ACTION;
}
else if (IS_SP_PORT(element))
{
player->dynabomb_xl = TRUE;
}
- else if ((element >= EL_KEY_1 && element <= EL_KEY_4) ||
- (element >= EL_EM_KEY_1 && element <= EL_EM_KEY_4))
+ else if (IS_KEY(element))
{
- int key_nr = (element >= EL_KEY_1 && element <= EL_KEY_4 ?
- element - EL_KEY_1 : element - EL_EM_KEY_1);
-
- player->key[key_nr] = TRUE;
+ player->key[KEY_NR(element)] = TRUE;
DrawGameValue_Keys(player->key);
break;
case SAMPLE_bug:
- PlayLevelSoundElementAction(x, y, EL_BUG, ACTION_MOVING);
+ PlayLevelSoundElementAction(x, y, element, ACTION_MOVING);
break;
case SAMPLE_tank:
- PlayLevelSoundElementAction(x, y, EL_SPACESHIP, ACTION_MOVING);
+ PlayLevelSoundElementAction(x, y, element, ACTION_MOVING);
break;
- case SAMPLE_android:
+ case SAMPLE_android_clone:
PlayLevelSoundElementAction(x, y, element, ACTION_DROPPING);
break;
+ case SAMPLE_android_move:
+ PlayLevelSoundElementAction(x, y, element, ACTION_MOVING);
+ break;
+
case SAMPLE_spring:
PlayLevelSoundElementAction(x, y, element, ACTION_IMPACT);
break;
break;
case SAMPLE_eater:
- PlayLevelSoundElementAction(x, y, EL_YAMYAM, ACTION_WAITING);
+ PlayLevelSoundElementAction(x, y, element, ACTION_WAITING);
+ break;
+
+ case SAMPLE_eater_eat:
+ PlayLevelSoundElementAction(x, y, element, ACTION_DIGGING);
break;
case SAMPLE_alien:
break;
case SAMPLE_squash:
+ /* !!! CHECK THIS !!! */
+#if 1
+ PlayLevelSoundElementAction(x, y, element, ACTION_BREAKING);
+#else
PlayLevelSoundElementAction(x, y, element, ACTION_SMASHED_BY_ROCK);
+#endif
break;
case SAMPLE_wonderfall:
- PlayLevelSoundElementAction(x, y, EL_MAGIC_WALL, ACTION_FILLING);
+ PlayLevelSoundElementAction(x, y, element, ACTION_FILLING);
break;
case SAMPLE_drip:
break;
case SAMPLE_acid:
- PlayLevelSound(x, y, SND_ACID_SPLASHING);
+ PlayLevelSoundElementAction(x, y, element, ACTION_SPLASHING);
break;
case SAMPLE_ball:
PlayLevelSoundElementAction(x, y, element, ACTION_PASSING);
break;
- case SAMPLE_exit:
+ case SAMPLE_exit_open:
+ PlayLevelSoundElementAction(x, y, element, ACTION_OPENING);
+ break;
+
+ case SAMPLE_exit_leave:
PlayLevelSoundElementAction(x, y, element, ACTION_PASSING);
break;
break;
case SAMPLE_wheel:
- PlayLevelSound(x, y, SND_ROBOT_WHEEL_ACTIVE);
+ PlayLevelSoundElementAction(x, y, element, ACTION_ACTIVE);
break;
case SAMPLE_boom:
PlayLevelSoundElementAction(x, y, element, ACTION_EXPLODING);
break;
- case SAMPLE_time:
- PlaySoundStereo(SND_GAME_RUNNING_OUT_OF_TIME, SOUND_MIDDLE);
- break;
-
case SAMPLE_die:
PlayLevelSoundElementAction(x, y, element, ACTION_DYING);
break;
+ case SAMPLE_time:
+ PlaySoundStereo(SND_GAME_RUNNING_OUT_OF_TIME, SOUND_MIDDLE);
+ break;
+
default:
PlayLevelSoundElementAction(x, y, element, ACTION_DEFAULT);
break;
case EL_KEY_2:
case EL_KEY_3:
case EL_KEY_4:
+ case EL_EM_KEY_1:
+ case EL_EM_KEY_2:
+ case EL_EM_KEY_3:
+ case EL_EM_KEY_4:
+ case EL_EMC_KEY_5:
+ case EL_EMC_KEY_6:
+ case EL_EMC_KEY_7:
+ case EL_EMC_KEY_8:
RaiseScore(level.score[SC_KEY]);
break;
default: