mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Replaces like 70-80% of 0 and such, as a side effect cleaned up a bunch of returns Edit: Most left out ones are in mecha which should be done in mecha refactor already Oh my look how clean it is Co-authored-by: TiviPlus <TiviPlus> Co-authored-by: Couls <coul422@gmail.com> Co-authored-by: TiviPlus <57223640+TiviPlus@users.noreply.github.com> Co-authored-by: Couls <coul422@gmail.com>
This commit is contained in:
co-authored by
TiviPlus <TiviPlus>
Couls
TiviPlus
parent
f600605607
commit
ec09510459
@@ -6,7 +6,7 @@
|
||||
client.set_db_player_flags()
|
||||
if(!mind)
|
||||
mind = new /datum/mind(key)
|
||||
mind.active = 1
|
||||
mind.active = TRUE
|
||||
mind.current = src
|
||||
|
||||
. = ..()
|
||||
|
||||
@@ -108,10 +108,10 @@
|
||||
|
||||
/mob/dead/new_player/Topic(href, href_list[])
|
||||
if(src != usr)
|
||||
return 0
|
||||
return
|
||||
|
||||
if(!client)
|
||||
return 0
|
||||
return
|
||||
|
||||
//Determines Relevent Population Cap
|
||||
var/relevant_cap
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
if(href_list["show_preferences"])
|
||||
client.prefs.ShowChoices(src)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if(href_list["ready"])
|
||||
var/tready = text2num(href_list["ready"])
|
||||
@@ -451,7 +451,7 @@
|
||||
if(mind)
|
||||
if(transfer_after)
|
||||
mind.late_joiner = TRUE
|
||||
mind.active = 0 //we wish to transfer the key manually
|
||||
mind.active = FALSE //we wish to transfer the key manually
|
||||
mind.transfer_to(H) //won't transfer key since the mind is not active
|
||||
mind.original_character = H
|
||||
|
||||
|
||||
@@ -120,16 +120,16 @@
|
||||
//Gets blood from mob to a container or other mob, preserving all data in it.
|
||||
/mob/living/proc/transfer_blood_to(atom/movable/AM, amount, forced)
|
||||
if(!blood_volume || !AM.reagents)
|
||||
return 0
|
||||
return FALSE
|
||||
if(blood_volume < BLOOD_VOLUME_BAD && !forced)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(blood_volume < amount)
|
||||
amount = blood_volume
|
||||
|
||||
var/blood_id = get_blood_id()
|
||||
if(!blood_id)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
blood_volume -= amount
|
||||
|
||||
@@ -147,13 +147,13 @@
|
||||
C.ForceContractDisease(D)
|
||||
if(!(blood_data["blood_type"] in get_safe_blood(C.dna.blood_type)))
|
||||
C.reagents.add_reagent(/datum/reagent/toxin, amount * 0.5)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
C.blood_volume = min(C.blood_volume + round(amount, 0.1), BLOOD_VOLUME_MAX_LETHAL)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
AM.reagents.add_reagent(blood_id, amount, blood_data, bodytemperature)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/mob/living/proc/get_blood_data(blood_id)
|
||||
|
||||
@@ -56,9 +56,9 @@
|
||||
return // no eyes, no flashing
|
||||
|
||||
/mob/living/brain/can_be_revived()
|
||||
. = 1
|
||||
if(!container || health <= HEALTH_THRESHOLD_DEAD)
|
||||
return 0
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/brain/fully_replace_character_name(oldname,newname)
|
||||
..()
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
|
||||
/mob/living/brain/Life()
|
||||
set invisibility = 0
|
||||
if (notransform)
|
||||
return
|
||||
if(!loc)
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
|
||||
heat_protection = 0.5 // minor heat insulation
|
||||
|
||||
var/leaping = 0
|
||||
var/leaping = FALSE
|
||||
gib_type = /obj/effect/decal/cleanable/xenoblood/xgibs
|
||||
unique_name = 1
|
||||
unique_name = TRUE
|
||||
|
||||
var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?")
|
||||
|
||||
|
||||
@@ -54,8 +54,9 @@ In all, this is a lot like the monkey code. /N
|
||||
|
||||
|
||||
/mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M)
|
||||
if(..()) //to allow surgery to return properly.
|
||||
return 0
|
||||
. = ..()
|
||||
if(.) //to allow surgery to return properly.
|
||||
return FALSE
|
||||
|
||||
switch(M.a_intent)
|
||||
if("help")
|
||||
@@ -64,11 +65,11 @@ In all, this is a lot like the monkey code. /N
|
||||
grabbedby(M)
|
||||
if ("harm")
|
||||
M.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
|
||||
return 1
|
||||
return TRUE
|
||||
if("disarm")
|
||||
M.do_attack_animation(src, ATTACK_EFFECT_DISARM)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
/mob/living/carbon/alien/attack_paw(mob/living/carbon/monkey/M)
|
||||
@@ -133,4 +134,4 @@ In all, this is a lot like the monkey code. /N
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/alien/acid_act(acidpwr, acid_volume)
|
||||
return 0//aliens are immune to acid.
|
||||
return FALSE//aliens are immune to acid.
|
||||
|
||||
@@ -77,10 +77,10 @@ Doesn't work on other aliens/AI.*/
|
||||
/obj/effect/proc_holder/alien/plant/fire(mob/living/carbon/user)
|
||||
if(locate(/obj/structure/alien/weeds/node) in get_turf(user))
|
||||
to_chat(user, "<span class='warning'>There's already a weed node here!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
user.visible_message("<span class='alertalien'>[user] plants some alien weeds!</span>")
|
||||
new/obj/structure/alien/weeds/node(user.loc)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/alien/whisper
|
||||
name = "Whisper"
|
||||
@@ -94,7 +94,7 @@ Doesn't work on other aliens/AI.*/
|
||||
options += Ms
|
||||
var/mob/living/M = input("Select who to whisper to:","Whisper to?",null) as null|mob in sortNames(options)
|
||||
if(!M)
|
||||
return 0
|
||||
return FALSE
|
||||
if(M.anti_magic_check(FALSE, FALSE, TRUE, 0))
|
||||
to_chat(user, "<span class='noticealien'>As you try to communicate with [M], you're suddenly stopped by a vision of a massive tinfoil wall that streches beyond visible range. It seems you've been foiled.</span>")
|
||||
return FALSE
|
||||
@@ -113,8 +113,8 @@ Doesn't work on other aliens/AI.*/
|
||||
var/follow_link_whispee = FOLLOW_LINK(ded, M)
|
||||
to_chat(ded, "[follow_link_user] <span class='name'>[user]</span> <span class='alertalien'>Alien Whisper --> </span> [follow_link_whispee] <span class='name'>[M]</span> <span class='noticealien'>[msg]</span>")
|
||||
else
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/alien/transfer
|
||||
name = "Transfer Plasma"
|
||||
@@ -129,7 +129,7 @@ Doesn't work on other aliens/AI.*/
|
||||
aliens_around.Add(A)
|
||||
var/mob/living/carbon/M = input("Select who to transfer to:","Transfer plasma to?",null) as mob in sortNames(aliens_around)
|
||||
if(!M)
|
||||
return 0
|
||||
return
|
||||
var/amount = input("Amount:", "Transfer Plasma to [M]") as num|null
|
||||
if (amount)
|
||||
amount = min(abs(round(amount)), user.getPlasma())
|
||||
@@ -158,21 +158,19 @@ Doesn't work on other aliens/AI.*/
|
||||
if(target in oview(1,user))
|
||||
if(target.acid_act(200, 100))
|
||||
user.visible_message("<span class='alertalien'>[user] vomits globs of vile stuff all over [target]. It begins to sizzle and melt under the bubbling mess of acid!</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='noticealien'>You cannot dissolve this object.</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
return 0
|
||||
else
|
||||
to_chat(src, "<span class='noticealien'>[target] is too far away.</span>")
|
||||
return 0
|
||||
to_chat(src, "<span class='noticealien'>[target] is too far away.</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
/obj/effect/proc_holder/alien/acid/fire(mob/living/carbon/alien/user)
|
||||
var/O = input("Select what to dissolve:","Dissolve",null) as obj|turf in oview(1,user)
|
||||
if(!O || user.incapacitated())
|
||||
return 0
|
||||
return FALSE
|
||||
else
|
||||
return corrode(O,user)
|
||||
|
||||
@@ -208,19 +206,20 @@ Doesn't work on other aliens/AI.*/
|
||||
action.UpdateButtonIcon()
|
||||
|
||||
/obj/effect/proc_holder/alien/neurotoxin/InterceptClickOn(mob/living/caller, params, atom/target)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
var/p_cost = 50
|
||||
if(!iscarbon(ranged_ability_user) || ranged_ability_user.stat)
|
||||
remove_ranged_ability()
|
||||
return
|
||||
return FALSE
|
||||
|
||||
var/mob/living/carbon/user = ranged_ability_user
|
||||
|
||||
if(user.getPlasma() < p_cost)
|
||||
to_chat(user, "<span class='warning'>You need at least [p_cost] plasma to spit.</span>")
|
||||
remove_ranged_ability()
|
||||
return
|
||||
return FALSE
|
||||
|
||||
var/turf/T = user.loc
|
||||
var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction
|
||||
@@ -315,14 +314,14 @@ Doesn't work on other aliens/AI.*/
|
||||
/mob/living/carbon/proc/adjustPlasma(amount)
|
||||
var/obj/item/organ/alien/plasmavessel/vessel = getorgan(/obj/item/organ/alien/plasmavessel)
|
||||
if(!vessel)
|
||||
return 0
|
||||
return FALSE
|
||||
vessel.storedPlasma = max(vessel.storedPlasma + amount,0)
|
||||
vessel.storedPlasma = min(vessel.storedPlasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0
|
||||
for(var/X in abilities)
|
||||
var/obj/effect/proc_holder/alien/APH = X
|
||||
if(APH.has_action)
|
||||
APH.action.UpdateButtonIcon()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/alien/adjustPlasma(amount)
|
||||
. = ..()
|
||||
@@ -331,6 +330,5 @@ Doesn't work on other aliens/AI.*/
|
||||
/mob/living/carbon/proc/usePlasma(amount)
|
||||
if(getPlasma() >= amount)
|
||||
adjustPlasma(-amount)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -26,18 +26,18 @@
|
||||
var/obj/item/organ/alien/hivenode/node = user.getorgan(/obj/item/organ/alien/hivenode)
|
||||
if(!node) //Players are Murphy's Law. We may not expect there to ever be a living xeno with no hivenode, but they _WILL_ make it happen.
|
||||
to_chat(user, "<span class='danger'>Without the hivemind, you can't possibly hold the responsibility of leadership!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(node.recent_queen_death)
|
||||
to_chat(user, "<span class='danger'>Your thoughts are still too scattered to take up the position of leadership.</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You can't evolve here!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(!get_alien_type(/mob/living/carbon/alien/humanoid/royal))
|
||||
var/mob/living/carbon/alien/humanoid/royal/praetorian/new_xeno = new (user.loc)
|
||||
user.alien_evolve(new_xeno)
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>We already have a living royal!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
@@ -29,14 +29,14 @@
|
||||
var/obj/item/organ/alien/hivenode/node = user.getorgan(/obj/item/organ/alien/hivenode)
|
||||
if(!node) //Just in case this particular Praetorian gets violated and kept by the RD as a replacement for Lamarr.
|
||||
to_chat(user, "<span class='warning'>Without the hivemind, you would be unfit to rule as queen!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(node.recent_queen_death)
|
||||
to_chat(user, "<span class='warning'>You are still too burdened with guilt to evolve into a queen.</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(!get_alien_type(/mob/living/carbon/alien/humanoid/royal/queen))
|
||||
var/mob/living/carbon/alien/humanoid/royal/queen/new_xeno = new (user.loc)
|
||||
user.alien_evolve(new_xeno)
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>We already have an alive queen!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/alt_inhands_file = 'icons/mob/alienqueen.dmi'
|
||||
|
||||
/mob/living/carbon/alien/humanoid/royal/can_inject()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/alien/humanoid/royal/queen
|
||||
name = "alien queen"
|
||||
@@ -83,20 +83,20 @@
|
||||
var/obj/item/queenpromote/prom
|
||||
if(get_alien_type(/mob/living/carbon/alien/humanoid/royal/praetorian/))
|
||||
to_chat(user, "<span class='noticealien'>You already have a Praetorian!</span>")
|
||||
return 0
|
||||
return
|
||||
else
|
||||
for(prom in user)
|
||||
to_chat(user, "<span class='noticealien'>You discard [prom].</span>")
|
||||
qdel(prom)
|
||||
return 0
|
||||
return
|
||||
|
||||
prom = new (user.loc)
|
||||
if(!user.put_in_active_hand(prom, 1))
|
||||
to_chat(user, "<span class='warning'>You must empty your hands before preparing the parasite.</span>")
|
||||
return 0
|
||||
return
|
||||
else //Just in case telling the player only once is not enough!
|
||||
to_chat(user, "<span class='noticealien'>Use the royal parasite on one of your children to promote her to Praetorian!</span>")
|
||||
return 0
|
||||
return
|
||||
|
||||
/obj/item/queenpromote
|
||||
name = "\improper royal parasite"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
|
||||
|
||||
/mob/living/carbon/alien/larva/Life()
|
||||
set invisibility = 0
|
||||
if (notransform)
|
||||
return
|
||||
if(..() && !IS_IN_STASIS(src)) //not dead and not in stasis
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone(L.loc)
|
||||
|
||||
L.alien_evolve(new_xeno)
|
||||
return 0
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You are not fully grown!</span>")
|
||||
return 0
|
||||
return
|
||||
|
||||
@@ -103,7 +103,8 @@
|
||||
zone = BODY_ZONE_HEAD
|
||||
slot = "hivenode"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/recent_queen_death = 0 //Indicates if the queen died recently, aliens are heavily weakened while this is active.
|
||||
///Indicates if the queen died recently, aliens are heavily weakened while this is active.
|
||||
var/recent_queen_death = FALSE
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/whisper)
|
||||
|
||||
/obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0)
|
||||
@@ -135,7 +136,7 @@
|
||||
owner.add_confusion(30)
|
||||
owner.stuttering += 30
|
||||
|
||||
recent_queen_death = 1
|
||||
recent_queen_death = TRUE
|
||||
owner.throw_alert("alien_noqueen", /obj/screen/alert/alien_vulnerable)
|
||||
addtimer(CALLBACK(src, .proc/clear_queen_death), QUEEN_DEATH_DEBUFF_DURATION)
|
||||
|
||||
@@ -143,7 +144,7 @@
|
||||
/obj/item/organ/alien/hivenode/proc/clear_queen_death()
|
||||
if(QDELETED(src)) //In case the node is deleted
|
||||
return
|
||||
recent_queen_death = 0
|
||||
recent_queen_death = FALSE
|
||||
if(!owner) //In case the xeno is butchered or subjected to surgery after death.
|
||||
return
|
||||
to_chat(owner, "<span class='noticealien'>The pain of the queen's death is easing. You begin to hear the hivemind again.</span>")
|
||||
|
||||
@@ -96,15 +96,14 @@
|
||||
/obj/item/clothing/mask/facehugger/on_found(mob/finder)
|
||||
if(stat == CONSCIOUS)
|
||||
return HasProximity(finder)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/mask/facehugger/HasProximity(atom/movable/AM as mob|obj)
|
||||
if(CanHug(AM) && Adjacent(AM))
|
||||
return Leap(AM)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, quickstart = TRUE)
|
||||
if(!..())
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(stat == CONSCIOUS)
|
||||
icon_state = "[initial(icon_state)]_thrown"
|
||||
@@ -248,22 +247,22 @@
|
||||
|
||||
/proc/CanHug(mob/living/M)
|
||||
if(!istype(M))
|
||||
return 0
|
||||
return FALSE
|
||||
if(M.stat == DEAD)
|
||||
return 0
|
||||
return FALSE
|
||||
if(M.getorgan(/obj/item/organ/alien/hivenode))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(ismonkey(M))
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
var/mob/living/carbon/C = M
|
||||
if(ishuman(C) && !(ITEM_SLOT_MASK in C.dna.species.no_equip))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.is_mouth_covered(head_only = 1))
|
||||
return 0
|
||||
return 1
|
||||
return 0
|
||||
return FALSE
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
#undef MIN_ACTIVE_TIME
|
||||
#undef MAX_ACTIVE_TIME
|
||||
|
||||
@@ -871,7 +871,7 @@
|
||||
/mob/living/carbon/can_be_revived()
|
||||
. = ..()
|
||||
if(!getorgan(/obj/item/organ/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling)))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/can_defib()
|
||||
if (suiciding)
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
|
||||
if (back)
|
||||
. += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back."
|
||||
var/appears_dead = 0
|
||||
var/appears_dead = FALSE
|
||||
if (stat == DEAD)
|
||||
appears_dead = 1
|
||||
appears_dead = TRUE
|
||||
if(getorgan(/obj/item/organ/brain))
|
||||
. += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive, with no signs of life.</span>"
|
||||
else if(get_bodypart(BODY_ZONE_HEAD))
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user)
|
||||
if(!I || !user)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/obj/item/bodypart/affecting
|
||||
if(user == src)
|
||||
@@ -212,7 +212,7 @@
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
if(M.a_intent == INTENT_HELP)
|
||||
..() //shaking
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stunned instead.
|
||||
var/obj/item/I = get_active_held_item()
|
||||
@@ -243,110 +243,115 @@
|
||||
if(..()) //successful monkey bite, this handles disease contraction.
|
||||
var/damage = rand(1, 3)
|
||||
if(check_shields(M, damage, "the [M.name]"))
|
||||
return 0
|
||||
return FALSE
|
||||
if(stat != DEAD)
|
||||
apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, MELEE))
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M)
|
||||
if(check_shields(M, 0, "the M.name"))
|
||||
visible_message("<span class='danger'>[M] attempts to touch [src]!</span>", \
|
||||
"<span class='danger'>[M] attempts to touch you!</span>", "<span class='hear'>You hear a swoosh!</span>", null, M)
|
||||
to_chat(M, "<span class='warning'>You attempt to touch [src]!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(M.a_intent == INTENT_HARM)
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/damage = prob(90) ? 20 : 0
|
||||
if(!damage)
|
||||
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE, -1)
|
||||
visible_message("<span class='danger'>[M] lunges at [src]!</span>", \
|
||||
"<span class='userdanger'>[M] lunges at you!</span>", "<span class='hear'>You hear a swoosh!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You lunge at [src]!</span>")
|
||||
return FALSE
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = run_armor_check(affecting, MELEE,"","",10)
|
||||
|
||||
if(..())
|
||||
if(M.a_intent == INTENT_HARM)
|
||||
if (w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/damage = prob(90) ? 20 : 0
|
||||
if(!damage)
|
||||
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE, -1)
|
||||
visible_message("<span class='danger'>[M] lunges at [src]!</span>", \
|
||||
"<span class='userdanger'>[M] lunges at you!</span>", "<span class='hear'>You hear a swoosh!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You lunge at [src]!</span>")
|
||||
return 0
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = run_armor_check(affecting, MELEE,"","",10)
|
||||
playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1)
|
||||
visible_message("<span class='danger'>[M] slashes at [src]!</span>", \
|
||||
"<span class='userdanger'>[M] slashes at you!</span>", "<span class='hear'>You hear a sickening sound of a slice!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You slash at [src]!</span>")
|
||||
log_combat(M, src, "attacked")
|
||||
if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful
|
||||
return TRUE
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
|
||||
playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1)
|
||||
visible_message("<span class='danger'>[M] slashes at [src]!</span>", \
|
||||
"<span class='userdanger'>[M] slashes at you!</span>", "<span class='hear'>You hear a sickening sound of a slice!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You slash at [src]!</span>")
|
||||
log_combat(M, src, "attacked")
|
||||
if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful
|
||||
return 1
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
|
||||
if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead.
|
||||
var/obj/item/I = get_active_held_item()
|
||||
if(I && dropItemToGround(I))
|
||||
playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1)
|
||||
visible_message("<span class='danger'>[M] disarms [src]!</span>", \
|
||||
"<span class='userdanger'>[M] disarms you!</span>", "<span class='hear'>You hear aggressive shuffling!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You disarm [src]!</span>")
|
||||
else
|
||||
playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1)
|
||||
Paralyze(100)
|
||||
log_combat(M, src, "tackled")
|
||||
visible_message("<span class='danger'>[M] tackles [src] down!</span>", \
|
||||
"<span class='userdanger'>[M] tackles you down!</span>", "<span class='hear'>You hear aggressive shuffling followed by a loud thud!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You tackle [src] down!</span>")
|
||||
if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead.
|
||||
var/obj/item/I = get_active_held_item()
|
||||
if(I && dropItemToGround(I))
|
||||
playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1)
|
||||
visible_message("<span class='danger'>[M] disarms [src]!</span>", \
|
||||
"<span class='userdanger'>[M] disarms you!</span>", "<span class='hear'>You hear aggressive shuffling!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You disarm [src]!</span>")
|
||||
else
|
||||
playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1)
|
||||
Paralyze(100)
|
||||
log_combat(M, src, "tackled")
|
||||
visible_message("<span class='danger'>[M] tackles [src] down!</span>", \
|
||||
"<span class='userdanger'>[M] tackles you down!</span>", "<span class='hear'>You hear aggressive shuffling followed by a loud thud!</span>", null, M)
|
||||
to_chat(M, "<span class='danger'>You tackle [src] down!</span>")
|
||||
|
||||
|
||||
/mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L)
|
||||
|
||||
if(..()) //successful larva bite.
|
||||
var/damage = rand(1, 3)
|
||||
if(check_shields(L, damage, "the [L.name]"))
|
||||
return 0
|
||||
if(stat != DEAD)
|
||||
L.amount_grown = min(L.amount_grown + damage, L.max_grown)
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = run_armor_check(affecting, MELEE)
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return //successful larva bite.
|
||||
var/damage = rand(1, 3)
|
||||
if(check_shields(L, damage, "the [L.name]"))
|
||||
return FALSE
|
||||
if(stat != DEAD)
|
||||
L.amount_grown = min(L.amount_grown + damage, L.max_grown)
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = run_armor_check(affecting, MELEE)
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
|
||||
|
||||
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
if(check_shields(M, damage, "the [M.name]", MELEE_ATTACK, M.armour_penetration))
|
||||
return FALSE
|
||||
var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
if(!dam_zone) //Dismemberment successful
|
||||
return TRUE
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration)
|
||||
apply_damage(damage, M.melee_damage_type, affecting, armor, wound_bonus = M.wound_bonus, bare_wound_bonus = M.bare_wound_bonus, sharpness = M.sharpness)
|
||||
if(!.)
|
||||
return
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
if(check_shields(M, damage, "the [M.name]", MELEE_ATTACK, M.armour_penetration))
|
||||
return FALSE
|
||||
var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
if(!dam_zone) //Dismemberment successful
|
||||
return TRUE
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration)
|
||||
apply_damage(damage, M.melee_damage_type, affecting, armor, wound_bonus = M.wound_bonus, bare_wound_bonus = M.bare_wound_bonus, sharpness = M.sharpness)
|
||||
|
||||
|
||||
/mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M)
|
||||
if(..()) //successful slime attack
|
||||
var/damage = rand(5, 25)
|
||||
var/wound_mod = -45 // 25^1.4=90, 90-45=45
|
||||
if(M.is_adult)
|
||||
damage = rand(10, 35)
|
||||
wound_mod = -90 // 35^1.4=145, 145-90=55
|
||||
. = ..()
|
||||
if(!.) // slime attack failed
|
||||
return
|
||||
var/damage = rand(5, 25)
|
||||
var/wound_mod = -45 // 25^1.4=90, 90-45=45
|
||||
if(M.is_adult)
|
||||
damage = rand(10, 35)
|
||||
wound_mod = -90 // 35^1.4=145, 145-90=55
|
||||
|
||||
if(check_shields(M, damage, "the [M.name]"))
|
||||
return 0
|
||||
if(check_shields(M, damage, "the [M.name]"))
|
||||
return FALSE
|
||||
|
||||
var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
if(!dam_zone) //Dismemberment successful
|
||||
return 1
|
||||
var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
if(!dam_zone) //Dismemberment successful
|
||||
return TRUE
|
||||
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = run_armor_check(affecting, MELEE)
|
||||
apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod)
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = run_armor_check(affecting, MELEE)
|
||||
apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod)
|
||||
|
||||
/mob/living/carbon/human/mech_melee_attack(obj/mecha/M)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
|
||||
pressure_resistance = 25
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
|
||||
blocks_emissive = EMISSIVE_BLOCK_UNIQUE
|
||||
can_be_shoved_into = TRUE
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
|
||||
/mob/living/carbon/human/slip(knockdown_amount, obj/O, lube, paralyze, forcedrop)
|
||||
if(HAS_TRAIT(src, TRAIT_NOSLIPALL))
|
||||
return 0
|
||||
return FALSE
|
||||
if (!(lube & GALOSHES_DONT_HELP))
|
||||
if(HAS_TRAIT(src, TRAIT_NOSLIPWATER))
|
||||
return 0
|
||||
return FALSE
|
||||
if(shoes && istype(shoes, /obj/item/clothing))
|
||||
var/obj/item/clothing/CS = shoes
|
||||
if (CS.clothing_flags & NOSLIP)
|
||||
return 0
|
||||
return FALSE
|
||||
if (lube & SLIDE_ICE)
|
||||
if(shoes && istype(shoes, /obj/item/clothing))
|
||||
var/obj/item/clothing/CS = shoes
|
||||
|
||||
@@ -60,8 +60,8 @@
|
||||
|
||||
/mob/living/carbon/human/radio(message, list/message_mods = list(), list/spans, language) //Poly has a copy of this, lazy bastard
|
||||
. = ..()
|
||||
if(. != FALSE)
|
||||
return .
|
||||
if(.)
|
||||
return
|
||||
|
||||
if(message_mods[MODE_HEADSET])
|
||||
if(ears)
|
||||
@@ -76,7 +76,7 @@
|
||||
ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/get_alt_name()
|
||||
if(name != GetVoice())
|
||||
|
||||
@@ -19,14 +19,13 @@
|
||||
#define THERMAL_PROTECTION_HAND_RIGHT 0.025
|
||||
|
||||
/mob/living/carbon/human/Life()
|
||||
set invisibility = 0
|
||||
if (notransform)
|
||||
return
|
||||
|
||||
. = ..()
|
||||
|
||||
if (QDELETED(src))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!IS_IN_STASIS(src))
|
||||
if(.) //not dead
|
||||
@@ -49,7 +48,7 @@
|
||||
name = get_visible_name()
|
||||
|
||||
if(stat != DEAD)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/mob/living/carbon/human/calculate_affecting_pressure(pressure)
|
||||
|
||||
@@ -240,20 +240,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
/datum/species/proc/copy_properties_from(datum/species/old_species)
|
||||
return
|
||||
|
||||
/**
|
||||
* Checks if this carbon is allowed to be a certain job or rank.
|
||||
*
|
||||
* Override this locally if you want to define when this species qualifies for what rank if human authority is enforced.
|
||||
* Arguments:
|
||||
* * rank - Rank to be tested.
|
||||
* * features - Features of a species that factors into rank qualifications, like a human with cat ears being unable to join command positions.
|
||||
*/
|
||||
/datum/species/proc/qualifies_for_rank(rank, list/features)
|
||||
if(rank in GLOB.command_positions)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/** regenerate_organs
|
||||
* Corrects organs in a carbon, removing ones it doesn't need and adding ones it does
|
||||
*
|
||||
@@ -1185,7 +1171,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.throw_alert("nutrition", /obj/screen/alert/starving)
|
||||
|
||||
/datum/species/proc/update_health_hud(mob/living/carbon/human/H)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/datum/species/proc/handle_mutations_and_radiation(mob/living/carbon/human/H)
|
||||
if(HAS_TRAIT(H, TRAIT_RADIMMUNE))
|
||||
@@ -1382,7 +1368,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.visible_message("<span class='warning'>[M] attempts to touch [H]!</span>", \
|
||||
"<span class='danger'>[M] attempts to touch you!</span>", "<span class='hear'>You hear a swoosh!</span>", COMBAT_MESSAGE_RANGE, M)
|
||||
to_chat(M, "<span class='warning'>You attempt to touch [H]!</span>")
|
||||
return 0
|
||||
return
|
||||
SEND_SIGNAL(M, COMSIG_MOB_ATTACK_HAND, M, H, attacker_style)
|
||||
switch(M.a_intent)
|
||||
if("help")
|
||||
@@ -1401,11 +1387,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
// Allows you to put in item-specific reactions based on species
|
||||
if(user != H)
|
||||
if(H.check_shields(I, I.force, "the [I.name]", MELEE_ATTACK, I.armour_penetration))
|
||||
return 0
|
||||
return FALSE
|
||||
if(H.check_block())
|
||||
H.visible_message("<span class='warning'>[H] blocks [I]!</span>", \
|
||||
"<span class='userdanger'>You block [I]!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/hit_area
|
||||
if(!affecting) //Something went wrong. Maybe the limb is missing?
|
||||
@@ -1428,14 +1414,14 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.send_item_attack_message(I, user, hit_area, affecting)
|
||||
|
||||
if(!I.force)
|
||||
return 0 //item force is zero
|
||||
return FALSE //item force is zero
|
||||
|
||||
var/bloody = 0
|
||||
var/bloody = FALSE
|
||||
if(((I.damtype == BRUTE) && I.force && prob(25 + (I.force * 2))))
|
||||
if(affecting.status == BODYPART_ORGANIC)
|
||||
I.add_mob_blood(H) //Make the weapon bloody, not the person.
|
||||
if(prob(I.force * 2)) //blood spatter!
|
||||
bloody = 1
|
||||
bloody = TRUE
|
||||
var/turf/location = H.loc
|
||||
if(istype(location))
|
||||
H.add_splatter_floor(location)
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
var/original_felinid = TRUE //set to false for felinids created by mass-purrbation
|
||||
payday_modifier = 0.75
|
||||
|
||||
/datum/species/human/felinid/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
//Curiosity killed the cat's wagging tail.
|
||||
/datum/species/human/felinid/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
|
||||
@@ -471,10 +471,12 @@
|
||||
var/last_teleport = 0
|
||||
|
||||
/datum/action/innate/unstable_teleport/IsAvailable()
|
||||
if(..())
|
||||
if(world.time > last_teleport + cooldown)
|
||||
return 1
|
||||
return 0
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(world.time > last_teleport + cooldown)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/action/innate/unstable_teleport/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
|
||||
@@ -10,6 +10,3 @@
|
||||
liked_food = JUNKFOOD | FRIED
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
|
||||
payday_modifier = 1
|
||||
|
||||
/datum/species/human/qualifies_for_rank(rank, list/features)
|
||||
return TRUE //Pure humans are always allowed in all roles.
|
||||
|
||||
@@ -73,14 +73,15 @@
|
||||
background_icon_state = "bg_alien"
|
||||
|
||||
/datum/action/innate/regenerate_limbs/IsAvailable()
|
||||
if(..())
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/list/limbs_to_heal = H.get_missing_limbs()
|
||||
if(limbs_to_heal.len < 1)
|
||||
return 0
|
||||
if(H.blood_volume >= BLOOD_VOLUME_OKAY+40)
|
||||
return 1
|
||||
return 0
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/list/limbs_to_heal = H.get_missing_limbs()
|
||||
if(limbs_to_heal.len < 1)
|
||||
return FALSE
|
||||
if(H.blood_volume >= BLOOD_VOLUME_OKAY+40)
|
||||
return TRUE
|
||||
|
||||
/datum/action/innate/regenerate_limbs/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
@@ -182,11 +183,13 @@
|
||||
background_icon_state = "bg_alien"
|
||||
|
||||
/datum/action/innate/split_body/IsAvailable()
|
||||
if(..())
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
|
||||
return 1
|
||||
return 0
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/action/innate/split_body/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
|
||||
@@ -158,7 +158,6 @@
|
||||
H.equipOutfit(O, visualsOnly)
|
||||
H.internal = H.get_item_for_held_index(2)
|
||||
H.update_internals_hud_icon(1)
|
||||
return 0
|
||||
|
||||
/datum/species/plasmaman/random_name(gender,unique,lastname)
|
||||
if(unique)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/mob/living/carbon/Life()
|
||||
set invisibility = 0
|
||||
|
||||
if(notransform)
|
||||
return
|
||||
@@ -137,9 +136,9 @@
|
||||
//Third link in a breath chain, calls handle_breath_temperature()
|
||||
/mob/living/carbon/proc/check_breath(datum/gas_mixture/breath)
|
||||
if(status_flags & GODMODE)
|
||||
return
|
||||
return FALSE
|
||||
if(HAS_TRAIT(src, TRAIT_NOBREATH))
|
||||
return
|
||||
return FALSE
|
||||
|
||||
var/obj/item/organ/lungs = getorganslot(ORGAN_SLOT_LUNGS)
|
||||
if(!lungs)
|
||||
@@ -148,12 +147,12 @@
|
||||
//CRIT
|
||||
if(!breath || (breath.total_moles() == 0) || !lungs)
|
||||
if(reagents.has_reagent(/datum/reagent/medicine/epinephrine, needs_metabolizing = TRUE) && lungs)
|
||||
return
|
||||
return FALSE
|
||||
adjustOxyLoss(1)
|
||||
|
||||
failed_last_breath = 1
|
||||
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/safe_oxy_min = 16
|
||||
var/safe_co2_max = 10
|
||||
@@ -305,7 +304,7 @@
|
||||
//BREATH TEMPERATURE
|
||||
handle_breath_temperature(breath)
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
//Fourth and final link in a breath chain
|
||||
/mob/living/carbon/proc/handle_breath_temperature(datum/gas_mixture/breath)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
// taken from /mob/living/carbon/human/interactive/
|
||||
/mob/living/carbon/monkey/proc/walk2derpless(target)
|
||||
if(!target || IsStandingStill())
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(myPath.len <= 0)
|
||||
myPath = get_path_to(src, get_turf(target), /turf/proc/Distance, MAX_RANGE_FIND + 1, 250,1)
|
||||
@@ -39,26 +39,26 @@
|
||||
if(myPath.len >= 1)
|
||||
walk_to(src,myPath[1],0,5)
|
||||
myPath -= myPath[1]
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
// failed to path correctly so just try to head straight for a bit
|
||||
walk_to(src,get_turf(target),0,5)
|
||||
sleep(1)
|
||||
walk_to(src,0)
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
// taken from /mob/living/carbon/human/interactive/
|
||||
/mob/living/carbon/monkey/proc/IsDeadOrIncap(checkDead = TRUE)
|
||||
if(!(mobility_flags & MOBILITY_FLAGS_INTERACTION))
|
||||
return 1
|
||||
return TRUE
|
||||
if(health <= 0 && checkDead)
|
||||
return 1
|
||||
return TRUE
|
||||
if(IsStun() || IsParalyzed())
|
||||
return 1
|
||||
return TRUE
|
||||
if(stat)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/monkey/proc/battle_screech()
|
||||
if(next_battle_screech < world.time)
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/Life()
|
||||
set invisibility = 0
|
||||
|
||||
if (notransform)
|
||||
return
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
/mob/living/proc/Life(seconds, times_fired)
|
||||
set waitfor = FALSE
|
||||
set invisibility = 0
|
||||
|
||||
if((movement_type & FLYING) && !(movement_type & FLOATING)) //TODO: Better floating
|
||||
float(on = TRUE)
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
//switch our position with M
|
||||
if(loc && !loc.Adjacent(M.loc))
|
||||
return TRUE
|
||||
now_pushing = 1
|
||||
now_pushing = TRUE
|
||||
var/oldloc = loc
|
||||
var/oldMloc = M.loc
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
if(!M_passmob)
|
||||
M.pass_flags &= ~PASSMOB
|
||||
|
||||
now_pushing = 0
|
||||
now_pushing = FALSE
|
||||
|
||||
if(!move_failed)
|
||||
return TRUE
|
||||
@@ -1132,7 +1132,7 @@
|
||||
|
||||
/mob/living/proc/ExtinguishMob()
|
||||
if(on_fire)
|
||||
on_fire = 0
|
||||
on_fire = FALSE
|
||||
fire_stacks = 0
|
||||
for(var/obj/effect/dummy/lighting_obj/moblight/fire/F in src)
|
||||
qdel(F)
|
||||
|
||||
@@ -174,12 +174,12 @@
|
||||
if(GRAB_NECK)
|
||||
log_combat(user, src, "attempted to strangle", addition="kill grab")
|
||||
if(!do_mob(user, src, grab_upgrade_time))
|
||||
return 0
|
||||
return FALSE
|
||||
if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state)
|
||||
return 0
|
||||
return FALSE
|
||||
if(user.a_intent != INTENT_GRAB)
|
||||
to_chat(user, "<span class='warning'>You must be on grab intent to upgrade your grab further!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
user.setGrabState(user.grab_state + 1)
|
||||
switch(user.grab_state)
|
||||
if(GRAB_AGGRESSIVE)
|
||||
@@ -213,7 +213,7 @@
|
||||
if(!buckled && !density)
|
||||
Move(user.loc)
|
||||
user.set_pull_offsets(src, grab_state)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/mob/living/attack_slime(mob/living/simple_animal/slime/M)
|
||||
@@ -425,7 +425,7 @@
|
||||
|
||||
//called when the mob receives a loud bang
|
||||
/mob/living/proc/soundbang_act()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
//to damage the clothes worn by a mob
|
||||
/mob/living/proc/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone)
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
update_z(null)
|
||||
..()
|
||||
if(!key && mind) //key and mind have become separated.
|
||||
mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body.
|
||||
mind.active = FALSE //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body.
|
||||
med_hud_set_status()
|
||||
|
||||
@@ -789,7 +789,7 @@
|
||||
to_chat(user, "<span class='boldnotice'>Transfer successful</span>: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.")
|
||||
|
||||
/mob/living/silicon/ai/can_buckle()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/ai/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, ignore_stasis = FALSE)
|
||||
if(aiRestorePowerRoutine)
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
if (stat != DEAD)
|
||||
adjustBruteLoss(60)
|
||||
updatehealth()
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/ai/emp_act(severity)
|
||||
. = ..()
|
||||
|
||||
@@ -148,8 +148,8 @@
|
||||
SEND_SOUND(M, voice)
|
||||
else
|
||||
SEND_SOUND(only_listener, voice)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
#undef VOX_DELAY
|
||||
#endif
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
return TRUE
|
||||
|
||||
/mob/camera/ai_eye/Move()
|
||||
return 0
|
||||
return
|
||||
|
||||
/mob/camera/ai_eye/proc/GetViewerClient()
|
||||
if(ai)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/datum/pai_candidate/proc/savefile_save(mob/user)
|
||||
if(IsGuestKey(user.key))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/savefile/F = new /savefile(src.savefile_path(user))
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
WRITE_FILE(F["version"], 1)
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
// loads the savefile corresponding to the mob's ckey
|
||||
// if silent=true, report incompatible savefiles
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/show_laws(everyone = 0)
|
||||
/mob/living/silicon/robot/show_laws(everyone = FALSE)
|
||||
laws_sanity_check()
|
||||
var/who
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
to_chat(src, "<b>Laws synced with AI, be sure to note any changes.</b>")
|
||||
else
|
||||
to_chat(src, "<b>No AI selected to sync laws with, disabling lawsync protocol.</b>")
|
||||
lawupdate = 0
|
||||
lawupdate = FALSE
|
||||
|
||||
to_chat(who, "<b>Obey these laws:</b>")
|
||||
laws.show_laws(who)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/mob/living/silicon/robot/Life()
|
||||
set invisibility = 0
|
||||
if (src.notransform)
|
||||
return
|
||||
|
||||
@@ -11,7 +10,7 @@
|
||||
if(stat != DEAD)
|
||||
if(low_power_mode)
|
||||
if(cell && cell.charge)
|
||||
low_power_mode = 0
|
||||
low_power_mode = FALSE
|
||||
update_headlamp()
|
||||
else if(stat == CONSCIOUS)
|
||||
use_power()
|
||||
@@ -24,7 +23,7 @@
|
||||
cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick
|
||||
else
|
||||
uneq_all()
|
||||
low_power_mode = 1
|
||||
low_power_mode = TRUE
|
||||
update_headlamp()
|
||||
diag_hud_set_borgcell()
|
||||
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
var/mob/living/silicon/ai/connected_ai = null
|
||||
var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high ///If this is a path, this gets created as an object in Initialize.
|
||||
|
||||
var/opened = 0
|
||||
var/opened = FALSE
|
||||
var/emagged = FALSE
|
||||
var/emag_cooldown = 0
|
||||
var/wiresexposed = 0
|
||||
var/wiresexposed = FALSE
|
||||
|
||||
/// Random serial number generated for each cyborg upon its initialization
|
||||
var/ident = 0
|
||||
@@ -74,7 +74,7 @@
|
||||
var/datum/effect_system/spark_spread/spark_system // So they can initialize sparks whenever/N
|
||||
|
||||
var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default
|
||||
var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them.
|
||||
var/scrambledcodes = FALSE // Used to determine if a borg shows up on the robotics console. Setting to TRUE hides them.
|
||||
var/lockcharge //Boolean of whether the borg is locked down or not
|
||||
|
||||
var/toner = 0
|
||||
@@ -94,7 +94,7 @@
|
||||
var/hat_offset = -3
|
||||
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
var/static/list/can_ride_typecache = typecacheof(/mob/living/carbon/human)
|
||||
|
||||
/mob/living/silicon/robot/get_cell()
|
||||
@@ -324,13 +324,13 @@
|
||||
. += "Master AI: [connected_ai.name]"
|
||||
|
||||
/mob/living/silicon/robot/restrained(ignore_grab)
|
||||
. = 0
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/triggerAlarm(class, area/A, O, obj/alarmsource)
|
||||
if(alarmsource.z != z)
|
||||
return
|
||||
if(stat == DEAD)
|
||||
return 1
|
||||
return TRUE
|
||||
var/list/L = alarms[class]
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
@@ -338,7 +338,7 @@
|
||||
var/list/sources = alarm[3]
|
||||
if (!(alarmsource in sources))
|
||||
sources += alarmsource
|
||||
return 1
|
||||
return TRUE
|
||||
var/obj/machinery/camera/C = null
|
||||
var/list/CL = null
|
||||
if (O && istype(O, /list))
|
||||
@@ -349,11 +349,11 @@
|
||||
C = O
|
||||
L[A.name] = list(A, (C) ? C : O, list(alarmsource))
|
||||
queueAlarm(text("--- [class] alarm detected in [A.name]!"), class)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/cancelAlarm(class, area/A, obj/origin)
|
||||
var/list/L = alarms[class]
|
||||
var/cleared = 0
|
||||
var/cleared = FALSE
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
@@ -361,7 +361,7 @@
|
||||
if (origin in srcs)
|
||||
srcs -= origin
|
||||
if (srcs.len == 0)
|
||||
cleared = 1
|
||||
cleared = TRUE
|
||||
L -= I
|
||||
if (cleared)
|
||||
queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0)
|
||||
@@ -392,36 +392,36 @@
|
||||
/mob/living/silicon/robot/proc/allowed(mob/M)
|
||||
//check if it doesn't require any access at all
|
||||
if(check_access(null))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
//if they are holding or wearing a card that has access, that works
|
||||
if(check_access(H.get_active_held_item()) || check_access(H.wear_id))
|
||||
return 1
|
||||
return TRUE
|
||||
else if(ismonkey(M))
|
||||
var/mob/living/carbon/monkey/george = M
|
||||
//they can only hold things :(
|
||||
if(isitem(george.get_active_held_item()))
|
||||
return check_access(george.get_active_held_item())
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/robot/proc/check_access(obj/item/card/id/I)
|
||||
if(!istype(req_access, /list)) //something's very wrong
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
var/list/L = req_access
|
||||
if(!L.len) //no requirements
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if(!istype(I, /obj/item/card/id) && isitem(I))
|
||||
I = I.GetID()
|
||||
|
||||
if(!I || !I.access) //not ID or no access
|
||||
return 0
|
||||
return FALSE
|
||||
for(var/req in req_access)
|
||||
if(!(req in I.access)) //doesn't have this access
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/regenerate_icons()
|
||||
return update_icons()
|
||||
@@ -582,7 +582,7 @@
|
||||
robot_suit.r_leg = null
|
||||
new /obj/item/stack/cable_coil(T, robot_suit.chest.wired)
|
||||
robot_suit.chest.forceMove(T)
|
||||
robot_suit.chest.wired = 0
|
||||
robot_suit.chest.wired = FALSE
|
||||
robot_suit.chest = null
|
||||
robot_suit.l_arm.forceMove(T)
|
||||
robot_suit.l_arm = null
|
||||
@@ -1049,7 +1049,7 @@
|
||||
else
|
||||
M.visible_message("<span class='boldwarning'>[M] can't climb onto [src] because [M.p_their()] hands are full!</span>")
|
||||
return
|
||||
. = ..(M, force, check_loc)
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/unbuckle_mob(mob/user, force=FALSE)
|
||||
if(iscarbon(user))
|
||||
@@ -1057,7 +1057,7 @@
|
||||
if(istype(riding_datum))
|
||||
riding_datum.unequip_buckle_inhands(user)
|
||||
riding_datum.restore_position(user)
|
||||
. = ..(user)
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/resist()
|
||||
. = ..()
|
||||
@@ -1073,7 +1073,7 @@
|
||||
if(connected_ai)
|
||||
connected_ai.connected_robots += src
|
||||
lawsync()
|
||||
lawupdate = 1
|
||||
lawupdate = TRUE
|
||||
return TRUE
|
||||
picturesync()
|
||||
return FALSE
|
||||
|
||||
@@ -42,14 +42,14 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
|
||||
if(W.tool_behaviour == TOOL_CROWBAR) // crowbar means open or close the cover
|
||||
if(opened)
|
||||
to_chat(user, "<span class='notice'>You close the cover.</span>")
|
||||
opened = 0
|
||||
opened = FALSE
|
||||
update_icons()
|
||||
else
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>The cover is locked and cannot be opened!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You open the cover.</span>")
|
||||
opened = 1
|
||||
opened = TRUE
|
||||
update_icons()
|
||||
return
|
||||
|
||||
@@ -340,7 +340,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
|
||||
|
||||
SetEmagged(1)
|
||||
SetStun(60) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown
|
||||
lawupdate = 0
|
||||
lawupdate = FALSE
|
||||
connected_ai = null
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] emagged cyborg [ADMIN_LOOKUPFLW(src)]. Laws overridden.")
|
||||
log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
|
||||
|
||||
@@ -371,12 +371,12 @@
|
||||
to_chat(src, "<span class='notice'>Automatic announcements [Autochan == "None" ? "will not use the radio." : "set to [Autochan]."]</span>")
|
||||
|
||||
/mob/living/silicon/put_in_hand_check() // This check is for borgs being able to receive items, not put them in others' hands.
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
// The src mob is trying to place an item on someone
|
||||
// But the src mob is a silicon!! Disable.
|
||||
/mob/living/silicon/stripPanelEquip(obj/item/what, mob/who, slot)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
|
||||
/mob/living/silicon/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt silicon units
|
||||
|
||||
@@ -24,15 +24,15 @@
|
||||
to_chat(M, "<span class='binarysay'>[link] [rendered]</span>")
|
||||
|
||||
/mob/living/silicon/binarycheck()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/lingcheck()
|
||||
return 0 //Borged or AI'd lings can't speak on the ling channel.
|
||||
return FALSE //Borged or AI'd lings can't speak on the ling channel.
|
||||
|
||||
/mob/living/silicon/radio(message, list/message_mods = list(), list/spans, language)
|
||||
. = ..()
|
||||
if(. != 0)
|
||||
return .
|
||||
if(!.)
|
||||
return
|
||||
if(message_mods[MODE_HEADSET])
|
||||
if(radio)
|
||||
radio.talk_into(src, message, , spans, language, message_mods)
|
||||
@@ -42,4 +42,4 @@
|
||||
radio.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
@@ -404,7 +404,7 @@
|
||||
|
||||
/mob/living/simple_animal/bot/radio(message, list/message_mods = list(), list/spans, language)
|
||||
. = ..()
|
||||
if(. != 0)
|
||||
if(!.)
|
||||
return
|
||||
|
||||
if(message_mods[MODE_HEADSET])
|
||||
@@ -693,7 +693,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
patrol_target = nearest_beacon_loc
|
||||
destination = next_destination
|
||||
else
|
||||
auto_patrol = 0
|
||||
auto_patrol = FALSE
|
||||
mode = BOT_IDLE
|
||||
speak("Disengaging patrol mode.")
|
||||
|
||||
@@ -732,11 +732,11 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
// process control input
|
||||
switch(command)
|
||||
if("patroloff")
|
||||
bot_reset() //HOLD IT!!
|
||||
auto_patrol = 0
|
||||
bot_reset() //HOLD IT!! //OBJECTION!!
|
||||
auto_patrol = FALSE
|
||||
|
||||
if("patrolon")
|
||||
auto_patrol = 1
|
||||
auto_patrol = TRUE
|
||||
|
||||
if("summon")
|
||||
bot_reset()
|
||||
@@ -751,7 +751,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
ejectpairemote(user)
|
||||
return
|
||||
|
||||
//
|
||||
|
||||
/mob/living/simple_animal/bot/proc/bot_control_message(command, user)
|
||||
switch(command)
|
||||
if("patroloff")
|
||||
@@ -831,7 +831,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
dat = get_controls(M)
|
||||
var/datum/browser/popup = new(M,window_id,window_name,350,600)
|
||||
popup.set_content(dat)
|
||||
popup.open(use_onclose = 0)
|
||||
popup.open(use_onclose = FALSE)
|
||||
onclose(M,window_id,ref=src)
|
||||
return
|
||||
|
||||
|
||||
@@ -287,7 +287,7 @@
|
||||
to_chat(user, "<span class='notice'>You add the [I] to [src]! Honk!</span>")
|
||||
var/mob/living/simple_animal/bot/honkbot/S = new(drop_location())
|
||||
S.name = created_name
|
||||
S.spam_flag = TRUE // only long enough to hear the first ping.
|
||||
S.limiting_spam = TRUE // only long enough to hear the first ping.
|
||||
addtimer(CALLBACK (S, .mob/living/simple_animal/bot/honkbot/proc/react_ping), 5)
|
||||
S.bikehorn = I.type
|
||||
qdel(I)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
path_image_color = "#FF69B4"
|
||||
|
||||
var/honksound = 'sound/items/bikehorn.ogg' //customizable sound
|
||||
var/spam_flag = FALSE
|
||||
var/limiting_spam = FALSE
|
||||
var/cooldowntime = 30
|
||||
var/cooldowntimehorn = 10
|
||||
var/mob/living/carbon/target
|
||||
@@ -45,8 +45,8 @@
|
||||
access_card.access += J.get_access()
|
||||
prev_access = access_card.access
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/proc/spam_flag_false() //used for addtimer
|
||||
spam_flag = FALSE
|
||||
/mob/living/simple_animal/bot/honkbot/proc/limiting_spam_false() //used for addtimer
|
||||
limiting_spam = FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/proc/sensor_blink()
|
||||
icon_state = "honkbot-c"
|
||||
@@ -55,9 +55,9 @@
|
||||
//honkbots react with sounds.
|
||||
/mob/living/simple_animal/bot/honkbot/proc/react_ping()
|
||||
playsound(src, 'sound/machines/ping.ogg', 50, TRUE, -1) //the first sound upon creation!
|
||||
spam_flag = TRUE
|
||||
limiting_spam = TRUE
|
||||
sensor_blink()
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), 18) // calibrates before starting the honk
|
||||
addtimer(CALLBACK(src, .proc/limiting_spam_false), 18) // calibrates before starting the honk
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/proc/react_buzz()
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1)
|
||||
@@ -70,7 +70,7 @@
|
||||
anchored = FALSE
|
||||
walk_to(src,0)
|
||||
last_found = world.time
|
||||
spam_flag = FALSE
|
||||
limiting_spam = FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/set_custom_texts()
|
||||
|
||||
@@ -151,7 +151,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
if(!C.IsParalyzed() || arrest_type)
|
||||
stun_attack(A)
|
||||
..()
|
||||
else if (!spam_flag) //honking at the ground
|
||||
else if (!limiting_spam) //honking at the ground
|
||||
bike_horn(A)
|
||||
|
||||
|
||||
@@ -166,31 +166,31 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/proc/bike_horn() //use bike_horn
|
||||
if (emagged <= 1)
|
||||
if (!spam_flag)
|
||||
if (!limiting_spam)
|
||||
playsound(src, honksound, 50, TRUE, -1)
|
||||
spam_flag = TRUE //prevent spam
|
||||
limiting_spam = TRUE //prevent spam
|
||||
sensor_blink()
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn)
|
||||
addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntimehorn)
|
||||
else if (emagged == 2) //emagged honkbots will spam short and memorable sounds.
|
||||
if (!spam_flag)
|
||||
if (!limiting_spam)
|
||||
playsound(src, "honkbot_e", 50, FALSE)
|
||||
spam_flag = TRUE // prevent spam
|
||||
limiting_spam = TRUE // prevent spam
|
||||
icon_state = "honkbot-e"
|
||||
addtimer(CALLBACK(src, /atom/.proc/update_icon), 30, TIMER_OVERRIDE|TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn)
|
||||
addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntimehorn)
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/proc/honk_attack(mob/living/carbon/C) // horn attack
|
||||
if(!spam_flag)
|
||||
if(!limiting_spam)
|
||||
playsound(loc, honksound, 50, TRUE, -1)
|
||||
spam_flag = TRUE // prevent spam
|
||||
limiting_spam = TRUE // prevent spam
|
||||
sensor_blink()
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn)
|
||||
addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntimehorn)
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/proc/stun_attack(mob/living/carbon/C) // airhorn stun
|
||||
if(!spam_flag)
|
||||
if(!limiting_spam)
|
||||
playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1) //HEEEEEEEEEEEENK!!
|
||||
sensor_blink()
|
||||
if(spam_flag == 0)
|
||||
if(limiting_spam == 0)
|
||||
if(ishuman(C))
|
||||
C.stuttering = 20
|
||||
var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS)
|
||||
@@ -200,7 +200,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
C.Paralyze(60)
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(client) //prevent spam from players..
|
||||
spam_flag = TRUE
|
||||
limiting_spam = TRUE
|
||||
if (emagged <= 1) //HONK once, then leave
|
||||
var/judgement_criteria = judgement_criteria()
|
||||
threatlevel = H.assess_threat(judgement_criteria)
|
||||
@@ -208,7 +208,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
target = oldtarget_name
|
||||
else // you really don't want to hit an emagged honkbot
|
||||
threatlevel = 6 // will never let you go
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntime)
|
||||
addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntime)
|
||||
|
||||
log_combat(src,C,"honked")
|
||||
|
||||
@@ -217,7 +217,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
else
|
||||
C.stuttering = 20
|
||||
C.Paralyze(80)
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntime)
|
||||
addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntime)
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/handle_automated_action()
|
||||
@@ -303,14 +303,14 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
|
||||
if(threatlevel <= 3)
|
||||
if(C in view(4,src)) //keep the range short for patrolling
|
||||
if(!spam_flag)
|
||||
if(!limiting_spam)
|
||||
bike_horn()
|
||||
|
||||
else if(threatlevel >= 10)
|
||||
bike_horn() //just spam the shit outta this
|
||||
|
||||
else if(threatlevel >= 4)
|
||||
if(!spam_flag)
|
||||
if(!limiting_spam)
|
||||
target = C
|
||||
oldtarget_name = C.name
|
||||
bike_horn()
|
||||
|
||||
@@ -281,17 +281,15 @@
|
||||
if(isconstruct(A)) //is it a construct?
|
||||
var/mob/living/simple_animal/hostile/construct/C = A
|
||||
if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/artificer/CanAttack(atom/the_target)
|
||||
if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it
|
||||
return 0
|
||||
return FALSE
|
||||
if(Found(the_target) || ..()) //If we Found it or Can_Attack it normally, we Can_Attack it as long as it wasn't invisible
|
||||
return 1 //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs
|
||||
return TRUE //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/artificer/MoveToTarget(list/possible_targets)
|
||||
..()
|
||||
@@ -299,7 +297,7 @@
|
||||
var/mob/living/L = target
|
||||
if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it
|
||||
LoseTarget()
|
||||
return 0
|
||||
return
|
||||
if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you
|
||||
retreat_distance = null
|
||||
minimum_distance = 1
|
||||
|
||||
@@ -38,16 +38,16 @@
|
||||
turns_since_scan = 0
|
||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
stop_automated_movement = FALSE
|
||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
stop_automated_movement = FALSE
|
||||
for(var/obj/item/reagent_containers/food/snacks/S in oview(src,3))
|
||||
if(isturf(S.loc) || ishuman(S.loc))
|
||||
movement_target = S
|
||||
break
|
||||
if(movement_target)
|
||||
stop_automated_movement = 1
|
||||
stop_automated_movement = TRUE
|
||||
step_to(src,movement_target,1)
|
||||
sleep(3)
|
||||
step_to(src,movement_target,1)
|
||||
@@ -359,7 +359,7 @@
|
||||
|
||||
if(user && !user.temporarilyRemoveItemFromInventory(item_to_add))
|
||||
to_chat(user, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>")
|
||||
return 0
|
||||
return
|
||||
|
||||
var/valid = FALSE
|
||||
if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/head))
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/drone/mob_negates_gravity()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/drone/mob_has_gravity()
|
||||
return ..() || mob_negates_gravity()
|
||||
@@ -318,7 +318,7 @@
|
||||
|
||||
/mob/living/simple_animal/drone/bee_friendly()
|
||||
// Why would bees pay attention to drones?
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/drone/electrocute_act(shock_damage, source, siemens_coeff, flags = NONE)
|
||||
return 0 //So they don't die trying to fix wiring
|
||||
return FALSE //So they don't die trying to fix wiring
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
/mob/living/simple_animal/cow/tamed()
|
||||
. = ..()
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8)))
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
. = ..()
|
||||
if(!rideable && mind)
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 8), TEXT_SOUTH = list(1, 8), TEXT_EAST = list(-3, 6), TEXT_WEST = list(3, 6)))
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
|
||||
@@ -54,21 +54,22 @@
|
||||
|
||||
/datum/action/boss/Trigger()
|
||||
. = ..()
|
||||
if(.)
|
||||
if(!istype(boss, boss_type))
|
||||
return 0
|
||||
if(!boss.atb)
|
||||
return 0
|
||||
if(boss.atb.points < boss_cost)
|
||||
return 0
|
||||
if(!boss.client)
|
||||
if(needs_target && !boss.target)
|
||||
return 0
|
||||
if(boss)
|
||||
if(say_when_triggered)
|
||||
boss.say(say_when_triggered, forced = "boss action")
|
||||
if(!boss.atb.spend(boss_cost))
|
||||
return 0
|
||||
if(!.)
|
||||
return
|
||||
if(!istype(boss, boss_type))
|
||||
return
|
||||
if(!boss.atb)
|
||||
return
|
||||
if(boss.atb.points < boss_cost)
|
||||
return
|
||||
if(!boss.client)
|
||||
if(needs_target && !boss.target)
|
||||
return
|
||||
if(boss)
|
||||
if(say_when_triggered)
|
||||
boss.say(say_when_triggered, forced = "boss action")
|
||||
if(!boss.atb.spend(boss_cost))
|
||||
return
|
||||
|
||||
//Example:
|
||||
/*
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
/mob/living/simple_animal/hostile/carp/tamed()
|
||||
. = ..()
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 13), TEXT_SOUTH = list(0, 15), TEXT_EAST = list(-2, 12), TEXT_WEST = list(2, 12)))
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
@@ -218,7 +218,7 @@
|
||||
heal_overall_damage(4)
|
||||
if(!rideable && src.mind)
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 8), TEXT_SOUTH = list(1, 8), TEXT_EAST = list(-3, 6), TEXT_WEST = list(3, 6)))
|
||||
D.set_vehicle_dir_offsets(SOUTH, pixel_x, 0)
|
||||
|
||||
@@ -90,17 +90,17 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/proc/humanize_spider(mob/user)
|
||||
if(key || !playable_spider || stat)//Someone is in it, it's dead, or the fun police are shutting it down
|
||||
return 0
|
||||
return FALSE
|
||||
var/spider_ask = alert("Become a spider?", "Are you australian?", "Yes", "No")
|
||||
if(spider_ask == "No" || !src || QDELETED(src))
|
||||
return 1
|
||||
return TRUE
|
||||
if(key)
|
||||
to_chat(user, "<span class='warning'>Someone else already took this spider!</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
key = user.key
|
||||
if(directive)
|
||||
log_game("[key_name(src)] took control of [name] with the objective: '[directive]'.")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
//nursemaids - these create webs and eggs
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/nurse
|
||||
@@ -244,15 +244,16 @@
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/handle_automated_action()
|
||||
if(!..()) //AIStatus is off
|
||||
return 0
|
||||
. = ..()
|
||||
if(!.)//AIStatus is off
|
||||
return FALSE
|
||||
if(AIStatus == AI_IDLE)
|
||||
//1% chance to skitter madly away
|
||||
if(!busy && prob(1))
|
||||
stop_automated_movement = TRUE
|
||||
Goto(pick(urange(20, src, 1)), move_to_delay)
|
||||
addtimer(CALLBACK(src, .proc/do_action), 5 SECONDS)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/proc/do_action()
|
||||
stop_automated_movement = FALSE
|
||||
@@ -449,13 +450,14 @@
|
||||
button_icon_state = "lay_eggs"
|
||||
|
||||
/datum/action/innate/spider/lay_eggs/IsAvailable()
|
||||
if(..())
|
||||
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse))
|
||||
return 0
|
||||
var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner
|
||||
if(S.fed)
|
||||
return 1
|
||||
return 0
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse))
|
||||
return FALSE
|
||||
var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner
|
||||
if(S.fed)
|
||||
return TRUE
|
||||
|
||||
/datum/action/innate/spider/lay_eggs/Activate()
|
||||
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse))
|
||||
|
||||
@@ -68,11 +68,10 @@
|
||||
. = ..()
|
||||
if(!.) //dead
|
||||
walk(src, 0) //stops walking
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/hostile/handle_automated_action()
|
||||
if(AIStatus == AI_OFF)
|
||||
return 0
|
||||
return FALSE
|
||||
var/list/possible_targets = ListTargets() //we look around for potential targets and make it a list for later use.
|
||||
|
||||
if(environment_smash)
|
||||
|
||||
@@ -221,7 +221,7 @@ Difficulty: Medium
|
||||
if(!any_attack)
|
||||
for(var/obj/effect/temp_visual/drakewall/D in drakewalls)
|
||||
qdel(D)
|
||||
return 0 // nothing to attack in the arena time for enraged attack if we still have a target
|
||||
return FALSE // nothing to attack in the arena time for enraged attack if we still have a target
|
||||
for(var/turf/T in turfs)
|
||||
if(!(T in empty))
|
||||
new /obj/effect/temp_visual/lava_warning(T)
|
||||
@@ -229,7 +229,7 @@ Difficulty: Medium
|
||||
new /obj/effect/temp_visual/lava_safe(T)
|
||||
amount--
|
||||
SLEEP_CHECK_DEATH(24)
|
||||
return 1 // attack finished completely
|
||||
return TRUE // attack finished completely
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/proc/arena_escape_enrage() // you ran somehow / teleported away from my arena attack now i'm mad fucker
|
||||
SLEEP_CHECK_DEATH(0)
|
||||
|
||||
@@ -135,8 +135,8 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/copy/proc/CheckObject(obj/O)
|
||||
if((isitem(O) || isstructure(O)) && !is_type_in_list(O, GLOB.protected_objects))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0)
|
||||
if(destroy_original || CheckObject(O))
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
qdel(O)
|
||||
saddled = TRUE
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
add_overlay("goliath_saddled")
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8)))
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
for(var/mob/living/simple_animal/hostile/retaliate/H in around)
|
||||
if(faction_check_mob(H) && !attack_same && !H.attack_same)
|
||||
H.enemies |= enemies
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
. = ..()
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
if(can_be_seen(NewLoc))
|
||||
if(client)
|
||||
to_chat(src, "<span class='warning'>You cannot move, there are eyes on you!</span>")
|
||||
return 0
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/Life()
|
||||
@@ -143,7 +143,7 @@
|
||||
// Cannot talk
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
return 0
|
||||
return
|
||||
|
||||
// Turn to dust when gibbed
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
if(isliving(the_target))
|
||||
var/mob/living/L = the_target
|
||||
if(!L.client && !L.ckey)
|
||||
return 0
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
// Don't attack your creator if there is one
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
/mob/living/simple_animal/hostile/vatbeast/tamed()
|
||||
. = ..()
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
buckle_lying = 0
|
||||
var/datum/component/riding/riding = LoadComponent(/datum/component/riding)
|
||||
riding.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 15), TEXT_SOUTH = list(0, 15), TEXT_EAST = list(-10, 15), TEXT_WEST = list(10, 15)))
|
||||
riding.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
|
||||
@@ -159,8 +159,8 @@
|
||||
|
||||
/mob/living/simple_animal/parrot/radio(message, list/message_mods = list(), list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be.
|
||||
. = ..()
|
||||
if(. != 0)
|
||||
return .
|
||||
if(!.)
|
||||
return
|
||||
|
||||
if(message_mods[MODE_HEADSET])
|
||||
if(ears)
|
||||
@@ -175,7 +175,7 @@
|
||||
ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/*
|
||||
* Inventory
|
||||
@@ -605,12 +605,12 @@
|
||||
parrot_state = PARROT_WANDER
|
||||
parrot_stuck = 0
|
||||
parrot_lastmove = null
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
parrot_lastmove = null
|
||||
else
|
||||
parrot_lastmove = src.loc
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/parrot/proc/search_for_item()
|
||||
var/item
|
||||
@@ -634,8 +634,6 @@
|
||||
continue
|
||||
return item
|
||||
|
||||
return null
|
||||
|
||||
/mob/living/simple_animal/parrot/proc/search_for_perch()
|
||||
for(var/obj/O in view(src))
|
||||
for(var/path in desired_perches)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
/mob/living/simple_animal/shade/canSuicide()
|
||||
if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone
|
||||
return 0
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M)
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/slime/Life()
|
||||
set invisibility = 0
|
||||
if (notransform)
|
||||
return
|
||||
if(..())
|
||||
@@ -614,11 +613,11 @@
|
||||
|
||||
/mob/living/simple_animal/slime/proc/will_hunt(hunger = -1) // Check for being stopped from feeding and chasing
|
||||
if (docile)
|
||||
return 0
|
||||
return FALSE
|
||||
if (hunger == 2 || rabid || attacked)
|
||||
return 1
|
||||
return TRUE
|
||||
if (Leader)
|
||||
return 0
|
||||
return FALSE
|
||||
if (holding_still)
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -12,20 +12,22 @@
|
||||
var/needs_growth = NO_GROWTH_NEEDED
|
||||
|
||||
/datum/action/innate/slime/IsAvailable()
|
||||
if(..())
|
||||
var/mob/living/simple_animal/slime/S = owner
|
||||
if(needs_growth == GROWTH_NEEDED)
|
||||
if(S.amount_grown >= SLIME_EVOLUTION_THRESHOLD)
|
||||
return 1
|
||||
return 0
|
||||
return 1
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/simple_animal/slime/S = owner
|
||||
if(needs_growth == GROWTH_NEEDED)
|
||||
if(S.amount_grown >= SLIME_EVOLUTION_THRESHOLD)
|
||||
return TRUE
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/slime/verb/Feed()
|
||||
set category = "Slime"
|
||||
set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process."
|
||||
|
||||
if(stat)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/C in view(1,src))
|
||||
@@ -34,10 +36,11 @@
|
||||
|
||||
var/mob/living/M = input(src,"Who do you wish to feed on?") in null|sortNames(choices)
|
||||
if(!M)
|
||||
return 0
|
||||
return FALSE
|
||||
if(CanFeedon(M))
|
||||
Feedon(M)
|
||||
return 1
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/action/innate/slime/feed
|
||||
name = "Feed"
|
||||
|
||||
@@ -479,10 +479,10 @@
|
||||
docile = 1
|
||||
|
||||
/mob/living/simple_animal/slime/can_unbuckle()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/slime/can_buckle()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/slime/get_mob_buckling_height(mob/seat)
|
||||
if(..())
|
||||
|
||||
+12
-12
@@ -114,10 +114,10 @@
|
||||
*/
|
||||
/mob/proc/Cell()
|
||||
set category = "Admin"
|
||||
set hidden = 1
|
||||
set hidden = TRUE
|
||||
|
||||
if(!loc)
|
||||
return 0
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
|
||||
if(istype(W))
|
||||
if(equip_to_slot_if_possible(W, slot,0,0,0))
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if(!W)
|
||||
// Activate the item
|
||||
@@ -315,7 +315,7 @@
|
||||
if(istype(I))
|
||||
I.attack_hand(src)
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Try to equip an item to a slot on the mob
|
||||
@@ -374,7 +374,7 @@
|
||||
*/
|
||||
/mob/proc/equip_to_appropriate_slot(obj/item/W, swap=FALSE)
|
||||
if(!istype(W))
|
||||
return 0
|
||||
return FALSE
|
||||
var/slot_priority = W.slot_equipment_priority
|
||||
|
||||
if(!slot_priority)
|
||||
@@ -391,9 +391,9 @@
|
||||
|
||||
for(var/slot in slot_priority)
|
||||
if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, FALSE, swap)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE;
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
/**
|
||||
* Reset the attached clients perspective (viewpoint)
|
||||
*
|
||||
@@ -806,7 +806,7 @@
|
||||
|
||||
///Is the mob muzzled (default false)
|
||||
/mob/proc/is_muzzled()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/// Adds this list to the output to the stat browser
|
||||
/mob/proc/get_status_tab_items()
|
||||
@@ -1013,11 +1013,11 @@
|
||||
|
||||
///can the mob be buckled to something by default?
|
||||
/mob/proc/can_buckle()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
///can the mob be unbuckled from something by default?
|
||||
/mob/proc/can_unbuckle()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
///Can the mob interact() with an atom?
|
||||
/mob/proc/can_interact_with(atom/A)
|
||||
@@ -1077,7 +1077,7 @@
|
||||
/mob/proc/fully_replace_character_name(oldname,newname)
|
||||
log_message("[src] name changed from [oldname] to [newname]", LOG_OWNERSHIP)
|
||||
if(!newname)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
log_played_names(ckey,newname)
|
||||
|
||||
@@ -1100,7 +1100,7 @@
|
||||
// Only update if this player is a target
|
||||
if(obj.target && obj.target.current && obj.target.current.real_name == name)
|
||||
obj.update_explanation_text()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
///Updates GLOB.data_core records with new name , see mob/living/carbon/human
|
||||
/mob/proc/replace_records_name(oldname,newname)
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
/proc/above_neck(zone)
|
||||
var/list/zones = list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES)
|
||||
if(zones.Find(zone))
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Convert random parts of a passed in message to stars
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
///Check if the mob has a hivemind channel
|
||||
/mob/proc/hivecheck()
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
///Check if the mob has a ling hivemind
|
||||
/mob/proc/lingcheck()
|
||||
|
||||
@@ -619,34 +619,34 @@
|
||||
|
||||
//Bad mobs! - Remember to add a comment explaining what's wrong with the mob
|
||||
if(!MP)
|
||||
return 0 //Sanity, this should never happen.
|
||||
return FALSE //Sanity, this should never happen.
|
||||
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/construct))
|
||||
return 0 //Verbs do not appear for players.
|
||||
return FALSE //Verbs do not appear for players.
|
||||
|
||||
//Good mobs!
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/cat))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/dog/corgi))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/crab))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/carp))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/mushroom))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/shade))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/killertomato))
|
||||
return 1
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/mouse))
|
||||
return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak)
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/bear))
|
||||
return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak)
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/parrot))
|
||||
return 1 //Parrots are no longer unfinished! -Nodrak
|
||||
return TRUE //Parrots are no longer unfinished! -Nodrak
|
||||
|
||||
//Not in here? Must be untested!
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
#undef TRANSFORMATION_DURATION
|
||||
|
||||
Reference in New Issue
Block a user