Updated space carp, walking mushrooms and killer tomatos to use simple_animal instead of critter code.
Notify me if any issues with them, or any simple_animal arise. Fixed a few issues with space bears. Slightly improved teleporter code, and did a few misc runtime fixes. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4258 316c924e-a436-60f5-8080-3fe189b3f50e
@@ -1459,7 +1459,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob)
|
||||
if(istype(user.loc,/turf/space))
|
||||
return
|
||||
new /obj/effect/critter/killertomato(user.loc)
|
||||
new /mob/living/simple_animal/tomato(user.loc)
|
||||
del(src)
|
||||
|
||||
user << "<span class='notice'>You plant the killer-tomato.</span>"
|
||||
@@ -1654,7 +1654,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob)
|
||||
if(istype(user.loc,/turf/space))
|
||||
return
|
||||
new /obj/effect/critter/walkingmushroom(user.loc)
|
||||
new /mob/living/simple_animal/mushroom(user.loc)
|
||||
del(src)
|
||||
|
||||
user << "<span class='notice'>You plant the walking mushroom.</span>"
|
||||
|
||||
@@ -5,7 +5,7 @@ var/global/list/space_surprises = list( /obj/item/clothing/mask/facehugger/angr
|
||||
/obj/item/weapon/pickaxe/silver =4,
|
||||
/obj/item/weapon/pickaxe/drill =4,
|
||||
/obj/item/weapon/pickaxe/jackhammer =4,
|
||||
/obj/effect/critter/spesscarp/elite =3,
|
||||
/mob/living/simple_animal/carp =3,
|
||||
/obj/item/weapon/pickaxe/diamond =3,
|
||||
/obj/item/weapon/pickaxe/diamonddrill =3,
|
||||
/obj/item/weapon/pickaxe/gold =3,
|
||||
|
||||
@@ -348,10 +348,7 @@
|
||||
/proc/carp_migration() // -- Darem
|
||||
for(var/obj/effect/landmark/C in world)
|
||||
if(C.name == "carpspawn")
|
||||
if(prob(99))
|
||||
new /obj/effect/critter/spesscarp(C.loc)
|
||||
else
|
||||
new /obj/effect/critter/spesscarp/elite(C.loc)
|
||||
new /mob/living/simple_animal/carp(C.loc)
|
||||
//sleep(100)
|
||||
spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes.
|
||||
command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
|
||||
del(B)
|
||||
|
||||
for(var/obj/effect/critter/spesscarp/C in linkedholodeck)
|
||||
for(var/mob/living/simple_animal/carp/C in linkedholodeck)
|
||||
del(C)
|
||||
|
||||
holographic_items = A.copy_contents_to(linkedholodeck , 1)
|
||||
@@ -314,10 +314,7 @@
|
||||
T.temperature = 5000
|
||||
T.hotspot_expose(50000,50000,1)
|
||||
if(L.name=="Holocarp Spawn")
|
||||
if(prob(90))
|
||||
new /obj/effect/critter/spesscarp(L.loc)
|
||||
else
|
||||
new /obj/effect/critter/spesscarp/elite(L.loc)
|
||||
new /mob/living/simple_animal/carp(L.loc)
|
||||
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/id = null
|
||||
|
||||
/obj/machinery/computer/teleporter/New()
|
||||
src.id = text("[]", rand(1000, 9999))
|
||||
src.id = "[rand(1000, 9999)]"
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -22,21 +22,22 @@
|
||||
//Quickfix for hiding nuke disks and people getting to centcomm until I can get the attack_hand() stuff to incorperate this.
|
||||
for(var/obj/O in user.get_contents())
|
||||
if(istype(O, /obj/item/weapon/disk/nuclear) || istype(O, /obj/item/device/radio/beacon) || istype(O, /obj/item/weapon/storage/backpack/holding))
|
||||
user << "\red Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through."
|
||||
user << "<span class='notice'>Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.</span>"
|
||||
return
|
||||
|
||||
var/obj/S = null
|
||||
for(var/obj/effect/landmark/sloc in world)
|
||||
if (sloc.name != M.data)
|
||||
continue
|
||||
if (locate(/mob) in sloc.loc)
|
||||
if (locate(/mob/living) in sloc.loc)
|
||||
continue
|
||||
S = sloc
|
||||
break
|
||||
if (!S)
|
||||
if(!S)
|
||||
S = locate("landmark*[M.data]") // use old stype
|
||||
if (istype(S, /obj/effect/landmark/) && istype(S.loc, /turf))
|
||||
usr.loc = S.loc
|
||||
if(istype(S, /obj/effect/landmark/) && istype(S.loc, /turf))
|
||||
user.loc = S.loc
|
||||
user.drop_item()
|
||||
del(I)
|
||||
return
|
||||
else
|
||||
@@ -46,12 +47,6 @@
|
||||
/obj/machinery/computer/teleporter/attack_paw()
|
||||
src.attack_hand()
|
||||
|
||||
/obj/machinery/computer/teleporter/security/attackby(obj/item/weapon/W)
|
||||
src.attack_hand()
|
||||
|
||||
/obj/machinery/computer/teleporter/security/attack_paw()
|
||||
src.attack_hand()
|
||||
|
||||
/obj/machinery/teleport/station/attack_ai()
|
||||
src.attack_hand()
|
||||
|
||||
|
||||
@@ -47,12 +47,6 @@
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/spesscarp
|
||||
name = "carp delivery grenade"
|
||||
spawner_type = /obj/effect/critter/spesscarp
|
||||
spawner_type = /mob/living/simple_animal/carp
|
||||
deliveryamt = 5
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/elitespesscarp
|
||||
name = "elite carp delivery grenade"
|
||||
spawner_type = /obj/effect/critter/spesscarp/elite
|
||||
deliveryamt = 2
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
@@ -502,15 +502,6 @@ CRITTER GRENADE
|
||||
|
||||
/obj/item/weapon/spawnergrenade/spesscarp
|
||||
name = "carp delivery grenade"
|
||||
spawner_type = /obj/effect/critter/spesscarp
|
||||
spawner_type = /mob/living/simple_animal/carp
|
||||
deliveryamt = 5
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
|
||||
/obj/item/weapon/spawnergrenade/elitespesscarp
|
||||
name = "elite carp delivery grenade"
|
||||
spawner_type = /obj/effect/critter/spesscarp/elite
|
||||
deliveryamt = 2
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
|
||||
|
||||
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
@@ -184,7 +184,7 @@
|
||||
user << "\blue You put the [W] into [src]."
|
||||
else if (M in range(1)) //If someone is standing close enough, they can tell what it is...
|
||||
M.show_message(text("\blue [user] puts [W] into [src]."))
|
||||
else if (W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance...
|
||||
else if (W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance...
|
||||
M.show_message(text("\blue [user] puts [W] into [src]."))
|
||||
return
|
||||
|
||||
|
||||
@@ -457,11 +457,12 @@
|
||||
for(var/mob/living/carbon/M in D.loc)
|
||||
if(!istype(M,/mob/living/carbon)) continue
|
||||
if(M == user) continue
|
||||
//Syring gune attack logging by Yvarov
|
||||
//Syringe gun attack logging by Yvarov
|
||||
var/R
|
||||
for(var/datum/reagent/A in D.reagents.reagent_list)
|
||||
R += A.id + " ("
|
||||
R += num2text(A.volume) + "),"
|
||||
if(D.reagents)
|
||||
for(var/datum/reagent/A in D.reagents.reagent_list)
|
||||
R += A.id + " ("
|
||||
R += num2text(A.volume) + "),"
|
||||
if (istype(M, /mob))
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
@@ -469,10 +470,11 @@
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])</font>")
|
||||
D.reagents.trans_to(M, 15)
|
||||
if(D.reagents)
|
||||
D.reagents.trans_to(M, 15)
|
||||
M.take_organ_damage(5)
|
||||
for(var/mob/O in viewers(world.view, D))
|
||||
O.show_message(text("\red [] is hit by the syringe!", M.name), 1)
|
||||
O.show_message("\red [M.name] is hit by the syringe!", 1)
|
||||
|
||||
del(D)
|
||||
if(D)
|
||||
|
||||
@@ -40,41 +40,6 @@
|
||||
..()
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/effect/critter/killertomato
|
||||
name = "killer tomato"
|
||||
desc = "Oh shit, you're really fucked now."
|
||||
icon_state = "killertomato"
|
||||
health = 15
|
||||
max_health = 15
|
||||
aggressive = 1
|
||||
defensive = 0
|
||||
wanderer = 1
|
||||
atkcarbon = 1
|
||||
atksilicon = 1
|
||||
firevuln = 2
|
||||
brutevuln = 2
|
||||
|
||||
|
||||
Harvest(var/obj/item/weapon/W, var/mob/living/user)
|
||||
if(..())
|
||||
var/success = 0
|
||||
if(istype(W, /obj/item/weapon/butch))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
|
||||
success = 1
|
||||
if(istype(W, /obj/item/weapon/kitchenknife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
|
||||
success = 1
|
||||
if(success)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red [user.name] cuts apart the [src.name]!", 1)
|
||||
del(src)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
/obj/effect/critter/spore
|
||||
name = "plasma spore"
|
||||
desc = "A barely intelligent colony of organisms. Very volatile."
|
||||
@@ -147,105 +112,6 @@
|
||||
|
||||
|
||||
|
||||
/obj/effect/critter/spesscarp
|
||||
name = "Spess Carp"
|
||||
desc = "A ferocious, fang-bearing creature that resembles a fish."
|
||||
icon_state = "spesscarp"
|
||||
health = 25
|
||||
max_health = 25
|
||||
aggressive = 1
|
||||
defensive = 1
|
||||
wanderer = 1
|
||||
atkcarbon = 1
|
||||
atksilicon = 1
|
||||
atkcritter = 1
|
||||
atkmech = 1
|
||||
firevuln = 2
|
||||
brutevuln = 1
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15
|
||||
angertext = "lunges"
|
||||
attacktext = "bites"
|
||||
attack_sound = 'bite.ogg'
|
||||
attack_speed = 10
|
||||
var/stunchance = 10 // chance to tackle things down
|
||||
|
||||
|
||||
|
||||
Harvest(var/obj/item/weapon/W, var/mob/living/user)
|
||||
if(..())
|
||||
var/success = 0
|
||||
if(istype(W, /obj/item/weapon/butch))
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/carpmeat(src.loc)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/carpmeat(src.loc)
|
||||
success = 1
|
||||
if(istype(W, /obj/item/weapon/kitchenknife))
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/carpmeat(src.loc)
|
||||
success = 1
|
||||
if(success)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red [user.name] cuts apart the [src.name]!", 1)
|
||||
del(src)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
AfterAttack(var/mob/living/target)
|
||||
if(prob(stunchance))
|
||||
if(target.weakened <= 0)
|
||||
target.Weaken(rand(10, 15))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red <B>[src]</B> knocks down [target]!", 1)
|
||||
playsound(loc, 'pierce.ogg', 25, 1, -1)
|
||||
|
||||
|
||||
|
||||
/obj/effect/critter/spesscarp/elite
|
||||
desc = "Oh shit, you're really fucked now. It has an evil gleam in its eye."
|
||||
health = 50
|
||||
max_health = 50
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 35
|
||||
stunchance = 15
|
||||
attack_speed = 7
|
||||
// opensdoors = 1 would give all access dono if want
|
||||
|
||||
|
||||
|
||||
/obj/effect/critter/walkingmushroom
|
||||
name = "Walking Mushroom"
|
||||
desc = "A...huge...mushroom...with legs!?"
|
||||
icon_state = "walkingmushroom"
|
||||
health = 15
|
||||
max_health = 15
|
||||
aggressive = 0
|
||||
defensive = 0
|
||||
wanderer = 1
|
||||
atkcarbon = 0
|
||||
atksilicon = 0
|
||||
firevuln = 2
|
||||
brutevuln = 1
|
||||
wanderspeed = 1
|
||||
|
||||
|
||||
Harvest(var/obj/item/weapon/W, var/mob/living/user)
|
||||
if(..())
|
||||
var/success = 0
|
||||
if(istype(W, /obj/item/weapon/butch))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
|
||||
success = 1
|
||||
if(istype(W, /obj/item/weapon/kitchenknife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
|
||||
success = 1
|
||||
if(success)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red [user.name] cuts apart the [src.name]!", 1)
|
||||
del(src)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
/obj/effect/critter/lizard
|
||||
name = "Lizard"
|
||||
desc = "A cute tiny lizard."
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
#define BEAR_STANCE_ALERT 2
|
||||
#define BEAR_STANCE_ATTACK 3
|
||||
#define BEAR_STANCE_ATTACKING 4
|
||||
#define BEAR_STANCE_TIRED 4
|
||||
#define BEAR_STANCE_TIRED 5
|
||||
|
||||
//Space bears!
|
||||
/mob/living/simple_animal/bear
|
||||
name = "space bear"
|
||||
desc = "RawrRawr!!"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "bearspace"
|
||||
icon_living = "bearspace"
|
||||
icon_dead = "bear_d"
|
||||
icon_state = "bear"
|
||||
icon_living = "bear"
|
||||
icon_dead = "bear_dead"
|
||||
icon_gib = "bear_gib"
|
||||
speak = list("RAWR!","Rawr!","GRR!","Growl!")
|
||||
speak_emote = list("growls", "roars")
|
||||
emote_hear = list("rawrs","grumbles","grawls")
|
||||
@@ -25,6 +25,7 @@
|
||||
response_harm = "pokes the"
|
||||
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
|
||||
//Space bears aren't affected by atmos.
|
||||
@@ -53,8 +54,8 @@
|
||||
..()
|
||||
|
||||
if(!stat)
|
||||
if( loc && istype(loc,/turf/space) )
|
||||
icon_state = "bearspace"
|
||||
if(loc && istype(loc,/turf/space))
|
||||
icon_state = "bear"
|
||||
else
|
||||
icon_state = "bearfloor"
|
||||
|
||||
@@ -111,12 +112,12 @@
|
||||
stance = BEAR_STANCE_ALERT
|
||||
stance_step = 5 //Make it very alert, so it quickly attacks again if a mob returns
|
||||
return
|
||||
if( !(target_mob in viewers(7,src)) )
|
||||
if(!(target_mob in viewers(7,src)))
|
||||
stance = BEAR_STANCE_ALERT
|
||||
stance_step = 5 //Make it very alert, so it quickly attacks again if a mob returns
|
||||
target_mob = null
|
||||
return
|
||||
if( get_dist(src, target_mob) <= 1 ) //Attacking
|
||||
if(get_dist(src, target_mob) <= 1) //Attacking
|
||||
emote( pick( list("slashes at [target_mob]", "bites [target_mob]") ) )
|
||||
|
||||
var/damage = rand(20,30)
|
||||
@@ -130,7 +131,7 @@
|
||||
var/mob/living/L = target_mob
|
||||
L.adjustBruteLoss(damage)
|
||||
|
||||
if( stance_step >= 20 ) //attacks for 20 ticks, then it gets tired and needs to rest
|
||||
if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest
|
||||
emote( "is worn out and needs to rest" )
|
||||
stance = BEAR_STANCE_TIRED
|
||||
stance_step = 0
|
||||
@@ -160,5 +161,5 @@
|
||||
target_mob = M
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bear/Process_Spacemove(var/check_drift = 0)
|
||||
/mob/living/simple_animal/carp/Process_Spacemove(var/check_drift = 0)
|
||||
return //No drifting in space for space bears!
|
||||
@@ -0,0 +1,93 @@
|
||||
#define CARP_STANCE_IDLE 1
|
||||
#define CARP_STANCE_ATTACK 2
|
||||
#define CARP_STANCE_ATTACKING 3
|
||||
|
||||
/mob/living/simple_animal/carp
|
||||
name = "space carp"
|
||||
desc = "A ferocious, fang-bearing creature that resembles a fish."
|
||||
icon_state = "carp"
|
||||
icon_living = "carp"
|
||||
icon_dead = "carp_dead"
|
||||
icon_gib = "carp_gib"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
|
||||
harm_intent_damage = 8
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15
|
||||
attacktext = "bites"
|
||||
attack_sound = 'bite.ogg'
|
||||
|
||||
//Space carp aren't affected by atmos.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
var/stance = CARP_STANCE_IDLE //Used to determine behavior
|
||||
var/stance_step = 0 //Used to delay checks depending on what stance the bear is in
|
||||
var/mob/living/target_mob //Once the bear enters attack stance, it will try to chase this mob. This it to prevent it changing it's mind between multiple mobs.
|
||||
|
||||
/mob/living/simple_animal/carp/Life()
|
||||
..()
|
||||
|
||||
if(!stat)
|
||||
switch(stance)
|
||||
if(CARP_STANCE_IDLE)
|
||||
stop_automated_movement = 0
|
||||
stance_step++
|
||||
if(stance_step > 5)
|
||||
stance_step = 0
|
||||
for( var/mob/living/L in viewers(7,src) )
|
||||
if(iscarp(L)) continue
|
||||
if(!L.stat)
|
||||
emote("gnashes at [L]")
|
||||
stance = CARP_STANCE_ATTACK
|
||||
target_mob = L
|
||||
break
|
||||
|
||||
if(CARP_STANCE_ATTACK) //This one should only be active for one tick
|
||||
stop_automated_movement = 1
|
||||
if(!target_mob || target_mob.stat)
|
||||
stance = CARP_STANCE_IDLE
|
||||
stance_step = 5 //Make it very alert, so it quickly attacks again if a mob returns
|
||||
if(target_mob in viewers(7,src))
|
||||
walk_to(src, target_mob, 1, 3)
|
||||
stance = CARP_STANCE_ATTACKING
|
||||
stance_step = 0
|
||||
|
||||
if(CARP_STANCE_ATTACKING)
|
||||
stop_automated_movement = 1
|
||||
stance_step++
|
||||
if(!target_mob || target_mob.stat)
|
||||
stance = CARP_STANCE_IDLE
|
||||
stance_step = 3 //Make it very alert, so it quickly attacks again if a mob returns
|
||||
target_mob = null
|
||||
return
|
||||
if(!(target_mob in viewers(7,src)))
|
||||
stance = CARP_STANCE_IDLE
|
||||
stance_step = 1
|
||||
target_mob = null
|
||||
return
|
||||
if(get_dist(src, target_mob) <= 1) //Attacking
|
||||
if(isliving(target_mob))
|
||||
var/mob/living/L = target_mob
|
||||
L.attack_animal(src)
|
||||
if(prob(10))
|
||||
L.Weaken(5)
|
||||
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
|
||||
|
||||
/mob/living/simple_animal/carp/Process_Spacemove(var/check_drift = 0)
|
||||
return //No drifting in space for space carp! //original comments do not steal
|
||||
@@ -2,7 +2,6 @@
|
||||
/mob/living/simple_animal/cat
|
||||
name = "cat"
|
||||
desc = "Kitty!!"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "cat"
|
||||
icon_living = "cat"
|
||||
icon_dead = "cat_dead"
|
||||
@@ -35,7 +34,7 @@
|
||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
||||
if(!M.stat)
|
||||
M.splat()
|
||||
emote("SPLATS \the [M]")
|
||||
emote("splats \the [M]")
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
break
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
name = "\improper corgi"
|
||||
real_name = "corgi"
|
||||
desc = "It's a corgi."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "corgi"
|
||||
icon_living = "corgi"
|
||||
icon_dead = "corgi_dead"
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
//Look Sir, free crabs!
|
||||
/mob/living/simple_animal/crab
|
||||
name = "crab"
|
||||
real_name = "crab"
|
||||
desc = "Free crabs!"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "crab"
|
||||
icon_living = "crab"
|
||||
icon_dead = "crab_dead"
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
/mob/living/simple_animal
|
||||
name = "animal"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
var/icon_living = ""
|
||||
var/icon_dead = ""
|
||||
var/icon_gib = null //We only try to show a gibbing animation if this exists.
|
||||
maxHealth = 20
|
||||
var/list/speak = list()
|
||||
var/list/speak_emote = list()// Emotes while speaking IE: Ian [emote], [text] -- Ian barks, "WOOF!". Spoken text is generated from the speak variable.
|
||||
var/speak_chance = 0
|
||||
var/list/emote_hear = list() //EHearable emotes
|
||||
var/list/emote_hear = list() //Hearable emotes
|
||||
var/list/emote_see = list() //Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps
|
||||
health = 20
|
||||
var/turns_per_move = 1
|
||||
@@ -232,6 +234,8 @@
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/gib()
|
||||
if(icon_gib)
|
||||
flick(icon_gib, src)
|
||||
if(meat_amount && meat_type)
|
||||
for(var/i = 0; i < meat_amount; i++)
|
||||
new meat_type(src.loc)
|
||||
@@ -272,13 +276,13 @@
|
||||
|
||||
switch(M.a_intent)
|
||||
|
||||
if ("help")
|
||||
if("help")
|
||||
if (health > 0)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message("\blue [M] [response_help] [src]")
|
||||
|
||||
if ("grab")
|
||||
if("grab")
|
||||
if (M == src)
|
||||
return
|
||||
if (nopush)
|
||||
@@ -297,13 +301,13 @@
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
|
||||
|
||||
if ("hurt")
|
||||
if("hurt")
|
||||
health -= harm_intent_damage
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message("\red [M] [response_harm] [src]")
|
||||
|
||||
if ("disarm")
|
||||
if("disarm")
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message("\blue [M] [response_disarm] [src]")
|
||||
@@ -325,6 +329,13 @@
|
||||
M.show_message("\blue [user] applies the [MED] on [src]")
|
||||
else
|
||||
user << "\blue this [src] is dead, medical items won't bring it back to life."
|
||||
if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
|
||||
if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch))
|
||||
new meat_type (get_turf(src))
|
||||
if(prob(95))
|
||||
del(src)
|
||||
return
|
||||
gib()
|
||||
else
|
||||
if(O.force)
|
||||
health -= O.force
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//Mouse
|
||||
/mob/living/simple_animal/mouse
|
||||
name = "mouse"
|
||||
desc = "It's a nasty, ugly, evil, disease-ridden rodent."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "mouse_gray"
|
||||
icon_living = "mouse_gray"
|
||||
icon_dead = "mouse_gray_dead"
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/mob/living/simple_animal/mushroom
|
||||
name = "walking mushroom"
|
||||
desc = "It's a massive mushroom... with legs?"
|
||||
icon_state = "mushroom"
|
||||
icon_living = "mushroom"
|
||||
icon_dead = "mushroom_dead"
|
||||
speak_chance = 0
|
||||
turns_per_move = 1
|
||||
health = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "whacks the"
|
||||
harm_intent_damage = 5
|
||||
@@ -0,0 +1,16 @@
|
||||
/mob/living/simple_animal/tomato
|
||||
name = "tomato"
|
||||
desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
|
||||
icon_state = "tomato"
|
||||
icon_living = "tomato"
|
||||
icon_dead = "tomato_dead"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
health = 15
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
|
||||
response_help = "prods the"
|
||||
response_disarm = "pushes aside the"
|
||||
response_harm = "smacks the"
|
||||
harm_intent_damage = 5
|
||||
|
||||
/mob/living/simple_animal/tomato
|
||||
@@ -70,6 +70,11 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/iscarp(A)
|
||||
if(istype(A, /mob/living/simple_animal/carp))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/isAI(A)
|
||||
if(istype(A, /mob/living/silicon/ai))
|
||||
return 1
|
||||
|
||||
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 214 KiB After Width: | Height: | Size: 178 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
@@ -5,205 +5,6 @@
|
||||
// END_INTERNALS
|
||||
// BEGIN_FILE_DIR
|
||||
#define FILE_DIR .
|
||||
#define FILE_DIR "code"
|
||||
#define FILE_DIR "code/ATMOSPHERICS"
|
||||
#define FILE_DIR "code/ATMOSPHERICS/components"
|
||||
#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices"
|
||||
#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices"
|
||||
#define FILE_DIR "code/ATMOSPHERICS/components/unary"
|
||||
#define FILE_DIR "code/datums"
|
||||
#define FILE_DIR "code/datums/diseases"
|
||||
#define FILE_DIR "code/datums/helper_datums"
|
||||
#define FILE_DIR "code/datums/spells"
|
||||
#define FILE_DIR "code/defines"
|
||||
#define FILE_DIR "code/defines/area"
|
||||
#define FILE_DIR "code/defines/mob"
|
||||
#define FILE_DIR "code/defines/mob/dead"
|
||||
#define FILE_DIR "code/defines/mob/living"
|
||||
#define FILE_DIR "code/defines/mob/living/carbon"
|
||||
#define FILE_DIR "code/defines/mob/living/silicon"
|
||||
#define FILE_DIR "code/defines/obj"
|
||||
#define FILE_DIR "code/defines/procs"
|
||||
#define FILE_DIR "code/defines/tanning"
|
||||
#define FILE_DIR "code/FEA"
|
||||
#define FILE_DIR "code/game"
|
||||
#define FILE_DIR "code/game/area"
|
||||
#define FILE_DIR "code/game/asteroid"
|
||||
#define FILE_DIR "code/game/gamemodes"
|
||||
#define FILE_DIR "code/game/gamemodes/blob"
|
||||
#define FILE_DIR "code/game/gamemodes/blob/blobs"
|
||||
#define FILE_DIR "code/game/gamemodes/changeling"
|
||||
#define FILE_DIR "code/game/gamemodes/cult"
|
||||
#define FILE_DIR "code/game/gamemodes/events"
|
||||
#define FILE_DIR "code/game/gamemodes/events/holidays"
|
||||
#define FILE_DIR "code/game/gamemodes/extended"
|
||||
#define FILE_DIR "code/game/gamemodes/malfunction"
|
||||
#define FILE_DIR "code/game/gamemodes/meteor"
|
||||
#define FILE_DIR "code/game/gamemodes/nuclear"
|
||||
#define FILE_DIR "code/game/gamemodes/revolution"
|
||||
#define FILE_DIR "code/game/gamemodes/sandbox"
|
||||
#define FILE_DIR "code/game/gamemodes/traitor"
|
||||
#define FILE_DIR "code/game/gamemodes/wizard"
|
||||
#define FILE_DIR "code/game/jobs"
|
||||
#define FILE_DIR "code/game/jobs/job"
|
||||
#define FILE_DIR "code/game/machinery"
|
||||
#define FILE_DIR "code/game/machinery/atmoalter"
|
||||
#define FILE_DIR "code/game/machinery/bots"
|
||||
#define FILE_DIR "code/game/machinery/computer"
|
||||
#define FILE_DIR "code/game/machinery/doors"
|
||||
#define FILE_DIR "code/game/machinery/embedded_controller"
|
||||
#define FILE_DIR "code/game/machinery/kitchen"
|
||||
#define FILE_DIR "code/game/machinery/pipe"
|
||||
#define FILE_DIR "code/game/machinery/telecomms"
|
||||
#define FILE_DIR "code/game/magic"
|
||||
#define FILE_DIR "code/game/magic/cultist"
|
||||
#define FILE_DIR "code/game/mecha"
|
||||
#define FILE_DIR "code/game/mecha/combat"
|
||||
#define FILE_DIR "code/game/mecha/equipment"
|
||||
#define FILE_DIR "code/game/mecha/equipment/tools"
|
||||
#define FILE_DIR "code/game/mecha/equipment/weapons"
|
||||
#define FILE_DIR "code/game/mecha/medical"
|
||||
#define FILE_DIR "code/game/mecha/working"
|
||||
#define FILE_DIR "code/game/objects"
|
||||
#define FILE_DIR "code/game/objects/alien"
|
||||
#define FILE_DIR "code/game/objects/closets"
|
||||
#define FILE_DIR "code/game/objects/closets/secure"
|
||||
#define FILE_DIR "code/game/objects/devices"
|
||||
#define FILE_DIR "code/game/objects/devices/PDA"
|
||||
#define FILE_DIR "code/game/objects/grenades"
|
||||
#define FILE_DIR "code/game/objects/items"
|
||||
#define FILE_DIR "code/game/objects/items/weapons"
|
||||
#define FILE_DIR "code/game/objects/items/weapons/implants"
|
||||
#define FILE_DIR "code/game/objects/radio"
|
||||
#define FILE_DIR "code/game/objects/secstorage"
|
||||
#define FILE_DIR "code/game/objects/stacks"
|
||||
#define FILE_DIR "code/game/objects/storage"
|
||||
#define FILE_DIR "code/game/objects/tanks"
|
||||
#define FILE_DIR "code/game/vehicles"
|
||||
#define FILE_DIR "code/game/vehicles/airtight"
|
||||
#define FILE_DIR "code/game/verbs"
|
||||
#define FILE_DIR "code/js"
|
||||
#define FILE_DIR "code/modules"
|
||||
#define FILE_DIR "code/modules/admin"
|
||||
#define FILE_DIR "code/modules/admin/DB ban"
|
||||
#define FILE_DIR "code/modules/admin/verbs"
|
||||
#define FILE_DIR "code/modules/assembly"
|
||||
#define FILE_DIR "code/modules/chemical"
|
||||
#define FILE_DIR "code/modules/client"
|
||||
#define FILE_DIR "code/modules/clothing"
|
||||
#define FILE_DIR "code/modules/clothing/glasses"
|
||||
#define FILE_DIR "code/modules/clothing/gloves"
|
||||
#define FILE_DIR "code/modules/clothing/head"
|
||||
#define FILE_DIR "code/modules/clothing/masks"
|
||||
#define FILE_DIR "code/modules/clothing/shoes"
|
||||
#define FILE_DIR "code/modules/clothing/spacesuits"
|
||||
#define FILE_DIR "code/modules/clothing/suits"
|
||||
#define FILE_DIR "code/modules/clothing/under"
|
||||
#define FILE_DIR "code/modules/clothing/uniforms"
|
||||
#define FILE_DIR "code/modules/critters"
|
||||
#define FILE_DIR "code/modules/critters/hivebots"
|
||||
#define FILE_DIR "code/modules/detectivework"
|
||||
#define FILE_DIR "code/modules/flufftext"
|
||||
#define FILE_DIR "code/modules/food"
|
||||
#define FILE_DIR "code/modules/maps"
|
||||
#define FILE_DIR "code/modules/mining"
|
||||
#define FILE_DIR "code/modules/mob"
|
||||
#define FILE_DIR "code/modules/mob/dead"
|
||||
#define FILE_DIR "code/modules/mob/dead/observer"
|
||||
#define FILE_DIR "code/modules/mob/living"
|
||||
#define FILE_DIR "code/modules/mob/living/blob"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/alien/larva"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/brain"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/human"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/metroid"
|
||||
#define FILE_DIR "code/modules/mob/living/carbon/monkey"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon/ai"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon/decoy"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon/pai"
|
||||
#define FILE_DIR "code/modules/mob/living/silicon/robot"
|
||||
#define FILE_DIR "code/modules/mob/living/simple_animal"
|
||||
#define FILE_DIR "code/modules/mob/new_player"
|
||||
#define FILE_DIR "code/modules/mob/organ"
|
||||
#define FILE_DIR "code/modules/paperwork"
|
||||
#define FILE_DIR "code/modules/power"
|
||||
#define FILE_DIR "code/modules/power/antimatter"
|
||||
#define FILE_DIR "code/modules/power/singularity"
|
||||
#define FILE_DIR "code/modules/power/singularity/particle_accelerator"
|
||||
#define FILE_DIR "code/modules/projectiles"
|
||||
#define FILE_DIR "code/modules/projectiles/ammunition"
|
||||
#define FILE_DIR "code/modules/projectiles/guns"
|
||||
#define FILE_DIR "code/modules/projectiles/guns/energy"
|
||||
#define FILE_DIR "code/modules/projectiles/guns/projectile"
|
||||
#define FILE_DIR "code/modules/projectiles/projectile"
|
||||
#define FILE_DIR "code/modules/recycling"
|
||||
#define FILE_DIR "code/modules/research"
|
||||
#define FILE_DIR "code/modules/scripting"
|
||||
#define FILE_DIR "code/modules/scripting/AST"
|
||||
#define FILE_DIR "code/modules/scripting/AST/Operators"
|
||||
#define FILE_DIR "code/modules/scripting/Implementations"
|
||||
#define FILE_DIR "code/modules/scripting/Interpreter"
|
||||
#define FILE_DIR "code/modules/scripting/Parser"
|
||||
#define FILE_DIR "code/modules/scripting/Scanner"
|
||||
#define FILE_DIR "code/modules/security levels"
|
||||
#define FILE_DIR "code/unused"
|
||||
#define FILE_DIR "code/unused/beast"
|
||||
#define FILE_DIR "code/unused/computer2"
|
||||
#define FILE_DIR "code/unused/disease2"
|
||||
#define FILE_DIR "code/unused/gamemodes"
|
||||
#define FILE_DIR "code/unused/hivebot"
|
||||
#define FILE_DIR "code/unused/mining"
|
||||
#define FILE_DIR "code/unused/optics"
|
||||
#define FILE_DIR "code/unused/pda2"
|
||||
#define FILE_DIR "code/unused/powerarmor"
|
||||
#define FILE_DIR "code/unused/spacecraft"
|
||||
#define FILE_DIR "code/WorkInProgress"
|
||||
#define FILE_DIR "code/WorkInProgress/carn"
|
||||
#define FILE_DIR "code/WorkInProgress/mapload"
|
||||
#define FILE_DIR "code/WorkInProgress/organs"
|
||||
#define FILE_DIR "code/WorkInProgress/virus2"
|
||||
#define FILE_DIR "html"
|
||||
#define FILE_DIR "icons"
|
||||
#define FILE_DIR "icons/48x48"
|
||||
#define FILE_DIR "icons/effects"
|
||||
#define FILE_DIR "icons/mecha"
|
||||
#define FILE_DIR "icons/misc"
|
||||
#define FILE_DIR "icons/mob"
|
||||
#define FILE_DIR "icons/obj"
|
||||
#define FILE_DIR "icons/obj/assemblies"
|
||||
#define FILE_DIR "icons/obj/atmospherics"
|
||||
#define FILE_DIR "icons/obj/clothing"
|
||||
#define FILE_DIR "icons/obj/doors"
|
||||
#define FILE_DIR "icons/obj/machines"
|
||||
#define FILE_DIR "icons/obj/pipes"
|
||||
#define FILE_DIR "icons/pda_icons"
|
||||
#define FILE_DIR "icons/spideros_icons"
|
||||
#define FILE_DIR "icons/Testing"
|
||||
#define FILE_DIR "icons/turf"
|
||||
#define FILE_DIR "icons/unused"
|
||||
#define FILE_DIR "icons/vehicles"
|
||||
#define FILE_DIR "icons/vending_icons"
|
||||
#define FILE_DIR "interface"
|
||||
#define FILE_DIR "maps"
|
||||
#define FILE_DIR "maps/RandomZLevels"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/AI"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
#define FILE_DIR "sound/effects"
|
||||
#define FILE_DIR "sound/hallucinations"
|
||||
#define FILE_DIR "sound/items"
|
||||
#define FILE_DIR "sound/machines"
|
||||
#define FILE_DIR "sound/mecha"
|
||||
#define FILE_DIR "sound/misc"
|
||||
#define FILE_DIR "sound/piano"
|
||||
#define FILE_DIR "sound/voice"
|
||||
#define FILE_DIR "sound/weapons"
|
||||
#define FILE_DIR "tools"
|
||||
#define FILE_DIR "tools/Redirector"
|
||||
// END_FILE_DIR
|
||||
|
||||
// BEGIN_PREFERENCES
|
||||
@@ -1050,14 +851,17 @@
|
||||
#include "code\modules\mob\living\silicon\robot\wires.dm"
|
||||
#include "code\modules\mob\living\simple_animal\bear.dm"
|
||||
#include "code\modules\mob\living\simple_animal\behemoth.dm"
|
||||
#include "code\modules\mob\living\simple_animal\carp.dm"
|
||||
#include "code\modules\mob\living\simple_animal\cat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\constructs.dm"
|
||||
#include "code\modules\mob\living\simple_animal\corgi.dm"
|
||||
#include "code\modules\mob\living\simple_animal\crab.dm"
|
||||
#include "code\modules\mob\living\simple_animal\life.dm"
|
||||
#include "code\modules\mob\living\simple_animal\mouse.dm"
|
||||
#include "code\modules\mob\living\simple_animal\mushroom.dm"
|
||||
#include "code\modules\mob\living\simple_animal\parrot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\shade.dm"
|
||||
#include "code\modules\mob\living\simple_animal\tomato.dm"
|
||||
#include "code\modules\mob\living\simple_animal\update_icons.dm"
|
||||
#include "code\modules\mob\living\simple_animal\worm.dm"
|
||||
#include "code\modules\mob\new_player\hud.dm"
|
||||
|
||||