mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01:00
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:
@@ -220,7 +220,7 @@
|
||||
threatcount += 4
|
||||
|
||||
//Mindshield implants imply trustworthyness
|
||||
if(isloyal(src))
|
||||
if(ismindshielded(src))
|
||||
threatcount -= 1
|
||||
|
||||
return threatcount
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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"))
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -444,8 +444,7 @@
|
||||
if(assailant.client)
|
||||
assailant.client.screen -= hud
|
||||
assailant = null
|
||||
qdel(hud)
|
||||
hud = null
|
||||
QDEL_NULL(hud)
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user