mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-26 03:17:39 +00:00 
			
		
		
		
	fixed stalemate wrt the other moPair; fixed Magnetic warnings; improved Ruins balance; added the cases for Ruin Walls
This commit is contained in:
		| @@ -277,7 +277,7 @@ int itemclass(eItem i) { | |||||||
|     i == itGreenGrass || i == itBull || |     i == itGreenGrass || i == itBull || | ||||||
|     i == itLavaLily || i == itHunting || |     i == itLavaLily || i == itHunting || | ||||||
|     i == itBlizzard || i == itTerra || i == itGlowCrystal || i == itSnake || |     i == itBlizzard || i == itTerra || i == itGlowCrystal || i == itSnake || | ||||||
|     i == itDock || i == itRuins || i == itSwitch |     i == itDock || i == itRuins || i == itSwitch || i == itMagnet | ||||||
|     ) |     ) | ||||||
|     return IC_TREASURE; |     return IC_TREASURE; | ||||||
|   if(i == itSavedPrincess || i == itStrongWind || i == itWarning) |   if(i == itSavedPrincess || i == itStrongWind || i == itWarning) | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								game.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								game.cpp
									
									
									
									
									
								
							| @@ -1054,6 +1054,9 @@ bool stalemate1::isKilled(cell *w) { | |||||||
|     if(head1 == head2 && dragon::totalhp(head1) ==1) return true; |     if(head1 == head2 && dragon::totalhp(head1) ==1) return true; | ||||||
|     } |     } | ||||||
|    |    | ||||||
|  |   if((w->monst == moPair || isMagneticPole(w->monst)) && killed && w->mov[w->mondir] == killed) | ||||||
|  |     return true; | ||||||
|  |    | ||||||
|   if(w->monst == moKrakenT && killed && killed->monst == moKrakenT && killed->hitpoints) { |   if(w->monst == moKrakenT && killed && killed->monst == moKrakenT && killed->hitpoints) { | ||||||
|     cell *head1 = w->mov[w->mondir]; |     cell *head1 = w->mov[w->mondir]; | ||||||
|     cell *head2 = killed->mov[killed->mondir]; |     cell *head2 = killed->mov[killed->mondir]; | ||||||
| @@ -1485,7 +1488,7 @@ void prespill(cell* c, eWall t, int rad, cell *from) { | |||||||
|     c->wall == waVinePlant || isFire(c) || c->wall == waBonfireOff || c->wall == waVineHalfA || c->wall == waVineHalfB || |     c->wall == waVinePlant || isFire(c) || c->wall == waBonfireOff || c->wall == waVineHalfA || c->wall == waVineHalfB || | ||||||
|     c->wall == waCamelotMoat || c->wall == waSea || c->wall == waCTree || |     c->wall == waCamelotMoat || c->wall == waSea || c->wall == waCTree || | ||||||
|     c->wall == waRubble || c->wall == waGargoyleFloor || c->wall == waGargoyle || |     c->wall == waRubble || c->wall == waGargoyleFloor || c->wall == waGargoyle || | ||||||
|     c->wall == waRose || c->wall == waPetrified || c->wall == waPetrifiedBridge) |     c->wall == waRose || c->wall == waPetrified || c->wall == waPetrifiedBridge || c->wall == waRuinWall) | ||||||
|       t = waTemporary; |       t = waTemporary; | ||||||
|  |  | ||||||
|   if(c->wall == waSulphur) { |   if(c->wall == waSulphur) { | ||||||
| @@ -1540,7 +1543,7 @@ bool earthFloor(cell *c) { | |||||||
|   if(c->wall == waDeadwall) { c->wall = waDeadfloor; return true; } |   if(c->wall == waDeadwall) { c->wall = waDeadfloor; return true; } | ||||||
|   if(c->wall == waDune) { c->wall = waNone; return true; } |   if(c->wall == waDune) { c->wall = waNone; return true; } | ||||||
|   if(c->wall == waStone && c->land != laTerracotta) { c->wall = waNone; return true; } |   if(c->wall == waStone && c->land != laTerracotta) { c->wall = waNone; return true; } | ||||||
|   if(c->wall == waAncientGrave || c->wall == waFreshGrave) { |   if(c->wall == waAncientGrave || c->wall == waFreshGrave || c->wall == waRuinWall) { | ||||||
|     c->wall = waNone; |     c->wall = waNone; | ||||||
|     return true; |     return true; | ||||||
|     } |     } | ||||||
| @@ -1591,6 +1594,11 @@ bool earthWall(cell *c) { | |||||||
|     c->wall = waDune; |     c->wall = waDune; | ||||||
|     return true; |     return true; | ||||||
|     } |     } | ||||||
|  |   if(c->wall == waNone && c->land == laRuins) { | ||||||
|  |     c->item = itNone; | ||||||
|  |     c->wall = waRuinWall; | ||||||
|  |     return true; | ||||||
|  |     } | ||||||
|   if(c->wall == waNone && isElemental(c->land)) { |   if(c->wall == waNone && isElemental(c->land)) { | ||||||
|     c->item = itNone; |     c->item = itNone; | ||||||
|     c->wall = waStone; |     c->wall = waStone; | ||||||
| @@ -1768,7 +1776,7 @@ void explodeMine(cell *c) { | |||||||
|       placeWater(c, c); |       placeWater(c, c); | ||||||
|       } |       } | ||||||
|     else if(c2->wall == waPalace || c2->wall == waOpenGate || c2->wall == waClosedGate || |     else if(c2->wall == waPalace || c2->wall == waOpenGate || c2->wall == waClosedGate || | ||||||
|       c2->wall == waSandstone || c2->wall == waMetal || c2->wall == waSaloon) { |       c2->wall == waSandstone || c2->wall == waMetal || c2->wall == waSaloon || c2->wall == waRuinWall) { | ||||||
|       c2->wall = waNone; |       c2->wall = waNone; | ||||||
|       makeflame(c2, 10, false); |       makeflame(c2, 10, false); | ||||||
|       } |       } | ||||||
| @@ -3962,6 +3970,7 @@ void explodeAround(cell *c) { | |||||||
|       if(c2->wall == waPlatform) c2->wall = waNone; |       if(c2->wall == waPlatform) c2->wall = waNone; | ||||||
|       if(c2->wall == waStone) c2->wall = waNone, destroyTrapsAround(c2); |       if(c2->wall == waStone) c2->wall = waNone, destroyTrapsAround(c2); | ||||||
|       if(c2->wall == waRose) c2->wall = waNone; |       if(c2->wall == waRose) c2->wall = waNone; | ||||||
|  |       if(c2->wall == waRuinWall) c2->wall = waNone; | ||||||
|       if(c2->wall == waLadder) c2->wall = waNone; |       if(c2->wall == waLadder) c2->wall = waNone; | ||||||
|       if(c2->wall == waGargoyle) c2->wall = waNone; |       if(c2->wall == waGargoyle) c2->wall = waNone; | ||||||
|       if(c2->wall == waSandstone) c2->wall = waNone; |       if(c2->wall == waSandstone) c2->wall = waNone; | ||||||
|   | |||||||
| @@ -1925,7 +1925,7 @@ void giantLandSwitch(cell *c, int d, cell *from) { | |||||||
|           forCellEx(c2, c) if(out_ruin(c2)) |           forCellEx(c2, c) if(out_ruin(c2)) | ||||||
|             c->wall = waRuinWall; |             c->wall = waRuinWall; | ||||||
|           } |           } | ||||||
|         if(hrand(50000) < kf && !c->monst && !c->wall) { |         if(hrand(40000) < kf && !c->monst && !c->wall) { | ||||||
|           cell *c1 = c; |           cell *c1 = c; | ||||||
|           cell *c2 = createMov(c1, hrand(c1->type)); |           cell *c2 = createMov(c1, hrand(c1->type)); | ||||||
|           if(c2->monst || c2->wall) return; |           if(c2->monst || c2->wall) return; | ||||||
| @@ -1936,7 +1936,7 @@ void giantLandSwitch(cell *c, int d, cell *from) { | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       ONEMPTY { |       ONEMPTY { | ||||||
|         if(hrand(10000) < kf && !c->monst) { |         if(hrand(7000) < kf && !c->monst) { | ||||||
|           c->monst = pick(moHexDemon, moHexDemon, moHexDemon, moAltDemon, moAltDemon, moMonk, moMonk, moSkeleton, moSkeleton, moCrusher); |           c->monst = pick(moHexDemon, moHexDemon, moHexDemon, moAltDemon, moAltDemon, moMonk, moMonk, moSkeleton, moSkeleton, moCrusher); | ||||||
|           c->hitpoints = 3; |           c->hitpoints = 3; | ||||||
|           } |           } | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								landlock.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								landlock.cpp
									
									
									
									
									
								
							| @@ -215,6 +215,9 @@ int isNative(eLand l, eMonster m) { | |||||||
|     case laRuins: |     case laRuins: | ||||||
|       return among(m, moPair, moHexDemon, moAltDemon, moMonk, moCrusher) ? 2 : |       return among(m, moPair, moHexDemon, moAltDemon, moMonk, moCrusher) ? 2 : | ||||||
|         m == moSkeleton ? 1 : 0; |         m == moSkeleton ? 1 : 0; | ||||||
|  |        | ||||||
|  |     case laMagnetic: | ||||||
|  |       return isMagneticPole(m) ? 2 : 0; | ||||||
|     } |     } | ||||||
|   return false; |   return false; | ||||||
|   } |   } | ||||||
| @@ -311,6 +314,7 @@ eItem treasureType(eLand l) { | |||||||
|     case laDocks: return itDock; |     case laDocks: return itDock; | ||||||
|     case laRuins: return itRuins; |     case laRuins: return itRuins; | ||||||
|     case laSwitch: return itSwitch; |     case laSwitch: return itSwitch; | ||||||
|  |     case laMagnetic: return itMagnet; | ||||||
|      |      | ||||||
|     case laCA: return itNone; |     case laCA: return itNone; | ||||||
|     } |     } | ||||||
| @@ -549,6 +553,9 @@ bool landUnlocked(eLand l) { | |||||||
|      |      | ||||||
|     case laRuins: |     case laRuins: | ||||||
|       return kills[moSkeleton]; |       return kills[moSkeleton]; | ||||||
|  |      | ||||||
|  |     case laMagnetic: | ||||||
|  |       return false; // not implemented | ||||||
|     } |     } | ||||||
|   return false; |   return false; | ||||||
|   } |   } | ||||||
| @@ -1222,6 +1229,9 @@ int isLandValid(eLand l) { | |||||||
|    |    | ||||||
|   if(l == laStorms && torus)  |   if(l == laStorms && torus)  | ||||||
|     return 3; |     return 3; | ||||||
|  |    | ||||||
|  |   if(l == laMagnetic) | ||||||
|  |     return 0; | ||||||
|  |  | ||||||
|   return 2; |   return 2; | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -114,7 +114,7 @@ const orbinfo orbinfos[ORBLINES] = { | |||||||
|   {orbgenflags::S_GUEST, laSwitch, 2000, 0, itOrbSpace},  |   {orbgenflags::S_GUEST, laSwitch, 2000, 0, itOrbSpace},  | ||||||
|   {orbgenflags::S_NATIVE, laSwitch, 2000, 3000, itOrbPhasing},  |   {orbgenflags::S_NATIVE, laSwitch, 2000, 3000, itOrbPhasing},  | ||||||
|   {orbgenflags::S_NATIVE, laMagnetic, 2000, 3000, itOrbMagnetism}, |   {orbgenflags::S_NATIVE, laMagnetic, 2000, 3000, itOrbMagnetism}, | ||||||
|   {orbgenflags::S_NATIVE, laRuins, 2000, 3000, itOrbSlaying}, |   {orbgenflags::S_NATIVE, laRuins, 1200, 2500, itOrbSlaying}, | ||||||
|   {orbgenflags::S_NATIVE, laWhirlpool, 0, 2000, itOrbWater}, // needs to be last |   {orbgenflags::S_NATIVE, laWhirlpool, 0, 2000, itOrbWater}, // needs to be last | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								orbs.cpp
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								orbs.cpp
									
									
									
									
									
								
							| @@ -187,6 +187,7 @@ void flashCell(cell *c, eMonster killer, flagtype flags) { | |||||||
|   if(c->wall == waGiantRug)  c->wall = waNone; |   if(c->wall == waGiantRug)  c->wall = waNone; | ||||||
|   if(c->wall == waMirror)    c->wall = waNone; |   if(c->wall == waMirror)    c->wall = waNone; | ||||||
|   if(c->wall == waCloud)     c->wall = waNone; |   if(c->wall == waCloud)     c->wall = waNone; | ||||||
|  |   if(c->wall == waRuinWall)  c->wall = waNone; | ||||||
|   if(c->wall == waDune)      c->wall = waNone; |   if(c->wall == waDune)      c->wall = waNone; | ||||||
|   if(c->wall == waSaloon)    c->wall = waNone; |   if(c->wall == waSaloon)    c->wall = waNone; | ||||||
|   if(c->wall == waSandstone) c->wall = waNone; |   if(c->wall == waSandstone) c->wall = waNone; | ||||||
| @@ -379,6 +380,7 @@ void castLightningBolt(cellwalker lig) { | |||||||
|     if(c->wall == waDeadwall)  c->wall = waDeadfloor2, brk = true; |     if(c->wall == waDeadwall)  c->wall = waDeadfloor2, brk = true; | ||||||
|     if(c->wall == waGlass)     c->wall = waNone, spin = true; |     if(c->wall == waGlass)     c->wall = waNone, spin = true; | ||||||
|     if(c->wall == waDune)      c->wall = waNone, brk = true; |     if(c->wall == waDune)      c->wall = waNone, brk = true; | ||||||
|  |     if(c->wall == waRuinWall)  c->wall = waNone; | ||||||
|     if(c->wall == waIcewall)   c->wall = waNone, brk = true; |     if(c->wall == waIcewall)   c->wall = waNone, brk = true; | ||||||
|     if(c->wall == waAncientGrave) c->wall = waNone, spin = true; |     if(c->wall == waAncientGrave) c->wall = waNone, spin = true; | ||||||
|     if(c->wall == waFreshGrave) c->wall = waNone, spin = true; |     if(c->wall == waFreshGrave) c->wall = waNone, spin = true; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue