New Content Update (#43)

* New Content Update

* readded shuttle autocall
This commit is contained in:
unusualcrow
2016-09-18 13:04:47 -04:00
committed by TalkingCactus
parent 8a9bbcf97d
commit 24c10b1b7f
52 changed files with 972 additions and 362 deletions
+1 -2
View File
@@ -427,8 +427,7 @@
L.fix()
if("floorlava")
var/datum/weather/floor_is_lava/storm = new /datum/weather/floor_is_lava
storm.weather_start_up()
SSweather.run_weather("the floor is lava")
if("virus")
if(!check_rights(R_FUN))
@@ -99,6 +99,14 @@
dog_fashion = /datum/dog_fashion/head/ushanka
/obj/item/clothing/head/hardhat/headlamp
name = "headlamp"
desc = "For giving people another reason to look away from you."
icon_state = "hardhat0_headlamp"
item_state = "hardhat0_headlamp"
item_color = "headlamp"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/head/ushanka/attack_self(mob/user)
if(earflaps)
src.icon_state = "ushankaup"
@@ -383,6 +383,25 @@
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical
//Captain hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/captain
name = "captain's hardsuit helmet"
desc = "An advanced, armoured helmet for travel and combat in a hazardous, low pressure environment. Feels extra cozy."
icon_state = "hardsuit0-captain"
item_state = "captain_helm"
item_color = "captain"
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
flash_protect = 1
/obj/item/clothing/suit/space/hardsuit/captain
name = "captain's hardsuit"
desc = "An advanced, Nanotrasen exclusive, heavily armoured hardsuit that protects against hazardous, low pressure environments. Warm, sexy, and stylish."
icon_state = "hardsuit-captain"
item_state = "captain_hardsuit"
allowed = list(/obj/item/weapon/tank/internals, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/captain
//Research Director hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/rd
name = "prototype hardsuit helmet"
@@ -14,26 +14,6 @@ Contains:
- Carp hardsuit
*/
//Captain's space suit, not hardsuits because no flashlight!
/obj/item/clothing/head/helmet/space/captain
name = "captain's space helmet"
icon_state = "capspace"
item_state = "capspacehelmet"
desc = "A special helmet designed for only the most fashionable of military figureheads."
flags_inv = HIDEFACE|HIDEEARS|HIDEHAIR
permeability_coefficient = 0.01
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
/obj/item/clothing/suit/space/captain
name = "captain's space suit"
desc = "A bulky, heavy-duty piece of exclusive Nanotrasen armor. YOU are in charge!"
icon_state = "caparmor"
item_state = "capspacesuit"
w_class = 4
allowed = list(/obj/item/weapon/tank/internals, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
//Death squad armored space suits, not hardsuits!
/obj/item/clothing/head/helmet/space/hardsuit/deathsquad
name = "deathsquad helmet"
+8
View File
@@ -319,6 +319,14 @@
reqs = list(/obj/item/weapon/paper = 5)
category = CAT_MISC
/datum/crafting_recipe/headlamp
name = "Headlamp"
result = /obj/item/clothing/head/hardhat/headlamp
time = 30
reqs = list(/obj/item/stack/cable_coil = 15,
/obj/item/device/flashlight = 1)
category = CAT_MISC
/datum/crafting_recipe/chemical_payload
name = "Chemical Payload (C4)"
+3 -43
View File
@@ -4,56 +4,16 @@
max_occurrences = 1
/datum/round_event/radiation_storm
var/list/protected_areas = list(/area/maintenance, /area/turret_protected/ai_upload, /area/turret_protected/ai_upload_foyer, /area/turret_protected/ai)
/datum/round_event/radiation_storm/setup()
startWhen = rand(10, 20)
endWhen = startWhen + 5
startWhen = 3
endWhen = startWhen + 1
announceWhen = 1
/datum/round_event/radiation_storm/announce()
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/AI/radiation.ogg')
//sound not longer matches the text, but an audible warning is probably good
/datum/round_event/radiation_storm/start()
for(var/mob/living/carbon/C in living_mob_list)
var/turf/T = get_turf(C)
if(!T)
continue
if(T.z != 1)
continue
var/skip = 0
for(var/a in protected_areas)
if(istype(T.loc, a))
skip = 1
continue
if(skip)
continue
if(locate(/obj/machinery/power/apc) in T) //damn you maint APCs!!
continue
if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C
if(prob(5))
H.rad_act(rand(100, 160))
else
H.rad_act(rand(15, 75))
if(prob(25))
if(prob(75))
randmutb(H)
else
randmutg(H)
H.domutcheck()
else if(istype(C, /mob/living/carbon/monkey))
var/mob/living/carbon/monkey/M = C
M.rad_act(rand(15, 75))
/datum/round_event/radiation_storm/end()
priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert")
SSweather.run_weather("radiation storm",1)
@@ -13,5 +13,4 @@
/datum/round_event/wizard/darkness/start()
if(!started)
started = TRUE
var/datum/weather/advanced_darkness/darkness = new
darkness.weather_start_up()
SSweather.run_weather("advanced darkness")
+1 -2
View File
@@ -12,5 +12,4 @@
/datum/round_event/wizard/lava/start()
if(!started)
started = TRUE
var/datum/weather/floor_is_lava/LAVA = new /datum/weather/floor_is_lava
LAVA.weather_start_up()
SSweather.run_weather("the floor is lava")
+107
View File
@@ -482,3 +482,110 @@
C.preserved()
user << "<span class='notice'>You inject the [M] with the stabilizer. It will no longer go inert.</span>"
qdel(src)
/*********************Mining Hammer****************/
/obj/item/weapon/twohanded/required/mining_hammer
icon = 'icons/obj/mining.dmi'
icon_state = "mining_hammer1"
item_state = "mining_hammer1"
name = "proto-kinetic crusher"
desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club.\
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna. \
\n<span class='info'>Mark a mob with the destabilizing force, then hit them in melee to activate it for extra damage. Extra damage if backstabbed in this fashion. \
This weapon is only particularly effective against large creatures.</span>"
force = 20 //As much as a bone spear, but this is significantly more annoying to carry around due to requiring the use of both hands at all times
w_class = 4
slot_flags = SLOT_BACK
force_unwielded = 20 //It's never not wielded so these are the same
force_wielded = 20
throwforce = 5
throw_speed = 4
luminosity = 4
armour_penetration = 10
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("smashes", "crushes", "cleaves", "chops", "pulps")
sharpness = IS_SHARP
var/charged = 1
var/charge_time = 16
var/atom/mark = null
var/marked_image = null
/obj/item/projectile/destabilizer
name = "destabilizing force"
icon_state = "pulse1"
damage = 0 //We're just here to mark people. This is still a melee weapon.
damage_type = BRUTE
flag = "bomb"
range = 6
var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced = null
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0, hit_zone)
if(hammer_synced)
if(hammer_synced.mark == target)
return ..()
if(isliving(target))
if(hammer_synced.mark && hammer_synced.marked_image)
hammer_synced.mark.underlays -= hammer_synced.marked_image
hammer_synced.marked_image = null
var/mob/living/L = target
if(L.mob_size >= MOB_SIZE_LARGE)
hammer_synced.mark = L
var/image/I = image('icons/effects/effects.dmi', loc = L, icon_state = "shield2",pixel_y = (-L.pixel_y),pixel_x = (-L.pixel_x))
L.underlays += I
hammer_synced.marked_image = I
var/target_turf = get_turf(target)
if(istype(target_turf, /turf/closed/mineral))
var/turf/closed/mineral/M = target_turf
PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, M)
M.gets_drilled(firer)
..()
/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag)
if(!proximity_flag && charged)//Mark a target, or mine a tile.
var/turf/proj_turf = get_turf(src)
if(!istype(proj_turf, /turf))
return
var/datum/gas_mixture/environment = proj_turf.return_air()
var/pressure = environment.return_pressure()
if(pressure > 50)
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
return
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(user.loc)
D.preparePixelProjectile(target,get_turf(target), user)
D.hammer_synced = src
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
D.fire()
charged = 0
icon_state = "mining_hammer1_uncharged"
addtimer(src, "Recharge", charge_time)
return
if(proximity_flag && target == mark && isliving(target))
var/mob/living/L = target
PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, get_turf(L))
mark = 0
if(L.mob_size >= MOB_SIZE_LARGE)
L.underlays -= marked_image
qdel(marked_image)
marked_image = null
var/backstab = check_target_facings(user, L)
var/def_check = L.getarmor(type = "bomb")
if(backstab == FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR || backstab == FACING_SAME_DIR)
L.apply_damage(80, BRUTE, blocked = def_check)
playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
else
L.apply_damage(50, BRUTE, blocked = def_check)
/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge()
if(!charged)
charged = 1
icon_state = "mining_hammer1"
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
/obj/item/weapon/twohanded/required/mining_hammer/pickup(mob/user)
..()
user.AddLuminosity(luminosity)
/obj/item/weapon/twohanded/required/mining_hammer/dropped(mob/user)
..()
user.AddLuminosity(-luminosity)
-110
View File
@@ -1,110 +0,0 @@
#define STARTUP_STAGE 1
#define MAIN_STAGE 2
#define WIND_DOWN_STAGE 3
#define END_STAGE 4
/datum/weather
var/name = "storm"
var/start_up_time = 300 //30 seconds
var/start_up_message = "The wind begins to pick up."
var/start_up_sound
var/duration = 120 //2 minutes
var/duration_lower = 120
var/duration_upper = 120
var/duration_sound
var/duration_message = "A storm has started!"
var/wind_down = 300 // 30 seconds
var/wind_down_message = "The storm is passing."
var/wind_down_sound
var/target_z = 1
var/exclude_walls = TRUE
var/area_type = /area/space
var/stage = STARTUP_STAGE
var/start_up_overlay = "lava"
var/duration_overlay = "lava"
var/overlay_layer = AREA_LAYER //This is the default area layer, and above everything else. TURF_LAYER is floors/below walls and mobs.
var/purely_aesthetic = FALSE //If we just want gentle rain that doesn't hurt people
var/list/impacted_areas = list()
var/immunity_type = "storm"
/datum/weather/proc/weather_start_up()
for(var/area/N in get_areas(area_type))
if(N.z == target_z)
impacted_areas += N
duration = rand(duration_lower,duration_upper)
update_areas()
for(var/mob/M in player_list)
if(M.z == target_z)
M << "<span class='warning'><B>[start_up_message]</B></span>"
if(start_up_sound)
M << start_up_sound
sleep(start_up_time)
if(src && stage != MAIN_STAGE)
stage = MAIN_STAGE
weather_main()
/datum/weather/proc/weather_main()
update_areas()
for(var/mob/M in player_list)
if(M.z == target_z)
M << "<span class='userdanger'><i>[duration_message]</i></span>"
if(duration_sound)
M << duration_sound
if(purely_aesthetic)
sleep(duration*10)
else //Storm effects
for(var/i in 1 to duration-1)
for(var/mob/living/L in living_mob_list)
var/area/storm_area = get_area(L)
if(storm_area in impacted_areas)
storm_act(L)
sleep(10)
if(src && stage != WIND_DOWN_STAGE)
stage = WIND_DOWN_STAGE
weather_wind_down()
/datum/weather/proc/weather_wind_down()
update_areas()
for(var/mob/M in player_list)
if(M.z == target_z)
M << "<span class='danger'><B>[wind_down_message]</B></span>"
if(wind_down_sound)
M << wind_down_sound
sleep(wind_down)
if(src && stage != END_STAGE)
stage = END_STAGE
update_areas()
/datum/weather/proc/storm_act(mob/living/L)
if(immunity_type in L.weather_immunities)
return
/datum/weather/proc/update_areas()
for(var/area/N in impacted_areas)
N.layer = overlay_layer
N.icon = 'icons/effects/weather_effects.dmi'
N.invisibility = 0
switch(stage)
if(STARTUP_STAGE)
N.icon_state = start_up_overlay
if(MAIN_STAGE)
N.icon_state = duration_overlay
if(WIND_DOWN_STAGE)
N.icon_state = start_up_overlay
if(END_STAGE)
N.icon_state = initial(N.icon_state)
N.icon = 'icons/turf/areas.dmi'
N.layer = AREA_LAYER //Just default back to normal area stuff since I assume setting a var is faster than initial
N.invisibility = INVISIBILITY_MAXIMUM
N.opacity = 0
@@ -1,108 +0,0 @@
///The floor is lava
/datum/weather/floor_is_lava
name = "floor is lava"
start_up_time = 30 //3 seconds
start_up_message = "The ground begins to bubble."
duration_lower = 45
duration_upper = 60 //1 minute
duration_message = "The floor is lava!"
wind_down = 30// 3 seconds
wind_down_message = "The ground begins to cool."
target_z = 1
exclude_walls = TRUE
area_type = /area
start_up_overlay = "lava"
duration_overlay = "lava"
overlay_layer = ABOVE_OPEN_TURF_LAYER //Covers floors only
immunity_type = "lava"
/datum/weather/floor_is_lava/storm_act(mob/living/L)
if(immunity_type in L.weather_immunities)
return
var/turf/F = get_turf(L)
for(var/obj/structure/O in F.contents)
if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor!
return
L.adjustFireLoss(3)
/datum/weather/advanced_darkness
name = "advanced darkness"
start_up_time = 100 //10 seconds
start_up_message = "The lights begin to dim... is power going out?"
duration_lower = 45
duration_upper = 60 //1 minute
duration_message = "This isn't average everyday darkness... this is advanced darkness!"
wind_down = 100 // 10 seconds
wind_down_message = "The darkness recedes."
purely_aesthetic = TRUE
target_z = 1
exclude_walls = TRUE
area_type = /area
start_up_overlay = ""
duration_overlay = ""
overlay_layer = AREA_LAYER
/datum/weather/advanced_darkness/update_areas()
for(var/area/A in impacted_areas)
if(stage == MAIN_STAGE)
A.invisibility = 0
A.opacity = 1
A.layer = overlay_layer
A.icon = 'icons/effects/weather_effects.dmi'
A.icon_state = start_up_overlay
else
A.invisibility = INVISIBILITY_MAXIMUM
A.opacity = 0
//Ash storms
/datum/weather/ash_storm
name = "ash storm"
start_up_time = 300 //30 seconds
start_up_message = "An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter."
start_up_sound = 'sound/lavaland/ash_storm_windup.ogg'
duration_lower = 60 //1 minute
duration_upper = 150 //2.5 minutes
duration_message = "Smoldering clouds of scorching ash billow down around you! Get inside!"
duration_sound = 'sound/lavaland/ash_storm_start.ogg'
wind_down = 300 // 30 seconds
wind_down_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now."
wind_down_sound = 'sound/lavaland/ash_storm_end.ogg'
target_z = ZLEVEL_LAVALAND
area_type = /area/lavaland/surface/outdoors
start_up_overlay = "light_ash"
duration_overlay = "ash_storm"
overlay_layer = AREA_LAYER
immunity_type = "ash"
/datum/weather/ash_storm/false_alarm //No storm, just light ember fall
purely_aesthetic = TRUE
duration_overlay = "light_ash"
duration_message = "<span class='notice'>Gentle ashfall surrounds you like grotesque snow. The storm seems to have passed you by.</span>"
wind_down_message = "The ashfall quietly slows, then stops. Another layer of hardened soot to the volcanic rock beneath you."
/datum/weather/ash_storm/storm_act(mob/living/L)
if(immunity_type in L.weather_immunities)
return
if(istype(L.loc, /obj/mecha))
return
if(ishuman(L))
var/mob/living/carbon/human/H = L
var/thermal_protection = H.get_thermal_protection()
if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT)
return
L.adjustFireLoss(4)
+6 -1
View File
@@ -27,6 +27,7 @@
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600),
new /datum/data/mining_equipment("Tracking Implant Kit",/obj/item/weapon/storage/box/minertracker, 600),
new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 750),
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/weapon/twohanded/required/mining_hammer, 750),
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750),
new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800),
new /datum/data/mining_equipment("Medivac Balloon", /obj/item/weapon/extraction_pack/medivac, 800),
@@ -158,7 +159,7 @@
return ..()
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer)
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator and Advanced Scanner", "Mining Drone", "Medivac Kit", "Extraction Kit")
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator and Advanced Scanner", "Mining Drone", "Medivac Kit", "Extraction Kit", "Crusher Kit")
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
if(!selection || !Adjacent(redeemer) || qdeleted(voucher) || voucher.loc != redeemer)
@@ -181,6 +182,10 @@
new /obj/item/stack/sheet/metal/five(loc)
new /obj/item/weapon/extraction_pack(loc)
new /obj/item/fulton_core(loc)
if("Crusher Kit")
new /obj/item/weapon/twohanded/required/mining_hammer(loc)
new /obj/item/weapon/storage/belt/mining/alt(loc)
new /obj/item/weapon/extinguisher/mini(loc)
feedback_add_details("mining_voucher_redeemed", selection)
qdel(voucher)
@@ -118,37 +118,38 @@
force = 25
damtype = BURN
hitsound = 'sound/weapons/sear.ogg'
var/obj/machinery/lavaland_controller/linked_machine
var/storm_cooldown = 0
/obj/item/weapon/staff_of_storms/attack_self(mob/user)
if(storm_cooldown > world.time)
user << "<span class='warning'>The staff is still recharging!</span>"
return
if(user.z != ZLEVEL_LAVALAND)
user << "<span class='warning'>You can't seem to control the weather here!</span>"
return
if(!linked_machine || linked_machine.z != user.z)
for(var/obj/machinery/lavaland_controller/controller in machines)
if(controller.z == user.z)
linked_machine = controller
break
var/datum/weather/ash_storm/A
for(var/V in SSweather.existing_weather)
var/datum/weather/W = V
if(W.name == "ash storm")
A = W
break
if(!A)
user << "<span class='warning'>How odd! The planet seems to have lost its atmosphere!</span>"
return
if(linked_machine && linked_machine.ongoing_weather)
if(linked_machine.ongoing_weather.stage == WIND_DOWN_STAGE || linked_machine.ongoing_weather.stage == END_STAGE)
user << "<span class='warning'>The storm is already ending. It would be a waste to use the staff now.</span>"
if(A.stage != END_STAGE)
if(A.stage == WIND_DOWN_STAGE)
user << "<span class='warning'>The storm is already ending! It would be a waste to use the staff now.</span>"
return
user.visible_message("<span class='warning'>[user] holds [src] skywards, causing its orb to flare!</span>", \
"<span class='notice'>With an appropriately dramatic flourish, you dispel the storm!</span>")
playsound(get_turf(src),'sound/magic/Staff_Change.ogg', 200, 0)
storm_cooldown = world.time + 600
linked_machine.ongoing_weather.stage = WIND_DOWN_STAGE
linked_machine.ongoing_weather.weather_wind_down()
else if (linked_machine && !linked_machine.ongoing_weather)
user.visible_message("<span class='warning'>[user] holds [src] skywards, causing its orb to flare!</span>", \
"<span class='danger'>You lift your staff skywards, calling down a terrible storm!</span>")
playsound(get_turf(src),'sound/magic/Staff_Chaos.ogg', 200, 0)
storm_cooldown = world.time + 600
linked_machine.weather_cooldown = 0
user.visible_message("<span class='warning'>[user] holds [src] skywards as an orange beam travels into the sky!</span>", \
"<span class='notice'>You hold [src] skyward, dispelling the ash storm!</span>")
playsound(user, 'sound/magic/Staff_Change.ogg', 200, 0)
A.wind_down()
else
user << "You can't seem to control the weather here."
user.visible_message("<span class='warning'>[user] holds [src] skywards as red lightning crackles into the sky!</span>", \
"<span class='notice'>You hold [src] skyward, calling down a terrible storm!</span>")
playsound(user, 'sound/magic/Staff_Chaos.ogg', 200, 0)
A.telegraph()
storm_cooldown = world.time + 600
@@ -15,6 +15,7 @@
var/icon_aggro = null // for swapping to when we get aggressive
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
mob_size = MOB_SIZE_LARGE
/mob/living/simple_animal/hostile/asteroid/Aggro()
..()
@@ -264,7 +265,7 @@
else
feedback_add_details("hivelord_core", "[type]|stabilizer")
/obj/item/organ/hivelord_core/proc/go_inert()
inert = TRUE
desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
@@ -660,7 +661,6 @@
move_to_delay = 6
transform *= 2
environment_smash = 2
mob_size = MOB_SIZE_LARGE
speed = 1
addtimer(src, "Deflate", 100)
+7
View File
@@ -111,7 +111,14 @@
icon_state = "firing_pin_pindi"
req_implant = /obj/item/weapon/implant/weapons_auth
/obj/item/device/firing_pin/trick
name = "self-destruct firing pin"
desc = "This pin will detonate the weapon it is put into upon trying to use it"
selfdestruct = 1
force_replace = 1
/obj/item/device/firing_pin/trick/pin_auth(mob/living/user)
return 0
// Honk pin, clown's joke item.
// Can replace other pins. Replace a pin in cap's laser for extra fun!
@@ -211,3 +211,23 @@
item_state = "plantbgone"
volume = 100
list_reagents = list("plantbgone" = 100)
/obj/item/weapon/reagent_containers/spray/thermite
name = "Thermite Spray"
desc = "A 50u spray bottle loaded with thermite, for melting walls. "
icon = 'icons/obj/weapons.dmi'
icon_state = "thermitespray"
item_state = "thermitespray"
volume = 50
list_reagents = list("thermite" = 50)
/obj/item/weapon/reagent_containers/spray/thermite/afterattack(atom/A as mob|obj, mob/user)
if(istype(A, /turf/closed/wall))
if(reagents.get_reagent_amount("thermite") >= 10)
user.visible_message("<span class='notice'>You spray the thermite on [A].</span>")
reagents.reaction(A, TOUCH)
reagents.remove_reagent("thermite", 10)
else
user.visible_message("<span class='warning'>You don't have enough thermite left!</span>")
return
else return ..()
+4 -26
View File
@@ -1,32 +1,10 @@
//If you're looking for spawners like ash walker eggs, check ghost_role_spawners.dm
/obj/machinery/lavaland_controller
name = "weather control machine"
desc = "Controls the weather."
name = "weather machine"
desc = "Controls the weather... when it's on, at any rate. A sticky note on the side proclaims \"DISABLED IN FAVOR OF AN ACTUAL ATMOSPHERE\"."
icon = 'icons/obj/machines/telecomms.dmi'
icon_state = "processor"
var/datum/weather/ongoing_weather = FALSE
var/weather_cooldown = 0
/obj/machinery/lavaland_controller/process()
if(ongoing_weather || weather_cooldown > world.time)
return
weather_cooldown = world.time + rand(3500, 6500)
var/datum/weather/ash_storm/LAVA
if(prob(10)) //10% chance for the ash storm to miss the area entirely
LAVA = new /datum/weather/ash_storm/false_alarm
else
LAVA = new /datum/weather/ash_storm
ongoing_weather = LAVA
LAVA.weather_start_up()
ongoing_weather = null
/obj/machinery/lavaland_controller/Destroy(force)
if(force)
. = ..()
else
return QDEL_HINT_LETMELIVE
icon_state = "processor_off"
/obj/structure/fans/tiny/invisible //For blocking air in ruin doorways
invisibility = INVISIBILITY_ABSTRACT
@@ -105,4 +83,4 @@
else
user << "You need at least ten sheets to finish a golem."
else
user << "You can't build a golem out of this kind of material."
user << "You can't build a golem out of this kind of material."
+24 -1
View File
@@ -624,6 +624,16 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
surplus = 10
exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/boobytrap
name = "Booby Trap"
desc = "A small explosive device that can be attached to boxes or closets. \
The next person to open the box or closet will trigger an explosion \
that knocks them down and destroys the boobytrapped object."
item = /obj/item/device/boobytrap
cost = 4
surplus = 10
exclude_modes = list(/datum/game_mode/nuclear)
// Stealth Items
/datum/uplink_item/stealthy_tools
category = "Stealth and Camouflage Items"
@@ -797,7 +807,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
name = "Military Belt"
desc = "A robust seven-slot red belt that is capable of holding all manner of tatical equipment."
item = /obj/item/weapon/storage/belt/military
cost = 3
cost = 1
exclude_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/medkit
@@ -835,6 +845,12 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
cost = 2
surplus = 75
/datum/uplink_item/device_tools/selfdestruct_firingpin
name = "Trick Firing Pin"
desc = "This pin will detonate the weapon it is put into upon trying to use it"
item = /obj/item/device/firing_pin/trick
cost = 4
/datum/uplink_item/device_tools/ai_detector
name = "Artificial Intelligence Detector"
desc = "A functional multitool that turns red when it detects an artificial intelligence watching it or its \
@@ -858,6 +874,13 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
cost = 2
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/device_tools/thermitespray
name = "Thermite Kit"
desc = "A boxed zippo and 50u spray bottle filled with thermite, specially designed for spraying walls. \
50u is enough thermite to spray 5 walls."
item = /obj/item/weapon/storage/box/syndie_kit/thermite
cost = 3
/datum/uplink_item/device_tools/c4
name = "Composition C-4"
desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls, sabotage equipment, or connect \