mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 05:52:59 +00:00 
			
		
		
		
	ru:: time orbs
This commit is contained in:
		| @@ -67,6 +67,7 @@ struct room { | ||||
|   bool fov[room_y][room_x]; | ||||
|   bool which_map_rendered; | ||||
|   bool infile, need_rerender; | ||||
|   int timed_orb_end; | ||||
|  | ||||
|   vector<unique_ptr<struct entity>> entities; | ||||
|  | ||||
| @@ -327,6 +328,20 @@ struct pendulum_platform : public moving_platform { | ||||
|   string get_help() override { return "These pendulum platforms go back and forth between two locations, taking the shortest path possible."; } | ||||
|   }; | ||||
|  | ||||
| struct timed_orb : public entity { | ||||
|   int duration; | ||||
|   xy siz() override { return {18, 18}; } | ||||
|   string glyph() override { return "O"; } | ||||
|   color_t color() override { | ||||
|     println(hlog, tie(gframeid, current_room->timed_orb_end)); | ||||
|     if(gframeid > current_room->timed_orb_end) return 0x8080FFFF; | ||||
|     return gradient(0x404080FF, 0x8080FFFF, -1, cos((gframeid - current_room->timed_orb_end) * TAU * 5 / game_fps), 1); | ||||
|     } | ||||
|   void act() override; | ||||
|   string get_name() override { return "time orb"; } | ||||
|   string get_help() override { return "These orbs activate mechanisms for a limited time."; } | ||||
|   }; | ||||
|  | ||||
| struct npc_or_trader : public entity { | ||||
|   string text; | ||||
|   string name; | ||||
|   | ||||
| @@ -268,6 +268,19 @@ extern int gold_id; | ||||
| string shopitem::glyph() { if(bought) return powers[gold_id].get_glyph(); else return item::glyph(); } | ||||
| color_t shopitem::color() { if(bought) return powers[gold_id].get_color(); else return item::color(); } | ||||
|  | ||||
| void timed_orb::act() { | ||||
|   if(gframeid > current_room->timed_orb_end) { | ||||
|     walls[wTimeDoor].glyph = '+'; | ||||
|     walls[wTimeDoor].flags = W_BLOCK | W_BLOCKBIRD; | ||||
|     } | ||||
|   else { | ||||
|     walls[wTimeDoor].glyph = '\''; | ||||
|     walls[wTimeDoor].flags = W_TRANS; | ||||
|     } | ||||
|   if(intersect(get_pixel_bbox(), m.get_pixel_bbox())) | ||||
|     current_room->timed_orb_end = gframeid + duration; | ||||
|   } | ||||
|  | ||||
| void trader::act() { | ||||
|   bool any_purchases = false; | ||||
|   for(auto& e: current_room->entities) if(auto si = e->as_shopitem()) if(!si->existing) any_purchases = true; | ||||
|   | ||||
| @@ -58,7 +58,7 @@ 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, wGUARD }; | ||||
|   wColumn, wForge, wWoodWall, wShopDoor, wSecretPassage, wSign, wWallSign, wTimeDoor, wGUARD }; | ||||
|  | ||||
| flagtype W_BLOCK = 1; | ||||
| flagtype W_TRANS = 2; | ||||
| @@ -94,6 +94,7 @@ ruwall walls[qwall] = { | ||||
|   {"secret passage", "#", 0xFFFF40FF, W_PLATFORM | W_BLOCKBIRD, "You have discovered a secret passage from the other side."}, | ||||
|   {"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."}, | ||||
|   }; | ||||
|  | ||||
| int sel = 1; | ||||
|   | ||||
| @@ -1400,10 +1400,10 @@ MAP | ||||
| ####....XXX..................................................................... | ||||
| ####.....|...................................................................... | ||||
| ####.....|...................................................................... | ||||
| ####--########################################################################## | ||||
| ####--########################################################################## | ||||
| ####-b............................................^^^^^......^.................. | ||||
| ####--.................................^^.........^..........^.................. | ||||
| ####--##################################################################--###### | ||||
| ####--##################################################################--###### | ||||
| ####-b............................................^^^^^......^..........--...... | ||||
| ####--.................................^^.........^..........^..........--...... | ||||
| ####-b................^...........................^..........^.................. | ||||
| ####--#########--.............................^...^..........^.....--########### | ||||
| ####-b##########-.................................^..........^.....-############ | ||||
| @@ -1451,3 +1451,60 @@ VTRAP 410 56 | ||||
| VTRAP 420 56 | ||||
| VTRAP 430 56 | ||||
| OK | ||||
|  | ||||
| MOVE 4 Bouncy Spike Maze | ||||
| ROOM Timed Passage | ||||
| # wall | ||||
| ' shop door | ||||
| + time door | ||||
| - platform | ||||
| . air | ||||
| A staircase | ||||
| MAP | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ..........................##..................################################## | ||||
| ..........................##..................################################## | ||||
| ..........................##..................################################## | ||||
| ..........................##..--..--..--..--..################################## | ||||
| ..........................''..................#####################....#####..## | ||||
| ..........................'b..................#####################....####....# | ||||
| ........................###########################################............# | ||||
| ######################--###########################################............# | ||||
| ######################--####################################################--## | ||||
| ##....................-b...................................................+-b.. | ||||
| ##.........................................................................+.... | ||||
| ##.........................................................................+.... | ||||
| ####----#############################################################-------#### | ||||
| #####A...##########################################################......A###### | ||||
| ######A...#######################################################......A######## | ||||
| #######A.....#################################################.......A########## | ||||
| ########A.......############################################......A############# | ||||
| #########A.............#################################........A############### | ||||
| ###########A....................##################............A################# | ||||
| #############A.......................########...............A################### | ||||
| #################A........................................A##################### | ||||
| #####################AA.................................A####################### | ||||
| ############################A........................A########################## | ||||
| ##################################A............A################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| #b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b | ||||
| ################################################################################ | ||||
| #b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b | ||||
| ################################################################################ | ||||
| #b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b | ||||
| TIMEORB 30 117 3.9 | ||||
| TIMEORB 560 79 20 | ||||
| TRADER 236 67 | ||||
| Jack the trader | ||||
| Do you want to buy anthing?\n\nSorry for the traps, last week a thief stole my stuff and escaped through some secret door. So I installed some for protection.\n\nNo idea where it is... | ||||
| OK | ||||
|  | ||||
|   | ||||
| @@ -180,6 +180,13 @@ void load_room(fhstream& f, cell *c) { | ||||
|         b->respawn = b->where; b->postfix(); | ||||
|         r.entities.emplace_back(std::move(b)); | ||||
|         } | ||||
|       else if(cap == "TIMEORB") { | ||||
|         auto b = std::make_unique<timed_orb>(); | ||||
|         ld dur = 0; | ||||
|         sscanf(param.c_str(), "%lf%lf%lf", &b->where.x, &b->where.y, &dur); | ||||
|         b->duration = dur * game_fps; | ||||
|         r.entities.emplace_back(std::move(b)); | ||||
|         } | ||||
|       else if(cap == "BAT") { | ||||
|         auto b = std::make_unique<bat>(); | ||||
|         sscanf(param.c_str(), "%lf%lf", &b->where.x, &b->where.y); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue