@@ -6,6 +6,16 @@ SUBSYSTEM_DEF(backrooms)
66 var /datum /map_generator/dungeon_generator/backrooms_generator
77 var /datum /generator_theme/picked_theme = / datum / generator_theme
88
9+ // associative list of objects and how much they sell for
10+ var /list /golden_loot = list (
11+ / obj / item/ statuebust = 1000 ,
12+ / obj / item/ reagent_containers/ food/ snacks/ urinalcake = 1000 ,
13+ / obj / item/ bigspoon = 4000 ,
14+ / obj / item/ reagent_containers/ food/ snacks/ burger/ rat = 1200 ,
15+ / obj / item/ extinguisher = 2500 ,
16+ / obj / item/ toy/ plush/ lizard/ azeel = 5000
17+ )
18+
919/ datum / controller/ subsystem/ backrooms/ Initialize(timeofday)
1020#ifdef LOWMEMORYMODE
1121 return SS_INIT_NO_NEED
@@ -16,8 +26,8 @@ SUBSYSTEM_DEF(backrooms)
1626
1727 pick_theme ()
1828 generate_backrooms ()
19- delete_beacons ( )
20- // spawn_anomalies ()
29+ SEND_GLOBAL_SIGNAL ( COMSIG_BACKROOMS_INITIALIZE )
30+ spawn_loot ()
2131 return SS_INIT_SUCCESS
2232
2333/ datum / controller/ subsystem/ backrooms/ proc / pick_theme()
@@ -58,58 +68,81 @@ SUBSYSTEM_DEF(backrooms)
5868 var /turf /wall = current_turf. place_on_top(border, flags = CHANGETURF_DEFER_CHANGE | CHANGETURF_IGNORE_AIR )
5969 wall. resistance_flags |= INDESTRUCTIBLE // make the wall indestructible
6070
61- addtimer (CALLBACK (src , PROC_REF (generate_exit)), 1 MINUTES )
62-
63- / datum / controller/ subsystem/ backrooms/ proc / delete_beacons()
64- var /list /zlevel = SSmapping. levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS )
65- for (var /obj /item/beacon/bacon as anything in GLOB . teleportbeacons)
66- if (bacon. z in zlevel) // if the beacon is in the backrooms, delete it
67- qdel (bacon)
71+ / datum / controller/ subsystem/ backrooms/ proc / spawn_loot()
72+ var /backrooms_level = SSmapping. levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS )
73+ if (! LAZYLEN (backrooms_level))
74+ return
75+ var /number = rand(20 , 50 )
76+ var /turf /destination
77+ var /item_path
78+ var /value
79+ for (var /i in 1 to number)
80+ destination = find_safe_turf(zlevels = backrooms_level, dense_atoms = FALSE )
81+ item_path = pick (golden_loot)
82+ value = golden_loot[item_path]
83+
84+ var /obj /item/thing = new item_path(destination) // spawn the thing and make it gold
85+ thing. AddComponent(/ datum / component/ valuable, value)
6886
6987// //////////////////////////////////////////////////////////////////////////////////
70- // ------------------------------Exit related things -------------------------------//
88+ // -------------------------------Valuable items---- -------------------------------//
7189// //////////////////////////////////////////////////////////////////////////////////
72- / datum / controller/ subsystem/ backrooms/ proc / generate_exit()
73- var /list /backrooms_level = SSmapping. levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS )
74- if (LAZYLEN (backrooms_level))
75- var /turf /way_out = find_safe_turf(zlevels = backrooms_level, dense_atoms = FALSE )
76- new / obj / effect/ portal/ permanent/ one_way/ backrooms(way_out)
77-
78- / obj / effect/ portal/ permanent/ one_way/ backrooms/ get_link_target_turf()
79- var /list /valid_lockers = typecacheof(typesof(/ obj / structure/ closet) - typesof(/ obj / structure/ closet/ body_bag)\
80- - typesof(/ obj / structure/ closet/ secure_closet) - typesof(/ obj / structure/ closet/ cabinet)\
81- - typesof(/ obj / structure/ closet/ cardboard) \
82- - typesof(/ obj / structure/ closet/ supplypod) - typesof(/ obj / structure/ closet/ stasis)\
83- - typesof(/ obj / structure/ closet/ abductor) - typesof(/ obj / structure/ closet/ bluespace), only_root_path = TRUE ) // stolen from bluespace lockers
84-
85- var /list /lockers_list = list ()
86- for (var /obj /structure/closet/L in GLOB . lockers)
87- if (! is_station_level(L. z))
88- continue
89- if (! is_type_in_typecache(L, valid_lockers))
90- continue
91- if (L. opened)
92- continue
93- lockers_list += L
94- var /obj /structure/closet/exit = pick (lockers_list)
95- if (! exit)
96- exit = new (get_safe_random_station_turf())
97- return get_turf(exit)
98-
99- / obj / effect/ portal/ permanent/ one_way/ backrooms/ teleport( atom/movable / M, force)
100- . = .. ()
101- if (. )
102- var /obj /structure/closet/end = locate () in get_turf (M)
103- if (end)
104- M. forceMove(end) // get in the locker, nerd
90+ / datum / export/ backrooms
91+ // cost is irrelevant because we overwrite the proc
92+ unit_name = " golden object"
93+ export_types = list (/ obj / item) // sell any object so long as it has the component
94+
95+ / datum / export/ backrooms/ applies_to( obj / O, allowed_categories = NONE , apply_elastic = TRUE )
96+ var /datum /component/valuable/value = O. GetComponent(/ datum / component/ valuable)
97+ if (! value || ! istype(value))
98+ return FALSE
99+ return .. ()
100+
101+ / datum / export/ backrooms/ get_cost( obj / O, allowed_categories = NONE , apply_limit = TRUE )
102+ var /amount = get_amount(O)
103+ var /datum /component/valuable/value = O. GetComponent(/ datum / component/ valuable)
104+ if (value && istype(value))
105+ return round(value. cost * amount)
106+ return 0
107+
108+
109+ / datum / component/ valuable
110+ // /how much the item is worth
111+ var /cost
112+
113+ / datum / component/ valuable/ Initialize(cost)
114+ if (! isitem(parent))
115+ return COMPONENT_INCOMPATIBLE
116+ src . cost = cost
117+
118+ / datum / component/ valuable/ RegisterWithParent()
119+ RegisterSignal (parent, COMSIG_ATOM_EXAMINE , PROC_REF (on_examine))
120+ if (isitem(parent))
121+ var /obj /item/goldplate = parent
122+ goldplate. add_atom_colour(" #ffd700" , FIXED_COLOUR_PRIORITY )
123+
124+ / datum / component/ valuable/ UnregisterFromParent()
125+ UnregisterSignal (parent, COMSIG_ATOM_EXAMINE , PROC_REF (on_examine))
126+
127+ / datum / component/ valuable/ proc / on_examine( atom / eaten_light, mob / examiner, list / examine_text)
128+ SIGNAL_HANDLER
129+ examine_text += span_notice(" This looks valuable, it could probably be sold for a lot." )
130+ return NONE
105131
132+ // //////////////////////////////////////////////////////////////////////////////////
133+ // ----------------------------Entrance and exit portal----------------------------//
134+ // //////////////////////////////////////////////////////////////////////////////////
106135/ obj / effect/ portal/ permanent/ backrooms
107- icon_state = " wooden_tv"
136+ icon = ' icons/obj/computer.dmi'
137+ icon_state = " television"
108138
109139/ obj / effect/ spawner/ backrooms_portal
110140 name = " backrooms two way portal spawner"
111141
112142/ obj / effect/ spawner/ backrooms_portal/ Initialize(mapload)
143+ RegisterSignal (SSdcs, COMSIG_BACKROOMS_INITIALIZE , PROC_REF (spawn_portals))
144+
145+ / obj / effect/ spawner/ backrooms_portal/ proc / spawn_portals()
113146 var /backrooms_level = SSmapping. levels_by_trait(ZTRAIT_PROCEDURAL_MAINTS )
114147 if (LAZYLEN (backrooms_level))
115148 var /turf /way_out = find_safe_turf(zlevels = backrooms_level, dense_atoms = FALSE )
0 commit comments