mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
[MIRROR] Simple mob port [IDB IGNORE] (#11492)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> Co-authored-by: C.L. <killer65311@gmail.com>
This commit is contained in:
committed by
GitHub
parent
9696eca7b3
commit
4febf95738
@@ -92,6 +92,9 @@
|
||||
#define PLANT_WURMWOAD "wurmwoad"
|
||||
#define PLANT_MICROM "microm"
|
||||
#define PLANT_MEGAM "megam"
|
||||
#define PLANT_TEA "tea"
|
||||
#define PLANT_PITCHERPLANT "pitcher plant"
|
||||
#define PLANT_NULLHARDLIGHT "Type NULL Hardlight Generator"
|
||||
|
||||
// CHompAdd Start
|
||||
#define PLANT_VOLTATO "voltato"
|
||||
@@ -104,9 +107,6 @@
|
||||
#define PLANT_BLUESAPBEAN "bluesapbean"
|
||||
#define PLANT_BLACKSAPBEAN "blacksapbean"
|
||||
#define PLANT_MEATWHEAT "meatwheat"
|
||||
#define PLANT_TEA "tea"
|
||||
#define PLANT_PITCHERPLANT "pitcher plant"
|
||||
#define PLANT_NULLHARDLIGHT "Type NULL Hardlight Generator"
|
||||
#define PLANT_CINNAMON "cinnamon"
|
||||
#define PLANT_GARDENIA "gardenia"
|
||||
#define PLANT_CHERRYBOMB "cherrybomb"
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
#define REAGENT_ID_FLUORINE "fluorine"
|
||||
#define REAGENT_CHLORINE "Chlorine"
|
||||
#define REAGENT_ID_CHLORINE "chlorine"
|
||||
#define REAGENT_MIASMA "Miasma"
|
||||
#define REAGENT_ID_MIASMA "miasma"
|
||||
|
||||
|
||||
// Fluid Reagents
|
||||
@@ -147,6 +149,8 @@
|
||||
#define REAGENT_ID_PAROXETINE "paroxetine"
|
||||
#define REAGENT_QERRQUEM "Qerr-quem"
|
||||
#define REAGENT_ID_QERRQUEM "qerr_quem"
|
||||
#define REAGENT_APHRODISIAC "Aphrodisiac"
|
||||
#define REAGENT_ID_APHRODISIAC "aphrodisiac"
|
||||
|
||||
|
||||
// Modifiers
|
||||
@@ -433,6 +437,8 @@
|
||||
#define REAGENT_ID_LIQUIDCARPETO "liquidcarpeto"
|
||||
#define REAGENT_ESSENTIALOIL "Essential Oils"
|
||||
#define REAGENT_ID_ESSENTIALOIL "essential_oil"
|
||||
#define REAGENT_PITCHERNECTAR "Pitcher Nectar"
|
||||
#define REAGENT_ID_PITCHERNECTAR "pitcher_nectar"
|
||||
|
||||
|
||||
// Admin chems
|
||||
@@ -1033,6 +1039,8 @@
|
||||
#define REAGENT_ID_CHAMPAGNE "champagne"
|
||||
#define REAGENT_CIDER "Cider"
|
||||
#define REAGENT_ID_CIDER "cider"
|
||||
#define REAGENT_TEAMUSH "Tea mush"
|
||||
#define REAGENT_ID_TEAMUSH "teamush"
|
||||
|
||||
// Cocktails
|
||||
#define REAGENT_ACIDSPIT "Acid Spit"
|
||||
@@ -1369,6 +1377,11 @@
|
||||
#define REAGENT_ID_METAMORPHIC "metamorphic"
|
||||
#define REAGENT_BINDING "Binding Metal"
|
||||
#define REAGENT_ID_BINDING "binding"
|
||||
#define REAGENT_NUMBING_FLUID "Numbing Fluid"
|
||||
#define REAGENT_ID_NUMBING_FLUID "succubi_numbing"
|
||||
#define REAGENT_PARALYZE_FLUID "Paralyzing Fluid"
|
||||
#define REAGENT_ID_PARALYZE_FLUID "succubi_paralize"
|
||||
#define REAGENT_ID_APHRODIAC_FLUID "succubi_aphrodisiac"
|
||||
|
||||
|
||||
// Xenoslimes
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
// Gas
|
||||
#define REAGENT_MIASMA "Miasma"
|
||||
#define REAGENT_ID_MIASMA "miasma"
|
||||
|
||||
// Drugs
|
||||
#define REAGENT_CLEANSINGAGENT "Cleansing Agent"
|
||||
#define REAGENT_ID_CLEANSINGAGENT "cleansingagent"
|
||||
@@ -33,8 +29,6 @@
|
||||
#define REAGENT_ID_PHOENIXBREATH "phoenixbreath"
|
||||
#define REAGENT_DRYAGENT "Dry Agent"
|
||||
#define REAGENT_ID_DRYAGENT "dryagent"
|
||||
#define REAGENT_APHRODISIAC "Aphrodisiac"
|
||||
#define REAGENT_ID_APHRODISIAC "aphrodisiac"
|
||||
#define REAGENT_SORBITOL "Sorbitol"
|
||||
#define REAGENT_ID_SORBITOL "sorbitol"
|
||||
#define REAGENT_CLARIDYL "Claridyl Natural Remedy"
|
||||
@@ -97,8 +91,6 @@
|
||||
#define REAGENT_ID_FRESHTEA "freshtea"
|
||||
#define REAGENT_FRESHGREENTEA "Refreshing green tea"
|
||||
#define REAGENT_ID_FRESHTEAGREEN "freshteagreen"
|
||||
#define REAGENT_TEAMUSH "Tea mush"
|
||||
#define REAGENT_ID_TEAMUSH "teamush"
|
||||
#define REAGENT_INSTANTTEAPOWDERGREEN "Instant green tea powder"
|
||||
#define REAGENT_ID_INSTANTTEAPOWDERGREEN "instantteapowdergreen"
|
||||
#define REAGENT_INSTANTTEAGREEN "Instant green tea"
|
||||
@@ -177,8 +169,6 @@
|
||||
#define REAGENT_ID_ALUMINUMNITRATE "aluminum_nitrate"
|
||||
#define REAGENT_SPIDEREGG "spider eggs"
|
||||
#define REAGENT_ID_SPIDEREGG "spideregg"
|
||||
#define REAGENT_PITCHERNECTAR "Pitcher Nectar"
|
||||
#define REAGENT_ID_PITCHERNECTAR "pitcher_nectar"
|
||||
#define REAGENT_BENZILATE "Odd Goo"
|
||||
#define REAGENT_ID_BENZILATE "benzilate"
|
||||
#define REAGENT_PHENETHYLAMINE "Phenethylamine"
|
||||
@@ -271,9 +261,3 @@
|
||||
#define REAGENT_ID_NEOLIQUIDFIRE "neoliquidfire"
|
||||
#define REAGENT_LIQUIDLIFE "Liquid Life"
|
||||
#define REAGENT_ID_LIQUIDLIFE "liquidlife"
|
||||
|
||||
#define REAGENT_NUMBING_FLUID "Numbing Fluid"
|
||||
#define REAGENT_ID_NUMBING_FLUID "succubi_numbing"
|
||||
#define REAGENT_PARALYZE_FLUID "Paralyzing Fluid"
|
||||
#define REAGENT_ID_PARALYZE_FLUID "succubi_paralize"
|
||||
#define REAGENT_ID_APHRODIAC_FLUID "succubi_aphrodisiac"
|
||||
|
||||
@@ -20,9 +20,7 @@
|
||||
#define FACTION_VIRGO3B "virgo3b"
|
||||
|
||||
#define FACTION_ALTEVIAN "altevian"
|
||||
#define FACTION_BLACKHOLE "blackhole" //CHOMPAdd
|
||||
#define FACTION_CULT "cult"
|
||||
#define FACTION_ECLIPSE "eclipse" //CHOMPAdd
|
||||
#define FACTION_GLAMOUR "glamour"
|
||||
#define FACTION_PIRATE "pirate"
|
||||
#define FACTION_SHADEKIN "shadekin"
|
||||
@@ -108,8 +106,6 @@
|
||||
#define FACTION_SUCCUBUS "succubus"
|
||||
#define FACTION_SWARMER "swarmer"
|
||||
#define FACTION_TEPPI "teppi"
|
||||
#define FACTION_TYR "tyr" //CHOMPAdd
|
||||
#define FACTION_TYR_ANT "tyr_ants" //CHOMPAdd
|
||||
#define FACTION_TUNNELCLOWN "tunnelclown"
|
||||
#define FACTION_TURKEY "turkey"
|
||||
#define FACTION_WILD_ANIMAL "wild animal"
|
||||
@@ -118,12 +114,16 @@
|
||||
#define FACTION_WORM "worm"
|
||||
#define FACTION_XENO "xeno"
|
||||
#define FACTION_CORGI "corgi"
|
||||
#define FACTION_ZORGOIA "zorgoia" // CHOMPAdd
|
||||
#define FACTION_ZORGOIA "zorgoia"
|
||||
|
||||
#define FACTION_PLANTS "plants"
|
||||
|
||||
#define FACTION_MATH "MATH"
|
||||
|
||||
//CHOMPAdd Start factions
|
||||
#define FACTION_TYR "tyr" //CHOMPAdd
|
||||
#define FACTION_TYR_ANT "tyr_ants" //CHOMPAdd
|
||||
#define FACTION_AWAYMISSION "awaymission"
|
||||
#define FACTION_BLACKHOLE "blackhole" //CHOMPAdd
|
||||
#define FACTION_ECLIPSE "eclipse" //CHOMPAdd
|
||||
//CHOMPAdd End
|
||||
|
||||
@@ -65,3 +65,16 @@
|
||||
time = 180
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/ziplaser
|
||||
name = "Ziplaser"
|
||||
result = /obj/item/gun/energy/zip/craftable
|
||||
reqs = list(list(/obj/item/cell/high = 1),
|
||||
list(/obj/item/stack/rods = 2),
|
||||
list(/obj/item/stack/material/steel = 8),
|
||||
list(/obj/item/stack/material/plastic = 5),
|
||||
list(/obj/item/cell/device = 2)
|
||||
)
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
@@ -243,3 +243,57 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid,
|
||||
/obj/item/mecha_parts/mecha_equipment/teleporter
|
||||
)
|
||||
|
||||
// Stuff you may find attached to a mouse tank.
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/datum/element/lootable/mecha/mouse_tank
|
||||
loot_left= 5
|
||||
|
||||
common_loot = list(
|
||||
/obj/random/tool,
|
||||
/obj/random/tool,
|
||||
/obj/item/stack/cable_coil/random,
|
||||
/obj/random/tank,
|
||||
/obj/random/tech_supply/component,
|
||||
/obj/random/tech_supply/component,
|
||||
/obj/effect/decal/remains/mouse,
|
||||
/obj/item/stack/material/steel{amount = 20}
|
||||
)
|
||||
|
||||
uncommon_loot = list(
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator
|
||||
)
|
||||
|
||||
rare_loot = list(
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
|
||||
)
|
||||
|
||||
// Stuff you may find attached to a livewire mouse tank.
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/datum/element/lootable/mecha/mouse_tank/livewire
|
||||
|
||||
uncommon_loot = list(
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher
|
||||
)
|
||||
|
||||
rare_loot = list(
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator
|
||||
)
|
||||
|
||||
// Stuff you may find attached to a eraticator mouse tank.
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/datum/element/lootable/mecha/mouse_tank/eraticator
|
||||
|
||||
uncommon_loot = list(
|
||||
/obj/item/ammo_magazine/m75,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar
|
||||
)
|
||||
|
||||
rare_loot = list(
|
||||
/obj/item/gun/projectile/gyropistol,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
|
||||
)
|
||||
|
||||
@@ -173,7 +173,6 @@
|
||||
GLOB.refined_chems_sold[R.industrial_use]["units"] += FLOOR(R.volume, 1)
|
||||
GLOB.refined_chems_sold[R.industrial_use]["value"] += reagent_value
|
||||
|
||||
//CHOMPEdit Start
|
||||
/datum/element/sellable/salvage //For selling /obj/item/salvage
|
||||
|
||||
/datum/element/sellable/salvage/calculate_sell_value(obj/source)
|
||||
@@ -192,4 +191,3 @@
|
||||
if(organ_stuff.health != initial(organ_stuff.health) )
|
||||
return "Error: Product was damaged on arrival."
|
||||
return null
|
||||
//CHOMPEdit End
|
||||
|
||||
@@ -578,6 +578,17 @@
|
||||
tracer_type = /obj/effect/projectile/tracer/inversion
|
||||
impact_type = /obj/effect/projectile/impact/inversion
|
||||
|
||||
/obj/item/projectile/energy/inversion
|
||||
name = "inversion blast"
|
||||
icon = 'icons/obj/projectiles_impact.dmi'
|
||||
icon_state = "impact_invert"
|
||||
damage = 30
|
||||
armor_penetration = 60
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
color = "#ffffff"
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
//Harvester Pain Orb
|
||||
|
||||
/obj/item/spell/construct/spawner/agonizing_sphere
|
||||
@@ -672,3 +683,343 @@
|
||||
user.visible_message(span_bold("\The [user]") + " lowers its fist.")
|
||||
return
|
||||
qdel(src)
|
||||
|
||||
|
||||
////////////////////////////
|
||||
// Purity Construct - Bishop - Spells
|
||||
////////////////////////////
|
||||
|
||||
/spell/targeted/construct_advanced/crippling_beam
|
||||
name = "Crippling Beam"
|
||||
desc = "Fire a crippling beam to hold down your enemies or prey."
|
||||
|
||||
hud_state = "const_beam"
|
||||
spell_obj = /obj/item/spell/construct/projectile/crippling_beam
|
||||
|
||||
/obj/item/spell/construct/projectile/crippling_beam
|
||||
name = "Crippling Beam"
|
||||
icon_state = "generic"
|
||||
desc = "Your manipulators fire crippling beam of dense light."
|
||||
cast_methods = CAST_RANGED
|
||||
spell_projectile = /obj/item/projectile/beam/crippling_beam
|
||||
pre_shot_delay = 0
|
||||
cooldown = 50
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
/obj/item/projectile/beam/crippling_beam
|
||||
name = "Crippling Beam"
|
||||
icon_state = "invert"
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
damage = 20
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
armor_penetration = 60
|
||||
light_range = 2
|
||||
light_power = -2
|
||||
light_color = "#64B4E6"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
|
||||
tracer_type = /obj/effect/projectile/tracer/laser_omni
|
||||
impact_type = /obj/effect/projectile/impact/laser_omni
|
||||
|
||||
/obj/item/projectile/beam/crippling_beam/proc/bang(var/mob/living/carbon/M)
|
||||
to_chat(M, span_danger("You hear a loud roar."))
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
var/ear_safety = 0
|
||||
ear_safety = M.get_ear_protection()
|
||||
if(ear_safety == 1)
|
||||
M.Confuse(150)
|
||||
else if (ear_safety > 1)
|
||||
M.Confuse(30)
|
||||
else if (!ear_safety)
|
||||
M.Stun(10)
|
||||
M.Weaken(2)
|
||||
M.ear_damage += rand(1, 10)
|
||||
M.ear_deaf = max(M.ear_deaf,15)
|
||||
// M.deaf_loop.start() // used Downstream
|
||||
if (M.ear_damage >= 15)
|
||||
to_chat(M, span_danger("Your ears start to ring badly!"))
|
||||
if (prob(M.ear_damage - 5))
|
||||
to_chat(M, span_danger("You can't hear anything!"))
|
||||
M.sdisabilities |= DEAF
|
||||
// M.deaf_loop.start() // used Downstream
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
to_chat(M, span_danger("Your ears start to ring!"))
|
||||
M.update_icons()
|
||||
|
||||
/obj/item/projectile/beam/crippling_beam/on_hit(var/atom/target)
|
||||
bang(target)
|
||||
. = ..()
|
||||
|
||||
/spell/targeted/construct_advanced/banishment
|
||||
name = "banishment"
|
||||
desc = "Fire a searing beam of light, banishing unholy foes."
|
||||
|
||||
hud_state = "const_beam"
|
||||
spell_obj = /obj/item/spell/construct/projectile/banishment
|
||||
|
||||
/obj/item/spell/construct/projectile/banishment
|
||||
name = "banishment"
|
||||
icon_state = "generic"
|
||||
desc = "Your manipulators fire searing beams of light."
|
||||
cast_methods = CAST_RANGED
|
||||
spell_projectile = /obj/item/projectile/beam/banishment
|
||||
pre_shot_delay = 0
|
||||
cooldown = 10
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
/obj/item/projectile/beam/banishment
|
||||
name = "banishment"
|
||||
icon_state = "invert"
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
mob_bonus_damage = 45
|
||||
check_armour = "laser"
|
||||
armor_penetration = 60
|
||||
light_range = 2
|
||||
light_power = -2
|
||||
light_color = "#64B4E6"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/lightning
|
||||
tracer_type = /obj/effect/projectile/tracer/lightning
|
||||
impact_type = /obj/effect/projectile/impact/lightning
|
||||
|
||||
/obj/item/projectile/beam/banishment/proc/banish(var/mob/living/simple_mob/construct)
|
||||
if(construct)
|
||||
construct.Stun(10)
|
||||
construct.Weaken(2)
|
||||
else
|
||||
return
|
||||
|
||||
/obj/item/projectile/beam/banishment/on_hit(var/atom/target)
|
||||
banish(target)
|
||||
. = ..()
|
||||
|
||||
////////////////////////////
|
||||
// Purity Construct - Deacon - Spells
|
||||
////////////////////////////
|
||||
|
||||
///Deacon Laser
|
||||
/spell/targeted/construct_advanced/force_beam
|
||||
name = "Force Beam"
|
||||
desc = "Fire a beam of kinetic energy to force back troublemakers."
|
||||
|
||||
hud_state = "const_beam"
|
||||
spell_obj = /obj/item/spell/construct/projectile/force_beam
|
||||
|
||||
/obj/item/spell/construct/projectile/force_beam
|
||||
name = "force_beam"
|
||||
icon_state = "generic"
|
||||
desc = "Your manipulators fire a condensed beam of kinetic energy."
|
||||
cast_methods = CAST_RANGED
|
||||
spell_projectile = /obj/item/projectile/beam/force_beam
|
||||
pre_shot_delay = 0
|
||||
cooldown = 5
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
/obj/item/projectile/beam/force_beam
|
||||
name = "force beam"
|
||||
icon_state = "invert"
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
damage = 5
|
||||
damage_type = BRUTE
|
||||
check_armour = "melee"
|
||||
armor_penetration = 60
|
||||
light_range = 2
|
||||
light_power = -2
|
||||
light_color = "#64B4E6"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/tungsten
|
||||
tracer_type = /obj/effect/projectile/tracer/tungsten
|
||||
impact_type = /obj/effect/projectile/impact/tungsten
|
||||
|
||||
/obj/item/projectile/beam/force_beam/on_hit(var/atom/movable/target, var/blocked = 0)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(prob(40) && !blocked)
|
||||
L.Stun(1)
|
||||
L.Confuse(1)
|
||||
|
||||
|
||||
///Deacon Healing Sphere
|
||||
/spell/targeted/construct_advanced/soothing_sphere
|
||||
name = "Sphere of soothing"
|
||||
desc = "Rend a portal into a plane of sothing energy at the target location."
|
||||
|
||||
charge_max = 100
|
||||
|
||||
hud_state = "const_harvest"
|
||||
spell_obj = /obj/item/spell/construct/spawner/soothing_sphere
|
||||
|
||||
/obj/item/spell/construct/spawner/soothing_sphere
|
||||
name = "sphere of soothing"
|
||||
desc = "Call forth a portal to a dimension of soothing energies at your target."
|
||||
|
||||
spawner_type = /obj/effect/temporary_effect/pulse/soothing_sphere
|
||||
|
||||
/obj/item/spell/construct/spawner/soothing_sphere/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(within_range(hit_atom) && pay_energy(10))
|
||||
..()
|
||||
|
||||
/obj/item/spell/construct/spawner/soothing_sphere/on_throw_cast(atom/hit_atom, mob/user)
|
||||
pay_energy(5)
|
||||
if(isliving(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
L.add_modifier(/datum/modifier/soothe, 10 SECONDS)
|
||||
|
||||
/obj/effect/temporary_effect/pulse/soothing_sphere
|
||||
name = "soothing sphere"
|
||||
desc = "A portal to some hellish place. Its screams wrack your body with pain."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "blue_static_sphere"
|
||||
time_to_die = null
|
||||
light_range = 4
|
||||
light_power = 5
|
||||
light_color = "#64B4E6"
|
||||
light_on = TRUE
|
||||
pulses_remaining = 10
|
||||
pulse_delay = 1 SECOND
|
||||
|
||||
/obj/effect/temporary_effect/pulse/soothing_sphere/on_pulse()
|
||||
for(var/mob/living/L in view(4,src))
|
||||
if(!iscultist(L) && !istype(L, /mob/living/simple_mob/construct))
|
||||
L.add_modifier(/datum/modifier/soothe, 2 SECONDS)
|
||||
L.adjustBruteLoss(rand(-5,-10))
|
||||
L.adjustFireLoss(rand(-5,-10))
|
||||
|
||||
/datum/modifier/soothe
|
||||
name = "soothe"
|
||||
desc = "Your body is soothed of pain."
|
||||
|
||||
on_created_text = span_notice("A blue lightning quickly covers your body. Pain quickly fading.")
|
||||
on_expired_text = span_notice("The lightning fades, and so too does the ongoing soothing of pain.")
|
||||
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
mob_overlay_state = "blue_electricity_constant"
|
||||
|
||||
/datum/modifier/soothe/tick()
|
||||
spawn()
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/H = holder
|
||||
H.apply_effect(-20, AGONY)
|
||||
if(prob(10))
|
||||
to_chat(H, span_warning("It feels so comforting!"))
|
||||
|
||||
////////////////////////////
|
||||
// Purity Construct - Priest - Spells
|
||||
////////////////////////////
|
||||
|
||||
/spell/targeted/construct_advanced/mend_purity
|
||||
name = "Mend Purity"
|
||||
desc = "Mend a target living being or construct over time."
|
||||
|
||||
charge_max = 100
|
||||
|
||||
hud_state = "const_mend"
|
||||
spell_obj = /obj/item/spell/construct/mend_purity
|
||||
|
||||
/obj/item/spell/construct/mend_purity
|
||||
name = "Mend Purity"
|
||||
desc = "Mend the wounds of constructs or living beings overtime."
|
||||
icon_state = "mend_wounds"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_UNHOLY
|
||||
light_color = "#64B4E6"
|
||||
light_power = -2
|
||||
light_on = TRUE
|
||||
|
||||
/obj/item/spell/construct/mend_purity/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||
if(isliving(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
L.add_modifier(/datum/modifier/mend_purity, 150)
|
||||
qdel(src)
|
||||
|
||||
/datum/modifier/mend_purity
|
||||
name = "holy mending"
|
||||
desc = "Your body is mending, rejoice!"
|
||||
|
||||
on_created_text = span_notice("A holy light envelops your body as it begins to mend.")
|
||||
on_expired_text = span_notice("The cloak of unease dissipates.")
|
||||
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
mob_overlay_state = "blue_electricity_constant"
|
||||
|
||||
/datum/modifier/mend_purity/tick()
|
||||
spawn()
|
||||
if(isliving(holder))
|
||||
var/mob/living/L = holder
|
||||
if(istype(L, /mob/living/simple_mob/construct))
|
||||
L.adjustBruteLoss(rand(-5,-10))
|
||||
L.adjustFireLoss(rand(-5,-10))
|
||||
else
|
||||
L.adjustBruteLoss(-2)
|
||||
L.adjustFireLoss(-2)
|
||||
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/H = holder
|
||||
|
||||
for(var/obj/item/organ/O in H.internal_organs)
|
||||
if(O.damage > 0)
|
||||
O.damage = max(O.damage - 2, 0)
|
||||
if(O.damage <= 5 && O.organ_tag == O_EYES)
|
||||
H.sdisabilities &= ~BLIND
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
O.heal_damage(rand(1,3), rand(1,3), internal = 1, robo_repair = 1)
|
||||
|
||||
for(var/obj/item/organ/E in H.bad_external_organs)
|
||||
var/obj/item/organ/external/affected = E
|
||||
if((affected.damage < affected.min_broken_damage * CONFIG_GET(number/organ_health_multiplier)) && (affected.status & ORGAN_BROKEN))
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
for(var/datum/wound/W in affected.wounds)
|
||||
if(istype(W, /datum/wound/internal_bleeding))
|
||||
affected.wounds -= W
|
||||
affected.update_damages()
|
||||
|
||||
H.restore_blood()
|
||||
if(iscultist(H))
|
||||
H.apply_effect(100, AGONY)//it will heal cultists but purity really doesn't like them so causes much pain
|
||||
if(prob(10))
|
||||
to_chat(H, span_danger("It feels as though your body is being torn apart!"))
|
||||
L.updatehealth()
|
||||
|
||||
/spell/targeted/purity_repair_aura
|
||||
name = "Repair Aura"
|
||||
desc = "Emit a field of energy around your shell to repair nearby constructs at range."
|
||||
|
||||
range = -1
|
||||
school = "evocation"
|
||||
charge_type = Sp_RECHARGE
|
||||
invocation_type = SpI_NONE
|
||||
|
||||
spell_flags = CONSTRUCT_CHECK | INCLUDEUSER
|
||||
|
||||
hud_state = "const_repairaura"
|
||||
smoke_amt = 0
|
||||
|
||||
charge_max = 600
|
||||
|
||||
/spell/targeted/purity_repair_aura/cast(list/targets, mob/living/user)
|
||||
if(findNullRod(user) || user.has_modifier_of_type(/datum/modifier/repair_aura))
|
||||
charge_counter = 300
|
||||
return
|
||||
user.add_modifier(/datum/modifier/repair_aura_purity, 30 SECONDS)
|
||||
|
||||
/datum/modifier/repair_aura_purity
|
||||
name = "aura of repair (purity)"
|
||||
desc = "You are emitting a field of strange energy, capable of repairing constructs."
|
||||
|
||||
on_created_text = span_notice("You begin emitting an purity repair aura.")
|
||||
on_expired_text = span_notice("The purity repair aura fades.")
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
/datum/modifier/repair_aura_purity/tick()
|
||||
spawn()
|
||||
for(var/mob/living/simple_mob/construct/T in view(4,holder))
|
||||
T.adjustBruteLoss(rand(-10,-15))
|
||||
T.adjustFireLoss(rand(-10,-15))
|
||||
|
||||
@@ -1,339 +0,0 @@
|
||||
|
||||
////////////////////////////
|
||||
// Purity Construct - Bishop - Spells
|
||||
////////////////////////////
|
||||
|
||||
/spell/targeted/construct_advanced/crippling_beam
|
||||
name = "Crippling Beam"
|
||||
desc = "Fire a crippling beam to hold down your enemies or prey."
|
||||
|
||||
hud_state = "const_beam"
|
||||
spell_obj = /obj/item/spell/construct/projectile/crippling_beam
|
||||
|
||||
/obj/item/spell/construct/projectile/crippling_beam
|
||||
name = "Crippling Beam"
|
||||
icon_state = "generic"
|
||||
desc = "Your manipulators fire crippling beam of dense light."
|
||||
cast_methods = CAST_RANGED
|
||||
spell_projectile = /obj/item/projectile/beam/crippling_beam
|
||||
pre_shot_delay = 0
|
||||
cooldown = 50
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
/obj/item/projectile/beam/crippling_beam
|
||||
name = "Crippling Beam"
|
||||
icon_state = "invert"
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
damage = 20
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
armor_penetration = 60
|
||||
light_range = 2
|
||||
light_power = -2
|
||||
light_color = "#64B4E6"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
|
||||
tracer_type = /obj/effect/projectile/tracer/laser_omni
|
||||
impact_type = /obj/effect/projectile/impact/laser_omni
|
||||
|
||||
/obj/item/projectile/beam/crippling_beam/proc/bang(var/mob/living/carbon/M)
|
||||
to_chat(M, span_danger("You hear a loud roar."))
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
var/ear_safety = 0
|
||||
ear_safety = M.get_ear_protection()
|
||||
if(ear_safety == 1)
|
||||
M.Confuse(150)
|
||||
else if (ear_safety > 1)
|
||||
M.Confuse(30)
|
||||
else if (!ear_safety)
|
||||
M.Stun(10)
|
||||
M.Weaken(2)
|
||||
M.ear_damage += rand(1, 10)
|
||||
M.ear_deaf = max(M.ear_deaf,15)
|
||||
M.deaf_loop.start()
|
||||
if (M.ear_damage >= 15)
|
||||
to_chat(M, span_danger("Your ears start to ring badly!"))
|
||||
if (prob(M.ear_damage - 5))
|
||||
to_chat(M, span_danger("You can't hear anything!"))
|
||||
M.sdisabilities |= DEAF
|
||||
M.deaf_loop.start()
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
to_chat(M, span_danger("Your ears start to ring!"))
|
||||
M.update_icons()
|
||||
|
||||
/obj/item/projectile/beam/crippling_beam/on_hit(var/atom/target)
|
||||
bang(target)
|
||||
. = ..()
|
||||
|
||||
/spell/targeted/construct_advanced/banishment
|
||||
name = "banishment"
|
||||
desc = "Fire a searing beam of light, banishing unholy foes."
|
||||
|
||||
hud_state = "const_beam"
|
||||
spell_obj = /obj/item/spell/construct/projectile/banishment
|
||||
|
||||
/obj/item/spell/construct/projectile/banishment
|
||||
name = "banishment"
|
||||
icon_state = "generic"
|
||||
desc = "Your manipulators fire searing beams of light."
|
||||
cast_methods = CAST_RANGED
|
||||
spell_projectile = /obj/item/projectile/beam/banishment
|
||||
pre_shot_delay = 0
|
||||
cooldown = 10
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
/obj/item/projectile/beam/banishment
|
||||
name = "banishment"
|
||||
icon_state = "invert"
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
mob_bonus_damage = 45
|
||||
check_armour = "laser"
|
||||
armor_penetration = 60
|
||||
light_range = 2
|
||||
light_power = -2
|
||||
light_color = "#64B4E6"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/lightning
|
||||
tracer_type = /obj/effect/projectile/tracer/lightning
|
||||
impact_type = /obj/effect/projectile/impact/lightning
|
||||
|
||||
/obj/item/projectile/beam/banishment/proc/banish(var/mob/living/simple_mob/construct)
|
||||
if(construct)
|
||||
construct.Stun(10)
|
||||
construct.Weaken(2)
|
||||
else
|
||||
return
|
||||
|
||||
/obj/item/projectile/beam/banishment/on_hit(var/atom/target)
|
||||
banish(target)
|
||||
. = ..()
|
||||
|
||||
////////////////////////////
|
||||
// Purity Construct - Deacon - Spells
|
||||
////////////////////////////
|
||||
|
||||
///Deacon Laser
|
||||
/spell/targeted/construct_advanced/force_beam
|
||||
name = "Force Beam"
|
||||
desc = "Fire a beam of kinetic energy to force back troublemakers."
|
||||
|
||||
hud_state = "const_beam"
|
||||
spell_obj = /obj/item/spell/construct/projectile/force_beam
|
||||
|
||||
/obj/item/spell/construct/projectile/force_beam
|
||||
name = "force_beam"
|
||||
icon_state = "generic"
|
||||
desc = "Your manipulators fire a condensed beam of kinetic energy."
|
||||
cast_methods = CAST_RANGED
|
||||
spell_projectile = /obj/item/projectile/beam/force_beam
|
||||
pre_shot_delay = 0
|
||||
cooldown = 5
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
/obj/item/projectile/beam/force_beam
|
||||
name = "force beam"
|
||||
icon_state = "invert"
|
||||
fire_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
damage = 5
|
||||
damage_type = BRUTE
|
||||
check_armour = "melee"
|
||||
armor_penetration = 60
|
||||
light_range = 2
|
||||
light_power = -2
|
||||
light_color = "#64B4E6"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/tungsten
|
||||
tracer_type = /obj/effect/projectile/tracer/tungsten
|
||||
impact_type = /obj/effect/projectile/impact/tungsten
|
||||
|
||||
/obj/item/projectile/beam/force_beam/on_hit(var/atom/movable/target, var/blocked = 0)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(prob(40) && !blocked)
|
||||
L.Stun(1)
|
||||
L.Confuse(1)
|
||||
|
||||
|
||||
///Deacon Healing Sphere
|
||||
/spell/targeted/construct_advanced/soothing_sphere
|
||||
name = "Sphere of soothing"
|
||||
desc = "Rend a portal into a plane of sothing energy at the target location."
|
||||
|
||||
charge_max = 100
|
||||
|
||||
hud_state = "const_harvest"
|
||||
spell_obj = /obj/item/spell/construct/spawner/soothing_sphere
|
||||
|
||||
/obj/item/spell/construct/spawner/soothing_sphere
|
||||
name = "sphere of soothing"
|
||||
desc = "Call forth a portal to a dimension of soothing energies at your target."
|
||||
|
||||
spawner_type = /obj/effect/temporary_effect/pulse/soothing_sphere
|
||||
|
||||
/obj/item/spell/construct/spawner/soothing_sphere/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(within_range(hit_atom) && pay_energy(10))
|
||||
..()
|
||||
|
||||
/obj/item/spell/construct/spawner/soothing_sphere/on_throw_cast(atom/hit_atom, mob/user)
|
||||
pay_energy(5)
|
||||
if(isliving(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
L.add_modifier(/datum/modifier/soothe, 10 SECONDS)
|
||||
|
||||
/obj/effect/temporary_effect/pulse/soothing_sphere
|
||||
name = "soothing sphere"
|
||||
desc = "A portal to some hellish place. Its screams wrack your body with pain."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "blue_static_sphere"
|
||||
time_to_die = null
|
||||
light_range = 4
|
||||
light_power = 5
|
||||
light_color = "#64B4E6"
|
||||
light_on = TRUE
|
||||
pulses_remaining = 10
|
||||
pulse_delay = 1 SECOND
|
||||
|
||||
/obj/effect/temporary_effect/pulse/soothing_sphere/on_pulse()
|
||||
for(var/mob/living/L in view(4,src))
|
||||
if(!iscultist(L) && !istype(L, /mob/living/simple_mob/construct))
|
||||
L.add_modifier(/datum/modifier/soothe, 2 SECONDS)
|
||||
L.adjustBruteLoss(rand(-5,-10))
|
||||
L.adjustFireLoss(rand(-5,-10))
|
||||
|
||||
/datum/modifier/soothe
|
||||
name = "soothe"
|
||||
desc = "Your body is soothed of pain."
|
||||
|
||||
on_created_text = span_notice("A blue lightning quickly covers your body. Pain quickly fading.")
|
||||
on_expired_text = span_notice("The lightning fades, and so too does the ongoing soothing of pain.")
|
||||
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
mob_overlay_state = "blue_electricity_constant"
|
||||
|
||||
/datum/modifier/soothe/tick()
|
||||
spawn()
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/H = holder
|
||||
H.apply_effect(-20, AGONY)
|
||||
if(prob(10))
|
||||
to_chat(H, span_warning("It feels so comforting!"))
|
||||
|
||||
////////////////////////////
|
||||
// Purity Construct - Priest - Spells
|
||||
////////////////////////////
|
||||
|
||||
/spell/targeted/construct_advanced/mend_purity
|
||||
name = "Mend Purity"
|
||||
desc = "Mend a target living being or construct over time."
|
||||
|
||||
charge_max = 100
|
||||
|
||||
hud_state = "const_mend"
|
||||
spell_obj = /obj/item/spell/construct/mend_purity
|
||||
|
||||
/obj/item/spell/construct/mend_purity
|
||||
name = "Mend Purity"
|
||||
desc = "Mend the wounds of constructs or living beings overtime."
|
||||
icon_state = "mend_wounds"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_UNHOLY
|
||||
light_color = "#64B4E6"
|
||||
light_power = -2
|
||||
light_on = TRUE
|
||||
|
||||
/obj/item/spell/construct/mend_purity/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||
if(isliving(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
L.add_modifier(/datum/modifier/mend_purity, 150)
|
||||
qdel(src)
|
||||
|
||||
/datum/modifier/mend_purity
|
||||
name = "holy mending"
|
||||
desc = "Your body is mending, rejoice!"
|
||||
|
||||
on_created_text = span_notice("A holy light envelops your body as it begins to mend.")
|
||||
on_expired_text = span_notice("The cloak of unease dissipates.")
|
||||
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
mob_overlay_state = "blue_electricity_constant"
|
||||
|
||||
/datum/modifier/mend_purity/tick()
|
||||
spawn()
|
||||
if(isliving(holder))
|
||||
var/mob/living/L = holder
|
||||
if(istype(L, /mob/living/simple_mob/construct))
|
||||
L.adjustBruteLoss(rand(-5,-10))
|
||||
L.adjustFireLoss(rand(-5,-10))
|
||||
else
|
||||
L.adjustBruteLoss(-2)
|
||||
L.adjustFireLoss(-2)
|
||||
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/H = holder
|
||||
|
||||
for(var/obj/item/organ/O in H.internal_organs)
|
||||
if(O.damage > 0)
|
||||
O.damage = max(O.damage - 2, 0)
|
||||
if(O.damage <= 5 && O.organ_tag == O_EYES)
|
||||
H.sdisabilities &= ~BLIND
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
O.heal_damage(rand(1,3), rand(1,3), internal = 1, robo_repair = 1)
|
||||
|
||||
for(var/obj/item/organ/E in H.bad_external_organs)
|
||||
var/obj/item/organ/external/affected = E
|
||||
if((affected.damage < affected.min_broken_damage * CONFIG_GET(number/organ_health_multiplier)) && (affected.status & ORGAN_BROKEN)) // CHOMPEdit
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
for(var/datum/wound/W in affected.wounds)
|
||||
if(istype(W, /datum/wound/internal_bleeding))
|
||||
affected.wounds -= W
|
||||
affected.update_damages()
|
||||
|
||||
H.restore_blood()
|
||||
if(iscultist(H))
|
||||
H.apply_effect(100, AGONY)//it will heal cultists but purity really doesn't like them so causes much pain
|
||||
if(prob(10))
|
||||
to_chat(H, span_danger("It feels as though your body is being torn apart!"))
|
||||
L.updatehealth()
|
||||
|
||||
/spell/targeted/purity_repair_aura
|
||||
name = "Repair Aura"
|
||||
desc = "Emit a field of energy around your shell to repair nearby constructs at range."
|
||||
|
||||
range = -1
|
||||
school = "evocation"
|
||||
charge_type = Sp_RECHARGE
|
||||
invocation_type = SpI_NONE
|
||||
|
||||
spell_flags = CONSTRUCT_CHECK | INCLUDEUSER
|
||||
|
||||
hud_state = "const_repairaura"
|
||||
smoke_amt = 0
|
||||
|
||||
charge_max = 600
|
||||
|
||||
/spell/targeted/purity_repair_aura/cast(list/targets, mob/living/user)
|
||||
if(findNullRod(user) || user.has_modifier_of_type(/datum/modifier/repair_aura))
|
||||
charge_counter = 300
|
||||
return
|
||||
user.add_modifier(/datum/modifier/repair_aura_purity, 30 SECONDS)
|
||||
|
||||
/datum/modifier/repair_aura_purity
|
||||
name = "aura of repair (purity)"
|
||||
desc = "You are emitting a field of strange energy, capable of repairing constructs."
|
||||
|
||||
on_created_text = span_notice("You begin emitting an purity repair aura.")
|
||||
on_expired_text = span_notice("The purity repair aura fades.")
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
/datum/modifier/repair_aura_purity/tick()
|
||||
spawn()
|
||||
for(var/mob/living/simple_mob/construct/T in view(4,holder))
|
||||
T.adjustBruteLoss(rand(-10,-15))
|
||||
T.adjustFireLoss(rand(-10,-15))
|
||||
@@ -133,7 +133,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/pointdefense)
|
||||
var/rotation_speed = 4.5 SECONDS //How quickly we turn to face threats
|
||||
var/datum/weakref/engaging = null // The meteor we're shooting at
|
||||
var/id_tag = null
|
||||
var/fire_sounds = list('sound/weapons/frigate_turret/frigate_turret_fire1.ogg', 'sound/weapons/frigate_turret/frigate_turret_fire2.ogg', 'sound/weapons/frigate_turret/frigate_turret_fire3.ogg', 'sound/weapons/frigate_turret/frigate_turret_fire4.ogg') // CHOMPEdit: Pew
|
||||
var/fire_sounds = list('sound/weapons/frigate_turret/frigate_turret_fire1.ogg', 'sound/weapons/frigate_turret/frigate_turret_fire2.ogg', 'sound/weapons/frigate_turret/frigate_turret_fire3.ogg', 'sound/weapons/frigate_turret/frigate_turret_fire4.ogg')
|
||||
|
||||
/obj/machinery/pointdefense/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
////////////CHOMP CLEANABLE REAGENT PUDDLES/////////////////////
|
||||
|
||||
/obj/effect/decal/cleanable/blood/reagent //Yes, we are using the blood system for this
|
||||
name = "liquid"
|
||||
dryname = "dried liquid"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
/obj/item/vac_attachment
|
||||
name = "\improper Vac-Pack attachment"
|
||||
desc = "Useful for slurping mess off the floors. Even things and stuff depending on settings. Can be connected to a trash bag or vore belly. On-mob sprites can be toggled via verb in Objects tab."
|
||||
icon = 'modular_chomp/icons/mob/vacpack.dmi'
|
||||
icon_override = 'modular_chomp/icons/mob/vacpack.dmi'
|
||||
icon = 'icons/mob/vacpack.dmi'
|
||||
icon_override = 'icons/mob/vacpack.dmi'
|
||||
icon_state = "sucker_drop"
|
||||
item_state = "sucker"
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
@@ -76,6 +76,8 @@
|
||||
return
|
||||
if(!output_dest)
|
||||
return
|
||||
if(istype(target,/obj/structure/window) || istype(target,/obj/structure/grille))
|
||||
target = get_turf(target) // Windows can be clicked to clean their turf
|
||||
if(istype(output_dest,/obj/item/storage/bag/trash))
|
||||
if(get_turf(output_dest) != get_turf(user))
|
||||
vac_power = 0
|
||||
@@ -269,3 +269,72 @@ It also makes it so a ghost wont know where all the goodies/mobs are.
|
||||
spawn_types = list(
|
||||
/mob/living/simple_mob/animal/space/alien/queen = 5,
|
||||
)
|
||||
|
||||
/obj/structure/mob_spawner/scanner/mining_animals
|
||||
name = "Mining Lazy Spawner"
|
||||
spawn_delay = 10 MINUTES
|
||||
range = 10
|
||||
simultaneous_spawns = 1
|
||||
mob_faction = "wild animal"
|
||||
total_spawns = 2
|
||||
destructible = 0
|
||||
anchored = 1
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
spawn_types = list(
|
||||
/mob/living/simple_mob/vore/bat = 70,
|
||||
/mob/living/simple_mob/animal/passive/cockroach = 60,
|
||||
/obj/effect/spider/spiderling/non_growing = 50,
|
||||
/mob/living/simple_mob/animal/giant_spider/tunneler/cave = 50,
|
||||
/mob/living/simple_mob/vore/jelly = 40,
|
||||
/mob/living/simple_mob/vore/aggressive/rat = 30,
|
||||
/mob/living/simple_mob/animal/passive/mouse = 30,
|
||||
/mob/living/simple_mob/animal/passive/mouse/rat = 25,
|
||||
/mob/living/simple_mob/metroid/mine = 25, // Downstream //CHOMPEnable
|
||||
/mob/living/simple_mob/vore/oregrub = 25,
|
||||
/mob/living/simple_mob/vore/aggressive/dino = 20,
|
||||
/mob/living/simple_mob/animal/space/carp = 20,
|
||||
/mob/living/simple_mob/vore/oregrub/lava = 15,
|
||||
/mob/living/simple_mob/vore/stalker = 10,
|
||||
/mob/living/simple_mob/vore/lamia/copper/cave = 10,
|
||||
/mob/living/simple_mob/vore/lamia/albino/cave = 5,
|
||||
/mob/living/simple_mob/vore/aggressive/lizardman = 5,
|
||||
/mob/living/simple_mob/vore/otie = 5,
|
||||
/mob/living/simple_mob/animal/passive/pillbug = 5, // These aren't dangerous, but are made rare just because few people are going to bother killing them.
|
||||
/obj/structure/closet/crate/mimic/cointoss = 1,
|
||||
/obj/structure/closet/crate/mimic/closet/cointoss = 1,
|
||||
/mob/living/simple_mob/vore/otie/feral = 1,
|
||||
// /mob/living/simple_mob/vore/sonadile = 1, // Removed until sprite issues fixed.
|
||||
/mob/living/simple_mob/animal/space/bear/brown = 1,
|
||||
/mob/living/simple_mob/vore/aggressive/deathclaw = 1,
|
||||
/mob/living/simple_mob/vore/gryphon = 1,
|
||||
/mob/living/simple_mob/vore/demon = 0.5 // VERY rare!
|
||||
)
|
||||
|
||||
/obj/structure/mob_spawner/proc/get_used_report(var/obj/structure/closet/crate/mimic/O)
|
||||
if(O in spawned_mobs)
|
||||
spawned_mobs.Remove(O)
|
||||
|
||||
/obj/structure/mob_spawner/mouse_nest/mousehole
|
||||
name = "small hole"
|
||||
desc = "A small hole, critters seem to move in and out from here."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "tunnel_hole"
|
||||
spawn_types = list(
|
||||
/mob/living/simple_mob/animal/passive/mouse = 100,
|
||||
/mob/living/simple_mob/animal/passive/cockroach = 25,
|
||||
/mob/living/simple_mob/animal/passive/mouse/rat/strong = 10, // Because I'm a horrible person. <3
|
||||
/obj/effect/spider/spiderling/non_growing = 5)
|
||||
|
||||
/obj/structure/mob_spawner/mouse_nest/mousehole/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "tunnel_hole"
|
||||
|
||||
/obj/structure/mob_spawner/recycler
|
||||
desc = "A bizarre mess of robotic limbs, glowing microrefineries, and nanoassemblers gradually converting the pile of raw materials into active hivebots."
|
||||
destructible = 1
|
||||
icon = 'icons/obj/recycling.dmi'
|
||||
icon_state = "grinder-b1"
|
||||
name = "hivebot assembler"
|
||||
simultaneous_spawns = 6
|
||||
spawn_delay = 300
|
||||
spawn_types = list(/mob/living/simple_mob/mechanical/hivebot/swarm = 200, /mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic = 50, /mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser = 25, /mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion = 10, /mob/living/simple_mob/mechanical/hivebot/tank/meatshield = 10)
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
qdel(newPred.ai_holder)
|
||||
newPred.ai_holder = null
|
||||
//newPred.movement_cooldown = 0 // The "needless artificial speed cap" exists for a reason
|
||||
// R.has_hands = TRUE // Downstream
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(newPred)
|
||||
to_chat(M, span_notice("You are " + span_bold("[newPred]") + ", somehow having gotten aboard the station in search of food. \
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
lightning_strike(get_turf(src), cosmetic = TRUE)
|
||||
density = FALSE
|
||||
var/mob/living/simple_mob/animal/passive/dog/corgi/R = new(get_turf(src))
|
||||
// R.has_hands = TRUE // Downstream
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(R)
|
||||
to_chat(M, span_notice("You are a <b>Corgi</b>! Woof!"))
|
||||
|
||||
@@ -209,3 +209,42 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
icon_state = "medicine_cabinet"
|
||||
density = FALSE
|
||||
loot_element_path = /datum/element/lootable/fresh_medicine
|
||||
|
||||
//Micro mecha loot.
|
||||
/obj/structure/loot_pile/mecha/mouse_tank
|
||||
name = "\improper Whisker wreckage"
|
||||
desc = "The ruins of a small tank. Perhaps some child's toy?"
|
||||
icon = 'icons/mob/mouse_army.dmi'
|
||||
icon_state = "whisker-broken"
|
||||
density = TRUE
|
||||
anchored = FALSE // In case a dead mecha-mob dies in a bad spot.
|
||||
|
||||
loot_element_path = /datum/element/lootable/mecha/mouse_tank
|
||||
|
||||
/obj/structure/loot_pile/mecha/mouse_tank/livewire
|
||||
name = "\improper Livewire wreckage"
|
||||
desc = "The smoldering ruins of a small tank. Perhaps some child's toy?"
|
||||
icon_state = "livewire-broken"
|
||||
density = TRUE
|
||||
anchored = FALSE // In case a dead mecha-mob dies in a bad spot.
|
||||
|
||||
loot_element_path = /datum/element/lootable/mecha/mouse_tank/livewire
|
||||
|
||||
/obj/structure/loot_pile/mecha/mouse_tank/eraticator
|
||||
name = "\improper Eraticator wreckage"
|
||||
desc = "The blasted ruins of a small tank. Perhaps some child's toy?"
|
||||
icon_state = "eraticator-broken"
|
||||
density = TRUE
|
||||
anchored = FALSE // In case a dead mecha-mob dies in a b
|
||||
|
||||
loot_element_path = /datum/element/lootable/mecha/mouse_tank/eraticator
|
||||
|
||||
/obj/structure/loot_pile/mecha/ripley/pirate
|
||||
icon = 'icons/mob/pirates.dmi'
|
||||
icon_state = "pirate-broken"
|
||||
|
||||
/obj/structure/loot_pile/maint/technical
|
||||
density = FALSE
|
||||
|
||||
/obj/structure/loot_pile/maint/boxfort
|
||||
density = FALSE
|
||||
|
||||
@@ -227,11 +227,9 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_HOLDER, "Show Player Panel", m
|
||||
if(!f) body += " | "
|
||||
else f = 0
|
||||
if(L in player.languages)
|
||||
k = span_green(k)
|
||||
body += "<a href='byond://?_src_=holder;[HrefToken()];toglang=\ref[player];lang=[html_encode(k)]'>[k]</a>"
|
||||
body += "<a href='byond://?_src_=holder;[HrefToken()];toglang=\ref[player];lang=[html_encode(k)]'>[span_green(k)]</a>"
|
||||
else
|
||||
k = span_red(k)
|
||||
body += "<a href='byond://?_src_=holder;[HrefToken()];toglang=\ref[player];lang=[html_encode(k)]'>[k]</a>"
|
||||
body += "<a href='byond://?_src_=holder;[HrefToken()];toglang=\ref[player];lang=[html_encode(k)]'>[span_red(k)]</a>"
|
||||
|
||||
body += {"<br>"}
|
||||
|
||||
|
||||
@@ -1869,7 +1869,7 @@
|
||||
to_chat(usr, span_filter_adminlog("Failed to remove language '[lang2toggle]' from \the [M]!"))
|
||||
else
|
||||
if(!M.add_language(lang2toggle))
|
||||
to_chat(usr, span_filter_adminlog("Failed to add language '[lang2toggle]' from \the [M]!"))
|
||||
to_chat(usr, span_filter_adminlog("Failed to add language '[lang2toggle]' to \the [M]!"))
|
||||
|
||||
SSadmin_verbs.dynamic_invoke_verb(usr.client, /datum/admin_verb/show_player_panel, M)
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ ADMIN_VERB(drop_everything, R_ADMIN, "Drop Everything", ADMIN_VERB_NO_DESCRIPTIO
|
||||
if(!M)
|
||||
return
|
||||
|
||||
var/msg = tgui_input_text(usr, "Message:", text("Enter the text you wish to appear to your target:"))
|
||||
var/msg = tgui_input_text(usr, "Message:", text("Enter the text you wish to appear to your target:"), encode = FALSE)
|
||||
if(msg && !(msg[1] == "<" && msg[length(msg)] == ">")) //You can use HTML but only if the whole thing is HTML. Tries to prevent admin 'accidents'.
|
||||
msg = sanitize(msg)
|
||||
|
||||
|
||||
@@ -226,3 +226,17 @@
|
||||
// For setting up possible stealth missions
|
||||
/datum/ai_holder/simple_mob/humanoid/hostile/guard_limit
|
||||
guard_limit = TRUE
|
||||
|
||||
/datum/ai_holder/simple_mob/melee/pack_mob
|
||||
cooperative = TRUE
|
||||
call_distance = 28 // pack mobs should be able to communicate quite a ways - we can assume by howls/etc
|
||||
can_flee = TRUE
|
||||
mauling = TRUE // Kill/finish off unconscious people.
|
||||
vision_range = 12 // This is a bit cheaty - normal vision range is 7 tiles, one screen, setting that to 10 allows us to track targets offscreen by up to 5 tiles, and make for an easier time keeping chase of targets.
|
||||
flee_when_dying = TRUE // animals know to run when wounded/overmatched
|
||||
flee_when_outmatched = TRUE // animals know to run when wounded/overmatched
|
||||
|
||||
/datum/ai_holder/simple_mob/melee/pack_mob/post_melee_attack(atom/A)
|
||||
if(holder.Adjacent(A))
|
||||
holder.IMove(get_step(holder, pick(GLOB.alldirs)))
|
||||
holder.face_atom(A)
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
/datum/ai_holder/simple_mob/melee/pack_mob
|
||||
cooperative = TRUE
|
||||
call_distance = 28 // pack mobs should be able to communicate quite a ways - we can assume by howls/etc
|
||||
can_flee = TRUE
|
||||
mauling = TRUE // Kill/finish off unconscious people.
|
||||
vision_range = 12 // This is a bit cheaty - normal vision range is 7 tiles, one screen, setting that to 10 allows us to track targets offscreen by up to 5 tiles, and make for an easier time keeping chase of targets.
|
||||
flee_when_dying = TRUE // animals know to run when wounded/overmatched
|
||||
flee_when_outmatched = TRUE // animals know to run when wounded/overmatched
|
||||
|
||||
/datum/ai_holder/simple_mob/melee/pack_mob/post_melee_attack(atom/A)
|
||||
if(holder.Adjacent(A))
|
||||
holder.IMove(get_step(holder, pick(GLOB.alldirs)))
|
||||
holder.face_atom(A)
|
||||
@@ -137,3 +137,105 @@
|
||||
|
||||
/datum/say_list/crab
|
||||
emote_hear = list("hisses")
|
||||
|
||||
/datum/say_list/possessed
|
||||
speak = list("Where am I?",
|
||||
"Why am I here?",
|
||||
"Where did everyone go?")
|
||||
|
||||
emote_hear = list("lets out a mournful cry.", "can be heard sobbing.", "groans out in pain.")
|
||||
emote_see = list("kneels down for a moment, picking something up before casting it away.","stands as still as a statue.", "looks to be doing some kind of work.")
|
||||
|
||||
say_maybe_target = list("Is there someone there?", "Who's there?")
|
||||
say_got_target = list("You! You help people!", "Can you help me?", "I'm lost!")
|
||||
say_threaten = list("Help me!", "Please help!", "Hey, who turned out the lights?", "Allonsy!", "Geronimo!")
|
||||
say_stand_down = list("Please. Anyone. Help!", "Where is everyone?", "Where am I?")
|
||||
say_escalate = list("Help!", "I'm sorry!", "I can't stop!", "I don't want to do this!", "I don't want to go!")
|
||||
|
||||
//Vox Pirate Saylist
|
||||
/datum/say_list/merc/voxpirate
|
||||
speak = list("Lookings for scrap, yaya.",
|
||||
"Tank is lookings low.",
|
||||
"Knowings should haves stayed on the Ark.",
|
||||
"Quills itchings...",
|
||||
"Cravings Teshari on stick.",
|
||||
"Plates locking up. Not good.")
|
||||
emote_see = list("sniffs", "coughs", "taps his foot", "looks around", "checks his equipment")
|
||||
|
||||
say_understood = list("Yayaya!")
|
||||
say_cannot = list("Skreking negatives!", "Can't do that.")
|
||||
say_maybe_target = list("Who's theres?", "Is hearing things?")
|
||||
say_got_target = list("Dust!", "Easy loot!")
|
||||
say_threaten = list("Gets out of heres!")
|
||||
say_stand_down = list("Yaya, runs!", "Kikikiki!")
|
||||
say_escalate = list("Skrek!", "Bringings it!", "Takings shot", "Lock claws!")
|
||||
|
||||
|
||||
//Synth Horror Saylist
|
||||
|
||||
/datum/say_list/cyber_horror
|
||||
speak = list("H@!#$$P M@!$#",
|
||||
"GHAA!@@#",
|
||||
"KR@!!N",
|
||||
"K!@@##L!@@ %!@#E",
|
||||
"G@#!$ H@!#%",
|
||||
"H!@%%@ @!E")
|
||||
emote_hear = list("emits", "groans", "wails", "pleads")
|
||||
emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.")
|
||||
say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#")
|
||||
say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS")
|
||||
|
||||
//Roach Saylists Woo Hoo
|
||||
/datum/say_list/roach
|
||||
speak = list("Chitter!","Chk chk!","Tchk?")
|
||||
emote_hear = list("chitters","chirps","shuffles")
|
||||
emote_see = list("rubs its antennae", "skitters", "clacks across the floor")
|
||||
|
||||
/datum/say_list/merc/elite // colder. also, actually just assholes.
|
||||
speak = list("I got better pay on my last job.",
|
||||
"So, y'think we'll get to shoot anyone today?",
|
||||
"Fuck, I hate those guys.",
|
||||
"Would be nice for something to happen, for once.",
|
||||
"Think those NT shits'll rear their heads?",
|
||||
"Any of you see anything recently?")
|
||||
emote_see = list("taps his foot", "looks around coldly", "checks his equipment", "rummages in his webbing")
|
||||
say_understood = list("Aff.", "Affirmative.", "Copy.", "Understood.")
|
||||
say_cannot = list("Neg.", "Negative.")
|
||||
say_maybe_target = list("I heard something.")
|
||||
say_got_target = list("Oh, good, I needed more range fodder.", "I'm going to enjoy this.", "I see you.", "Not quiet enough.")
|
||||
say_threaten = list("Hoy, private property, fuck off.", "You're acting mighty bold for a bullet sponge.", "First and last warning; find somewhere else to be.", "I wouldn't do that if I were you.", "Back off or your field medic's getting a bonus.")
|
||||
say_stand_down = list("Damn it, I was hoping you'd push your luck.", "What, that's it? Pussy.", "And don't come back.", "Good call. Don't do it again.", "Harrumph.", "That'll teach 'ya.")
|
||||
say_escalate = list("Oh, I'm gonna enjoy this.", "I'm going to enjoy making you regret that.", "Last mistake you'll make.")
|
||||
|
||||
|
||||
//Synth Horror Saylist
|
||||
|
||||
/datum/say_list/cyber_horror
|
||||
speak = list("H@!#$$P M@!$#",
|
||||
"GHAA!@@#",
|
||||
"KR@!!N",
|
||||
"K!@@##L!@@ %!@#E",
|
||||
"G@#!$ H@!#%",
|
||||
"H!@%%@ @!E")
|
||||
emote_hear = list("emits", "groans", "wails", "pleads")
|
||||
emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.")
|
||||
say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#")
|
||||
say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS")
|
||||
|
||||
|
||||
// This one's pretty dumb, but pirates are dumb anyways.
|
||||
/datum/say_list/pirate
|
||||
speak = list("Yarr!",
|
||||
"Yohoho and a bottle of rum...",
|
||||
"Getting tried of hardtack.",
|
||||
"What do you do with a drunken sailor...",
|
||||
"One day We'll get that big score.",
|
||||
"They ain't catching this pirate no-sir-ree")
|
||||
|
||||
say_understood = list("Alright, matey.")
|
||||
say_cannot = list("No, matey.")
|
||||
say_maybe_target = list("Eh?", "Who goes there?")
|
||||
say_got_target = list("Yarrrr!", "Just drop your loot and run")
|
||||
say_threaten = list("You best leave, this booty is mine.", "No plank to walk on, just walk away.")
|
||||
say_stand_down = list("Good.", "That's right run you lilly livers.")
|
||||
say_escalate = list("Yarr! The booty is mine!", "Going to gut you landlubber.")
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
//Vox Pirate Saylist
|
||||
/datum/say_list/merc/voxpirate
|
||||
speak = list("Lookings for scrap, yaya.",
|
||||
"Tank is lookings low.",
|
||||
"Knowings should haves stayed on the Ark.",
|
||||
"Quills itchings...",
|
||||
"Cravings Teshari on stick.",
|
||||
"Plates locking up. Not good.")
|
||||
emote_see = list("sniffs", "coughs", "taps his foot", "looks around", "checks his equipment")
|
||||
|
||||
say_understood = list("Yayaya!")
|
||||
say_cannot = list("Skreking negatives!", "Can't do that.")
|
||||
say_maybe_target = list("Who's theres?", "Is hearing things?")
|
||||
say_got_target = list("Dust!", "Easy loot!")
|
||||
say_threaten = list("Gets out of heres!")
|
||||
say_stand_down = list("Yaya, runs!", "Kikikiki!")
|
||||
say_escalate = list("Skrek!", "Bringings it!", "Takings shot", "Lock claws!")
|
||||
|
||||
|
||||
//Synth Horror Saylist
|
||||
|
||||
/datum/say_list/cyber_horror
|
||||
speak = list("H@!#$$P M@!$#",
|
||||
"GHAA!@@#",
|
||||
"KR@!!N",
|
||||
"K!@@##L!@@ %!@#E",
|
||||
"G@#!$ H@!#%",
|
||||
"H!@%%@ @!E")
|
||||
emote_hear = list("emits", "groans", "wails", "pleads")
|
||||
emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.")
|
||||
say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#")
|
||||
say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS")
|
||||
|
||||
//Roach Saylists Woo Hoo
|
||||
/datum/say_list/roach
|
||||
speak = list("Chitter!","Chk chk!","Tchk?")
|
||||
emote_hear = list("chitters","chirps","shuffles")
|
||||
emote_see = list("rubs its antennae", "skitters", "clacks across the floor")
|
||||
|
||||
/datum/say_list/possessed
|
||||
speak = list("Where am I?",
|
||||
"Why am I here?",
|
||||
"Where did everyone go?")
|
||||
|
||||
emote_hear = list("lets out a mournful cry.", "can be heard sobbing.", "groans out in pain.")
|
||||
emote_see = list("kneels down for a moment, picking something up before casting it away.","stands as still as a statue.", "looks to be doing some kind of work.")
|
||||
|
||||
say_maybe_target = list("Is there someone there?", "Who's there?")
|
||||
say_got_target = list("You! You help people!", "Can you help me?", "I'm lost!")
|
||||
say_threaten = list("Help me!", "Please help!", "Hey, who turned out the lights?", "Allonsy!", "Geronimo!")
|
||||
say_stand_down = list("Please. Anyone. Help!", "Where is everyone?", "Where am I?")
|
||||
say_escalate = list("Help!", "I'm sorry!", "I can't stop!", "I don't want to do this!", "I don't want to go!")
|
||||
|
||||
/datum/say_list/merc/elite // colder. also, actually just assholes.
|
||||
speak = list("I got better pay on my last job.",
|
||||
"So, y'think we'll get to shoot anyone today?",
|
||||
"Fuck, I hate those guys.",
|
||||
"Would be nice for something to happen, for once.",
|
||||
"Think those NT shits'll rear their heads?",
|
||||
"Any of you see anything recently?")
|
||||
emote_see = list("taps his foot", "looks around coldly", "checks his equipment", "rummages in his webbing")
|
||||
say_understood = list("Aff.", "Affirmative.", "Copy.", "Understood.")
|
||||
say_cannot = list("Neg.", "Negative.")
|
||||
say_maybe_target = list("I heard something.")
|
||||
say_got_target = list("Oh, good, I needed more range fodder.", "I'm going to enjoy this.", "I see you.", "Not quiet enough.")
|
||||
say_threaten = list("Hoy, private property, fuck off.", "You're acting mighty bold for a bullet sponge.", "First and last warning; find somewhere else to be.", "I wouldn't do that if I were you.", "Back off or your field medic's getting a bonus.")
|
||||
say_stand_down = list("Damn it, I was hoping you'd push your luck.", "What, that's it? Pussy.", "And don't come back.", "Good call. Don't do it again.", "Harrumph.", "That'll teach 'ya.")
|
||||
say_escalate = list("Oh, I'm gonna enjoy this.", "I'm going to enjoy making you regret that.", "Last mistake you'll make.")
|
||||
|
||||
|
||||
//Synth Horror Saylist
|
||||
|
||||
/datum/say_list/cyber_horror
|
||||
speak = list("H@!#$$P M@!$#",
|
||||
"GHAA!@@#",
|
||||
"KR@!!N",
|
||||
"K!@@##L!@@ %!@#E",
|
||||
"G@#!$ H@!#%",
|
||||
"H!@%%@ @!E")
|
||||
emote_hear = list("emits", "groans", "wails", "pleads")
|
||||
emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.")
|
||||
say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#")
|
||||
say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS")
|
||||
|
||||
|
||||
// This one's pretty dumb, but pirates are dumb anyways.
|
||||
/datum/say_list/pirate
|
||||
speak = list("Yarr!",
|
||||
"Yohoho and a bottle of rum...",
|
||||
"Getting tried of hardtack.",
|
||||
"What do you do with a drunken sailor...",
|
||||
"One day We'll get that big score.",
|
||||
"They ain't catching this pirate no-sir-ree")
|
||||
|
||||
say_understood = list("Alright, matey.")
|
||||
say_cannot = list("No, matey.")
|
||||
say_maybe_target = list("Eh?", "Who goes there?")
|
||||
say_got_target = list("Yarrrr!", "Just drop your loot and run")
|
||||
say_threaten = list("You best leave, this booty is mine.", "No plank to walk on, just walk away.")
|
||||
say_stand_down = list("Good.", "That's right run you lilly livers.")
|
||||
say_escalate = list("Yarr! The booty is mine!", "Going to gut you landlubber.")
|
||||
|
||||
|
||||
/datum/say_list/possessed
|
||||
speak = list("Where am I?",
|
||||
"Why am I here?",
|
||||
"Where did everyone go?")
|
||||
|
||||
emote_hear = list("lets out a mournful cry.", "can be heard sobbing.", "groans out in pain.")
|
||||
emote_see = list("kneels down for a moment, picking something up before casting it away.","stands as still as a statue.", "looks to be doing some kind of work.")
|
||||
|
||||
say_maybe_target = list("Is there someone there?", "Who's there?")
|
||||
say_got_target = list("You! You help people!", "Can you help me?", "I'm lost!")
|
||||
say_threaten = list("Help me!", "Please help!", "Hey, who turned out the lights?", "Allonsy!", "Geronimo!")
|
||||
say_stand_down = list("Please. Anyone. Help!", "Where is everyone?", "Where am I?")
|
||||
say_escalate = list("Help!", "I'm sorry!", "I can't stop!", "I don't want to do this!", "I don't want to go!")
|
||||
@@ -33,6 +33,8 @@
|
||||
var/list/mutagenic_reagents // Reagents considered uniquely 'mutagenic' by a plant.
|
||||
var/list/toxic_reagents // Reagents considered uniquely 'toxic' by a plant.
|
||||
|
||||
var/ai_mob_product = 0 //This variable determines whether or not a mob product is meant to be ai-controlled. If set to 0, mob products die without a player to control them.
|
||||
|
||||
/datum/seed/New()
|
||||
|
||||
set_trait(TRAIT_IMMUTABLE, 0) // If set, plant will never mutate. If -1, plant is highly mutable.
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
//Variables to make certain things work. Consider sending upstream.
|
||||
/datum/seed
|
||||
var/ai_mob_product = 0 //This variable determines whether or not a mob product is meant to be ai-controlled. If set to 0, mob products die without a player to control them.
|
||||
|
||||
//////CHOMP PLANTS//////
|
||||
|
||||
/datum/seed/soybean/sapbean
|
||||
@@ -137,79 +133,6 @@
|
||||
set_trait(TRAIT_PRODUCTION,7)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
|
||||
// Tea plants/variants.
|
||||
/datum/seed/tea
|
||||
name = PLANT_TEA
|
||||
seed_name = PLANT_TEA
|
||||
display_name = "tea plant"
|
||||
chems = list(REAGENT_ID_TEAMUSH = list(3,10))
|
||||
mutants = null
|
||||
kitchen_tag = PLANT_TEA
|
||||
|
||||
/datum/seed/tea/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,6)
|
||||
set_trait(TRAIT_POTENCY,20)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"tea")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#b7e496")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#b7e496")
|
||||
set_trait(TRAIT_PLANT_ICON,"bush4")
|
||||
set_trait(TRAIT_IDEAL_HEAT, 298)
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
|
||||
|
||||
/datum/seed/pitcher_plant //Pitcher plant
|
||||
name = PLANT_PITCHERPLANT
|
||||
seed_name = PLANT_PITCHERPLANT
|
||||
seed_noun = "pits"
|
||||
display_name = "pitcher shoots"
|
||||
can_self_harvest = 1
|
||||
apply_color_to_mob = FALSE
|
||||
has_mob_product = /mob/living/simple_mob/vore/pitcher_plant
|
||||
ai_mob_product = 1
|
||||
|
||||
/datum/seed/pitcher_plant/New() //No custom icons yet. No spread trait yet even though pitcher fruit can be planted outside of a tray as I've not tied that to hydroponics code.
|
||||
..()
|
||||
set_trait(TRAIT_IMMUTABLE,1)
|
||||
set_trait(TRAIT_CARNIVOROUS,1)
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION,6)
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"corn")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#a839a2")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#5b6f43")
|
||||
set_trait(TRAIT_PLANT_ICON,"ambrosia")
|
||||
|
||||
/datum/seed/hardlightseed //WIP: havent ported the mob and such yet, best someone more keen on these mobs does it - Jack
|
||||
name = PLANT_NULLHARDLIGHT
|
||||
seed_name = "Biomechanical Hardlight generator seed"
|
||||
display_name = "Biomechanical Hardlight stem"
|
||||
mutants = null
|
||||
can_self_harvest = 1
|
||||
has_mob_product = /mob/living/simple_mob/animal/synx/ai/pet/holo
|
||||
ai_mob_product = 1
|
||||
|
||||
/datum/seed/hardlightseed/New()
|
||||
..()
|
||||
set_trait(TRAIT_IMMUTABLE,1) //Normal genetics wont be able to do much with the mechanical parts, its more a machine than a real plant
|
||||
set_trait(TRAIT_MATURATION,1)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
set_trait(TRAIT_POTENCY,1)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"alien4")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00FFFF")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#00FFFF")
|
||||
set_trait(TRAIT_PLANT_ICON,"alien4") //spooky pods
|
||||
set_trait(TRAIT_IDEAL_HEAT, 283)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 0)
|
||||
|
||||
/datum/seed/cinnamon //WIP - I have no idea what I'm doing with growables in code right now.
|
||||
name = PLANT_CINNAMON
|
||||
seed_name = PLANT_CINNAMON
|
||||
|
||||
@@ -42,3 +42,76 @@
|
||||
|
||||
/datum/seed/gnomes
|
||||
harvest_sound = 'sound/items/hooh.ogg'
|
||||
|
||||
/datum/seed/pitcher_plant //Pitcher plant
|
||||
name = PLANT_PITCHERPLANT
|
||||
seed_name = PLANT_PITCHERPLANT
|
||||
seed_noun = "pits"
|
||||
display_name = "pitcher shoots"
|
||||
can_self_harvest = 1
|
||||
apply_color_to_mob = FALSE
|
||||
has_mob_product = /mob/living/simple_mob/vore/pitcher_plant
|
||||
ai_mob_product = 1
|
||||
|
||||
/datum/seed/pitcher_plant/New() //No custom icons yet. No spread trait yet even though pitcher fruit can be planted outside of a tray as I've not tied that to hydroponics code.
|
||||
..()
|
||||
set_trait(TRAIT_IMMUTABLE,1)
|
||||
set_trait(TRAIT_CARNIVOROUS,1)
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION,6)
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"corn")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#a839a2")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#5b6f43")
|
||||
set_trait(TRAIT_PLANT_ICON,"ambrosia")
|
||||
|
||||
// Tea plants/variants.
|
||||
/datum/seed/tea
|
||||
name = PLANT_TEA
|
||||
seed_name = PLANT_TEA
|
||||
display_name = "tea plant"
|
||||
chems = list(REAGENT_ID_TEAMUSH = list(3,10))
|
||||
mutants = null
|
||||
kitchen_tag = PLANT_TEA
|
||||
|
||||
/datum/seed/tea/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,6)
|
||||
set_trait(TRAIT_POTENCY,20)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"tea")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#b7e496")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#b7e496")
|
||||
set_trait(TRAIT_PLANT_ICON,"bush4")
|
||||
set_trait(TRAIT_IDEAL_HEAT, 298)
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
|
||||
|
||||
/datum/seed/hardlightseed //WIP: havent ported the mob and such yet, best someone more keen on these mobs does it - Jack
|
||||
name = PLANT_NULLHARDLIGHT
|
||||
seed_name = "Biomechanical Hardlight generator seed"
|
||||
display_name = "Biomechanical Hardlight stem"
|
||||
mutants = null
|
||||
can_self_harvest = 1
|
||||
has_mob_product = /mob/living/simple_mob/animal/synx/ai/pet/holo
|
||||
ai_mob_product = 1
|
||||
|
||||
/datum/seed/hardlightseed/New()
|
||||
..()
|
||||
set_trait(TRAIT_IMMUTABLE,1) //Normal genetics wont be able to do much with the mechanical parts, its more a machine than a real plant
|
||||
set_trait(TRAIT_MATURATION,1)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
set_trait(TRAIT_POTENCY,1)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"alien4")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00FFFF")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#00FFFF")
|
||||
set_trait(TRAIT_PLANT_ICON,"alien4") //spooky pods
|
||||
set_trait(TRAIT_IDEAL_HEAT, 283)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 0)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// The following procs are used to grab players for mobs produced by a seed (mostly for dionaea).
|
||||
/datum/seed/proc/handle_living_product(var/mob/living/host)
|
||||
|
||||
if(!host || !istype(host) || ai_mob_product) return //CHOMPedit: ai_mob_product var to allow ai mobs to spawn from plants.
|
||||
if(!host || !istype(host) || ai_mob_product) return
|
||||
|
||||
if(apply_color_to_mob)
|
||||
host.color = traits[TRAIT_PRODUCT_COLOUR]
|
||||
|
||||
@@ -363,3 +363,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
|
||||
|
||||
/obj/item/seeds/megashroom
|
||||
seed_type = PLANT_MEGAM
|
||||
|
||||
/obj/item/seeds/teaseed
|
||||
seed_type = PLANT_TEA
|
||||
|
||||
/obj/item/seeds/pitcherseed
|
||||
seed_type = PLANT_PITCHERPLANT
|
||||
|
||||
@@ -1,10 +1,2 @@
|
||||
|
||||
/obj/item/seeds/teaseed
|
||||
seed_type = PLANT_TEA
|
||||
|
||||
|
||||
/obj/item/seeds/cinnamon
|
||||
seed_type = PLANT_CINNAMON
|
||||
|
||||
/obj/item/seeds/pitcherseed
|
||||
seed_type = PLANT_PITCHERPLANT
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define AGE_MOD_MAX 10 //CHOMPedit: Define for age_mod sanity check as a define to allow for easy tweaking.
|
||||
#define AGE_MOD_MAX 10 // Define for age_mod sanity check as a define to allow for easy tweaking.
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics
|
||||
name = "hydroponics tray"
|
||||
@@ -32,7 +32,7 @@
|
||||
var/toxins = 0 // Toxicity in the tray?
|
||||
var/mutation_level = 0 // When it hits 100, the plant mutates.
|
||||
var/tray_light = 1 // Supplied lighting.
|
||||
var/age_mod = 0 //CHOMPedit: Variable for chems which speed up plant growth. On average, every 3 age mod reduces growing time by 2.5 minutes.
|
||||
var/age_mod = 0 // Variable for chems which speed up plant growth. On average, every 3 age mod reduces growing time by 2.5 minutes.
|
||||
|
||||
// Mechanical concerns.
|
||||
var/health = 0 // Plant health.
|
||||
@@ -136,11 +136,9 @@
|
||||
REAGENT_ID_MUTAGEN = 15
|
||||
)
|
||||
|
||||
//CHOMPedit: Reagents which double plant growth speed.
|
||||
var/static/list/age_reagents = list(
|
||||
REAGENT_ID_PITCHERNECTAR = 1
|
||||
)
|
||||
//CHOMPedit end
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/AltClick(var/mob/living/user)
|
||||
if(!istype(user))
|
||||
@@ -317,10 +315,8 @@
|
||||
else if(toxic_reagents[R.id])
|
||||
toxins += toxic_reagents[R.id] * reagent_total
|
||||
|
||||
//CHOMPedit: Agents which speed up plant growth
|
||||
if(age_reagents[R.id])
|
||||
age_mod += age_reagents[R.id] * reagent_total
|
||||
//CHOMPedit end
|
||||
|
||||
//Handle some general level adjustments. These values are independent of plants existing.
|
||||
if(weedkiller_reagents[R.id])
|
||||
@@ -373,7 +369,7 @@
|
||||
age = 0
|
||||
sampled = 0
|
||||
mutation_mod = 0
|
||||
age_mod = 0 //CHOMPedit
|
||||
age_mod = 0
|
||||
|
||||
check_health()
|
||||
return
|
||||
@@ -392,7 +388,7 @@
|
||||
age = 0
|
||||
yield_mod = 0
|
||||
mutation_mod = 0
|
||||
age_mod = 0 //CHOMPedit
|
||||
age_mod = 0
|
||||
|
||||
to_chat(user, span_filter_notice("You remove the dead plant."))
|
||||
lastproduce = 0
|
||||
@@ -412,7 +408,7 @@
|
||||
|
||||
dead = 0
|
||||
age = 0
|
||||
age_mod = 0 //CHOMPedit
|
||||
age_mod = 0
|
||||
health = seed.get_trait(TRAIT_ENDURANCE)
|
||||
lastcycle = world.time
|
||||
harvest = 0
|
||||
@@ -489,7 +485,7 @@
|
||||
pestlevel = max(0,min(pestlevel,10))
|
||||
weedlevel = max(0,min(weedlevel,10))
|
||||
toxins = max(0,min(toxins,10))
|
||||
age_mod = max(0,min(age_mod,AGE_MOD_MAX)) //CHOMPedit: age_mod sanity check
|
||||
age_mod = max(0,min(age_mod,AGE_MOD_MAX)) // age_mod sanity check
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/mutate_species()
|
||||
|
||||
@@ -726,4 +722,4 @@
|
||||
to_chat(user, span_filter_notice("You [closed_system ? "close" : "open"] the tray's lid."))
|
||||
update_icon()
|
||||
|
||||
#undef AGE_MOD_MAX //CHOMPedit
|
||||
#undef AGE_MOD_MAX
|
||||
|
||||
@@ -38,11 +38,11 @@
|
||||
return
|
||||
|
||||
// Advance plant age.
|
||||
if(prob(30)) //CHOMPedit start: I have to push the age increase down for a line for this to work with the compiler.
|
||||
if(prob(30))
|
||||
age += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
if(age_mod >= 1) //Age reagents double the speed of plant growth in sufficient quantities
|
||||
age += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
age_mod -= 1 //CHOMPedit end
|
||||
age_mod -= 1
|
||||
|
||||
//Highly mutable plants have a chance of mutating every tick.
|
||||
if(seed.get_trait(TRAIT_IMMUTABLE) == -1)
|
||||
|
||||
@@ -35,10 +35,10 @@
|
||||
/// Color is optional, each position after the name is a color channel from 1 to n.
|
||||
var/list/ear_secondary_type
|
||||
var/list/wing_type = null
|
||||
var/hair = null // CHOMPAdd
|
||||
var/hair = null
|
||||
var/corpsesynthtype = 0 // 0 for organic, 1 for drone, 2 for posibrain
|
||||
var/corpsesynthbrand = "Unbranded"
|
||||
var/corpsesensormode = 0 //CHOMPAdd - For setting the suit sensors of a corpse. Default to 0 so we don't annoy medbay.
|
||||
var/corpsesensormode = 0
|
||||
delete_me = TRUE
|
||||
|
||||
/obj/effect/landmark/mobcorpse/Initialize(mapload)
|
||||
@@ -92,11 +92,9 @@
|
||||
M.g_ears3 = color_rgb_list[2]
|
||||
M.b_ears3 = color_rgb_list[3]
|
||||
M.update_hair()
|
||||
//CHOMPAdd Start
|
||||
if(hair)
|
||||
M.h_style = hair
|
||||
M.update_hair()
|
||||
//CHOMPAdd End
|
||||
// handle secondary ears
|
||||
if(length(ear_secondary_type) && (ear_secondary_type[1] in GLOB.ear_styles_list))
|
||||
M.ear_secondary_style = GLOB.ear_styles_list[ear_secondary_type[1]]
|
||||
@@ -124,10 +122,8 @@
|
||||
M.update_wing_showing()
|
||||
M.real_name = generateCorpseName()
|
||||
M.set_stat(DEAD) //Kills the new mob
|
||||
//CHOMPAdd: Corpses drop bones when melted and are easier to eat
|
||||
M.digest_leave_remains = TRUE
|
||||
M.can_be_drop_prey = TRUE
|
||||
//CHOMPAdd End
|
||||
if(corpsesynthtype > 0)
|
||||
if(!corpsesynthbrand)
|
||||
corpsesynthbrand = "Unbranded"
|
||||
@@ -139,8 +135,8 @@
|
||||
O.robotize(corpsesynthbrand)
|
||||
if(src.corpseuniform)
|
||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||
if(M.w_uniform) //CHOMPEdit
|
||||
M.w_uniform?:sensor_mode = corpsesensormode //CHOMPEdit
|
||||
if(M.w_uniform)
|
||||
M.w_uniform?:sensor_mode = corpsesensormode
|
||||
if(src.corpsesuit)
|
||||
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
|
||||
if(src.corpseshoes)
|
||||
|
||||
@@ -405,7 +405,7 @@
|
||||
"rat" = image(icon = 'icons/mob/species/protean/protean64x32.dmi', icon_state = "rat", pixel_x = -16),
|
||||
"lizard" = image(icon = 'icons/mob/species/protean/protean64x32.dmi', icon_state = "lizard", pixel_x = -16),
|
||||
"wolf" = image(icon = 'icons/mob/species/protean/protean64x32.dmi', icon_state = "wolf", pixel_x = -16),
|
||||
//"drake" = image(icon = 'modular_chomp/icons/mob/species/protean/protean64x64.dmi', icon_state = "drake", pixel_x = -16),
|
||||
//"drake" = image(icon = 'icons/mob/species/protean/protean64x64.dmi', icon_state = "drake", pixel_x = -16),
|
||||
"teppi" = image(icon = 'icons/mob/species/protean/protean64x64.dmi', icon_state = "teppi", pixel_x = -16),
|
||||
"panther" = image(icon = 'icons/mob/species/protean/protean64x64.dmi', icon_state = "panther", pixel_x = -16),
|
||||
"robodrgn" = image(icon = 'icons/mob/species/protean/protean128x64.dmi', icon_state = "robodrgn", pixel_x = -48),
|
||||
|
||||
@@ -1184,3 +1184,184 @@
|
||||
if("eyes")
|
||||
ourmsg += "on the eyes!"
|
||||
visible_message(span_warning(ourmsg))
|
||||
|
||||
//succuby bite is back baby
|
||||
/mob/living/proc/succubus_bite()
|
||||
set name = "Inject Prey"
|
||||
set desc = "Bite prey and inject them with various toxins."
|
||||
set category = "Abilities.Succubus"
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(!ishuman(src))
|
||||
return //If you're not a human you don't have permission to do this.
|
||||
|
||||
var/mob/living/carbon/human/C = src
|
||||
|
||||
var/obj/item/grab/G = src.get_active_hand()
|
||||
|
||||
if(!istype(G))
|
||||
to_chat(C, span_warning("You must be grabbing a creature in your active hand to bite them."))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/T = G.affecting
|
||||
|
||||
if(!istype(T) || T.isSynthetic())
|
||||
to_chat(src, span_warning("\The [T] is not able to be bitten."))
|
||||
return
|
||||
|
||||
if(G.state != GRAB_NECK)
|
||||
to_chat(C, span_warning("You must have a tighter grip to bite this creature."))
|
||||
return
|
||||
|
||||
var/choice = tgui_input_list(src, "What do you wish to inject?", "Reagent", list(REAGENT_APHRODISIAC, "Numbing", "Paralyzing"))
|
||||
|
||||
last_special = world.time + 600
|
||||
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
src.visible_message(span_bolddanger("[src] moves their head next to [T]'s neck, seemingly looking for something!"))
|
||||
|
||||
if(do_after(src, 300, T)) //Thrirty seconds.
|
||||
if(choice == REAGENT_APHRODISIAC)
|
||||
src.show_message(span_warning("You sink your fangs into [T] and inject your aphrodisiac!"))
|
||||
src.visible_message(span_red("[src] sinks their fangs into [T]!"))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_APHRODIAC_FLUID,100)
|
||||
return 0
|
||||
else if(choice == "Numbing")
|
||||
src.show_message(span_warning("You sink your fangs into [T] and inject your poison!"))
|
||||
src.visible_message(span_red("[src] sinks their fangs into [T]!"))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_NUMBING_FLUID,20) //Poisons should work when more units are injected
|
||||
else if(choice == "Paralyzing")
|
||||
src.show_message(span_warning("You sink your fangs into [T] and inject your poison!"))
|
||||
src.visible_message(span_red("[src] sinks their fangs into [T]!"))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_PARALYZE_FLUID,20) //Poisons should work when more units are injected
|
||||
else
|
||||
return //Should never happen
|
||||
|
||||
/datum/reagent/succubi_aphrodisiac
|
||||
name = REAGENT_APHRODISIAC
|
||||
id = REAGENT_ID_APHRODIAC_FLUID
|
||||
description = "A unknown liquid, it smells sweet"
|
||||
metabolism = REM * 0.8
|
||||
color = "#8A0829"
|
||||
scannable = 0
|
||||
wiki_flag = WIKI_SPOILER
|
||||
supply_conversion_value = REFINERYEXPORT_VALUE_PROCESSED
|
||||
industrial_use = REFINERYEXPORT_REASON_MATSCI
|
||||
|
||||
/datum/reagent/succubi_aphrodisiac/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(prob(3))
|
||||
M.show_message(span_warning("You feel funny, and fall in love with the person in front of you"))
|
||||
M.say(pick("!blushes", "!moans", "!giggles", "!turns visibly red")) //using mob say so we dont have to define this dumb one time use emote that equates to just blushing -shark
|
||||
//M.charmed() //TODO
|
||||
return
|
||||
|
||||
/datum/reagent/succubi_numbing //Using numbing_enzyme instead.
|
||||
name = REAGENT_NUMBING_FLUID
|
||||
id = REAGENT_ID_NUMBING_FLUID
|
||||
description = "A unknown liquid, it doesn't smell"
|
||||
metabolism = REM * 0.5
|
||||
color = "#41029B"
|
||||
scannable = 0
|
||||
supply_conversion_value = REFINERYEXPORT_VALUE_PROCESSED
|
||||
industrial_use = REFINERYEXPORT_REASON_MATSCI
|
||||
|
||||
/datum/reagent/succubi_numbing/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
|
||||
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
M.Weaken(2)
|
||||
M.drowsyness = max(M.drowsyness, 20)
|
||||
if(prob(7))
|
||||
M.show_message(span_warning("You start to feel weakened, your body seems heavy."))
|
||||
return
|
||||
|
||||
/datum/reagent/succubi_paralize
|
||||
name = REAGENT_PARALYZE_FLUID
|
||||
id = REAGENT_ID_PARALYZE_FLUID
|
||||
description = "A unknown liquid, it doesn't smell"
|
||||
metabolism= REM * 0.5
|
||||
color = "#41029B"
|
||||
scannable = 0
|
||||
supply_conversion_value = REFINERYEXPORT_VALUE_PROCESSED
|
||||
industrial_use = REFINERYEXPORT_REASON_MATSCI
|
||||
|
||||
/datum/reagent/succubi_paralize/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //will first keep it like that. lets see what it changes. if nothing, than I will rework the effect again
|
||||
|
||||
M.Weaken(20)
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
if(prob(10))
|
||||
M.show_message(span_warning("You lose sensation of your body."))
|
||||
return
|
||||
|
||||
|
||||
//egglaying
|
||||
var/eggs = 0
|
||||
|
||||
|
||||
/mob/living/proc/mobegglaying()
|
||||
set name = "Egg laying"
|
||||
set desc = "you can lay Eggs"
|
||||
set category = "Abilities.General"
|
||||
|
||||
var/mob/living/carbon/human/C = src
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
var/choice = tgui_input_list(src, "What do you want to do?", "Egg Option", list("Make a Egg", "lay your Eggs"))
|
||||
last_special = world.time + 600
|
||||
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
if(do_after(src, 300)) //Thrirty seconds.
|
||||
if(choice == "Make a Egg")
|
||||
src.show_message(span_warning("You feel your belly bulging a bit, you made an egg!"))
|
||||
C.nutrition -=150
|
||||
eggs += 1
|
||||
return 0
|
||||
else if(choice == "Make a Egg" && eggs > 5)
|
||||
src.show_message(span_warning("Your Belly is full of Eggs you cant have more!!"))
|
||||
return 0
|
||||
else if(choice == "lay your Eggs" && eggs > 0)
|
||||
src.visible_message(span_infoplain(span_white("[src] freezes and vissibly tries to squat down")))
|
||||
|
||||
while(eggs > 0)
|
||||
src.show_message(span_warning("You lay a egg!"))
|
||||
eggs--
|
||||
var/obj/item/reagent_containers/food/snacks/egg/E = new(get_turf(src))
|
||||
E.pixel_x = rand(-6,6)
|
||||
E.pixel_y = rand(-6,6)
|
||||
return
|
||||
else
|
||||
src.visible_message(span_warning("you dont have any eggs!"))
|
||||
return //Should never happen
|
||||
|
||||
/mob/living/proc/insect_sting()
|
||||
set name = "Insect Sting"
|
||||
set desc = "Sting a target and inject a small amount of toxin"
|
||||
set category = "Abilities.General"
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
var/list/victims = list()
|
||||
for(var/mob/living/carbon/C in oview(1))
|
||||
victims += C
|
||||
var/mob/living/carbon/T = tgui_input_list(src, "Who will we sting?", "Target", victims)
|
||||
|
||||
if(!T)
|
||||
return
|
||||
if(T.isSynthetic())
|
||||
to_chat(src, span_notice("We are unable to pierce the outer shell of [T]."))
|
||||
return
|
||||
|
||||
to_chat(src, span_notice("You jab your stinger into [T]."))
|
||||
to_chat(T, span_danger("You feel a stabbing pain as you are stung!"))
|
||||
src.visible_message(span_infoplain(span_red("[src] sinks their stinger into [T]!")))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_CONDENSEDCAPSAICINV,3)
|
||||
last_special = world.time + 50 // Many little jabs instead of one big one
|
||||
|
||||
@@ -1,204 +0,0 @@
|
||||
//succuby bite is back baby
|
||||
/mob/living/proc/succubus_bite()
|
||||
set name = "Inject Prey"
|
||||
set desc = "Bite prey and inject them with various toxins."
|
||||
set category = "Abilities.Succubus"
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(!ishuman(src))
|
||||
return //If you're not a human you don't have permission to do this.
|
||||
|
||||
var/mob/living/carbon/human/C = src
|
||||
|
||||
var/obj/item/grab/G = src.get_active_hand()
|
||||
|
||||
if(!istype(G))
|
||||
to_chat(C, span_warning("You must be grabbing a creature in your active hand to bite them."))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/T = G.affecting
|
||||
|
||||
if(!istype(T) || T.isSynthetic())
|
||||
to_chat(src, span_warning("\The [T] is not able to be bitten."))
|
||||
return
|
||||
|
||||
if(G.state != GRAB_NECK)
|
||||
to_chat(C, span_warning("You must have a tighter grip to bite this creature."))
|
||||
return
|
||||
|
||||
var/choice = tgui_input_list(src, "What do you wish to inject?", "Reagent", list(REAGENT_APHRODISIAC, "Numbing", "Paralyzing"))
|
||||
|
||||
last_special = world.time + 600
|
||||
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
src.visible_message(span_bolddanger("[src] moves their head next to [T]'s neck, seemingly looking for something!"))
|
||||
|
||||
if(do_after(src, 300, T)) //Thrirty seconds.
|
||||
if(choice == REAGENT_APHRODISIAC)
|
||||
src.show_message(span_warning("You sink your fangs into [T] and inject your aphrodisiac!"))
|
||||
src.visible_message(span_red("[src] sinks their fangs into [T]!"))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_APHRODIAC_FLUID,100)
|
||||
return 0
|
||||
else if(choice == "Numbing")
|
||||
src.show_message(span_warning("You sink your fangs into [T] and inject your poison!"))
|
||||
src.visible_message(span_red("[src] sinks their fangs into [T]!"))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_NUMBING_FLUID,20) //Poisons should work when more units are injected
|
||||
else if(choice == "Paralyzing")
|
||||
src.show_message(span_warning("You sink your fangs into [T] and inject your poison!"))
|
||||
src.visible_message(span_red("[src] sinks their fangs into [T]!"))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_PARALYZE_FLUID,20) //Poisons should work when more units are injected
|
||||
else
|
||||
return //Should never happen
|
||||
|
||||
/* //will maybe add something one day
|
||||
mob/living/carbon/proc/charmed() //TODO
|
||||
charmed = 1
|
||||
spawn(0)
|
||||
for(var/i = 1,i > 0, i--)
|
||||
src << "<font color='#6F6FE2'>" + span_italics("... [pick(charmed)] ...") + "</font>"
|
||||
charmed = 0
|
||||
*/
|
||||
|
||||
/datum/reagent/succubi_aphrodisiac
|
||||
name = REAGENT_APHRODISIAC
|
||||
id = REAGENT_ID_APHRODIAC_FLUID
|
||||
description = "A unknown liquid, it smells sweet"
|
||||
metabolism = REM * 0.8
|
||||
color = "#8A0829"
|
||||
scannable = 0
|
||||
wiki_flag = WIKI_SPOILER
|
||||
supply_conversion_value = REFINERYEXPORT_VALUE_PROCESSED
|
||||
industrial_use = REFINERYEXPORT_REASON_MATSCI
|
||||
|
||||
/datum/reagent/succubi_aphrodisiac/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(prob(3))
|
||||
M.show_message(span_warning("You feel funny, and fall in love with the person in front of you"))
|
||||
M.say(pick("!blushes", "!moans", "!giggles", "!turns visibly red")) //using mob say so we dont have to define this dumb one time use emote that equates to just blushing -shark
|
||||
//M.charmed() //TODO
|
||||
return
|
||||
|
||||
/datum/reagent/succubi_numbing //Using numbing_enzyme instead.
|
||||
name = REAGENT_NUMBING_FLUID
|
||||
id = REAGENT_ID_NUMBING_FLUID
|
||||
description = "A unknown liquid, it doesn't smell"
|
||||
metabolism = REM * 0.5
|
||||
color = "#41029B"
|
||||
scannable = 0
|
||||
supply_conversion_value = REFINERYEXPORT_VALUE_PROCESSED
|
||||
industrial_use = REFINERYEXPORT_REASON_MATSCI
|
||||
|
||||
/datum/reagent/succubi_numbing/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
|
||||
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
M.Weaken(2)
|
||||
M.drowsyness = max(M.drowsyness, 20)
|
||||
if(prob(7))
|
||||
M.show_message(span_warning("You start to feel weakened, your body seems heavy."))
|
||||
return
|
||||
|
||||
/datum/reagent/succubi_paralize
|
||||
name = REAGENT_PARALYZE_FLUID
|
||||
id = REAGENT_ID_PARALYZE_FLUID
|
||||
description = "A unknown liquid, it doesn't smell"
|
||||
metabolism= REM * 0.5
|
||||
color = "#41029B"
|
||||
scannable = 0
|
||||
supply_conversion_value = REFINERYEXPORT_VALUE_PROCESSED
|
||||
industrial_use = REFINERYEXPORT_REASON_MATSCI
|
||||
|
||||
/datum/reagent/succubi_paralize/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //will first keep it like that. lets see what it changes. if nothing, than I will rework the effect again
|
||||
|
||||
M.Weaken(20)
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
if(prob(10))
|
||||
M.show_message(span_warning("You lose sensation of your body."))
|
||||
return
|
||||
|
||||
|
||||
//egglaying
|
||||
var/eggs = 0
|
||||
|
||||
|
||||
/mob/living/proc/mobegglaying()
|
||||
set name = "Egg laying"
|
||||
set desc = "you can lay Eggs"
|
||||
set category = "Abilities.General"
|
||||
|
||||
var/mob/living/carbon/human/C = src
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
var/choice = tgui_input_list(src, "What do you want to do?", "Egg Option", list("Make a Egg", "lay your Eggs"))
|
||||
last_special = world.time + 600
|
||||
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
if(do_after(src, 300)) //Thrirty seconds.
|
||||
if(choice == "Make a Egg")
|
||||
src.show_message(span_warning("You feel your belly bulging a bit, you made an egg!"))
|
||||
C.nutrition -=150
|
||||
eggs += 1
|
||||
return 0
|
||||
else if(choice == "Make a Egg" && eggs > 5)
|
||||
src.show_message(span_warning("Your Belly is full of Eggs you cant have more!!"))
|
||||
return 0
|
||||
else if(choice == "lay your Eggs" && eggs > 0)
|
||||
src.visible_message(span_infoplain(span_white("[src] freezes and vissibly tries to squat down")))
|
||||
|
||||
while(eggs > 0)
|
||||
src.show_message(span_warning("You lay a egg!"))
|
||||
eggs--
|
||||
var/obj/item/reagent_containers/food/snacks/egg/E = new(get_turf(src))
|
||||
E.pixel_x = rand(-6,6)
|
||||
E.pixel_y = rand(-6,6)
|
||||
return
|
||||
else
|
||||
src.visible_message(span_warning("you dont have any eggs!"))
|
||||
return //Should never happen
|
||||
|
||||
/*
|
||||
if(layeggs == 1)
|
||||
src.visible_message(span_infoplain(span_white(span_bold("[src] freezes and vissibly tries to squat down"))))
|
||||
|
||||
while(eggs > 0)
|
||||
src.show_message(span_warning("You lay you egg!"))
|
||||
eggs--
|
||||
var/obj/item/reagent_containers/food/snacks/egg/E = new(get_turf(src))
|
||||
E.pixel_x = rand(-6,6)
|
||||
E.pixel_y = rand(-6,6)
|
||||
layeggs--
|
||||
|
||||
return
|
||||
*/
|
||||
|
||||
/mob/living/proc/insect_sting()
|
||||
set name = "Insect Sting"
|
||||
set desc = "Sting a target and inject a small amount of toxin"
|
||||
set category = "Abilities.General"
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
var/list/victims = list()
|
||||
for(var/mob/living/carbon/C in oview(1))
|
||||
victims += C
|
||||
var/mob/living/carbon/T = tgui_input_list(src, "Who will we sting?", "Target", victims)
|
||||
|
||||
if(!T)
|
||||
return
|
||||
if(T.isSynthetic())
|
||||
to_chat(src, span_notice("We are unable to pierce the outer shell of [T]."))
|
||||
return
|
||||
|
||||
to_chat(src, span_notice("You jab your stinger into [T]."))
|
||||
to_chat(T, span_danger("You feel a stabbing pain as you are stung!"))
|
||||
src.visible_message(span_infoplain(span_red("[src] sinks their stinger into [T]!")))
|
||||
T.bloodstr.add_reagent(REAGENT_ID_CONDENSEDCAPSAICINV,3)
|
||||
last_special = world.time + 50 // Many little jabs instead of one big one
|
||||
@@ -36,16 +36,16 @@
|
||||
var/datum/matter_synth/glass = null
|
||||
var/datum/matter_synth/wood = null
|
||||
var/datum/matter_synth/plastic = null
|
||||
var/datum/matter_synth/water = null //CHOMPAdd readd water
|
||||
var/datum/matter_synth/water = null
|
||||
var/digest_brute = 2
|
||||
var/digest_burn = 3
|
||||
var/digest_multiplier = 1
|
||||
var/recycles = FALSE
|
||||
var/medsensor = TRUE //Does belly sprite come with patient ok/dead light?
|
||||
var/obj/item/healthanalyzer/med_analyzer = null
|
||||
var/ore_storage = FALSE //CHOMPAdd
|
||||
var/max_ore_storage = 500 //CHOMPAdd
|
||||
var/current_capacity = 0 //CHOMPAdd
|
||||
var/ore_storage = FALSE
|
||||
var/max_ore_storage = 500
|
||||
var/current_capacity = 0
|
||||
flags = NOBLUDGEON
|
||||
|
||||
/obj/item/dogborg/sleeper/Initialize(mapload)
|
||||
@@ -277,7 +277,7 @@
|
||||
dat += span_red(span_bold("Current load:") + " [length(contents)] / [max_item_count] objects.") + "<BR>"
|
||||
dat += span_gray("([contents.Join(", ")])") + "<BR><BR>"
|
||||
|
||||
if(ore_storage) //CHOMPAdd
|
||||
if(ore_storage)
|
||||
dat += "<font color='red'><B>Current ore capacity:</B> [current_capacity] / [max_ore_storage].</font><BR>"
|
||||
|
||||
if(delivery && length(contents))
|
||||
@@ -559,7 +559,7 @@
|
||||
if(SSair.current_cycle%3==1 && length(touchable_items))
|
||||
|
||||
//Burn all the mobs or add them to the exclusion list
|
||||
var/volume = 0 //CHOMPAdd
|
||||
var/volume = 0
|
||||
for(var/mob/living/T in (touchable_items))
|
||||
touchable_items -= T //Exclude mobs from loose item picking.
|
||||
if(SEND_SIGNAL(T, COMSIG_CHECK_FOR_GODMODE) & COMSIG_GODMODE_CANCEL)
|
||||
@@ -575,10 +575,8 @@
|
||||
var/actual_burn = T.getFireLoss() - old_burn
|
||||
var/damage_gain = actual_brute + actual_burn
|
||||
hound.adjust_nutrition(2.5 * damage_gain) //drain(-25 * damage_gain) //25*total loss as with voreorgan stats.
|
||||
//CHOMPAdd Start
|
||||
if(water)
|
||||
water.add_charge(damage_gain)
|
||||
//CHOMPAdd End
|
||||
if(T.stat == DEAD)
|
||||
if(ishuman(T))
|
||||
log_admin("[key_name(hound)] has digested [key_name(T)] with a cyborg belly. ([hound ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[hound.x];Y=[hound.y];Z=[hound.z]'>JMP</a>" : "null"])")
|
||||
@@ -612,7 +610,6 @@
|
||||
items_preserved |= brain
|
||||
else
|
||||
T.drop_from_inventory(I, src)
|
||||
//CHOMPAdd Start
|
||||
if(ishuman(T))
|
||||
var/mob/living/carbon/human/Prey = T
|
||||
volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier
|
||||
@@ -622,7 +619,6 @@
|
||||
volume = T.reagents.total_volume
|
||||
if(water)
|
||||
water.add_charge(volume)
|
||||
//CHOMPAdd End
|
||||
if(T.ckey)
|
||||
GLOB.prey_digested_roundstat++
|
||||
if(patient == T)
|
||||
@@ -638,19 +634,15 @@
|
||||
//Handle the target being anything but a /mob/living
|
||||
var/obj/item/T = target
|
||||
if(istype(T))
|
||||
//CHOMPAdd Start
|
||||
if(T.reagents)
|
||||
volume = T.reagents.total_volume
|
||||
//CHOMPAdd End
|
||||
var/is_trash = istype(T, /obj/item/trash)
|
||||
var/digested = T.digest_act(item_storage = src)
|
||||
if(!digested)
|
||||
items_preserved |= T
|
||||
else
|
||||
//CHOMPAdd Start
|
||||
if(volume && water)
|
||||
water.add_charge(volume)
|
||||
//CHOMPAdd End
|
||||
if(recycles && T.matter)
|
||||
for(var/material in T.matter)
|
||||
var/total_material = T.matter[material]
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
recycles = FALSE
|
||||
*/
|
||||
|
||||
//CHOMPEdit Start
|
||||
/obj/item/dogborg/sleeper/compactor/supply //Miner borg belly
|
||||
name = "Supply Storage"
|
||||
desc = "A mounted survival unit with fuel processor, helpful with both deliveries and assisting injured miners."
|
||||
@@ -94,7 +93,6 @@
|
||||
to_chat(user, span_notice("You empty the satchel into the box."))
|
||||
return
|
||||
..()
|
||||
//CHOMPEdit End
|
||||
|
||||
/obj/item/dogborg/sleeper/compactor/brewer
|
||||
name = "Brew Belly"
|
||||
@@ -113,7 +111,6 @@
|
||||
max_item_count = 10
|
||||
recycles = FALSE
|
||||
|
||||
// CHOMPAdd Start
|
||||
/obj/item/dogborg/sleeper/compactor/brewer/inject_chem(mob/user, chem)
|
||||
if(patient && patient.reagents)
|
||||
if((chem in injection_chems) + REAGENT_ID_INAPROVALINE)
|
||||
@@ -127,7 +124,6 @@
|
||||
drain(100) //-100 charge per injection
|
||||
var/units = round(patient.reagents.get_reagent_amount(chem))
|
||||
to_chat(hound, span_notice("Injecting [units] unit\s into occupant.")) //If they were immersed, the reagents wouldn't leave with them.
|
||||
// CHOMPAdd End
|
||||
|
||||
/obj/item/dogborg/sleeper/K9/ert
|
||||
name = "Emergency Storage"
|
||||
|
||||
@@ -113,7 +113,6 @@
|
||||
try_reload()
|
||||
return FALSE
|
||||
|
||||
//CHOMP Addition: This section here is special snowflake code for metroids only, or for whatever else in the future that you want to have move and shoot at the same time. Basically, this is a non-stupid version of the above intended for ranged vore mobs i.e. metroids. ranged_attack_delay is stupid because it sleeps the entire mob. This new ranged_cooldown_time is smarter in the sense that it is an internalized timer. Try not to confuse the names.
|
||||
if(ranged_cooldown_time) //If you have a non-zero number in a mob's variables, this pattern begins.
|
||||
if(ranged_cooldown <= world.time) //Further down, a timer keeps adding to the ranged_cooldown variable automatically.
|
||||
visible_message(span_danger(span_bold("\The [src]") + " fires at \the [A]!")) //Leave notice of shooting.
|
||||
@@ -121,7 +120,7 @@
|
||||
if(casingtype) //If the mob is designated to leave casings...
|
||||
new casingtype(loc) //... leave the casing.
|
||||
ranged_cooldown = world.time + ranged_cooldown_time + ((injury_level / 2) SECONDS) //Special addition here. This is a timer. Keeping updating the time after shooting. Add that ranged cooldown time specified in the mob to the world time.
|
||||
return TRUE //End these commands here.
|
||||
return TRUE
|
||||
|
||||
visible_message(span_danger(span_bold("\The [src]") + " fires at \the [A]!"))
|
||||
shoot(A)
|
||||
@@ -157,7 +156,6 @@
|
||||
if(needs_reload)
|
||||
reload_count++
|
||||
|
||||
|
||||
// if(distance >= special_attack_min_range && distance <= special_attack_max_range)
|
||||
// return TRUE
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
switch(L.a_intent)
|
||||
if(I_HELP)
|
||||
if(health > 0)
|
||||
if(L.zone_sel.selecting == BP_GROIN) //CHOMPEdit
|
||||
if(L.zone_sel.selecting == BP_GROIN)
|
||||
if(L.vore_bellyrub(src))
|
||||
return
|
||||
L.visible_message(span_notice("\The [L] [response_help] \the [src]."))
|
||||
@@ -202,7 +202,7 @@
|
||||
|
||||
// Electricity
|
||||
/mob/living/simple_mob/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null)
|
||||
var/zap = min((1-get_shock_protection()), siemens_coeff) //CHOMPEdit - for some reason simple mobs just never properly checked for shock resist? Whatever, take whichever is lower.
|
||||
var/zap = min((1-get_shock_protection()), siemens_coeff)
|
||||
shock_damage *= zap
|
||||
if(shock_damage < 1)
|
||||
return 0
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
/mob/living/simple_mob/examine(mob/user)
|
||||
. = ..()
|
||||
if(stat != DEAD && user && harvest_tool && (get_dist(user, src) <= 3))
|
||||
. += span_notice("\The [src] can be [harvest_verb] with a [initial(harvest_tool.name)] every [harvest_cooldown / 600] minutes.") //CHOMPEdit Please do math better
|
||||
. += span_notice("\The [src] can be [harvest_verb] with a [initial(harvest_tool.name)] every [harvest_cooldown / 600] minutes.")
|
||||
var/time_to_harvest = (harvest_recent + harvest_cooldown) - world.time
|
||||
if(time_to_harvest > 0)
|
||||
. += span_notice("It can be [harvest_verb] in [(time_to_harvest)] second(s).") //CHOMPEdit This is as good as I can get for now, I intend to make it better later
|
||||
. += span_notice("It can be [harvest_verb] in [(time_to_harvest)] second(s).")
|
||||
else
|
||||
. += span_notice("It can be [harvest_verb] now.")
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(istype(L) && (!has_hands || !L.attempt_to_scoop(src)))
|
||||
if(src.zone_sel.selecting == BP_GROIN) //CHOMPEdit
|
||||
if(src.vore_bellyrub(A)) //ChompEDIT
|
||||
return //ChompEDIT
|
||||
if(src.zone_sel.selecting == BP_GROIN)
|
||||
if(src.vore_bellyrub(A))
|
||||
return
|
||||
automatic_custom_emote(VISIBLE_MESSAGE,"[pick(friendly)] \the [A]!", check_stat = TRUE)
|
||||
if(istype(A,/obj/structure/micro_tunnel)) //Allows simplemobs to click on mouse holes, mice should be allowed to go in mouse holes, and other mobs
|
||||
var/obj/structure/micro_tunnel/t = A //should be allowed to drag the mice out of the mouse holes!
|
||||
|
||||
@@ -111,8 +111,10 @@
|
||||
var/melee_attack_delay = 2 // If set, the mob will do a windup animation and can miss if the target moves out of the way.
|
||||
var/ranged_attack_delay = null
|
||||
var/special_attack_delay = null
|
||||
var/ranged_cooldown = 0 //CHOMP Addition. This is part of a timer in combat.dm.
|
||||
var/ranged_cooldown_time = 0 //CHOMP Addition: This variable can be thrown into mob variables in order to allow the mob to move AND shoot at the same time. The previous "ranged_attack_delay" is a dumb way of handling ranged attacks because it sleeps the entire mob - this one uses an internalized timer so it is slightly smarter.
|
||||
var/ranged_cooldown = 0
|
||||
var/ranged_cooldown_time = 0
|
||||
var/picked_color = FALSE
|
||||
var/picked_size = FALSE
|
||||
|
||||
//Special attacks
|
||||
// var/special_attack_prob = 0 // The chance to ATTEMPT a special_attack_target(). If it fails, it will do a regular attack instead.
|
||||
@@ -205,10 +207,10 @@
|
||||
if(has_eye_glow)
|
||||
add_eyes()
|
||||
|
||||
if(vore_active) //CHOMPSTATION edit: Moved here so the verb is useable before initialising vorgans.
|
||||
add_verb(src,/mob/living/simple_mob/proc/animal_nom) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/proc/shred_limb) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/proc/nutrition_heal) //CHOMPEdit TGPanel //CHOMPSTATION edit
|
||||
if(vore_active) // Moved here so the verb is useable before initialising vorgans.
|
||||
add_verb(src,/mob/living/simple_mob/proc/animal_nom)
|
||||
add_verb(src,/mob/living/proc/shred_limb)
|
||||
add_verb(src,/mob/living/simple_mob/proc/nutrition_heal)
|
||||
|
||||
if(organ_names)
|
||||
organ_names = GET_DECL(organ_names)
|
||||
@@ -241,12 +243,48 @@
|
||||
//Client attached
|
||||
/mob/living/simple_mob/Login()
|
||||
. = ..()
|
||||
add_verb(src,/mob/living/simple_mob/proc/pick_size)
|
||||
add_verb(src,/mob/living/simple_mob/proc/pick_color)
|
||||
to_chat(src,span_boldnotice("You are \the [src].") + " [player_msg]")
|
||||
if(vore_active && !voremob_loaded)
|
||||
init_vore(TRUE)
|
||||
if(hasthermals)
|
||||
add_verb(src, /mob/living/simple_mob/proc/hunting_vision) //So that maint preds can see prey through walls, to make it easier to find them.
|
||||
|
||||
|
||||
/mob/living/simple_mob/proc/pick_size()
|
||||
set name = "Pick Size"
|
||||
set category = "Abilities.Settings"
|
||||
|
||||
if(picked_size)
|
||||
to_chat(src, span_notice("You have already picked a size! If you picked the wrong size, ask an admin to change your picked_size variable to 0."))
|
||||
return
|
||||
if(!resizable)
|
||||
to_chat(src, span_warning("You are immune to resizing!"))
|
||||
return
|
||||
|
||||
var/nagmessage = "Pick a size between [RESIZE_MINIMUM * 100] to [RESIZE_MAXIMUM * 100]%. (Only usable once!)"
|
||||
var/new_size = tgui_input_number(src, nagmessage, "Pick a Size", size_multiplier*100, RESIZE_MAXIMUM * 100, RESIZE_MINIMUM * 100)
|
||||
if(size_range_check(new_size))
|
||||
resize(new_size/100, uncapped = has_large_resize_bounds(), ignore_prefs = TRUE)
|
||||
picked_size = TRUE
|
||||
if(temporary_form) //resizing both our forms
|
||||
var/mob/living/L = temporary_form
|
||||
L.resize(new_size/100, uncapped = has_large_resize_bounds(), ignore_prefs = TRUE)
|
||||
|
||||
/mob/living/simple_mob/proc/pick_color()
|
||||
set name = "Pick Color"
|
||||
set category = "Abilities.Settings"
|
||||
set desc = "You can set your color!"
|
||||
if(picked_color)
|
||||
to_chat(src, span_notice("You have already picked a color! If you picked the wrong color, ask an admin to change your picked_color variable to 0."))
|
||||
return
|
||||
var/newcolor = tgui_color_picker(usr, "Choose a color.", "", color)
|
||||
if(newcolor)
|
||||
color = newcolor
|
||||
picked_color = TRUE
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/SelfMove(turf/n, direct, movetime)
|
||||
var/turf/old_turf = get_turf(src)
|
||||
var/old_dir = dir
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
var/obj/item/radio/headset/mob_radio //Adminbus headset for simplemob shenanigans.
|
||||
does_spin = FALSE
|
||||
can_be_drop_pred = TRUE // Mobs are pred by default.
|
||||
can_be_drop_prey = TRUE //CHOMP Add This also counts for spontaneous prey for telenoms and phase noms.
|
||||
can_be_drop_prey = TRUE
|
||||
var/damage_threshold = 0 //For some mobs, they have a damage threshold required to deal damage to them.
|
||||
|
||||
var/nom_mob = FALSE //If a mob is meant to be hostile for vore purposes but is otherwise not hostile, if true makes certain AI ignore the mob
|
||||
@@ -63,11 +63,11 @@
|
||||
|
||||
//For all those ID-having mobs
|
||||
/mob/living/simple_mob/GetIdCard()
|
||||
if(get_active_hand()) //CHOMPAdd Start
|
||||
if(get_active_hand())
|
||||
var/obj/item/I = get_active_hand()
|
||||
var/id = I.GetID()
|
||||
if(id)
|
||||
return id //CHOMPAdd End
|
||||
return id
|
||||
if(myid)
|
||||
return myid
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
return PounceTarget(L, pouncechance)
|
||||
|
||||
// We're not attempting a pounce, if they're down or we can eat standing, do it as long as they're edible. Otherwise, hit normally.
|
||||
if(will_eat(L) && (L.lying || vore_standing_too)) //CHOMPEdit
|
||||
if(will_eat(L) && (L.lying || vore_standing_too))
|
||||
return EatTarget(L)
|
||||
else
|
||||
return ..()
|
||||
@@ -229,6 +229,8 @@
|
||||
add_verb(src, /mob/living/simple_mob/proc/animal_nom)
|
||||
add_verb(src, /mob/living/proc/shred_limb)
|
||||
add_verb(src, /mob/living/simple_mob/proc/nutrition_heal)
|
||||
add_verb(src, /mob/living/proc/eat_trash)
|
||||
add_verb(src, /mob/living/proc/toggle_trash_catching)
|
||||
|
||||
if(LAZYLEN(vore_organs))
|
||||
return
|
||||
@@ -279,10 +281,9 @@
|
||||
"The churning walls slowly pulverize you into meaty nutrients.",
|
||||
"The stomach glorps and gurgles as it tries to work you into slop.")
|
||||
can_be_drop_pred = TRUE // Mobs will eat anyone that decides to drop/slip into them by default.
|
||||
// B.belly_fullscreen = "yet_another_tumby" //Chompedit - Why are they even using this one, I do not understand.
|
||||
B.belly_fullscreen = "a_tumby" //Chompedit
|
||||
B.belly_fullscreen_color = "#823232" //Chompedit
|
||||
B.belly_fullscreen_color2 = "#823232" //Chompedit
|
||||
B.belly_fullscreen = "a_tumby"
|
||||
B.belly_fullscreen_color = "#823232"
|
||||
B.belly_fullscreen_color2 = "#823232"
|
||||
|
||||
/mob/living/simple_mob/Bumped(var/atom/movable/AM, yes)
|
||||
if(tryBumpNom(AM))
|
||||
@@ -400,7 +401,6 @@
|
||||
visible_message(span_notice("[M] starts riding [name]!"))
|
||||
|
||||
/mob/living/simple_mob/handle_message_mode(message_mode, message, verb, used_radios, speaking, alt_name)
|
||||
//CHOMPEdit - This whole proc tbh
|
||||
if(message_mode)
|
||||
if(message_mode == "intercom")
|
||||
for(var/obj/item/radio/intercom/I in view(1, null))
|
||||
@@ -474,5 +474,5 @@
|
||||
var/armor_block = run_armor_check(T, "melee")
|
||||
var/armor_soak = get_armor_soak(T, "melee")
|
||||
T.apply_damage(20, HALLOSS,, armor_block, armor_soak)
|
||||
if(prob(75)) //CHOMPEdit
|
||||
if(prob(75))
|
||||
T.apply_effect(3, WEAKEN, armor_block)
|
||||
|
||||
@@ -60,7 +60,6 @@
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
//var/picked_color = FALSE //CHOMPEdit - now on simplemob.
|
||||
|
||||
can_enter_vent_with = list(
|
||||
/obj/item/implant,
|
||||
@@ -121,7 +120,6 @@
|
||||
B.name = "stomach"
|
||||
B.desc = "The hot slick gut of a catslug!! Copious slime smears over you as you’re packed away into the gloom and oppressive humidity of this churning gastric sac. The pressure around you is intense, the squashy flesh bends and forms to your figure, clinging to you insistently! There’s basically no free space at all as your ears are filled with the slick slide of flesh against flesh and the burbling of gastric juices glooping all around you. The thumping of a heart booms from somewhere nearby, making everything pulse in against you in time with it! This is it! You’ve been devoured by a catslug!!!"
|
||||
B.mode_flags = 40
|
||||
// B.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change
|
||||
B.digest_brute = 0.5
|
||||
B.digest_burn = 0.5
|
||||
B.digestchance = 10
|
||||
@@ -1097,7 +1095,7 @@
|
||||
//=============================
|
||||
|
||||
//Suslug's below
|
||||
/*CHOMP Remove START Removing among us meme
|
||||
/* CHOMPRemove Start Removing among us meme
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/suslug
|
||||
name = "suslug"
|
||||
desc = "A noodley bodied creature wearing a colorful space suit. Suspicious..."
|
||||
@@ -1234,4 +1232,4 @@
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/suslug/color/light_yellow
|
||||
color = COLOR_WHEAT
|
||||
CHOMP Remove END*/
|
||||
*/// CHOMPRemove End
|
||||
|
||||
@@ -78,7 +78,7 @@ GLOBAL_VAR_INIT(jellyfish_count, 0)
|
||||
vore_default_contamination_flavor = "Wet"
|
||||
vore_default_contamination_color = "grey"
|
||||
vore_default_item_mode = IM_DIGEST
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
var/reproduction_cooldown = 0
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
vore_default_contamination_flavor = "Wet"
|
||||
vore_default_contamination_color = "grey"
|
||||
vore_default_item_mode = IM_DIGEST
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/skeleton/alt
|
||||
icon_state = "altskeleton"
|
||||
|
||||
@@ -28,8 +28,8 @@
|
||||
response_disarm = "pushes"
|
||||
response_harm = "punches"
|
||||
|
||||
has_langs = list(LANGUAGE_MOUSE)//CHOMPADD they're basically mice, why cant they speak it
|
||||
universal_understand = 1 //CHOMPADD and mice can understand all languages too so.. why not dustjumpers too
|
||||
has_langs = list(LANGUAGE_MOUSE)
|
||||
universal_understand = 1
|
||||
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 2
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
vore_default_contamination_flavor = "Wet"
|
||||
vore_default_contamination_color = "grey"
|
||||
vore_default_item_mode = IM_DIGEST
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/datum/say_list/spacewhale
|
||||
emote_see = list("ripples and flows", "flashes rhythmically","glows faintly","investigates something")
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
reload_count = 0
|
||||
reload_time = 7 SECONDS
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
|
||||
/datum/ai_holder/simple_mob/ranged/kiting/space_ghost
|
||||
|
||||
@@ -381,7 +381,6 @@
|
||||
edge_blending_priority = 4
|
||||
initial_flooring = /decl/flooring/fur
|
||||
can_dig = FALSE
|
||||
//turf_layers = list() CHOMP Removal
|
||||
var/tree_chance = 25
|
||||
var/tree_color = null
|
||||
var/tree_type = /obj/structure/flora/tree/fur
|
||||
@@ -1530,15 +1529,14 @@
|
||||
linked_mob.adjust_nutrition(how_much)
|
||||
H.mind?.vore_death = TRUE
|
||||
GLOB.prey_digested_roundstat++
|
||||
spawn(0)
|
||||
qdel(H) //glorp
|
||||
return
|
||||
H.burn_skin(damage) //CHOMPEdit Start
|
||||
H.burn_skin(damage)
|
||||
if(linked_mob)
|
||||
var/how_much = (damage * H.size_multiplier) * H.get_digestion_nutrition_modifier() * linked_mob.get_digestion_efficiency_modifier()
|
||||
if(!H.ckey)
|
||||
how_much = how_much / 10 //Braindead mobs are worth less
|
||||
linked_mob.adjust_nutrition(how_much) //CHOMPEdit End
|
||||
linked_mob.adjust_nutrition(how_much)
|
||||
else if (isliving(thing))
|
||||
var/mob/living/L = thing
|
||||
if(!L)
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
var/flipped = FALSE
|
||||
var/flip_cooldown = 0
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/datum/say_list/startreader
|
||||
emote_see = list("bobs", "digs around","gnashes at something","yawns","snaps at something")
|
||||
|
||||
@@ -78,7 +78,6 @@
|
||||
B.name = "stummy"
|
||||
B.desc = "It's a star shaped stomach. A stummy, if you will. It's warm and soft, not unlike plush, but it's tight!"
|
||||
B.mode_flags = DM_FLAG_THICKBELLY | DM_FLAG_NUMBING
|
||||
// B.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change
|
||||
B.digest_brute = 0
|
||||
B.digest_burn = 0
|
||||
B.digest_oxy = 12
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
#define SYNX_UPPER_DAMAGE 6
|
||||
|
||||
|
||||
/mob/living/simple_mob/animal/synx/ //Player controlled variant
|
||||
/mob/living/simple_mob/animal/synx //Player controlled variant
|
||||
//on inteligence https://synx.fandom.com/wiki/Behavior/Intelligence //keeping this here for player controlled synxes.
|
||||
name = "Synx"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Plain, white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration."
|
||||
tt_desc = "synxus pergulus"
|
||||
|
||||
//Synx species belongs to ChimeraSynx , Base sprites made by: SpitefulCrow
|
||||
icon = 'modular_chomp/icons/mob/synx_modular.dmi'//giving synxes their own DMI file!
|
||||
icon = 'icons/mob/synx_modular.dmi'//giving synxes their own DMI file!
|
||||
icon_state = "synx_living"
|
||||
icon_living = "synx_living"
|
||||
icon_dead = "synx_dead"
|
||||
@@ -110,13 +110,6 @@
|
||||
attack_edge = 1
|
||||
attack_armor_type = "melee" //Default is melee but I'm stating this explicitly to make it more obvious to anybody reading this
|
||||
|
||||
/mob/living/simple_mob/animal/synx/Initialize(mapload)
|
||||
. = ..()
|
||||
src.adjust_nutrition(src.max_nutrition)
|
||||
build_icons(1)
|
||||
voremob_loaded = 1
|
||||
mob_radio = new /obj/item/radio/headset/mob_headset(src) //We always give radios to spawned mobs anyway
|
||||
|
||||
//Vore stuff//leaving most of this here even though its no going to be an AI controlled variant.
|
||||
vore_active = 1
|
||||
vore_capacity = 2
|
||||
@@ -146,6 +139,16 @@
|
||||
max_n2 = 0 //Maybe add a max
|
||||
// TODO: Set a max temperature of about 20-30 above room temperatures. Synx don't like the heat.
|
||||
|
||||
|
||||
/mob/living/simple_mob/animal/synx/Initialize(mapload)
|
||||
. = ..()
|
||||
src.adjust_nutrition(src.max_nutrition)
|
||||
build_icons(1)
|
||||
if(!voremob_loaded)
|
||||
voremob_loaded = TRUE
|
||||
init_vore()
|
||||
mob_radio = new /obj/item/radio/headset/mob_headset(src) //We always give radios to spawned mobs anyway
|
||||
|
||||
/mob/living/simple_mob/animal/synx/get_available_emotes()
|
||||
. = ..()
|
||||
. |= _human_default_emotes //Synx are great at mimicking
|
||||
@@ -214,14 +217,14 @@
|
||||
. = ..()
|
||||
if(is_pet)
|
||||
return
|
||||
add_verb(src,/mob/living/proc/ventcrawl) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/distend_stomach) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/proc/contort) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/sonar_ping) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/proc/shred_limb) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/disguise) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/randomspeech) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/set_style) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/proc/ventcrawl)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/distend_stomach)
|
||||
add_verb(src,/mob/living/simple_mob/proc/contort)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/sonar_ping)
|
||||
add_verb(src,/mob/living/proc/shred_limb)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/disguise)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/randomspeech)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/proc/set_style)
|
||||
realname = name
|
||||
voices += "Garbled voice"
|
||||
voices += "Unidentifiable Voice"
|
||||
@@ -670,7 +673,7 @@
|
||||
|
||||
var/list/options = list("Body","Horns","Marks","Eyes")
|
||||
for(var/option in options)
|
||||
LAZYSET(options, option, new /image('icons/effects/synx_labels_ch.dmi', option))
|
||||
LAZYSET(options, option, new /image('icons/effects/synx_labels.dmi', option))
|
||||
var/choice = show_radial_menu(src, src, options, radius = 60)
|
||||
if(!choice || QDELETED(src) || src.incapacitated())
|
||||
return FALSE
|
||||
@@ -679,7 +682,7 @@
|
||||
if("Body")
|
||||
options = body_styles
|
||||
for(var/option in options)
|
||||
var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_body[option]", dir = 2)
|
||||
var/image/I = new /image('icons/mob/synx_modular.dmi', "synx_body[option]", dir = 2)
|
||||
LAZYSET(options, option, I)
|
||||
choice = show_radial_menu(src, src, options, radius = 90)
|
||||
if(!choice || QDELETED(src) || src.incapacitated())
|
||||
@@ -692,7 +695,7 @@
|
||||
if("Horns")
|
||||
options = horn_styles
|
||||
for(var/option in options)
|
||||
var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_horns[option]", dir = 2)
|
||||
var/image/I = new /image('icons/mob/synx_modular.dmi', "synx_horns[option]", dir = 2)
|
||||
LAZYSET(options, option, I)
|
||||
choice = show_radial_menu(src, src, options, radius = 90)
|
||||
if(!choice || QDELETED(src) || src.incapacitated())
|
||||
@@ -705,7 +708,7 @@
|
||||
if("Marks")
|
||||
options = marking_styles
|
||||
for(var/option in options)
|
||||
var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_markings[option]", dir = 2)
|
||||
var/image/I = new /image('icons/mob/synx_modular.dmi', "synx_markings[option]", dir = 2)
|
||||
LAZYSET(options, option, I)
|
||||
choice = show_radial_menu(src, src, options, radius = 90)
|
||||
if(!choice || QDELETED(src) || src.incapacitated())
|
||||
@@ -718,7 +721,7 @@
|
||||
if("Eyes")
|
||||
options = eye_styles
|
||||
for(var/option in options)
|
||||
var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_eyes[option]", dir = 2)
|
||||
var/image/I = new /image('icons/mob/synx_modular.dmi', "synx_eyes[option]", dir = 2)
|
||||
LAZYSET(options, option, I)
|
||||
choice = show_radial_menu(src, src, options, radius = 90)
|
||||
if(!choice || QDELETED(src) || src.incapacitated())
|
||||
@@ -957,9 +960,9 @@
|
||||
|
||||
/mob/living/simple_mob/animal/synx/ai/pet/debug/Initialize(mapload)
|
||||
. = ..(mapload, TRUE)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/rename) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/resprite) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/redesc) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/rename)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/resprite)
|
||||
add_verb(src,/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/redesc)
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////SYNX SPAWNER////////////
|
||||
@@ -164,7 +164,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
vore_pounce_chance = 35
|
||||
vore_pounce_falloff = 0
|
||||
vore_standing_too = TRUE
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/load_default_bellies()
|
||||
. = ..()
|
||||
@@ -172,7 +172,6 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
B.name = "stomach"
|
||||
B.desc = "The heat of the roiling flesh around you bakes into you immediately as you're cast into the gloom of a Teppi's primary gastric chamber. The undulations are practically smothering, clinging to you and grinding you all over as the Teppi continues about its day. The walls are heavy against you, so it's really difficult to move at all, while the heart of this creature pulses rhythmically somewhere nearby, and you can feel the throb of its pulse in the doughy squish pressing up against you. Your figure sinks a ways into the flesh as it presses in, wrapping limbs up between countless slick folds and kneading waves. It's not long before you're positively soaked in a thin layer of slime as you're rocked and squeezed and jostled in the stomach of your captor."
|
||||
B.mode_flags = 40
|
||||
// B.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change
|
||||
B.digest_brute = 0.05
|
||||
B.digest_burn = 0.05
|
||||
B.digestchance = 5
|
||||
@@ -302,7 +301,6 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
p.contamination_flavor = "Wet"
|
||||
p.contamination_color = "grey"
|
||||
p.item_digest_mode = IM_HOLD
|
||||
// p.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change
|
||||
p.fancy_vore = 1
|
||||
p.vore_verb = "nyomp"
|
||||
friend_zone = p
|
||||
@@ -622,7 +620,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
if(prob(25))
|
||||
M.visible_message(span_notice("\The [src] rumbles happily at \the [M]"),span_notice("\The [src] rumbles happily at you!"))
|
||||
playsound(src, 'sound/voice/teppi/rumble.ogg', 75, 1)
|
||||
if(vore_selected) //CHOMPEdit
|
||||
if(vore_selected)
|
||||
vore_selected.digest_mode = DM_DRAIN //People outside can help calm the tumby if you squirm too much
|
||||
else if(prob(25))
|
||||
M.visible_message(span_notice("\The [src] rumbles happily at \the [M]"),span_notice("\The [src] rumbles happily at you!"))
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
var/used_dominate // world.time when the dominate power was last used.
|
||||
var/datum/ghost_query/Q // Used to unregister our signal
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/mob/living/simple_mob/animal/borer/roundstart
|
||||
roundstart = TRUE
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
icon_dead = "guard_dead"
|
||||
has_eye_glow = TRUE
|
||||
density = FALSE
|
||||
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
|
||||
faction = FACTION_AWAYMISSION //yw edit, Makes away mobs be on the same fuckin' side.
|
||||
minbodytemp = 175
|
||||
faction = FACTION_SPIDERS
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
@@ -15,9 +15,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/frost/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/electric/broodling
|
||||
maxHealth = 30
|
||||
@@ -36,9 +35,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/electric/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/hunter/broodling
|
||||
maxHealth = 40
|
||||
@@ -54,9 +52,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/hunter/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/lurker/broodling
|
||||
maxHealth = 40
|
||||
@@ -72,9 +69,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/lurker/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/nurse/broodling
|
||||
maxHealth = 60
|
||||
@@ -91,9 +87,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/nurse/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/pepper/broodling
|
||||
maxHealth = 40
|
||||
@@ -109,9 +104,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/pepper/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/thermic/broodling
|
||||
maxHealth = 40
|
||||
@@ -130,9 +124,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/thermic/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/tunneler/broodling
|
||||
maxHealth = 40
|
||||
@@ -148,9 +141,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/tunneler/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/webslinger/broodling
|
||||
maxHealth = 30
|
||||
@@ -168,9 +160,8 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/webslinger/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/broodling
|
||||
maxHealth = 60
|
||||
@@ -197,6 +188,5 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/broodling/death()
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
@@ -86,5 +86,5 @@
|
||||
|
||||
swarmling_type = /mob/living/simple_mob/animal/giant_spider/carrier/recursive
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/carrier/event // YW CHANGE
|
||||
/mob/living/simple_mob/animal/giant_spider/carrier/event
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/event
|
||||
|
||||
@@ -61,5 +61,5 @@
|
||||
return 1
|
||||
return ..() // Do ranged if possible otherwise.
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/electric/event // YW CHANGE
|
||||
/mob/living/simple_mob/animal/giant_spider/electric/event
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/event
|
||||
|
||||
@@ -36,5 +36,5 @@
|
||||
desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes. \
|
||||
It isn't native to Sif."
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/frost/event // YW CHANGE
|
||||
/mob/living/simple_mob/animal/giant_spider/frost/event
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/event
|
||||
|
||||
@@ -55,10 +55,10 @@
|
||||
|
||||
egg_type = /obj/effect/spider/eggcluster/royal
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/webslinger/event // YW CHANGE
|
||||
/mob/living/simple_mob/animal/giant_spider/webslinger/event
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/event
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/nurse/queen/event // YW CHANGE
|
||||
/mob/living/simple_mob/animal/giant_spider/nurse/queen/event
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/event
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/nurse
|
||||
|
||||
@@ -178,5 +178,5 @@
|
||||
if(move_to)
|
||||
give_destination(move_to, min_distance = 2, combat = TRUE) // This will switch our stance.
|
||||
*/
|
||||
/mob/living/simple_mob/animal/giant_spider/hunter/event // YW CHANGE
|
||||
/mob/living/simple_mob/animal/giant_spider/hunter/event
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/event
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
if(cloaked)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
L.add_modifier(/datum/modifier/entangled, 2 SECONDS) //L.Weaken(cloaked_weaken_amount) CHOMPEdit: Trying to remove hardstuns
|
||||
L.add_modifier(/datum/modifier/entangled, 2 SECONDS) //L.Weaken(cloaked_weaken_amount)
|
||||
to_chat(L, span_danger("\The [src] ambushes you!"))
|
||||
playsound(src, 'sound/weapons/spiderlunge.ogg', 75, 1)
|
||||
uncloak()
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
var/mob/living/L = A
|
||||
if(!L.stat)
|
||||
return ..()
|
||||
else //CHOMPStation edit: no infinite spider glitch for buckled mobs
|
||||
else
|
||||
if (L.anchored && L.buckled && !(L.pulledby || L.buckled.pulledby)) //don't have them trying to unbuckle someone on something that's being pulled because that's just annoying as fuck esp for a medic or something
|
||||
L.buckled.unbuckle_mob(L)
|
||||
if (!L.anchored)
|
||||
@@ -101,7 +101,7 @@
|
||||
/mob/living/simple_mob/animal/giant_spider/nurse/proc/spin_cocoon(atom/movable/AM)
|
||||
if(!istype(AM))
|
||||
return FALSE // We can't cocoon walls sadly.
|
||||
if(istype(AM, /mob/living/simple_mob/animal/giant_spider)) //CHOMPEdit addition
|
||||
if(istype(AM, /mob/living/simple_mob/animal/giant_spider))
|
||||
return FALSE
|
||||
visible_message(span_notice("\The [src] begins to secrete a sticky substance around \the [AM]."))
|
||||
|
||||
@@ -271,11 +271,11 @@
|
||||
/datum/ai_holder/simple_mob/melee/nurse_spider/can_attack(atom/movable/the_target, var/vision_required = TRUE)
|
||||
. = ..()
|
||||
if(!.) // Parent returned FALSE.
|
||||
if (istype(the_target, /mob/living/simple_mob/animal/giant_spider)) //CHOMPEdit addition
|
||||
if (istype(the_target, /mob/living/simple_mob/animal/giant_spider))
|
||||
var/mob/living/L = the_target
|
||||
if (L.stat)
|
||||
return FALSE
|
||||
if(istype(the_target, /obj) && (!vision_required || can_see_target(the_target))) //CHOMPEdit - they should be passing the can_see_target check
|
||||
if(istype(the_target, /obj) && (!vision_required || can_see_target(the_target)))
|
||||
var/obj/O = the_target
|
||||
if(!O.anchored)
|
||||
return TRUE
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
visible_message(span_danger("\The [src] erupts from underneath, and hits \the [L]!"))
|
||||
playsound(src, 'sound/weapons/heavysmash.ogg', 75, 1)
|
||||
L.add_modifier(/datum/modifier/entangled, 3 SECONDS) //L.Weaken(3) CHOMPedit: Removal of stuns
|
||||
L.add_modifier(/datum/modifier/entangled, 3 SECONDS) //L.Weaken(3)
|
||||
overshoot = FALSE
|
||||
|
||||
if(!overshoot) // We hit the target, or something, at destination, so we're done.
|
||||
@@ -207,3 +207,18 @@
|
||||
|
||||
incoming_damage_percent = 2
|
||||
evasion = -100
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/tunneler/cave
|
||||
name = "cave spider"
|
||||
desc = "Sandy and brown, it makes you shudder to look at it. However, this one doesn't seem very interested in bothering you."
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
|
||||
meat_amount = 1 // Scrawny little things! It's no wonder they don't want to fight you!
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/tunneler/cave/Initialize(mapload)
|
||||
. = ..()
|
||||
resize(0.50)
|
||||
|
||||
@@ -24,7 +24,7 @@ They're also cool, and Rykka/Nyria wrote this uwu
|
||||
tt_desc = "Crocuta crocuta"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/hyena)
|
||||
|
||||
icon = 'modular_chomp/icons/mob/animals48x32_ch.dmi'
|
||||
icon = 'icons/mob/hyena.dmi'
|
||||
icon_state = "yeen"
|
||||
icon_living = "yeen"
|
||||
icon_dead = "yeen_dead"
|
||||
@@ -82,7 +82,7 @@ They're also cool, and Rykka/Nyria wrote this uwu
|
||||
|
||||
say_list_type = /datum/say_list/hyena
|
||||
|
||||
allow_mind_transfer = TRUE //CHOMPAdd
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
var/obj/item/clothing/head/hat = null // The hat the yeen is wearing when initialized, var will update with the chosen hat.
|
||||
|
||||
@@ -90,7 +90,7 @@ They're also cool, and Rykka/Nyria wrote this uwu
|
||||
/mob/living/simple_mob/animal/hyena/verb/remove_hat()
|
||||
set name = "Remove Hat"
|
||||
set desc = "Remove the yeen's hat. You monster. ;~;"
|
||||
set category = "Abilities.Hyena" //CHOMPEdit
|
||||
set category = "Abilities.Hyena"
|
||||
set src in view(1)
|
||||
|
||||
drop_hat(usr)
|
||||
@@ -113,7 +113,7 @@ They're also cool, and Rykka/Nyria wrote this uwu
|
||||
/mob/living/simple_mob/animal/hyena/verb/give_hat()
|
||||
set name = "Give Hat"
|
||||
set desc = "Give the yeen a hat. You wonderful bean. <3"
|
||||
set category = "Abilities.Hyena" //CHOMPEdit
|
||||
set category = "Abilities.Hyena"
|
||||
set src in view(1)
|
||||
|
||||
take_hat(usr)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
tt_desc = "Dasypus novemcinctus"
|
||||
//faction = "mexico" //They are from Mexico. //Amusing but this prompts aggression from crew-aligned mobs.
|
||||
|
||||
icon = 'modular_chomp/icons/mob/animal_ch.dmi'
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_state = "armadillo"
|
||||
item_state = "armadillo_rest"
|
||||
icon_living = "armadillo"
|
||||
@@ -130,7 +130,6 @@
|
||||
update_icon()
|
||||
|
||||
/datum/say_list/armadillo
|
||||
// speak = list("Churr","Rumble!","Chirr?") //These are sounds, not things something speaks. It's also redundant with the speak_emotes.
|
||||
emote_hear = list("churrs","rumbles","chirrs")
|
||||
emote_see = list("rolls in place", "shuffles", "scritches at something")
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
maxHealth = 1
|
||||
health = 1
|
||||
nutrition = 20 //CHOMPEdit
|
||||
nutrition = 20
|
||||
|
||||
movement_cooldown = -1
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
icon = 'icons/mob/fish.dmi'
|
||||
item_state = "fish"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/invasive_fish)
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/invasive_fish) // CHOMPEnable
|
||||
|
||||
mob_size = MOB_SMALL
|
||||
// So fish are actually underwater.
|
||||
|
||||
@@ -14,14 +14,13 @@
|
||||
/mob/living/simple_mob/animal/passive/lizard/event/proc/man()
|
||||
var/mob/bigger = new /mob/living/simple_mob/vore/aggressive/lizardman(get_turf(src))
|
||||
|
||||
if(istype(loc,/obj/belly)){
|
||||
if(istype(loc,/obj/belly))
|
||||
var/obj/belly/B = loc
|
||||
B.owner.visible_message(span_warning("<b>Something grows inside [B.owner]'s [lowertext(B.name)]!</b>"))
|
||||
B.owner.visible_message(span_boldwarning("Something grows inside [B.owner]'s [lowertext(B.name)]!"))
|
||||
to_chat(B.owner, span_warning("\The [src] suddenly evolves inside your [lowertext(B.name)]!"))
|
||||
B.release_specific_contents(src, TRUE)
|
||||
B.nom_mob(bigger, null)
|
||||
qdel(src)
|
||||
}else{
|
||||
else
|
||||
visible_message(span_warning("\The [src] suddenly evolves!"))
|
||||
qdel(src)
|
||||
}
|
||||
|
||||
@@ -46,27 +46,22 @@
|
||||
|
||||
var/list/datum/disease/rat_diseases
|
||||
|
||||
//CHOMP Addition: Added these vore variables in and swapped the booleans from their defaults too.
|
||||
can_be_drop_prey = TRUE
|
||||
can_be_drop_pred = FALSE
|
||||
species_sounds = "Mouse"
|
||||
|
||||
pain_emote_1p = list("squeak", "squik") // CHOMP Addition: Pain/etc sounds
|
||||
pain_emote_1p = list("squeaks", "squiks") // CHOMP Addition: Pain/etc sounds
|
||||
pain_emote_1p = list("squeak", "squik")
|
||||
pain_emote_1p = list("squeaks", "squiks")
|
||||
|
||||
//CHOMPAdd Start
|
||||
/mob/living/simple_mob/animal/passive/mouse/Destroy()
|
||||
GLOB.active_ghost_pods -= src
|
||||
return ..()
|
||||
//CHOMPAdd End
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/Initialize(mapload, keep_parent_data)
|
||||
. = ..()
|
||||
//CHOMPAdd Start
|
||||
ghostjoin = 1
|
||||
ghostjoin = TRUE
|
||||
ghostjoin_icon()
|
||||
GLOB.active_ghost_pods += src
|
||||
//CHOMPAdd End
|
||||
|
||||
add_verb(src, /mob/living/proc/ventcrawl)
|
||||
add_verb(src, /mob/living/proc/hide)
|
||||
@@ -220,10 +215,9 @@
|
||||
emote_hear = list("squeeks","squeaks","squiks")
|
||||
emote_see = list("runs in a circle", "shakes", "scritches at something")
|
||||
|
||||
// CHOMPAdd - Verb for mice colour changing
|
||||
/mob/living/simple_mob/animal/passive/mouse/verb/set_mouse_colour()
|
||||
set name = "Set Mouse Colour"
|
||||
set category = "Abilities.Mouse" //CHOMPEdit
|
||||
set category = "Abilities.Mouse"
|
||||
set desc = "Set the colour of your mouse."
|
||||
var/new_mouse_colour = tgui_input_list(usr, "Set Mouse Colour", "Pick a colour", list("brown","gray","white","black"))
|
||||
if(!new_mouse_colour) return
|
||||
@@ -235,8 +229,7 @@
|
||||
desc = "A small [new_mouse_colour] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
|
||||
holder_type = text2path("/obj/item/holder/mouse/[new_mouse_colour]")
|
||||
to_chat(src, span_notice("You are now a [new_mouse_colour] mouse!"))
|
||||
remove_verb(src,/mob/living/simple_mob/animal/passive/mouse/verb/set_mouse_colour) //CHOMPEdit TGPanel
|
||||
// CHOMPAdd End
|
||||
remove_verb(src,/mob/living/simple_mob/animal/passive/mouse/verb/set_mouse_colour)
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/white/virology
|
||||
name = "Fleming"
|
||||
|
||||
@@ -17,14 +17,13 @@
|
||||
else
|
||||
bigger = new /mob/living/simple_mob/vore/aggressive/chungus(get_turf(src))
|
||||
|
||||
if(istype(loc,/obj/belly)){
|
||||
if(istype(loc,/obj/belly))
|
||||
var/obj/belly/B = loc
|
||||
B.owner.visible_message(span_warning("<b>Something grows inside [B.owner]'s [lowertext(B.name)]!</b>"))
|
||||
B.owner.visible_message(span_boldwarning("Something grows inside [B.owner]'s [lowertext(B.name)]!"))
|
||||
to_chat(B.owner, span_warning("\The [src] suddenly evolves inside your [lowertext(B.name)]!"))
|
||||
B.release_specific_contents(src, TRUE)
|
||||
B.nom_mob(bigger, null)
|
||||
qdel(src)
|
||||
}else{
|
||||
else
|
||||
visible_message(span_warning("\The [src] suddenly evolves!"))
|
||||
qdel(src)
|
||||
}
|
||||
|
||||
@@ -59,10 +59,40 @@
|
||||
/mob/living/simple_mob/animal/passive/mouse/white/apple/Initialize(mapload, keep_parent_data)
|
||||
. = ..(mapload, TRUE)
|
||||
|
||||
|
||||
/obj/item/holder/mouse/attack_self(mob/living/carbon/user)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
for(var/L in contents)
|
||||
if(isanimal(L))
|
||||
var/mob/living/simple_mob/S = L
|
||||
user.visible_message(span_notice("[user] [S.response_help] \the [S]."))
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/mining
|
||||
body_color = "brown"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_state = "mouse_miner"
|
||||
item_state = "mouse_miner"
|
||||
icon_living = "mouse_miner"
|
||||
name = "Cooper"
|
||||
desc = "A lonely miner's best friend."
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/mining/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
add_verb(src,/mob/living/proc/ventcrawl)
|
||||
add_verb(src,/mob/living/proc/hide)
|
||||
icon_state = "mouse_miner"
|
||||
item_state = "mouse_miner"
|
||||
icon_living = "mouse_miner"
|
||||
icon_dead = "mouse_miner_dead"
|
||||
icon_rest = "mouse_miner_sleep"
|
||||
desc = "A lonely miner's best friend."
|
||||
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/mining/splat()
|
||||
src.health = 0
|
||||
src.set_stat(DEAD)
|
||||
src.icon_dead = "mouse_miner_splat"
|
||||
src.icon_state = "mouse_miner_splat"
|
||||
layer = MOB_LAYER
|
||||
if(client)
|
||||
client.time_died_as_mouse = world.time
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
name = "Bockscar"
|
||||
real_name = "Bockscar"
|
||||
|
||||
/mob/living/simple_mob/animal/passive/dog/corgi/puppy/wiggle //yw addition
|
||||
/mob/living/simple_mob/animal/passive/dog/corgi/puppy/wiggle
|
||||
name = "Mister Wiggles"
|
||||
real_name = "Mister Wiggles"
|
||||
desc = "An emotional support corgi! He gets along with everyone, even Runtime."
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
name = "crystal-feather duck"
|
||||
desc = "A glittering flightless bird."
|
||||
tt_desc = "S Anatidae vitriae"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/crystalduck)
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/crystalduck) // CHOMPEnable
|
||||
|
||||
faction = FACTION_DUCK
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
maxHealth = 65
|
||||
health = 65
|
||||
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
|
||||
minbodytemp = 175
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
var/energy = 100
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
say_list_type = /datum/say_list/hare
|
||||
|
||||
can_be_drop_prey = TRUE //CHOMP Add
|
||||
can_be_drop_prey = TRUE
|
||||
|
||||
/datum/say_list/hare
|
||||
speak = list("Snrf...","Crk!")
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
name = "hooligan crab"
|
||||
desc = "A large, hard-shelled crustacean. This one is mostly grey. \
|
||||
You probably shouldn't mess with it."
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/hooligan_crab)
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/hooligan_crab) // CHOMPEnable
|
||||
|
||||
icon_state = "sif_crab"
|
||||
icon_living = "sif_crab"
|
||||
@@ -89,7 +89,6 @@
|
||||
|
||||
var/weaken_amount = 2 // Be careful with this number. High values will equal a permastun.
|
||||
|
||||
|
||||
// Stuns the thing that got hit briefly.
|
||||
/mob/living/simple_mob/animal/sif/hooligan_crab/apply_melee_effects(atom/A)
|
||||
if(isliving(A))
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
|
||||
minbodytemp = 175
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
status_flags = CANPUSH
|
||||
pass_flags = PASSTABLE
|
||||
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
|
||||
minbodytemp = 175
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
|
||||
minbodytemp = 175
|
||||
movement_cooldown = -1
|
||||
heat_resist = -0.50
|
||||
cold_resist = 0.75
|
||||
@@ -56,7 +56,6 @@
|
||||
say_list_type = /datum/say_list/savik
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/savik
|
||||
|
||||
|
||||
/datum/say_list/savik
|
||||
speak = list("Hruuugh!","Hrunnph")
|
||||
emote_see = list("paws the ground","shakes its mane","stomps")
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
heat_resist = -0.50
|
||||
cold_resist = 0.75
|
||||
movement_cooldown = -1
|
||||
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
|
||||
minbodytemp = 175
|
||||
melee_damage_lower = 6
|
||||
melee_damage_upper = 14
|
||||
base_attack_cooldown = 1 SECOND
|
||||
@@ -59,7 +59,6 @@
|
||||
|
||||
say_list_type = /datum/say_list/shantak
|
||||
|
||||
|
||||
/datum/say_list/shantak
|
||||
speak = list("Shuhn.","Shrunnph?","Shunpf.")
|
||||
emote_see = list("scratches the ground", "shakes out its mane", "clinks gently as it moves")
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
/obj/item/reagent_containers/food/snacks/meat = 10
|
||||
)
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
say_list_type = /datum/say_list/siffet
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/siffet
|
||||
|
||||
|
||||
/datum/say_list/siffet
|
||||
speak = list("Yap!", "Heh!", "Huff.")
|
||||
emote_see = list("sniffs its surroundings","flicks its ears", "scratches the ground")
|
||||
@@ -58,10 +57,8 @@
|
||||
|
||||
/mob/living/simple_mob/animal/sif/siffet/IIsAlly(mob/living/L)
|
||||
. = ..()
|
||||
//CHOMPAdd START: Compatibility with structures
|
||||
if(!. && !istype(L, /mob/living))
|
||||
return TRUE
|
||||
else
|
||||
if(!. && L.mob_size > 10) //Attacks things it considers small enough to take on, otherwise only attacks if attacked.
|
||||
return TRUE
|
||||
//CHOMPAdd END
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/xenomeat
|
||||
meat_amount = 5
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/mob/living/simple_mob/animal/space/alien/drone
|
||||
name = "alien drone"
|
||||
|
||||
@@ -1,194 +0,0 @@
|
||||
/mob/living/simple_mob/animal/passive/gaslamp/snow //Frostlamnp
|
||||
name = "Frostlit Lamp"
|
||||
desc = "Some sort of floaty alien with a surprisingly warm glow. This creature is looks like an evolutionary offshute of the Gaslamp family."
|
||||
tt_desc = "Semaeostomeae virginus"
|
||||
icon = 'icons/mob/cryogaia32x64.dmi'
|
||||
icon_state = "gaslamp"
|
||||
icon_living = "gaslamp"
|
||||
icon_dead = "gaslamp-dead"
|
||||
|
||||
faction = "virgo3b"
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
movement_cooldown = 12
|
||||
|
||||
say_list_type = /datum/say_list/gaslamp
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/gaslamp
|
||||
|
||||
// speed = 2 Virgo coders making my life hell. This conflicts with their new system
|
||||
|
||||
melee_damage_lower = 5 // Because fuck anyone who hurts this sweet, innocent creature. CHOMPS KSC 8/12/20 "I don't care if they are sweet, 30 damage a wrong way to balance cuteness"
|
||||
melee_damage_upper = 10
|
||||
attacktext = list("thrashed")
|
||||
friendly = "caressed"
|
||||
|
||||
response_help = "brushes" // If clicked on help intent
|
||||
response_disarm = "pushes" // If clicked on disarm intent
|
||||
response_harm = "swats" // If clicked on harm intent
|
||||
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 350
|
||||
|
||||
min_oxy = 1 //Needs Oxy to survive on cryogaia
|
||||
max_oxy = 0 // Hopefully no Max oxy
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
//Code for chaplains pet.
|
||||
/mob/living/simple_mob/clockwork
|
||||
name = "Clockwork Marauder"
|
||||
desc = "The stalwart apparition of a clockwork flame guardian. It's eternal flame glows a firey-red."
|
||||
tt_desc = "Aeterna flamma armis"
|
||||
icon = 'icons/mob/clockwork_mobs.dmi'
|
||||
icon_state = "clockwork_marauder"
|
||||
item_state = "clockwork_marauder"
|
||||
icon_living = "clockwork_marauder"
|
||||
icon_dead = "fallen_armor"
|
||||
icon_rest = "clockwork_marauder"
|
||||
|
||||
movement_cooldown = 0.5 SECONDS
|
||||
|
||||
see_in_dark = 6 // Not sure if this actually works.
|
||||
|
||||
|
||||
response_help = "pats"
|
||||
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
|
||||
|
||||
has_langs = list("Occursus")
|
||||
/* speak_chance = 1
|
||||
speak = list("Heretics!","Burn them!","Protect believers!","Hail Helios")
|
||||
speak_emote = list("crackles", "burns")
|
||||
emote_hear = list("crackles","burns")
|
||||
emote_see = list("twists their sword", "adjusts their shield")
|
||||
say_maybe_target = list("Who?","Strange.")
|
||||
say_got_target = list("Purge!","Cleanse!","Burn!") */
|
||||
|
||||
meat_amount = 0
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/meat
|
||||
|
||||
var/turns_since_scan = 0
|
||||
var/mob/flee_target
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
|
||||
/mob/living/simple_mob/clockwork/handle_special()
|
||||
if(!stat && prob(2)) // spooky
|
||||
var/mob/observer/dead/spook = locate() in range(src, 5)
|
||||
if(spook)
|
||||
var/turf/T = get_turf(spook)
|
||||
var/list/visible = list()
|
||||
for(var/obj/O in T.contents)
|
||||
if(!O.invisibility && O.name)
|
||||
visible += O
|
||||
if(visible.len)
|
||||
var/atom/A = pick(visible)
|
||||
visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].")
|
||||
|
||||
|
||||
|
||||
//Basic friend AI
|
||||
/*/mob/living/simple_animal/clockwork/fluff
|
||||
var/mob/living/carbon/human/friend
|
||||
var/befriend_job = null
|
||||
|
||||
/mob/living/simple_animal/clockwork/fluff/Life()
|
||||
. = ..()
|
||||
if(!. || ai_inactive || !friend) return
|
||||
|
||||
var/friend_dist = get_dist(src,friend)
|
||||
|
||||
if (friend_dist <= 4)
|
||||
if(stance == STANCE_IDLE)
|
||||
if(set_follow(friend))
|
||||
handle_stance(STANCE_FOLLOW)
|
||||
|
||||
if (friend_dist <= 1)
|
||||
if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit)
|
||||
if (prob((friend.stat < DEAD)? 50 : 15))
|
||||
var/verb = pick("meows", "mews", "mrowls")
|
||||
audible_emote(pick("[verb] in distress.", "[verb] anxiously."))
|
||||
else
|
||||
if (prob(5))
|
||||
visible_emote(pick("nuzzles [friend].",
|
||||
"brushes against [friend].",
|
||||
"rubs against [friend].",
|
||||
"purrs."))
|
||||
else if (friend.health <= 50)
|
||||
if (prob(10))
|
||||
var/verb = pick("meows", "mews", "mrowls")
|
||||
audible_emote("[verb] anxiously.")
|
||||
|
||||
/mob/living/simple_animal/cat/fluff/verb/become_friends()
|
||||
set name = "Become Friends"
|
||||
set category = "Abilities.General" //CHOMPEdit
|
||||
set src in view(1)
|
||||
|
||||
if(!friend)
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(istype(H) && (!befriend_job || H.job == befriend_job))
|
||||
friend = usr
|
||||
. = 1
|
||||
else if(usr == friend)
|
||||
. = 1 //already friends, but show success anyways
|
||||
|
||||
if(.)
|
||||
set_dir(get_dir(src, friend))
|
||||
visible_emote(pick("nuzzles [friend].",
|
||||
"brushes against [friend].",
|
||||
"rubs against [friend].",
|
||||
"purrs."))
|
||||
else
|
||||
usr << span_notice("[src] ignores you.")
|
||||
return */
|
||||
|
||||
/mob/living/simple_mob/clockwork/fluff/Ignis
|
||||
name = "Ignis"
|
||||
desc = "The stalwart apparition of a clockwork flame guardian. This one appears to be to be have been somehow modified to be 'docile', it's living fire turned blue."
|
||||
// tt_desc = "Aeterna flamma armis" //Chaplains new pet!
|
||||
icon = 'icons/mob/clockwork_mobs.dmi'
|
||||
icon_state = "ignis"
|
||||
item_state = "ignis"
|
||||
// icon_living = "ignis"
|
||||
// icon_dead = "fallen_armor"
|
||||
// icon_rest = "ignis"
|
||||
// retaliate = 1 // In theory this will make Ignis fight back. Maybe. -RF
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/mining
|
||||
body_color = "brown"
|
||||
icon = 'icons/mob/animal_yw.dmi'
|
||||
icon_state = "mouse_miner"
|
||||
item_state = "mouse_miner"
|
||||
icon_living = "mouse_miner"
|
||||
name = "Cooper"
|
||||
desc = "A lonely miner's best friend."
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/mining/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
add_verb(src,/mob/living/proc/ventcrawl) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/proc/hide) //CHOMPEdit TGPanel
|
||||
icon_state = "mouse_miner"
|
||||
item_state = "mouse_miner"
|
||||
icon_living = "mouse_miner"
|
||||
icon_dead = "mouse_miner_dead"
|
||||
icon_rest = "mouse_miner_sleep"
|
||||
desc = "A lonely miner's best friend."
|
||||
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/mining/splat()
|
||||
src.health = 0
|
||||
src.set_stat(DEAD)
|
||||
src.icon_dead = "mouse_miner_splat"
|
||||
src.icon_state = "mouse_miner_splat"
|
||||
layer = MOB_LAYER
|
||||
if(client)
|
||||
client.time_died_as_mouse = world.time
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
var/scare_chance = 15
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/mob/living/simple_mob/animal/space/bats/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
say_list_type = /datum/say_list/bear
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
/datum/say_list/bear
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
density = FALSE
|
||||
|
||||
vore_active = TRUE
|
||||
vore_icons = 0 //CHOMPSTATION EDIT - Require new sprites
|
||||
vore_icons = 0
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
@@ -86,7 +86,7 @@
|
||||
var/static/list/carp_colors_rare = list(\
|
||||
"silver" = "#fdfbf3", \
|
||||
)
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/mob/living/simple_mob/animal/space/carp/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -148,9 +148,47 @@
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(prob(knockdown_chance))
|
||||
L.add_modifier(/datum/modifier/entangled, 4 SECONDS) //CHOMPedit, replacing weaken/slowdown with slow down
|
||||
L.add_modifier(/datum/modifier/entangled, 4 SECONDS) // replacing weaken/slowdown with slow down
|
||||
L.visible_message(span_danger("\The [src] knocks down \the [L]!"))
|
||||
|
||||
/mob/living/simple_mob/animal/space/carp/load_default_bellies()
|
||||
. = ..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "Stomach"
|
||||
B.desc = "The toothy jaws of the space carp gnash down around your body while its throat opens up to suck you inside. The vicious attack is too swift for you to stop it. You're dragged down its short esophagus, then dumped into its muscular digestive system. Your body curls tight in the cramped confines of its slimy stomach; pushing aside a caustic mixture of other unrecognizable detritus. You realize the soupy chime consists of past explorers who went missing long ago. If you can't push your way back up to freedom, your fate will be the same."
|
||||
B.mode_flags = DM_FLAG_THICKBELLY
|
||||
B.digest_brute = 0.5
|
||||
B.digest_burn = 0.5
|
||||
B.escapechance = 20
|
||||
B.belly_fullscreen = "anim_belly"
|
||||
B.belly_fullscreen_color = "#660021"
|
||||
B.belly_fullscreen_color2 = "#660021"
|
||||
B.fancy_vore = 1
|
||||
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"They say a space carp's belly can digest almost anything. You're going to find out first hand if you stay here for much longer.",
|
||||
"The gastric fluids sizzle ferociously as they ooze across your form.",
|
||||
"A possessive squeeze of the wrinkled walls forces you to scrunch against yourself, as if to say you're not even a bother. This powerful digestive system has processed far more hazardous prey than you.",
|
||||
"The rubbery flesh of the carp's stomach lining constantly pulverizes you from all sides.",
|
||||
"Slowly but surely, everything around you is digested. Organic or not, it's all nourishment to the carp.",
|
||||
"The carp's disgusting innards slowly mix you around with acid. As far as it's concerned, you're nothing but fish food now.",
|
||||
"The stomach walls of the fishy predator push against you from all sides, smushing you into the leftovers of the last adventurer to wind up here.",
|
||||
"The carp's belly gushes over you with slow, muscular compressions. Every passing second allows more acid to be rubbed against you."
|
||||
)
|
||||
|
||||
B.struggle_messages_inside = list(
|
||||
"You jab with all your strength to free yourself from the carp's putrid gut.",
|
||||
"The carp's belly bounces at your thrashing while the creature hunts its next meal.",
|
||||
"You push and pry at the stomach sphincter, trying to force your way out.",
|
||||
"You shove against the back of the carp's stomach for leverage as you try forcing your head up its throat.",
|
||||
"You try to wriggle yourself out of the carp's belly before it grinds you into chum.",
|
||||
"Your feisty squirming is rewarded with a tight CLENCH from all sides. The carp stubbornly reminds you that it has eaten far worse."
|
||||
)
|
||||
|
||||
B.struggle_messages_outside = list(
|
||||
"%pred's stomach lurches with movement beneath its underbelly scales. Someone is alive in there!"
|
||||
)
|
||||
|
||||
// Subtypes.
|
||||
|
||||
// Won't wander away.
|
||||
@@ -182,11 +220,11 @@
|
||||
/mob/living/simple_mob/animal/space/carp/large/huge
|
||||
name = "great white carp"
|
||||
desc = "A very rare breed of carp- and a very aggressive one."
|
||||
icon = 'icons/mob/vore64x64.dmi' //CHOMPSTATION EDIT
|
||||
icon = 'icons/mob/vore64x64.dmi'
|
||||
icon_dead = "megacarp_dead"
|
||||
icon_living = "megacarp"
|
||||
icon_state = "megacarp"
|
||||
vore_icons = SA_ICON_LIVING //CHOMPSTATION EDIT
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
maxHealth = 230
|
||||
health = 230
|
||||
@@ -207,11 +245,6 @@
|
||||
/mob/living/simple_mob/animal/space/carp/large/huge/vorny
|
||||
name = "great white carp"
|
||||
desc = "A very rare breed of carp- and a very hungry one."
|
||||
icon = 'icons/mob/vore64x64.dmi' //CHOMPSTATION EDIT
|
||||
icon_dead = "megacarp_dead"
|
||||
icon_living = "megacarp"
|
||||
icon_state = "megacarp"
|
||||
vore_icons = SA_ICON_LIVING //CHOMPSTATION ADDITION
|
||||
|
||||
maxHealth = 230
|
||||
health = 230
|
||||
@@ -236,7 +269,6 @@
|
||||
B.name = "stomach"
|
||||
B.desc = "You've been swallowed whole and alive by a massive white carp! The stomach around you is oppressively tight, squeezing and grinding wrinkled walls across your body, making it hard to make any movement at all. The chamber is flooded with fluids that completely overwhelm you."
|
||||
B.mode_flags = DM_FLAG_THICKBELLY
|
||||
//B.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change
|
||||
B.digest_brute = 2
|
||||
B.digest_burn = 2
|
||||
B.digest_oxy = 1
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
/mob/living/simple_animal/clockwork
|
||||
//Code for chaplains pet.
|
||||
/mob/living/simple_mob/clockwork
|
||||
name = "Clockwork Marauder"
|
||||
desc = "The stalwart apparition of a clockwork flame guardian. It's eternal flame glows a firey-red."
|
||||
tt_desc = "Aeterna flamma armis"
|
||||
intelligence_level = SA_ANIMAL
|
||||
icon = 'icons/mob/clockwork_mobs.dmi'
|
||||
icon_state = "clockwork_marauder"
|
||||
item_state = "clockwork_marauder"
|
||||
icon_living = "clockwork_marauder"
|
||||
icon_state = "clockwork_marauder_r"
|
||||
item_state = "clockwork_marauder_r"
|
||||
icon_living = "clockwork_marauder_r"
|
||||
icon_dead = "fallen_armor"
|
||||
icon_rest = "clockwork_marauder"
|
||||
icon_rest = "clockwork_marauder_r"
|
||||
|
||||
movement_cooldown = 0.5 SECONDS
|
||||
|
||||
see_in_dark = 6 // Not sure if this actually works.
|
||||
|
||||
investigates = 1
|
||||
specific_targets = 1 //Only targets with Found()
|
||||
run_at_them = 0 //DOMESTICATED
|
||||
view_range = 5
|
||||
harm_intent_damage = 10
|
||||
turns_per_move = 5
|
||||
see_in_dark = 6
|
||||
|
||||
response_help = "pats"
|
||||
response_disarm = "gently pushes aside"
|
||||
@@ -26,16 +23,14 @@
|
||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||
maxbodytemp = 323 //Above 50 Degrees Celcius
|
||||
|
||||
mob_size = MOB_SMALL
|
||||
|
||||
has_langs = list("Occursus")
|
||||
speak_chance = 1
|
||||
/* speak_chance = 1
|
||||
speak = list("Heretics!","Burn them!","Protect believers!","Hail Helios")
|
||||
speak_emote = list("crackles", "burns")
|
||||
emote_hear = list("crackles","burns")
|
||||
emote_see = list("twists their sword", "adjusts their shield")
|
||||
say_maybe_target = list("Who?","Strange.")
|
||||
say_got_target = list("Purge!","Cleanse!","Burn!")
|
||||
say_got_target = list("Purge!","Cleanse!","Burn!") */
|
||||
|
||||
meat_amount = 0
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/meat
|
||||
@@ -43,14 +38,13 @@
|
||||
var/turns_since_scan = 0
|
||||
var/mob/flee_target
|
||||
|
||||
/mob/living/simple_animal/clockwork/Life()
|
||||
. = ..()
|
||||
if(!.) return
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
if(prob(2)) //spooky
|
||||
var/mob/observer/dead/spook = locate() in range(src,5)
|
||||
/mob/living/simple_mob/clockwork/handle_special()
|
||||
if(!stat && prob(2)) // spooky
|
||||
var/mob/observer/dead/spook = locate() in range(src, 5)
|
||||
if(spook)
|
||||
var/turf/T = spook.loc
|
||||
var/turf/T = get_turf(spook)
|
||||
var/list/visible = list()
|
||||
for(var/obj/O in T.contents)
|
||||
if(!O.invisibility && O.name)
|
||||
@@ -59,31 +53,8 @@
|
||||
var/atom/A = pick(visible)
|
||||
visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].")
|
||||
|
||||
handle_flee_target()
|
||||
|
||||
|
||||
/mob/living/simple_animal/clockwork/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/clockwork/react_to_attack(var/atom/A)
|
||||
if(A == src) return
|
||||
flee_target = A
|
||||
turns_since_scan = 5
|
||||
|
||||
/mob/living/simple_animal/clockwork/ex_act()
|
||||
. = ..()
|
||||
react_to_attack(src.loc)
|
||||
|
||||
//Basic friend AI
|
||||
/*/mob/living/simple_animal/clockwork/fluff
|
||||
var/mob/living/carbon/human/friend
|
||||
@@ -108,9 +79,9 @@
|
||||
else
|
||||
if (prob(5))
|
||||
visible_emote(pick("nuzzles [friend].",
|
||||
"brushes against [friend].",
|
||||
"rubs against [friend].",
|
||||
"purrs."))
|
||||
"brushes against [friend].",
|
||||
"rubs against [friend].",
|
||||
"purrs."))
|
||||
else if (friend.health <= 50)
|
||||
if (prob(10))
|
||||
var/verb = pick("meows", "mews", "mrowls")
|
||||
@@ -118,7 +89,7 @@
|
||||
|
||||
/mob/living/simple_animal/cat/fluff/verb/become_friends()
|
||||
set name = "Become Friends"
|
||||
set category = "Abilities.General" //CHOMPEdit
|
||||
set category = "Abilities.General
|
||||
set src in view(1)
|
||||
|
||||
if(!friend)
|
||||
@@ -132,21 +103,21 @@
|
||||
if(.)
|
||||
set_dir(get_dir(src, friend))
|
||||
visible_emote(pick("nuzzles [friend].",
|
||||
"brushes against [friend].",
|
||||
"rubs against [friend].",
|
||||
"purrs."))
|
||||
"brushes against [friend].",
|
||||
"rubs against [friend].",
|
||||
"purrs."))
|
||||
else
|
||||
usr << span_notice("[src] ignores you.")
|
||||
return */
|
||||
|
||||
/mob/living/simple_animal/clockwork/fluff/Ignis
|
||||
/mob/living/simple_mob/clockwork/fluff/Ignis
|
||||
name = "Ignis"
|
||||
desc = "The stalwart apparition of a clockwork flame guardian. This one appears to be to be have been somehow modified to be 'docile', it's living fire turned blue."
|
||||
tt_desc = "Aeterna flamma armis" //Chaplains new pet!
|
||||
// tt_desc = "Aeterna flamma armis" //Chaplains new pet!
|
||||
icon = 'icons/mob/clockwork_mobs.dmi'
|
||||
icon_state = "ignis"
|
||||
item_state = "ignis"
|
||||
icon_living = "ignis"
|
||||
icon_dead = "fallen_armor"
|
||||
icon_rest = "ignis"
|
||||
retaliate = 1 // In theory this will make Ignis fight back. Maybe. -RF
|
||||
// icon_living = "ignis"
|
||||
// icon_dead = "fallen_armor"
|
||||
// icon_rest = "ignis"
|
||||
// retaliate = 1 // In theory this will make Ignis fight back. Maybe. -RF
|
||||
@@ -11,8 +11,10 @@ TODO: Make them light up and heat the air when exposed to oxygen.
|
||||
*/
|
||||
|
||||
/datum/category_item/catalogue/fauna/gaslamp //TODO: VIRGO_LORE_WRITING_WIP
|
||||
// CHOMPEdit Start
|
||||
name = "Frosted Gaslamp"
|
||||
desc = "A light floating medusola life form, not an endemic specimen to Sif but throughout illegal handling and DNA modification for the production of nitrogen, it is now found as an invasive specimen on sections around planet Sif."
|
||||
// CHOMPEdit End
|
||||
value = CATALOGUER_REWARD_TRIVIAL
|
||||
|
||||
/mob/living/simple_mob/animal/passive/gaslamp
|
||||
@@ -109,3 +111,41 @@ TODO: Make them light up and heat the air when exposed to oxygen.
|
||||
"Light occasionally filters down through the gaslamp’s various membranes, but it is becoming hard to notice, your eyelids feeling leaden, weighed down as the looming creature comes ever closer to claiming you!",
|
||||
"The gaslamp’s rhythmically undulating innards abruptly squish and massage down into your curled-up body, each squeeze bringing another brief increase to the heat already sinking deep into you... making it harder to tell where you end, and it begins!",
|
||||
"Every moment longer spent trapped within the gaslamp drains evermore energy out of you, squelching away your will to resist its possessive advances… and as its innards force submission into you, the swell you make visibly softens away!")
|
||||
|
||||
/mob/living/simple_mob/animal/passive/gaslamp/snow //Frostlamnp
|
||||
name = "Frostlit Lamp"
|
||||
desc = "Some sort of floaty alien with a surprisingly warm glow. This creature is looks like an evolutionary offshute of the Gaslamp family."
|
||||
tt_desc = "Semaeostomeae virginus"
|
||||
icon = 'icons/mob/vore32x64.dmi'
|
||||
icon_state = "gaslamp_snow"
|
||||
icon_living = "gaslamp_snow"
|
||||
icon_dead = "gaslamp_snow-dead"
|
||||
|
||||
faction = "virgo3b"
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
movement_cooldown = 12
|
||||
|
||||
say_list_type = /datum/say_list/gaslamp
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/gaslamp
|
||||
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 10
|
||||
attacktext = list("thrashed")
|
||||
friendly = "caressed"
|
||||
|
||||
response_help = "brushes" // If clicked on help intent
|
||||
response_disarm = "pushes" // If clicked on disarm intent
|
||||
response_harm = "swats" // If clicked on harm intent
|
||||
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 350
|
||||
|
||||
min_oxy = 1 //Needs Oxy to survive on cryogaia
|
||||
max_oxy = 0 // Hopefully no Max oxy
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/meat/chicken
|
||||
meat_amount = 3
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/datum/say_list/goose
|
||||
speak = list("HONK!")
|
||||
@@ -58,3 +58,27 @@
|
||||
icon_dead = "whitegoose_dead"
|
||||
name = "white goose"
|
||||
desc = "And just when you thought it was a lovely day..."
|
||||
|
||||
/mob/living/simple_mob/animal/space/goose/domesticated
|
||||
name = "domesticated goose"
|
||||
desc = "It's a domesticated goose. It still looks pretty angry."
|
||||
faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack
|
||||
|
||||
can_be_drop_prey = TRUE
|
||||
|
||||
/mob/living/simple_mob/animal/space/goose/domesticated/casino
|
||||
name = "Donella"
|
||||
desc = "It's a golden goose named Donella, she is a beloved treasure of the golden goose casino, nobody knows where she comes from."
|
||||
icon_state = "golden_goose"
|
||||
icon_living = "golden_goose"
|
||||
icon_dead = "golden_goose_dead"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
|
||||
faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack
|
||||
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
|
||||
harm_intent_damage = 10
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
/mob/living/simple_mob/animal/space/goose/domesticated
|
||||
name = "domesticated goose"
|
||||
desc = "It's a domesticated goose. It still looks pretty angry."
|
||||
faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack
|
||||
|
||||
can_be_drop_prey = TRUE //CHOMP Add
|
||||
|
||||
/mob/living/simple_mob/animal/space/goose/domesticated/casino
|
||||
name = "Donella"
|
||||
desc = "It's a golden goose named Donella, she is a beloved treasure of the golden goose casino, nobody knows where she comes from."
|
||||
icon_state = "golden_goose"
|
||||
icon_living = "golden_goose"
|
||||
icon_dead = "golden_goose_dead"
|
||||
icon = 'modular_chomp/icons/mob/animal_ch.dmi'
|
||||
|
||||
faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack
|
||||
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
|
||||
harm_intent_damage = 10
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
@@ -3,7 +3,7 @@
|
||||
real_name = "mouse"
|
||||
desc = "It's a small militarized rodent."
|
||||
tt_desc = "E Mus musculus"
|
||||
icon = 'modular_chomp/icons/mob/animal_ch.dmi'
|
||||
icon = 'icons/mob/mouse_army.dmi'
|
||||
icon_state = "mouse_gray"
|
||||
item_state = "mouse_gray"
|
||||
icon_living = "mouse_gray"
|
||||
@@ -63,16 +63,16 @@
|
||||
|
||||
var/rank //pyro, operative, ammo, stealth. more to come. Do not leave blank.
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
species_sounds = "Mouse"
|
||||
pain_emote_1p = list("squeak", "squik") // CHOMP Addition: Pain/etc sounds
|
||||
pain_emote_1p = list("squeaks", "squiks") // CHOMP Addition: Pain/etc sounds
|
||||
pain_emote_1p = list("squeak", "squik")
|
||||
pain_emote_1p = list("squeaks", "squiks")
|
||||
|
||||
/mob/living/simple_mob/animal/space/mouse_army/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
add_verb(src,/mob/living/proc/ventcrawl) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/proc/hide) //CHOMPEdit TGPanel
|
||||
add_verb(src,/mob/living/proc/ventcrawl)
|
||||
add_verb(src,/mob/living/proc/hide)
|
||||
|
||||
if(name == initial(name))
|
||||
name = "[name] ([rand(1, 1000)])"
|
||||
@@ -363,7 +363,7 @@
|
||||
name = "\improper Whisker Tank"
|
||||
desc = "A shockingly functional, miniaturized tank. Its inventor is unknown, but widely reviled."
|
||||
catalogue_data = list(/datum/category_item/catalogue/technology/mouse_tank)
|
||||
icon = 'modular_chomp/icons/mob/animal_ch.dmi'
|
||||
icon = 'icons/mob/mouse_army.dmi'
|
||||
icon_state = "whisker"
|
||||
wreckage = /obj/structure/loot_pile/mecha/mouse_tank
|
||||
faction = "mouse_army"
|
||||
@@ -69,7 +69,7 @@
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(prob(knockdown_chance))
|
||||
L.add_modifier(/datum/modifier/entangled, 4 SECONDS) //CHOMPedit, replacing weaken/slowdown with slow down
|
||||
L.add_modifier(/datum/modifier/entangled, 4 SECONDS) // replacing weaken/slowdown with slow down
|
||||
L.visible_message(span_danger("\The [src] buffets \the [L]!"))
|
||||
src.ai_holder.remove_target()
|
||||
L.visible_message(span_notice("\The [src] seems to lose interest in \the [L]..."))
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(prob(knockdown_chance))
|
||||
L.add_modifier(/datum/modifier/entangled, 4 SECONDS) //CHOMPedit, replacing weaken/slowdown with slow down
|
||||
L.add_modifier(/datum/modifier/entangled, 4 SECONDS) // replacing weaken/slowdown with slow down
|
||||
L.visible_message(span_danger("\The [src] knocks down \the [L]!"))
|
||||
|
||||
/mob/living/simple_mob/animal/space/shark/event
|
||||
|
||||
@@ -23,9 +23,10 @@
|
||||
tt_desc = "E Reptilia Serpentes"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/snake)
|
||||
|
||||
icon_state = "green"
|
||||
icon_living = "green"
|
||||
icon_dead = "green_dead"
|
||||
icon_state = "snek"
|
||||
icon_living = "snek"
|
||||
icon_dead = "snek_dead"
|
||||
icon_rest = "snek_rest"
|
||||
icon = 'icons/mob/snake_vr.dmi'
|
||||
|
||||
maxHealth = 15
|
||||
@@ -47,24 +48,11 @@
|
||||
say_list_type = /datum/say_list/snake
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive
|
||||
|
||||
// CHOMPEdit Start - New sprites & Added vore
|
||||
/*
|
||||
icon_state = "python"
|
||||
icon_living = "python"
|
||||
icon_dead = "python_dead"
|
||||
icon = 'icons/mob/snake_vr.dmi'
|
||||
*/
|
||||
icon_state = "snek"
|
||||
icon_living = "snek"
|
||||
icon_dead = "snek_dead"
|
||||
icon_rest = "snek_rest"
|
||||
icon = 'modular_chomp/icons/mob/animal_ch.dmi'
|
||||
// CHOMPEdit End
|
||||
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_default_mode = DM_DIGEST
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST // CHOMPEdit
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
vore_escape_chance = 20
|
||||
swallowTime = 50
|
||||
vore_bump_chance = 10
|
||||
@@ -120,7 +108,7 @@
|
||||
icon_state = "red"
|
||||
icon_living = "red"
|
||||
icon_dead = "red_dead"
|
||||
icon = 'icons/mob/snake_vr.dmi' // CHOMP Comment: Whenever the red snake sprites, this needs to be changed. I swear someone made sprites for this.
|
||||
icon = 'icons/mob/snake_vr.dmi'
|
||||
|
||||
/*
|
||||
* Python
|
||||
@@ -130,6 +118,11 @@
|
||||
desc = "A big, thick snake."
|
||||
tt_desc = "E Reptilia Pythonidae"
|
||||
|
||||
icon_state = "python"
|
||||
icon_living = "python"
|
||||
icon_dead = "python_dead"
|
||||
icon = 'icons/mob/snake_vr.dmi'
|
||||
|
||||
/*
|
||||
* NOODLE IS HERE! SQUEEEEEEEE~
|
||||
*/
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
var/maw_cooldown = 30 SECONDS
|
||||
var/open_maw = FALSE // Are we trying to eat things?
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
can_be_drop_prey = FALSE
|
||||
|
||||
/mob/living/simple_mob/animal/space/space_worm/head
|
||||
name = "space worm"
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
var/static/list/overlays_cache = list()
|
||||
var/do_seasons = TRUE
|
||||
picked_color = FALSE //CHOMPedit: removed "var/" since we already have this defined for all simple_mobs.
|
||||
picked_color = FALSE
|
||||
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
B.name = "stomach"
|
||||
B.digest_mode = DM_SELECT
|
||||
B.mode_flags = DM_FLAG_THICKBELLY
|
||||
// B.belly_fullscreen = "yet_another_tumby" //Chompedit - Belly Fullscreen change
|
||||
B.digest_brute = 1
|
||||
B.digest_burn = 1
|
||||
B.escapechance = 35
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user