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
+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)