Browse Source

Do not process theme rooms for Nest and Crypt

This causes Objects, Items and Monstesr to have different positions from
the original, but this is acceptable since they are stored in the save
game and so do not break compatability.
pull/4561/head
Anders Jenbo 4 years ago
parent
commit
f64fe57fbe
  1. 71
      Source/themes.cpp

71
Source/themes.cpp

@ -141,7 +141,7 @@ bool TFit_Obj5(int t)
bool TFit_SkelRoom(int t) bool TFit_SkelRoom(int t)
{ {
if (IsNoneOf(leveltype, DTYPE_CATHEDRAL, DTYPE_CATACOMBS, DTYPE_CRYPT)) { if (IsNoneOf(leveltype, DTYPE_CATHEDRAL, DTYPE_CATACOMBS)) {
return false; return false;
} }
@ -193,7 +193,7 @@ bool CheckThemeObj3(Point origin, int8_t regionId, int frequency)
bool TFit_Obj3(int8_t regionId) bool TFit_Obj3(int8_t regionId)
{ {
int objrnd[6] = { 4, 4, 3, 5, 3, 4 }; int objrnd[4] = { 4, 4, 3, 5 };
for (int yp = 1; yp < MAXDUNY - 1; yp++) { for (int yp = 1; yp < MAXDUNY - 1; yp++) {
for (int xp = 1; xp < MAXDUNX - 1; xp++) { for (int xp = 1; xp < MAXDUNX - 1; xp++) {
@ -229,7 +229,7 @@ bool CheckThemeReqs(theme_id t)
} }
break; break;
case THEME_ARMORSTAND: case THEME_ARMORSTAND:
if (leveltype == DTYPE_CATHEDRAL || leveltype == DTYPE_CRYPT) { if (leveltype == DTYPE_CATHEDRAL) {
return false; return false;
} }
break; break;
@ -249,7 +249,7 @@ bool CheckThemeReqs(theme_id t)
} }
break; break;
case THEME_WEAPONRACK: case THEME_WEAPONRACK:
if (leveltype == DTYPE_CATHEDRAL || leveltype == DTYPE_CRYPT) { if (leveltype == DTYPE_CATHEDRAL) {
return false; return false;
} }
break; break;
@ -363,7 +363,7 @@ bool CheckThemeRoom(int tv)
} }
} }
if (IsAnyOf(leveltype, DTYPE_CATHEDRAL, DTYPE_CRYPT) && (tarea < 9 || tarea > 100)) if (leveltype == DTYPE_CATHEDRAL && (tarea < 9 || tarea > 100))
return false; return false;
for (int j = 0; j < MAXDUNY; j++) { for (int j = 0; j < MAXDUNY; j++) {
@ -397,10 +397,11 @@ void InitThemes()
treasureFlag = true; treasureFlag = true;
weaponFlag = true; weaponFlag = true;
if (currlevel == 16) if (currlevel == 16 || IsAnyOf(leveltype, DTYPE_NEST, DTYPE_CRYPT)) {
return; return;
}
if (IsAnyOf(leveltype, DTYPE_CATHEDRAL, DTYPE_CRYPT)) { if (leveltype == DTYPE_CATHEDRAL) {
for (size_t i = 0; i < 256 && numthemes < MAXTHEMES; i++) { for (size_t i = 0; i < 256 && numthemes < MAXTHEMES; i++) {
if (CheckThemeRoom(i)) { if (CheckThemeRoom(i)) {
themes[numthemes].ttval = i; themes[numthemes].ttval = i;
@ -444,10 +445,11 @@ void InitThemes()
void HoldThemeRooms() void HoldThemeRooms()
{ {
if (currlevel == 16) if (currlevel == 16 || IsAnyOf(leveltype, DTYPE_NEST, DTYPE_CRYPT)) {
return; return;
}
if (leveltype != DTYPE_CATHEDRAL && leveltype != DTYPE_CRYPT) { if (leveltype != DTYPE_CATHEDRAL) {
DRLG_HoldThemeRooms(); DRLG_HoldThemeRooms();
return; return;
} }
@ -500,8 +502,8 @@ void PlaceThemeMonsts(int t, int f)
*/ */
void Theme_Barrel(int t) void Theme_Barrel(int t)
{ {
int barrnd[6] = { 2, 6, 4, 8, 4, 2 }; int barrnd[4] = { 2, 6, 4, 8 };
int monstrnd[6] = { 5, 7, 3, 9, 3, 5 }; int monstrnd[4] = { 5, 7, 3, 9 };
for (int yp = 0; yp < MAXDUNY; yp++) { for (int yp = 0; yp < MAXDUNY; yp++) {
for (int xp = 0; xp < MAXDUNX; xp++) { for (int xp = 0; xp < MAXDUNX; xp++) {
@ -526,7 +528,7 @@ void Theme_Barrel(int t)
*/ */
void Theme_Shrine(int t) void Theme_Shrine(int t)
{ {
int monstrnd[6] = { 6, 6, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 6, 3, 9 };
TFit_Shrine(t); TFit_Shrine(t);
if (themeVar1 == 1) { if (themeVar1 == 1) {
@ -548,7 +550,7 @@ void Theme_Shrine(int t)
*/ */
void Theme_MonstPit(int t) void Theme_MonstPit(int t)
{ {
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
int r = GenerateRnd(100) + 1; int r = GenerateRnd(100) + 1;
int ixp = 0; int ixp = 0;
@ -580,7 +582,7 @@ void Theme_MonstPit(int t)
*/ */
void Theme_SkelRoom(int t) void Theme_SkelRoom(int t)
{ {
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
TFit_SkelRoom(t); TFit_SkelRoom(t);
@ -653,8 +655,8 @@ void Theme_SkelRoom(int t)
*/ */
void Theme_Treasure(int t) void Theme_Treasure(int t)
{ {
int treasrnd[6] = { 4, 9, 7, 10, 7, 4 }; int treasrnd[4] = { 4, 9, 7, 10 };
int monstrnd[6] = { 6, 8, 3, 7, 3, 6 }; int monstrnd[4] = { 6, 8, 3, 7 };
AdvanceRndSeed(); AdvanceRndSeed();
for (int yp = 0; yp < MAXDUNY; yp++) { for (int yp = 0; yp < MAXDUNY; yp++) {
@ -671,7 +673,7 @@ void Theme_Treasure(int t)
CreateRndItem({ xp, yp }, false, false, true); CreateRndItem({ xp, yp }, false, false, true);
ItemNoFlippy(); ItemNoFlippy();
} }
if (rv >= treasureType - 2 && IsNoneOf(leveltype, DTYPE_CATHEDRAL, DTYPE_CRYPT)) { if (rv >= treasureType - 2 && leveltype != DTYPE_CATHEDRAL) {
Item &item = Items[ActiveItems[ActiveItemCount - 1]]; Item &item = Items[ActiveItems[ActiveItemCount - 1]];
if (item.IDidx == IDI_GOLD) { if (item.IDidx == IDI_GOLD) {
item._ivalue = std::max(item._ivalue / 2, 1); item._ivalue = std::max(item._ivalue / 2, 1);
@ -690,8 +692,8 @@ void Theme_Treasure(int t)
*/ */
void Theme_Library(int t) void Theme_Library(int t)
{ {
int librnd[6] = { 1, 2, 2, 5, 2, 1 }; int librnd[4] = { 1, 2, 2, 5 };
int monstrnd[6] = { 5, 7, 3, 9, 3, 5 }; int monstrnd[4] = { 5, 7, 3, 9 };
TFit_Shrine(t); TFit_Shrine(t);
@ -733,8 +735,8 @@ void Theme_Library(int t)
*/ */
void Theme_Torture(int t) void Theme_Torture(int t)
{ {
int tortrnd[6] = { 6, 8, 3, 8, 3, 6 }; int tortrnd[4] = { 6, 8, 3, 8 };
int monstrnd[6] = { 6, 8, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 8, 3, 9 };
for (int yp = 1; yp < MAXDUNY - 1; yp++) { for (int yp = 1; yp < MAXDUNY - 1; yp++) {
for (int xp = 1; xp < MAXDUNX - 1; xp++) { for (int xp = 1; xp < MAXDUNX - 1; xp++) {
@ -756,7 +758,7 @@ void Theme_Torture(int t)
*/ */
void Theme_BloodFountain(int t) void Theme_BloodFountain(int t)
{ {
int monstrnd[6] = { 6, 8, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 8, 3, 9 };
TFit_Obj5(t); TFit_Obj5(t);
AddObject(OBJ_BLOODFTN, { themex, themey }); AddObject(OBJ_BLOODFTN, { themex, themey });
@ -770,8 +772,8 @@ void Theme_BloodFountain(int t)
*/ */
void Theme_Decap(int t) void Theme_Decap(int t)
{ {
int decaprnd[6] = { 6, 8, 3, 8, 3, 6 }; int decaprnd[4] = { 6, 8, 3, 8 };
int monstrnd[6] = { 6, 8, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 8, 3, 9 };
for (int yp = 1; yp < MAXDUNY - 1; yp++) { for (int yp = 1; yp < MAXDUNY - 1; yp++) {
for (int xp = 1; xp < MAXDUNX - 1; xp++) { for (int xp = 1; xp < MAXDUNX - 1; xp++) {
@ -794,7 +796,7 @@ void Theme_Decap(int t)
*/ */
void Theme_PurifyingFountain(int t) void Theme_PurifyingFountain(int t)
{ {
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
TFit_Obj5(t); TFit_Obj5(t);
AddObject(OBJ_PURIFYINGFTN, { themex, themey }); AddObject(OBJ_PURIFYINGFTN, { themex, themey });
@ -808,8 +810,8 @@ void Theme_PurifyingFountain(int t)
*/ */
void Theme_ArmorStand(int t) void Theme_ArmorStand(int t)
{ {
int armorrnd[6] = { 6, 8, 3, 8, 3, 6 }; int armorrnd[4] = { 6, 8, 3, 8 };
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
if (armorFlag) { if (armorFlag) {
TFit_Obj3(themes[t].ttval); TFit_Obj3(themes[t].ttval);
@ -855,7 +857,7 @@ void Theme_GoatShrine(int t)
*/ */
void Theme_Cauldron(int t) void Theme_Cauldron(int t)
{ {
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
TFit_Obj5(t); TFit_Obj5(t);
AddObject(OBJ_CAULDRON, { themex, themey }); AddObject(OBJ_CAULDRON, { themex, themey });
@ -869,7 +871,7 @@ void Theme_Cauldron(int t)
*/ */
void Theme_MurkyFountain(int t) void Theme_MurkyFountain(int t)
{ {
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
TFit_Obj5(t); TFit_Obj5(t);
AddObject(OBJ_MURKYFTN, { themex, themey }); AddObject(OBJ_MURKYFTN, { themex, themey });
@ -883,7 +885,7 @@ void Theme_MurkyFountain(int t)
*/ */
void Theme_TearFountain(int t) void Theme_TearFountain(int t)
{ {
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
TFit_Obj5(t); TFit_Obj5(t);
AddObject(OBJ_TEARFTN, { themex, themey }); AddObject(OBJ_TEARFTN, { themex, themey });
@ -898,8 +900,8 @@ void Theme_TearFountain(int t)
void Theme_BrnCross(int t) void Theme_BrnCross(int t)
{ {
int8_t regionId = themes[t].ttval; int8_t regionId = themes[t].ttval;
int monstrnd[6] = { 6, 8, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 8, 3, 9 };
int bcrossrnd[6] = { 5, 7, 3, 8, 3, 5 }; int bcrossrnd[4] = { 5, 7, 3, 8 };
for (int yp = 0; yp < MAXDUNY; yp++) { for (int yp = 0; yp < MAXDUNY; yp++) {
for (int xp = 0; xp < MAXDUNX; xp++) { for (int xp = 0; xp < MAXDUNX; xp++) {
@ -923,8 +925,8 @@ void Theme_BrnCross(int t)
void Theme_WeaponRack(int t) void Theme_WeaponRack(int t)
{ {
int8_t regionId = themes[t].ttval; int8_t regionId = themes[t].ttval;
int weaponrnd[6] = { 6, 8, 5, 8, 5, 6 }; int weaponrnd[4] = { 6, 8, 5, 8 };
int monstrnd[6] = { 6, 7, 3, 9, 3, 6 }; int monstrnd[4] = { 6, 7, 3, 9 };
if (weaponFlag) { if (weaponFlag) {
TFit_Obj3(regionId); TFit_Obj3(regionId);
@ -964,6 +966,7 @@ void CreateThemeRooms()
if (currlevel == 16 || IsAnyOf(leveltype, DTYPE_NEST, DTYPE_CRYPT)) { if (currlevel == 16 || IsAnyOf(leveltype, DTYPE_NEST, DTYPE_CRYPT)) {
return; return;
} }
ApplyObjectLighting = true; ApplyObjectLighting = true;
for (int i = 0; i < numthemes; i++) { for (int i = 0; i < numthemes; i++) {
themex = 0; themex = 0;

Loading…
Cancel
Save