Add level flag for plane of fire fumaroles

Also reduce the size of the gas clouds.

Breaks saves and bones.
This commit is contained in:
Pasi Kallinen
2023-03-17 19:35:57 +02:00
parent f2b75c3b0e
commit 4799fc937a
8 changed files with 21 additions and 7 deletions

View File

@@ -6,7 +6,7 @@
--
des.level_init({ style = "solidfill", fg = " " });
des.level_flags("mazelevel", "noteleport", "hardfloor", "shortsighted", "hot")
des.level_flags("mazelevel", "noteleport", "hardfloor", "shortsighted", "hot", "fumaroles")
-- The player lands, upon arrival, in the
-- lower-right. The location of the
-- portal to the next level is randomly chosen.

View File

@@ -614,6 +614,7 @@ Set flags for this level.
| temperate | Level is neither hot nor cold.
| nomongen | Prevents random monster generation.
| nodeathdrops | Prevents killed monsters from dropping corpses or random death drops.
| fumaroles | Lava emits poison gas clouds at random.
|===
Example:

View File

@@ -17,7 +17,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
#define EDITLEVEL 78
#define EDITLEVEL 79
/*
* Development status possibilities.

View File

@@ -392,6 +392,7 @@ struct levelflags {
Bitfield(rndmongen, 1); /* random monster generation allowed? */
Bitfield(deathdrops, 1); /* monsters may drop corpses/death drops */
Bitfield(noautosearch, 1); /* automatic searching disabled */
Bitfield(fumaroles, 1); /* lava emits poison gas at random */
schar temperature; /* +1 == hot, -1 == cold */
};

View File

@@ -333,7 +333,7 @@ moveloop_core(void)
/* vision will be updated as bubbles move */
if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz))
movebubbles();
else if (Is_firelevel(&u.uz))
else if (gl.level.flags.fumaroles)
fumaroles();
/* when immobile, count is in turns */

View File

@@ -1730,7 +1730,7 @@ goto_level(
/* initial movement of bubbles just before vision_recalc */
if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz))
movebubbles();
else if (Is_firelevel(&u.uz))
else if (gl.level.flags.fumaroles)
fumaroles();
/* Reset the screen. */

View File

@@ -1390,15 +1390,25 @@ mkportal(coordxy x, coordxy y, xint16 todnum, xint16 todlevel)
void
fumaroles(void)
{
xint16 n;
xint16 n, nmax = rn2(3);
int sizemin = 5;
boolean snd = FALSE, loud = FALSE;
for (n = rn2(3) + 2; n; n--) {
if (Is_firelevel(&u.uz)) {
nmax++;
sizemin += 5;
}
if (gl.level.flags.temperature > 0) {
nmax++;
sizemin += 5;
}
for (n = nmax; n; n--) {
coordxy x = rn1(COLNO - 4, 3);
coordxy y = rn1(ROWNO - 4, 3);
if (levl[x][y].typ == LAVAPOOL) {
NhRegion *r = create_gas_cloud(x, y, rn1(30, 20), rn1(10, 5));
NhRegion *r = create_gas_cloud(x, y, rn1(10, sizemin), rn1(10, 5));
clear_heros_fault(r);
snd = TRUE;

View File

@@ -3747,6 +3747,8 @@ lspo_level_flags(lua_State *L)
gl.level.flags.deathdrops = 0;
else if (!strcmpi(s, "noautosearch"))
gl.level.flags.noautosearch = 1;
else if (!strcmpi(s, "fumaroles"))
gl.level.flags.fumaroles = 1;
else {
char buf[BUFSZ];
Sprintf(buf, "Unknown level flag %s", s);