Merge branch 'master' of https://github.com/yogstation13/Yogstation into katmos
@@ -5132,12 +5132,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/security/main)
|
/area/security/main)
|
||||||
"akN" = (
|
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
|
||||||
dir = 1
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel,
|
|
||||||
/area/crew_quarters/fitness/recreation)
|
|
||||||
"akQ" = (
|
"akQ" = (
|
||||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
|
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
|
||||||
dir = 10
|
dir = 10
|
||||||
@@ -72521,6 +72515,15 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/hallway/secondary/exit/departure_lounge)
|
/area/hallway/secondary/exit/departure_lounge)
|
||||||
|
"lTY" = (
|
||||||
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
|
/obj/structure/cable/yellow{
|
||||||
|
icon_state = "4-8"
|
||||||
|
},
|
||||||
|
/turf/open/floor/plasteel,
|
||||||
|
/area/crew_quarters/fitness/recreation)
|
||||||
"lUl" = (
|
"lUl" = (
|
||||||
/obj/effect/turf_decal/tile/blue{
|
/obj/effect/turf_decal/tile/blue{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -119386,7 +119389,7 @@ jPM
|
|||||||
oSR
|
oSR
|
||||||
qca
|
qca
|
||||||
vLb
|
vLb
|
||||||
akN
|
lTY
|
||||||
ahg
|
ahg
|
||||||
ahg
|
ahg
|
||||||
ahg
|
ahg
|
||||||
|
|||||||
@@ -7,9 +7,8 @@
|
|||||||
var/blocks_self = TRUE
|
var/blocks_self = TRUE
|
||||||
var/datum/callback/reaction
|
var/datum/callback/reaction
|
||||||
var/datum/callback/expire
|
var/datum/callback/expire
|
||||||
var/special_role = 0
|
|
||||||
|
|
||||||
/datum/component/anti_magic/Initialize(_magic = FALSE, _holy = FALSE, _psychic = FALSE, _allowed_slots, _charges, _blocks_self = TRUE, datum/callback/_reaction, datum/callback/_expire, _special_role = 0)
|
/datum/component/anti_magic/Initialize(_magic = FALSE, _holy = FALSE, _psychic = FALSE, _allowed_slots, _charges, _blocks_self = TRUE, datum/callback/_reaction, datum/callback/_expire)
|
||||||
if(isitem(parent))
|
if(isitem(parent))
|
||||||
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
|
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
|
||||||
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop)
|
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop)
|
||||||
@@ -28,13 +27,11 @@
|
|||||||
blocks_self = _blocks_self
|
blocks_self = _blocks_self
|
||||||
reaction = _reaction
|
reaction = _reaction
|
||||||
expire = _expire
|
expire = _expire
|
||||||
special_role = _special_role
|
|
||||||
|
|
||||||
/datum/component/anti_magic/proc/on_equip(datum/source, mob/equipper, slot)
|
/datum/component/anti_magic/proc/on_equip(datum/source, mob/equipper, slot)
|
||||||
if(!CHECK_BITFIELD(allowed_slots, slotdefine2slotbit(slot))) //Check that the slot is valid for antimagic
|
if(!CHECK_BITFIELD(allowed_slots, slotdefine2slotbit(slot))) //Check that the slot is valid for antimagic
|
||||||
UnregisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC)
|
UnregisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC)
|
||||||
return
|
return
|
||||||
if(equipper.mind?.holy_role >= special_role) //CONVERT OR DIE
|
|
||||||
RegisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC, .proc/protect, TRUE)
|
RegisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC, .proc/protect, TRUE)
|
||||||
|
|
||||||
/datum/component/anti_magic/proc/on_drop(datum/source, mob/user)
|
/datum/component/anti_magic/proc/on_drop(datum/source, mob/user)
|
||||||
|
|||||||
@@ -88,13 +88,13 @@
|
|||||||
var/mob/living/carbon/human/H = LM
|
var/mob/living/carbon/human/H = LM
|
||||||
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
|
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
|
||||||
|
|
||||||
if(H.shoes || feetCover) //are we wearing shoes
|
if((H.shoes && !istype(H.shoes, /obj/item/clothing/shoes/xeno_wraps)) || feetCover)
|
||||||
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
||||||
GLOB.footstep[T.footstep][2] * v,
|
GLOB.footstep[T.footstep][2] * v,
|
||||||
TRUE,
|
TRUE,
|
||||||
GLOB.footstep[T.footstep][3] + e)
|
GLOB.footstep[T.footstep][3] + e)
|
||||||
|
|
||||||
if((!H.shoes && !feetCover)) //are we NOT wearing shoes
|
else
|
||||||
if(H.dna.species.special_step_sounds)
|
if(H.dna.species.special_step_sounds)
|
||||||
playsound(T, pick(H.dna.species.special_step_sounds), 50, TRUE)
|
playsound(T, pick(H.dna.species.special_step_sounds), 50, TRUE)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -224,7 +224,7 @@
|
|||||||
|
|
||||||
// Shank - Makeshift weapon that can embed on throw
|
// Shank - Makeshift weapon that can embed on throw
|
||||||
/obj/item/kitchen/knife/shank
|
/obj/item/kitchen/knife/shank
|
||||||
name = "Shank"
|
name = "shank"
|
||||||
desc = "A crude knife fashioned by securing a glass shard and a rod together with cables, and welding them together."
|
desc = "A crude knife fashioned by securing a glass shard and a rod together with cables, and welding them together."
|
||||||
icon = 'icons/obj/items_and_weapons.dmi'
|
icon = 'icons/obj/items_and_weapons.dmi'
|
||||||
icon_state = "shank"
|
icon_state = "shank"
|
||||||
@@ -240,6 +240,7 @@
|
|||||||
weapon_stats = list(SWING_SPEED = 0.8, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 5, DAMAGE_HIGH = 7)
|
weapon_stats = list(SWING_SPEED = 0.8, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 5, DAMAGE_HIGH = 7)
|
||||||
embedding = list("embedded_pain_multiplier" = 3, "embed_chance" = 20, "embedded_fall_chance" = 10) // Incentive to disengage/stop chasing when stuck
|
embedding = list("embedded_pain_multiplier" = 3, "embed_chance" = 20, "embedded_fall_chance" = 10) // Incentive to disengage/stop chasing when stuck
|
||||||
attack_verb = list("stuck", "shanked", "stabbed", "shivved")
|
attack_verb = list("stuck", "shanked", "stabbed", "shivved")
|
||||||
|
materials = list(/datum/material/iron=1150, /datum/material/glass=2075)
|
||||||
|
|
||||||
/obj/item/kitchen/rollingpin
|
/obj/item/kitchen/rollingpin
|
||||||
name = "rolling pin"
|
name = "rolling pin"
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
|
|||||||
|
|
||||||
/obj/item/storage/book/bible/Initialize()
|
/obj/item/storage/book/bible/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
AddComponent(/datum/component/anti_magic, FALSE, TRUE, FALSE, null, null, TRUE, null, null, HOLY_ROLE_PRIEST)
|
AddComponent(/datum/component/anti_magic, FALSE, TRUE)
|
||||||
|
|
||||||
/obj/item/storage/book/bible/suicide_act(mob/user)
|
/obj/item/storage/book/bible/suicide_act(mob/user)
|
||||||
user.visible_message(span_suicide("[user] is offering [user.p_them()]self to [deity_name]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
user.visible_message(span_suicide("[user] is offering [user.p_them()]self to [deity_name]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
||||||
|
|||||||
@@ -47,11 +47,13 @@
|
|||||||
qdel(I)
|
qdel(I)
|
||||||
if(!isplasmaman(H)) //no killing plasmies
|
if(!isplasmaman(H)) //no killing plasmies
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(H), SLOT_W_UNIFORM)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(H), SLOT_W_UNIFORM)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD)
|
||||||
else
|
else
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/plasmaman(H), SLOT_W_UNIFORM)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/plasmaman(H), SLOT_W_UNIFORM)
|
||||||
H.equip_to_slot_or_del(new /obj/item/tank/internals/plasmaman(H), SLOT_W_UNIFORM)
|
H.equip_to_slot_or_del(new /obj/item/tank/internals/plasmaman/belt/full(H), SLOT_BELT)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/plasmaman(H), SLOT_HEAD)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), SLOT_WEAR_MASK)
|
||||||
H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS)
|
H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES)
|
||||||
H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE)
|
H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE)
|
||||||
//Yogs Start: Pacifists want to play too
|
//Yogs Start: Pacifists want to play too
|
||||||
|
|||||||
@@ -96,7 +96,7 @@
|
|||||||
|
|
||||||
to_chat(src, span_warning("You slither your tentacles up [C] and begin probing at their ear canal..."))
|
to_chat(src, span_warning("You slither your tentacles up [C] and begin probing at their ear canal..."))
|
||||||
|
|
||||||
if(!do_mob(src, C, 3 SECONDS))
|
if(!do_mob(src, C, 4 SECONDS))
|
||||||
to_chat(src, span_warning("As [C] moves away, you are dislodged and fall to the ground."))
|
to_chat(src, span_warning("As [C] moves away, you are dislodged and fall to the ground."))
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
to_chat(src, "You begin consuming [victim.name]'s soul!")
|
to_chat(src, "You begin consuming [victim.name]'s soul!")
|
||||||
if(do_after(src, 20 SECONDS, target = victim, stayStill = FALSE))
|
if(do_after(src, 30 SECONDS, target = victim, stayStill = FALSE))
|
||||||
consume()
|
consume()
|
||||||
|
|
||||||
/mob/living/simple_animal/horror/proc/consume()
|
/mob/living/simple_animal/horror/proc/consume()
|
||||||
@@ -474,12 +474,6 @@
|
|||||||
for (var/mob/living/carbon/M in range(1, src))
|
for (var/mob/living/carbon/M in range(1, src))
|
||||||
if(!M || !Adjacent(M))
|
if(!M || !Adjacent(M))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(has_upgrade("paralysis"))
|
|
||||||
playsound(loc, "sound/effects/sparks4.ogg", 30, 1, -1)
|
|
||||||
M.Stun(50)
|
|
||||||
M.SetSleeping(70) //knocked out cold
|
|
||||||
M.electrocute_act(15, src, 1, FALSE, FALSE, FALSE, 1, FALSE)
|
|
||||||
else
|
else
|
||||||
to_chat(M, span_userdanger("You feel something wrapping around your leg, pulling you down!"))
|
to_chat(M, span_userdanger("You feel something wrapping around your leg, pulling you down!"))
|
||||||
playsound(loc, "sound/weapons/whipgrab.ogg", 30, 1, -1)
|
playsound(loc, "sound/weapons/whipgrab.ogg", 30, 1, -1)
|
||||||
@@ -509,7 +503,7 @@
|
|||||||
to_chat(victim, span_userdanger("An odd, uncomfortable pressure begins to build inside your skull, behind your ear..."))
|
to_chat(victim, span_userdanger("An odd, uncomfortable pressure begins to build inside your skull, behind your ear..."))
|
||||||
|
|
||||||
leaving = TRUE
|
leaving = TRUE
|
||||||
if(do_after(src, 100, target = victim, extra_checks = CALLBACK(src, .proc/is_leaving), stayStill = FALSE))
|
if(do_after(src, 300, target = victim, extra_checks = CALLBACK(src, .proc/is_leaving), stayStill = FALSE)) //Enough time to do quick surgery
|
||||||
release_host()
|
release_host()
|
||||||
|
|
||||||
/mob/living/simple_animal/horror/proc/release_host()
|
/mob/living/simple_animal/horror/proc/release_host()
|
||||||
@@ -518,13 +512,6 @@
|
|||||||
|
|
||||||
if(!can_use_ability())
|
if(!can_use_ability())
|
||||||
return
|
return
|
||||||
|
|
||||||
if(has_upgrade("invisible_exit"))
|
|
||||||
alpha = 60
|
|
||||||
if(has_ability(/datum/action/innate/horror/chameleon))
|
|
||||||
invisible = TRUE
|
|
||||||
Update_Invisibility_Button()
|
|
||||||
to_chat(src, span_danger("You silently wiggle out of [victim]'s ear and plop to the ground before vanishing via reflective solution that covers you."))
|
|
||||||
else
|
else
|
||||||
to_chat(src, span_danger("You wiggle out of [victim]'s ear and plop to the ground."))
|
to_chat(src, span_danger("You wiggle out of [victim]'s ear and plop to the ground."))
|
||||||
if(victim.mind)
|
if(victim.mind)
|
||||||
@@ -846,3 +833,4 @@
|
|||||||
else
|
else
|
||||||
RemoveInfestActions()
|
RemoveInfestActions()
|
||||||
GrantHorrorActions()
|
GrantHorrorActions()
|
||||||
|
|
||||||
@@ -249,20 +249,20 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
to_chat(owner, span_warning("You move your tentacles away from [B.victim] and begin to transfer to [C]..."))
|
to_chat(owner, span_warning("You move your tentacles away from [B.victim] and begin to transfer to [C]..."))
|
||||||
var/delay = 20 SECONDS
|
var/delay = 30 SECONDS
|
||||||
var/silent
|
var/silent
|
||||||
if(B.victim.pulling != C)
|
if(B.victim.pulling != C)
|
||||||
silent = TRUE
|
silent = TRUE
|
||||||
else
|
else
|
||||||
switch(B.victim.grab_state)
|
switch(B.victim.grab_state)
|
||||||
if(GRAB_PASSIVE)
|
if(GRAB_PASSIVE)
|
||||||
delay = 10 SECONDS
|
delay = 20 SECONDS
|
||||||
if(GRAB_AGGRESSIVE)
|
if(GRAB_AGGRESSIVE)
|
||||||
delay = 5 SECONDS
|
delay = 10 SECONDS
|
||||||
if(GRAB_NECK)
|
if(GRAB_NECK)
|
||||||
delay = 3 SECONDS
|
delay = 5 SECONDS
|
||||||
else
|
else
|
||||||
delay = 1 SECONDS
|
delay = 3 SECONDS
|
||||||
|
|
||||||
transferring = TRUE
|
transferring = TRUE
|
||||||
if(!do_after(B.victim, delay, target = C, extra_checks = CALLBACK(src, .proc/is_transferring, C), stayStill = FALSE))
|
if(!do_after(B.victim, delay, target = C, extra_checks = CALLBACK(src, .proc/is_transferring, C), stayStill = FALSE))
|
||||||
@@ -366,21 +366,6 @@
|
|||||||
/datum/horror_upgrade/proc/apply_effects()
|
/datum/horror_upgrade/proc/apply_effects()
|
||||||
return
|
return
|
||||||
|
|
||||||
//Upgrades the stun ability
|
|
||||||
/datum/horror_upgrade/paralysis
|
|
||||||
name = "Electrocharged tentacle"
|
|
||||||
id = "paralysis"
|
|
||||||
desc = "Empowers your tentacle knockdown ability by giving it extra charge, knocking your victim down unconcious."
|
|
||||||
soul_price = 3
|
|
||||||
|
|
||||||
/datum/horror_upgrade/paralysis/apply_effects()
|
|
||||||
var/datum/action/innate/horror/A = B.has_ability(/datum/action/innate/horror/freeze_victim)
|
|
||||||
if(A)
|
|
||||||
A.name = "Paralyze Victim"
|
|
||||||
A.desc = "Shock a victim with an electrically charged tentacle."
|
|
||||||
A.button_icon_state = "paralyze"
|
|
||||||
B.update_action_buttons()
|
|
||||||
|
|
||||||
//Increases chemical regeneration rate by 2
|
//Increases chemical regeneration rate by 2
|
||||||
/datum/horror_upgrade/chemical_regen
|
/datum/horror_upgrade/chemical_regen
|
||||||
name = "Efficient chemical glands"
|
name = "Efficient chemical glands"
|
||||||
@@ -416,13 +401,6 @@
|
|||||||
B.health = round(min(B.maxHealth,B.health * 2))
|
B.health = round(min(B.maxHealth,B.health * 2))
|
||||||
B.maxHealth = round(B.maxHealth * 2)
|
B.maxHealth = round(B.maxHealth * 2)
|
||||||
|
|
||||||
//Makes horror almost invisible for a short time after leaving a host
|
|
||||||
/datum/horror_upgrade/invisibility
|
|
||||||
name = "Reflective fluids"
|
|
||||||
id = "invisible_exit"
|
|
||||||
desc = "You build up reflective solution inside host's brain. Upon exiting a host, you're briefly covered in it, rendering you near invisible for a few seconds. This mutation also makes the host unable to notice you exiting it directly."
|
|
||||||
soul_price = 2
|
|
||||||
|
|
||||||
//Increases melee damage to 20
|
//Increases melee damage to 20
|
||||||
/datum/horror_upgrade/dmg_up
|
/datum/horror_upgrade/dmg_up
|
||||||
name = "Sharpened teeth"
|
name = "Sharpened teeth"
|
||||||
@@ -459,3 +437,4 @@
|
|||||||
id = "deep_control"
|
id = "deep_control"
|
||||||
desc = "Your probosci become insulated, protecting them from neural shocks. This makes it harder for the host to regain control over their body."
|
desc = "Your probosci become insulated, protecting them from neural shocks. This makes it harder for the host to regain control over their body."
|
||||||
soul_price = 2
|
soul_price = 2
|
||||||
|
|
||||||
@@ -159,6 +159,7 @@
|
|||||||
name = "reactive tesla armor"
|
name = "reactive tesla armor"
|
||||||
desc = "An experimental suit of armor with sensitive detectors hooked up to a huge capacitor grid, with emitters strutting out of it. Zap."
|
desc = "An experimental suit of armor with sensitive detectors hooked up to a huge capacitor grid, with emitters strutting out of it. Zap."
|
||||||
siemens_coefficient = -1
|
siemens_coefficient = -1
|
||||||
|
reactivearmor_cooldown_duration = 3 SECONDS
|
||||||
var/tesla_power = 25000
|
var/tesla_power = 25000
|
||||||
var/tesla_range = 20
|
var/tesla_range = 20
|
||||||
var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE
|
var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE
|
||||||
@@ -195,6 +196,7 @@
|
|||||||
/obj/item/clothing/suit/armor/reactive/repulse
|
/obj/item/clothing/suit/armor/reactive/repulse
|
||||||
name = "reactive repulse armor"
|
name = "reactive repulse armor"
|
||||||
desc = "An experimental suit of armor that violently throws back attackers."
|
desc = "An experimental suit of armor that violently throws back attackers."
|
||||||
|
reactivearmor_cooldown_duration = 5 SECONDS
|
||||||
var/repulse_force = MOVE_FORCE_EXTREMELY_STRONG
|
var/repulse_force = MOVE_FORCE_EXTREMELY_STRONG
|
||||||
|
|
||||||
/obj/item/clothing/suit/armor/reactive/repulse/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
/obj/item/clothing/suit/armor/reactive/repulse/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||||
|
|||||||
@@ -164,6 +164,9 @@
|
|||||||
to_chat(user, span_notice("You detach [A] from [src]."))
|
to_chat(user, span_notice("You detach [A] from [src]."))
|
||||||
else
|
else
|
||||||
to_chat(user, span_notice("You detach [A] from [src] and it falls on the floor."))
|
to_chat(user, span_notice("You detach [A] from [src] and it falls on the floor."))
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
if(!T)
|
||||||
|
T = get_turf(user)
|
||||||
A.forceMove(get_turf(src))
|
A.forceMove(get_turf(src))
|
||||||
|
|
||||||
if(ishuman(loc))
|
if(ishuman(loc))
|
||||||
|
|||||||
@@ -71,7 +71,6 @@
|
|||||||
transform = matrix()*0.75
|
transform = matrix()*0.75
|
||||||
animate(src, transform = matrix()*1.5, time = duration)
|
animate(src, transform = matrix()*1.5, time = duration)
|
||||||
deltimer(timerid)
|
deltimer(timerid)
|
||||||
addtimer(CALLBACK(src, .proc/replicate, get_turf(src), creator, duration), duration, TIMER_STOPPABLE)//yogs: adds field replication
|
|
||||||
timerid = addtimer(CALLBACK(src, .proc/burst), duration, TIMER_STOPPABLE)
|
timerid = addtimer(CALLBACK(src, .proc/burst), duration, TIMER_STOPPABLE)
|
||||||
|
|
||||||
/obj/effect/temp_visual/resonance/Destroy()
|
/obj/effect/temp_visual/resonance/Destroy()
|
||||||
@@ -97,6 +96,7 @@
|
|||||||
new /obj/effect/temp_visual/resonance_crush(T)
|
new /obj/effect/temp_visual/resonance_crush(T)
|
||||||
if(ismineralturf(T))
|
if(ismineralturf(T))
|
||||||
var/turf/closed/mineral/M = T
|
var/turf/closed/mineral/M = T
|
||||||
|
replicate(M)
|
||||||
M.gets_drilled(creator)
|
M.gets_drilled(creator)
|
||||||
check_pressure(T)
|
check_pressure(T)
|
||||||
playsound(T,'sound/weapons/resonator_blast.ogg',50,1)
|
playsound(T,'sound/weapons/resonator_blast.ogg',50,1)
|
||||||
@@ -117,10 +117,9 @@
|
|||||||
transform = matrix()*1.5
|
transform = matrix()*1.5
|
||||||
animate(src, transform = matrix()*0.1, alpha = 50, time = 4)
|
animate(src, transform = matrix()*0.1, alpha = 50, time = 4)
|
||||||
|
|
||||||
/obj/effect/temp_visual/resonance/proc/replicate(turf/closed/mineral/M, creator, timetoburst) //yogs start: adds replication to resonator fields
|
/obj/effect/temp_visual/resonance/proc/replicate(turf/closed/mineral/M) //yogs start: adds replication to resonator fields
|
||||||
if(!istype(M))
|
if(!istype(M) || !M.mineralType) // so we don't end up in the ultimate chain reaction
|
||||||
return
|
return
|
||||||
for(var/turf/closed/mineral/T in orange(1, M))
|
for(var/turf/closed/mineral/T in orange(1, M))
|
||||||
if(istype(T))
|
if(istype(T) && M.mineralType == T.mineralType)
|
||||||
if(M.mineralType == T.mineralType && M.mineralType != null) // so we don't end up in the ultimate chain reaction
|
new /obj/effect/temp_visual/resonance(T, creator, null, duration) //yogs end
|
||||||
new /obj/effect/temp_visual/resonance(T, creator, null, timetoburst) //yogs end
|
|
||||||
|
|||||||
@@ -221,6 +221,9 @@
|
|||||||
. += get_modular_computer_parts_examine(user)
|
. += get_modular_computer_parts_examine(user)
|
||||||
|
|
||||||
/obj/item/modular_computer/update_icon()
|
/obj/item/modular_computer/update_icon()
|
||||||
|
if(!physical)
|
||||||
|
return
|
||||||
|
|
||||||
SSvis_overlays.remove_vis_overlay(physical, physical.managed_vis_overlays)
|
SSvis_overlays.remove_vis_overlay(physical, physical.managed_vis_overlays)
|
||||||
var/program_overlay = ""
|
var/program_overlay = ""
|
||||||
var/is_broken = obj_integrity <= integrity_failure
|
var/is_broken = obj_integrity <= integrity_failure
|
||||||
@@ -560,4 +563,3 @@
|
|||||||
active_program = program
|
active_program = program
|
||||||
program.alert_pending = FALSE
|
program.alert_pending = FALSE
|
||||||
enabled = TRUE
|
enabled = TRUE
|
||||||
update_icon()
|
|
||||||
|
|||||||
@@ -2,25 +2,21 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
ui_interact(user)
|
ui_interact(user)
|
||||||
|
|
||||||
/obj/item/modular_computer/proc/can_show_ui(mob/user, datum/tgui/ui)
|
/obj/item/modular_computer/proc/can_show_ui(mob/user)
|
||||||
if(!enabled)
|
if(!enabled)
|
||||||
if(ui)
|
|
||||||
ui.close()
|
|
||||||
return FALSE
|
return FALSE
|
||||||
if(!use_power())
|
if(!use_power())
|
||||||
if(ui)
|
|
||||||
ui.close()
|
|
||||||
return FALSE
|
return FALSE
|
||||||
// Robots don't really need to see the screen, their wireless connection works as long as computer is on.
|
// Robots don't really need to see the screen, their wireless connection works as long as computer is on.
|
||||||
if(!screen_on && !issilicon(user))
|
if(!screen_on && !issilicon(user))
|
||||||
if(ui)
|
|
||||||
ui.close()
|
|
||||||
return FALSE
|
return FALSE
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
// Operates TGUI
|
// Operates TGUI
|
||||||
/obj/item/modular_computer/ui_interact(mob/user, datum/tgui/ui)
|
/obj/item/modular_computer/ui_interact(mob/user, datum/tgui/ui)
|
||||||
if (!can_show_ui(user, ui))
|
if (!can_show_ui(user))
|
||||||
|
if(ui)
|
||||||
|
ui.close()
|
||||||
return
|
return
|
||||||
// If we have an active program switch to it now.
|
// If we have an active program switch to it now.
|
||||||
if(active_program)
|
if(active_program)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
// No running around with open laptops in hands.
|
// No running around with open laptops in hands.
|
||||||
item_flags = SLOWS_WHILE_IN_HAND
|
item_flags = SLOWS_WHILE_IN_HAND
|
||||||
|
|
||||||
screen_on = 0 // Starts closed
|
screen_on = FALSE // Starts closed
|
||||||
var/start_open = TRUE // unless this var is set to 1
|
var/start_open = TRUE // unless this var is set to 1
|
||||||
var/icon_state_closed = "laptop-closed"
|
var/icon_state_closed = "laptop-closed"
|
||||||
var/w_class_open = WEIGHT_CLASS_BULKY
|
var/w_class_open = WEIGHT_CLASS_BULKY
|
||||||
@@ -95,10 +95,15 @@
|
|||||||
to_chat(user, span_notice("You close \the [src]."))
|
to_chat(user, span_notice("You close \the [src]."))
|
||||||
slowdown = initial(slowdown)
|
slowdown = initial(slowdown)
|
||||||
w_class = initial(w_class)
|
w_class = initial(w_class)
|
||||||
|
icon_state = icon_state_closed
|
||||||
else
|
else
|
||||||
to_chat(user, span_notice("You open \the [src]."))
|
to_chat(user, span_notice("You open \the [src]."))
|
||||||
slowdown = slowdown_open
|
slowdown = slowdown_open
|
||||||
w_class = w_class_open
|
w_class = w_class_open
|
||||||
|
if(enabled)
|
||||||
|
icon_state = icon_state_powered
|
||||||
|
else
|
||||||
|
icon_state = icon_state_unpowered
|
||||||
|
|
||||||
screen_on = !screen_on
|
screen_on = !screen_on
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|||||||
@@ -197,7 +197,9 @@
|
|||||||
|
|
||||||
/datum/computer_file/program/ui_interact(mob/user, datum/tgui/ui)
|
/datum/computer_file/program/ui_interact(mob/user, datum/tgui/ui)
|
||||||
ui = SStgui.try_update_ui(user, src, ui)
|
ui = SStgui.try_update_ui(user, src, ui)
|
||||||
if (!computer.can_show_ui(user, ui))
|
if (!computer.can_show_ui(user))
|
||||||
|
if(ui)
|
||||||
|
ui.close()
|
||||||
return
|
return
|
||||||
if(!ui && tgui_id)
|
if(!ui && tgui_id)
|
||||||
ui = new(user, src, tgui_id, filedesc)
|
ui = new(user, src, tgui_id, filedesc)
|
||||||
@@ -214,10 +216,12 @@
|
|||||||
if(computer)
|
if(computer)
|
||||||
switch(action)
|
switch(action)
|
||||||
if("PC_exit")
|
if("PC_exit")
|
||||||
|
computer.play_interact_sound()
|
||||||
computer.kill_program()
|
computer.kill_program()
|
||||||
ui.close()
|
ui.close()
|
||||||
return TRUE
|
return TRUE
|
||||||
if("PC_shutdown")
|
if("PC_shutdown")
|
||||||
|
computer.play_interact_sound()
|
||||||
computer.shutdown_computer()
|
computer.shutdown_computer()
|
||||||
ui.close()
|
ui.close()
|
||||||
return TRUE
|
return TRUE
|
||||||
@@ -225,7 +229,7 @@
|
|||||||
var/mob/user = usr
|
var/mob/user = usr
|
||||||
if(!computer.active_program || !computer.all_components[MC_CPU])
|
if(!computer.active_program || !computer.all_components[MC_CPU])
|
||||||
return
|
return
|
||||||
|
computer.play_interact_sound()
|
||||||
computer.idle_threads.Add(computer.active_program)
|
computer.idle_threads.Add(computer.active_program)
|
||||||
program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs
|
program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs
|
||||||
|
|
||||||
@@ -246,4 +250,6 @@
|
|||||||
/datum/computer_file/program/ui_status(mob/user)
|
/datum/computer_file/program/ui_status(mob/user)
|
||||||
if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists.
|
if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists.
|
||||||
return UI_CLOSE
|
return UI_CLOSE
|
||||||
|
if(!computer.can_show_ui(user))
|
||||||
|
return UI_CLOSE
|
||||||
return ..()
|
return ..()
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
var/turf/T = get_turf(computer)
|
var/turf/T = get_turf(computer)
|
||||||
z = T.z
|
z = T.z
|
||||||
var/list/death_list = GLOB.crewmonitor.death_list?["[z]"]
|
var/list/death_list = GLOB.crewmonitor.death_list?["[z]"]
|
||||||
if(death_list.len > 0)
|
if(death_list && death_list.len > 0)
|
||||||
alarm = TRUE
|
alarm = TRUE
|
||||||
else
|
else
|
||||||
alarm = FALSE
|
alarm = FALSE
|
||||||
|
|||||||
@@ -133,6 +133,8 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
|
|||||||
var/obj/item/clothing/CS = F.wear_suit
|
var/obj/item/clothing/CS = F.wear_suit
|
||||||
if (CS.clothing_flags & THICKMATERIAL)
|
if (CS.clothing_flags & THICKMATERIAL)
|
||||||
zap --
|
zap --
|
||||||
|
if(zap > 0)
|
||||||
|
zap = 3 - zap // 1 is higher severity emp than 2
|
||||||
if(zap > 0)
|
if(zap > 0)
|
||||||
user.emp_act(zap)
|
user.emp_act(zap)
|
||||||
user.emote("scream") //Chad coders use M.say("*scream")
|
user.emote("scream") //Chad coders use M.say("*scream")
|
||||||
@@ -201,6 +203,7 @@ GLOBAL_LIST_EMPTY(pool_filters)
|
|||||||
var/desired_temperature = 300 //Room temperature
|
var/desired_temperature = 300 //Room temperature
|
||||||
var/current_temperature = 300 //current temp
|
var/current_temperature = 300 //current temp
|
||||||
var/preset_reagent_type = null //Set this if you want your pump to start filled with a given reagent. SKEWIUM POOL SKEWIUM POOL!
|
var/preset_reagent_type = null //Set this if you want your pump to start filled with a given reagent. SKEWIUM POOL SKEWIUM POOL!
|
||||||
|
var/temp_rate = 0.5
|
||||||
|
|
||||||
/obj/machinery/pool_filter/examine(mob/user)
|
/obj/machinery/pool_filter/examine(mob/user)
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -241,9 +244,13 @@ GLOBAL_LIST_EMPTY(pool_filters)
|
|||||||
if(!LAZYLEN(pool) || !is_operational())
|
if(!LAZYLEN(pool) || !is_operational())
|
||||||
return //No use having one of these processing for no reason is there?
|
return //No use having one of these processing for no reason is there?
|
||||||
use_power(idle_power_usage)
|
use_power(idle_power_usage)
|
||||||
var/delta = (current_temperature > desired_temperature) ? -0.5 : 0.5
|
if (current_temperature > desired_temperature)
|
||||||
current_temperature += delta
|
current_temperature -= temp_rate
|
||||||
current_temperature = clamp(current_temperature, T0C, desired_temperature)
|
current_temperature = max(desired_temperature, current_temperature)
|
||||||
|
else if (current_temperature < desired_temperature)
|
||||||
|
current_temperature += temp_rate
|
||||||
|
current_temperature = min(desired_temperature, current_temperature)
|
||||||
|
|
||||||
var/trans_amount = reagents.total_volume / pool.len //Split up the reagents equally.
|
var/trans_amount = reagents.total_volume / pool.len //Split up the reagents equally.
|
||||||
for(var/turf/open/indestructible/sound/pool/water as() in pool)
|
for(var/turf/open/indestructible/sound/pool/water as() in pool)
|
||||||
if(reagents.reagent_list.len)
|
if(reagents.reagent_list.len)
|
||||||
@@ -267,12 +274,13 @@ GLOBAL_LIST_EMPTY(pool_filters)
|
|||||||
var/mob/living/carbon/C = M
|
var/mob/living/carbon/C = M
|
||||||
if(current_temperature <= 283.5) //Colder than 10 degrees is going to make you very cold
|
if(current_temperature <= 283.5) //Colder than 10 degrees is going to make you very cold
|
||||||
if(iscarbon(M))
|
if(iscarbon(M))
|
||||||
C.adjust_bodytemperature(-80, 80)
|
C.adjust_bodytemperature(-80, current_temperature)
|
||||||
to_chat(M, "<span class='warning'>The water is freezing cold!</span>")
|
to_chat(M, "<span class='warning'>The water is freezing cold!</span>")
|
||||||
else if(current_temperature >= 308.5) //Hotter than 35 celsius is going to make you burn up
|
else if(current_temperature >= 308.5) //Hotter than 35 celsius is going to make you burn up
|
||||||
if(iscarbon(M))
|
if(iscarbon(M))
|
||||||
C.adjust_bodytemperature(35, 0, 500)
|
C.adjust_bodytemperature(35, 0, current_temperature)
|
||||||
M.adjustFireLoss(5)
|
if(!HAS_TRAIT(C, TRAIT_RESISTHEAT))
|
||||||
|
C.adjustFireLoss(5)
|
||||||
to_chat(M, "<span class='danger'>The water is searing hot!</span>")
|
to_chat(M, "<span class='danger'>The water is searing hot!</span>")
|
||||||
|
|
||||||
/obj/structure/pool_ladder/attack_hand(mob/user)
|
/obj/structure/pool_ladder/attack_hand(mob/user)
|
||||||
|
|||||||
@@ -498,7 +498,7 @@
|
|||||||
set_light(gun_light.brightness_on)
|
set_light(gun_light.brightness_on)
|
||||||
else
|
else
|
||||||
set_light(0)
|
set_light(0)
|
||||||
cut_overlays(flashlight_overlay, TRUE)
|
cut_overlay(flashlight_overlay, TRUE)
|
||||||
var/state = "flight[gun_light.on? "_on":""]" //Generic state.
|
var/state = "flight[gun_light.on? "_on":""]" //Generic state.
|
||||||
if(gun_light.icon_state in icon_states('icons/obj/guns/flashlights.dmi')) //Snowflake state?
|
if(gun_light.icon_state in icon_states('icons/obj/guns/flashlights.dmi')) //Snowflake state?
|
||||||
state = gun_light.icon_state
|
state = gun_light.icon_state
|
||||||
@@ -508,7 +508,7 @@
|
|||||||
add_overlay(flashlight_overlay, TRUE)
|
add_overlay(flashlight_overlay, TRUE)
|
||||||
else
|
else
|
||||||
set_light(0)
|
set_light(0)
|
||||||
cut_overlays(flashlight_overlay, TRUE)
|
cut_overlay(flashlight_overlay, TRUE)
|
||||||
flashlight_overlay = null
|
flashlight_overlay = null
|
||||||
update_icon(TRUE)
|
update_icon(TRUE)
|
||||||
for(var/X in actions)
|
for(var/X in actions)
|
||||||
|
|||||||
@@ -96,13 +96,17 @@
|
|||||||
starting_organ = /obj/item/organ/cyberimp/chest/reviver
|
starting_organ = /obj/item/organ/cyberimp/chest/reviver
|
||||||
|
|
||||||
/obj/item/autosurgeon/medibeam
|
/obj/item/autosurgeon/medibeam
|
||||||
|
uses = 1
|
||||||
starting_organ = /obj/item/organ/cyberimp/arm/medibeam
|
starting_organ = /obj/item/organ/cyberimp/arm/medibeam
|
||||||
|
|
||||||
/obj/item/autosurgeon/organ/syndicate/syndie_mantis
|
/obj/item/autosurgeon/organ/syndicate/syndie_mantis
|
||||||
|
uses = 1
|
||||||
starting_organ = /obj/item/organ/cyberimp/arm/syndie_mantis
|
starting_organ = /obj/item/organ/cyberimp/arm/syndie_mantis
|
||||||
|
|
||||||
/obj/item/autosurgeon/organ/syndicate/syndie_mantis/l
|
/obj/item/autosurgeon/organ/syndicate/syndie_mantis/l
|
||||||
|
uses = 1
|
||||||
starting_organ = /obj/item/organ/cyberimp/arm/syndie_mantis/l
|
starting_organ = /obj/item/organ/cyberimp/arm/syndie_mantis/l
|
||||||
|
|
||||||
/obj/item/autosurgeon/plasmavessel //Yogs Start: Just an autosurgeon with a plasma vessel in it, used in /obj/item/storage/box/syndie_kit/xeno_organ_kit
|
/obj/item/autosurgeon/plasmavessel //Yogs Start: Just an autosurgeon with a plasma vessel in it, used in /obj/item/storage/box/syndie_kit/xeno_organ_kit
|
||||||
|
uses = 3
|
||||||
starting_organ = /obj/item/organ/alien/plasmavessel //Yogs End
|
starting_organ = /obj/item/organ/alien/plasmavessel //Yogs End
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
/obj/item/organ/heart/cursed
|
/obj/item/organ/heart/cursed
|
||||||
name = "cursed heart"
|
name = "cursed heart"
|
||||||
desc = "A heart that, when inserted, will force you to pump it manually."
|
desc = "A heart that, when inserted, will force you to pump it manually."
|
||||||
icon_state = "cursedheart-off"
|
icon_state = "cursedheart"
|
||||||
icon_base = "cursedheart"
|
icon_base = "cursedheart"
|
||||||
decay_factor = 0
|
decay_factor = 0
|
||||||
actions_types = list(/datum/action/item_action/organ_action/cursed_heart)
|
actions_types = list(/datum/action/item_action/organ_action/cursed_heart)
|
||||||
|
|||||||
@@ -498,7 +498,7 @@
|
|||||||
/obj/item/organ/lungs/ghetto
|
/obj/item/organ/lungs/ghetto
|
||||||
name = "oxygen tanks welded to a modular reciever"
|
name = "oxygen tanks welded to a modular reciever"
|
||||||
desc = "A pair of oxygen tanks which have been attached to a modular (oxygen) receiver. They are incapable of supplying air, but can work as a replacement for lungs."
|
desc = "A pair of oxygen tanks which have been attached to a modular (oxygen) receiver. They are incapable of supplying air, but can work as a replacement for lungs."
|
||||||
icon_state = "lungs_g"
|
icon_state = "lungs-g"
|
||||||
organ_efficiency = 0.5
|
organ_efficiency = 0.5
|
||||||
organ_flags = ORGAN_SYNTHETIC //the moment i understood the weakness of flesh, it disgusted me, and i yearned for the certainty, of steel
|
organ_flags = ORGAN_SYNTHETIC //the moment i understood the weakness of flesh, it disgusted me, and i yearned for the certainty, of steel
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
AshCorr = Host
|
AshCorr = Host
|
||||||
Xantam = Host
|
Xantam = Host
|
||||||
|
|
||||||
Ynot01 = Council Member
|
tehladyk = Council Member
|
||||||
MenacingManatee = Council Member
|
MenacingManatee = Council Member
|
||||||
Num1bamf = Council Member
|
Num1bamf = Council Member
|
||||||
adamsogm = Council Member
|
adamsogm = Council Member
|
||||||
|
|||||||
@@ -58,6 +58,86 @@
|
|||||||
-->
|
-->
|
||||||
<div class="commit sansserif">
|
<div class="commit sansserif">
|
||||||
|
|
||||||
|
<h2 class="date">10 March 2022</h2>
|
||||||
|
<h3 class="author">ToasterBiome updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">flashlights on guns properly clear their overlay instead of all overlays</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">adamsong updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">Veil now works on light prisms</li>
|
||||||
|
<li class="bugfix">fixed runtime in crew_monitor.dm</li>
|
||||||
|
<li class="bugfix">fixed runtime in remove_accessory</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">cuackles updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">tweaked a few things</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 class="date">09 March 2022</h2>
|
||||||
|
<h3 class="author">SomeguyManperson updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">resonator field replication now works if you manually detonate the resonatoe field rather than only working if the field detonates naturally</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 class="date">07 March 2022</h2>
|
||||||
|
<h3 class="author">ChesterTheCheesy updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">gives the rest of reactive armors respectible cooldowns</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">Mqiib updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="rscdel">Removed invisible escape and funny aoe knockout ability upgrades</li>
|
||||||
|
<li class="tweak">Massively increased escape time and soul eating time</li>
|
||||||
|
<li class="tweak">Moderate increases to direct host transfer time</li>
|
||||||
|
<li class="tweak">Increases time to crawl into someone's ear</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">SomeguyManperson updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">the bible's holy antimagic effect now works on normal people again</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">ToasterBiome updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">cursed heart has correct sprite now</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">adamsong updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">fixed pool emp effect being the wrong severity</li>
|
||||||
|
<li class="bugfix">fixed pools temperature instantly lowering</li>
|
||||||
|
<li class="bugfix">fixed pools damaging people with heat resistance</li>
|
||||||
|
<li class="bugfix">fixed pools violating the laws of thermodynamics</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">nmajask updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">modular laptops now use the correct icons when opened</li>
|
||||||
|
<li class="bugfix">you can no longer use programs on a modular laptop with its lid is shut</li>
|
||||||
|
<li class="bugfix">fixed some buttons not having interaction sounds</li>
|
||||||
|
<li class="bugfix">fixed a missing wire on meta</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">tattax updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">plasmaman now spawn with proper clothing on highlander event</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">ynot01 updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">All traitor-available autosurgeons are now corrected to be one-time-use</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 class="date">06 March 2022</h2>
|
||||||
|
<h3 class="author">Mqiib updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">Fixes the icon state for ghetto lungs</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">cuackles updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="imageadd">added t45b new sprite</li>
|
||||||
|
<li class="imagedel">deleted t45b old sprite</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="author">tattax updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="rscadd">Adds all four states to the shank sprite in-hands.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h2 class="date">03 March 2022</h2>
|
<h2 class="date">03 March 2022</h2>
|
||||||
<h3 class="author">ToasterBiome updated:</h3>
|
<h3 class="author">ToasterBiome updated:</h3>
|
||||||
<ul class="changes bgimages16">
|
<ul class="changes bgimages16">
|
||||||
@@ -1181,114 +1261,6 @@
|
|||||||
<ul class="changes bgimages16">
|
<ul class="changes bgimages16">
|
||||||
<li class="bugfix">fixed a locker name in the yogurtstation brig</li>
|
<li class="bugfix">fixed a locker name in the yogurtstation brig</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2 class="date">10 December 2021</h2>
|
|
||||||
<h3 class="author"> Lucy updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">Holoparasites are now bound to a user's mind rather than body.</li>
|
|
||||||
<li class="tweak">Holoparasite injectors are now refundable if you don't manage to get a holoparasite.</li>
|
|
||||||
<li class="tweak">Holoparasite injectors now cost 12 TC for traitors, as quite honestly, more often than not they're a wildcard/liability.</li>
|
|
||||||
<li class="tweak">Assassin now costs 3 points.</li>
|
|
||||||
<li class="tweak">The Hand now costs 4 points.</li>
|
|
||||||
<li class="tweak">Limited Healing now costs 2 points.</li>
|
|
||||||
<li class="tweak">Time Erasure now costs 4 points.</li>
|
|
||||||
<li class="bugfix">Scout holoparasites are now properly invincible when scouting.</li>
|
|
||||||
<li class="tweak">Frenzy's ranged punch now has much higher knockback.</li>
|
|
||||||
<li class="tweak">The Guardian Builder UI is now multi-tabbed, as originally intended.</li>
|
|
||||||
<li class="tweak">There is no more limit to how much you can reset your holoparasites.</li>
|
|
||||||
<li class="tweak">When ghosts are prompted to become a holoparasite, they will be shown the stats and abilities of the holoparasite.</li>
|
|
||||||
<li class="tweak">Holoparasites will be anchored to their owner after manifesting until it chooses to move itself.</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">Absolucy updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">All infiltrator chameleon items are now syndicate chameleon items, meaning only they will get the action buttons for them.</li>
|
|
||||||
<li class="tweak">All chameleon hardsuits now default to being called "engineering hardsuit", and their chameleon functionality is also syndicate-only</li>
|
|
||||||
<li class="tweak">Infiltrators now have an engineer box and not a syndicate box in their backpack, because why do they need a very un-stealthy syndicate mask?</li>
|
|
||||||
<li class="bugfix">Chameleon IDs and PDAs will no longer go back to a "generic" name when their appearance is changed</li>
|
|
||||||
<li class="bugfix">The "steal 28 moles of plasma" objective will now be complete for infiltrators if it's in the base</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">SomeguyManperson updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="bugfix">no more spare ID spamming</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">adamsong updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="rscdel">Removed the viro database on the med records console</li>
|
|
||||||
<li class="bugfix">fixed massive security exploit with the viro database on the med records console</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2 class="date">09 December 2021</h2>
|
|
||||||
<h3 class="author">nmajask updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="bugfix">on delta, the medbay security checkpoint and bottom left maints door now have the correct areas</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">wejengin2 updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">disables deltastation</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2 class="date">08 December 2021</h2>
|
|
||||||
<h3 class="author">nmajask updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">reworked Delta medbay</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2 class="date">07 December 2021</h2>
|
|
||||||
<h3 class="author">SomeguyManperson updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="rscdel">every map except box is now out of rotation, aka nothing has changed</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">UselessTheremin updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">cat butcher ruin now has a tiny fan</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">nmajask updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">added a shuttle docking port to the space bar</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2 class="date">06 December 2021</h2>
|
|
||||||
<h3 class="author">ChesterTheCheesy updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="rscadd">Added a new space ruin: UFO crashed into asteroid</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">SomeguyManperson updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="bugfix">mega arachnid snares now work</li>
|
|
||||||
<li class="bugfix">the supermatter cutting scalpel no longer gets deleted for cutting the supermatter when trying to cut the supermatter</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">ToasterBiome updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="bugfix">grilling items dont spam steam overlays</li>
|
|
||||||
<li class="bugfix">placing things on the griddle doesn't have the item move animation</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">redmoogle updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">Drones and clockwork shells now remove their listing if used up</li>
|
|
||||||
<li class="rscadd">Positronic brains now show up in ghost menu</li>
|
|
||||||
<li class="tweak">Spawner menu now looks marginally better if there are no spawners</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2 class="date">05 December 2021</h2>
|
|
||||||
<h3 class="author"> Absolucy updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="rscadd">Added the Infiltration game mode!</li>
|
|
||||||
<li class="rscadd">In Infiltration, there's a team of Syndicate infiltrators who will attempt to infiltrate Space Station 13.</li>
|
|
||||||
<li class="rscadd">The infiltrators can have various objectives, ranging from simple traitor objectives, to kidnapping someone important, hijacking the AI unit, or stealing power!</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author"> Lucy updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="bugfix">Scout holoparasites can now properly scout.</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">TheGamerdk updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="tweak">Updates the changelog. Yes, the changelog that YOU ARE CURRENTLY READING! If you can spot the difference you may be entitled to a prize!</li>
|
|
||||||
</ul>
|
|
||||||
<h3 class="author">nmajask updated:</h3>
|
|
||||||
<ul class="changes bgimages16">
|
|
||||||
<li class="bugfix">fixed some jobs getting antags they shouldn't and vice versa on dynamic</li>
|
|
||||||
<li class="tweak">the bounty board, energy harvester controller, and portrait painter programs now have program icons</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<b>GoonStation 13 Development Team</b>
|
<b>GoonStation 13 Development Team</b>
|
||||||
|
|||||||
@@ -30235,3 +30235,50 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
|||||||
- rscadd: Adds the ability for external tooling to send server messages
|
- rscadd: Adds the ability for external tooling to send server messages
|
||||||
maxion12345:
|
maxion12345:
|
||||||
- rscadd: AI's can now research RGB lightings for their datacores.
|
- rscadd: AI's can now research RGB lightings for their datacores.
|
||||||
|
2022-03-06:
|
||||||
|
Mqiib:
|
||||||
|
- bugfix: Fixes the icon state for ghetto lungs
|
||||||
|
cuackles:
|
||||||
|
- imageadd: added t45b new sprite
|
||||||
|
- imagedel: deleted t45b old sprite
|
||||||
|
tattax:
|
||||||
|
- rscadd: Adds all four states to the shank sprite in-hands.
|
||||||
|
2022-03-07:
|
||||||
|
ChesterTheCheesy:
|
||||||
|
- tweak: gives the rest of reactive armors respectible cooldowns
|
||||||
|
Mqiib:
|
||||||
|
- rscdel: Removed invisible escape and funny aoe knockout ability upgrades
|
||||||
|
- tweak: Massively increased escape time and soul eating time
|
||||||
|
- tweak: Moderate increases to direct host transfer time
|
||||||
|
- tweak: Increases time to crawl into someone's ear
|
||||||
|
SomeguyManperson:
|
||||||
|
- tweak: the bible's holy antimagic effect now works on normal people again
|
||||||
|
ToasterBiome:
|
||||||
|
- bugfix: cursed heart has correct sprite now
|
||||||
|
adamsong:
|
||||||
|
- bugfix: fixed pool emp effect being the wrong severity
|
||||||
|
- bugfix: fixed pools temperature instantly lowering
|
||||||
|
- bugfix: fixed pools damaging people with heat resistance
|
||||||
|
- bugfix: fixed pools violating the laws of thermodynamics
|
||||||
|
nmajask:
|
||||||
|
- bugfix: modular laptops now use the correct icons when opened
|
||||||
|
- bugfix: you can no longer use programs on a modular laptop with its lid is shut
|
||||||
|
- bugfix: fixed some buttons not having interaction sounds
|
||||||
|
- bugfix: fixed a missing wire on meta
|
||||||
|
tattax:
|
||||||
|
- bugfix: plasmaman now spawn with proper clothing on highlander event
|
||||||
|
ynot01:
|
||||||
|
- tweak: All traitor-available autosurgeons are now corrected to be one-time-use
|
||||||
|
2022-03-09:
|
||||||
|
SomeguyManperson:
|
||||||
|
- tweak: resonator field replication now works if you manually detonate the resonatoe
|
||||||
|
field rather than only working if the field detonates naturally
|
||||||
|
2022-03-10:
|
||||||
|
ToasterBiome:
|
||||||
|
- bugfix: flashlights on guns properly clear their overlay instead of all overlays
|
||||||
|
adamsong:
|
||||||
|
- tweak: Veil now works on light prisms
|
||||||
|
- bugfix: fixed runtime in crew_monitor.dm
|
||||||
|
- bugfix: fixed runtime in remove_accessory
|
||||||
|
cuackles:
|
||||||
|
- tweak: tweaked a few things
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 229 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 372 KiB After Width: | Height: | Size: 372 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 128 KiB |
@@ -175,6 +175,8 @@
|
|||||||
if(istype(LO, /obj/machinery/power/floodlight))
|
if(istype(LO, /obj/machinery/power/floodlight))
|
||||||
var/obj/machinery/power/floodlight/FL = LO
|
var/obj/machinery/power/floodlight/FL = LO
|
||||||
FL.change_setting(2) // Set floodlight to lowest setting
|
FL.change_setting(2) // Set floodlight to lowest setting
|
||||||
|
if(istype(LO, /obj/structure/light_prism))
|
||||||
|
qdel(LO)
|
||||||
|
|
||||||
for(var/obj/structure/glowshroom/G in orange(7, user)) //High radius because glowshroom spam wrecks shadowlings
|
for(var/obj/structure/glowshroom/G in orange(7, user)) //High radius because glowshroom spam wrecks shadowlings
|
||||||
if(!istype(G, /obj/structure/glowshroom/shadowshroom))
|
if(!istype(G, /obj/structure/glowshroom/shadowshroom))
|
||||||
|
|||||||