mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01:00
Merge remote-tracking branch 'upstream/master' into swarming-component
This commit is contained in:
@@ -627,6 +627,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h
|
||||
if(!O.vv_edit_var(variable, var_new))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_VAR_EDIT, args)
|
||||
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]")
|
||||
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]"
|
||||
|
||||
@@ -624,6 +624,9 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
if(job.admin_only)
|
||||
continue
|
||||
|
||||
if(job.hidden_from_job_prefs)
|
||||
continue
|
||||
|
||||
index += 1
|
||||
if((index >= limit) || (job.title in splitJobs))
|
||||
if((index < limit) && (lastJob != null))
|
||||
|
||||
@@ -73,16 +73,15 @@ obj/item/clothing/shoes/magboots/syndie/advance //For the Syndicate Strike Team
|
||||
shoe_sound = "clownstep"
|
||||
origin_tech = "magnets=4;syndicate=2"
|
||||
var/enabled_waddle = TRUE
|
||||
var/datum/component/waddle
|
||||
|
||||
/obj/item/clothing/shoes/magboots/clown/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(slot == slot_shoes && enabled_waddle)
|
||||
waddle = user.AddComponent(/datum/component/waddling)
|
||||
user.AddElement(/datum/element/waddling)
|
||||
|
||||
/obj/item/clothing/shoes/magboots/clown/dropped(mob/user)
|
||||
. = ..()
|
||||
QDEL_NULL(waddle)
|
||||
user.RemoveElement(/datum/element/waddling)
|
||||
|
||||
/obj/item/clothing/shoes/magboots/clown/CtrlClick(mob/living/user)
|
||||
if(!isliving(user))
|
||||
|
||||
@@ -71,16 +71,15 @@
|
||||
var/footstep = 1 //used for squeeks whilst walking
|
||||
shoe_sound = "clownstep"
|
||||
var/enabled_waddle = TRUE
|
||||
var/datum/component/waddle
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(slot == slot_shoes && enabled_waddle)
|
||||
waddle = user.AddComponent(/datum/component/waddling)
|
||||
user.AddElement(/datum/element/waddling)
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/dropped(mob/user)
|
||||
. = ..()
|
||||
QDEL_NULL(waddle)
|
||||
user.RemoveElement(/datum/element/waddling)
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user)
|
||||
if(!isliving(user))
|
||||
|
||||
@@ -166,6 +166,15 @@
|
||||
list_reagents = list("nutriment" = 2, "vitamin" = 2)
|
||||
tastes = list("bread" = 2)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/toast
|
||||
name = "Toast"
|
||||
desc = "Yeah! Toast!"
|
||||
icon_state = "toast"
|
||||
filling_color = "#B2580E"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 3)
|
||||
tastes = list("toast" = 2)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/jelliedtoast
|
||||
name = "Jellied Toast"
|
||||
desc = "A slice of bread covered with delicious jam."
|
||||
@@ -198,3 +207,5 @@
|
||||
trash = /obj/item/trash/waffles
|
||||
filling_color = "#E6DEB5"
|
||||
list_reagents = list("nutriment" = 8, "vitamin" = 1)
|
||||
|
||||
|
||||
|
||||
@@ -160,11 +160,11 @@
|
||||
T.on_cross(src, AM)
|
||||
..()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/on_trip(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(. && seed)
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_slip(src, H)
|
||||
/obj/item/reagent_containers/food/snacks/grown/after_slip(mob/living/carbon/human/H)
|
||||
if(!seed)
|
||||
return
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_slip(src, H)
|
||||
|
||||
// Glow gene procs
|
||||
/obj/item/reagent_containers/food/snacks/grown/generate_trash(atom/location)
|
||||
|
||||
@@ -118,12 +118,10 @@
|
||||
/obj/item/grown/bananapeel/specialpeel //used by /obj/item/clothing/shoes/clown_shoes/banana_shoes
|
||||
name = "synthesized banana peel"
|
||||
desc = "A synthetic banana peel."
|
||||
trip_stun = 2
|
||||
trip_weaken = 2
|
||||
trip_chance = 100
|
||||
trip_walksafe = FALSE
|
||||
trip_verb = TV_SLIP
|
||||
|
||||
/obj/item/grown/bananapeel/specialpeel/on_trip(mob/living/carbon/human/H)
|
||||
if(..())
|
||||
qdel(src)
|
||||
/obj/item/grown/bananapeel/specialpeel/ComponentInitialize()
|
||||
AddComponent(/datum/component/slippery, src, 2, 2, 100, 0, FALSE)
|
||||
|
||||
/obj/item/grown/bananapeel/specialpeel/after_slip(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
qdel(src)
|
||||
|
||||
@@ -57,11 +57,11 @@
|
||||
T.on_cross(src, AM)
|
||||
..()
|
||||
|
||||
/obj/item/grown/on_trip(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(. && seed)
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_slip(src, H)
|
||||
/obj/item/grown/after_slip(mob/living/carbon/human/H)
|
||||
if(!seed)
|
||||
return
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_slip(src, H)
|
||||
|
||||
/obj/item/grown/throw_impact(atom/hit_atom)
|
||||
if(!..()) //was it caught by a mob?
|
||||
|
||||
@@ -217,11 +217,7 @@
|
||||
|
||||
stun_len = min(stun_len, 7) // No fun allowed
|
||||
|
||||
G.trip_stun = stun_len
|
||||
G.trip_weaken = stun_len
|
||||
G.trip_chance = 100
|
||||
G.trip_verb = TV_SLIP
|
||||
G.trip_walksafe = FALSE
|
||||
G.AddComponent(/datum/component/slippery, G, stun_len, stun_len, 100, 0, FALSE)
|
||||
|
||||
/datum/plant_gene/trait/cell_charge
|
||||
// Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten.
|
||||
|
||||
@@ -65,6 +65,8 @@
|
||||
user.drop_l_hand()
|
||||
return
|
||||
var/datum/status_effect/crusher_damage/C = target.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
if(!C)
|
||||
C = target.apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
var/target_health = target.health
|
||||
..()
|
||||
for(var/t in trophies)
|
||||
@@ -101,6 +103,8 @@
|
||||
if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK))
|
||||
return
|
||||
var/datum/status_effect/crusher_damage/C = L.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
if(!C)
|
||||
C = L.apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
var/target_health = L.health
|
||||
for(var/t in trophies)
|
||||
var/obj/item/crusher_trophy/T = t
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
/obj/machinery/mineral/processing_unit/Destroy()
|
||||
CONSOLE = null
|
||||
QDEL_NULL(files)
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.retrieve_all()
|
||||
return ..()
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
CONSOLE.updateUsrDialog()
|
||||
|
||||
/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O)
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/material_amount = materials.get_item_material_amount(O)
|
||||
if(!materials.has_space(material_amount))
|
||||
unload_mineral(O)
|
||||
@@ -132,7 +132,7 @@
|
||||
|
||||
/obj/machinery/mineral/processing_unit/proc/get_machine_data()
|
||||
var/dat = "<b>Smelter control console</b><br><br>"
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
dat += "<span class=\"res_name\">[M.name]: </span>[M.amount] cm³"
|
||||
@@ -165,7 +165,7 @@
|
||||
return dat
|
||||
|
||||
/obj/machinery/mineral/processing_unit/proc/smelt_ore()
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/datum/material/mat = materials.materials[selected_material]
|
||||
if(mat)
|
||||
var/sheets_to_remove = (mat.amount >= (MINERAL_MATERIAL_AMOUNT * SMELT_AMOUNT) ) ? SMELT_AMOUNT : round(mat.amount / MINERAL_MATERIAL_AMOUNT)
|
||||
@@ -187,7 +187,7 @@
|
||||
on = FALSE
|
||||
return
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.use_amount(alloy.materials, amount)
|
||||
|
||||
generate_mineral(alloy.build_path)
|
||||
@@ -198,7 +198,7 @@
|
||||
|
||||
var/build_amount = SMELT_AMOUNT
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
|
||||
for(var/mat_id in D.materials)
|
||||
var/M = D.materials[mat_id]
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/Destroy()
|
||||
QDEL_NULL(files)
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.retrieve_all()
|
||||
return ..()
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
if(O && O.refined_type)
|
||||
points += O.points * point_upgrade * O.amount
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/material_amount = materials.get_item_material_amount(O)
|
||||
|
||||
if(!material_amount)
|
||||
@@ -111,7 +111,7 @@
|
||||
|
||||
var/build_amount = 0
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/mat_id in D.materials)
|
||||
var/M = D.materials[mat_id]
|
||||
var/datum/material/redemption_mat = materials.materials[mat_id]
|
||||
@@ -147,7 +147,7 @@
|
||||
|
||||
var/has_minerals = FALSE
|
||||
var/mineral_name = null
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
var/mineral_amount = M.amount / MINERAL_MATERIAL_AMOUNT
|
||||
@@ -251,7 +251,7 @@
|
||||
else
|
||||
dat += "No ID inserted. <A href='?src=[UID()];insert_id=1'>Insert ID.</A><br><br>"
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
if(M.amount)
|
||||
@@ -302,7 +302,7 @@
|
||||
/obj/machinery/mineral/ore_redemption/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
if(href_list["eject_id"])
|
||||
usr.put_in_hands(inserted_id)
|
||||
inserted_id = null
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
if(!T)
|
||||
return
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/obj/item/stack/sheet/O in T)
|
||||
materials.insert_stack(O, O.amount)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
return
|
||||
var/dat = "<b>Coin Press</b><br>"
|
||||
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
if(!M.amount && chosen != mat_id)
|
||||
@@ -65,7 +65,7 @@
|
||||
if(processing == 1)
|
||||
to_chat(usr, "<span class='notice'>The machine is processing.</span>")
|
||||
return
|
||||
GET_COMPONENT(materials, /datum/component/material_container)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
if(href_list["choose"])
|
||||
if(materials.materials[href_list["choose"]])
|
||||
chosen = href_list["choose"]
|
||||
|
||||
@@ -977,25 +977,30 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
|
||||
|
||||
/mob/living/carbon/proc/slip(description, stun, weaken, tilesSlipped, walkSafely, slipAny, slipVerb = "slip")
|
||||
if(flying || buckled || (walkSafely && m_intent == MOVE_INTENT_WALK))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if((lying) && (!(tilesSlipped)))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!(slipAny))
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(isobj(H.shoes) && H.shoes.flags & NOSLIP)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(tilesSlipped)
|
||||
for(var/t = 0, t<=tilesSlipped, t++)
|
||||
spawn (t) step(src, src.dir)
|
||||
for(var/i in 1 to tilesSlipped)
|
||||
spawn(i)
|
||||
step(src, dir)
|
||||
|
||||
stop_pulling()
|
||||
to_chat(src, "<span class='notice'>You [slipVerb]ped on [description]!</span>")
|
||||
playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
playsound(loc, 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
// Something something don't run with scissors
|
||||
moving_diagonally = 0 //If this was part of diagonal move slipping will stop it.
|
||||
Stun(stun)
|
||||
Weaken(weaken)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/proc/can_eat(flags = 255)
|
||||
return 1
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
span = mind.speech_span
|
||||
if((COMIC in mutations) \
|
||||
|| (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs) \
|
||||
|| GetComponent(/datum/component/jestosterone))
|
||||
|| HAS_TRAIT(src, TRAIT_JESTER))
|
||||
span = "sans"
|
||||
|
||||
if(WINGDINGS in mutations)
|
||||
|
||||
@@ -636,12 +636,11 @@
|
||||
H.mutations.Add(COMIC)
|
||||
H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), slot_r_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store)
|
||||
H.AddComponent(/datum/component/waddling)
|
||||
H.AddElement(/datum/element/waddling)
|
||||
|
||||
/datum/species/golem/bananium/on_species_loss(mob/living/carbon/C)
|
||||
. = ..()
|
||||
GET_COMPONENT_FROM(waddling, /datum/component/waddling, C)
|
||||
waddling.Destroy()
|
||||
C.RemoveElement(/datum/element/waddling)
|
||||
|
||||
/datum/species/golem/bananium/get_random_name()
|
||||
var/clown_name = pick(GLOB.clown_names)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
/mob/living/simple_animal/pet/penguin/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/waddling)
|
||||
AddElement(/datum/element/waddling)
|
||||
|
||||
/mob/living/simple_animal/pet/penguin/emperor
|
||||
name = "Emperor penguin"
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
. = ..()
|
||||
if(internal_type && true_spawn)
|
||||
internal = new internal_type(src)
|
||||
apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
for(var/action_type in attack_action_types)
|
||||
var/datum/action/innate/megafauna_attack/attack_action = new action_type()
|
||||
attack_action.Grant(src)
|
||||
|
||||
@@ -23,10 +23,6 @@
|
||||
var/icon_aggro = null
|
||||
var/crusher_drop_mod = 25
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/Initialize(mapload)
|
||||
. = ..()
|
||||
apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/Aggro()
|
||||
..()
|
||||
if(vision_range != aggro_vision_range)
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
hud_list[hud] = list()
|
||||
else
|
||||
var/image/I = image('icons/mob/hud.dmi', src, "")
|
||||
I.appearance_flags = RESET_COLOR | RESET_TRANSFORM
|
||||
hud_list[hud] = I
|
||||
|
||||
/mob/proc/generate_name()
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
/datum/job/ntnavyofficer,
|
||||
/datum/job/ntspecops,
|
||||
/datum/job/civilian,
|
||||
/datum/job/syndicateofficer
|
||||
/datum/job/syndicateofficer,
|
||||
/datum/job/explorer // blacklisted so that HOPs don't try prioritizing it, then wonder why that doesn't work
|
||||
)
|
||||
|
||||
//The scaling factor of max total positions in relation to the total amount of people on board the station in %
|
||||
|
||||
@@ -38,11 +38,8 @@
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings."
|
||||
ttone = "honk"
|
||||
|
||||
trip_stun = 8
|
||||
trip_weaken = 5
|
||||
trip_chance = 100
|
||||
trip_walksafe = TRUE
|
||||
trip_verb = TV_SLIP
|
||||
/obj/item/pda/clown/ComponentInitialize()
|
||||
AddComponent(/datum/component/slippery, src, 8, 5, 100)
|
||||
|
||||
/obj/item/pda/mime
|
||||
default_cartridge = /obj/item/cartridge/mime
|
||||
@@ -191,7 +188,7 @@
|
||||
var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger)
|
||||
if(M)
|
||||
M.m_hidden = 1
|
||||
|
||||
|
||||
//Some spare PDAs in a box
|
||||
/obj/item/storage/box/PDAs
|
||||
name = "spare PDAs"
|
||||
|
||||
@@ -113,15 +113,15 @@ field_generator power level display
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
if(state == FG_SECURED)
|
||||
WELDER_ATTEMPT_FLOOR_SLICE_MESSAGE
|
||||
else if(state == FG_WELDED)
|
||||
WELDER_ATTEMPT_FLOOR_WELD_MESSAGE
|
||||
else if(state == FG_WELDED)
|
||||
WELDER_ATTEMPT_FLOOR_SLICE_MESSAGE
|
||||
if(I.use_tool(src, user, 20, volume = I.tool_volume))
|
||||
if(state == FG_SECURED)
|
||||
WELDER_FLOOR_SLICE_SUCCESS_MESSAGE
|
||||
WELDER_FLOOR_WELD_SUCCESS_MESSAGE
|
||||
state = FG_WELDED
|
||||
else if(state == FG_WELDED)
|
||||
WELDER_FLOOR_WELD_SUCCESS_MESSAGE
|
||||
WELDER_FLOOR_SLICE_SUCCESS_MESSAGE
|
||||
state = FG_SECURED
|
||||
|
||||
/obj/machinery/field/generator/emp_act()
|
||||
|
||||
@@ -450,21 +450,18 @@
|
||||
var/mob/living/carbon/C = holder.my_atom
|
||||
if(!istype(C))
|
||||
return
|
||||
var/mind_type = FALSE
|
||||
if(C.mind)
|
||||
if(C.mind.assigned_role == "Clown" || C.mind.assigned_role == SPECIAL_ROLE_HONKSQUAD)
|
||||
mind_type = "Clown"
|
||||
to_chat(C, "<span class='notice'>Whatever that was, it feels great!</span>")
|
||||
else if(C.mind.assigned_role == "Mime")
|
||||
mind_type = "Mime"
|
||||
to_chat(C, "<span class='warning'>You feel nauseous.</span>")
|
||||
C.AdjustDizzy(volume)
|
||||
else
|
||||
to_chat(C, "<span class='warning'>Something doesn't feel right...</span>")
|
||||
C.AdjustDizzy(volume)
|
||||
C.AddComponent(/datum/component/jestosterone, mind_type)
|
||||
ADD_TRAIT(C, TRAIT_JESTER, id)
|
||||
C.AddComponent(/datum/component/squeak, null, null, null, null, null, TRUE)
|
||||
C.AddComponent(/datum/component/waddling)
|
||||
C.AddElement(/datum/element/waddling)
|
||||
|
||||
/datum/reagent/jestosterone/on_mob_life(mob/living/carbon/M)
|
||||
if(!istype(M))
|
||||
@@ -472,8 +469,7 @@
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if(prob(10))
|
||||
M.emote("giggle")
|
||||
GET_COMPONENT_FROM(jestosterone_component, /datum/component/jestosterone, M)
|
||||
if(jestosterone_component.mind_type == "Clown")
|
||||
if(M?.mind.assigned_role == "Clown" || M?.mind.assigned_role == SPECIAL_ROLE_HONKSQUAD)
|
||||
update_flags |= M.adjustBruteLoss(-1.5 * REAGENTS_EFFECT_MULTIPLIER) //Screw those pesky clown beatings!
|
||||
else
|
||||
M.AdjustDizzy(10, 0, 500)
|
||||
@@ -493,18 +489,15 @@
|
||||
"Your legs feel like jelly.",
|
||||
"You feel like telling a pun.")
|
||||
to_chat(M, "<span class='warning'>[pick(clown_message)]</span>")
|
||||
if(jestosterone_component.mind_type == "Mime")
|
||||
if(M?.mind.assigned_role == "Mime")
|
||||
update_flags |= M.adjustToxLoss(1.5 * REAGENTS_EFFECT_MULTIPLIER)
|
||||
return ..() | update_flags
|
||||
|
||||
/datum/reagent/jestosterone/on_mob_delete(mob/living/M)
|
||||
..()
|
||||
GET_COMPONENT_FROM(remove_fun, /datum/component/jestosterone, M)
|
||||
GET_COMPONENT_FROM(squeaking, /datum/component/squeak, M)
|
||||
GET_COMPONENT_FROM(waddling, /datum/component/waddling, M)
|
||||
remove_fun.Destroy()
|
||||
squeaking.Destroy()
|
||||
waddling.Destroy()
|
||||
REMOVE_TRAIT(M, TRAIT_JESTER, id)
|
||||
qdel(M.GetComponent(/datum/component/squeak))
|
||||
M.RemoveElement(/datum/element/waddling)
|
||||
|
||||
/datum/reagent/royal_bee_jelly
|
||||
name = "royal bee jelly"
|
||||
|
||||
@@ -449,7 +449,7 @@
|
||||
visible_message("<span class='warning'>[src]'s crushing mechanism slowly and smoothly descends, flattening the [exp_on]!</span>")
|
||||
new /obj/item/stack/sheet/plasteel(get_turf(pick(oview(1,src))))
|
||||
if(linked_console.linked_lathe)
|
||||
GET_COMPONENT_FROM(linked_materials, /datum/component/material_container, linked_console.linked_lathe)
|
||||
var/datum/component/material_container/linked_materials = linked_console.linked_lathe.GetComponent(/datum/component/material_container)
|
||||
for(var/material in exp_on.materials)
|
||||
linked_materials.insert_amount( min((linked_materials.max_amount - linked_materials.total_amount), (exp_on.materials[material])), material)
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
|
||||
@@ -20,9 +20,7 @@
|
||||
var/datum/component/material_container/materials //Store for hyper speed!
|
||||
|
||||
/obj/machinery/r_n_d/New()
|
||||
materials = AddComponent(/datum/component/material_container,
|
||||
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0,
|
||||
TRUE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0, TRUE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
materials.precise_insertion = TRUE
|
||||
..()
|
||||
wires["Red"] = 0
|
||||
|
||||
@@ -809,7 +809,8 @@
|
||||
if(href_list["move"])
|
||||
if(!options.Find(href_list["move"])) //I see you're trying Href exploits, I see you're failing, I SEE ADMIN WARNING.
|
||||
// Seriously, though, NEVER trust a Topic with something like this. Ever.
|
||||
message_admins("move HREF ([src] attempted to move to: [href_list["move"]]) exploit attempted by [key_name_admin(usr)] on [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
||||
// Sidenote for whoever did this last. Why did you set it to echo whatever the user entered to admin chat? You solved one exploit and created another.
|
||||
message_admins("<span class='boldannounce'>EXPLOIT:</span> [ADMIN_LOOKUPFLW(usr)] attempted to move [src] to an invalid location! [ADMIN_COORDJMP(src)]")
|
||||
return
|
||||
switch(SSshuttle.moveShuttle(shuttleId, href_list["move"], 1, usr))
|
||||
if(0)
|
||||
|
||||
@@ -102,7 +102,10 @@
|
||||
var/pointsEarned
|
||||
|
||||
for(var/atom/movable/MA in areaInstance)
|
||||
if(MA.anchored) continue
|
||||
if(MA.anchored)
|
||||
continue
|
||||
if(istype(MA, /mob/dead))
|
||||
continue
|
||||
SSshuttle.sold_atoms += " [MA.name]"
|
||||
|
||||
// Must be in a crate (or a critter crate)!
|
||||
|
||||
@@ -107,6 +107,7 @@ GLOBAL_DATUM_INIT(space_manager, /datum/zlev_manager, new())
|
||||
// Increments the max z-level by one
|
||||
// For convenience's sake returns the z-level added
|
||||
/datum/zlev_manager/proc/add_new_zlevel(name, linkage = SELFLOOPING, traits = list(BLOCK_TELEPORT))
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_Z, args)
|
||||
if(name in levels_by_name)
|
||||
throw EXCEPTION("Name already in use: [name]")
|
||||
world.maxz++
|
||||
|
||||
@@ -225,7 +225,6 @@
|
||||
slot = "brain_tumor"
|
||||
var/organhonked = 0
|
||||
var/suffering_delay = 900
|
||||
var/datum/component/waddle
|
||||
var/datum/component/squeak
|
||||
|
||||
/obj/item/organ/internal/honktumor/insert(mob/living/carbon/M, special = 0)
|
||||
@@ -237,7 +236,7 @@
|
||||
genemutcheck(M,GLOB.clumsyblock,null,MUTCHK_FORCED)
|
||||
genemutcheck(M,GLOB.comicblock,null,MUTCHK_FORCED)
|
||||
organhonked = world.time
|
||||
waddle = M.AddComponent(/datum/component/waddling)
|
||||
M.AddElement(/datum/element/waddling)
|
||||
squeak = M.AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg' = 1), 50)
|
||||
|
||||
/obj/item/organ/internal/honktumor/remove(mob/living/carbon/M, special = 0)
|
||||
@@ -249,7 +248,7 @@
|
||||
M.dna.SetSEState(GLOB.comicblock,0)
|
||||
genemutcheck(M,GLOB.clumsyblock,null,MUTCHK_FORCED)
|
||||
genemutcheck(M,GLOB.comicblock,null,MUTCHK_FORCED)
|
||||
QDEL_NULL(waddle)
|
||||
M.RemoveElement(/datum/element/waddling)
|
||||
QDEL_NULL(squeak)
|
||||
qdel(src)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user