mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-18 02:25:06 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into cosmetic_things
# Conflicts: # icons/mob/back.dmi # icons/mob/items/lefthand.dmi # icons/mob/items/righthand.dmi
This commit is contained in:
@@ -7,10 +7,11 @@
|
||||
log_say("Ghost/[src.key] : [message]")
|
||||
|
||||
if (src.client)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot talk in deadchat (muted)."
|
||||
return
|
||||
if(message)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot talk in deadchat (muted)."
|
||||
return
|
||||
|
||||
. = src.say_dead(message)
|
||||
|
||||
@@ -27,10 +28,11 @@
|
||||
log_emote("Ghost/[src.key] : [message]")
|
||||
|
||||
if(src.client)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot emote in deadchat (muted)."
|
||||
return
|
||||
if(message)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot emote in deadchat (muted)."
|
||||
return
|
||||
|
||||
. = src.emote_dead(message)
|
||||
|
||||
|
||||
@@ -5,18 +5,70 @@
|
||||
ask_verb = "chimpers"
|
||||
exclaim_verb = "screeches"
|
||||
key = "6"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/skrell/monkey
|
||||
name = "Neaera"
|
||||
desc = "Squik squik squik."
|
||||
key = "8"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/unathi/monkey
|
||||
name = "Stok"
|
||||
desc = "Hiss hiss hiss."
|
||||
key = "7"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/tajaran/monkey
|
||||
name = "Farwa"
|
||||
desc = "Meow meow meow."
|
||||
key = "9"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/corgi
|
||||
name = "Dog"
|
||||
desc = "Woof woof woof."
|
||||
speech_verb = "barks"
|
||||
ask_verb = "woofs"
|
||||
exclaim_verb = "howls"
|
||||
key = "n"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("bark", "woof", "bowwow", "yap", "arf")
|
||||
|
||||
/datum/language/cat
|
||||
name = "Cat"
|
||||
desc = "Meow meow meow."
|
||||
speech_verb = "meows"
|
||||
ask_verb = "mrowls"
|
||||
exclaim_verb = "yowls"
|
||||
key = "c"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("meow", "mrowl", "purr", "meow", "meow", "meow")
|
||||
|
||||
/datum/language/mouse
|
||||
name = "Mouse"
|
||||
desc = "Squeak squeak. *Nibbles on cheese*"
|
||||
speech_verb = "squeaks"
|
||||
ask_verb = "squeaks"
|
||||
exclaim_verb = "squeaks"
|
||||
key = "m"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("squeak") // , "gripes", "oi", "meow")
|
||||
|
||||
/datum/language/bird
|
||||
name = "Bird"
|
||||
desc = "Chirp chirp, give me food"
|
||||
speech_verb = "chirps"
|
||||
ask_verb = "tweets"
|
||||
exclaim_verb = "squawks"
|
||||
key = "m"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("chirp", "squawk", "tweet")
|
||||
@@ -4,6 +4,7 @@
|
||||
speech_verb = "says"
|
||||
colour = "changeling"
|
||||
key = "g"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
@@ -21,6 +22,7 @@
|
||||
exclaim_verb = "sings"
|
||||
colour = "alien"
|
||||
key = "x"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
@@ -80,4 +82,5 @@
|
||||
exclaim_verb = "chants"
|
||||
colour = "cult"
|
||||
key = "y"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
exclaim_verb = "rustles"
|
||||
colour = "soghun"
|
||||
key = "q"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED
|
||||
syllables = list("hs","zt","kr","st","sh")
|
||||
|
||||
@@ -18,6 +19,7 @@
|
||||
name = LANGUAGE_ROOTGLOBAL
|
||||
desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses low frequency waves for slow communication at long ranges."
|
||||
key = "w"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/unathi
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
ask_verb = "queries"
|
||||
exclaim_verb = "declares"
|
||||
key = "b"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
var/drone_only
|
||||
|
||||
@@ -64,5 +65,6 @@
|
||||
exclaim_verb = "transmits"
|
||||
colour = "say_quote"
|
||||
key = "d"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
drone_only = 1
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
// Should this all be in Touch()?
|
||||
if(istype(H))
|
||||
if(get_accuracy_penalty(H)) //Should only trigger if they're not aiming well
|
||||
if(get_accuracy_penalty(H) && H != src) //Should only trigger if they're not aiming well
|
||||
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
|
||||
if(!hit_zone)
|
||||
H.do_attack_animation(src)
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
var/tally = 0
|
||||
|
||||
var/item_tally = 0
|
||||
|
||||
if(species.slowdown)
|
||||
tally = species.slowdown
|
||||
|
||||
@@ -33,7 +35,7 @@
|
||||
tally += 1.5
|
||||
else
|
||||
if(shoes)
|
||||
tally += shoes.slowdown
|
||||
item_tally += shoes.slowdown
|
||||
|
||||
for(var/organ_name in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
@@ -50,36 +52,40 @@
|
||||
|
||||
if(FAT in src.mutations)
|
||||
tally += 1.5
|
||||
if (bodytemperature < 283.222)
|
||||
tally += (283.222 - bodytemperature) / 10 * 1.75
|
||||
|
||||
if (bodytemperature < species.cold_level_1)
|
||||
tally += (species.cold_level_1 - bodytemperature) / 10 * 1.75
|
||||
|
||||
tally += max(2 * stance_damage, 0) //damaged/missing feet or legs is slow
|
||||
|
||||
if(mRun in mutations)
|
||||
tally = 0
|
||||
|
||||
if(species.slowdown_fixed)
|
||||
return (tally+config.human_delay)
|
||||
|
||||
// Loop through some slots, and add up their slowdowns. Shoes are handled below, unfortunately.
|
||||
// Includes slots which can provide armor, the back slot, and suit storage.
|
||||
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store) )
|
||||
tally += I.slowdown
|
||||
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store))
|
||||
item_tally += I.slowdown
|
||||
|
||||
// Hands are also included, to make the 'take off your armor instantly and carry it with you to go faster' trick no longer viable.
|
||||
// This is done seperately to disallow negative numbers.
|
||||
for(var/obj/item/I in list(r_hand, l_hand) )
|
||||
tally += max(I.slowdown, 0)
|
||||
item_tally += max(I.slowdown, 0)
|
||||
|
||||
// Dragging heavy objects will also slow you down, similar to above.
|
||||
if(pulling && istype(pulling, /obj/item))
|
||||
var/obj/item/pulled = pulling
|
||||
tally += max(pulled.slowdown, 0)
|
||||
item_tally += max(pulled.slowdown, 0)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && T.movement_cost)
|
||||
tally += T.movement_cost
|
||||
|
||||
if(species.item_slowdown_halved)
|
||||
if(item_tally > 0)
|
||||
item_tally *= 0.5
|
||||
|
||||
tally += item_tally
|
||||
|
||||
if(CE_SPEEDBOOST in chem_effects)
|
||||
if (tally >= 0) // cut any penalties in half
|
||||
tally = tally/2
|
||||
|
||||
@@ -352,13 +352,6 @@
|
||||
if(!L.is_bruised() && prob(8))
|
||||
rupture_lung()
|
||||
|
||||
if(should_have_organ("brain"))
|
||||
var/brainOxPercent = 0.02 //Default2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
|
||||
if(CE_STABLE in chem_effects)
|
||||
brainOxPercent = 0.01 //Halved in effect
|
||||
if(prob(5))
|
||||
adjustBrainLoss(brainOxPercent * oxyloss)
|
||||
|
||||
oxygen_alert = max(oxygen_alert, 1)
|
||||
|
||||
return 0
|
||||
@@ -377,8 +370,9 @@
|
||||
safe_pressure_min *= 1.25
|
||||
else if(breath)
|
||||
if(breath.total_moles < BREATH_MOLES / 10 || breath.total_moles > BREATH_MOLES * 5)
|
||||
if (prob(8))
|
||||
rupture_lung()
|
||||
if(is_below_sound_pressure(get_turf(src))) //No more popped lungs from choking/drowning
|
||||
if (prob(8))
|
||||
rupture_lung()
|
||||
|
||||
var/safe_exhaled_max = 10
|
||||
var/safe_toxins_max = 0.2
|
||||
@@ -925,6 +919,14 @@
|
||||
for(var/atom/a in hallucinations)
|
||||
qdel(a)
|
||||
|
||||
//Brain damage from Oxyloss
|
||||
if(should_have_organ("brain"))
|
||||
var/brainOxPercent = 0.02 //Default2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
|
||||
if(CE_STABLE in chem_effects)
|
||||
brainOxPercent = 0.01 //Halved in effect
|
||||
if(oxyloss >= 20 && prob(5))
|
||||
adjustBrainLoss(brainOxPercent * oxyloss)
|
||||
|
||||
if(halloss >= species.total_health)
|
||||
src << "<span class='notice'>You're in too much pain to keep going...</span>"
|
||||
src.visible_message("<B>[src]</B> slumps to the ground, too weak to continue fighting.")
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
var/appearance_flags = 0 // Appearance/display related features.
|
||||
var/spawn_flags = 0 // Flags that specify who can spawn as this species
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/slowdown_fixed = 0 // If this is on, they're not affected by object related slowdown (positive or negative)
|
||||
var/item_slowdown_halved = 0 // If this is on, they're not as affected by item weights for slowdown
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/holder_type
|
||||
@@ -194,8 +194,8 @@
|
||||
inherent_verbs = list()
|
||||
inherent_verbs |= /mob/living/carbon/human/proc/regurgitate
|
||||
|
||||
/datum/species/proc/sanitize_name(var/name)
|
||||
return sanitizeName(name)
|
||||
/datum/species/proc/sanitize_name(var/name, var/robot = 0)
|
||||
return sanitizeName(name, MAX_NAME_LEN, robot)
|
||||
|
||||
/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 1)
|
||||
var/boxtype = /obj/item/weapon/storage/box/survival //Default survival box
|
||||
|
||||
@@ -770,11 +770,6 @@ default behaviour is:
|
||||
if(buckled.buckle_movable)
|
||||
anchored = 0
|
||||
canmove = 1
|
||||
|
||||
else if(captured)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
lying = 0
|
||||
else
|
||||
lying = incapacitated(INCAPACITATION_KNOCKDOWN)
|
||||
canmove = !incapacitated(INCAPACITATION_DISABLED)
|
||||
|
||||
@@ -133,10 +133,11 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0)
|
||||
//If you're muted for IC chat
|
||||
if(client)
|
||||
client.handle_spam_prevention(MUTE_IC)
|
||||
if((client.prefs.muted & MUTE_IC) || say_disabled)
|
||||
src << "<span class='warning'>You cannot speak in IC (Muted).</span>"
|
||||
return
|
||||
if(message)
|
||||
client.handle_spam_prevention(MUTE_IC)
|
||||
if((client.prefs.muted & MUTE_IC) || say_disabled)
|
||||
src << "<span class='warning'>You cannot speak in IC (Muted).</span>"
|
||||
return
|
||||
|
||||
//Redirect to say_dead if talker is dead
|
||||
if(stat)
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
return
|
||||
|
||||
var/deathtime = world.time - src.timeofdeath
|
||||
var/deathtimeminutes = round(deathtime / 300)
|
||||
var/deathtimeminutes = round(deathtime / 600)
|
||||
var/pluralcheck = "minute"
|
||||
if(deathtimeminutes == 0)
|
||||
pluralcheck = ""
|
||||
@@ -122,11 +122,11 @@
|
||||
pluralcheck = " [deathtimeminutes] minute and"
|
||||
else if(deathtimeminutes > 1)
|
||||
pluralcheck = " [deathtimeminutes] minutes and"
|
||||
var/deathtimeseconds = round((deathtime - deathtimeminutes * 300) / 10,1)
|
||||
var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1)
|
||||
|
||||
if (deathtime < 3000)
|
||||
if (deathtime < 6000)
|
||||
usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds."
|
||||
usr << "You must wait 5 minutes to respawn as a drone!"
|
||||
usr << "You must wait 10 minutes to respawn as a drone!"
|
||||
return
|
||||
|
||||
var/list/all_fabricators = list()
|
||||
|
||||
@@ -18,7 +18,7 @@ var/global/list/robot_modules = list(
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "std_module"
|
||||
w_class = ITEMSIZE_NO_CONTAINER
|
||||
item_state = "electronic"
|
||||
item_state = "std_mod"
|
||||
flags = CONDUCT
|
||||
var/hide_on_manifest = 0
|
||||
var/channels = list()
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
has_langs = list("Mouse")
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
var/mob/living/owner
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
holder_type = /obj/item/weapon/holder/cat
|
||||
mob_size = MOB_SMALL
|
||||
|
||||
has_langs = list("Cat")
|
||||
speak_chance = 1
|
||||
speak = list("Meow!","Esp!","Purr!","HSSSSS")
|
||||
speak_emote = list("purrs", "meows")
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
see_in_dark = 5
|
||||
mob_size = 8
|
||||
|
||||
has_langs = list("Dog")
|
||||
speak_chance = 1
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
|
||||
speak_emote = list("barks", "woofs")
|
||||
|
||||
@@ -167,6 +167,7 @@
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 2
|
||||
speak = list("Cherp.","Cherp?","Chirrup.","Cheep!")
|
||||
speak_emote = list("cheeps")
|
||||
@@ -213,6 +214,7 @@ var/global/chicken_count = 0
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 2
|
||||
speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.")
|
||||
speak_emote = list("clucks","croons")
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "fish"
|
||||
desc = "Its a fishy. No touchy fishy."
|
||||
icon = 'icons/mob/fish.dmi'
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
// By defautl they can be in any water turf. Subtypes might restrict to deep/shallow etc
|
||||
var/global/list/suitable_turf_types = list(
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 10
|
||||
speak = list("HONK!")
|
||||
emote_hear = list("honks loudly!")
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||
maxbodytemp = 323 //Above 50 Degrees Celcius
|
||||
|
||||
has_langs = list("Mouse")
|
||||
speak_chance = 1
|
||||
speak = list("Squeek!","SQUEEK!","Squeek?")
|
||||
speak_emote = list("squeeks","squeeks","squiks")
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
stop_automated_movement = 1
|
||||
universal_speak = 1
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 2
|
||||
speak = list("Hi","Hello!","Cracker?","BAWWWWK george mellons griffing me")
|
||||
speak_emote = list("squawks","says","yells")
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
melee_damage_upper = 15
|
||||
attacktext = "pecked"
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 0
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
@@ -271,21 +271,31 @@
|
||||
update_icon()
|
||||
|
||||
ai_log("Life() - stance=[stance] ai_inactive=[ai_inactive]", 4)
|
||||
//Movement
|
||||
if(!ai_inactive && !stop_automated_movement && wander && !anchored) //Allowed to move?
|
||||
handle_wander_movement()
|
||||
|
||||
//Speaking
|
||||
if(!ai_inactive && speak_chance && stance == STANCE_IDLE) // Allowed to chatter?
|
||||
handle_idle_speaking()
|
||||
|
||||
//Stanceyness
|
||||
//AI Actions
|
||||
if(!ai_inactive)
|
||||
//Stanceyness
|
||||
handle_stance()
|
||||
|
||||
//Resisting out of things
|
||||
if(!ai_inactive && incapacitated(INCAPACITATION_DEFAULT) && stance != STANCE_IDLE)
|
||||
resist()
|
||||
//Movement
|
||||
if(!stop_automated_movement && wander && !anchored) //Allowed to move?
|
||||
handle_wander_movement()
|
||||
|
||||
//Speaking
|
||||
if(speak_chance && stance == STANCE_IDLE) // Allowed to chatter?
|
||||
handle_idle_speaking()
|
||||
|
||||
//Resisting out buckles
|
||||
if(stance != STANCE_IDLE && incapacitated(INCAPACITATION_BUCKLED_PARTIALLY))
|
||||
resist()
|
||||
|
||||
//Resisting out of closets
|
||||
if(istype(loc,/obj/structure/closet))
|
||||
var/obj/structure/closet/C = loc
|
||||
if(C.welded)
|
||||
resist()
|
||||
else
|
||||
C.open()
|
||||
|
||||
return 1
|
||||
|
||||
@@ -807,12 +817,17 @@
|
||||
|
||||
//Someone wants help?
|
||||
/mob/living/simple_animal/proc/HelpRequested(var/mob/living/simple_animal/F)
|
||||
if(!(stance == STANCE_IDLE) || stat)
|
||||
if(target_mob || stat)
|
||||
ai_log("HelpRequested() by [F] but we're busy/dead",2)
|
||||
return
|
||||
if(get_dist(src,F) <= follow_dist)
|
||||
ai_log("HelpRequested() by [F] but we're already here",2)
|
||||
return
|
||||
if(get_dist(src,F) <= view_range)
|
||||
ai_log("HelpRequested() by [F] and within targetshare range",2)
|
||||
if(F.target_mob && set_target(F.target_mob))
|
||||
handle_stance(STANCE_ATTACK)
|
||||
return
|
||||
|
||||
if(set_follow(F, 10 SECONDS))
|
||||
handle_stance(STANCE_FOLLOW)
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1)
|
||||
usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds."
|
||||
|
||||
if (deathtime < (5 * 600))
|
||||
if ((deathtime < (5 * 600)) && (ticker && ticker.current_state > GAME_STATE_PREGAME))
|
||||
usr << "You must wait 5 minutes to respawn!"
|
||||
return
|
||||
else
|
||||
|
||||
@@ -153,7 +153,6 @@
|
||||
var/voice_name = "unidentifiable voice"
|
||||
|
||||
var/faction = "neutral" //Used for checking whether hostile simple animals will attack you, possibly more stuff later
|
||||
var/captured = 0 //Functionally, should give the same effect as being buckled into a chair when true. Only used by energy nets, TODO replace with buckling
|
||||
|
||||
//Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed.
|
||||
var/proc_holder_list[] = list()//Right now unused.
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
if(hit_zone == O_EYES)
|
||||
attack_eye(affecting, assailant)
|
||||
else if(hit_zone == BP_HEAD)
|
||||
headbut(affecting, assailant)
|
||||
headbutt(affecting, assailant)
|
||||
else
|
||||
dislocate(affecting, assailant, hit_zone)
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
attack.handle_eye_attack(attacker, target)
|
||||
|
||||
/obj/item/weapon/grab/proc/headbut(mob/living/carbon/human/target, mob/living/carbon/human/attacker)
|
||||
/obj/item/weapon/grab/proc/headbutt(mob/living/carbon/human/target, mob/living/carbon/human/attacker)
|
||||
if(!istype(attacker))
|
||||
return
|
||||
if(target.lying)
|
||||
|
||||
@@ -1025,9 +1025,13 @@
|
||||
icon_state = "tat_campbell"
|
||||
body_parts = list(BP_R_ARM)
|
||||
|
||||
left
|
||||
name = "Tattoo (Campbell, L.Arm)"
|
||||
body_parts = list(BP_L_ARM)
|
||||
|
||||
tat_tiger
|
||||
name = "Tattoo (Tiger Stripes, Body)"
|
||||
icon_state = "tat_campbell"
|
||||
icon_state = "tat_tiger"
|
||||
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN)
|
||||
|
||||
taj_paw_socks
|
||||
|
||||
Reference in New Issue
Block a user