Merge remote-tracking branch 'upstream/master' into kk-knockknock

This commit is contained in:
Killian
2021-09-26 15:58:59 +01:00
153 changed files with 548747 additions and 3138 deletions
-134
View File
@@ -1,7 +1,6 @@
/* Alien Effects!
* Contains:
* effect/alien
* Resin
* Weeds
* Acid
*/
@@ -14,139 +13,6 @@
desc = "theres something alien about this"
icon = 'icons/mob/alien.dmi'
/*
* Resin
*/
/obj/effect/alien/resin
name = "resin"
desc = "Looks like some kind of slimy growth."
icon_state = "resin"
density = TRUE
opacity = 1
anchored = TRUE
can_atmos_pass = ATMOS_PASS_NO
var/health = 200
//var/mob/living/affecting = null
/obj/effect/alien/resin/wall
name = "resin wall"
desc = "Purple slime solidified into a wall."
icon_state = "resinwall" //same as resin, but consistency ho!
/obj/effect/alien/resin/membrane
name = "resin membrane"
desc = "Purple slime just thin enough to let light pass through."
icon_state = "resinmembrane"
opacity = 0
health = 120
/obj/effect/alien/resin/New()
..()
var/turf/T = get_turf(src)
T.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
/obj/effect/alien/resin/Destroy()
var/turf/T = get_turf(src)
T.thermal_conductivity = initial(T.thermal_conductivity)
..()
/obj/effect/alien/resin/proc/healthcheck()
if(health <=0)
density = FALSE
qdel(src)
return
/obj/effect/alien/resin/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
healthcheck()
return
/obj/effect/alien/resin/attack_generic(var/mob/user, var/damage, var/attack_verb)
visible_message("<span class='danger'>[user] [attack_verb] the [src]!</span>")
playsound(src, 'sound/effects/attackblob.ogg', 100, 1)
user.do_attack_animation(src)
health -= damage
healthcheck()
return
/obj/effect/alien/resin/take_damage(var/damage)
health -= damage
healthcheck()
return
/obj/effect/alien/resin/ex_act(severity)
switch(severity)
if(1.0)
health-=50
if(2.0)
health-=50
if(3.0)
if (prob(50))
health-=50
else
health-=25
healthcheck()
return
/obj/effect/alien/resin/hitby(AM as mob|obj)
..()
for(var/mob/O in viewers(src, null))
O.show_message("<span class='danger'>[src] was hit by [AM].</span>", 1)
var/tforce = 0
if(ismob(AM))
tforce = 10
else
tforce = AM:throwforce
playsound(src, 'sound/effects/attackblob.ogg', 100, 1)
health = max(0, health - tforce)
healthcheck()
..()
return
/obj/effect/alien/resin/attack_hand()
usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if (HULK in usr.mutations)
to_chat(usr, "<span class='notice'>You easily destroy the [name].</span>")
for(var/mob/O in oviewers(src))
O.show_message("<span class='warning'>[usr] destroys the [name]!</span>", 1)
health = 0
else
// Aliens can get straight through these.
if(istype(usr,/mob/living/carbon))
var/mob/living/carbon/M = usr
if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
for(var/mob/O in oviewers(src))
O.show_message("<span class='warning'>[usr] strokes the [name] and it melts away!</span>", 1)
health = 0
healthcheck()
return
to_chat(usr, "<span class='notice'>You claw at the [name].</span>")
for(var/mob/O in oviewers(src))
O.show_message("<span class='warning'>[usr] claws at the [name]!</span>", 1)
health -= rand(5,10)
healthcheck()
return
/obj/effect/alien/resin/attackby(obj/item/weapon/W as obj, mob/user as mob)
user.setClickCooldown(user.get_attack_speed(W))
var/aforce = W.force
health = max(0, health - aforce)
playsound(src, 'sound/effects/attackblob.ogg', 100, 1)
healthcheck()
..()
return
/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return !opacity
return !density
/*
* Weeds
*/
@@ -291,7 +291,8 @@ var/global/list/semirandom_mob_spawner_decisions = list()
/mob/living/simple_mob/vore/sect_queen = 1
),
list(/mob/living/simple_mob/vore/solargrub),
list(/mob/living/simple_mob/vore/woof)
list(/mob/living/simple_mob/vore/woof),
list(/mob/living/simple_mob/vore/alienanimals/teppi)
)
/obj/random/mob/semirandom_mob_spawner/item_to_spawn()
@@ -405,8 +406,8 @@ var/global/list/semirandom_mob_spawner_decisions = list()
/mob/living/simple_mob/animal/sif/shantak/leader = 1
) = 5,
list(/mob/living/simple_mob/animal/sif/siffet) = 5,
list(/mob/living/simple_mob/animal/sif/tymisian) = 5
list(/mob/living/simple_mob/animal/sif/tymisian) = 5,
list(/mob/living/simple_mob/vore/alienanimals/teppi) = 10
)
/obj/random/mob/semirandom_mob_spawner/monster
@@ -499,7 +500,8 @@ var/global/list/semirandom_mob_spawner_decisions = list()
list(
/mob/living/simple_mob/vore/oregrub = 5,
/mob/living/simple_mob/vore/oregrub/lava = 1
) = 15
) = 15,
list(/mob/living/simple_mob/vore/alienanimals/teppi) = 15
)
/obj/random/mob/semirandom_mob_spawner/humanoid
@@ -738,7 +740,8 @@ var/global/list/semirandom_mob_spawner_decisions = list()
/mob/living/simple_mob/vore/sect_queen = 1
) = 50,
list(/mob/living/simple_mob/vore/solargrub) = 100,
list(/mob/living/simple_mob/vore/woof) = 1
list(/mob/living/simple_mob/vore/woof) = 1,
list(/mob/living/simple_mob/vore/alienanimals/teppi) = 25
)
/obj/random/mob/semirandom_mob_spawner/sus
+4 -2
View File
@@ -4,6 +4,8 @@
w_class = ITEMSIZE_NORMAL
blocks_emissive = EMISSIVE_BLOCK_GENERIC
matter = list(MAT_STEEL = 1)
var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/randpixel = 6
var/abstract = 0
@@ -352,9 +354,9 @@
if(user.pulling == src) user.stop_pulling()
if((slot_flags & slot))
if(equip_sound)
playsound(src, equip_sound, 30)
playsound(src, equip_sound, 20)
else
playsound(src, drop_sound, 30)
playsound(src, drop_sound, 20)
else if(slot == slot_l_hand || slot == slot_r_hand)
playsound(src, pickup_sound, 20, preference = /datum/client_preference/pickup_sounds)
return
+1
View File
@@ -6,6 +6,7 @@
icon = 'icons/obj/apc_repair.dmi'
icon_state = "apc_frame"
refund_amt = 2
matter = list(MAT_STEEL = 100, MAT_GLASS = 30)
/obj/item/frame/apc/try_build(turf/on_wall, mob/user as mob)
if (get_dist(on_wall, user)>1)
+1
View File
@@ -6,6 +6,7 @@
force = 2
throwforce = 2
w_class = 2.0
matter = list(MAT_STEEL = 50)
var/broken
attack_verb = list("annoyed")
var/static/radial_examine = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_examine")
+1
View File
@@ -8,6 +8,7 @@
desc = "This is rubbish."
drop_sound = 'sound/items/drop/wrapper.ogg'
pickup_sound = 'sound/items/pickup/wrapper.ogg'
matter = list(MAT_STEEL = 30)
var/age = 0
/obj/item/trash/New(var/newloc, var/_age)
@@ -18,6 +18,7 @@ AI MODULES
throw_range = 15
origin_tech = list(TECH_DATA = 3)
preserve_item = 1
matter = list(MAT_STEEL = 30, MAT_GLASS = 10)
var/datum/ai_laws/laws = null
/obj/item/weapon/aiModule/proc/install(var/atom/movable/AM, var/mob/living/user)
@@ -16,6 +16,7 @@
throwforce = 5.0
throw_speed = 3
throw_range = 15
matter = list(MAT_STEEL = 30, MAT_GLASS = 10)
var/build_path = null
var/board_type = new /datum/frame/frame_types/computer
var/list/req_components = null
@@ -111,6 +111,46 @@
/obj/item/device/analyzer
)
/obj/item/weapon/storage/belt/utility/holding
name = "tool-belt of holding"
desc = "A belt that uses localized bluespace pockets to hold more items than expected!"
icon_state = "utility_holding"
storage_slots = 14 //twice the amount as a normal belt
max_storage_space = ITEMSIZE_COST_NORMAL * 14
can_hold = list(
/obj/item/weapon/tool/crowbar,
/obj/item/weapon/tool/screwdriver,
/obj/item/weapon/weldingtool,
/obj/item/weapon/tool/wirecutters,
/obj/item/weapon/tool/wrench,
/obj/item/device/multitool,
/obj/item/device/flashlight,
/obj/item/weapon/cell/device,
/obj/item/stack/cable_coil,
/obj/item/device/t_scanner,
/obj/item/device/analyzer,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/device/pda,
/obj/item/device/megaphone,
/obj/item/taperoll,
/obj/item/device/radio/headset,
/obj/item/device/robotanalyzer,
/obj/item/weapon/material/minihoe,
/obj/item/weapon/material/knife/machete/hatchet,
/obj/item/device/analyzer/plant_analyzer,
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/tape_roll,
/obj/item/device/integrated_electronics/wirer,
/obj/item/device/integrated_electronics/debugger,
/obj/item/weapon/shovel/spade,
/obj/item/stack/nanopaste,
/obj/item/weapon/cell, //this is a bigger belt, might as well make it hold bigger cells too
/obj/item/weapon/pipe_dispenser, //bigger belt for bigger tools
/obj/item/weapon/rcd //see above
)
/obj/item/weapon/storage/belt/medical
name = "medical belt"
desc = "Can hold various medical equipment."
@@ -149,6 +189,13 @@
desc = "A sturdy black webbing belt with attached pouches."
icon_state = "ems"
/obj/item/weapon/storage/belt/medical/holding
name = "medical belt of holding"
desc = "A belt that uses localized bluespace pockets to hold more items than expected!"
icon_state = "med_holding"
storage_slots = 14 //twice the amount as a normal belt
max_storage_space = ITEMSIZE_COST_NORMAL * 14
/obj/item/weapon/storage/belt/security
name = "security belt"
desc = "Can hold security gear like handcuffs and flashes."
@@ -22,6 +22,7 @@
/obj/item/weapon/storage/box
name = "box"
desc = "It's just an ordinary box."
icon = 'icons/obj/boxes.dmi'
icon_state = "box"
item_state = "syringe_kit"
center_of_mass = list("x" = 13,"y" = 10)
@@ -72,21 +73,29 @@
/obj/item/weapon/storage/box/survival
name = "emergency supply box"
desc = "A survival box issued to crew members for use in emergency situations."
icon_state = "survival"
starts_with = list(
/obj/item/weapon/tool/prybar/red,
/obj/item/clothing/glasses/goggles,
/obj/item/clothing/mask/breath
)
/obj/item/weapon/storage/box/survival/synth
name = "synthetic supply box"
desc = "A survival box issued to synthetic crew members for use in emergency situations."
icon_state = "survival_synth"
starts_with = list(
/obj/item/weapon/tool/prybar/red,
/obj/item/clothing/glasses/goggles
)
/obj/item/weapon/storage/box/survival/comp
name = "emergency supply box"
desc = "A comprehensive survival box issued to crew members for use in emergency situations. Contains additional supplies."
icon_state = "survival"
icon_state = "survival_comp"
starts_with = list(
/obj/item/weapon/tool/prybar/red,
/obj/item/clothing/glasses/goggles,
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/stack/medical/bruise_pack,
/obj/item/device/flashlight/glowstick,
@@ -115,7 +124,7 @@
/obj/item/weapon/storage/box/syringegun
name = "box of syringe gun cartridges"
desc = "A box full of compressed gas cartridges."
icon_state = "syringe"
icon_state = "syringe2"
starts_with = list(/obj/item/weapon/syringe_cartridge = 7)
/obj/item/weapon/storage/box/beakers
@@ -127,6 +136,7 @@
/obj/item/weapon/storage/box/injectors
name = "box of DNA injectors"
desc = "This box contains injectors it seems."
icon_state = "dna"
starts_with = list(
/obj/item/weapon/dnainjector/h2m = 3,
/obj/item/weapon/dnainjector/m2h = 3
@@ -374,17 +384,19 @@
/obj/item/weapon/storage/box/condimentbottles
name = "box of condiment bottles"
desc = "It has a large ketchup smear on it."
icon_state = "condiment"
starts_with = list(/obj/item/weapon/reagent_containers/food/condiment = 7)
/obj/item/weapon/storage/box/cups
name = "box of paper cups"
desc = "It has pictures of paper cups on the front."
icon_state = "cups"
starts_with = list(/obj/item/weapon/reagent_containers/food/drinks/sillycup = 7)
/obj/item/weapon/storage/box/donkpockets
name = "box of donk-pockets"
desc = "<B>Instructions:</B> <I>Heat in microwave. Product will cool if not eaten within seven minutes.</I>"
icon_state = "donk_kit"
icon_state = "donkpocketbox"
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donkpocket = 7)
/obj/item/weapon/storage/box/sinpockets
@@ -450,6 +462,7 @@
/obj/item/weapon/storage/box/pillbottles
name = "box of pill bottles"
desc = "It has pictures of pill bottles on its front."
icon_state = "pillbox"
starts_with = list(/obj/item/weapon/storage/pill_bottle = 7)
/obj/item/weapon/storage/box/snappops
@@ -485,12 +498,12 @@
/obj/item/weapon/storage/box/autoinjectors
name = "box of injectors"
desc = "Contains autoinjectors."
icon_state = "syringe"
icon_state = "auto"
starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 7)
/obj/item/weapon/storage/box/lights
name = "box of replacement bulbs"
icon = 'icons/obj/storage.dmi'
icon = 'icons/obj/boxes.dmi'
icon_state = "light"
desc = "This box is shaped on the inside so that only light tubes and bulbs fit."
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
@@ -1,27 +1,3 @@
/obj/item/weapon/storage/box/survival
starts_with = list(
/obj/item/weapon/tool/prybar/red,
/obj/item/clothing/glasses/goggles,
/obj/item/clothing/mask/breath
)
/obj/item/weapon/storage/box/survival/synth
starts_with = list(
/obj/item/weapon/tool/prybar/red,
/obj/item/clothing/glasses/goggles
)
/obj/item/weapon/storage/box/survival/comp
starts_with = list(
/obj/item/weapon/tool/prybar/red,
/obj/item/clothing/glasses/goggles,
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/stack/medical/bruise_pack,
/obj/item/device/flashlight/glowstick,
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,
/obj/item/clothing/mask/breath
)
/obj/item/weapon/storage/box/explorerkeys
name = "box of volunteer headsets"
desc = "A box full of volunteer headsets, for issuing out to exploration volunteers."
@@ -39,7 +15,7 @@
/obj/item/weapon/storage/box/survival/space
name = "boxed emergency suit and helmet"
icon_state = "survivaleng"
icon_state = "survival_comp3"
starts_with = list(
/obj/item/clothing/suit/space/emergency,
/obj/item/clothing/head/helmet/space/emergency,
@@ -16,6 +16,10 @@
allow_quick_empty = TRUE
use_sound = 'sound/items/drop/flesh.ogg'
/obj/item/weapon/storage/vore_egg/Initialize()
. = ..()
randpixel_xy()
/obj/item/weapon/storage/vore_egg/open(mob/user as mob)
if(isobserver(user))
return
@@ -4,8 +4,7 @@
desc = "It looks like a weird egg."
name = "egg"
icon_state = "egg_growing"
density = 0
anchored = 1
density = FALSE
var/progress = 0
/obj/structure/alien/egg/Initialize()
+36 -6
View File
@@ -1,10 +1,11 @@
/obj/structure/alien //Gurg Addition, framework for alien eggs.
/obj/structure/alien //Gurg Addition, framework for alien eggs and structures.
name = "alien thing"
desc = "There's something alien about this."
icon = 'icons/mob/alien.dmi'
layer = ABOVE_JUNK_LAYER
var/health = 50
unacidable = TRUE
anchored = TRUE
/obj/structure/alien/proc/healthcheck()
if(health <=0)
@@ -46,16 +47,45 @@
..()
return
/obj/structure/alien/attack_generic()
attack_hand(usr)
/obj/structure/alien/attack_generic(var/mob/user, var/damage, var/attack_verb)
visible_message("<span class='danger'>[user] [attack_verb] the [src]!</span>")
playsound(src, 'sound/effects/attackblob.ogg', 100, 1)
user.do_attack_animation(src)
health -= damage
healthcheck()
return
/obj/structure/alien/attackby(var/obj/item/weapon/W, var/mob/user)
health = max(0, health - W.force)
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
/obj/structure/alien/attackby(obj/item/weapon/W as obj, mob/user as mob)
user.setClickCooldown(user.get_attack_speed(W))
var/aforce = W.force
health = max(0, health - aforce)
playsound(src, 'sound/effects/attackblob.ogg', 100, 1)
visible_message("<span class='danger'>[user] attacks the [src]!</span>")
healthcheck()
..()
return
/obj/structure/alien/attack_hand()
usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if (HULK in usr.mutations)
visible_message("<span class='warning'>[usr] destroys the [name]!</span>")
health = 0
else
// Aliens can get straight through these.
if(istype(usr,/mob/living/carbon))
var/mob/living/carbon/M = usr
if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
visible_message ("<span class='warning'>[usr] strokes the [name] and it melts away!</span>", 1)
health = 0
healthcheck()
return
visible_message("<span class='warning'>[usr] claws at the [name]!</span>")
health -= rand(5,10)
healthcheck()
return
/obj/structure/alien/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) return 0
if(istype(mover) && mover.checkpass(PASSGLASS))
@@ -0,0 +1,17 @@
/obj/structure/alien/wall
name = "resin wall"
desc = "A disgusting mass of purple slime solidified into a wall."
icon_state = "resin wall"
health = 200
opacity = 1
density = TRUE
can_atmos_pass = ATMOS_PASS_NO
/obj/structure/alien/membrane
name = "resin membrane"
desc = "A revolting mass of purple slime, it appears to be stretched enough to be transparent."
icon_state = "resin membrane"
opacity = 0
health = 120
density = TRUE
can_atmos_pass = ATMOS_PASS_NO