mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 19:44:58 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into ProjectileFix1
Conflicts: code/modules/mob/living/simple_animal/friendly/cat.dm code/modules/mob/living/simple_animal/friendly/corgi.dm code/modules/mob/living/simple_animal/friendly/farm_animals.dm code/modules/mob/living/simple_animal/friendly/lizard.dm code/modules/mob/living/simple_animal/friendly/mouse.dm code/modules/mob/living/simple_animal/hostile/bees.dm
This commit is contained in:
@@ -159,10 +159,6 @@
|
||||
/mob/living/carbon/alien/getTrail()
|
||||
return "xltrails"
|
||||
|
||||
/mob/living/carbon/alien/cuff_break(obj/item/I, mob/living/carbon/C)
|
||||
playsound(C, 'sound/voice/hiss5.ogg', 40, 1, 1) //Alien roars when breaking free.
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/verb/nightvisiontoggle()
|
||||
set name = "Toggle Night Vision"
|
||||
set category = "Alien"
|
||||
|
||||
@@ -117,4 +117,8 @@
|
||||
unEquip(l_store)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/reagent_check(var/datum/reagent/R)
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/alien/humanoid/cuff_resist(obj/item/I)
|
||||
playsound(src, 'sound/voice/hiss5.ogg', 40, 1, 1) //Alien roars when starting to break free
|
||||
..(I, cuff_break = 1)
|
||||
|
||||
@@ -382,3 +382,111 @@ var/const/GALOSHES_DONT_HELP = 8
|
||||
else
|
||||
show_message("<span class='userdanger'>The blob attacks!</span>")
|
||||
adjustBruteLoss(10)
|
||||
|
||||
/mob/living/carbon/proc/spin(spintime, speed)
|
||||
spawn()
|
||||
var/D = dir
|
||||
while(spintime >= speed)
|
||||
sleep(speed)
|
||||
switch(D)
|
||||
if(NORTH)
|
||||
D = EAST
|
||||
if(SOUTH)
|
||||
D = WEST
|
||||
if(EAST)
|
||||
D = SOUTH
|
||||
if(WEST)
|
||||
D = NORTH
|
||||
dir = D
|
||||
spintime -= speed
|
||||
return
|
||||
|
||||
/mob/living/carbon/resist_buckle()
|
||||
if(handcuffed)
|
||||
changeNext_move(CLICK_CD_BREAKOUT)
|
||||
last_special = world.time + CLICK_CD_BREAKOUT
|
||||
visible_message("<span class='warning'>[src] attempts to unbuckle themself!</span>", \
|
||||
"<span class='notice'>You attempt to unbuckle yourself. (This will take around one minute and you need to stay still.)</span>")
|
||||
if(do_after(src, 600))
|
||||
if(!buckled)
|
||||
return
|
||||
buckled.user_unbuckle_mob(src,src)
|
||||
else
|
||||
if(src && buckled)
|
||||
src << "<span class='warning'>You fail to unbuckle yourself!</span>"
|
||||
else
|
||||
buckled.user_unbuckle_mob(src,src)
|
||||
|
||||
/mob/living/carbon/resist_fire()
|
||||
fire_stacks -= 5
|
||||
Weaken(3,1)
|
||||
spin(32,2)
|
||||
visible_message("<span class='danger'>[src] rolls on the floor, trying to put themselves out!</span>", \
|
||||
"<span class='notice'>You stop, drop, and roll!</span>")
|
||||
sleep(30)
|
||||
if(fire_stacks <= 0)
|
||||
visible_message("<span class='danger'>[src] has successfully extinguished themselves!</span>", \
|
||||
"<span class='notice'>You extinguish yourself.</span>")
|
||||
ExtinguishMob()
|
||||
return
|
||||
|
||||
/mob/living/carbon/resist_restraints()
|
||||
var/obj/item/I = null
|
||||
if(handcuffed)
|
||||
I = handcuffed
|
||||
else if(legcuffed)
|
||||
I = legcuffed
|
||||
if(I)
|
||||
changeNext_move(CLICK_CD_BREAKOUT)
|
||||
last_special = world.time + CLICK_CD_BREAKOUT
|
||||
cuff_resist(I)
|
||||
|
||||
|
||||
/mob/living/carbon/proc/cuff_resist(obj/item/I, var/breakouttime = 600, cuff_break = 0)
|
||||
if(istype(I, /obj/item/weapon/restraints))
|
||||
var/obj/item/weapon/restraints/R = I
|
||||
breakouttime = R.breakouttime
|
||||
var/displaytime = breakouttime / 600
|
||||
if(!cuff_break)
|
||||
visible_message("<span class='warning'>[src] attempts to remove [I]!</span>")
|
||||
src << "<span class='notice'>You attempt to remove [I]. (This will take around [displaytime] minutes and you need to stand still.)</span>"
|
||||
if(do_after(src, breakouttime, 10))
|
||||
if(I.loc != src || buckled)
|
||||
return
|
||||
visible_message("<span class='danger'>[src] manages to remove [I]!</span>")
|
||||
src << "<span class='notice'>You successfully remove [I].</span>"
|
||||
|
||||
if(handcuffed)
|
||||
handcuffed.loc = loc
|
||||
handcuffed = null
|
||||
if(buckled && buckled.buckle_requires_restraints)
|
||||
buckled.unbuckle_mob()
|
||||
update_inv_handcuffed(0)
|
||||
return
|
||||
if(legcuffed)
|
||||
legcuffed.loc = loc
|
||||
legcuffed = null
|
||||
update_inv_legcuffed(0)
|
||||
else
|
||||
src << "<span class='warning'>You fail to remove [I]!</span>"
|
||||
|
||||
else
|
||||
breakouttime = 50
|
||||
visible_message("<span class='warning'>[src] is trying to break [I]!</span>")
|
||||
src << "<span class='notice'>You attempt to break [I]. (This will take around 5 seconds and you need to stand still.)</span>"
|
||||
if(do_after(src, breakouttime))
|
||||
if(!I.loc || buckled)
|
||||
return
|
||||
visible_message("<span class='danger'>[src] manages to break [I]!</span>")
|
||||
src << "<span class='notice'>You successfully break [I].</span>"
|
||||
qdel(I)
|
||||
|
||||
if(handcuffed)
|
||||
handcuffed = null
|
||||
update_inv_handcuffed(0)
|
||||
return
|
||||
else
|
||||
legcuffed = null
|
||||
update_inv_legcuffed(0)
|
||||
else
|
||||
src << "<span class='warning'>You fail to break [I]!</span>"
|
||||
@@ -743,4 +743,9 @@
|
||||
staticOverlay.override = 1
|
||||
staticOverlays["letter"] = staticOverlay
|
||||
|
||||
|
||||
/mob/living/carbon/human/cuff_resist(obj/item/I)
|
||||
if(dna && dna.check_mutation(HULK))
|
||||
say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
..(I, cuff_break = 1)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
|
||||
update_gravity(mob_has_gravity())
|
||||
|
||||
update_pulling()
|
||||
|
||||
for(var/obj/item/weapon/grab/G in src)
|
||||
G.process()
|
||||
|
||||
@@ -75,6 +77,11 @@
|
||||
/mob/living/proc/handle_stomach()
|
||||
return
|
||||
|
||||
/mob/living/proc/update_pulling()
|
||||
if(pulling)
|
||||
if(incapacitated())
|
||||
stop_pulling()
|
||||
|
||||
//This updates the health and status of the mob (conscious, unconscious, dead)
|
||||
/mob/living/proc/handle_regular_status_updates()
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ Sorry Giacom. Please don't be mad :(
|
||||
return 0
|
||||
if(!..())
|
||||
return 0
|
||||
usr.visible_message("<b>[src]</b> points to [A]")
|
||||
visible_message("<b>[src]</b> points to [A]")
|
||||
return 1
|
||||
|
||||
/mob/living/verb/succumb(var/whispered as null)
|
||||
@@ -320,12 +320,12 @@ Sorry Giacom. Please don't be mad :(
|
||||
set name = "Sleep"
|
||||
set category = "IC"
|
||||
|
||||
if(usr.sleeping)
|
||||
usr << "<span class='notice'>You are already sleeping.</span>"
|
||||
if(sleeping)
|
||||
src << "<span class='notice'>You are already sleeping.</span>"
|
||||
return
|
||||
else
|
||||
if(alert(src, "You sure you want to sleep for a while?", "Sleep", "Yes", "No") == "Yes")
|
||||
usr.sleeping = 20 //Short nap
|
||||
sleeping = 20 //Short nap
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/get_contents()
|
||||
@@ -471,11 +471,11 @@ Sorry Giacom. Please don't be mad :(
|
||||
|
||||
if(config.allow_Metadata)
|
||||
if(client)
|
||||
usr << "[src]'s Metainfo:<br>[client.prefs.metadata]"
|
||||
src << "[src]'s Metainfo:<br>[client.prefs.metadata]"
|
||||
else
|
||||
usr << "[src] does not have any stored infomation!"
|
||||
src << "[src] does not have any stored infomation!"
|
||||
else
|
||||
usr << "OOC Metadata is not supported by this server!"
|
||||
src << "OOC Metadata is not supported by this server!"
|
||||
|
||||
return
|
||||
|
||||
@@ -490,12 +490,12 @@ Sorry Giacom. Please don't be mad :(
|
||||
stop_pulling()
|
||||
|
||||
|
||||
var/t7 = 1
|
||||
var/cuff_dragged = 0
|
||||
if (restrained())
|
||||
for(var/mob/living/M in range(src, 1))
|
||||
if ((M.pulling == src && M.stat == 0 && !( M.restrained() )))
|
||||
t7 = null
|
||||
if (t7 && pulling && (get_dist(src, pulling) <= 1 || pulling.loc == loc))
|
||||
if (M.pulling == src && !M.incapacitated())
|
||||
cuff_dragged = 1
|
||||
if (!cuff_dragged && pulling && !throwing && (get_dist(src, pulling) <= 1 || pulling.loc == loc))
|
||||
var/turf/T = loc
|
||||
. = ..()
|
||||
|
||||
@@ -586,172 +586,62 @@ Sorry Giacom. Please don't be mad :(
|
||||
/mob/living/proc/getTrail() //silicon and simple_animals don't get blood trails
|
||||
return null
|
||||
|
||||
/mob/living/proc/cuff_break(obj/item/weapon/restraints/I, mob/living/carbon/C)
|
||||
|
||||
if(C.dna.check_mutation(HULK))
|
||||
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
|
||||
C.visible_message("<span class='danger'>[C] manages to break [I]!</span>")
|
||||
C << "<span class='notice'>You successfully break [I].</span>"
|
||||
qdel(I)
|
||||
|
||||
if(C.handcuffed)
|
||||
C.handcuffed = null
|
||||
C.update_inv_handcuffed(0)
|
||||
return
|
||||
else
|
||||
C.legcuffed = null
|
||||
C.update_inv_legcuffed(0)
|
||||
|
||||
|
||||
/mob/living/proc/cuff_resist(obj/item/weapon/restraints/I, mob/living/carbon/C)
|
||||
var/breakouttime = 600
|
||||
var/displaytime = 1
|
||||
if(istype(I, /obj/item/weapon/restraints/handcuffs))
|
||||
var/obj/item/weapon/restraints/handcuffs/HC = C.handcuffed
|
||||
breakouttime = HC.breakouttime
|
||||
else if(istype(I, /obj/item/weapon/restraints/legcuffs))
|
||||
var/obj/item/weapon/restraints/legcuffs/LC = C.legcuffed
|
||||
breakouttime = LC.breakouttime
|
||||
displaytime = breakouttime / 600
|
||||
|
||||
if(isalienadult(C) || C.dna.check_mutation(HULK))
|
||||
C.visible_message("<span class='warning'>[C] is trying to break [I]!</span>")
|
||||
C << "<span class='notice'>You attempt to break [I]. (This will take around 5 seconds and you need to stand still.)</span>"
|
||||
spawn(0)
|
||||
if(do_after(C, 50))
|
||||
if(!I || C.buckled)
|
||||
return
|
||||
cuff_break(I, C)
|
||||
else
|
||||
C << "<span class='warning'>You fail to break [I]!</span>"
|
||||
else
|
||||
|
||||
C.visible_message("<span class='warning'>[C] attempts to remove [I]!</span>")
|
||||
C << "<span class='notice'>You attempt to remove [I]. (This will take around [displaytime] minutes and you need to stand still.)</span>"
|
||||
spawn(0)
|
||||
if(do_after(C, breakouttime, 10))
|
||||
if(!I || C.buckled)
|
||||
return
|
||||
C.visible_message("<span class='danger'>[C] manages to remove [I]!</span>")
|
||||
C << "<span class='notice'>You successfully remove [I].</span>"
|
||||
|
||||
if(C.handcuffed)
|
||||
C.handcuffed.loc = C.loc
|
||||
C.handcuffed = null
|
||||
if(C.buckled && C.buckled.buckle_requires_restraints)
|
||||
C.buckled.unbuckle_mob()
|
||||
C.update_inv_handcuffed(0)
|
||||
return
|
||||
if(C.legcuffed)
|
||||
C.legcuffed.loc = C.loc
|
||||
C.legcuffed = null
|
||||
C.update_inv_legcuffed(0)
|
||||
else
|
||||
C << "<span class='warning'>You fail to remove [I]!</span>"
|
||||
|
||||
/mob/living/verb/resist()
|
||||
set name = "Resist"
|
||||
set category = "IC"
|
||||
|
||||
if(!isliving(usr) || usr.next_move > world.time)
|
||||
if(!isliving(src) || next_move > world.time)
|
||||
return
|
||||
usr.changeNext_move(CLICK_CD_RESIST)
|
||||
|
||||
var/mob/living/L = usr
|
||||
changeNext_move(CLICK_CD_RESIST)
|
||||
|
||||
//resisting grabs (as if it helps anyone...)
|
||||
if(!L.stat && L.canmove && !L.restrained())
|
||||
if(!stat && canmove && !restrained())
|
||||
var/resisting = 0
|
||||
for(var/obj/O in L.requests)
|
||||
for(var/obj/O in requests)
|
||||
qdel(O)
|
||||
resisting++
|
||||
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
|
||||
for(var/obj/item/weapon/grab/G in grabbed_by)
|
||||
resisting++
|
||||
if(G.state == GRAB_PASSIVE)
|
||||
qdel(G)
|
||||
else
|
||||
if(G.state == GRAB_AGGRESSIVE)
|
||||
if(prob(25))
|
||||
L.visible_message("<span class='warning'>[L] has broken free of [G.assailant]'s grip!</span>")
|
||||
visible_message("<span class='warning'>[src] has broken free of [G.assailant]'s grip!</span>")
|
||||
qdel(G)
|
||||
else
|
||||
if(G.state == GRAB_NECK)
|
||||
if(prob(5))
|
||||
L.visible_message("<span class='warning'>[L] has broken free of [G.assailant]'s headlock!</span>")
|
||||
visible_message("<span class='warning'>[src] has broken free of [G.assailant]'s headlock!</span>")
|
||||
qdel(G)
|
||||
if(resisting)
|
||||
L.visible_message("<span class='warning'>[L] resists!</span>")
|
||||
visible_message("<span class='warning'>[src] resists!</span>")
|
||||
return
|
||||
|
||||
//unbuckling yourself
|
||||
if(L.buckled && L.last_special <= world.time)
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
if(C.handcuffed)
|
||||
C.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
C.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
C.visible_message("<span class='warning'>[C] attempts to unbuckle themself!</span>", \
|
||||
"<span class='notice'>You attempt to unbuckle yourself. (This will take around one minute and you need to stay still.)</span>")
|
||||
spawn(0)
|
||||
if(do_after(usr, 600))
|
||||
if(!C.buckled)
|
||||
return
|
||||
C.buckled.user_unbuckle_mob(C,C)
|
||||
else
|
||||
if(C && C.buckled)
|
||||
C << "<span class='warning'>You fail to unbuckle yourself!</span>"
|
||||
else
|
||||
C.buckled.user_unbuckle_mob(C,C)
|
||||
else
|
||||
L.buckled.user_unbuckle_mob(L,L)
|
||||
if(buckled && last_special <= world.time)
|
||||
resist_buckle()
|
||||
|
||||
//Breaking out of a container (Locker, sleeper, cryo...)
|
||||
else if(loc && istype(loc, /obj) && !isturf(loc))
|
||||
if(L.stat == CONSCIOUS && !L.stunned && !L.weakened && !L.paralysis)
|
||||
if(stat == CONSCIOUS && !stunned && !weakened && !paralysis)
|
||||
var/obj/C = loc
|
||||
C.container_resist(L)
|
||||
C.container_resist(src)
|
||||
|
||||
//Stop drop and roll & Handcuffs
|
||||
else if(iscarbon(L))
|
||||
var/mob/living/carbon/CM = L
|
||||
if(CM.on_fire && CM.canmove)
|
||||
CM.fire_stacks -= 5
|
||||
CM.Weaken(3,1)
|
||||
CM.spin(32,2)
|
||||
CM.visible_message("<span class='danger'>[CM] rolls on the floor, trying to put themselves out!</span>", \
|
||||
"<span class='notice'>You stop, drop, and roll!</span>")
|
||||
sleep(30)
|
||||
if(fire_stacks <= 0)
|
||||
CM.visible_message("<span class='danger'>[CM] has successfully extinguished themselves!</span>", \
|
||||
"<span class='notice'>You extinguish yourself.</span>")
|
||||
ExtinguishMob()
|
||||
return
|
||||
if(CM.canmove && (CM.last_special <= world.time))
|
||||
if(CM.handcuffed || CM.legcuffed)
|
||||
CM.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
CM.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
if(CM.handcuffed)
|
||||
cuff_resist(CM.handcuffed, CM)
|
||||
else
|
||||
cuff_resist(CM.legcuffed, CM)
|
||||
else if(canmove)
|
||||
if(on_fire)
|
||||
resist_fire() //stop, drop, and roll
|
||||
else if(last_special <= world.time)
|
||||
resist_restraints() //trying to remove cuffs.
|
||||
|
||||
/mob/living/carbon/proc/spin(spintime, speed)
|
||||
spawn()
|
||||
var/D = dir
|
||||
while(spintime >= speed)
|
||||
sleep(speed)
|
||||
switch(D)
|
||||
if(NORTH)
|
||||
D = EAST
|
||||
if(SOUTH)
|
||||
D = WEST
|
||||
if(EAST)
|
||||
D = SOUTH
|
||||
if(WEST)
|
||||
D = NORTH
|
||||
dir = D
|
||||
spintime -= speed
|
||||
|
||||
/mob/living/proc/resist_buckle()
|
||||
buckled.user_unbuckle_mob(src,src)
|
||||
|
||||
/mob/living/proc/resist_fire()
|
||||
return
|
||||
|
||||
/mob/living/proc/resist_restraints()
|
||||
return
|
||||
|
||||
/mob/living/proc/get_visible_name()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon = 'icons/obj/status_display.dmi' //invisibility!
|
||||
mouse_opacity = 0
|
||||
density = 0
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_size = MOB_SIZE_TINY
|
||||
|
||||
var/network = "SS13"
|
||||
var/obj/machinery/camera/current = null
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
faction = list("cult")
|
||||
flying = 1
|
||||
var/list/construct_spells = list()
|
||||
var/playstyle_string = "<B>You are a generic construct! Your job is to not exist.</B>"
|
||||
|
||||
@@ -86,7 +87,7 @@
|
||||
environment_smash = 2
|
||||
attack_sound = 'sound/weapons/punch3.ogg'
|
||||
status_flags = 0
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
force_threshold = 11
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
|
||||
playstyle_string = "<B>You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
density = 0
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
ventcrawler = 2
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_size = MOB_SIZE_TINY
|
||||
|
||||
/mob/living/simple_animal/butterfly/New()
|
||||
..()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//Corgi
|
||||
/mob/living/simple_animal/pet
|
||||
icon = 'icons/mob/pets.dmi'
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
var/obj/item/clothing/tie/petcollar/pcollar = null
|
||||
var/image/collar = null
|
||||
var/image/pettag = null
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 2
|
||||
environment_smash = 0
|
||||
stop_automated_movement_when_pulled = 1
|
||||
var/datum/reagents/udder = null
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/New()
|
||||
@@ -44,9 +45,9 @@
|
||||
LoseTarget()
|
||||
src.visible_message("<span class='notice'>[src] calms down.</span>")
|
||||
|
||||
if(stat == CONSCIOUS)
|
||||
if(udder && prob(5))
|
||||
udder.add_reagent("milk", rand(5, 10))
|
||||
if(stat == CONSCIOUS)
|
||||
if(udder && prob(5))
|
||||
udder.add_reagent("milk", rand(5, 10))
|
||||
|
||||
if(locate(/obj/effect/spacevine) in loc)
|
||||
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
|
||||
@@ -103,6 +104,7 @@
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicks"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
health = 50
|
||||
var/datum/reagents/udder = null
|
||||
|
||||
@@ -169,7 +171,7 @@
|
||||
ventcrawler = 2
|
||||
var/amount_grown = 0
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_size = MOB_SIZE_TINY
|
||||
|
||||
/mob/living/simple_animal/chick/New()
|
||||
..()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
density = 0
|
||||
ventcrawler = 2
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_size = MOB_SIZE_TINY
|
||||
var/body_color //brown, gray and white, leave blank for random
|
||||
|
||||
/mob/living/simple_animal/mouse/New()
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 30
|
||||
attacktext = "claws"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
friendly = "bear hugs"
|
||||
|
||||
//Space bears aren't affected by cold.
|
||||
@@ -54,7 +54,6 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("me", 1, "stares alertly at [.]")
|
||||
stance = HOSTILE_STANCE_ATTACK
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/LoseTarget()
|
||||
..(5)
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
response_help = "shoos"
|
||||
response_disarm = "swats away"
|
||||
response_harm = "squashes"
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 10
|
||||
health = 10
|
||||
faction = list("hostile")
|
||||
@@ -21,6 +20,7 @@
|
||||
mouse_opacity = 2
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
flying = 1
|
||||
|
||||
//Spaceborn beings don't get hurt by space
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
maxbodytemp = 1500
|
||||
|
||||
faction = list("carp")
|
||||
flying = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1 //No drifting in space for space carp! //original comments do not steal
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
melee_damage_upper = 25
|
||||
attacktext = "blinks at"
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
flying = 1
|
||||
|
||||
faction = list("spooky")
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
melee_damage_lower = 15
|
||||
@@ -48,6 +47,8 @@
|
||||
pass_flags = PASSTABLE
|
||||
move_to_delay = 6
|
||||
ventcrawler = 2
|
||||
attacktext = "bites"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
|
||||
//nursemaids - these create webs and eggs
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/nurse
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 3
|
||||
attacktext = "claws"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
projectilesound = 'sound/weapons/Gunshot.ogg'
|
||||
projectiletype = /obj/item/projectile/hivebotbullet
|
||||
faction = list("hivebot")
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
/mob/living/simple_animal/hostile/Life()
|
||||
|
||||
. = ..()
|
||||
if(!.)
|
||||
walk(src, 0)
|
||||
if(!.) //dead
|
||||
walk(src, 0) //stops walking
|
||||
return 0
|
||||
if(ranged)
|
||||
ranged_cooldown--
|
||||
@@ -49,8 +49,7 @@
|
||||
if(HOSTILE_STANCE_IDLE)
|
||||
if(environment_smash)
|
||||
EscapeConfinement()
|
||||
var/new_target = FindTarget()
|
||||
GiveTarget(new_target)
|
||||
FindTarget()
|
||||
|
||||
if(HOSTILE_STANCE_ATTACK)
|
||||
MoveToTarget()
|
||||
@@ -93,6 +92,7 @@
|
||||
Targets += A
|
||||
continue
|
||||
Target = PickTarget(Targets)
|
||||
GiveTarget(Target)
|
||||
return Target //We now have a target
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/Found(var/atom/A)//This is here as a potential override to pick a specific target if available
|
||||
@@ -193,12 +193,10 @@
|
||||
target = null
|
||||
if(stance == HOSTILE_STANCE_IDLE)//If we took damage while idle, immediately attempt to find the source of it so we find a living target
|
||||
Aggro()
|
||||
var/new_target = FindTarget()
|
||||
GiveTarget(new_target)
|
||||
FindTarget()
|
||||
if(stance == HOSTILE_STANCE_ATTACK)//No more pulling a mob forever and having a second player attack it, it can switch targets now if it finds a more suitable one
|
||||
if(target != null && prob(40))
|
||||
var/new_target = FindTarget()
|
||||
GiveTarget(new_target)
|
||||
FindTarget()
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/AttackTarget()
|
||||
|
||||
@@ -349,4 +347,4 @@
|
||||
|
||||
//Convenience
|
||||
/mob/living/simple_animal/hostile/proc/AIShouldSleep()
|
||||
. = !(AIShouldWake())
|
||||
. = !(AIShouldWake())
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 12
|
||||
attacktext = "slams"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
ventcrawler = 2
|
||||
faction = list("plants")
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 12
|
||||
attacktext = "attacks"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
var/Attackemote = "growls at"
|
||||
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
attacktext = "barrels into"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
a_intent = "help"
|
||||
throw_message = "sinks in slowly, before being pushed out of "
|
||||
status_flags = CANPUSH
|
||||
@@ -229,6 +230,7 @@
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
attacktext = "lashes out at"
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "falls right through the strange body of the"
|
||||
ranged_cooldown = 0
|
||||
ranged_cooldown_cap = 0
|
||||
@@ -303,6 +305,7 @@
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 2
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "falls right through the strange body of the"
|
||||
environment_smash = 0
|
||||
pass_flags = PASSTABLE
|
||||
@@ -339,6 +342,7 @@
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
attacktext = "pulverizes"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
throw_message = "does nothing to the rocky hide of the"
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 5
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
melee_damage_upper = 1
|
||||
attack_same = 2
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
faction = list("mushroom")
|
||||
environment_smash = 0
|
||||
stat_attack = 2
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
speed = 0
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
response_disarm = "flails at"
|
||||
response_harm = "hits"
|
||||
speak_chance = 0
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 15
|
||||
health = 15
|
||||
see_in_dark = 10
|
||||
@@ -23,7 +22,8 @@
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
environment_smash = 0
|
||||
ventcrawler = 2
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_size = MOB_SIZE_TINY
|
||||
flying = 1
|
||||
var/max_co2 = 0 //to be removed once metastation map no longer use those for Sgt Araneus
|
||||
var/min_oxy = 0
|
||||
var/max_tox = 0
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
emote_see = list("honks")
|
||||
speak_chance = 1
|
||||
a_intent = "harm"
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
speed = 0
|
||||
|
||||
@@ -5,14 +5,12 @@
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(!L.stat)
|
||||
stance = HOSTILE_STANCE_ATTACK
|
||||
return L
|
||||
else
|
||||
enemies -= L
|
||||
else if(istype(A, /obj/mecha))
|
||||
var/obj/mecha/M = A
|
||||
if(M.occupant)
|
||||
stance = HOSTILE_STANCE_ATTACK
|
||||
return A
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/ListTargets()
|
||||
@@ -23,7 +21,6 @@
|
||||
return see
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/proc/Retaliate()
|
||||
..()
|
||||
var/list/around = view(src, vision_range)
|
||||
|
||||
for(var/atom/movable/A in around)
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
speed = 0
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "punches"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
a_intent = "harm"
|
||||
var/corpse = /obj/effect/landmark/mobcorpse/russian
|
||||
var/weapon1 = /obj/item/weapon/kitchenknife
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
speed = 0
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = "punches"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
a_intent = "harm"
|
||||
var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
|
||||
var/weapon1
|
||||
@@ -48,6 +48,7 @@
|
||||
weapon1 = /obj/item/weapon/melee/energy/sword/saber/red
|
||||
weapon2 = /obj/item/weapon/shield/energy
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
status_flags = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
@@ -130,7 +131,8 @@
|
||||
faction = list("syndicate")
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_size = MOB_SIZE_TINY
|
||||
flying
|
||||
|
||||
/mob/living/simple_animal/hostile/viscerator/death(gibbed)
|
||||
..(gibbed)
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
attacktext = "chomps"
|
||||
friendly = "grooms"
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
flying = 1
|
||||
|
||||
var/parrot_damage_upper = 10
|
||||
var/parrot_state = PARROT_WANDER //Hunt for a perch when created
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
status_flags = 0
|
||||
faction = list("cult")
|
||||
status_flags = CANPUSH
|
||||
flying = 1
|
||||
|
||||
|
||||
/mob/living/simple_animal/shade/death()
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
//simple_animal access
|
||||
var/obj/item/weapon/card/id/access_card = null //innate access uses an internal ID card
|
||||
|
||||
var/flying = 0 //whether it's flying or touching the ground.
|
||||
|
||||
/mob/living/simple_animal/New()
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user