Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/include/global.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@
ZONE_BOSS,
ZONE_MONSTER,
ZONE_MERCHANT,
ZONE_BUBBLE,
LENGTH_ZoneType
} ZoneType;

Expand Down
30 changes: 29 additions & 1 deletion code/src/jeu.c
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,34 @@ int runGame(Sauvegarde *actualSave, short isNewSave) {
continue;
}

case ZONE_BUBBLE: {
printf("\n🫧 Zone de bulles apaisantes !\n");

// Fatigue restaurée = 5 + palier
int amount = 5 + playerProgress->tier;

int before = player->fatigue;
player->fatigue += amount;

// On évite de dépasser le maximum
if (player->fatigue > player->fatigue_max)
player->fatigue = player->fatigue_max;

int real_gain = player->fatigue - before;

printf("✨ Vous respirez profondément dans les bulles.\n");
printf("💤 Fatigue +%d (Actuel: %d / %d)\n",
real_gain, player->fatigue, player->fatigue_max);

// Nettoyage de la zone
target_zone->type = ZONE_PATH;
mark_cell_as_cleared(playerProgress, playerProgress->row, playerProgress->col);
playerProgress->zone_actuelle = ZONE_PATH;

pressEnterToContinue();
continue;
}

case ZONE_MONSTER: {
int dangerosityLevel = 1;

Expand Down Expand Up @@ -612,7 +640,7 @@ int runGame(Sauvegarde *actualSave, short isNewSave) {
int dangerosityLevel = 5;

if (!actualSave->etat_combat) {
// Initialisation de l'état de combat

printf("\n👹 Boss atteint !\n");
pressEnterToContinue();

Expand Down
22 changes: 15 additions & 7 deletions code/src/zones.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,12 @@ TierMap *build_tier(int tier, unsigned seed, PlayerProgress *p, short isNewTier)
p->cleared_count = 0;
}

// Taux qui scalent avec le palier
int blocked_rate = 15 + tier*5; if(blocked_rate>60) blocked_rate=60; // bloqué plus fréquents
int treasure_rate = 20 - tier*2; if(treasure_rate<5) treasure_rate=5; // trésor plus rares
int merchant_rate = 3 + tier; if(merchant_rate>10) merchant_rate=10; // 🆕 marchands rares
int blocked_rate = 15 + tier*5; if(blocked_rate>60) blocked_rate=60;
int treasure_rate = 20 - tier*2; if(treasure_rate<5) treasure_rate=5;
int merchant_rate = 3 + tier; if(merchant_rate>10) merchant_rate=10;

int bubble_rate = 5 + tier; if(bubble_rate>15) bubble_rate=15;


// 1) Remplissage aléatoire initial
for(int r=0;r<height;r++){
Expand All @@ -109,8 +111,11 @@ TierMap *build_tier(int tier, unsigned seed, PlayerProgress *p, short isNewTier)
else if(roll < (unsigned)(blocked_rate+treasure_rate))
z.type = ZONE_TREASURE;

else if(roll < (unsigned)(blocked_rate+treasure_rate+merchant_rate))
z.type = ZONE_MERCHANT; // 🧐 apparition du marchand
else if(roll < (unsigned)(blocked_rate + treasure_rate + merchant_rate))
z.type = ZONE_MERCHANT;

else if(roll < (unsigned)(blocked_rate + treasure_rate + merchant_rate + bubble_rate))
z.type = ZONE_BUBBLE;

else
z.type = ZONE_PATH;
Expand Down Expand Up @@ -197,6 +202,7 @@ char *get_zone_type_symbol(ZoneType type) {
case ZONE_TREASURE: return "🪙";
case ZONE_MONSTER: return "🐙";
case ZONE_MERCHANT: return "🧐";
case ZONE_BUBBLE: return "🫧";
default: return " ";
}
}
Expand All @@ -214,7 +220,9 @@ void draw_tier(char *prefix,const TierMap *m, int player_row, int player_col){
}
printf("\n");
}
printf("\n%sLégende : | 🤿 Joueur | 👹 Boss | 🪨 Rocher | 🪙 Trésor | 🐙 Monstre | 🧐 Marchand |\n\n", prefix ? prefix : "");
printf("\n%sLégende : | 🤿 Joueur | 👹 Boss | 🪨 Rocher | 🪙 Trésor | 🐙 Monstre | 🧐 Marchand | 🫧 Bulle |\n\n",
prefix ? prefix : "");

const Zone *z = &AT((TierMap*)m, player_row, player_col);
printf("%sBiome : %s\tDanger : ", prefix ? prefix : "", z->biome);
int stars = 1 + (z->tier/2); if(stars>5) stars=5; for(int i=0;i<stars;i++) printf("*");
Expand Down