Merge branch 'master' into ship_and_stuff

# Conflicts:
#	code/modules/client/preference_setup/loadout/loadout_eyes.dm
This commit is contained in:
alberyk
2022-03-04 14:00:19 -03:00
173 changed files with 1693 additions and 509 deletions
@@ -2219,6 +2219,55 @@ Follow by example and make good judgement based on length which list to include
length = 3
chatname = "small horns"
una_dilocrest
name = "Unathi Dilo Crest"
icon_state = "dilocrest"
length = 0
chatname = "crests"
una_monocrest
name = "Unathi Mono Crest"
icon_state = "monocrest"
length = 0
chatname = "crest"
una_cryocrest
name = "Unathi Cryo Crest"
icon_state = "cryocrest"
length = 0
chatname = "crest"
una_corycrest
name = "Unathi Cory Crest"
icon_state = "corycrest"
length = 0
chatname = "crest"
una_albertahorns
name = "Unathi Alberta Horns"
icon_state = "albertahorns"
length = 5
chatname = "small horns"
una_styrahorn
name = "Unathi Styra Horn"
icon_state = "styrahorn"
length = 5
chatname = "massive horn"
una_styracrest
name = "Unathi Styra Frill"
icon_state = "styrafrill"
length = 0
chatname = "frill"
una_pachyboss
name = "Unathi Pachy Boss"
icon_state = "pachylump"
length = 0
chatname = "lump"
//skrell tentacles
skr_tentacle_m
@@ -3225,6 +3274,37 @@ Follow by example and make good judgement based on length which list to include
name = "Unathi Chameleon Horns"
icon_state = "facial_chameleon"
una_dilocrest
name = "Unathi Dilo Crest"
icon_state = "dilocrest"
una_monocrest
name = "Unathi Mono Crest"
icon_state = "monocrest"
una_cryocrest
name = "Unathi Cryo Crest"
icon_state = "cryocrest"
una_corycrest
name = "Unathi Cory Crest"
icon_state = "corycrest"
una_albertahorns
name = "Unathi Alberta Horns"
icon_state = "albertahorns"
una_styrahorn
name = "Unathi Styra Horn"
icon_state = "styrahorn"
una_styracrest
name = "Unathi Styra Frill"
icon_state = "styrafrill"
una_pachyboss
name = "Unathi Pachy Boss"
icon_state = "pachylump"
//ipc screens
ipc_screen_blank
+2 -2
View File
@@ -220,11 +220,11 @@
if(changed_voice)
if(impersonating)
track = "<a href='byond://?src=\ref[src];trackname=[html_encode(speaker_name)];track=\ref[impersonating]'>[speaker_name] ([jobname])</a>"
track = "<a class='ai_tracking' href='byond://?src=\ref[src];trackname=[html_encode(speaker_name)];track=\ref[impersonating]'>[speaker_name] ([jobname])</a>"
else
track = "[speaker_name] ([jobname])"
else
track = "<a href='byond://?src=\ref[src];trackname=[html_encode(speaker_name)];track=\ref[speaker]'>[speaker_name] ([jobname])</a>"
track = "<a class='ai_tracking' href='byond://?src=\ref[src];trackname=[html_encode(speaker_name)];track=\ref[speaker]'>[speaker_name] ([jobname])</a>"
if(istype(src, /mob/abstract/observer))
if(speaker != null)
@@ -160,8 +160,6 @@
if(!silent)
to_chat(src, SPAN_WARNING("You need a tighter hold on \the [M]!"))
return FALSE
else
return FALSE
. = stomach.get_devour_time(victim) || ..()
@@ -251,7 +249,7 @@
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
adjustEarDamage(30, 120)
if (prob(70))
Paralyse(10)
@@ -1768,6 +1766,11 @@
if (doClickAction)
..()
/mob/living/carbon/human/AltClick(mob/user)
. = ..()
if(hasHUD(user, MED_HUDTYPE))
Topic(src, list("triagetag"=1))
/mob/living/carbon/human/verb/toggle_underwear()
set name = "Toggle Underwear"
set desc = "Shows/hides selected parts of your underwear."
@@ -2018,7 +2021,7 @@
var/obj/item/organ/internal/augment/synthetic_cords/voice/aug = internal_organs_by_name[BP_AUG_ACC_CORDS] //checks for augments, thanks grey
if(aug)
used_accent = aug.accent
for(var/obj/item/gear in list(wear_mask,wear_suit,head)) //checks for voice changers masks now
if(gear)
var/obj/item/voice_changer/changer = locate() in gear
@@ -2110,7 +2113,7 @@
// Intensity 1: mild, 2: hurts, 3: very painful, 4: extremely painful, 5: that's going to leave some damage
// Sensitive_only: If yes, only those with sensitive hearing are affected
// Listening_pain: Increases the intensity by the listed amount if the person is listening in
/mob/living/carbon/human/proc/earpain(var/intensity, var/sensitive_only = FALSE, var/listening_pain = 0)
/mob/living/carbon/human/proc/earpain(var/intensity, var/sensitive_only = FALSE, var/listening_pain = 0)
if (ear_deaf)
return
if (sensitive_only && !get_hearing_sensitivity())
@@ -2119,7 +2122,7 @@
intensity += listening_pain
else if (sensitive_only)
return
var/obj/item/organ/external/E = organs_by_name[BP_HEAD]
switch (intensity)
if (1)
@@ -500,7 +500,7 @@
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
return
/mob/living/carbon/human/attack_generic(var/mob/user, var/damage, var/attack_message)
/mob/living/carbon/human/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_penetration, var/attack_flags)
if(!damage)
return
@@ -516,7 +516,7 @@
if(!dam_zone)
dam_zone = pick(organs)
var/obj/item/organ/external/affecting = get_organ(dam_zone)
apply_damage(damage, BRUTE, affecting)
apply_damage(damage, BRUTE, affecting, armor_pen = armor_penetration, damage_flags = attack_flags)
updatehealth()
return TRUE
@@ -112,6 +112,7 @@
var/is_noisy = FALSE // if TRUE, movement should make sound.
var/bodyfall_sound = /decl/sound_category/bodyfall_sound
var/footsound = /decl/sound_category/blank_footsteps
var/last_x = 0
var/last_y = 0
@@ -125,4 +126,4 @@
var/datum/martial_art/primary_martial_art = null
var/list/datum/martial_art/known_martial_arts = null
var/triage_tag = TRIAGE_NONE
var/triage_tag = TRIAGE_NONE
@@ -141,17 +141,17 @@
if(up_hint)
up_hint.icon_state = "uphint[(B ? !!B.is_hole : 0)]"
if (is_noisy && !stat && !lying)
if (!stat && !lying)
if ((x == last_x && y == last_y) || !footsound)
return
last_x = x
last_y = y
if (m_intent == M_RUN)
playsound(src, footsound, 70, 1, required_asfx_toggles = ASFX_FOOTSTEPS)
playsound(src, is_noisy ? footsound : species.footsound, 70, 1, required_asfx_toggles = ASFX_FOOTSTEPS)
else
footstep++
if (footstep % 2)
playsound(src, footsound, 40, 1, required_asfx_toggles = ASFX_FOOTSTEPS)
playsound(src, is_noisy ? footsound : species.footsound, 40, 1, required_asfx_toggles = ASFX_FOOTSTEPS)
/mob/living/carbon/human/mob_has_gravity()
. = ..()
@@ -276,6 +276,7 @@
var/zombie_type //What zombie species they become
var/list/character_color_presets
var/bodyfall_sound = /decl/sound_category/bodyfall_sound //default, can be used for species specific falling sounds
var/footsound = /decl/sound_category/blank_footsteps //same as above but for footsteps without shoes
var/list/alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_KIDNEYS, BP_STOMACH, BP_APPENDIX) //what internal organs can be changed in character setup
var/list/possible_external_organs_modifications = list("Normal","Amputated","Prosthesis")
@@ -62,6 +62,8 @@
BP_EYES = /obj/item/organ/internal/eyes/skrell
)
pain_messages = list("I can't feel my headtails", "You really need some painkillers", "Stars above, the pain")
flesh_color = "#8CD7A3"
blood_color = COLOR_SKRELL_BLOOD
base_color = "#006666"
@@ -93,6 +95,7 @@
zombie_type = SPECIES_ZOMBIE_SKRELL
bodyfall_sound = /decl/sound_category/bodyfall_skrell_sound
footsound = /decl/sound_category/footstep_skrell_sound
alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_KIDNEYS, BP_STOMACH)
@@ -90,7 +90,7 @@
default_h_style = "Tajaran Ears"
allowed_citizenships = list(CITIZENSHIP_PRA, CITIZENSHIP_DPRA, CITIZENSHIP_NKA)
allowed_citizenships = list(CITIZENSHIP_PRA, CITIZENSHIP_DPRA, CITIZENSHIP_NKA, CITIZENSHIP_FREE_COUNCIL)
default_citizenship = CITIZENSHIP_PRA
allowed_religions = list(RELIGION_TWINSUNS, RELIGION_MATAKE, RELIGION_RASKARA, RELIGION_NONE, RELIGION_OTHER)
@@ -19,12 +19,13 @@
)
primitive_form = SPECIES_MONKEY_UNATHI
darksight = 3
gluttonous = GLUT_MESSY
gluttonous = GLUT_MESSY|GLUT_ITEM_TINY
stomach_capacity = 7
slowdown = 0.5
brute_mod = 0.8
fall_mod = 1.2
radiation_mod = 0.9 // how else did they survive nuclear armageddon?
grab_mod = 1.25 // Huge, usually have horns
resist_mod = 2.5 // Arguably our strongest organic species
@@ -86,24 +86,20 @@
return 1
// Are we placing or stripping?
var/stripping
var/stripping = target_slot
var/obj/item/held = user.get_active_hand()
if(!istype(held) || is_robot_module(held) || istype(held, /obj/item/grab))
if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here?
return 0
if(stripping)
if(!target_slot.canremove)
to_chat(user, "<span class='warning'>You cannot remove \the [src]'s [target_slot.name].</span>")
return 0
stripping = 1
if(stripping)
visible_message("<span class='danger'>\The [user] is trying to remove \the [src]'s [target_slot.name]!</span>")
else
visible_message("<span class='danger'>\The [user] is trying to remove \the [src]'s [target_slot.name]!</span>")
else
visible_message("<span class='danger'>\The [user] is trying to put \a [held] on \the [src]!</span>")
if(!do_mob(user,src,HUMAN_STRIP_DELAY))
return 0
if(!stripping && user.get_active_hand() != held)
if(!stripping && held != user.get_active_hand())
return 0
if(stripping)
@@ -112,9 +108,9 @@
var/obj/item/clothing/ears/OE = (l_ear == target_slot ? r_ear : l_ear)
qdel(OE)
unEquip(target_slot)
user.put_in_hands(target_slot)
else if(user.unEquip(held))
equip_to_slot_if_possible(held, text2num(slot_to_strip), FALSE, TRUE, TRUE, FALSE, TRUE)
if(held.loc != src)
if(!equip_to_slot_if_possible(held, text2num(slot_to_strip), FALSE, TRUE, TRUE, FALSE, TRUE))
user.put_in_hands(held)
return 1
+1 -1
View File
@@ -222,7 +222,7 @@
// End BS12 momentum-transfer code.
/mob/living/attack_generic(var/mob/user, var/damage, var/attack_message)
/mob/living/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_penetration, var/attack_flags)
if(!damage)
return
@@ -3,4 +3,10 @@
/mob/living/silicon/ai/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
if(!anchored)
. = ..()
return ..()
/mob/living/silicon/ai/facedir(var/ndir)
. = ..()
if(holo?.active_holograms[src])
var/obj/effect/overlay/hologram/H = holo.active_holograms[src]
H.dir = ndir
@@ -272,6 +272,7 @@
/obj/item/reagent_containers/pill,
/obj/item/reagent_containers/spray,
/obj/item/personal_inhaler,
/obj/item/reagent_containers/personal_inhaler_cartridge,
/obj/item/reagent_containers/inhaler,
/obj/item/reagent_containers/hypospray,
/obj/item/storage/pill_bottle,
@@ -10,6 +10,7 @@
response_harm = "viciously beaten"
melee_damage_lower = 10
melee_damage_upper = 10
armor_penetration = 20
attacktext = "rammed"
organ_names = list("core", "production array", "sensor array")
speed = 0
@@ -9,6 +9,7 @@
health_prefix = "harvester"
melee_damage_lower = 25
melee_damage_upper = 25
armor_penetration = 60
attacktext = "violently stabbed"
organ_names = list("core", "harvesting array")
speed = -1
@@ -11,6 +11,7 @@
harm_intent_damage = 0
melee_damage_lower = 30
melee_damage_upper = 30
armor_penetration = 40
attacktext = "smashed their armored gauntlet into"
organ_names = list("core", "right arm", "left arm")
mob_size = MOB_LARGE
@@ -97,6 +97,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
armor_penetration = 20
attacktext = "gored"
attack_sound = 'sound/weapons/bite.ogg'
@@ -26,6 +26,8 @@
maxHealth = 80
melee_damage_lower = 10
melee_damage_upper = 18
armor_penetration = 30 //Standard armor probably doesn't help against a bear, does it?
attack_flags = DAM_EDGE|DAM_SHARP
resist_mod = 4
break_stuff_probability = 80
mob_size = 17
@@ -33,6 +33,7 @@
health = 200
melee_damage_lower = 15
melee_damage_upper = 20
armor_penetration = 10
resist_mod = 1.5
heat_damage_per_tick = 20
cold_damage_per_tick = 20
@@ -61,6 +62,7 @@
health = 40
melee_damage_lower = 5
melee_damage_upper = 10
armor_penetration = 20
poison_per_bite = 10
var/atom/cocoon_target
poison_type = /decl/reagent/soporific
@@ -78,6 +80,7 @@
health = 120
melee_damage_lower = 10
melee_damage_upper = 20
armor_penetration = 15
poison_per_bite = 5
move_to_delay = 4
@@ -91,6 +94,7 @@
health = 100
melee_damage_lower = 5
melee_damage_upper = 10
armor_penetration = 15
poison_type = /decl/reagent/perconol // mildly beneficial for organics
poison_per_bite = 2
move_to_delay = 5
@@ -9,6 +9,8 @@
maxHealth = 15
melee_damage_lower = 10
melee_damage_upper = 10
armor_penetration = 40
attack_flags = DAM_SHARP|DAM_EDGE
break_stuff_probability = 25
attacktext = "slashed"
projectilesound = 'sound/weapons/bladeslice.ogg'
@@ -1,8 +1,8 @@
/obj/item/projectile/beam/hivebot
name = "electrical discharge"
damage = 10
damage = 20
damage_type = BURN
agony = 30
agony = 20
armor_penetration = 40
muzzle_type = /obj/effect/projectile/muzzle/stun
tracer_type = /obj/effect/projectile/tracer/stun
@@ -18,6 +18,7 @@
name = "archaic energy welder"
damage_type = BURN
damage = 20
armor_penetration = 15
incinerate = 5
muzzle_type = /obj/effect/projectile/muzzle/laser/blue
tracer_type = /obj/effect/projectile/tracer/laser/blue
@@ -1,9 +1,11 @@
/obj/item/projectile/bullet/pistol/hivebotspike
name = "spike"
damage = 10
armor_penetration = 40
sharp = 1
embed = 0
/obj/item/projectile/bullet/pistol/hivebotspike/needle
name = "needle"
damage = 5
damage = 5
armor_penetration = 60
@@ -192,7 +192,7 @@ mob/living/simple_animal/hostile/hitby(atom/movable/AM as mob|obj,var/speed = TH
var/atom/target
if(isliving(target_mob))
var/mob/living/L = target_mob
L.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext)
L.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, armor_penetration, attack_flags)
on_attack_mob(L)
target = L
else if(istype(target_mob, /obj/machinery/bot))
@@ -88,6 +88,7 @@
ranged = 1
smart_ranged = TRUE
organ_names = list("core", "right fore wheel", "left fore wheel", "right rear wheel", "left rear wheel")
blood_type = COLOR_OIL
melee_damage_lower = 0
melee_damage_upper = 0
attacktext = "barrels into"
@@ -12,6 +12,7 @@
maxHealth = 50
melee_damage_lower = 5
melee_damage_upper = 8
armor_penetration = 5
attacktext = "sliced"
faction = "silicon"
min_oxy = 0
@@ -26,6 +26,8 @@
harm_intent_damage = 4
melee_damage_lower = 15
melee_damage_upper = 15
armor_penetration = 15
attack_flags = DAM_EDGE
attacktext = "bitten"
attack_sound = 'sound/weapons/bite.ogg'
@@ -27,6 +27,7 @@
health = 1100
melee_damage_lower = 35
melee_damage_upper = 40
armor_penetration = 30
resist_mod = 15 // LOL good luck pal
heat_damage_per_tick = 20
cold_damage_per_tick = 20
@@ -20,6 +20,7 @@
harm_intent_damage = 5
melee_damage_lower = 30
melee_damage_upper = 30
armor_penetration = 15
resist_mod = 3
mob_size = 15
environment_smash = 2
@@ -9,6 +9,7 @@
maxHealth = 15
melee_damage_lower = 10
melee_damage_upper = 15
armor_penetration = 20
density = 0
attacktext = "cut"
attack_sound = 'sound/weapons/bladeslice.ogg'
@@ -82,6 +82,8 @@
//LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly
var/melee_damage_lower = 0
var/melee_damage_upper = 0
var/armor_penetration = 0
var/attack_flags = 0
var/attacktext = "attacked"
var/attack_sound = null
var/friendly = "nuzzles"
+1 -1
View File
@@ -346,7 +346,7 @@
pointing_effect = new /obj/effect/decal/point(A)
pointing_effect.invisibility = invisibility
addtimer(CALLBACK(src, .proc/end_pointing_effect, pointing_effect), 2 SECONDS)
else
else if(!invisibility)
var/atom/movable/M = A
M.add_filter("pointglow", 1, list(type = "drop_shadow", x = 0, y = -1, offset = 1, size = 1, color = "#F00"))
addtimer(CALLBACK(M, /atom/movable.proc/remove_filter, "pointglow"), 2 SECONDS)