mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 02:57:48 +01:00
* Explosive implant * Package wrapper * Venus human trap sprites * Vine damage * Wisp vision * Display case * Storage viewing * Ghost poll nullspacing * Inflatable barrier piercing * Pneumatic cannon * Cow grammar * Centcom jaunting * Consistency Not actually a lazy list, as far as I can tell * Review 1 Co-Authored-By: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> * Review 2 Co-Authored-By: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> * length() Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>
This commit is contained in:
@@ -74,7 +74,7 @@ GLOBAL_LIST_EMPTY(antagonists)
|
||||
set waitfor = FALSE
|
||||
|
||||
var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as a [name]?", job_rank, TRUE, 5 SECONDS)
|
||||
if(LAZYLEN(candidates))
|
||||
if(length(candidates))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!")
|
||||
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(owner.current)]) to replace a jobbaned player.")
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>")
|
||||
var/image/I = new('icons/mob/simple_human.dmi', "syndicate_space_sword")
|
||||
var/list/nuke_candidates = SSghost_spawns.poll_candidates("Do you want to play as a [rolename]?", ROLE_OPERATIVE, TRUE, 15 SECONDS, source = I)
|
||||
if(LAZYLEN(nuke_candidates))
|
||||
if(length(nuke_candidates))
|
||||
checking = FALSE
|
||||
if(QDELETED(src) || !check_usability(user))
|
||||
return
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
servant_mind.transfer_to(H)
|
||||
|
||||
var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the servant of [user.real_name]?", ROLE_WIZARD, poll_time = 30 SECONDS, source = H)
|
||||
if(LAZYLEN(candidates))
|
||||
if(length(candidates) && !QDELETED(H))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant")
|
||||
H.key = C.key
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
// Bust through windows or other stuff blocking the way
|
||||
if(!target.Enter(holder))
|
||||
for(var/atom/movable/AM in target)
|
||||
if(istype(AM, /obj/structure/spacevine) || !AM.density)
|
||||
if(!AM.density || isvineimmune(AM))
|
||||
continue
|
||||
AM.ex_act(severity)
|
||||
target.ex_act(severity) // vine immunity handled at /mob/ex_act
|
||||
@@ -697,8 +697,10 @@
|
||||
. = ..()
|
||||
|
||||
/proc/isvineimmune(atom/A)
|
||||
. = FALSE
|
||||
if(isliving(A))
|
||||
var/mob/living/M = A
|
||||
if(("vines" in M.faction) || ("plants" in M.faction))
|
||||
. = TRUE
|
||||
return TRUE
|
||||
else if(istype(A, /obj/structure/spacevine) || istype(A, /obj/structure/alien/resin/flower_bud_enemy))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
playsound(loc, pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg'), 50, 1, -1)
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/scythe/pre_attackby(atom/A, mob/living/user, params)
|
||||
/obj/item/scythe/pre_attack(atom/A, mob/living/user, params)
|
||||
if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user))
|
||||
return ..()
|
||||
else
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
new /obj/effect/temp_visual/resonance(T, user, src, burst_time)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
/obj/item/resonator/pre_attackby(atom/target, mob/user, params)
|
||||
/obj/item/resonator/pre_attack(atom/target, mob/user, params)
|
||||
if(check_allowed_items(target, 1))
|
||||
CreateResonance(target, user)
|
||||
return TRUE
|
||||
|
||||
@@ -247,7 +247,7 @@
|
||||
|
||||
to_chat(user, "<span class='notice'>You release the wisp. It begins to bob around your head.</span>")
|
||||
icon_state = "lantern"
|
||||
wisp.orbit(user, 20)
|
||||
INVOKE_ASYNC(wisp, /atom/movable/.proc/orbit, user, 20)
|
||||
set_light(0)
|
||||
|
||||
user.update_sight()
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
icon_living = "cow"
|
||||
icon_dead = "cow_dead"
|
||||
icon_gib = "cow_gib"
|
||||
speak = list("moo?","moo","MOOOOOO")
|
||||
speak = list("Moo?","Moo","MOOOOOO")
|
||||
speak_emote = list("moos","moos hauntingly")
|
||||
emote_hear = list("brays")
|
||||
emote_see = list("shakes its head")
|
||||
|
||||
@@ -408,7 +408,7 @@ Difficulty: Hard
|
||||
/obj/effect/decal/cleanable/blood/gibs/bubblegum/can_bloodcrawl_in()
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon)
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
|
||||
if(!charging)
|
||||
..()
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
name = "venus human trap"
|
||||
desc = "Now you know how the fly feels."
|
||||
icon_state = "venus_human_trap"
|
||||
icon_living = "venus_human_trap"
|
||||
mob_biotypes = MOB_ORGANIC | MOB_PLANT
|
||||
layer = MOB_LAYER + 0.9
|
||||
health = 50
|
||||
|
||||
@@ -116,7 +116,9 @@
|
||||
var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("[question]?", poll_time = 10 SECONDS, min_hours = minhours, source = M)
|
||||
var/mob/dead/observer/theghost = null
|
||||
|
||||
if(LAZYLEN(candidates))
|
||||
if(length(candidates))
|
||||
if(QDELETED(M))
|
||||
return
|
||||
theghost = pick(candidates)
|
||||
to_chat(M, "Your mob has been taken over by a ghost!")
|
||||
message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)])")
|
||||
|
||||
@@ -153,10 +153,14 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
var/static/list/no_wrap = list(/obj/item/smallDelivery, /obj/structure/bigDelivery, /obj/item/evidencebag, /obj/structure/closet/body_bag, /obj/item/twohanded/required)
|
||||
|
||||
/obj/item/stack/packageWrap/afterattack(obj/target as obj, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete
|
||||
/obj/item/stack/packageWrap/pre_attack(atom/A, mob/living/user, params)
|
||||
. = ..()
|
||||
if(!in_range(A, user))
|
||||
return
|
||||
if(!isobj(A))
|
||||
return
|
||||
var/obj/target = A
|
||||
|
||||
if(is_type_in_list(target, no_wrap))
|
||||
return
|
||||
if(target.anchored)
|
||||
@@ -166,62 +170,61 @@
|
||||
|
||||
if(istype(target, /obj/item) && !(istype(target, /obj/item/storage) && !istype(target,/obj/item/storage/box) && !istype(target, /obj/item/shippingPackage)))
|
||||
var/obj/item/O = target
|
||||
if(use(1))
|
||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up!
|
||||
if(!istype(O.loc, /turf))
|
||||
if(user.client)
|
||||
user.client.screen -= O
|
||||
P.wrapped = O
|
||||
O.loc = P
|
||||
var/i = round(O.w_class)
|
||||
if(i in list(1,2,3,4,5))
|
||||
P.icon_state = "deliverycrate[i]"
|
||||
P.w_class = i
|
||||
P.add_fingerprint(usr)
|
||||
O.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
else
|
||||
return
|
||||
if(!use(1))
|
||||
return FALSE
|
||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up!
|
||||
if(!isturf(O.loc))
|
||||
if(user.client)
|
||||
user.client.screen -= O
|
||||
P.wrapped = O
|
||||
O.loc = P
|
||||
var/i = round(O.w_class)
|
||||
if(i in list(1,2,3,4,5))
|
||||
P.icon_state = "deliverycrate[i]"
|
||||
P.w_class = i
|
||||
P.add_fingerprint(user)
|
||||
O.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
|
||||
else if(istype(target, /obj/structure/closet/crate))
|
||||
var/obj/structure/closet/crate/O = target
|
||||
if(O.opened)
|
||||
return
|
||||
if(amount >= 3 && do_after_once(user, 15, target = target))
|
||||
if(O.opened || !use(3))
|
||||
return
|
||||
var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
|
||||
P.icon_state = "deliverycrate"
|
||||
P.wrapped = O
|
||||
O.loc = P
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need more paper.</span>")
|
||||
return
|
||||
else if(istype (target, /obj/structure/closet))
|
||||
var/obj/structure/closet/O = target
|
||||
if(O.opened)
|
||||
return
|
||||
if(amount >= 3 && do_after_once(user, 15, target = target))
|
||||
if(O.opened || !use(3))
|
||||
return
|
||||
var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
|
||||
P.wrapped = O
|
||||
P.init_welded = O.welded
|
||||
O.welded = 1
|
||||
O.loc = P
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need more paper.</span>")
|
||||
return
|
||||
var/obj/structure/bigDelivery/D = wrap_closet(target, user)
|
||||
if(!D)
|
||||
return FALSE
|
||||
D.icon_state = "deliverycrate"
|
||||
|
||||
else if(istype(target, /obj/structure/closet))
|
||||
var/obj/structure/closet/C = target
|
||||
var/obj/structure/bigDelivery/D = wrap_closet(target, user)
|
||||
if(!D)
|
||||
return FALSE
|
||||
D.init_welded = C.welded
|
||||
C.welded = TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The object you are trying to wrap is unsuitable for the sorting machinery.</span>")
|
||||
return
|
||||
return FALSE
|
||||
|
||||
user.visible_message("<span class='notice'>[user] wraps [target].</span>")
|
||||
user.create_attack_log("<font color='blue'>Has used [name] on [target]</font>")
|
||||
add_attack_logs(user, target, "used [name]", ATKLOG_ALL)
|
||||
|
||||
if(amount <= 0 && !src.loc) //if we used our last wrapping paper, drop a cardboard tube
|
||||
new /obj/item/c_tube( get_turf(user) )
|
||||
return
|
||||
if(amount <= 0 && QDELETED(src)) //if we used our last wrapping paper, drop a cardboard tube
|
||||
var/obj/item/c_tube/T = new(get_turf(user))
|
||||
user.put_in_active_hand(T)
|
||||
return FALSE
|
||||
|
||||
// Separate proc to avoid copy pasting the code twice
|
||||
/obj/item/stack/packageWrap/proc/wrap_closet(obj/structure/closet/C, mob/user)
|
||||
if(C.opened)
|
||||
return
|
||||
if(amount < 3)
|
||||
to_chat(user, "<span class='warning'>You need more paper.</span>")
|
||||
return
|
||||
if(!do_after_once(user, 1.5 SECONDS, target = C) || C.opened || !use(3)) // Checking these again since it's after a delay
|
||||
return
|
||||
var/obj/structure/bigDelivery/P = new(get_turf(C))
|
||||
P.wrapped = C
|
||||
C.loc = P
|
||||
return P
|
||||
|
||||
/obj/item/destTagger
|
||||
name = "destination tagger"
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
var/ghostmsg = "Play as [SM.name], pet of [user.name]?"
|
||||
var/list/candidates = SSghost_spawns.poll_candidates(ghostmsg, ROLE_SENTIENT, FALSE, 10 SECONDS, source = M)
|
||||
|
||||
if(!src)
|
||||
if(QDELETED(src) || QDELETED(SM))
|
||||
return
|
||||
|
||||
if(candidates.len)
|
||||
|
||||
Reference in New Issue
Block a user