Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into findnreplace

# Conflicts:
#	code/game/machinery/recharger.dm
#	code/game/objects/items/devices/autopsy.dm
#	code/game/objects/items/devices/modkit.dm
#	code/game/objects/structures/lattice.dm
This commit is contained in:
Markolie
2017-04-14 18:15:12 +02:00
280 changed files with 2179 additions and 1512 deletions
@@ -220,7 +220,7 @@
threatcount += 4
//Mindshield implants imply trustworthyness
if(isloyal(src))
if(ismindshielded(src))
threatcount -= 1
return threatcount
+2 -6
View File
@@ -167,12 +167,8 @@
if(isrobot(loc))
var/mob/living/silicon/robot/borg = loc
borg.mmi = null
if(brainmob)
qdel(brainmob)
brainmob = null
if(held_brain)
qdel(held_brain)
held_brain = null
QDEL_NULL(brainmob)
QDEL_NULL(held_brain)
return ..()
/obj/item/device/mmi/syndie
@@ -123,7 +123,5 @@
icon_state = "scroll"
/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs.
if(brainmob)
qdel(brainmob)
brainmob = null
QDEL_NULL(brainmob)
return ..()
+54 -7
View File
@@ -53,6 +53,19 @@
if(!found_slime_bodypart) //Everyone else fails, skip the emote attempt
return
if("clack", "clacks")
if(species.name == "Kidan") //Only Kidan can clack and rightfully so.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("click", "clicks")
if(species.name == "Kidan") //Only Kidan can click and rightfully so.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("scream", "screams")
on_CD = handle_emote_CD(50) //longer cooldown
if("fart", "farts", "flip", "flips", "snap", "snaps")
@@ -163,6 +176,40 @@
playsound(loc, 'sound/effects/slime_squish.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
m_type = 2
if("clack", "clacks")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "<B>[src]</B> clacks their mandibles at [param]."
else
message = "<B>[src]</B> clacks their mandibles."
playsound(loc, 'sound/effects/Kidanclack.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
m_type = 2
if("click", "clicks")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "<B>[src]</B> clicks their mandibles at [param]."
else
message = "<B>[src]</B> clicks their mandibles."
playsound(loc, 'sound/effects/Kidanclack2.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
m_type = 2
if("yes")
var/M = null
if(param)
@@ -225,12 +272,12 @@
if(!restrained())
message = "<B>[src]</B> is strumming the air and headbanging like a safari chimp."
m_type = 1
if("dance")
if(!restrained())
message = "<B>[src]</B> dances around happily."
m_type = 1
if("jump")
if(!restrained())
message = "<B>[src]</B> jumps!"
@@ -836,11 +883,11 @@
// playsound(loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun
if(locate(/obj/item/weapon/storage/bible) in get_turf(src))
to_chat(viewers(src), "<span class='warning'><b>[src] farts on the Bible!</b></span>")
var/image/cross = image('icons/obj/storage.dmi',"bible")
var/adminbfmessage = "\blue [bicon(cross)] <b><font color=red>Bible Fart: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b>"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, adminbfmessage)
var/image/cross = image('icons/obj/storage.dmi',"bible")
var/adminbfmessage = "\blue [bicon(cross)] <b><font color=red>Bible Fart: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b>"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, adminbfmessage)
else if(TOXIC_FARTS in mutations)
message = "<b>[src]</b> unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart."
else if(SUPER_FART in mutations)
@@ -1892,7 +1892,7 @@
//Mindshield implants imply slight trustworthiness
if(isloyal(src))
if(ismindshielded(src))
threatcount -= 1
//Agent cards lower threatlevel.
@@ -1,7 +1,7 @@
var/global/default_martial_art = new/datum/martial_art
/mob/living/carbon/human
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD)
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD)
//Marking colour and style
var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000.
+2 -1
View File
@@ -1181,7 +1181,8 @@
else
AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3)
adjustOxyLoss(5)
adjustBruteLoss(1)
Paralyse(4)
adjustBruteLoss(2)
@@ -18,7 +18,7 @@
"eyes" = /obj/item/organ/internal/eyes/abductor //3 darksight.
)
flags = HAS_LIPS | NO_BLOOD | NO_BREATHE
flags = HAS_LIPS | NO_BLOOD | NO_BREATHE | NOGUNS
oxy_mod = 0
@@ -27,11 +27,14 @@
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
blood_color = "#FF5AFF"
female_scream_sound = 'sound/goonstation/voice/male_scream.ogg'
female_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
female_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' //Abductors always scream like guys
/datum/species/abductor/can_understand(var/mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member
/datum/species/abductor/can_understand(mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member
return 1
/datum/species/abductor/handle_post_spawn(var/mob/living/carbon/human/H)
/datum/species/abductor/handle_post_spawn(mob/living/carbon/human/H)
H.gender = NEUTER
if(H.mind)
H.mind.abductor = new /datum/abductor
@@ -486,7 +486,7 @@
brute_mod = 0.8
flags = IS_WHITELISTED
clothing_flags = HAS_SOCKS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_CLAWS | HAS_HEAD_ACCESSORY
eyes = "kidan_eyes_s"
dietflags = DIET_HERB
@@ -512,6 +512,8 @@
"is attempting to bite their antenna off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is cracking their exoskeleton!",
"is stabbing themselves with their mandibles!",
"is holding their breath!")
/datum/species/slime
@@ -189,7 +189,7 @@
to_chat(target, "<span class='danger'>You feel yourself agreeing with [user], and a surge of loyalty begins building.</span>")
target.Weaken(12)
sleep(20)
if(isloyal(target))
if(ismindshielded(target))
to_chat(user, "<span class='notice'>They are enslaved by Nanotrasen. You feel their interest in your cause wane and disappear.</span>")
user.visible_message("<span class='danger'>[user] stops talking for a moment, then moves back away from [target].</span>")
to_chat(target, "<span class='danger'>Your mindshield implant activates, protecting you from conversion.</span>")
+52 -15
View File
@@ -246,7 +246,7 @@ var/list/ai_verbs_default = list(
ai_list -= src
shuttle_caller_list -= src
shuttle_master.autoEvac()
qdel(eyeobj) // No AI, no Eye
QDEL_NULL(eyeobj) // No AI, no Eye
malfhack = null
return ..()
@@ -299,22 +299,59 @@ var/list/ai_verbs_default = list(
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
if(Entry.len < 2)
if(Entry.len < 2 || Entry[1] != "ai") //ignore incorrectly formatted entries or entries that aren't marked for AI
continue
if(Entry.len < 3 && Entry[1] == ckey && Entry[2] == real_name)
custom_sprite = 1 //They're in the list? Custom sprite time
icon = 'icons/mob/custom-synthetic.dmi'
if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required
custom_sprite = 1
var/display_choices = list(
"Monochrome",
"Blue",
"Clown",
"Inverted",
"Text",
"Smiley",
"Angry",
"Dorf",
"Matrix",
"Bliss",
"Firewall",
"Green",
"Red",
"Static",
"Triumvirate",
"Triumvirate Static",
"Red October",
"Sparkles",
"ANIMA",
"President",
"NT",
"NT2",
"Rainbow",
"Angel",
"Heartline",
"Hades",
"Helios",
"Syndicat Meow",
"Too Deep",
"Goon",
"Murica",
"Fuzzy",
"Glitchman",
"House",
"Database"
)
if(custom_sprite)
display_choices += "Custom"
//if(icon_state == initial(icon_state))
var/icontype = ""
if(custom_sprite == 1)
icontype = ("Custom")//automagically selects custom sprite if one is available
else
icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President", "NT", "NT2", "Rainbow", "Angel", "Heartline", "Hades", "Helios", "Syndicat Meow", "Too Deep", "Goon", "Murica", "Fuzzy", "Glitchman", "House", "Database")
icontype = input("Select an icon!", "AI", null, null) in display_choices
icon = 'icons/mob/AI.dmi' //reset this in case we were on a custom sprite and want to change to a standard one
switch(icontype)
if("Custom")
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' //set this here so we can use the custom_sprite
icon_state = "[ckey]-ai"
if("Clown")
icon_state = "ai-clown"
@@ -859,10 +896,10 @@ var/list/ai_verbs_default = list(
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
if(Entry.len < 3)
if(Entry.len < 2 || Entry[1] != "hologram")
continue
if (Entry[1] == ckey && Entry[2] == real_name && Entry[3] == "Hologram") //Custom holograms
if (Entry[2] == ckey) //Custom holograms
custom_hologram = 1 // option is given in hologram menu
var/input
@@ -971,10 +1008,10 @@ var/list/ai_verbs_default = list(
if("ancient machine")
holo_icon = getHologramIcon(icon('icons/mob/ancient_machine.dmi', "ancient_machine"))
if("custom")
if("[ckey]-ai-holo" in icon_states('icons/mob/custom-synthetic.dmi'))
holo_icon = getHologramIcon(icon('icons/mob/custom-synthetic.dmi', "[ckey]-ai-holo"))
else if("[ckey]-ai-holo" in icon_states('icons/mob/custom-synthetic64.dmi'))
holo_icon = getHologramIcon(icon('icons/mob/custom-synthetic64.dmi', "[ckey]-ai-holo"))
if("[ckey]-ai-holo" in icon_states('icons/mob/custom_synthetic/custom-synthetic.dmi'))
holo_icon = getHologramIcon(icon('icons/mob/custom_synthetic/custom-synthetic.dmi', "[ckey]-ai-holo"))
else if("[ckey]-ai-holo" in icon_states('icons/mob/custom_synthetic/custom-synthetic64.dmi'))
holo_icon = getHologramIcon(icon('icons/mob/custom_synthetic/custom-synthetic64.dmi', "[ckey]-ai-holo"))
else
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1"))
+47 -8
View File
@@ -81,6 +81,7 @@
var/translator_on = 0 // keeps track of the translator module
var/current_pda_messaging = null
var/custom_sprite = 0
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
loc = paicard
@@ -394,17 +395,47 @@
set category = "pAI Commands"
set name = "Choose Chassis"
var/list/my_choices = list()
var/choice
var/finalized = "No"
//check for custom_sprite
if(!custom_sprite)
var/file = file2text("config/custom_sprites.txt")
var/lines = splittext(file, "\n")
for(var/line in lines)
// split & clean up
var/list/Entry = splittext(line, ":")
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
if(Entry.len < 2 || Entry[1] != "pai") //ignore incorrectly formatted entries or entries that aren't marked for pAI
continue
if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required
custom_sprite = 1
my_choices["Custom"] = "[ckey]-pai"
my_choices = possible_chassis.Copy()
if(custom_sprite)
my_choices["Custom"] = "[ckey]-pai"
if(loc == card) //don't let them continue in card form, since they won't be able to actually see their new mobile form sprite.
to_chat(src, "<span class='warning'>You must be in your mobile form to reconfigure your chassis.</span>")
return
while(finalized == "No" && client)
choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in possible_chassis
choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in my_choices
if(!choice) return
icon_state = possible_chassis[choice]
if(choice == "Custom")
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
else
icon = 'icons/mob/pai.dmi'
icon_state = my_choices[choice]
finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")
chassis = possible_chassis[choice]
chassis = my_choices[choice]
verbs -= /mob/living/silicon/pai/proc/choose_chassis
/mob/living/silicon/pai/proc/choose_verbs()
@@ -562,15 +593,23 @@
// Handle being picked up.
/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber)
/mob/living/silicon/pai/get_scooped(mob/living/carbon/grabber)
var/obj/item/weapon/holder/H = ..()
if(!istype(H))
return
if(resting)
icon_state = "[chassis]"
resting = 0
H.icon_state = "pai-[icon_state]"
H.item_state = "pai-[icon_state]"
if(custom_sprite)
H.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
H.icon_override = 'icons/mob/custom_synthetic/custom_head.dmi'
H.lefthand_file = 'icons/mob/custom_synthetic/custom_lefthand.dmi'
H.righthand_file = 'icons/mob/custom_synthetic/custom_righthand.dmi'
H.icon_state = "[icon_state]"
H.item_state = "[icon_state]_hand"
else
H.icon_state = "pai-[icon_state]"
H.item_state = "pai-[icon_state]"
grabber.put_in_active_hand(H)//for some reason unless i call this it dosen't work
grabber.update_inv_l_hand()
grabber.update_inv_r_hand()
@@ -281,7 +281,7 @@
if(!player) return
src.ckey = player.ckey
ckey = player.ckey
if(player.mob && player.mob.mind)
player.mob.mind.transfer_to(src)
@@ -47,4 +47,55 @@
if(M.a_intent == I_HELP)
get_scooped(M)
..()
..()
/mob/living/silicon/robot/drone/verb/customize()
set name = "Customize Chassis"
set desc = "Reconfigure your chassis into a customized version."
set category = "Drone"
if(!custom_sprite) //Check to see if custom sprite time, checking the appopriate file to change a var
var/file = file2text("config/custom_sprites.txt")
var/lines = splittext(file, "\n")
for(var/line in lines)
// split & clean up
var/list/Entry = splittext(line, ":")
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
if(Entry.len < 2 || Entry[1] != "drone")
continue
if (Entry[2] == ckey) //Custom holograms
custom_sprite = 1 // option is given in hologram menu
if(!custom_sprite)
to_chat(src, "<span class='warning'>Error 404: Custom chassis not found. Revoking customization option.</span>")
else
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
icon_state = "[ckey]-drone"
to_chat(src, "<span class='notice'>You reconfigure your chassis and improve the station through your new aesthetics.</span>")
verbs -= /mob/living/silicon/robot/drone/verb/customize
/mob/living/silicon/robot/drone/get_scooped(mob/living/carbon/grabber)
var/obj/item/weapon/holder/H = ..()
if(!istype(H))
return
if(resting)
resting = 0
if(custom_sprite)
H.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
H.icon_override = 'icons/mob/custom_synthetic/custom_head.dmi'
H.lefthand_file = 'icons/mob/custom_synthetic/custom_lefthand.dmi'
H.righthand_file = 'icons/mob/custom_synthetic/custom_righthand.dmi'
H.icon_state = "[icon_state]"
H.item_state = "[icon_state]_hand"
else
H.icon_state = "drone"
H.item_state = "drone"
grabber.put_in_active_hand(H)//for some reason unless i call this it dosen't work
grabber.update_inv_l_hand()
grabber.update_inv_r_hand()
return H
+14 -18
View File
@@ -180,16 +180,15 @@ var/list/robot_verbs_default = list(
for(var/line in lines)
// split & clean up
var/list/Entry = splittext(line, ";")
var/list/Entry = splittext(line, ":")
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
if(Entry.len < 2)
continue;
if(Entry.len < 2 || Entry[1] != "cyborg") //ignore incorrectly formatted entries or entries that aren't marked for cyborg
continue
if(Entry[1] == src.ckey && Entry[2] == src.real_name) //They're in the list? Custom sprite time, var and icon change required
if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required
custom_sprite = 1
icon = 'icons/mob/custom-synthetic.dmi'
return 1
@@ -252,12 +251,10 @@ var/list/robot_verbs_default = list(
mmi = null
if(connected_ai)
connected_ai.connected_robots -= src
qdel(wires)
wires = null
qdel(module)
module = null
camera = null
cell = null
QDEL_NULL(wires)
QDEL_NULL(module)
QDEL_NULL(camera)
QDEL_NULL(cell)
return ..()
/mob/living/silicon/robot/proc/pick_module()
@@ -1252,15 +1249,14 @@ var/list/robot_verbs_default = list(
triesleft--
var/icontype
if(custom_sprite == 1)
icontype = "Custom"
triesleft = 0
else
lockcharge = 1 //Locks borg until it select an icon to avoid secborgs running around with a standard sprite
icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chances." : "This is your last try."]", "Robot", null, null) in module_sprites
lockcharge = 1 //Locks borg until it select an icon to avoid secborgs running around with a standard sprite
icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chances." : "This is your last try."]", "Robot", null, null) in module_sprites
if(icontype)
if(icontype == "Custom")
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
else
icon = 'icons/mob/robots.dmi'
icon_state = module_sprites[icontype]
if(icontype == "Bro")
module.module_type = "Brobot"
@@ -35,8 +35,7 @@
for(var/module in modules)
qdel(module)
modules.Cut()
qdel(emag)
emag = null
QDEL_NULL(emag)
return ..()
/obj/item/weapon/robot_module/proc/fix_modules()
@@ -222,7 +221,7 @@
/obj/item/weapon/robot_module/security/New()
..()
modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src)
modules += new /obj/item/weapon/melee/baton/loaded/robot(src)
modules += new /obj/item/weapon/melee/baton/loaded(src)
modules += new /obj/item/weapon/gun/energy/disabler/cyborg(src)
modules += new /obj/item/taperoll/police(src)
modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src)
@@ -169,14 +169,11 @@
/mob/living/simple_animal/bot/Destroy()
if(paicard)
ejectpai()
qdel(Radio)
Radio = null
qdel(access_card)
access_card = null
QDEL_NULL(Radio)
QDEL_NULL(access_card)
if(radio_controller && bot_filter)
radio_controller.remove_object(bot_core, control_freq)
qdel(bot_core)
bot_core = null
QDEL_NULL(bot_core)
return ..()
/mob/living/simple_animal/bot/death(gibbed)
@@ -263,7 +260,7 @@
interact(H)
else
return ..()
/mob/living/simple_animal/bot/attack_ghost(mob/M)
interact(M)
@@ -65,12 +65,8 @@
/mob/living/simple_animal/bot/mulebot/Destroy()
unload(0)
if(wires)
qdel(wires)
wires = null
if(cell)
qdel(cell)
cell = null
QDEL_NULL(wires)
QDEL_NULL(cell)
return ..()
/mob/living/simple_animal/bot/mulebot/proc/set_suffix(suffix)
@@ -295,8 +295,7 @@
queen = new(src)
/obj/item/queen_bee/Destroy()
qdel(queen)
queen = null
QDEL_NULL(queen)
return ..()
@@ -108,7 +108,7 @@ Difficulty: Hard
..()
/mob/living/simple_animal/hostile/megafauna/hierophant/Destroy()
qdel(spawned_rune)
QDEL_NULL(spawned_rune)
. = ..()
/mob/living/simple_animal/hostile/megafauna/hierophant/devour(mob/living/L)
@@ -43,7 +43,7 @@
mouse_opacity = 2 // Easier to click on in melee, they're giant targets anyway
/mob/living/simple_animal/hostile/megafauna/Destroy()
qdel(internal_gps)
QDEL_NULL(internal_gps)
. = ..()
/mob/living/simple_animal/hostile/megafauna/death(gibbed)
@@ -77,7 +77,7 @@
OpenFire()
else
devour(L)
/mob/living/simple_animal/hostile/megafauna/onShuttleMove()
var/turf/oldloc = loc
. = ..()
@@ -96,6 +96,7 @@
if(collar)
collar.forceMove(loc)
collar = null
master_commander = null
simple_animal_list -= src
return ..()
@@ -303,7 +304,7 @@
/mob/living/simple_animal/proc/attacked_by(obj/item/I, mob/living/user) // Handled in _onclick/click.dm
return
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
if(!Proj)
return
@@ -662,15 +663,15 @@
. = ..()
/mob/living/simple_animal/can_equip(obj/item/I, slot, disable_warning = 0)
// . = ..() // Do not call parent. We do not want animals using their hand slots.
switch(slot)
if(slot_collar)
if(collar)
return 0
if(!can_collar)
return 0
if(!istype(I, /obj/item/clothing/accessory/petcollar))
return 0
// . = ..() // Do not call parent. We do not want animals using their hand slots.
switch(slot)
if(slot_collar)
if(collar)
return 0
if(!can_collar)
return 0
if(!istype(I, /obj/item/clothing/accessory/petcollar))
return 0
return 1
/mob/living/simple_animal/equip_to_slot(obj/item/W, slot)
@@ -692,13 +693,13 @@
name = collar.tagname
real_name = collar.tagname
regenerate_icons()
/mob/living/simple_animal/unEquip(obj/item/I, force)
. = ..()
if(!. || !I)
return
if(I == collar)
/mob/living/simple_animal/unEquip(obj/item/I, force)
. = ..()
if(!. || !I)
return
if(I == collar)
collar = null
regenerate_icons()
+1 -2
View File
@@ -444,8 +444,7 @@
if(assailant.client)
assailant.client.screen -= hud
assailant = null
qdel(hud)
hud = null
QDEL_NULL(hud)
return ..()
+2 -2
View File
@@ -41,8 +41,8 @@
else if(eyes) //If they're not, check to see if their eyes got one of them there colour matrices. Will be null if eyes are robotic/the mob isn't colourblind and they have no default colour matrix.
return eyes.get_colourmatrix()
/proc/isloyal(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them
for(var/obj/item/weapon/implant/loyalty/L in A)
/proc/ismindshielded(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them
for(var/obj/item/weapon/implant/mindshield/L in A)
if(L && L.implanted)
return 1
return 0
+201 -12
View File
@@ -559,10 +559,67 @@
/datum/sprite_accessory/hair/unathi
species_allowed = list("Unathi")
glasses_over = 1
icon = 'icons/mob/body_accessory.dmi'
/datum/sprite_accessory/hair/unathi/una_horns
name = "Unathi Horns"
icon_state = "soghun_horns"
/datum/sprite_accessory/hair/unathi/una_side_frills
icon = 'icons/mob/human_face.dmi'
name = "Unathi Side Frills"
icon_state = "unathi_sidefrills"
secondary_theme = "webbing"
/datum/sprite_accessory/hair/unathi/una_frills_dorsal
icon = 'icons/mob/human_face.dmi'
name = "Dorsal Frills"
icon_state = "unathi_dorsalfrills"
secondary_theme = "webbing"
/datum/sprite_accessory/hair/unathi/simple
name = "Simple Horns"
icon_state = "horns_simple"
/datum/sprite_accessory/hair/unathi/short
name = "Short Horns"
icon_state = "horns_short"
/datum/sprite_accessory/hairy/unathi/curled
name = "Curled Horns"
icon_state = "horns_curled"
/datum/sprite_accessory/hair/unathi/ram
name = "Ram Horns"
icon_state = "horns_ram"
/datum/sprite_accessory/hair/unathi/double
name = "Double Horns"
icon_state = "horns_drac"
/datum/sprite_accessory/hair/unathi/lower
name = "Lower Horns"
icon_state = "horns_lower"
/datum/sprite_accessory/hair/unathi/big
name = "Big"
icon_state = "horns_big"
/datum/sprite_accessory/hair/unathi/ram2
name = "Ram alt."
icon_state = "horns_ram2"
/datum/sprite_accessory/hair/unathi/small
name = "Small"
icon_state = "horns_small"
/datum/sprite_accessory/hair/unathi/chin
name = "Chin"
icon_state = "horns_chin"
/datum/sprite_accessory/hair/unathi/adorns
name = "Adorns"
icon_state = "horns_adorns"
/datum/sprite_accessory/hair/unathi/spikes
name = "Spikes"
icon_state = "horns_spikes"
/datum/sprite_accessory/hair/skrell
species_allowed = list("Skrell")
@@ -747,6 +804,20 @@
icon_state = "braided"
secondary_theme = "beads"
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_punkbraided
name = "Punk Braided"
icon_state = "punkbraided"
secondary_theme = "flare"
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_short2
name = "Short Alt."
icon_state = "short2"
glasses_over = 1
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_rough
name = "Rough-Cropped Mane"
icon_state = "rough"
/datum/sprite_accessory/hair/vox
species_allowed = list("Vox")
glasses_over = 1
@@ -984,6 +1055,10 @@
name = "Tajara Goatee"
icon_state = "facial_goatee"
/datum/sprite_accessory/facial_hair/tajara/taj_goatee_faded
name = "Tajara Faded Goatee"
icon_state = "facial_goatee_faded"
/datum/sprite_accessory/facial_hair/tajara/taj_smallstache
name = "Tajara Smallstache"
icon_state = "facial_smallstache"
@@ -1048,6 +1123,15 @@
name = "Swift"
icon_state = "vulp_facial_swift"
/datum/sprite_accessory/facial_hair/vulpkanin/vulp_elder
name = "Elder"
icon_state = "vulp_facial_elder"
secondary_theme = "chin"
/datum/sprite_accessory/facial_hair/vulpkanin/vulp_slash
name = "Slash"
icon_state = "vulp_facial_slash"
/datum/sprite_accessory/facial_hair/unathi
species_allowed = list("Unathi")
gender = NEUTER
@@ -1055,39 +1139,74 @@
/datum/sprite_accessory/facial_hair/unathi/una_spines_long
name = "Long Spines"
icon_state = "soghun_longspines"
icon_state = "unathi_longspines"
/datum/sprite_accessory/facial_hair/unathi/una_spines_short
name = "Short Spines"
icon_state = "soghun_shortspines"
icon_state = "unathi_shortspines"
/datum/sprite_accessory/facial_hair/unathi/una_frills_aquaspine
name = "Spiny Aquatic Frills"
icon_state = "unathi_dracfrills"
/datum/sprite_accessory/facial_hair/unathi/una_frills_aquatic
name = "Aquatic Frills"
icon_state = "soghun_aquaticfrills"
icon_state = "unathi_aquaticfrills"
/datum/sprite_accessory/facial_hair/unathi/una_frills_long
name = "Long Frills"
icon_state = "soghun_longfrills"
icon_state = "unathi_longfrills"
/datum/sprite_accessory/facial_hair/unathi/una_frills_short
name = "Short Frills"
icon_state = "soghun_shortfrills"
icon_state = "unathi_shortfrills"
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_aquaspine
name = "Spiny Aquatic Webbed Frills"
icon_state = "unathi_dracfrills"
secondary_theme = "webbing"
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_aquatic
name = "Aquatic Webbed Frills"
icon_state = "soghun_aquaticfrills"
icon_state = "unathi_aquaticfrills"
secondary_theme = "webbing"
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_long
name = "Long Webbed Frills"
icon_state = "soghun_longfrills"
icon_state = "unathi_longfrills"
secondary_theme = "webbing"
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_short
name = "Short Webbed Frills"
icon_state = "soghun_shortfrills"
icon_state = "unathi_shortfrills"
secondary_theme = "webbing"
/datum/sprite_accessory/facial_hair/unathi/una_side_frills
name = "Side Frills"
icon_state = "unathi_sidefrills"
secondary_theme = "webbing"
/datum/sprite_accessory/facial_hair/unathi/una_frills_dorsal
over_hair = null
name = "Dorsal Frills"
icon_state = "unathi_dorsalfrills"
secondary_theme = "webbing"
/datum/sprite_accessory/facial_hair/unathi/una_chin_horns
name = "Chin Horns"
icon = 'icons/mob/body_accessory.dmi'
icon_state = "horns_chin"
/datum/sprite_accessory/facial_hair/unathi/una_horn_adorns
name = "Horn Adorns"
icon = 'icons/mob/body_accessory.dmi'
icon_state = "horns_adorns"
/datum/sprite_accessory/facial_hair/unathi/una_spikes
name = "Spikes"
icon = 'icons/mob/body_accessory.dmi'
icon_state = "horns_spikes"
//skin styles - WIP
//going to have to re-integrate this with surgery
//let the icon_state hold an icon preview for now
@@ -1649,6 +1768,38 @@
name = "Ram"
icon_state = "horns_ram"
/datum/sprite_accessory/head_accessory/unathi/double
name = "Double"
icon_state = "horns_drac"
/datum/sprite_accessory/head_accessory/unathi/lower
name = "Lower"
icon_state = "horns_lower"
/datum/sprite_accessory/head_accessory/unathi/big
name = "Big"
icon_state = "horns_big"
/datum/sprite_accessory/head_accessory/unathi/ram2
name = "Ram alt."
icon_state = "horns_ram2"
/datum/sprite_accessory/head_accessory/unathi/small
name = "Small"
icon_state = "horns_small"
/datum/sprite_accessory/head_accessory/unathi/chin
name = "Chin"
icon_state = "horns_chin"
/datum/sprite_accessory/head_accessory/unathi/adorns
name = "Adorns"
icon_state = "horns_adorns"
/datum/sprite_accessory/head_accessory/unathi/spikes
name = "Spikes"
icon_state = "horns_spikes"
/datum/sprite_accessory/head_accessory/tajara
species_allowed = list("Tajaran")
@@ -1729,6 +1880,20 @@
name = "Vulpkanin Nose"
icon_state = "markings_face_nose_vulp"
/datum/sprite_accessory/head_accessory/vulpkanin/vulp_nose2
name = "Vulpkanin Nose Alt."
icon_state = "markings_face_nose2_vulp"
/datum/sprite_accessory/head_accessory/vulpkanin/vulp_elder
icon = 'icons/mob/human_face.dmi'
name = "Elder"
icon_state = "vulp_facial_elder"
/datum/sprite_accessory/head_accessory/vulpkanin/vulp_slash
icon = 'icons/mob/human_face.dmi'
name = "Slash"
icon_state = "vulp_facial_slash"
/datum/sprite_accessory/head_accessory/ipc
species_allowed = list("Machine")
over_hair = 1
@@ -1749,11 +1914,31 @@
name = "Head Light"
icon_state = "light"
/datum/sprite_accessory/head_accessory/ipc/ipc_side_lights
name = "Side Lights"
icon_state = "sidelights"
/datum/sprite_accessory/head_accessory/ipc/ipc_side_cyber_head
name = "Cyber Pipes"
icon_state = "cyberhead"
/datum/sprite_accessory/head_accessory/ipc/ipc_side_antlers
name = "Antlers"
icon_state = "antlers"
/datum/sprite_accessory/head_accessory/ipc/ipc_side_drone_eyes
name = "Drone Eyes"
icon_state = "droneeyes"
/datum/sprite_accessory/head_accessory/ipc/ipc_crowned
name = "Crowned"
icon_state = "crowned"
/datum/sprite_accessory/head_accessory/kidan
icon = 'icons/mob/human_face.dmi'
species_allowed = list("Kidan")
over_hair = 1
do_colouration = 0
do_colouration = 1
/datum/sprite_accessory/head_accessory/kidan/perked_antennae
name = "Perked-up Antennae"
@@ -1956,6 +2141,10 @@
name = "Vulpkanin Nose"
icon_state = "markings_face_nose_vulp"
/datum/sprite_accessory/body_markings/head/vulpkanin/nose2_default_vulp
name = "Vulpkanin Nose Alt."
icon_state = "markings_face_nose2_vulp"
/datum/sprite_accessory/body_markings/head/vulpkanin/muzzle_vulp //Companion marking for Vulpkanin Belly Alt..
name = "Vulpkanin Muzzle"
icon_state = "markings_face_full_vulp"