upstream-merge-28062
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
desc = "It's watching you suspiciously."
|
||||
|
||||
/obj/structure/closet/crate/necropolis/tendril/PopulateContents()
|
||||
var/loot = rand(1,27)
|
||||
var/loot = rand(1,28)
|
||||
switch(loot)
|
||||
if(1)
|
||||
new /obj/item/device/shared_storage/red(src)
|
||||
@@ -69,6 +69,8 @@
|
||||
if(27)
|
||||
new /obj/item/borg/upgrade/modkit/lifesteal(src)
|
||||
new /obj/item/weapon/bedsheet/cult(src)
|
||||
if(28)
|
||||
new /obj/item/borg/upgrade/modkit/bounty(src)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg,
|
||||
/obj/item/clockwork/clockwork_proselytizer/cyborg)
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
moduleselect_icon = "standard"
|
||||
feedback_key = "cyborg_standard"
|
||||
hat_offset = -3
|
||||
@@ -314,7 +314,7 @@
|
||||
emag_modules = list(/obj/item/borg/stun)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/engineer,
|
||||
/obj/item/clockwork/clockwork_proselytizer/cyborg)
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
cyborg_base_icon = "engineer"
|
||||
moduleselect_icon = "engineer"
|
||||
feedback_key = "cyborg_engineering"
|
||||
@@ -441,7 +441,7 @@
|
||||
emag_modules = list(/obj/item/weapon/reagent_containers/spray/cyborg_lube)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/janitor,
|
||||
/obj/item/clockwork/clockwork_proselytizer/cyborg)
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
cyborg_base_icon = "janitor"
|
||||
moduleselect_icon = "janitor"
|
||||
feedback_key = "cyborg_janitor"
|
||||
|
||||
@@ -91,6 +91,16 @@
|
||||
icon_living = icon_state
|
||||
icon_dead = "[visualAppearence]_dead"
|
||||
|
||||
/obj/item/drone_shell/dusty
|
||||
name = "derelict drone shell"
|
||||
desc = "A long-forgotten drone shell. It seems kind of... Space Russian."
|
||||
drone_type = /mob/living/simple_animal/drone/derelict
|
||||
|
||||
/mob/living/simple_animal/drone/derelict
|
||||
name = "derelict drone"
|
||||
default_hatmask = /obj/item/clothing/head/ushanka
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab
|
||||
name = "cogscarab"
|
||||
desc = "A strange, drone-like machine. It constantly emits the hum of gears."
|
||||
@@ -120,14 +130,14 @@
|
||||
hacked = TRUE
|
||||
visualAppearence = CLOCKDRONE
|
||||
can_be_held = FALSE
|
||||
flavortext = "<span class='heavy_brass'>You are a cogscarab</span><b>, a clockwork creation of Ratvar. As a cogscarab, you have low health, an inbuilt proselytizer that can convert brass \
|
||||
to liquified alloy, a set of relatively fast tools, </b><span class='heavy_brass'>can communicate over the Hierophant Network with :b</span><b>, and are immune to extreme \
|
||||
flavortext = "<span class='heavy_brass'>You are a cogscarab</span><b>, a clockwork creation of Ratvar. As a cogscarab, you have low health, an inbuilt fabricator that can convert brass \
|
||||
to power, a set of relatively fast tools, </b><span class='heavy_brass'>can communicate over the Hierophant Network with :b</span><b>, and are immune to extreme \
|
||||
temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create.</b>"
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/ratvar //a subtype for spawning when ratvar is alive, has a slab that it can use and a normal proselytizer
|
||||
/mob/living/simple_animal/drone/cogscarab/ratvar //a subtype for spawning when ratvar is alive, has a slab that it can use and a normal fabricatorlab that it can use and a normal fabricator
|
||||
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/admin //an admin-only subtype of cogscarab with a no-cost proselytizer and slab in its box
|
||||
/mob/living/simple_animal/drone/cogscarab/admin //an admin-only subtype of cogscarab with a no-cost fabricator and slab in its box
|
||||
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/admin
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/Initialize()
|
||||
@@ -191,11 +201,41 @@
|
||||
/mob/living/simple_animal/drone/cogscarab/ratvar_act()
|
||||
fully_heal(TRUE)
|
||||
|
||||
/obj/item/drone_shell/dusty
|
||||
name = "derelict drone shell"
|
||||
desc = "A long-forgotten drone shell. It seems kind of... Space Russian."
|
||||
drone_type = /mob/living/simple_animal/drone/derelict
|
||||
/mob/living/simple_animal/drone/cogscarab/update_icons()
|
||||
if(stat != DEAD)
|
||||
if(incapacitated())
|
||||
icon_state = "[visualAppearence]_flipped"
|
||||
else
|
||||
icon_state = visualAppearence
|
||||
else
|
||||
icon_state = "[visualAppearence]_dead"
|
||||
|
||||
/mob/living/simple_animal/drone/derelict
|
||||
name = "derelict drone"
|
||||
default_hatmask = /obj/item/clothing/head/ushanka
|
||||
/mob/living/simple_animal/drone/cogscarab/Stun(amount, updating = 1, ignore_canstun = 0)
|
||||
. = ..()
|
||||
if(.)
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/SetStunned(amount, updating = 1, ignore_canstun = 0)
|
||||
. = ..()
|
||||
if(.)
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/AdjustStunned(amount, updating = 1, ignore_canstun = 0)
|
||||
. = ..()
|
||||
if(.)
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/Weaken(amount, updating = 1, ignore_canweaken = 0)
|
||||
. = ..()
|
||||
if(.)
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/SetWeakened(amount, updating = 1, ignore_canweaken = 0)
|
||||
. = ..()
|
||||
if(.)
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/AdjustWeakened(amount, updating = 1, ignore_canweaken = 0)
|
||||
. = ..()
|
||||
if(.)
|
||||
update_icons()
|
||||
|
||||
@@ -79,3 +79,6 @@
|
||||
crusher_loot = /obj/item/crusher_trophy/watcher_wing
|
||||
loot = list()
|
||||
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
|
||||
fromtendril = TRUE
|
||||
|
||||
@@ -91,6 +91,10 @@
|
||||
stat_attack = UNCONSCIOUS
|
||||
robust_searching = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
|
||||
fromtendril = TRUE
|
||||
|
||||
|
||||
//tentacles
|
||||
/obj/effect/goliath_tentacle
|
||||
name = "Goliath tentacle"
|
||||
|
||||
@@ -124,6 +124,10 @@
|
||||
new /obj/effect/mob_spawn/human/corpse/damaged(T)
|
||||
..(gibbed)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
|
||||
fromtendril = TRUE
|
||||
|
||||
|
||||
//Legion skull
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
|
||||
name = "legion"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
a_intent = INTENT_HARM
|
||||
var/throw_message = "bounces off of"
|
||||
var/icon_aggro = null // for swapping to when we get aggressive
|
||||
var/fromtendril = FALSE
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
maxHealth = 250
|
||||
max_mobs = 3
|
||||
spawn_time = 300 //30 seconds default
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
|
||||
spawn_text = "emerges from"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
@@ -28,10 +28,10 @@
|
||||
var/obj/effect/light_emitter/tendril/emitted_light
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/goliath
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/legion
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -163,6 +163,7 @@
|
||||
range = 3
|
||||
log_override = TRUE
|
||||
|
||||
var/pressure_decrease_active = FALSE
|
||||
var/pressure_decrease = 0.25
|
||||
var/obj/item/weapon/gun/energy/kinetic_accelerator/kinetic_gun
|
||||
|
||||
@@ -179,6 +180,7 @@
|
||||
if(pressure > 50)
|
||||
name = "weakened [name]"
|
||||
damage = damage * pressure_decrease
|
||||
pressure_decrease_active = TRUE
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/kinetic/on_range()
|
||||
@@ -194,7 +196,10 @@
|
||||
if(!target_turf)
|
||||
target_turf = get_turf(src)
|
||||
if(kinetic_gun) //hopefully whoever shot this was not very, very unfortunate.
|
||||
for(var/obj/item/borg/upgrade/modkit/M in kinetic_gun.get_modkits())
|
||||
var/list/mods = kinetic_gun.get_modkits()
|
||||
for(var/obj/item/borg/upgrade/modkit/M in mods)
|
||||
M.projectile_strike_predamage(src, target_turf, target, kinetic_gun)
|
||||
for(var/obj/item/borg/upgrade/modkit/M in mods)
|
||||
M.projectile_strike(src, target_turf, target, kinetic_gun)
|
||||
if(ismineralturf(target_turf))
|
||||
var/turf/closed/mineral/M = target_turf
|
||||
@@ -265,6 +270,10 @@
|
||||
|
||||
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
|
||||
//use this one for effects you want to trigger before mods that do damage
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
//and this one for things that don't need to trigger before other damage-dealing mods
|
||||
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
|
||||
//Range
|
||||
@@ -393,7 +402,7 @@
|
||||
modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
|
||||
cost = 50
|
||||
|
||||
/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
var/valid_repeat = FALSE
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
@@ -403,7 +412,7 @@
|
||||
valid_repeat = TRUE
|
||||
if(valid_repeat)
|
||||
KA.overheat = FALSE
|
||||
KA.attempt_reload(KA.overheat_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
|
||||
KA.attempt_reload(KA.overheat_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
|
||||
|
||||
/obj/item/borg/upgrade/modkit/lifesteal
|
||||
name = "lifesteal crystal"
|
||||
@@ -414,7 +423,7 @@
|
||||
cost = 20
|
||||
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/lifesteal/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/lifesteal/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target) && isliving(K.firer))
|
||||
var/mob/living/L = target
|
||||
if(L.stat == DEAD)
|
||||
@@ -438,6 +447,43 @@
|
||||
return
|
||||
new /obj/effect/temp_visual/resonance(target_turf, K.firer, null, 30)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty
|
||||
name = "death syphon"
|
||||
desc = "Killing or assisting in killing a creature permenantly increases your damage against that type of creature."
|
||||
denied_type = /obj/item/borg/upgrade/modkit/bounty
|
||||
modifier = 1.25
|
||||
cost = 30
|
||||
var/maximum_bounty = 25
|
||||
var/list/bounties_reaped = list()
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
var/list/existing_marks = L.has_status_effect_list(STATUS_EFFECT_SYPHONMARK)
|
||||
for(var/i in existing_marks)
|
||||
var/datum/status_effect/syphon_mark/SM = i
|
||||
if(SM.reward_target == src) //we want to allow multiple people with bounty modkits to use them, but we need to replace our own marks so we don't multi-reward
|
||||
SM.reward_target = null
|
||||
qdel(SM)
|
||||
var/datum/status_effect/syphon_mark/SM = L.apply_status_effect(STATUS_EFFECT_SYPHONMARK)
|
||||
SM.reward_target = src
|
||||
if(bounties_reaped[L.type])
|
||||
var/kill_modifier = 1
|
||||
if(K.pressure_decrease_active)
|
||||
kill_modifier *= K.pressure_decrease
|
||||
var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armour_penetration)
|
||||
L.apply_damage(bounties_reaped[L.type]*kill_modifier, K.damage_type, K.def_zone, armor)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/proc/get_kill(mob/living/L)
|
||||
var/bonus_mod = 1
|
||||
if(ismegafauna(L)) //megafauna reward
|
||||
bonus_mod = 4
|
||||
if(!bounties_reaped[L.type])
|
||||
bounties_reaped[L.type] = min(modifier * bonus_mod, maximum_bounty)
|
||||
else
|
||||
bounties_reaped[L.type] = min(bounties_reaped[L.type] + (modifier * bonus_mod), maximum_bounty)
|
||||
|
||||
|
||||
//Indoors
|
||||
/obj/item/borg/upgrade/modkit/indoors
|
||||
name = "decrease pressure penalty"
|
||||
|
||||
Reference in New Issue
Block a user