mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into lavaland_megafauna
# Conflicts: # code/__DEFINES/misc.dm # code/game/dna/genes/goon_powers.dm # code/game/dna/genes/vg_powers.dm # code/game/objects/effects/overlays.dm # code/game/objects/structures/crates_lockers/closets.dm # code/game/objects/structures/crates_lockers/closets/statue.dm # code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm # icons/mob/back.dmi # icons/obj/storage.dmi
This commit is contained in:
@@ -643,9 +643,7 @@
|
||||
//this is necessarily damaging
|
||||
var/damage = rand(1,5)
|
||||
to_chat(M, "<span class='danger'>The unloading machine grabs you with a hard metallic claw!</span>")
|
||||
if(M.client)
|
||||
M.client.eye = master
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.reset_perspective(master)
|
||||
M.loc = master
|
||||
master.types[M.type] = src
|
||||
M.apply_damage(damage) // todo: ugly
|
||||
@@ -699,10 +697,7 @@
|
||||
//this is necessarily damaging
|
||||
var/damage = rand(1,5)
|
||||
to_chat(M, "<span class='danger'>The unloading machine grabs you with a hard metallic claw!</span>")
|
||||
if(M.client)
|
||||
M.client.eye = master
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.loc = master
|
||||
M.forceMove(master)
|
||||
master.types[M.type] = src
|
||||
M.apply_damage(damage) // todo: ugly
|
||||
M.visible_message("\red [M.name] gets pulled into the machine!")
|
||||
@@ -710,11 +705,8 @@
|
||||
|
||||
outlet_reaction(var/atom/W,var/turf/D)
|
||||
var/mob/living/M = W
|
||||
M.loc = master.loc
|
||||
M.forceMove(master.loc)
|
||||
M.dir = master.outdir
|
||||
if(M.client)
|
||||
M.client.eye = M.client.mob
|
||||
M.client.perspective = MOB_PERSPECTIVE
|
||||
|
||||
D = get_step(D,master.outdir) // throw attempt
|
||||
eject_speed = rand(0,4)
|
||||
@@ -796,4 +788,4 @@
|
||||
var/punches = punch(M,remaining / PUNCH_WORK)
|
||||
if(punches>1)master.sleep++
|
||||
return punches * PUNCH_WORK
|
||||
#undef MAXCOIL
|
||||
#undef MAXCOIL
|
||||
|
||||
+29
-2
@@ -150,7 +150,10 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
//Tail
|
||||
if(H.species.tail && H.species.flags & HAS_TAIL)
|
||||
if(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/tail))
|
||||
temp = new/icon("icon" = H.body_accessory.icon, "icon_state" = H.body_accessory.icon_state)
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
else if(H.species.tail && H.species.bodyflags & HAS_TAIL)
|
||||
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s")
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
@@ -173,6 +176,17 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
if(H.species.bodyflags & HAS_SKIN_COLOR)
|
||||
preview_icon.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD)
|
||||
|
||||
//Tail Markings
|
||||
var/icon/t_marking_s
|
||||
if(H.species.bodyflags & HAS_TAIL_MARKINGS)
|
||||
var/tail_marking = H.m_styles["tail"]
|
||||
var/datum/sprite_accessory/tail_marking_style = marking_styles_list[tail_marking]
|
||||
if(tail_marking_style && tail_marking_style.species_allowed)
|
||||
t_marking_s = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]_s")
|
||||
t_marking_s.Blend(H.m_colours["tail"], ICON_ADD)
|
||||
if(!(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/body)))
|
||||
preview_icon.Blend(t_marking_s, ICON_OVERLAY)
|
||||
|
||||
var/icon/face_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "bald_s")
|
||||
if(!(H.species.bodyflags & NO_EYES))
|
||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
|
||||
@@ -190,7 +204,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
// I'll want to make a species-specific proc for this sooner or later
|
||||
// But this'll do for now
|
||||
if(head_organ.species.name == "Slime People")
|
||||
hair_s.Blend(rgb(H.r_skin, H.g_skin, H.b_skin, 160), ICON_ADD)
|
||||
hair_s.Blend(rgb(H.r_skin, H.g_skin, H.b_skin, 160), ICON_AND)
|
||||
else
|
||||
hair_s.Blend(rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair), ICON_ADD)
|
||||
|
||||
@@ -378,9 +392,22 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
else
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
|
||||
preview_icon.Blend(face_s, ICON_OVERLAY) // Why do we do this twice
|
||||
if(clothes_s)
|
||||
preview_icon.Blend(clothes_s, ICON_OVERLAY)
|
||||
//Bus body accessories that go over clothes.
|
||||
if(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/body))
|
||||
temp = new/icon("icon" = H.body_accessory.icon, "icon_state" = H.body_accessory.icon_state)
|
||||
if(H.body_accessory.pixel_x_offset)
|
||||
temp.Shift(EAST, H.body_accessory.pixel_x_offset)
|
||||
if(H.body_accessory.pixel_y_offset)
|
||||
temp.Shift(NORTH, H.body_accessory.pixel_y_offset)
|
||||
if(H.species.bodyflags & HAS_SKIN_COLOR)
|
||||
temp.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), H.body_accessory.blend_mode)
|
||||
if(t_marking_s)
|
||||
temp.Blend(t_marking_s, ICON_OVERLAY)
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
qdel(face_s)
|
||||
qdel(clothes_s)
|
||||
|
||||
|
||||
@@ -1034,7 +1034,7 @@ body
|
||||
to_chat(usr, "Mob doesn't exist anymore")
|
||||
return
|
||||
|
||||
if(!(locateUID(rem_organ) in M.internal_organs))
|
||||
if(!(rem_organ in M.internal_organs))
|
||||
to_chat(usr, "Mob does not have that organ.")
|
||||
return
|
||||
|
||||
|
||||
@@ -35,6 +35,6 @@ Bonus
|
||||
to_chat(M, "<span class='warning'>[pick("Your head hurts.", "Your mind blanks for a moment.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>You can't think straight!</span>")
|
||||
M.confused = min(100, M.confused + 8)
|
||||
M.AdjustConfused(8, bound_lower = 0, bound_upper = 100)
|
||||
|
||||
return
|
||||
|
||||
@@ -33,11 +33,11 @@ Bonus
|
||||
if(3, 4)
|
||||
to_chat(M, "<span class='warning'>[pick("You hear a ringing in your ear.", "Your ears pop.")]</span>")
|
||||
if(5)
|
||||
if(!(M.ear_deaf))
|
||||
if(!(M.disabilities & DEAF))
|
||||
to_chat(M, "<span class='userdanger'>Your ears pop and begin ringing loudly!</span>")
|
||||
M.setEarDamage(-1,INFINITY) //Shall be enough
|
||||
M.BecomeDeaf()
|
||||
spawn(200)
|
||||
if(M)
|
||||
to_chat(M, "<span class='warning'>The ringing in your ears fades...</span>")
|
||||
M.setEarDamage(-1,0)
|
||||
return
|
||||
M.CureDeaf()
|
||||
return
|
||||
|
||||
@@ -36,6 +36,6 @@ Bonus
|
||||
to_chat(M, "<span class='warning'><b>[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]</b></span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]</span>")
|
||||
M.hallucination += 5
|
||||
M.AdjustHallucinate(5)
|
||||
|
||||
return
|
||||
|
||||
@@ -24,18 +24,18 @@
|
||||
to_chat(affected_mob, "<span class='notice'>You feel panicky.</span>")
|
||||
if(prob(2))
|
||||
to_chat(affected_mob, "<span class='danger'>You're overtaken with panic!</span>")
|
||||
affected_mob.confused += (rand(2,3))
|
||||
affected_mob.AdjustConfused(rand(2,3))
|
||||
if(4)
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel butterflies in your stomach.</span>")
|
||||
if(prob(5))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] stumbles around in a panic.</span>", \
|
||||
"<span class='userdanger'>You have a panic attack!</span>")
|
||||
affected_mob.confused += (rand(6,8))
|
||||
affected_mob.jitteriness += (rand(6,8))
|
||||
affected_mob.AdjustConfused(rand(6,8))
|
||||
affected_mob.AdjustJitter(rand(6,8))
|
||||
if(prob(2))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up butterflies!</span>", \
|
||||
"<span class='userdanger'>You cough up butterflies!</span>")
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
if(3)
|
||||
if(prob(4))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
||||
affected_mob.confused += 10
|
||||
affected_mob.AdjustConfused(10)
|
||||
if(4)
|
||||
if(prob(3))
|
||||
affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh."))
|
||||
@@ -241,4 +241,4 @@
|
||||
stage3 = list("<span class='danger'>Your appendages are melting away.</span>", "<span class='danger'>Your limbs begin to lose their shape.</span>")
|
||||
stage4 = list("<span class='danger'>You're ravenous.</span>")
|
||||
stage5 = list("<span class='danger'>You have become a morph.</span>")
|
||||
new_form = /mob/living/simple_animal/hostile/morph
|
||||
new_form = /mob/living/simple_animal/hostile/morph
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
affected_mob.AdjustSleeping(5)
|
||||
if(prob(2))
|
||||
to_chat(affected_mob, "<span class='userdanger'>You feel your mind relax and your thoughts drift!</span>")
|
||||
affected_mob.confused = min(100, affected_mob.confused + 8)
|
||||
affected_mob.AdjustConfused(8, bound_lower = 0, bound_upper = 100)
|
||||
if(prob(10))
|
||||
affected_mob.vomit(20)
|
||||
if(prob(3))
|
||||
@@ -55,4 +55,3 @@
|
||||
to_chat(affected_mob, "<span class='danger'>[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit", "You feel like taking off some clothes...")]</span>")
|
||||
affected_mob.bodytemperature += 40
|
||||
return
|
||||
|
||||
|
||||
@@ -20,15 +20,15 @@
|
||||
|
||||
if(prob(10))
|
||||
affected_mob.emote(pick("cough","groan", "gasp"))
|
||||
affected_mob.losebreath++
|
||||
affected_mob.AdjustLoseBreath(1)
|
||||
|
||||
if(prob(15))
|
||||
if(prob(33))
|
||||
to_chat(affected_mob, "<span class='danger'>You feel sickly and weak.</span>")
|
||||
affected_mob.slowed += 3
|
||||
affected_mob.AdjustSlowed(3)
|
||||
affected_mob.adjustToxLoss(toxdamage)
|
||||
|
||||
if(prob(5))
|
||||
to_chat(affected_mob, "<span class='danger'>Your joints ache horribly!</span>")
|
||||
affected_mob.Weaken(stuntime)
|
||||
affected_mob.Stun(stuntime)
|
||||
affected_mob.Stun(stuntime)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
else if(istype(used_atom, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/C = used_atom
|
||||
if(C.amount<4)
|
||||
to_chat(user, ("There's not enough cable to finish the task."))
|
||||
to_chat(user, ("<span class='warning'>There's not enough cable to finish the task.</span>"))
|
||||
return 0
|
||||
else
|
||||
C.use(4)
|
||||
@@ -69,7 +69,7 @@
|
||||
else if(istype(used_atom, /obj/item/stack))
|
||||
var/obj/item/stack/S = used_atom
|
||||
if(S.amount < 5)
|
||||
to_chat(user, ("There's not enough material in this stack."))
|
||||
to_chat(user, ("<span class='warning'>There's not enough material in this stack.</span>"))
|
||||
return 0
|
||||
else
|
||||
S.use(5)
|
||||
@@ -106,30 +106,29 @@
|
||||
return
|
||||
|
||||
proc/try_consume(mob/user as mob, atom/used_atom, amount)
|
||||
if(amount>0)
|
||||
// STACKS
|
||||
if(istype(used_atom,/obj/item/stack))
|
||||
var/obj/item/stack/stack=used_atom
|
||||
if(stack.amount < amount)
|
||||
to_chat(user, "\red You don't have enough [stack]! You need at least [amount].")
|
||||
return 0
|
||||
stack.use(amount)
|
||||
if(amount > 0)
|
||||
// CABLES
|
||||
if(istype(used_atom,/obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/coil=used_atom
|
||||
if(coil.amount < amount)
|
||||
to_chat(user, "\red You don't have enough cable! You need at least [amount] coils.")
|
||||
if(!coil.use(amount))
|
||||
to_chat(user, "<span class='warning'>You don't have enough cable! You need at least [amount] coils.</span>")
|
||||
return 0
|
||||
coil.use(amount)
|
||||
// WELDER
|
||||
if(istype(used_atom,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/welder=used_atom
|
||||
if(!welder.isOn())
|
||||
to_chat(user, "\blue You tap the [src] with your unlit welder. [pick("Ding","Dong")].")
|
||||
to_chat(user, "<span class='notice'>You tap the [src] with your unlit welder. [pick("Ding","Dong")].</span>")
|
||||
return 0
|
||||
if(!welder.remove_fuel(amount,user))
|
||||
to_chat(user, "\red You don't have enough fuel!")
|
||||
to_chat(user, "<span class='warning'>You don't have enough fuel!</span>")
|
||||
return 0
|
||||
// STACKS
|
||||
if(istype(used_atom,/obj/item/stack))
|
||||
var/obj/item/stack/stack=used_atom
|
||||
if(stack.amount < amount)
|
||||
to_chat(user, "<span class='warning'>You don't have enough [stack]! You need at least [amount].</span>")
|
||||
return 0
|
||||
stack.use(amount)
|
||||
return 1
|
||||
|
||||
/datum/construction/reversible
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
var/byproduct // example: = /obj/item/weapon/kitchen/mould // byproduct to return, such as a mould or trash
|
||||
|
||||
|
||||
/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous
|
||||
/datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous
|
||||
. = 1
|
||||
for(var/r_r in reagents)
|
||||
var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r)
|
||||
@@ -55,7 +55,7 @@
|
||||
return -1
|
||||
return .
|
||||
|
||||
/datum/recipe/proc/check_fruit(var/obj/container)
|
||||
/datum/recipe/proc/check_fruit(obj/container)
|
||||
. = 1
|
||||
if(fruit && fruit.len)
|
||||
var/list/checklist = list()
|
||||
@@ -74,7 +74,7 @@
|
||||
break
|
||||
return .
|
||||
|
||||
/datum/recipe/proc/check_items(var/obj/container as obj)
|
||||
/datum/recipe/proc/check_items(obj/container)
|
||||
. = 1
|
||||
if(items && items.len)
|
||||
var/list/checklist = list()
|
||||
@@ -96,7 +96,7 @@
|
||||
return .
|
||||
|
||||
//general version
|
||||
/datum/recipe/proc/make(var/obj/container as obj)
|
||||
/datum/recipe/proc/make(obj/container)
|
||||
var/obj/result_obj = new result(container)
|
||||
for(var/obj/O in (container.contents-result_obj))
|
||||
O.reagents.trans_to(result_obj, O.reagents.total_volume)
|
||||
@@ -106,7 +106,7 @@
|
||||
return result_obj
|
||||
|
||||
// food-related
|
||||
/datum/recipe/proc/make_food(var/obj/container as obj)
|
||||
/datum/recipe/proc/make_food(obj/container)
|
||||
var/obj/result_obj = new result(container)
|
||||
for(var/obj/O in (container.contents-result_obj))
|
||||
if(O.reagents)
|
||||
@@ -118,7 +118,7 @@
|
||||
score_meals++
|
||||
return result_obj
|
||||
|
||||
/proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact = 1 as num)
|
||||
/proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj, exact = 1)
|
||||
if(!exact)
|
||||
exact = -1
|
||||
var/list/datum/recipe/possible_recipes = new
|
||||
|
||||
@@ -110,7 +110,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
var/mob/living/carbon/human/caster = user
|
||||
if(caster.remoteview_target)
|
||||
caster.remoteview_target = null
|
||||
caster.reset_view(0)
|
||||
caster.reset_perspective(0)
|
||||
return 0
|
||||
|
||||
if(is_admin_level(user.z) && (!centcom_cancast || ticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
adjustBrainLoss(80)
|
||||
nutrition = 9000
|
||||
overeatduration = 9000
|
||||
confused = 30
|
||||
Confused(30)
|
||||
if(mind)
|
||||
mind.assigned_role = "Cluwne"
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
adjustBrainLoss(-120)
|
||||
nutrition = NUTRITION_LEVEL_STARVING
|
||||
overeatduration = 0
|
||||
confused = 0
|
||||
jitteriness = 0
|
||||
SetConfused(0)
|
||||
SetJitter(0)
|
||||
if(mind)
|
||||
mind.assigned_role = "Lawyer"
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@
|
||||
target.Paralyse(amt_paralysis)
|
||||
target.Stun(amt_stunned)
|
||||
|
||||
target.eye_blind += amt_eye_blind
|
||||
target.eye_blurry += amt_eye_blurry
|
||||
target.AdjustEyeBlind(amt_eye_blind)
|
||||
target.AdjustEyeBlurry(amt_eye_blurry)
|
||||
//summoning
|
||||
if(summon_type)
|
||||
new summon_type(target.loc, target)
|
||||
new summon_type(target.loc, target)
|
||||
|
||||
@@ -581,7 +581,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/clothing/head/helmet/space,
|
||||
/obj/item/clothing/head/helmet/space,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/clothing/mask/breath,)
|
||||
/obj/item/clothing/mask/breath)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "space suit crate"
|
||||
@@ -607,9 +607,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
name = "Thermo-Electric Generator Crate"
|
||||
contains = list(
|
||||
/obj/machinery/power/generator,
|
||||
/obj/machinery/atmospherics/binary/circulator,
|
||||
/obj/machinery/atmospherics/binary/circulator
|
||||
)
|
||||
/obj/item/pipe/circulator,
|
||||
/obj/item/pipe/circulator)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "thermo-electric generator crate"
|
||||
|
||||
@@ -207,6 +207,7 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/caution/proximity_sign
|
||||
cost = 4
|
||||
job = list("Janitor")
|
||||
surplus = 0
|
||||
|
||||
//Medical
|
||||
|
||||
|
||||
Reference in New Issue
Block a user