mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 16:18:01 +01:00
Merge branch 'master' into turn-both-keys
Conflicts: tgui/assets/tgui.js
This commit is contained in:
@@ -30,6 +30,8 @@
|
||||
var/datum/gas_mixture/air
|
||||
|
||||
var/obj/effect/hotspot/active_hotspot
|
||||
var/atmos_cooldown = 0
|
||||
var/planetary_atmos = FALSE //air will revert to initial_gas_mix over time
|
||||
|
||||
var/list/atmos_overlay_types = list() //gas IDs of current active gas overlays
|
||||
|
||||
@@ -129,6 +131,9 @@
|
||||
var/list/adjacent_turfs = atmos_adjacent_turfs
|
||||
var/datum/excited_group/our_excited_group = excited_group
|
||||
var/adjacent_turfs_length = adjacent_turfs.len
|
||||
atmos_cooldown++
|
||||
if (planetary_atmos)
|
||||
adjacent_turfs_length++
|
||||
|
||||
for(var/t in adjacent_turfs)
|
||||
var/turf/open/enemy_tile = t
|
||||
@@ -179,6 +184,18 @@
|
||||
|
||||
/******************* GROUP HANDLING FINISH *********************************************************************/
|
||||
|
||||
if (planetary_atmos) //share our air with the "atmosphere" "above" the turf
|
||||
var/datum/gas_mixture/G = new
|
||||
G.copy_from_turf(src)
|
||||
G.archive()
|
||||
if(air.compare(G))
|
||||
if(!our_excited_group)
|
||||
var/datum/excited_group/EG = new
|
||||
EG.add_turf(src)
|
||||
our_excited_group = excited_group
|
||||
air.share(G, adjacent_turfs_length)
|
||||
last_share_check()
|
||||
|
||||
air.react()
|
||||
|
||||
update_visuals()
|
||||
@@ -193,9 +210,12 @@
|
||||
if(consider_superconductivity(starting = 1))
|
||||
remove = 0
|
||||
|
||||
if (atmos_cooldown > EXCITED_GROUP_DISMANTLE_CYCLES*2)
|
||||
SSair.remove_from_active(src)
|
||||
if(!our_excited_group && remove == 1)
|
||||
SSair.remove_from_active(src)
|
||||
|
||||
|
||||
/turf/open/proc/share_air(turf/open/T, fire_count, adjacent_turfs_length)
|
||||
if(T.current_cycle < fire_count)
|
||||
var/difference = air.share(T.air, adjacent_turfs_length)
|
||||
@@ -217,8 +237,10 @@
|
||||
/turf/open/proc/last_share_check()
|
||||
if(air.last_share > MINIMUM_AIR_TO_SUSPEND)
|
||||
excited_group.reset_cooldowns()
|
||||
atmos_cooldown = 0
|
||||
else if(air.last_share > MINIMUM_MOLES_DELTA_TO_MOVE)
|
||||
excited_group.dismantle_cooldown = 0
|
||||
atmos_cooldown = 0
|
||||
|
||||
/turf/open/proc/high_pressure_movements()
|
||||
for(var/atom/movable/M in src)
|
||||
@@ -295,6 +317,7 @@
|
||||
for(var/t in turf_list)
|
||||
var/turf/open/T = t
|
||||
T.air.copy_from(A)
|
||||
T.atmos_cooldown = 0
|
||||
T.update_visuals()
|
||||
|
||||
breakdown_cooldown = 0
|
||||
|
||||
@@ -41,8 +41,9 @@ var/global/dmm_suite/preloader/_preloader = new
|
||||
var/list/grid_models = list()
|
||||
var/key_len = 0
|
||||
|
||||
dmmRegex.next = 1
|
||||
while(dmmRegex.Find(tfile, dmmRegex.next))
|
||||
var/stored_index = 1
|
||||
while(dmmRegex.Find(tfile, stored_index))
|
||||
stored_index = dmmRegex.next
|
||||
|
||||
// "aa" = (/type{vars=blah})
|
||||
if(dmmRegex.group[1]) // Model
|
||||
|
||||
@@ -88,6 +88,34 @@
|
||||
jetpack = new jetpack(src)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/tank/jetpack/suit))
|
||||
if(jetpack)
|
||||
user << "<span class='warning'>[src] already has a jetpack installed.</span>"
|
||||
return
|
||||
if(src == user.get_item_by_slot(slot_wear_suit)) //Make sure the player is not wearing the suit before applying the upgrade.
|
||||
user << "<span class='warning'>You cannot install the upgrade to [src] while wearing it.</span>"
|
||||
return
|
||||
|
||||
if(user.unEquip(I))
|
||||
jetpack = I
|
||||
I.loc = src
|
||||
user << "<span class='notice'>You successfully install the jetpack into [src].</span>"
|
||||
|
||||
else if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(!jetpack)
|
||||
user << "<span class='warning'>[src] has no jetpack installed.</span>"
|
||||
return
|
||||
if(src == user.get_item_by_slot(slot_wear_suit))
|
||||
user << "<span class='warning'>You cannot remove the jetpack from [src] while wearing it.</span>"
|
||||
return
|
||||
|
||||
jetpack.turn_off()
|
||||
jetpack.loc = get_turf(src)
|
||||
jetpack = null
|
||||
user << "<span class='notice'>You successfully remove the jetpack from [src].</span>"
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
|
||||
..()
|
||||
if(jetpack)
|
||||
|
||||
@@ -1,21 +1,15 @@
|
||||
/datum/round_event_control/meteor_wave/dust
|
||||
/datum/round_event_control/space_dust
|
||||
name = "Minor Space Dust"
|
||||
typepath = /datum/round_event/meteor_wave/dust
|
||||
typepath = /datum/round_event/space_dust
|
||||
weight = 200
|
||||
max_occurrences = 1000
|
||||
earliest_start = 0
|
||||
alertadmins = 0
|
||||
|
||||
/datum/round_event/meteor_wave/dust
|
||||
|
||||
/datum/round_event/space_dust
|
||||
startWhen = 1
|
||||
endWhen = 2
|
||||
announceWhen = 0
|
||||
|
||||
/datum/round_event/meteor_wave/dust/announce()
|
||||
return
|
||||
|
||||
/datum/round_event/meteor_wave/dust/start()
|
||||
/datum/round_event/space_dust/start()
|
||||
spawn_meteors(1, meteorsC)
|
||||
|
||||
/datum/round_event/meteor_wave/dust/tick()
|
||||
return
|
||||
|
||||
@@ -38,6 +38,8 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
|
||||
/obj/effect/immovablerod/New(atom/start, atom/end)
|
||||
..()
|
||||
if(SSaugury)
|
||||
SSaugury.register_doom(src, 2000)
|
||||
z_original = z
|
||||
destination = end
|
||||
notify_ghosts("\A [src] is inbound!",
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/datum/round_event_control/meteor_wave/major_dust
|
||||
name = "Major Space Dust"
|
||||
typepath = /datum/round_event/meteor_wave/major_dust
|
||||
weight = 30
|
||||
|
||||
/datum/round_event/meteor_wave/major_dust
|
||||
wave_name = "space dust"
|
||||
|
||||
/datum/round_event/meteor_wave/major_dust/announce()
|
||||
var/reason = pick(
|
||||
"The station is passing through a debris cloud, expect minor damage \
|
||||
to external fittings and fixtures.",
|
||||
"Nanotrasen Superweapons Division is testing a new prototype \
|
||||
[pick("field","projection","nova","super-colliding","reactive")] \
|
||||
[pick("cannon","artillery","tank","cruiser","\[REDACTED\]")], \
|
||||
some mild debris is expected.",
|
||||
"A neighbouring station is throwing rocks at you. (Perhaps they've \
|
||||
grown tired of your messages.)")
|
||||
priority_announce(pick(reason), "Collision Alert")
|
||||
@@ -1,12 +1,11 @@
|
||||
/datum/round_event_control/meteor_wave/meaty
|
||||
name = "Meaty Ore Wave"
|
||||
name = "Meteor Wave: Meaty"
|
||||
typepath = /datum/round_event/meteor_wave/meaty
|
||||
weight = 1
|
||||
weight = 2
|
||||
max_occurrences = 1
|
||||
|
||||
/datum/round_event/meteor_wave/meaty
|
||||
wave_name = "meaty"
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/announce()
|
||||
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.",'sound/AI/meteors.ogg')
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/tick()
|
||||
if(IsMultiple(activeFor, 3))
|
||||
spawn_meteors(5, meteorsB) //meteor list types defined in gamemode/meteor/meteors.dm
|
||||
@@ -1,5 +1,7 @@
|
||||
// Normal strength
|
||||
|
||||
/datum/round_event_control/meteor_wave
|
||||
name = "Meteor Wave"
|
||||
name = "Meteor Wave: Normal"
|
||||
typepath = /datum/round_event/meteor_wave
|
||||
weight = 5
|
||||
min_players = 5
|
||||
@@ -10,25 +12,57 @@
|
||||
endWhen = 66
|
||||
announceWhen = 1
|
||||
var/list/wave_type
|
||||
var/wave_name = "normal"
|
||||
|
||||
/datum/round_event/meteor_wave/New()
|
||||
..()
|
||||
random_wave_type()
|
||||
if(!wave_type)
|
||||
determine_wave_type()
|
||||
|
||||
/datum/round_event/meteor_wave/proc/random_wave_type()
|
||||
var/picked_wave = pickweight(list("normal" = 50, "threatening" = 40, "catastrophic" = 10))
|
||||
switch(picked_wave)
|
||||
/datum/round_event/meteor_wave/proc/determine_wave_type()
|
||||
if(!wave_name)
|
||||
wave_name = pickweight(list(
|
||||
"normal" = 50,
|
||||
"threatening" = 40,
|
||||
"catastrophic" = 10))
|
||||
switch(wave_name)
|
||||
if("normal")
|
||||
wave_type = meteors_normal
|
||||
if("threatening")
|
||||
wave_type = meteors_threatening
|
||||
if("catastrophic")
|
||||
wave_type = meteors_catastrophic
|
||||
if("meaty")
|
||||
wave_type = meteorsB
|
||||
if("space dust")
|
||||
wave_type = meteorsC
|
||||
else
|
||||
WARNING("Wave name of [wave_name] not recognised.")
|
||||
kill()
|
||||
|
||||
/datum/round_event/meteor_wave/announce()
|
||||
priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/AI/meteors.ogg')
|
||||
|
||||
|
||||
/datum/round_event/meteor_wave/tick()
|
||||
if(IsMultiple(activeFor, 3))
|
||||
spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm
|
||||
|
||||
/datum/round_event_control/meteor_wave/threatening
|
||||
name = "Meteor Wave: Threatening"
|
||||
typepath = /datum/round_event/meteor_wave/threatening
|
||||
weight = 4
|
||||
min_players = 5
|
||||
max_occurrences = 3
|
||||
|
||||
/datum/round_event/meteor_wave/threatening
|
||||
wave_name = "threatening"
|
||||
|
||||
/datum/round_event_control/meteor_wave/catastrophic
|
||||
name = "Meteor Wave: Catastrophic"
|
||||
typepath = /datum/round_event/meteor_wave/catastrophic
|
||||
weight = 1
|
||||
min_players = 5
|
||||
max_occurrences = 3
|
||||
|
||||
/datum/round_event/meteor_wave/catastrophic
|
||||
wave_name = "catastrophic"
|
||||
|
||||
@@ -161,6 +161,13 @@
|
||||
bonus_reagents = list("omnizine" = 3)
|
||||
list_reagents = list("nutriment" = 4, "omnizine" = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dankpocket
|
||||
name = "\improper Dank-pocket"
|
||||
desc = "The food of choice for the seasoned botanist."
|
||||
icon_state = "dankpocket"
|
||||
list_reagents = list("lipolicide" = 3, "space_drugs" = 3, "nutriment" = 4)
|
||||
filling_color = "#00FF00"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
|
||||
name = "fortune cookie"
|
||||
desc = "A true prophecy in each cookie!"
|
||||
|
||||
@@ -102,6 +102,15 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket
|
||||
category = CAT_FOOD
|
||||
|
||||
/datum/crafting_recipe/food/dankpocket
|
||||
time = 15
|
||||
name = "Dankpocket"
|
||||
reqs = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis = 1
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/dankpocket
|
||||
category = CAT_FOOD
|
||||
|
||||
////////////////////////////////////////////////MUFFINS////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
// Cannabis
|
||||
/obj/item/seeds/cannabis
|
||||
name = "pack of cannabis seeds"
|
||||
desc = "Taxable."
|
||||
icon = 'goon/icons/obj/hydroponics.dmi'
|
||||
icon_state = "seed-cannabis"
|
||||
species = "cannabis"
|
||||
plantname = "Cannabis Plant"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis
|
||||
maturation = 8
|
||||
oneharvest = 0
|
||||
potency = 20
|
||||
growthstages = 1
|
||||
growing_icon = 'goon/icons/obj/hydroponics.dmi'
|
||||
icon_grow = "cannabis-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "cannabis-dead" // Same for the dead icon
|
||||
mutatelist = list(/obj/item/seeds/cannabis/rainbow,
|
||||
/obj/item/seeds/cannabis/death,
|
||||
/obj/item/seeds/cannabis/white,
|
||||
/obj/item/seeds/cannabis/ultimate)
|
||||
reagents_add = list("space_drugs" = 0.15, "lipolicide" = 0.35) // gives u the munchies
|
||||
|
||||
|
||||
/obj/item/seeds/cannabis/rainbow
|
||||
name = "pack of rainbow weed seeds"
|
||||
desc = "These seeds grow into rainbow weed. Groovy."
|
||||
icon_state = "seed-megacannabis"
|
||||
species = "megacannabis"
|
||||
plantname = "Rainbow Weed"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/rainbow
|
||||
mutatelist = list()
|
||||
reagents_add = list("mindbreaker" = 0.15, "lipolicide" = 0.35)
|
||||
rarity = 40
|
||||
|
||||
/obj/item/seeds/cannabis/death
|
||||
name = "pack of deathweed seeds"
|
||||
desc = "These seeds grow into deathweed. Not groovy."
|
||||
icon_state = "seed-blackcannabis"
|
||||
species = "blackcannabis"
|
||||
plantname = "Deathweed"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/death
|
||||
mutatelist = list()
|
||||
reagents_add = list("cyanide" = 0.35, "space_drugs" = 0.15, "lipolicide" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
/obj/item/seeds/cannabis/white
|
||||
name = "pack of lifeweed seeds"
|
||||
desc = "I will give unto him that is munchies of the fountain of the cravings of life, freely."
|
||||
icon_state = "seed-whitecannabis"
|
||||
species = "whitecannabis"
|
||||
plantname = "Lifeweed"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/white
|
||||
mutatelist = list()
|
||||
reagents_add = list("omnizine" = 0.35, "space_drugs" = 0.15, "lipolicide" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
|
||||
/obj/item/seeds/cannabis/ultimate
|
||||
name = "pack of omega weed seeds"
|
||||
desc = "These seeds grow into omega weed."
|
||||
icon_state = "seed-ocannabis"
|
||||
species = "ocannabis"
|
||||
plantname = "Omega Weed"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/ultimate
|
||||
mutatelist = list()
|
||||
reagents_add = list("space_drugs" = 0.03,
|
||||
"mindbreaker" = 0.03,
|
||||
"mercury" = 0.015,
|
||||
"lithium" = 0.015,
|
||||
"atropine" = 0.015,
|
||||
"haloperidol" = 0.015,
|
||||
"methamphetamine" = 0.015,
|
||||
"capsaicin" = 0.015,
|
||||
"barbers_aid" = 0.015,
|
||||
"bath_salts" = 0.015,
|
||||
"itching_powder" = 0.015,
|
||||
"crank" = 0.015,
|
||||
"krokodil" = 0.015,
|
||||
"histamine" = 0.015,
|
||||
"lipolicide" = 0.015)
|
||||
rarity = 69
|
||||
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis
|
||||
seed = /obj/item/seeds/cannabis
|
||||
icon = 'goon/icons/obj/hydroponics.dmi'
|
||||
name = "cannabis leaf"
|
||||
desc = "Recently legalized in most galaxies."
|
||||
icon_state = "cannabis"
|
||||
filling_color = "#00FF00"
|
||||
bitesize_mod = 2
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/rainbow
|
||||
seed = /obj/item/seeds/cannabis/rainbow
|
||||
desc = "Is it supposed to be glowing like that...?"
|
||||
icon_state = "megacannabis"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/death
|
||||
seed = /obj/item/seeds/cannabis/death
|
||||
desc = "Looks a bit dark. Oh well."
|
||||
icon_state = "blackcannabis"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/white
|
||||
seed = /obj/item/seeds/cannabis/white
|
||||
desc = "It feels smooth and nice to the touch."
|
||||
icon_state = "whitecannabis"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/ultimate
|
||||
seed = /obj/item/seeds/cannabis/ultimate
|
||||
desc = "You feel dizzy looking at it. What the fuck?"
|
||||
icon_state = "ocannabis"
|
||||
volume = 69
|
||||
@@ -441,28 +441,6 @@
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "xeno_warning"
|
||||
|
||||
/******************Hardsuit Jetpack Upgrade*******************/
|
||||
/obj/item/hardsuit_jetpack
|
||||
name = "hardsuit jetpack upgrade"
|
||||
icon_state = "jetpack_upgrade"
|
||||
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
|
||||
origin_tech = "materials=4;magnets=4;engineering=5"
|
||||
// Same as jetpack implant minus biotech, makes sense.
|
||||
|
||||
|
||||
/obj/item/hardsuit_jetpack/afterattack(var/obj/item/clothing/suit/space/hardsuit/S, mob/user)
|
||||
..()
|
||||
if(!istype(S))
|
||||
user << "<span class='warning'>This upgrade can only be applied to a hardsuit.</span>"
|
||||
else if(S.jetpack)
|
||||
user << "<span class='warning'>[S] already has a jetpack installed.</span>"
|
||||
else if(S == user.get_item_by_slot(slot_wear_suit)) //Make sure the player is not wearing the suit before applying the upgrade.
|
||||
user << "<span class='warning'>You cannot install the upgrade to [S] while wearing it.</span>"
|
||||
else
|
||||
S.jetpack = new /obj/item/weapon/tank/jetpack/suit(S)
|
||||
user << "<span class='notice'>You successfully install the jetpack into [S].</span>"
|
||||
qdel(src)
|
||||
|
||||
/*********************Hivelord stabilizer****************/
|
||||
|
||||
/obj/item/weapon/hivelordstabilizer
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
new /datum/data/mining_equipment("Fulton Pack", /obj/item/weapon/extraction_pack, 1000),
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1000),
|
||||
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/hardsuit_jetpack, 2000),
|
||||
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/weapon/tank/jetpack/suit, 2000),
|
||||
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
||||
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
|
||||
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
|
||||
@@ -94,7 +94,7 @@
|
||||
else
|
||||
dat += "No ID inserted. <A href='?src=\ref[src];choice=insert'>Insert ID.</A><br>"
|
||||
dat += "</div>"
|
||||
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='200'>"
|
||||
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='300'>"
|
||||
for(var/datum/data/mining_equipment/prize in prize_list)
|
||||
dat += "<tr><td>[prize.equipment_name]</td><td>[prize.cost]</td><td><A href='?src=\ref[src];purchase=\ref[prize]'>Purchase</A></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
@@ -487,11 +487,10 @@
|
||||
if(3)
|
||||
return
|
||||
if(2)
|
||||
if (prob(20))
|
||||
if(prob(20))
|
||||
src.gets_dug()
|
||||
if(1)
|
||||
src.gets_dug()
|
||||
return
|
||||
|
||||
/turf/open/floor/plating/asteroid/attackby(obj/item/weapon/W, mob/user, params)
|
||||
//note that this proc does not call ..()
|
||||
@@ -619,10 +618,12 @@
|
||||
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
planetary_atmos = TRUE
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
|
||||
/turf/open/chasm/straight_down/lava_land_surface
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
planetary_atmos = TRUE
|
||||
baseturf = /turf/open/chasm/straight_down/lava_land_surface
|
||||
|
||||
/turf/open/chasm/straight_down/lava_land_surface/normal_air
|
||||
@@ -677,6 +678,7 @@
|
||||
|
||||
/turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
planetary_atmos = TRUE
|
||||
baseturf = /turf/open/chasm/straight_down/lava_land_surface
|
||||
|
||||
/turf/closed/mineral/gibtonite/volcanic
|
||||
@@ -762,6 +764,7 @@
|
||||
baseturf = /turf/open/floor/plating/ash //I assume this will be a chasm eventually, once this becomes an actual surface
|
||||
slowdown = 1
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/open/floor/plating/ash/New()
|
||||
pixel_y = -4
|
||||
|
||||
@@ -57,10 +57,10 @@ var/list/image/ghost_images_simple = list() //this is a list of all ghost images
|
||||
|
||||
/mob/dead/observer/New(mob/body)
|
||||
verbs += /mob/dead/observer/proc/dead_tele
|
||||
|
||||
|
||||
if(global.cross_allowed)
|
||||
verbs += /mob/dead/observer/proc/server_hop
|
||||
|
||||
|
||||
ghostimage = image(src.icon,src,src.icon_state)
|
||||
if(icon_state in ghost_forms_with_directions_list)
|
||||
ghostimage_default = image(src.icon,src,src.icon_state + "_nodir")
|
||||
@@ -563,7 +563,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
set desc= "Jump to the other server"
|
||||
if (alert(src, "Jump to server running at [global.cross_address]?", "Server Hop", "Yes", "No") != "Yes")
|
||||
return 0
|
||||
if (client && global.cross_allowed)
|
||||
if (client && global.cross_allowed)
|
||||
src << "<span class='notice'>Sending you to [global.cross_address].</span>"
|
||||
winset(src, null, "command=.options") //other wise the user never knows if byond is downloading resources
|
||||
client << link(global.cross_address)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(ancestor_name)
|
||||
name = ancestor_name
|
||||
if(ancestor_chain > 1)
|
||||
name += " [num2roman(ancestor_chain)]"
|
||||
name += " \Roman[ancestor_chain]"
|
||||
else
|
||||
if(prob(5))
|
||||
name = pick(rare_pet_monkey_names)
|
||||
|
||||
@@ -134,6 +134,9 @@
|
||||
temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create. \
|
||||
\nYou yourself are one of these servants, and will be able to utilize almost anything they can, excluding a clockwork slab.</b>"
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/binarycheck()
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/update_drone_hack()
|
||||
return //we don't get hacked or give a shit about it
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ Difficulty: Medium
|
||||
last_legion = FALSE
|
||||
break
|
||||
if(last_legion)
|
||||
src.loot = list(/obj/item/weapon/staff_of_storms)
|
||||
src.loot = list(/obj/item/weapon/staff/storm)
|
||||
else if(prob(5))
|
||||
src.loot = list(/obj/structure/closet/crate/necropolis/tendril)
|
||||
..()
|
||||
@@ -124,7 +124,7 @@ Difficulty: Medium
|
||||
|
||||
//Loot
|
||||
|
||||
/obj/item/weapon/staff_of_storms
|
||||
/obj/item/weapon/staff/storm
|
||||
name = "staff of storms"
|
||||
desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it."
|
||||
icon_state = "staffofstorms"
|
||||
@@ -138,7 +138,7 @@ Difficulty: Medium
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
var/storm_cooldown = 0
|
||||
|
||||
/obj/item/weapon/staff_of_storms/attack_self(mob/user)
|
||||
/obj/item/weapon/staff/storm/attack_self(mob/user)
|
||||
if(storm_cooldown > world.time)
|
||||
user << "<span class='warning'>The staff is still recharging!</span>"
|
||||
return
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/obj/item/weapon/stock_parts/cell
|
||||
name = "power cell"
|
||||
desc = "A rechargable electrochemical power cell."
|
||||
var/ratingdesc
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "cell"
|
||||
item_state = "cell"
|
||||
@@ -17,13 +16,14 @@
|
||||
var/rigged = 0 // true if rigged to explode
|
||||
var/chargerate = 100 //how much power is given every tick in a recharger
|
||||
var/self_recharge = 0 //does it self recharge, over time, or not?
|
||||
var/ratingdesc = TRUE
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
charge = maxcharge
|
||||
ratingdesc = " This one has a power rating of [maxcharge], and you should not swallow it."
|
||||
desc = desc + ratingdesc
|
||||
if(ratingdesc)
|
||||
desc += " This one has a power rating of [maxcharge], and you should not swallow it."
|
||||
updateicon()
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/Destroy()
|
||||
@@ -264,6 +264,20 @@
|
||||
/obj/item/weapon/stock_parts/cell/infinite/use()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/infinite/abductor
|
||||
name = "void core"
|
||||
desc = "An alien power cell that produces energy seemingly out of nowhere."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "cell"
|
||||
origin_tech = "abductor=5;powerstorage=8;engineering=6"
|
||||
maxcharge = 50000
|
||||
rating = 12
|
||||
ratingdesc = FALSE
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/infinite/abductor/update_icon()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/potato
|
||||
name = "potato battery"
|
||||
desc = "A rechargable starch based power cell."
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
// Radioisotope Thermoelectric Generator (RTG)
|
||||
// Simple power generator that would replace "magic SMES" on various derelicts.
|
||||
|
||||
/obj/machinery/power/rtg
|
||||
name = "radioisotope thermoelectric generator"
|
||||
desc = "A simple nuclear power generator, used in small outposts to reliably provide power for decades."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "rtg"
|
||||
density = 1
|
||||
anchored = 1
|
||||
use_power = 0
|
||||
|
||||
// You can buckle someone to RTG, then open its panel. Fun stuff.
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_requires_restraints = TRUE
|
||||
|
||||
var/power_gen = 1000 // Enough to power a single APC. 4000 output with T4 capacitor.
|
||||
var/board_path = /obj/item/weapon/circuitboard/machine/rtg
|
||||
var/irradiate = TRUE // RTGs irradiate surroundings, but only when panel is open.
|
||||
|
||||
/obj/machinery/power/rtg/New()
|
||||
..()
|
||||
var/obj/item/weapon/circuitboard/machine/B = new board_path(null)
|
||||
B.apply_default_parts(src)
|
||||
connect_to_network()
|
||||
|
||||
/obj/item/weapon/circuitboard/machine/rtg
|
||||
name = "circuit board (RTG)"
|
||||
build_path = /obj/machinery/power/rtg
|
||||
origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it.
|
||||
|
||||
/obj/machinery/power/rtg/initialize()
|
||||
..()
|
||||
connect_to_network()
|
||||
|
||||
/obj/machinery/power/rtg/process()
|
||||
..()
|
||||
add_avail(power_gen)
|
||||
if(panel_open && irradiate)
|
||||
radiation_pulse(get_turf(src), 2, 3, 6) // Weak but noticeable.
|
||||
|
||||
/obj/machinery/power/rtg/RefreshParts()
|
||||
var/part_level = 0
|
||||
for(var/obj/item/weapon/stock_parts/SP in component_parts)
|
||||
part_level += SP.rating
|
||||
|
||||
power_gen = initial(power_gen) * part_level
|
||||
|
||||
/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params)
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
else if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I))
|
||||
return
|
||||
else if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/rtg/attack_hand(mob/user)
|
||||
if(can_buckle && isliving(user.pulling) && user.a_intent == "grab" && !has_buckled_mobs())
|
||||
var/mob/living/L = user.pulling
|
||||
if(L.buckled)
|
||||
return
|
||||
L.loc = src.loc
|
||||
user_buckle_mob(L, user)
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/power/rtg/advanced
|
||||
desc = "An advanced RTG capable of moderating isotope decay, increasing power output but reducing lifetime. It uses plasma-fueled radiation collectors to increase output even further."
|
||||
power_gen = 1250 // 2500 on T1, 10000 on T4.
|
||||
board_path = /obj/item/weapon/circuitboard/machine/rtg/advanced
|
||||
|
||||
/obj/item/weapon/circuitboard/machine/rtg/advanced
|
||||
name = "circuit board (Advanced RTG)"
|
||||
build_path = /obj/machinery/power/rtg/advanced
|
||||
origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/stack/sheet/mineral/uranium = 10,
|
||||
/obj/item/stack/sheet/mineral/plasma = 5)
|
||||
|
||||
|
||||
|
||||
// Void Core, power source for Abductor ships and bases.
|
||||
// Provides a lot of power, but tends to explode when mistreated.
|
||||
|
||||
/obj/machinery/power/rtg/abductor
|
||||
name = "Void Core"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "core"
|
||||
desc = "An alien power source that produces energy seemingly out of nowhere."
|
||||
board_path = /obj/item/weapon/circuitboard/machine/abductor/core
|
||||
power_gen = 20000 // 280 000 at T1, 400 000 at T4. Starts at T4.
|
||||
irradiate = FALSE // Green energy!
|
||||
can_buckle = FALSE
|
||||
pixel_y = 7
|
||||
var/going_kaboom = FALSE // Is it about to explode?
|
||||
|
||||
/obj/item/weapon/circuitboard/machine/abductor/core
|
||||
name = "alien board (Void Core)"
|
||||
build_path = /obj/machinery/power/rtg/abductor
|
||||
origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8"
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/cell/infinite/abductor = 1)
|
||||
def_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor = /obj/item/weapon/stock_parts/capacitor/quadratic,
|
||||
/obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra)
|
||||
|
||||
/obj/machinery/power/rtg/abductor/proc/overload()
|
||||
if(going_kaboom)
|
||||
return
|
||||
going_kaboom = TRUE
|
||||
visible_message("<span class='danger'>\The [src] lets out an shower of sparks as it starts to lose stability!</span>",\
|
||||
"<span class='italics'>You hear a loud electrical crack!</span>")
|
||||
playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
|
||||
tesla_zap(src, 5, power_gen * 0.05)
|
||||
addtimer(GLOBAL_PROC, "explosion", 100, FALSE, get_turf(src), 2, 3, 4, 8) // Not a normal explosion.
|
||||
|
||||
/obj/machinery/power/rtg/abductor/bullet_act(obj/item/projectile/Proj)
|
||||
..()
|
||||
if(!going_kaboom && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
|
||||
message_admins("[key_name_admin(Proj.firer)] triggered an Abductor Core explosion via projectile.")
|
||||
log_game("[key_name(Proj.firer)] triggered an Abductor Core explosion via projectile.")
|
||||
overload()
|
||||
|
||||
/obj/machinery/power/rtg/abductor/blob_act(obj/effect/blob/B)
|
||||
overload()
|
||||
|
||||
/obj/machinery/power/rtg/abductor/ex_act()
|
||||
if(going_kaboom)
|
||||
qdel(src)
|
||||
else
|
||||
overload()
|
||||
|
||||
/obj/machinery/power/rtg/abductor/fire_act()
|
||||
overload()
|
||||
|
||||
/obj/machinery/power/rtg/abductor/tesla_act()
|
||||
..() //extend the zap
|
||||
overload()
|
||||
@@ -605,9 +605,9 @@
|
||||
toxpwr = 0.5
|
||||
|
||||
/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/M)
|
||||
if(!holder.has_reagent("nutriment"))
|
||||
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
|
||||
M.adjustToxLoss(0.5*REM, 0)
|
||||
M.nutrition = max( M.nutrition - 5 * REAGENTS_METABOLISM, 0)
|
||||
M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time
|
||||
M.overeatduration = 0
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -301,4 +301,4 @@
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "capacitor"
|
||||
desc = "A debug item for research."
|
||||
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8"
|
||||
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8;abductor=8"
|
||||
|
||||
Reference in New Issue
Block a user