mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2026-05-16 11:12:07 +00:00
ru:: secret passage becomes simpler, but with more options
This commit is contained in:
+27
-4
@@ -58,7 +58,11 @@ struct ruwall {
|
||||
enum eWall {
|
||||
wAir, wWall, wBouncy, wSpike, wWater, wFrozen, wDoor, wSmashedDoor,
|
||||
wLockedDoor, wFountain, wBluePortal, wOrangePortal, wPlatform, wStaircase,
|
||||
wColumn, wForge, wWoodWall, wShopDoor, wSecretPassage, wSign, wWallSign, wTimeDoor,
|
||||
wColumn, wForge, wWoodWall, wShopDoor,
|
||||
wSecretPassageVHidden, wSecretPassageV,
|
||||
wSecretPassageUHidden, wSecretPassageU,
|
||||
wSecretPassageHHidden, wSecretPassageH,
|
||||
wSign, wWallSign, wTimeDoor,
|
||||
wBottomSpike, wRogueWallHidden, wRogueWall, wRightSlope, wLeftSlope, wLeftSlopedRoof, wRightSlopedRoof,
|
||||
wWeakWall, wStrangeSign, wWalkSpikes, wGUARD };
|
||||
|
||||
@@ -74,12 +78,26 @@ flagtype W_STABLE = 256;
|
||||
flagtype W_DOWNWARD = 512;
|
||||
flagtype W_SLOPE = 1024;
|
||||
flagtype W_PAIN_DOWN = 2048;
|
||||
flagtype W_HYPERBOUNCY = 4096;
|
||||
|
||||
constexpr int qwall = int(wGUARD);
|
||||
|
||||
ruwall r_wall = {"wall", "#", 0xFFFFFFFF, W_BLOCK | W_STABLE, "These kinds of tough walls can never be destroyed."};
|
||||
|
||||
vector<pair<eWall, eWall>> hidden_unhidden = {
|
||||
{wSecretPassageHHidden, wSecretPassageH},
|
||||
{wSecretPassageVHidden, wSecretPassageV},
|
||||
{wSecretPassageUHidden, wSecretPassageU},
|
||||
{wRogueWallHidden, wRogueWall}
|
||||
};
|
||||
|
||||
vector<pair<eWall, eWall>> base_changed = {
|
||||
{wDoor, wSmashedDoor}
|
||||
};
|
||||
|
||||
ruwall walls[qwall] = {
|
||||
{"air", ".", 0x40404080, W_TRANS, "Looks like an empty space, but actually necessary for survival."},
|
||||
{"wall", "#", 0xFFFFFFFF, W_BLOCK | W_STABLE, "These kinds of tough walls can never be destroyed."},
|
||||
r_wall,
|
||||
{"bouncy wall", "#", 0x80FF80FF, W_BLOCK | W_BOUNCY, "Like walls, but things bounce off them."},
|
||||
{"spike", "^", 0xC08080FF, W_TRANS | W_PAIN | W_BLOCKBIRD, "Dangerous!"},
|
||||
{"water", "~", 0x0000FFFF, W_BLOCK | W_TRANS | W_BLOCKBIRD, "Not used yet."},
|
||||
@@ -96,12 +114,17 @@ ruwall walls[qwall] = {
|
||||
{"forge", "&", 0xB0202080, W_TRANS | W_PAIN, "Used by runesmiths."},
|
||||
{"wooden wall", "#", 0xFF8000FF, W_BLOCK | W_STABLE, "These kinds of tough walls can be destroyed with fire."},
|
||||
{"shop door", "#", 0xFFD500FF, W_TRANS, "A powerful door, to protect against shoplifters."},
|
||||
{"secret passage", "#", 0xFFFF40FF, W_PLATFORM | W_BLOCKBIRD, "You have discovered a secret passage from the other side."},
|
||||
r_wall,
|
||||
{"secret trapdoor", "#", 0xFFFF40FF, W_PLATFORM | W_BLOCKBIRD, "A secret passage that becomes obvious once you see it from above and below."},
|
||||
r_wall,
|
||||
{"secret tunnel", "#", 0xFFFF40FF, W_PLATFORM | W_BLOCKBIRD, "A secret passage that becomes obvious once you see it from below."},
|
||||
r_wall,
|
||||
{"secret door", "#", 0xFFFF40FF, W_BLOCKBIRD, "A secret passage that becomes obvious once you see it both from left and right."},
|
||||
{"sign", "X", 0xFFFF40FF, W_TRANS, "You need to wait close to this sign to read it."},
|
||||
{"wall sign", "X", 0xFFFFC0FF, W_BLOCK, "You need to wait close to this sign to read it."},
|
||||
{"time door", "#", 0x8080FFFF, W_BLOCK | W_STABLE, "A powerful door, opened by a mechanism."},
|
||||
{"bottom spike", "v", 0xC08080FF, W_TRANS | W_PAIN | W_BLOCKBIRD | W_DOWNWARD, "A downward-pointing spike. You can fall from above through it safely, but otherwise, it is very dangerous."},
|
||||
{"wall", "#", 0xFFFFFFFF, W_BLOCK | W_STABLE, "These kinds of tough walls can never be destroyed."},
|
||||
r_wall,
|
||||
{"fake wall", "#", 0x404080FF, W_PLATFORM | W_STABLE | W_BLOCKBIRD, "Your rogueish senses have discovered that this wall is fake."},
|
||||
{"right slope", "/", 0xFFFFFFFF, W_STABLE | W_SLOPE, "Slope here."},
|
||||
{"left slope", "\\", 0xFFFFFFFF, W_STABLE | W_SLOPE, "Slope here."},
|
||||
|
||||
@@ -51,7 +51,10 @@ void save_map(string fname) {
|
||||
for(int y=0; y<room_y; y++)
|
||||
for(int x=0; x<room_x; x++) {
|
||||
auto i = r.block_at[y][x] >> 3;
|
||||
if(i == int(wRogueWallHidden)) i = int(wRogueWall);
|
||||
for(auto [hid, vis]: hidden_unhidden)
|
||||
if(i == int(hid)) i = int(vis);
|
||||
for(auto [bas, cha]: base_changed)
|
||||
if(i == int(cha)) i = int(bas);
|
||||
auto& c = code_for[i];
|
||||
if(c == 0 && !code_used.count(walls[i].glyph[0])) c = walls[i].glyph[0];
|
||||
if(c == 0) c = next_code++;
|
||||
@@ -66,7 +69,10 @@ void save_map(string fname) {
|
||||
for(int x=0; x<room_x; x++) {
|
||||
auto v = r.block_at[y][x];
|
||||
auto vi = v >> 3;
|
||||
if(vi == int(wRogueWallHidden)) vi = int(wRogueWall);
|
||||
for(auto [hid, vis]: hidden_unhidden)
|
||||
if(vi == int(hid)) vi = int(vis);
|
||||
for(auto [bas, cha]: base_changed)
|
||||
if(vi == int(cha)) vi = int(bas);
|
||||
print(f, format("%c", (v & 7) == 7 ? 'b' : code_for[vi]));
|
||||
}
|
||||
println(f);
|
||||
@@ -140,8 +146,8 @@ void load_room(fhstream& f, cell *c) {
|
||||
string t = s.substr(2);
|
||||
if(s.size() < 3 || s[1] != ' ') err("load codes", s);
|
||||
for(int i=0; i<qwall; i++) if(walls[i].name == t) {
|
||||
if(i == int(wRogueWall)) i = int(wRogueWallHidden);
|
||||
if(i == int(wSmashedDoor)) i = int(wDoor);
|
||||
for(auto [hid, vis]: hidden_unhidden)
|
||||
if(i == int(vis)) i = int(hid);
|
||||
codes[s[0]] = i;
|
||||
break;
|
||||
}
|
||||
|
||||
+6
-6
@@ -267,7 +267,7 @@ ROOM Climbing the Hill
|
||||
# wall
|
||||
. air
|
||||
\ left slope
|
||||
A secret passage
|
||||
A secret tunnel
|
||||
- platform
|
||||
MAP
|
||||
################................................................................
|
||||
@@ -1272,7 +1272,7 @@ ROOM Mazes of Menace
|
||||
A staircase
|
||||
W wooden wall
|
||||
S shop door
|
||||
P secret passage
|
||||
P secret tunnel
|
||||
MAP
|
||||
################################################################################
|
||||
################################################################################
|
||||
@@ -1285,8 +1285,8 @@ MAP
|
||||
###..........#####...............#######.......###############...........#######
|
||||
###..........+...+...............+.....+.......###############...........#######
|
||||
###..........+...+...............+.....+.......###################--############
|
||||
###..........#####...............#################################AA############
|
||||
###..........#####...............########PP............###########AA############
|
||||
###..........#####...............########PP#######################AA############
|
||||
###..........#####...............########..............###########AA############
|
||||
###..........#####A.............A########..............###########AA############
|
||||
.##..........#####A.............A####################..#######....AA........####
|
||||
.##..........#####...............####################--#######....AA........####
|
||||
@@ -1757,7 +1757,7 @@ ROOM Leap of Faith
|
||||
# wall
|
||||
- staircase
|
||||
. air
|
||||
S secret passage
|
||||
S secret tunnel
|
||||
X wall sign
|
||||
P platform
|
||||
W wooden wall
|
||||
@@ -1786,8 +1786,8 @@ MAP
|
||||
####..........W...//##################..........................................
|
||||
####....!!....W..//###################..........................................
|
||||
........!b....W.//####################..........................................
|
||||
######################################..........................................
|
||||
############SS########################..........................................
|
||||
############..########################..........................................
|
||||
############--########################..........................................
|
||||
############-b########################..........................................
|
||||
############--########################..........................................
|
||||
|
||||
+10
-3
@@ -147,9 +147,16 @@ void render_room_walls(room *r) {
|
||||
|
||||
int cc = c >> 3;
|
||||
|
||||
if(r == current_room && cc == wSecretPassage && r->at(x, y-1) == wWall) {
|
||||
r->replace_block(x, y, wAir);
|
||||
r->replace_block(x, y-1, wSecretPassage);
|
||||
if(r == current_room && cc == wSecretPassageVHidden && r->fov[y+1][x] && r->fov[y-1][x]) {
|
||||
r->replace_block(x, y, wSecretPassageV);
|
||||
}
|
||||
|
||||
if(r == current_room && cc == wSecretPassageUHidden && r->fov[y+1][x]) {
|
||||
r->replace_block(x, y, wSecretPassageU);
|
||||
}
|
||||
|
||||
if(r == current_room && cc == wSecretPassageHHidden && r->fov[y][x-1] && r->fov[y][x+1]) {
|
||||
r->replace_block(x, y, wSecretPassageH);
|
||||
}
|
||||
|
||||
if((c & 7) == 0)
|
||||
|
||||
Reference in New Issue
Block a user