mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-25 13:06:38 +01:00
fix and merge conflicting files
This commit is contained in:
@@ -16,9 +16,9 @@
|
||||
ai_inactive = TRUE //Always off
|
||||
show_stat_health = FALSE //We will do it ourselves
|
||||
|
||||
response_help = "pats the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pats"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 2
|
||||
melee_damage_lower = 10
|
||||
@@ -241,7 +241,7 @@
|
||||
|
||||
//Message
|
||||
blob.visible_message("<b>[src.name]</b> collapses into a gooey blob!")
|
||||
|
||||
|
||||
//Duration of the to_puddle iconstate that the blob starts with
|
||||
sleep(13)
|
||||
blob.update_icon() //Will remove the collapse anim
|
||||
@@ -268,7 +268,7 @@
|
||||
if(pulledby)
|
||||
pulledby.stop_pulling()
|
||||
stop_pulling()
|
||||
|
||||
|
||||
//Stop healing if we are
|
||||
if(blob.healing)
|
||||
blob.healing.expire()
|
||||
@@ -278,7 +278,7 @@
|
||||
|
||||
//Message
|
||||
blob.visible_message("<b>[src.name]</b> reshapes into a humanoid appearance!")
|
||||
|
||||
|
||||
//Duration of above animation
|
||||
sleep(8)
|
||||
|
||||
@@ -303,7 +303,7 @@
|
||||
var/obj/belly/B = belly
|
||||
B.forceMove(src)
|
||||
B.owner = src
|
||||
|
||||
|
||||
//Get rid of friend blob
|
||||
qdel(blob)
|
||||
|
||||
|
||||
+1288
-1285
File diff suppressed because it is too large
Load Diff
@@ -33,7 +33,10 @@
|
||||
"Fox" = "fox",
|
||||
"Parrot" = "parrot",
|
||||
"Rabbit" = "rabbit",
|
||||
"Bear" = "bear" //VOREStation Edit
|
||||
"Bear" = "bear", //VOREStation Edit
|
||||
"Raccoon" = "raccoon", //Chompstation Edit
|
||||
"Rat" = "rat", //Chompstation Edit
|
||||
"Panther" = "panther" //Chompstation Edit
|
||||
)
|
||||
|
||||
var/global/list/possible_say_verbs = list(
|
||||
@@ -42,7 +45,8 @@
|
||||
"Beep" = list("beeps","beeps loudly","boops"),
|
||||
"Chirp" = list("chirps","chirrups","cheeps"),
|
||||
"Feline" = list("purrs","yowls","meows"),
|
||||
"Canine" = list("yaps","barks","woofs")
|
||||
"Canine" = list("yaps","barks","woofs"),
|
||||
"Rodent" = list("squeaks", "SQUEAKS", "sqiks")//Chompstation Edit
|
||||
)
|
||||
|
||||
var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking
|
||||
@@ -315,7 +319,7 @@
|
||||
return
|
||||
|
||||
close_up()
|
||||
|
||||
/*CHOMPstation edit | redefined in pai_vr.dm
|
||||
/mob/living/silicon/pai/proc/choose_chassis()
|
||||
set category = "pAI Commands"
|
||||
set name = "Choose Chassis"
|
||||
@@ -328,11 +332,11 @@
|
||||
if(!choice) return
|
||||
|
||||
icon_state = possible_chassis[choice]
|
||||
finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")
|
||||
finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")//CHOMPStation edit
|
||||
|
||||
chassis = possible_chassis[choice]
|
||||
verbs |= /mob/living/proc/hide
|
||||
|
||||
*/
|
||||
/mob/living/silicon/pai/proc/choose_verbs()
|
||||
set category = "pAI Commands"
|
||||
set name = "Choose Speech Verbs"
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
/mob/living/silicon/pai
|
||||
var/people_eaten = 0
|
||||
icon = 'icons/mob/pai_vr.dmi'
|
||||
var/global/list/wide_chassis = list(
|
||||
"rat",
|
||||
"panther"
|
||||
)
|
||||
|
||||
/mob/living/silicon/pai/proc/pai_nom(var/mob/living/T in oview(1))
|
||||
set name = "pAI Nom"
|
||||
@@ -31,6 +35,13 @@
|
||||
else if(people_eaten && resting)
|
||||
icon_state = "[chassis]_rest_full"
|
||||
|
||||
if(chassis in wide_chassis)
|
||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
||||
pixel_x = -16
|
||||
else
|
||||
icon = 'icons/mob/pai_vr.dmi'
|
||||
pixel_x = 0
|
||||
|
||||
/mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone.
|
||||
..()
|
||||
update_fullness_pai()
|
||||
@@ -42,3 +53,21 @@
|
||||
icon_state = "[chassis]_full"
|
||||
else if(people_eaten && resting)
|
||||
icon_state = "[chassis]_rest_full"
|
||||
|
||||
if(chassis in wide_chassis)
|
||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
||||
pixel_x = -16
|
||||
else
|
||||
icon = 'icons/mob/pai_vr.dmi'
|
||||
pixel_x = 0
|
||||
//proc override to avoid pAI players being invisible while the chassis selection window is open
|
||||
/mob/living/silicon/pai/proc/choose_chassis()
|
||||
set category = "pAI Commands"
|
||||
set name = "Choose Chassis"
|
||||
var/choice
|
||||
|
||||
choice = input(usr,"What would you like to use for your mobile chassis icon?") as null|anything in possible_chassis
|
||||
if(!choice) return
|
||||
chassis = possible_chassis[choice]
|
||||
verbs |= /mob/living/proc/hide
|
||||
update_icon()
|
||||
|
||||
@@ -421,3 +421,27 @@
|
||||
T.apply_damage(20, HALLOSS,, armor_block, armor_soak)
|
||||
if(prob(33))
|
||||
T.apply_effect(3, WEAKEN, armor_block)
|
||||
|
||||
/mob/living/silicon/robot/proc/reskin_booze()
|
||||
set name = "Change Drink Color"
|
||||
set category = "Robot Commands"
|
||||
set desc = "Choose the color of drink displayed inside you."
|
||||
|
||||
var/mob/M = usr
|
||||
var/list/options = list()
|
||||
options["Beer"] = "Beer Buddy"
|
||||
options["Curacao"] = "Brilliant Blue"
|
||||
options["Coffee"] = "Caffine Dispenser"
|
||||
options["Space Mountain Wind"] = "Gamer Juice Maker"
|
||||
options["Whiskey Soda"] = "Liqour Licker"
|
||||
options["Grape Soda"] = "The Grapist"
|
||||
options["Demon's Blood"] = "Vampire's Aid"
|
||||
options["Slav Vodka"] = "Vodka Komrade"
|
||||
var/choice = input(M,"Choose your drink!") in options
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
icontype = options[choice]
|
||||
var/active_sound = 'sound/effects/bubbles.ogg'
|
||||
playsound(src.loc, "[active_sound]", 100, 0, 4)
|
||||
M << "Your Tank now displays [choice]. Drink up and enjoy!"
|
||||
updateicon()
|
||||
return 1
|
||||
|
||||
@@ -683,4 +683,34 @@
|
||||
/obj/item/device/dogborg/sleeper/medical
|
||||
name = "Borg Mounted Sleeper"
|
||||
desc = "A stretchy stomach for a vore enabled medical borg, it can hold crew for healing or as emergency power."
|
||||
icon_state = "belly-medical"
|
||||
icon_state = "belly-medical"
|
||||
|
||||
/obj/item/device/dogborg/sleeper/compactor/brewer //Boozehound gut.
|
||||
name = "Brew Belly"
|
||||
desc = "A mounted drunk tank unit with fuel processor."
|
||||
icon_state = "brewer"
|
||||
injection_chems = list("vodka","beer","gin") //Injected alcohol is 3 times as strong
|
||||
max_item_count = 1
|
||||
|
||||
/obj/item/device/dogborg/sleeper/compactor/brewer/inject_chem(mob/user, chem)
|
||||
if(patient && patient.reagents)
|
||||
if(chem in injection_chems + "inaprovaline")
|
||||
if(hound.cell.charge < 200) //This is so borgs don't kill themselves with it.
|
||||
to_chat(hound, "<span class='notice'>You don't have enough power to synthesize fluids.</span>")
|
||||
return
|
||||
else if(patient.reagents.get_reagent_amount(chem) + 10 >= 50) //Preventing people from accidentally killing themselves by trying to inject too many chemicals!
|
||||
to_chat(hound, "<span class='notice'>Your stomach is currently too full of fluids to secrete more fluids of this kind.</span>")
|
||||
else if(patient.reagents.get_reagent_amount(chem) + 10 <= 50) //No overdoses for you
|
||||
patient.reagents.add_reagent(chem, inject_amount)
|
||||
drain(100) //-100 charge per injection
|
||||
var/units = round(patient.reagents.get_reagent_amount(chem))
|
||||
to_chat(hound, "<span class='notice'>Injecting [units] unit\s of [chemical_reagents_list[chem]] into occupant.</span>") //If they were immersed, the reagents wouldn't leave with them.
|
||||
|
||||
// PLACEHOLDER SERVICE BORG BELLY
|
||||
/obj/item/device/dogborg/sleeper/servborg
|
||||
name = "Gourmet Gut"
|
||||
desc = "An underslung microwave, with optional fuel processor."
|
||||
icon_state = "decompiler"
|
||||
max_item_count = 10
|
||||
injection_chems = null
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
robot_modules["Janihound"] = /obj/item/weapon/robot_module/robot/scrubpup
|
||||
robot_modules["Sci-borg"] = /obj/item/weapon/robot_module/robot/science
|
||||
robot_modules["Pupdozer"] = /obj/item/weapon/robot_module/robot/engiedog
|
||||
robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/booze
|
||||
robot_modules["Service-borg"] = /obj/item/weapon/robot_module/robot/servborg
|
||||
robot_modules["Vore Services"] = /obj/item/weapon/robot_module/robot/servore//edit chompers
|
||||
robot_modules["Medivore"] = /obj/item/weapon/robot_module/robot/medical/vore
|
||||
return 1
|
||||
@@ -445,6 +447,105 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/booze
|
||||
name = "BoozeHound robot module"
|
||||
channels = list("Service" = 1)
|
||||
languages = list(
|
||||
LANGUAGE_SOL_COMMON = 1,
|
||||
LANGUAGE_UNATHI = 1,
|
||||
LANGUAGE_SIIK = 1,
|
||||
LANGUAGE_AKHANI = 1,
|
||||
LANGUAGE_SKRELLIAN = 1,
|
||||
LANGUAGE_SKRELLIANFAR = 0,
|
||||
LANGUAGE_ROOTLOCAL = 0,
|
||||
LANGUAGE_TRADEBAND = 1,
|
||||
LANGUAGE_GUTTER = 0,
|
||||
LANGUAGE_SCHECHI = 1,
|
||||
LANGUAGE_EAL = 1,
|
||||
LANGUAGE_TERMINUS = 1,
|
||||
LANGUAGE_SIGN = 0
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/booze
|
||||
sprites = list(
|
||||
"Beer Buddy" = "boozeborg",
|
||||
"Brilliant Blue" = "boozeborg(blue)",
|
||||
"Caffine Dispenser" = "boozeborg(coffee)",
|
||||
"Gamer Juice Maker" = "boozeborg(green)",
|
||||
"Liqour Licker" = "boozeborg(orange)",
|
||||
"The Grapist" = "boozeborg(purple)",
|
||||
"Vampire's Aid" = "boozeborg(red)",
|
||||
"Vodka Komrade" = "boozeborg(vodka)"
|
||||
)
|
||||
/obj/item/weapon/robot_module/robot/booze/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/gripper/service(src)
|
||||
//src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
|
||||
//src.modules += new /obj/item/weapon/material/minihoe(src)
|
||||
//src.modules += new /obj/item/device/analyzer/plant_analyzer(src)
|
||||
//src.modules += new /obj/item/weapon/storage/bag/plants(src)
|
||||
//src.modules += new /obj/item/weapon/robot_harvester(src)
|
||||
src.modules += new /obj/item/weapon/material/knife(src)
|
||||
src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src)
|
||||
src.modules += new /obj/item/device/multitool(src) //to freeze trays
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
src.modules += new /obj/item/device/dogborg/sleeper/compactor/brewer(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker(src)//For holding the ALCOHOL
|
||||
src.emag = new /obj/item/weapon/dogborg/pounce(src)
|
||||
R.verbs += /mob/living/silicon/robot/proc/reskin_booze
|
||||
|
||||
var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
|
||||
M.stored_matter = 30
|
||||
src.modules += M
|
||||
|
||||
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
|
||||
|
||||
var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src)
|
||||
L.lit = 1
|
||||
src.modules += L
|
||||
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0.1 // Recharging water for plants - hehe drooly borg
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
synths += water
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
|
||||
src.modules += new /obj/item/weapon/tray/robotray(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/service/booze(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
|
||||
|
||||
var/datum/reagents/N = new/datum/reagents(50)
|
||||
src.emag.reagents = N
|
||||
N.my_atom = src.emag
|
||||
N.add_reagent("beer2", 50)
|
||||
src.emag.name = "Mickey Finn's Special Brew"
|
||||
|
||||
R.can_buckle = 1
|
||||
R.icon = 'icons/mob/widerobot_colors_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
R.pixel_x = -16
|
||||
R.old_x = -16
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
|
||||
E.reagents.add_reagent("enzyme", 2 * amount)
|
||||
if(src.emag)
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag
|
||||
B.reagents.add_reagent("beer2", 2 * amount)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/engiedog
|
||||
name = "Construction Hound module"
|
||||
can_buckle = 1
|
||||
@@ -569,6 +670,83 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
// SKYVAAL ADDED SERVICE BORG CODE
|
||||
/obj/item/weapon/robot_module/robot/servborg
|
||||
name = "Service Hound Module"
|
||||
can_buckle = 1
|
||||
sprites = list(
|
||||
"Chef-borg" = "servborg",
|
||||
"Booze-borg" = "boozeborg"
|
||||
)
|
||||
channels = list("Service" = 1)
|
||||
can_be_pushed = 0
|
||||
|
||||
/obj/item/weapon/robot_module/robot/servborg/New(var/mob/living/silicon/robot/R)
|
||||
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0.1 // Recharging water for plants - hehe drooly borg
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
synths += water
|
||||
|
||||
// Dogborg Standard
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
// PLACEHOLDER AS 'BRIGBELLY' UNTIL MICROWAVE BELLY SORTED
|
||||
var/obj/item/device/dogborg/sleeper/servborg/B = new /obj/item/device/dogborg/sleeper/servborg(src)
|
||||
B.water = water
|
||||
src.modules += B
|
||||
|
||||
//Service Module Copy/Paste
|
||||
src.modules += new /obj/item/weapon/gripper/service(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
|
||||
src.modules += new /obj/item/weapon/material/minihoe(src)
|
||||
src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src)
|
||||
src.modules += new /obj/item/device/analyzer/plant_analyzer(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/plants(src)
|
||||
src.modules += new /obj/item/weapon/robot_harvester(src)
|
||||
src.modules += new /obj/item/weapon/material/knife(src)
|
||||
src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src)
|
||||
src.modules += new /obj/item/device/multitool(src) //to freeze trays
|
||||
|
||||
var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
|
||||
M.stored_matter = 30
|
||||
src.modules += M
|
||||
|
||||
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
|
||||
|
||||
var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src)
|
||||
L.lit = 1
|
||||
src.modules += L
|
||||
|
||||
src.modules += new /obj/item/weapon/tray/robotray(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
|
||||
|
||||
var/datum/reagents/F = new/datum/reagents(50)
|
||||
src.emag.reagents = F
|
||||
F.my_atom = src.emag
|
||||
F.add_reagent("beer2", 50)
|
||||
src.emag.name = "Mickey Finn's Special Brew"
|
||||
|
||||
R.icon = 'icons/mob/widerobot_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
R.pixel_x = -16
|
||||
R.old_x = -16
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/Reset(var/mob/living/silicon/robot/R)
|
||||
R.pixel_x = initial(pixel_x)
|
||||
R.pixel_y = initial(pixel_y)
|
||||
|
||||
@@ -23,28 +23,12 @@
|
||||
|
||||
var/zerg_types = list("Zerg Drone" = /mob/living/simple_animal/hostile/hivebot/zerg/worker,)
|
||||
|
||||
isSynthetic()
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/isSynthetic()
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/larva/proc/evolve()
|
||||
//TODDO MAke this work nicely
|
||||
set name = "EVOLVE"
|
||||
set desc = "Performs larva evolution."
|
||||
set category = "Abilities"
|
||||
var/location = get_turf(src)
|
||||
chosentype = input(usr,"What type would you like to be?") as null|anything in zerg_types
|
||||
if(!chosentype) return
|
||||
if(!src.ckey)
|
||||
death()
|
||||
qdel(src)
|
||||
new /mob/living/simple_animal/hostile/hivebot/zerg/worker(location)
|
||||
else
|
||||
var/myuser = src.key
|
||||
death()
|
||||
qdel(src)
|
||||
var/mob/living/simple_animal/hostile/newmob = new chosentype(location)
|
||||
newmob.ckey = myuser
|
||||
/////////////////////////////////////////////////////////////////
|
||||
///////////////////// LARVA "CORE" //////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/larva
|
||||
name = "zerg larva"
|
||||
@@ -54,17 +38,45 @@
|
||||
maxHealth = 0.2 LASERS_TO_KILL
|
||||
health = 0.2 LASERS_TO_KILL
|
||||
var/chosentype = null
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/larva/Life()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/larva/New()
|
||||
..()
|
||||
verbs |= /mob/living/simple_animal/hostile/hivebot/zerg/larva/proc/evolve
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/larva/initialize()
|
||||
spawn(1200)
|
||||
if(!src.ckey)
|
||||
evolve()
|
||||
Life()
|
||||
..()
|
||||
|
||||
New()
|
||||
..()
|
||||
verbs |= /mob/living/simple_animal/hostile/hivebot/zerg/larva/proc/evolve
|
||||
|
||||
initialize()
|
||||
..()
|
||||
spawn(1200)
|
||||
if(!src.client)
|
||||
evolve()
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
///////////////////// EVOLUTION /////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/larva/proc/evolve()
|
||||
//TODDO MAke this work nicely
|
||||
set name = "EVOLVE"
|
||||
set desc = "Performs larva evolution."
|
||||
set category = "Abilities"
|
||||
var/location = get_turf(src)
|
||||
chosentype = input(usr,"What type would you like to be?") as null|anything in zerg_types
|
||||
if(!chosentype && src.ckey) return
|
||||
if(!src.client)
|
||||
qdel(src)
|
||||
new /mob/living/simple_animal/hostile/hivebot/zerg/worker(location)
|
||||
else
|
||||
|
||||
var/myuser = src.key
|
||||
var/mob/living/simple_animal/hostile/newmob = chosentype
|
||||
death()
|
||||
qdel(src)
|
||||
newmob.ckey = myuser
|
||||
new newmob(location)
|
||||
/////////////////////////////////////////////////////////////////
|
||||
///////////////////// ZERG TYPES ////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/worker
|
||||
name = "Zerg Drone"
|
||||
desc = "Drones are fundamental to economic and tech development, as they harvest resources and construct buildings."
|
||||
@@ -72,3 +84,17 @@
|
||||
health = 1 LASERS_TO_KILL
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/zerg/broodsack
|
||||
name = "Zerg Brood"
|
||||
desc = "Brood sacks are living creatures who's sole purpose it is to incubate larva."
|
||||
maxHealth = 1
|
||||
health = 1
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
Life()
|
||||
sleep(3000)
|
||||
new /mob/living/simple_animal/hostile/hivebot/zerg/larva(src.loc)
|
||||
new /mob/living/simple_animal/hostile/hivebot/zerg/larva(src.loc)
|
||||
new /mob/living/simple_animal/hostile/hivebot/zerg/larva(src.loc)
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
turns_per_move = 3
|
||||
speed = 4
|
||||
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 10
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
speed = 4
|
||||
turns_per_move = 5
|
||||
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 8
|
||||
melee_damage_lower = 15
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
desc = "It's Coffee, the other pet!"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stomps"
|
||||
response_harm = "stomps on"
|
||||
|
||||
//Sif Crabs
|
||||
/mob/living/simple_animal/giant_crab
|
||||
@@ -78,18 +78,18 @@
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stomps"
|
||||
response_harm = "kicks"
|
||||
friendly = "pinches"
|
||||
|
||||
speak_chance = 1
|
||||
speak_emote = list("clicks")
|
||||
emote_hear = list("clicks")
|
||||
emote_see = list("clacks")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Enemy version.
|
||||
/mob/living/simple_animal/hostile/giant_crab
|
||||
/mob/living/simple_animal/hostile/giant_crab
|
||||
name = "giant crab"
|
||||
desc = "A giant enemy crab."
|
||||
tt_desc = "S Cancer holligus"
|
||||
@@ -116,7 +116,7 @@
|
||||
attack_sharp = 1
|
||||
attack_edge = 1
|
||||
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 40,
|
||||
"bullet" = 10,
|
||||
"laser" = 25,
|
||||
@@ -128,7 +128,7 @@
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stomps"
|
||||
response_harm = "kicks"
|
||||
friendly = "pinches"
|
||||
|
||||
speak_chance = 1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/simple_animal/deer
|
||||
name = "Deer"
|
||||
name = "deer"
|
||||
desc = "An animal with impressive antlers and skittish personality, though this one seems domesticated."
|
||||
tt_desc = "Cervus elaphus"
|
||||
icon_state = "Deer"
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
response_help = "pets"
|
||||
response_disarm = "barely manage to push aside"
|
||||
response_harm = "nibbles"
|
||||
response_harm = "hits"
|
||||
attacktext = list("nibbled")
|
||||
|
||||
speak_chance = 20
|
||||
|
||||
@@ -83,6 +83,7 @@ Nurse Family
|
||||
poison_type = "spidertoxin" // VOREStation edit, original is stoxin. (sleep toxins)
|
||||
|
||||
var/fed = 0
|
||||
var/fedsmall = 0
|
||||
var/atom/cocoon_target
|
||||
var/egg_inject_chance = 5
|
||||
|
||||
@@ -518,7 +519,7 @@ Spider Procs
|
||||
else
|
||||
//third, lay an egg cluster there
|
||||
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
|
||||
if(!E && fed > 0)
|
||||
if(!E && fed > 0 || fedsmall > 0)
|
||||
busy = LAYING_EGGS
|
||||
src.visible_message("<span class='notice'>\The [src] begins to lay a cluster of eggs.</span>")
|
||||
stop_automated_movement = 1
|
||||
@@ -526,8 +527,12 @@ Spider Procs
|
||||
if(busy == LAYING_EGGS)
|
||||
E = locate() in get_turf(src)
|
||||
if(!E)
|
||||
new /obj/effect/spider/eggcluster(loc, src)
|
||||
fed--
|
||||
if(fed >= 1)
|
||||
new /obj/effect/spider/eggcluster(loc, src)
|
||||
fed--
|
||||
if(fedsmall >= 1)
|
||||
new /obj/effect/spider/eggcluster/small(loc, src)
|
||||
fedsmall--
|
||||
busy = 0
|
||||
stop_automated_movement = 0
|
||||
else
|
||||
@@ -562,7 +567,10 @@ Spider Procs
|
||||
if(istype(M, /mob/living/simple_animal/hostile/giant_spider))
|
||||
continue
|
||||
large_cocoon = 1
|
||||
fed++
|
||||
if(istiny(cocoon_target))
|
||||
fedsmall++
|
||||
if(!istiny(cocoon_target))
|
||||
fed++
|
||||
src.visible_message("<span class='warning'>\The [src] sticks a proboscis into \the [cocoon_target] and sucks a viscous substance out.</span>")
|
||||
M.forceMove(C)
|
||||
C.pixel_x = M.pixel_x
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
|
||||
turns_per_move = 5
|
||||
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5 //they're meant to be annoying, not threatening.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/simple_animal/lizard
|
||||
name = "Lizard"
|
||||
name = "lizard"
|
||||
desc = "A cute tiny lizard."
|
||||
faction = "lizard"
|
||||
tt_desc = "E Anolis cuvieri"
|
||||
@@ -25,11 +25,11 @@
|
||||
speak_emote = list("hisses")
|
||||
var/amount_grown = 0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/lizard/event
|
||||
desc = "This one looks like it is growing huge!"
|
||||
|
||||
|
||||
/mob/living/simple_animal/lizard/event/Life()
|
||||
. = ..()
|
||||
if(amount_grown >= 0)
|
||||
@@ -43,7 +43,7 @@
|
||||
if(prob(99.999))
|
||||
new /mob/living/simple_animal/hostile/lizardman(get_turf(src))
|
||||
qdel(src)
|
||||
else
|
||||
else
|
||||
new /mob/living/simple_animal/hostile/deathclaw(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
//raccoon
|
||||
/mob/living/simple_animal/raccoon
|
||||
name = "raccoon"
|
||||
desc = "A raccoon, also known as a trash panda."
|
||||
tt_desc = "E purgamentum raccoonus"
|
||||
intelligence_level = SA_ANIMAL
|
||||
icon = 'icons/mob/animal_vr.dmi'
|
||||
icon_state = "raccoon"
|
||||
item_state = "raccoon"
|
||||
icon_living = "raccoon"
|
||||
icon_dead = "raccoon_dead"
|
||||
|
||||
investigates = 1
|
||||
specific_targets = 1 //Only targets with Found()
|
||||
run_at_them = 0 //DOMESTICATED
|
||||
view_range = 5
|
||||
|
||||
turns_per_move = 5
|
||||
see_in_dark = 6
|
||||
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
|
||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||
maxbodytemp = 323 //Above 50 Degrees Celcius
|
||||
|
||||
|
||||
speak_chance = 1
|
||||
speak = list("HSSSSS")
|
||||
speak_emote = list("purrs")
|
||||
emote_see = list("shakes their head", "shivers","grooms self", "nibbles on some trash")
|
||||
say_maybe_target = list("Hss?")
|
||||
say_got_target = list("HSSSS!","REEER!")
|
||||
|
||||
meat_amount = 1
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
var/turns_since_scan = 0
|
||||
var/mob/flee_target
|
||||
|
||||
/mob/living/simple_animal/raccoon/proc/handle_flee_target()
|
||||
//see if we should stop fleeing
|
||||
if (flee_target && !(flee_target in ListTargets(view_range)))
|
||||
flee_target = null
|
||||
GiveUpMoving()
|
||||
|
||||
if (flee_target && !stat && !buckled)
|
||||
if (resting)
|
||||
lay_down()
|
||||
if(prob(25)) say("HSSSSS")
|
||||
stop_automated_movement = 1
|
||||
walk_away(src, flee_target, 7, 2)
|
||||
|
||||
/mob/living/simple_animal/raccoon/react_to_attack(var/atom/A)
|
||||
if(A == src) return
|
||||
flee_target = A
|
||||
turns_since_scan = 5
|
||||
|
||||
/mob/living/simple_animal/raccoon/ex_act()
|
||||
. = ..()
|
||||
react_to_attack(src.loc)
|
||||
@@ -9,9 +9,9 @@
|
||||
icon_dead = "sculpture"
|
||||
emote_hear = list("makes a faint scraping sound")
|
||||
emote_see = list("twitches slightly", "shivers")
|
||||
response_help = "touches the"
|
||||
response_disarm = "pushes the"
|
||||
response_harm = "hits the"
|
||||
response_help = "touches"
|
||||
response_disarm = "pushes"
|
||||
response_harm = "hits"
|
||||
see_in_dark = 8 //Needs to see in darkness to snap in darkness
|
||||
pass_flags = PASSTABLE
|
||||
var/response_snap = "snapped the neck of" //Past tense because it "happened before you could see it"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
var/transformed = FALSE
|
||||
var/memorysize = 50 //Var for how many messages synxes remember if they know speechcode
|
||||
var/list/voices = list()
|
||||
var/forcefeedchance = 20
|
||||
|
||||
faction = "Synx"
|
||||
intelligence_level = SA_ANIMAL
|
||||
@@ -40,8 +41,8 @@
|
||||
"rad" = 100)
|
||||
has_hands = 1
|
||||
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
|
||||
|
||||
pass_flags = PASSTABLE
|
||||
@@ -182,7 +183,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
metabolism = REM * 1 //ten times faster for convenience of testers.
|
||||
color = "#00FFFF"
|
||||
overdose = REAGENTS_OVERDOSE * 20 //it's all fake. But having nanomachines move through you is not good at a certain amount.
|
||||
|
||||
|
||||
/datum/reagent/inaprovaline/synxchem/holo/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(alien != IS_DIONA)
|
||||
if(prob(5))
|
||||
@@ -230,8 +231,8 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
M.adjustHalLoss(1) //dealing 5 times the amount of brute healed as halo, but we cant feel pain yet
|
||||
// ^ I have no idea what this might cause, my ideal plan is that once the pain killer wears off you suddenly collapse;
|
||||
//Since Halloss is not "real" damage this should not cause death
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/reagent/inaprovaline/synxchem/overdose(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
if(alien != IS_DIONA)
|
||||
@@ -242,7 +243,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
M.AdjustStunned(1)
|
||||
if(prob(2))
|
||||
M.AdjustParalysis(1)
|
||||
|
||||
|
||||
/datum/reagent/inaprovaline/synxchem/holo/overdose(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
return
|
||||
|
||||
@@ -257,7 +258,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
if(.) // If we succeeded in hitting.
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(prob(20))//Forcefeeding code
|
||||
if(prob(forcefeedchance))//Forcefeeding code
|
||||
L.Weaken(5)
|
||||
stop_automated_movement = 1
|
||||
src.feed_self_to_grabbed(src,L)
|
||||
@@ -274,6 +275,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
/mob/living/simple_animal/retaliate/synx/hear_say(message,verb,language,fakename,isItalics,var/mob/living/speaker)
|
||||
. = ..()
|
||||
if(!message) return
|
||||
if (speaker == src) return
|
||||
speaker = speaker.GetVoice()
|
||||
speak += message
|
||||
voices += speaker
|
||||
@@ -298,7 +300,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
/mob/living/simple_animal/retaliate/synx/handle_idle_speaking()
|
||||
if(voices && prob(speak_chance/2))
|
||||
randomspeech()
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////// POWERS!!!! /////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -349,7 +351,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
set category = "Abilities"
|
||||
if(speak && voices)
|
||||
handle_mimic()
|
||||
else
|
||||
else
|
||||
usr << "<span class='warning'>YOU NEED TO HEAR THINGS FIRST, try using Ventcrawl to eevesdrop on nerds</span>"
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/proc/handle_mimic()
|
||||
@@ -370,14 +372,14 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
glow_range = 4
|
||||
glow_toggle = 1
|
||||
player_msg = "You aren't supposed to be in this. Wrong mob."
|
||||
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.vore_verb = "swallow"
|
||||
B.digest_burn = 1
|
||||
B.digest_brute = 0
|
||||
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/holo/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
@@ -408,7 +410,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
var/location = get_turf(src)
|
||||
new /obj/item/seeds/hardlightseed/typesx(location)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/holo/gib()
|
||||
visible_message("<span class='notice'>\The [src] fades away!</span>")
|
||||
var/location = get_turf(src)
|
||||
@@ -469,7 +471,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
icon_state = "synx_diablo_living"
|
||||
icon_living = "synx_diablo_living"
|
||||
icon_dead = "synx_diablo_dead"
|
||||
speak = list( )
|
||||
speak = list( )
|
||||
//Vore Section
|
||||
vore_capacity = 2
|
||||
|
||||
@@ -479,7 +481,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
icon_state = "synx_diablo_living"
|
||||
icon_living = "synx_diablo_living"
|
||||
icon_dead = "synx_diablo_dead"
|
||||
speak = list( )
|
||||
speak = list( )
|
||||
//Vore Section
|
||||
vore_capacity = 2
|
||||
|
||||
@@ -502,7 +504,7 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
//Vore Section
|
||||
vore_default_mode = DM_HEAL
|
||||
vore_capacity = 10
|
||||
vore_digest_chance = 0
|
||||
vore_digest_chance = 0
|
||||
vore_pounce_chance = 1 //MAKE THEM HONK
|
||||
vore_bump_chance = 0 //lowered bump chance
|
||||
vore_escape_chance = 100
|
||||
@@ -549,3 +551,80 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
else return pick(prob(50);/mob/living/simple_animal/retaliate/synx/pet/greed,
|
||||
prob(50);/mob/living/simple_animal/retaliate/synx/pet/diablo,
|
||||
prob(50);/mob/living/simple_animal/retaliate/synx/pet/holo,)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////NOT A SYNX///////but looks kinda like one/////////
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//So we got base synxes pretty much done, how about some special variants
|
||||
/mob/living/simple_animal/retaliate/synx/pet/weepinggamblers
|
||||
name = "Synx?"
|
||||
desc = "A cold blooded, genderless, parasitic eel? Is it crying?"
|
||||
tt_desc = "Synxus?"
|
||||
forcefeedchance = 99 //You have a stomach? yeah they go in.
|
||||
poison_per_bite = 0 //no poison
|
||||
|
||||
hostile = 1
|
||||
|
||||
faction = "synx?"
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 1
|
||||
environment_smash = 1
|
||||
destroy_surroundings = 1
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/weepinggamblers/New()
|
||||
..()
|
||||
faction = rand(1,5)
|
||||
switch(faction)
|
||||
if(1 , 2)
|
||||
voices |= "Unidentifiable Weeping"
|
||||
name = "Weeper"
|
||||
melee_damage_upper = 4
|
||||
if(3)
|
||||
voices |= "Radio Static"
|
||||
name = "Whistler"
|
||||
melee_damage_upper = 20
|
||||
if(4 , 5)
|
||||
voices |= "Unidentifiable Wailing"
|
||||
name= "Wailer"
|
||||
melee_damage_upper = 10
|
||||
speak |= "No one"
|
||||
|
||||
voices -= "Garbled voice"
|
||||
voices -= "Unidentifiable Voice"
|
||||
speak -= "Who is there?"
|
||||
speak -= "What is that thing?!"
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/weepinggamblers/MoveToTarget()
|
||||
var/mob/living/speaker
|
||||
if(target_mob)
|
||||
speaker = target_mob
|
||||
speak |= speaker.GetVoice()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/weepinggamblers/Life()
|
||||
..()
|
||||
if(prob(1) && faction <= 5)
|
||||
handlemutations(rand(1,5))
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/weepinggamblers/proc/handlemutations(faction)
|
||||
switch(faction)
|
||||
if(1 , 2 , 11 , 12)
|
||||
voices = "Unidentifiable Weeping"
|
||||
name = "Weeper"
|
||||
melee_damage_upper = 4
|
||||
if(3 , 13)
|
||||
voices = "Radio Static"
|
||||
name = "Whistler"
|
||||
melee_damage_upper = 20
|
||||
if(4 , 5 , 14 , 15)
|
||||
voices = "Unidentifiable Wailing"
|
||||
name= "Wailer"
|
||||
melee_damage_upper = 10
|
||||
if(6 to 10 , 16 to 20)
|
||||
voices = "Breathing"
|
||||
name= "Silent"
|
||||
else return
|
||||
|
||||
//WEEPING END
|
||||
|
||||
|
||||
|
||||
@@ -1,215 +1,226 @@
|
||||
/mob/living/simple_animal/hostile/tomato
|
||||
name = "tomato"
|
||||
desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
|
||||
tt_desc = "X Solanum abominable"
|
||||
icon_state = "tomato"
|
||||
icon_living = "tomato"
|
||||
icon_dead = "tomato_dead"
|
||||
intelligence_level = SA_PLANT
|
||||
|
||||
faction = "plants"
|
||||
maxHealth = 15
|
||||
health = 15
|
||||
turns_per_move = 5
|
||||
|
||||
response_help = "prods"
|
||||
response_disarm = "pushes aside"
|
||||
response_harm = "smacks"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_upper = 15
|
||||
melee_damage_lower = 10
|
||||
attacktext = list("mauled")
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
|
||||
|
||||
//CHOMPEDIT PIRANHA PLANT.
|
||||
//When I stop being lazy I'll give this its own file -shark
|
||||
//Yes I'm basing this shit on the tomato, sue me. -shark
|
||||
//No longer based on tomato because evolved too far -shark
|
||||
/mob/living/simple_animal/hostile/piranhaplant
|
||||
name = "Piranha Plant"
|
||||
desc = "It's a plant, that eats people!"
|
||||
tt_desc = "Packun Flower"
|
||||
|
||||
faction = "plants"
|
||||
intelligence_level = SA_PLANT
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
meat_type = null
|
||||
|
||||
//Mob icon/appearance settings
|
||||
icon = 'icons/mob/plantmobs32x32.dmi' //Thanks to vorebound mod and Estelle
|
||||
icon_living = "piranha-plant"
|
||||
icon_state = "piranha-plant"
|
||||
icon_dead = "piranha-plant_dead"
|
||||
icon_gib = "generic_gib" // The iconstate for being gibbed, optional. Defaults to a generic gib animation.
|
||||
//icon_rest = null // The iconstate for resting, optional
|
||||
attack_icon = 'icons/effects/effects.dmi' //Just the default, played like the weapon attack anim
|
||||
attack_icon_state = "slash" //Just the default //gonna have to make teeth chomping version
|
||||
|
||||
//Vore stuff
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 10
|
||||
vore_standing_too = 1
|
||||
vore_ignores_undigestable = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
vore_digest_chance = 99
|
||||
vore_absorb_chance = 0
|
||||
vore_escape_chance = 5
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //CHOMPED
|
||||
|
||||
//Movement Stuff
|
||||
wander = 0 // Does the mob wander around when idle?
|
||||
wander_distance = 0 // How far the mob will wander before going home (assuming they are allowed to do that)
|
||||
returns_home = 1 // Mob knows how to return to wherever it started
|
||||
turns_per_move = 4 // How many life() cycles to wait between each wander mov?
|
||||
stop_when_pulled = 0 // When set to 1 this stops the animal from moving when someone is pulling it.
|
||||
follow_dist = 0 // Distance the mob tries to follow a friend
|
||||
speed = 4 // Higher speed is slower, negative speed is faster.
|
||||
|
||||
//Talk/Emote stuff
|
||||
speak_chance = 0 // Probability that I talk (this is 'X in 200' chance since even 1/100 is pretty noisy)
|
||||
reacts = 1 // Reacts to some things being said
|
||||
speak = list() // Things I might say if I talk
|
||||
emote_hear = list("chomps","snaps at the air") // Hearable emotes I might perform
|
||||
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
|
||||
say_understood = list() // List of things to say when accepting an order
|
||||
say_cannot = list() // List of things to say when they cannot comply
|
||||
say_maybe_target = list() // List of things to say when they spot something barely
|
||||
say_got_target = list() // List of things to say when they engage a target
|
||||
reactions = list("chomp" = "!chomps",) // List of "string" = "reaction" and things they hear will be searched for string.
|
||||
|
||||
//Hostility war bloodshed, RAWR
|
||||
hostile = 1 // Do I even attack?
|
||||
view_range = 2 // Scan for targets in this range.
|
||||
investigates = 1 // Do I investigate if I saw someone briefly?
|
||||
cooperative = 1 // Do I ask allies to help me?
|
||||
assist_distance = 2 // Radius in which I'll ask my comrades for help.
|
||||
grab_resist = 100 // Chance of me resisting a grab attempt.
|
||||
taser_kill = 1 // Is the mob weak to tasers
|
||||
|
||||
//Melee behaviour
|
||||
melee_damage_lower = 1 // Lower bound of randomized melee damage
|
||||
melee_damage_upper = 25 // Upper bound of randomized melee damage
|
||||
attacktext = list("chomped","bit","hompfed","crunched","cronched") // "You are [attacktext] by the mob!"
|
||||
friendly = list("nuzzles") // "The mob [friendly] the person."
|
||||
//attack_sound = null // Sound to play when I attack
|
||||
environment_smash = 0 // How much environment damage do I do when I hit stuff?
|
||||
melee_miss_chance = 1 // percent chance to miss a melee attack.
|
||||
melee_attack_minDelay = 5 // How long between attacks at least
|
||||
melee_attack_maxDelay = 20 // How long between attacks at most
|
||||
attack_armor_type = "bio" // What armor does this check?
|
||||
attack_armor_pen = 50 // How much armor pen this attack has.
|
||||
attack_sharp = 1 // Is the attack sharp?
|
||||
attack_edge = 0 // Does the attack have an edge?
|
||||
|
||||
//Stuff for people wanting to be a fucking plant. Weirdos
|
||||
show_stat_health = 1 // Does the percentage health show in the stat panel for the mob
|
||||
ai_inactive = 0 // Set to 1 to turn off most AI actions
|
||||
has_hands = 1 // Set to 1 to enable the use of hands and the hands hud
|
||||
humanoid_hands = 1 // Can a player in this mob use things like guns or AI cards?
|
||||
//hand_form = "hands" // Used in IsHumanoidToolUser. 'Your X are not fit-'.
|
||||
//hud_gears // Slots to show on the hud (typically none)
|
||||
//ui_icons // Icon file path to use for the HUD, otherwise generic icons are used
|
||||
//r_hand_sprite = "piranha_r" // If they have hands, //TODO make a leaf sprite for this
|
||||
//l_hand_sprite = "piranha_l" // they could use some icons.
|
||||
player_msg = "PLANT GO CHOMP" // Message to print to players about 'how' to play this mob on login.
|
||||
|
||||
//Ranged variation
|
||||
/mob/living/simple_animal/hostile/piranhaplant/spitter
|
||||
//might snatch the code for that uranium ray for this since it should poison
|
||||
name = "Piranha Spitter"
|
||||
attack_armor_pen = 0
|
||||
//Attack ranged settings.
|
||||
ranged = 1 // Do I attack at range?
|
||||
shoot_range = 6 // How far away do I start shooting from?
|
||||
view_range = 5 //More range, more hurt, more... plant?
|
||||
rapid = 1 // Three-round-burst fire mode
|
||||
firing_lines = 0 // Avoids shooting allies
|
||||
projectiletype = /obj/item/projectile/energy/piranhaspit // The projectiles I shoot
|
||||
projectilesound = 'sound/weapons/thudswoosh.ogg' // The sound I make when I do it
|
||||
casingtype = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha // What to make the hugely laggy casings pile out of
|
||||
|
||||
//Piranha unique projectile
|
||||
/obj/item/projectile/energy/piranhaspit
|
||||
name = "piranhaspit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 4 //Reduced damage to 4 from 10, 3 fired projectiles mean might do 12 total if all 3 hit
|
||||
damage_type = TOX
|
||||
check_armour = "bio" //yup biohazard protection works here
|
||||
flash_strength = 0
|
||||
agony = 10
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha
|
||||
name = "Soylent"
|
||||
desc = "This was spat out by a strange plant that eats people."
|
||||
icon_state = "soylent_green"
|
||||
filling_color = "#B8E6B5"
|
||||
center_of_mass = list("x"=15, "y"=11)
|
||||
|
||||
/obj/item/projectile/energy/piranhaspit/on_hit(var/atom/soyled)
|
||||
soyl(soyled)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/energy/piranhaspit/proc/soyl(var/mob/M)
|
||||
var/location = get_turf(M)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha(location)
|
||||
|
||||
//VORE FLUFF section and extended gut settings
|
||||
/mob/living/simple_animal/hostile/piranhaplant/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.vore_verb = "chomp up"
|
||||
B.name = "stomach"
|
||||
B.desc = "You're pulled into the tight stomach of the plant. The walls knead weakly around you, coating you in thick, viscous fluids that cling to your body, that soon starts to tingle and burn..."
|
||||
B.digest_burn = 0
|
||||
B.digest_brute = 12
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher
|
||||
icon_state = "pitcher"
|
||||
icon_living = "pitcher"
|
||||
name = "Pitcher Plant"
|
||||
desc = "It's a plant! How pretty"
|
||||
tt_desc = "Brig Flower"
|
||||
health = 50
|
||||
maxHealth = 50 //starts with 50
|
||||
var/antispam = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/death()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/Life()
|
||||
..()
|
||||
if(!anchored)
|
||||
anchored=1
|
||||
if(maxHealth <= 499) //Ok maybe there are limits
|
||||
maxHealth = health //Limits are merely a suggestion
|
||||
if(vore_fullness && !antispam)
|
||||
antispam = 1
|
||||
spawn(10)
|
||||
if(maxHealth <= 499)
|
||||
maxHealth += 1
|
||||
health += 1
|
||||
antispam = !antispam
|
||||
|
||||
if(size_multiplier!=1*health/100)
|
||||
size_multiplier=1*health/100
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.digest_burn = 0.5
|
||||
B.digest_brute = 0
|
||||
B.vore_verb = "slurped up"
|
||||
B.name = "pitcher"
|
||||
/mob/living/simple_animal/hostile/tomato
|
||||
name = "tomato"
|
||||
desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
|
||||
tt_desc = "X Solanum abominable"
|
||||
icon_state = "tomato"
|
||||
icon_living = "tomato"
|
||||
icon_dead = "tomato_dead"
|
||||
intelligence_level = SA_PLANT
|
||||
|
||||
faction = "plants"
|
||||
maxHealth = 15
|
||||
health = 15
|
||||
turns_per_move = 5
|
||||
|
||||
response_help = "prods"
|
||||
response_disarm = "pushes aside"
|
||||
response_harm = "smacks"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_upper = 15
|
||||
melee_damage_lower = 10
|
||||
attacktext = list("mauled")
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
|
||||
|
||||
//CHOMPEDIT PIRANHA PLANT.
|
||||
//When I stop being lazy I'll give this its own file -shark
|
||||
//Yes I'm basing this shit on the tomato, sue me. -shark
|
||||
//No longer based on tomato because evolved too far -shark
|
||||
/mob/living/simple_animal/hostile/piranhaplant
|
||||
name = "Piranha Plant"
|
||||
desc = "It's a plant, that eats people!"
|
||||
tt_desc = "Packun Flower"
|
||||
|
||||
faction = "plants"
|
||||
intelligence_level = SA_PLANT
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
meat_type = null
|
||||
|
||||
//Mob icon/appearance settings
|
||||
icon = 'icons/mob/plantmobs32x32.dmi' //Thanks to vorebound mod and Estelle
|
||||
icon_living = "piranha-plant"
|
||||
icon_state = "piranha-plant"
|
||||
icon_dead = "piranha-plant_dead"
|
||||
icon_gib = "generic_gib" // The iconstate for being gibbed, optional. Defaults to a generic gib animation.
|
||||
//icon_rest = null // The iconstate for resting, optional
|
||||
attack_icon = 'icons/effects/effects.dmi' //Just the default, played like the weapon attack anim
|
||||
attack_icon_state = "slash" //Just the default //gonna have to make teeth chomping version
|
||||
|
||||
//Vore stuff
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 10
|
||||
vore_standing_too = 1
|
||||
vore_ignores_undigestable = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
vore_digest_chance = 99
|
||||
vore_absorb_chance = 0
|
||||
vore_escape_chance = 5
|
||||
vore_icons = SA_ICON_LIVING
|
||||
swallowTime = 10 SECONDS //CHOMPED
|
||||
|
||||
//Movement Stuff
|
||||
wander = 0 // Does the mob wander around when idle?
|
||||
wander_distance = 0 // How far the mob will wander before going home (assuming they are allowed to do that)
|
||||
returns_home = 1 // Mob knows how to return to wherever it started
|
||||
turns_per_move = 4 // How many life() cycles to wait between each wander mov?
|
||||
stop_when_pulled = 0 // When set to 1 this stops the animal from moving when someone is pulling it.
|
||||
follow_dist = 0 // Distance the mob tries to follow a friend
|
||||
speed = 4 // Higher speed is slower, negative speed is faster.
|
||||
entangle_immunity = 1 //makes mob immune to entangle effect of vines and also wont get stabbed by vines that has thorns
|
||||
|
||||
//Talk/Emote stuff
|
||||
speak_chance = 0 // Probability that I talk (this is 'X in 200' chance since even 1/100 is pretty noisy)
|
||||
reacts = 1 // Reacts to some things being said
|
||||
speak = list() // Things I might say if I talk
|
||||
emote_hear = list("chomps","snaps at the air") // Hearable emotes I might perform
|
||||
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
|
||||
say_understood = list() // List of things to say when accepting an order
|
||||
say_cannot = list() // List of things to say when they cannot comply
|
||||
say_maybe_target = list() // List of things to say when they spot something barely
|
||||
say_got_target = list() // List of things to say when they engage a target
|
||||
reactions = list("chomp" = "!chomps",) // List of "string" = "reaction" and things they hear will be searched for string.
|
||||
|
||||
//Hostility war bloodshed, RAWR
|
||||
hostile = 1 // Do I even attack?
|
||||
view_range = 2 // Scan for targets in this range.
|
||||
investigates = 1 // Do I investigate if I saw someone briefly?
|
||||
cooperative = 1 // Do I ask allies to help me?
|
||||
assist_distance = 2 // Radius in which I'll ask my comrades for help.
|
||||
grab_resist = 100 // Chance of me resisting a grab attempt.
|
||||
taser_kill = 1 // Is the mob weak to tasers
|
||||
|
||||
//Melee behaviour
|
||||
melee_damage_lower = 1 // Lower bound of randomized melee damage
|
||||
melee_damage_upper = 25 // Upper bound of randomized melee damage
|
||||
attacktext = list("chomped","bit","hompfed","crunched","cronched") // "You are [attacktext] by the mob!"
|
||||
friendly = list("nuzzles") // "The mob [friendly] the person."
|
||||
//attack_sound = null // Sound to play when I attack
|
||||
environment_smash = 0 // How much environment damage do I do when I hit stuff?
|
||||
melee_miss_chance = 1 // percent chance to miss a melee attack.
|
||||
melee_attack_minDelay = 5 // How long between attacks at least
|
||||
melee_attack_maxDelay = 20 // How long between attacks at most
|
||||
attack_armor_type = "bio" // What armor does this check?
|
||||
attack_armor_pen = 50 // How much armor pen this attack has.
|
||||
attack_sharp = 1 // Is the attack sharp?
|
||||
attack_edge = 0 // Does the attack have an edge?
|
||||
|
||||
//Stuff for people wanting to be a fucking plant. Weirdos
|
||||
show_stat_health = 1 // Does the percentage health show in the stat panel for the mob
|
||||
ai_inactive = 0 // Set to 1 to turn off most AI actions
|
||||
has_hands = 1 // Set to 1 to enable the use of hands and the hands hud
|
||||
humanoid_hands = 1 // Can a player in this mob use things like guns or AI cards?
|
||||
//hand_form = "hands" // Used in IsHumanoidToolUser. 'Your X are not fit-'.
|
||||
//hud_gears // Slots to show on the hud (typically none)
|
||||
//ui_icons // Icon file path to use for the HUD, otherwise generic icons are used
|
||||
//r_hand_sprite = "piranha_r" // If they have hands, //TODO make a leaf sprite for this
|
||||
//l_hand_sprite = "piranha_l" // they could use some icons.
|
||||
player_msg = "PLANT GO CHOMP" // Message to print to players about 'how' to play this mob on login.
|
||||
|
||||
//Ranged variation
|
||||
/mob/living/simple_animal/hostile/piranhaplant/spitter
|
||||
//might snatch the code for that uranium ray for this since it should poison
|
||||
name = "Piranha Spitter"
|
||||
attack_armor_pen = 0
|
||||
//Attack ranged settings.
|
||||
ranged = 1 // Do I attack at range?
|
||||
shoot_range = 6 // How far away do I start shooting from?
|
||||
view_range = 5 //More range, more hurt, more... plant?
|
||||
rapid = 1 // Three-round-burst fire mode
|
||||
firing_lines = 0 // Avoids shooting allies
|
||||
projectiletype = /obj/item/projectile/energy/piranhaspit // The projectiles I shoot
|
||||
projectilesound = 'sound/weapons/thudswoosh.ogg' // The sound I make when I do it
|
||||
ranged_ignore_incapitated = 1 //make it so our spitter doesnt stun lock dorks
|
||||
ranged_cooldown_time = 90
|
||||
|
||||
//mob/living/simple_animal/hostile/piranhaplant/spitter/proc/Shoot()
|
||||
//TOX/HALLOSS swap code goes here //TODO
|
||||
|
||||
//Piranha unique projectile
|
||||
/obj/item/projectile/energy/piranhaspit
|
||||
name = "piranha spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 10
|
||||
damage_type = HALLOSS
|
||||
check_armour = "bio" //yup biohazard protection works here
|
||||
flash_strength = 0
|
||||
agony = 10
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha
|
||||
name = "Soylent"
|
||||
desc = "This was spat out by a strange plant that eats people."
|
||||
icon_state = "soylent_green"
|
||||
filling_color = "#B8E6B5"
|
||||
center_of_mass = list("x"=15, "y"=11)
|
||||
|
||||
/obj/item/projectile/energy/piranhaspit/on_hit(var/atom/soyled)
|
||||
if(prob(5))
|
||||
soyl(soyled)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/energy/piranhaspit/proc/soyl(var/mob/M)
|
||||
var/location = get_turf(M)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha(location)
|
||||
|
||||
//VORE FLUFF section and extended gut settings
|
||||
/mob/living/simple_animal/hostile/piranhaplant/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.vore_verb = "chomp up"
|
||||
B.name = "stomach"
|
||||
B.desc = "You're pulled into the tight stomach of the plant. The walls knead weakly around you, coating you in thick, viscous fluids that cling to your body, that soon starts to tingle and burn..."
|
||||
B.digest_burn = 0
|
||||
B.digest_brute = 12
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher
|
||||
icon_state = "pitcher-plant"
|
||||
icon_living = "pitcher-plant"
|
||||
icon_dead = "pitcher-plant_dead"
|
||||
name = "Pitcher Plant"
|
||||
desc = "It's a plant! How pretty"
|
||||
tt_desc = "Brig Flower"
|
||||
health = 500
|
||||
maxHealth = 500
|
||||
var/antispam = 0
|
||||
swallowTime = 3 SECONDS //If you get to close to a pitcher, its your own fault ;p
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/death()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/Life()
|
||||
..()
|
||||
if(!anchored)
|
||||
anchored=1
|
||||
if(vore_fullness && !antispam)
|
||||
antispam = 1
|
||||
spawn(10)
|
||||
if(bruteloss >= 1)
|
||||
bruteloss -= 1
|
||||
antispam = !antispam
|
||||
if(prob(3))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha(src.loc)
|
||||
|
||||
if(size_multiplier!=1*health/100 && health >= 50 && health <= 300)
|
||||
size_multiplier=1*health/100
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/New()
|
||||
..()
|
||||
bruteloss = 400
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.digest_burn = 0.5
|
||||
B.digest_brute = 0
|
||||
B.vore_verb = "slurp up"
|
||||
B.name = "pitcher"
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
response_help = "touches"
|
||||
response_disarm = "flails at"
|
||||
response_harm = "punches the"
|
||||
response_harm = "punches"
|
||||
|
||||
harm_intent_damage = 2
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
firing_lines = TRUE
|
||||
investigates = TRUE
|
||||
assist_distance = 100
|
||||
|
||||
|
||||
turns_per_move = 5
|
||||
stop_when_pulled = 0
|
||||
|
||||
@@ -85,9 +85,9 @@
|
||||
icon_gib = "clown_gib"
|
||||
speak_chance = 50
|
||||
turns_per_move = 5
|
||||
response_help = "pokes the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pokes"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
speak = list("HONK", "Honk!")
|
||||
speak_emote = list("squeals", "cries","sobs")
|
||||
emote_hear = list("honks sadly")
|
||||
@@ -127,15 +127,15 @@
|
||||
icon_state = "ClownGoblin"
|
||||
icon_living = "ClownGoblin"
|
||||
icon_dead = null
|
||||
response_help = "honks the"
|
||||
response_help = "honks"
|
||||
speak = list("Honk!")
|
||||
speak_emote = list("sqeaks")
|
||||
emote_hear = list("honks")
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
|
||||
|
||||
view_range = 30//owo
|
||||
|
||||
|
||||
speed = 1
|
||||
turns_per_move = 1
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
/mob/living/simple_animal/clowngang
|
||||
name = "Pandoras box"
|
||||
desc = "A honkmotherload of fun"
|
||||
|
||||
|
||||
/mob/living/simple_animal/clowngang/Life()
|
||||
death()
|
||||
/mob/living/simple_animal/clowngang/death()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/simple_animal/hostile/pirate
|
||||
name = "Pirate"
|
||||
name = "pirate"
|
||||
desc = "Does what he wants cause a pirate is free."
|
||||
tt_desc = "E Homo sapiens"
|
||||
icon_state = "piratemelee"
|
||||
|
||||
@@ -121,7 +121,8 @@
|
||||
var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat.
|
||||
var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance
|
||||
var/move_shoot = 0
|
||||
|
||||
var/ranged_ignore_incapitated = 0 //Ranged mobs will by default keep shooting on unconscious targets, if set to 1 the mob will ignore unconscious victims.
|
||||
|
||||
//Mob melee settings
|
||||
var/melee_damage_lower = 2 // Lower bound of randomized melee damage
|
||||
var/melee_damage_upper = 6 // Upper bound of randomized melee damage
|
||||
@@ -1270,19 +1271,24 @@
|
||||
ai_log("AttackTarget() special",3)
|
||||
if(SpecialAtkTarget()) //Might not succeed/be allowed, do something else.
|
||||
return 1
|
||||
|
||||
|
||||
//AAAAH!
|
||||
if(distance <= 1)
|
||||
ai_log("AttackTarget() melee",3)
|
||||
PunchTarget()
|
||||
return 1
|
||||
|
||||
|
||||
//Open fire!
|
||||
else if(ranged && (distance <= shoot_range) && ranged_cooldown <= world.time)
|
||||
if(ishuman(target_mob) && ranged_ignore_incapitated)
|
||||
var/mob/living/carbon/human/TA = target_mob
|
||||
if(TA.stat == UNCONSCIOUS)
|
||||
LoseTarget(TA)
|
||||
return
|
||||
ai_log("AttackTarget() ranged",3)
|
||||
ShootTarget(target_mob)
|
||||
return 1
|
||||
|
||||
|
||||
else
|
||||
ai_log("AttackTarget() out of range!",3)
|
||||
stoplag(1) // Unfortunately this is needed to protect from ClosestDistance() sometimes not updating fast enough to prevent an infinite loop.
|
||||
@@ -1777,5 +1783,5 @@
|
||||
/mob/living/simple_animal/get_nametag_desc(mob/user)
|
||||
return "<i>[tt_desc]</i>"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
returns_home = 1
|
||||
reacts = 1
|
||||
|
||||
response_help = "pats the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pats"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 8
|
||||
melee_damage_lower = 15
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
speak = list("Buzzzz")
|
||||
speak_chance = 1
|
||||
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
turns_per_move = 5
|
||||
speed = 5
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
say_maybe_target = list("MEAT?", "N0w YOU DNE FcukED UP b0YO!", "WHAT!", "Not again. NOT AGAIN!")
|
||||
say_got_target = list("D##FIN1Tly DNE FcukED UP nOW b0YO!", "YOU G1T D#V0VRED nOW!", "FUEL ME bOYO!", "I*M SO SORRY?!", "D1E Meat. DIG#ST!", "G1T DVNKED DWN The HaaTCH!", "Not again. NOT AGAIN!")
|
||||
|
||||
response_help = "pets the"
|
||||
response_disarm = "bops the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "hits"
|
||||
attacktext = list("ravaged")
|
||||
friendly = list("nuzzles", "slobberlicks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on")
|
||||
|
||||
|
||||
@@ -61,3 +61,70 @@
|
||||
// maxHealth = 200
|
||||
// health = 200
|
||||
// faction = "virgo3b"
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/dragon/phoron
|
||||
name = "phoron dragon"
|
||||
desc = "A big imposing phoron dragon, it looks tough and would likely not go down without a fierce fight."
|
||||
icon_dead = "phoron_dragon_dead"
|
||||
icon_living = "phoron_dragon"
|
||||
icon_state = "phoron_dragon"
|
||||
maxHealth = 1000 // Super Boss
|
||||
health = 1000
|
||||
var/image/eye_layer = null
|
||||
|
||||
/mob/living/simple_animal/hostile/dragon/phoron/New(var/location, var/atom/parent)
|
||||
if(!eye_layer)
|
||||
get_light_and_color(parent)
|
||||
add_glow()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/dragon/phoron/proc/add_glow()
|
||||
eye_layer = image(icon, "[icon_state]-glow")
|
||||
eye_layer.plane = PLANE_LIGHTING_ABOVE
|
||||
|
||||
overlays |= eye_layer
|
||||
|
||||
/mob/living/simple_animal/hostile/dragon/phoron/death()
|
||||
remove_glow()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/dragon/phoron/proc/remove_glow()
|
||||
overlays -= eye_layer
|
||||
|
||||
/mob/living/simple_animal/hostile/dragon/phoron/update_icon()
|
||||
. = ..()
|
||||
if(stat >= DEAD)
|
||||
return
|
||||
add_glow()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/dragon/phoron/init_vore()
|
||||
..()
|
||||
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "Belly"
|
||||
B.desc = "The phoron dragon tackles you to the ground with a mighty roar, swiftly gobbling up your head! You feel the gravity shift as it raises it's head up in pride, bobbing you up and down as it busily swallowed around your form. You start to realise that the warm fluid that you mistook for it's saliva has a strong and somewhat familiar scent, but before you can identify it, your ride is over - with a powerful swallow, the dragon pushes the entirety of your body down into it's stomach, with more of that strange liquid pooling up on the bottom. As you push out in protest against the surrounding walls, you realise that the flesh feels squishy and sponge-like under your digits, coating them in dark, pink substance... A pleased rumble from above tells you that the dragon clearly doesn't seem to mind your futile struggles, clenching its stomach around you possessively!"
|
||||
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
"The sway of the dragon's belly sloshes the purple tinted fluid around you, splashing it all over your body.",
|
||||
"You can feel a small prod from the outside as the dragon accidentally brushes his gut against a wall. The soft flesh cushions it just enough for it to be barely noticeable...",
|
||||
"You briefly get lost in thoughts as you listen to the noises the dragon's body emits... A slightly muffled snort from above that is enough for you to snap back.",
|
||||
"A sizeable paw smacks on the side of the dragon's belly, kneading into you through the thick layer of flesh while a low, ominous chuckle can be heard.",
|
||||
"A low, guttural grumble can be heard all around you as the dragon idly flumps down, bringing its weight down to smoosh you against the bottom of its gut!",
|
||||
"You can feel a faint, rythmic thumping coming off from the sides of the belly - it doesn't take long to realise that the dragon is drumming on its stuffed gut with its wings.",
|
||||
"The dragon sways its hips briefly, making its stomach - and by extension, you - sway along, letting out an ammused rumble!",
|
||||
"You can feel the stomach clench around you, briefly pushing you out towards the dragon's gullet, but before you can gather your wits, it simply swallows you back down with a taunting rumble.",
|
||||
"You sigh and idly drag your hand over the stomach walls, silently pondering your life choices. It surprises you to feel a large paw tracing your movements from outside!")
|
||||
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"The sway of the dragon's belly sloshes the purple tinted fluid around you, splashing it all over your body.",
|
||||
"You can feel a small prod from the outside as the dragon accidentally brushes his gut against a wall. The soft flesh cushions it just enough for it to be barely noticeable...",
|
||||
"A sizeable paw smacks on the side of the dragon's belly, kneading into you through the thick layer of flesh while a low, ominous chuckle can be heard.",
|
||||
"A low, guttural grumble can be heard all around you as the dragon idly flumps down, bringing its weight down to smoosh you against the bottom of its gut!",
|
||||
"You can feel a faint, rythmic thumping coming off from the sides of the belly - it doesn't take long to realise that the dragon is drumming on its stuffed gut with its wings.",
|
||||
"The dragon sways its hips briefly, making its stomach - and by extension, you - sway along, letting out an ammused rumble!",
|
||||
"You can feel the stomach clench around you, briefly pushing you out towards the dragon's gullet, but before you can gather your wits, it simply swallows you back down with a taunting rumble.")
|
||||
|
||||
//Didnt put in since it works better as active struggle messages, but not gonna write any at the moment :c
|
||||
//You struggle to push out against the surrounding flesh, but as soon as you ease up on the pressure, the dragon's gut simply pushes back to hide the bulge.
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
maxHealth = 30
|
||||
health = 30
|
||||
|
||||
response_help = "pats the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pats"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
speak_emote = list("growls","hisses")
|
||||
say_maybe_target = list("Rawr?")
|
||||
say_got_target = list("GWAR!!")
|
||||
response_help = "pets the"
|
||||
response_disarm = "bops the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "hits"
|
||||
attacktext = list("bit")
|
||||
friendly = list("nuzzles", "licks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on")
|
||||
|
||||
|
||||
@@ -19,9 +19,9 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
speed = 4
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
harm_intent_damage = 5
|
||||
isEdible = 0 //They cannot be eaten while alive.
|
||||
var/canEvolve = 1 //A variable for admins to turn off and on for when they like assign a player as a mob. I want to add a verb so that they can do it on command when the conditions are right in the future.
|
||||
@@ -49,14 +49,14 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
emote_see = list("SKREE's")
|
||||
|
||||
meat_type = /obj/item/toy/figure/samus
|
||||
|
||||
|
||||
var/mob/living/victim = null // the person the metroid is currently feeding on
|
||||
var/optimal_combat = FALSE // Used to dumb down the combat AI somewhat. If true, the metroid tends to be really dangerous to fight alone due to stunlocking.
|
||||
var/power_charge = 0
|
||||
var/evo_point = 0
|
||||
var/evo_limit = 0
|
||||
var/next = null
|
||||
|
||||
|
||||
//Stuff for if a person is playing as a metroid.
|
||||
show_stat_health = 1 // Does the percentage health show in the stat panel for the mob
|
||||
ai_inactive = 0 // Set to 1 to turn off most AI actions
|
||||
@@ -68,10 +68,10 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
//r_hand_sprite = "piranha_r" // If they have hands, //TODO make a leaf sprite for this
|
||||
//l_hand_sprite = "piranha_l" // they could use some icons.
|
||||
player_msg = "SUCC." // Message to print to players about 'how' to play this mob on login.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid //activate noms
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 25
|
||||
@@ -81,8 +81,8 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
/mob/living/simple_animal/hostile/metroid/death()
|
||||
playsound(src, 'sound/effects/metroiddeath.ogg', 50, 1)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/mine
|
||||
name = "Mochtroid"
|
||||
@@ -125,7 +125,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 5
|
||||
melee_miss_chance = 0
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 50,
|
||||
"bullet" = 30,
|
||||
"laser" = 80,
|
||||
@@ -164,20 +164,20 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
cooperative = 1
|
||||
evo_point = 800
|
||||
evo_limit = 1000
|
||||
next = "/mob/living/simple_animal/hostile/metroid/evolution/super"
|
||||
next = "/mob/living/simple_animal/hostile/metroid/evolution/super"
|
||||
vore_active = 0
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/baby/New()
|
||||
playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/super
|
||||
name = "super metroid"
|
||||
desc = "Some kind of head sucky thing!"
|
||||
@@ -193,7 +193,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 5
|
||||
melee_miss_chance = 0
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 50,
|
||||
"bullet" = 30,
|
||||
"laser" = 90,
|
||||
@@ -232,7 +232,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
evo_point = 1200
|
||||
evo_limit = 1400
|
||||
next = "/mob/living/simple_animal/hostile/metroid/combat/alpha"
|
||||
|
||||
|
||||
vore_active = 1
|
||||
vore_bump_chance = 0
|
||||
vore_capacity = 1
|
||||
@@ -240,20 +240,20 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
vore_pounce_chance = 25 //Metroids only eat incapacitated targets
|
||||
vore_default_mode = DM_DIGEST
|
||||
swallowTime = 1 SECONDS //Hungry little bastards.
|
||||
vore_escape_chance = 25
|
||||
vore_escape_chance = 25
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/super/New()
|
||||
playsound(src, 'sound/metroid/metroidsee.ogg', 100, 1)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/super/death()
|
||||
playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_damage_upper = 15
|
||||
melee_miss_chance = 5
|
||||
attacktext = list("rammed")
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 60,
|
||||
"bullet" = 45,
|
||||
"laser" = 50,
|
||||
@@ -283,7 +283,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
gender = NEUTER
|
||||
faction = "metroids"
|
||||
move_to_delay = 3
|
||||
|
||||
|
||||
//Alphas lose their vulnerability to cold.
|
||||
minbodytemp = 0
|
||||
min_oxy = 0
|
||||
@@ -327,14 +327,14 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_pounce_chance = 15 //Alphas will try knocking targets over since they lost their stun ability from the initial phases.
|
||||
vore_default_mode = DM_DIGEST
|
||||
swallowTime = 3 SECONDS
|
||||
swallowTime = 3 SECONDS
|
||||
vore_escape_chance = 25
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -354,7 +354,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_damage_upper = 20
|
||||
melee_miss_chance = 5
|
||||
attacktext = list("rammed")
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 60,
|
||||
"bullet" = 50,
|
||||
"laser" = 50,
|
||||
@@ -365,7 +365,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
gender = NEUTER
|
||||
faction = "metroids"
|
||||
move_to_delay = 4
|
||||
|
||||
|
||||
move_shoot = 1 //Move and shoot at the same time.
|
||||
ranged_cooldown = 0 //What the starting cooldown is on ranged attacks
|
||||
ranged_cooldown_time = 150 //How long, in deciseconds, the cooldown of ranged attacks is
|
||||
@@ -407,7 +407,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
/mob/living/simple_animal/hostile/metroid/combat/gamma/New()
|
||||
playsound(src, 'sound/metroid/metroidgamma.ogg', 100, 1)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/gamma/death()
|
||||
playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
|
||||
..()
|
||||
@@ -417,14 +417,14 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
vore_bump_chance = 0
|
||||
vore_capacity = 1
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_pounce_chance = 15
|
||||
vore_pounce_chance = 15
|
||||
vore_default_mode = DM_DIGEST
|
||||
swallowTime = 3 SECONDS
|
||||
swallowTime = 3 SECONDS
|
||||
vore_escape_chance = 20
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
@@ -444,7 +444,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_miss_chance = 5
|
||||
attack_armor_pen = 10
|
||||
attacktext = list("slashed")
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 70,
|
||||
"bullet" = 60,
|
||||
"laser" = 50,
|
||||
@@ -455,7 +455,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
gender = NEUTER
|
||||
faction = "metroids"
|
||||
move_to_delay = 4
|
||||
|
||||
|
||||
move_shoot = 1 //Move and shoot at the same time.
|
||||
ranged_cooldown = 0 //What the starting cooldown is on ranged attacks
|
||||
ranged_cooldown_time = 60 //How long, in deciseconds, the cooldown of ranged attacks is
|
||||
@@ -474,7 +474,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
unsuitable_atoms_damage = 0
|
||||
|
||||
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
old_x = -16
|
||||
@@ -499,7 +499,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
/mob/living/simple_animal/hostile/metroid/combat/zeta/New()
|
||||
playsound(src, 'sound/metroid/metroidzeta.ogg', 100, 1)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/zeta/death()
|
||||
playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1)
|
||||
..()
|
||||
@@ -509,15 +509,15 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
vore_bump_chance = 0
|
||||
vore_capacity = 1
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_pounce_chance = 20
|
||||
vore_pounce_chance = 20
|
||||
vore_default_mode = DM_DIGEST
|
||||
swallowTime = 3 SECONDS
|
||||
swallowTime = 3 SECONDS
|
||||
vore_escape_chance = 15
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
@@ -537,7 +537,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_miss_chance = 5
|
||||
attack_armor_pen = 20
|
||||
attacktext = list("slashed")
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 75,
|
||||
"bullet" = 60,
|
||||
"laser" = 55,
|
||||
@@ -549,7 +549,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
faction = "metroids"
|
||||
speed = 4
|
||||
move_to_delay = 5
|
||||
|
||||
|
||||
move_shoot = 1 //Move and shoot at the same time.
|
||||
ranged_cooldown = 0 //What the starting cooldown is on ranged attacks
|
||||
ranged_cooldown_time = 150 //How long, in deciseconds, the cooldown of ranged attacks is
|
||||
@@ -568,7 +568,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
unsuitable_atoms_damage = 0
|
||||
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
@@ -593,7 +593,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
/mob/living/simple_animal/hostile/metroid/combat/omega/New()
|
||||
playsound(src, 'sound/metroid/metroidomega.ogg', 100, 1)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/omega/death()
|
||||
playsound(src, 'sound/metroid/metroidomegadeath.ogg', 100, 1)
|
||||
..()
|
||||
@@ -603,21 +603,21 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
vore_bump_chance = 0
|
||||
vore_capacity = 2
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_pounce_chance = 40
|
||||
vore_pounce_chance = 40
|
||||
vore_default_mode = DM_DIGEST
|
||||
swallowTime = 3 SECONDS
|
||||
vore_escape_chance = 5
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/queen
|
||||
name = "queen metroid"
|
||||
desc = "The mother of all Metroids, allowed to have grown too far!"
|
||||
desc = "The mother of all Metroids - allowed to have grown too far!"
|
||||
tt_desc = "Maximus Queenamus Deathamus"
|
||||
icon = 'icons/mob/metroid/queen.dmi'
|
||||
icon_dead = "queen_dead"
|
||||
@@ -631,7 +631,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_miss_chance = 5
|
||||
attack_armor_pen = 20
|
||||
attacktext = list("gnashed")
|
||||
armor = list(
|
||||
armor = list(
|
||||
"melee" = 75,
|
||||
"bullet" = 60,
|
||||
"laser" = 60,
|
||||
@@ -661,7 +661,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
unsuitable_atoms_damage = 0
|
||||
|
||||
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
old_x = -16
|
||||
@@ -677,18 +677,19 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
cooperative = 1
|
||||
evo_point = 1100
|
||||
evo_limit = INFINITY
|
||||
next = "/mob/living/simple_animal/hostile/metroid/evolution/super"
|
||||
|
||||
next = null
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/queen/New()
|
||||
playsound(src, 'sound/metroid/metroidqueen.ogg', 100, 1)
|
||||
queen_amount++
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/queen/death()
|
||||
playsound(src, 'sound/metroid/metroidqueendeath.ogg', 100, 1)
|
||||
queen_amount--
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/queen //active noms
|
||||
vore_active = 1
|
||||
vore_bump_chance = 0
|
||||
@@ -705,13 +706,13 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
|
||||
|
||||
/*
|
||||
//Objects related to the Metroids.
|
||||
//Objects related to the Metroids.
|
||||
//Projectile for the Metroids.
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/projectile/energy/metroidacid
|
||||
|
||||
|
||||
name = "metroid acid"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 10
|
||||
@@ -719,7 +720,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
agony = 10
|
||||
check_armour = "bio"
|
||||
armor_penetration = 50
|
||||
|
||||
|
||||
//EGG! Metroid egg and its mechanics. Ripped from spiders.
|
||||
/obj/effect/metroid/egg
|
||||
name = "egg cluster"
|
||||
@@ -757,9 +758,9 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
//LIFE STUFF, AND MECHANICS!
|
||||
@@ -775,7 +776,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
release_vore_contents()
|
||||
prey_excludes.Cut()
|
||||
stop_consumption()
|
||||
|
||||
|
||||
if(canEvolve == 1 && nutrition >= evo_point && !buckled && vore_fullness == 0 && !victim)
|
||||
playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1)
|
||||
paralysis = 7998
|
||||
@@ -793,8 +794,8 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
new next(get_turf(src))
|
||||
visible_message("<span class='warning'>\The [src] suddenly evolves!</span>")
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/handle_regular_status_updates()
|
||||
if(stat != DEAD)
|
||||
|
||||
@@ -816,7 +817,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
visible_message("<span class='danger'>\The [src] starts trying to slide itself into the vent!</span>")
|
||||
sleep(50) //Let's stop the metroid for five seconds to do its parking job
|
||||
..()
|
||||
if(entry_vent.network && entry_vent.network.normal_members.len)
|
||||
if(!victim && !buckled && vore_fullness == 0 && entry_vent.network && entry_vent.network.normal_members.len)
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.network.normal_members)
|
||||
vents.Add(temp_vent)
|
||||
@@ -848,7 +849,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
if(prob(input * 2)) // Gain around one level per 50 nutrition
|
||||
power_charge = min(power_charge++, 10)
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/PunchTarget() //this segment determines what the mob does depending on its intent.
|
||||
if(victim)
|
||||
return // Already eatting someone.
|
||||
@@ -953,7 +954,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/DoPunch(var/mob/living/L) //Metroid melee.
|
||||
var/damage_to_do = rand(melee_damage_lower, melee_damage_upper)
|
||||
var/armor_modifier = abs((L.getarmor(null, "bio") / 100) - 1)
|
||||
|
||||
|
||||
if(!Adjacent(L)) // Might've moved away in the meantime.
|
||||
return
|
||||
|
||||
@@ -1061,8 +1062,8 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
paralysis = 7998
|
||||
sleep(50)
|
||||
paralysis = 0
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/FindTarget() //This makes it so it doesn't go after another target while succing.
|
||||
if(victim) // Don't worry about finding another target if we're sucking on someone's head.
|
||||
return
|
||||
@@ -1080,9 +1081,9 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/baby/Found(mob/living/L)
|
||||
if(isliving(L))
|
||||
if(SA_attackable(L))
|
||||
@@ -1093,21 +1094,21 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
return H // Monkeys are always food.
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
|
||||
return H // Monkeys are always food.
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
//LIFE PROCS!
|
||||
//FOR THE COMBAT FORMS
|
||||
//LIFE PROCS!
|
||||
//FOR THE COMBAT FORMS
|
||||
*/
|
||||
|
||||
|
||||
@@ -1118,32 +1119,23 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
if(canEvolve == 1 && nutrition >= evo_limit && vore_fullness == TRUE) //spit dat crap out if nutrition gets too high!
|
||||
release_vore_contents()
|
||||
prey_excludes.Cut()
|
||||
|
||||
if(canEvolve == 1 && nutrition >= evo_point && vore_fullness == 0)
|
||||
|
||||
if(canEvolve == 1 && nutrition >= evo_point && vore_fullness == 0 && next != "/mob/living/simple_animal/hostile/metroid/combat/queen")
|
||||
playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1)
|
||||
paralysis = 7998
|
||||
sleep(50)
|
||||
paralysis = 0
|
||||
expand_troid()
|
||||
return
|
||||
if(stance == 7) //Necessary to fix a bug where if their prey or latching victim is laying down when they evolve, they get stuck in stance 7 and do nothing.
|
||||
stance = 4
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/omega/Life()
|
||||
. = ..()
|
||||
if(queen_amount == 0 && prob(5) && canEvolve == 1 && nutrition >= evo_point)
|
||||
else if(queen_amount == 0 && prob(5) && canEvolve == 1 && nutrition >= evo_point && vore_fullness == 0 && next == "/mob/living/simple_animal/hostile/metroid/combat/queen")
|
||||
playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1)
|
||||
queen_amount++
|
||||
paralysis = 7998
|
||||
sleep(50)
|
||||
paralysis = 0
|
||||
expand_troid()
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/queen/Life()
|
||||
. = ..()
|
||||
var/obj/effect/metroid/egg/E = locate() in get_turf(src)
|
||||
if(canEvolve == 1 && nutrition >= evo_point && !E)
|
||||
else if(next == null && canEvolve == 1 && nutrition >= evo_point)
|
||||
playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1)
|
||||
src.visible_message("<span class='notice'>\The [src] begins to lay an egg.</span>")
|
||||
stop_automated_movement = 1
|
||||
@@ -1153,7 +1145,12 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
nutrition = 400
|
||||
return
|
||||
|
||||
|
||||
if(stance == 7) //Necessary to fix a bug where if their prey or latching victim is laying down when they evolve, they get stuck in stance 7 and do nothing.
|
||||
stance = 4
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/combat/proc/adjust_nutrition(input)
|
||||
nutrition = (nutrition + input) //It handles the metroid's nutrition gain from melee.
|
||||
@@ -1171,7 +1168,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
/mob/living/simple_animal/hostile/metroid/combat/DoPunch(var/mob/living/L) //Metroid actions vs the player.
|
||||
var/damage_to_do = rand(melee_damage_lower, melee_damage_upper)
|
||||
var/armor_modifier = abs((L.getarmor(null, "bio") / 100) - 1)
|
||||
|
||||
|
||||
if(!Adjacent(L)) // Might've moved away in the meantime.
|
||||
return
|
||||
|
||||
@@ -1187,12 +1184,12 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
|
||||
if(I_HURT) //The metroid does this if it can't latch onto the target or it decides not to try knocking them down.
|
||||
ai_log("DoPunch() against [L], hurting.",2)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
L.attack_generic(src, damage_to_do, pick(attacktext))
|
||||
playsound(src, 'sound/weapons/bite.ogg', 75, 1)
|
||||
|
||||
|
||||
// Give the Metroid some nutrition, if applicable, even if not attached.
|
||||
if(!L.isSynthetic())
|
||||
if(ishuman(L))
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RERR!", "RAHH!", "RAH!", "WARF!")
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15 //Don't break my bones bro
|
||||
response_help = "pets the"
|
||||
response_disarm = "bops the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "hits"
|
||||
attacktext = list("mauled")
|
||||
friendly = list("nuzzles", "slobberlicks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on")
|
||||
meat_amount = 6
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
emote_see = list("runs in a circle", "shakes", "scritches at something")
|
||||
say_maybe_target = list("Squeek?")
|
||||
say_got_target = list("SQUEEK!")
|
||||
response_help = "pets the"
|
||||
response_disarm = "bops the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "hits"
|
||||
attacktext = list("ravaged")
|
||||
friendly = list("nuzzles", "licks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on")
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
maxHealth = 30
|
||||
health = 30
|
||||
|
||||
response_help = "pats the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pats"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5
|
||||
@@ -56,3 +56,40 @@
|
||||
health = 100
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 20
|
||||
|
||||
/mob/living/simple_animal/redpanda/alt
|
||||
icon = 'icons/mob/vore48x48.dmi'
|
||||
icon_state = "wah_alt"
|
||||
icon_living = "wah_alt"
|
||||
icon_dead = "wah_alt_dead"
|
||||
|
||||
pixel_x = -7
|
||||
|
||||
/mob/living/simple_animal/redpanda/alt/waaah
|
||||
name = "waaah"
|
||||
desc = "It's a waaah! Waaaaaaaaaah!"
|
||||
tt_desc = "Ailurus waaahius"
|
||||
icon_state = "wah_altwaaah"
|
||||
icon_living = "wah_altwaaah"
|
||||
icon_dead = "wah_altwaaah_dead"
|
||||
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
|
||||
response_help = "pats"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 2
|
||||
attacktext = list("bapped rapidly!")
|
||||
|
||||
turns_per_move = 1
|
||||
|
||||
speak_chance = 25
|
||||
speak = list("Waaah!",
|
||||
"Waaah?",
|
||||
"Waaaaaaaaaah!")
|
||||
emote_hear = list("wahs!","wahs even more!")
|
||||
emote_see = list("trundles around wahing","rears up onto their hind legs and wahs at everyone!")
|
||||
@@ -0,0 +1,203 @@
|
||||
/mob/living/simple_animal/shadekin/initialize()
|
||||
var/list/ability_types = subtypesof(/obj/effect/shadekin_ability)
|
||||
if(name == "Rakshasa")
|
||||
ability_types += subtypesof(/obj/effect/rakshasa_ability)
|
||||
shadekin_abilities = list()
|
||||
for(var/type in ability_types)
|
||||
shadekin_abilities += new type(src)
|
||||
|
||||
update_icon()
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/effect/rakshasa_ability
|
||||
name = ""
|
||||
desc = ""
|
||||
icon = 'icons/mob/screen_spells.dmi'
|
||||
var/ability_name = "FIX ME"
|
||||
var/cost = 50
|
||||
var/mob/living/simple_animal/shadekin/my_kin
|
||||
var/shift_mode = NOT_WHILE_SHIFTED
|
||||
var/ab_sound
|
||||
|
||||
/obj/effect/rakshasa_ability/New(var/new_kin)
|
||||
..()
|
||||
my_kin = new_kin
|
||||
loc = null
|
||||
|
||||
/obj/effect/rakshasa_ability/Destroy()
|
||||
my_kin = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/rakshasa_ability/proc/atom_button_text()
|
||||
var/shift_denial
|
||||
|
||||
if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED))
|
||||
shift_denial = "Physical Only"
|
||||
else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED))
|
||||
shift_denial = "Shifted Only"
|
||||
|
||||
if(shift_denial)
|
||||
name = shift_denial
|
||||
else
|
||||
name = my_kin.energy >= cost ? "Activate" : "No Energy"
|
||||
return src
|
||||
|
||||
/obj/effect/rakshasa_ability/Click(var/location, var/control, var/params)
|
||||
if(my_kin.stat) return
|
||||
|
||||
var/list/clickprops = params2list(params)
|
||||
var/opts = clickprops["shift"]
|
||||
|
||||
if(opts)
|
||||
to_chat(my_kin,"<span class='notice'><b>[name]</b> (Cost: [cost]%) - [desc]</span>")
|
||||
else
|
||||
do_ability(my_kin)
|
||||
|
||||
/obj/effect/rakshasa_ability/proc/do_ability()
|
||||
if(my_kin.stat)
|
||||
to_chat(my_kin,"<span class='warning'>Can't use that ability in your state!</span>")
|
||||
return FALSE
|
||||
if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED))
|
||||
to_chat(my_kin,"<span class='warning'>Can't use that ability while phase shifted!</span>")
|
||||
return FALSE
|
||||
else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED))
|
||||
to_chat(my_kin,"<span class='warning'>Can only use that ability while phase shifted!</span>")
|
||||
return FALSE
|
||||
else if(my_kin.energy < cost)
|
||||
to_chat(my_kin,"<span class='warning'>Not enough energy for that ability!</span>")
|
||||
return FALSE
|
||||
|
||||
my_kin.energy -= cost
|
||||
if(ab_sound)
|
||||
playsound(src,ab_sound,75,1)
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/effect/rakshasa_ability/phase_shift2
|
||||
ability_name = "Goo Shift"
|
||||
desc = "Shift yourself with goopy effects."
|
||||
icon_state = "tech_passwall"
|
||||
cost = 100
|
||||
shift_mode = SHIFTED_OR_NOT
|
||||
ab_sound = 'sound/effects/stealthoff.ogg'
|
||||
/obj/effect/rakshasa_ability/phase_shift2/do_ability()
|
||||
if(!..())
|
||||
return
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc, src)
|
||||
playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1)
|
||||
my_kin.phase_shift()
|
||||
if(my_kin.ability_flags & AB_PHASE_SHIFTED)
|
||||
cost = 0 //Shifting back is free (but harmful in light)
|
||||
new /obj/effect/decal/cleanable/blood/oil(my_kin.loc)
|
||||
var/goo_sounds = list (
|
||||
'sound/rakshasa/Decay1.ogg',
|
||||
'sound/rakshasa/Decay2.ogg',
|
||||
'sound/rakshasa/Decay3.ogg'
|
||||
)
|
||||
var/sound = pick(goo_sounds)
|
||||
playsound(my_kin.loc, sound, 100, 1)
|
||||
else
|
||||
cost = initial(cost)
|
||||
new /obj/effect/decal/cleanable/blood/oil(my_kin.loc)
|
||||
playsound(my_kin.loc, 'sound/rakshasa/Emerge0.ogg', 100, 1)
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/obj/effect/rakshasa_ability/phase_shift3
|
||||
ability_name = "Goo Shift No Emerge"
|
||||
desc = "Shift yourself with goopy effects."
|
||||
icon_state = "tech_passwall"
|
||||
cost = 100
|
||||
shift_mode = SHIFTED_OR_NOT
|
||||
ab_sound = 'sound/effects/stealthoff.ogg'
|
||||
/obj/effect/rakshasa_ability/phase_shift3/do_ability()
|
||||
if(!..())
|
||||
return
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc, src)
|
||||
playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1)
|
||||
my_kin.phase_shift()
|
||||
if(my_kin.ability_flags & AB_PHASE_SHIFTED)
|
||||
cost = 0 //Shifting back is free (but harmful in light)
|
||||
new /obj/effect/decal/cleanable/blood/oil(my_kin.loc)
|
||||
var/goo_sounds = list (
|
||||
'sound/rakshasa/Decay1.ogg',
|
||||
'sound/rakshasa/Decay2.ogg',
|
||||
'sound/rakshasa/Decay3.ogg'
|
||||
)
|
||||
var/sound = pick(goo_sounds)
|
||||
playsound(my_kin.loc, sound, 100, 1)
|
||||
else
|
||||
cost = initial(cost)
|
||||
new /obj/effect/decal/cleanable/blood/oil(my_kin.loc)
|
||||
var/goo_sounds = list (
|
||||
'sound/rakshasa/Decay1.ogg',
|
||||
'sound/rakshasa/Decay2.ogg',
|
||||
'sound/rakshasa/Decay3.ogg'
|
||||
)
|
||||
var/sound = pick(goo_sounds)
|
||||
playsound(my_kin.loc, sound, 100, 1)
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/obj/effect/rakshasa_ability/drip_oil
|
||||
ability_name = "Goo Drip"
|
||||
desc = "Drip some goo."
|
||||
icon_state = ""
|
||||
cost = 0
|
||||
shift_mode = SHIFTED_OR_NOT
|
||||
ab_sound = 'sound/effects/stealthoff.ogg'
|
||||
/obj/effect/rakshasa_ability/drip_oil/do_ability()
|
||||
if(!..())
|
||||
return
|
||||
new /obj/effect/decal/cleanable/blood/oil(my_kin.loc)
|
||||
var/goo_sounds = list (
|
||||
'sound/rakshasa/Decay1.ogg',
|
||||
'sound/rakshasa/Decay2.ogg',
|
||||
'sound/rakshasa/Decay3.ogg'
|
||||
)
|
||||
var/sound = pick(goo_sounds)
|
||||
playsound(my_kin.loc, sound, 100, 1)
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/obj/effect/rakshasa_ability/laugh
|
||||
ability_name = "Laugh"
|
||||
desc = "Laugh."
|
||||
icon_state = ""
|
||||
cost = 0
|
||||
shift_mode = SHIFTED_OR_NOT
|
||||
ab_sound = 'sound/effects/stealthoff.ogg'
|
||||
/obj/effect/rakshasa_ability/laugh/do_ability()
|
||||
if(!..())
|
||||
return
|
||||
playsound(my_kin.loc, 'sound/rakshasa/Laugh.ogg', 100, 1)
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/obj/effect/rakshasa_ability/no
|
||||
ability_name = "Say No"
|
||||
desc = "Say no!"
|
||||
icon_state = ""
|
||||
cost = 0
|
||||
shift_mode = SHIFTED_OR_NOT
|
||||
ab_sound = 'sound/effects/stealthoff.ogg'
|
||||
/obj/effect/rakshasa_ability/no/do_ability()
|
||||
if(!..())
|
||||
return
|
||||
playsound(my_kin.loc, 'sound/rakshasa/No.ogg', 100, 1)
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/obj/effect/rakshasa_ability/trap
|
||||
ability_name = "Lay Trap"
|
||||
desc = "Lay a trap that will notify you when someone steps in it."
|
||||
icon_state = ""
|
||||
cost = 0
|
||||
shift_mode = SHIFTED_OR_NOT
|
||||
ab_sound = 'sound/effects/stealthoff.ogg'
|
||||
/obj/effect/rakshasa_ability/trap/do_ability()
|
||||
if(!..())
|
||||
return
|
||||
var/goo_sounds = list (
|
||||
'sound/rakshasa/Corrosion1.ogg',
|
||||
'sound/rakshasa/Corrosion2.ogg',
|
||||
'sound/rakshasa/Corrosion3.ogg'
|
||||
)
|
||||
var/sound = pick(goo_sounds)
|
||||
playsound(my_kin.loc, sound, 100, 1)
|
||||
new /obj/structure/gootrap (my_kin.loc)
|
||||
@@ -0,0 +1,76 @@
|
||||
/obj/structure/gootrap
|
||||
name = "goo"
|
||||
throw_speed = 2
|
||||
throw_range = 1
|
||||
gender = PLURAL
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
var/base_icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "mfloor1"
|
||||
var/basecolor="#030303"
|
||||
desc = ""
|
||||
throwforce = 0
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
var/deployed = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/gootrap/proc/can_use(mob/user)
|
||||
return (user.IsAdvancedToolUser() && !issilicon(user) && !user.stat && !user.restrained())
|
||||
|
||||
/obj/structure/gootrap/update_icon()
|
||||
..()
|
||||
color = basecolor
|
||||
|
||||
/obj/structure/gootrap/New()
|
||||
..()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/structure/gootrap/attack_hand(mob/user as mob)
|
||||
if(has_buckled_mobs() && can_use(user))
|
||||
var/victim = english_list(buckled_mobs)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] begins freeing [victim] from \the [src].</span>",
|
||||
"<span class='notice'>You carefully begin to free [victim] from \the [src].</span>",
|
||||
)
|
||||
if(do_after(user, 5))
|
||||
user.visible_message("<span class='notice'>[victim] has been freed from \the [src] by [user].</span>")
|
||||
for(var/A in buckled_mobs)
|
||||
unbuckle_mob(A)
|
||||
anchored = 0
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/gootrap/proc/attack_mob(mob/living/L)
|
||||
//trap the victim in place
|
||||
set_dir(L.dir)
|
||||
can_buckle = 1
|
||||
buckle_mob(L)
|
||||
var/goo_sounds = list (
|
||||
'sound/rakshasa/Decay1.ogg',
|
||||
'sound/rakshasa/Decay2.ogg',
|
||||
'sound/rakshasa/Decay3.ogg'
|
||||
)
|
||||
var/sound = pick(goo_sounds)
|
||||
playsound(src, sound, 100, 1)
|
||||
L << "<span class='danger'>You hear a gooey schlorp as \the [src] ensnares your leg, trapping you in place!</span>"
|
||||
deployed = 0
|
||||
can_buckle = initial(can_buckle)
|
||||
|
||||
|
||||
/obj/structure/gootrap/Crossed(AM as mob|obj)
|
||||
if(deployed && isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(L.m_intent == "run")
|
||||
L.visible_message(
|
||||
"<span class='danger'>[L] steps on \the [src].</span>",
|
||||
"<span class='danger'>You step on \the [src]!</span>",
|
||||
"<b>You hear a gooey schlorp as the goo ensnares your leg!</b>"
|
||||
)
|
||||
attack_mob(L)
|
||||
if(!has_buckled_mobs())
|
||||
anchored = 0
|
||||
deployed = 0
|
||||
message_admins("[key_name(usr)] has stepped in the goo trap.")
|
||||
..()
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
emote_see = list("tailtwitches", "earflicks")
|
||||
say_maybe_target = list("...mar?")
|
||||
say_got_target = list("MAR!!!")
|
||||
response_help = "pets the"
|
||||
response_disarm = "bops the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "hits"
|
||||
attacktext = list("mauled","slashed","clawed")
|
||||
friendly = list("boops", "pawbs", "mars softly at", "sniffs on")
|
||||
reactions = list("Mar?" = "Marrr!", "Mar!" = "Marrr???", "Mar." = "Marrr.")
|
||||
|
||||
@@ -52,6 +52,24 @@
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_HEAD)
|
||||
|
||||
athena_panels
|
||||
name = "Hephaestus - Athena FBP Panels"
|
||||
icon_state = "athena_p"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
|
||||
|
||||
athena_panels_body
|
||||
name = "Hephaestus - Athena FBP Panels (body)"
|
||||
icon_state = "athena_p"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
|
||||
|
||||
athena_panels_head
|
||||
name = "Hephaestus - Athena FBP Panels (head)"
|
||||
icon_state = "athena_p"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
rook_lights
|
||||
name = "Bishop - Rook lights"
|
||||
icon_state = "rook-l"
|
||||
|
||||
Reference in New Issue
Block a user