diff --git a/code/datums/diseases/anxiety.dm b/code/datums/diseases/anxiety.dm
new file mode 100644
index 00000000000..a108fcb711a
--- /dev/null
+++ b/code/datums/diseases/anxiety.dm
@@ -0,0 +1,40 @@
+/datum/disease/anxiety
+ name = "Severe Anxiety"
+ form = "Infection"
+ max_stages = 4
+ spread_text = "On contact"
+ spread_flags = CONTACT_GENERAL
+ cures = list("ethanol")
+ agent = "Excess Lepidopticides"
+ viable_mobtypes = list(/mob/living/carbon/human,/mob/living/carbon/monkey)
+ desc = "If left untreated subject will regurgitate butterflies."
+ severity = MEDIUM
+
+/datum/disease/anxiety/stage_act()
+ ..()
+ switch(stage)
+ if(2) //also changes say, see say.dm
+ if(prob(5))
+ affected_mob << "Your feel anxious."
+ if(3)
+ if(prob(10))
+ affected_mob << "Your stomach flutters."
+ if(prob(5))
+ affected_mob << "You feel panicky."
+ if(prob(2))
+ affected_mob << "You're overtaken with panic!"
+ affected_mob.confused += (rand(2,3))
+ if(4)
+ if(prob(10))
+ affected_mob << "You feel butterflies in your stomach."
+ if(prob(5))
+ affected_mob.visible_message("[affected_mob] stumbles around in a panic.", \
+ "You have a panic attack!")
+ affected_mob.confused += (rand(6,8))
+ affected_mob.jitteriness += (rand(6,8))
+ if(prob(2))
+ affected_mob.visible_message("[affected_mob] coughs up butterflies!", \
+ "You cough up butterflies!")
+ new /mob/living/simple_animal/butterfly(affected_mob.loc)
+ new /mob/living/simple_animal/butterfly(affected_mob.loc)
+ return
\ No newline at end of file
diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm
index ec863a441eb..54ae195ffec 100644
--- a/code/datums/diseases/beesease.dm
+++ b/code/datums/diseases/beesease.dm
@@ -1,31 +1,39 @@
-/*
/datum/disease/beesease
name = "Beesease"
- max_stages = 5
- spread = "Contact" //ie shot bees
- cure = "???"
- cure_id = "???"
- agent = "Bees"
- affected_species = list("Human","Monkey")
- curable = 0
+ form = "Infection"
+ max_stages = 4
+ spread_text = "On contact"
+ spread_flags = CONTACT_GENERAL
+ cures = list("sugar")
+ agent = "Apidae Infection"
+ viable_mobtypes = list(/mob/living/carbon/human,/mob/living/carbon/monkey)
+ desc = "If left untreated subject will regurgitate bees."
+ severity = DANGEROUS
/datum/disease/beesease/stage_act()
..()
switch(stage)
- if(1)
- if(prob(2))
- affected_mob << "\red You feel like something is moving inside of you"
if(2) //also changes say, see say.dm
if(prob(2))
- affected_mob << "\red You feel like something is moving inside of you"
- if(prob(2))
- affected_mob << "\red BZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
+ affected_mob << "You taste honey in your mouth."
if(3)
- //Should give the bee spit verb
+ if(prob(10))
+ affected_mob << "Your stomach rumbles."
+ if(prob(2))
+ affected_mob << "Your stomach stings painfully."
+ if(prob(20))
+ affected_mob.adjustToxLoss(2)
+ affected_mob.updatehealth()
if(4)
- //Plus bees now spit randomly
- if(5)
+ if(prob(10))
+ affected_mob.visible_message("[affected_mob] buzzes.", \
+ "Your stomach buzzes violently!")
+ if(prob(5))
+ affected_mob << "You feel something moving in your throat."
+ if(prob(1))
+ affected_mob.visible_message("[affected_mob] coughs up a swarm of bees!", \
+ "You cough up a swarm of bees!")
+ new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc)
+ //if(5)
//Plus if you die, you explode into bees
- return
-*/
-//Started working on it, but am too lazy to finish it today -- Urist
\ No newline at end of file
+ return
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/powers/spiders.dm b/code/game/gamemodes/changeling/powers/spiders.dm
index 693c38ee449..b081d4d2f79 100644
--- a/code/game/gamemodes/changeling/powers/spiders.dm
+++ b/code/game/gamemodes/changeling/powers/spiders.dm
@@ -10,7 +10,7 @@
/obj/effect/proc_holder/changeling/spiders/sting_action(var/mob/user)
for(var/i=0, i<2, i++)
var/obj/effect/spider/spiderling/S = new(user.loc)
- S.grow_as = /mob/living/simple_animal/hostile/giant_spider/hunter
+ S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
feedback_add_details("changeling_powers","SI")
return 1
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 75bb884316e..91491a79ac9 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -61,7 +61,7 @@
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0)
if(height==0) return 1
- if(istype(mover, /mob/living/simple_animal/hostile/giant_spider))
+ if(istype(mover, /mob/living/simple_animal/hostile/poison/giant_spider))
return 1
else if(istype(mover, /mob/living))
if(prob(50))
@@ -189,8 +189,8 @@
amount_grown += rand(0,2)
if(amount_grown >= 100)
if(!grow_as)
- grow_as = pick(typesof(/mob/living/simple_animal/hostile/giant_spider))
- var/mob/living/simple_animal/hostile/giant_spider/S = new grow_as(src.loc)
+ grow_as = pick(typesof(/mob/living/simple_animal/hostile/poison/giant_spider))
+ var/mob/living/simple_animal/hostile/poison/giant_spider/S = new grow_as(src.loc)
if(player_spiders)
var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET)
var/client/C = null
@@ -213,7 +213,7 @@
var/mob/living/user = usr
var/breakout_time = 2
user.changeNext_move(CLICK_CD_BREAKOUT)
- user.last_special = world.time + CLICK_CD_BREAKOUT
+ user.last_special = world.time + CLICK_CD_BREAKOUT
user << "You struggle against the tight bonds! (This will take about [breakout_time] minutes.)"
visible_message("You see something struggling and writhing in the [src]!")
if(do_after(user,(breakout_time*60*10)))
diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm
index 28587ed7942..1dc938b3b40 100644
--- a/code/modules/events/shuttle_loan.dm
+++ b/code/modules/events/shuttle_loan.dm
@@ -133,11 +133,11 @@
O.orderedby = "Spider Clan"
supply_shuttle.shoppinglist += O
- shuttle_spawns.Add(/mob/living/simple_animal/hostile/giant_spider)
- shuttle_spawns.Add(/mob/living/simple_animal/hostile/giant_spider)
- shuttle_spawns.Add(/mob/living/simple_animal/hostile/giant_spider/nurse)
+ shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider)
+ shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider)
+ shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider/nurse)
if(prob(50))
- shuttle_spawns.Add(/mob/living/simple_animal/hostile/giant_spider/hunter)
+ shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider/hunter)
var/turf/T = pick(empty_shuttle_turfs)
empty_shuttle_turfs.Remove(T)
diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm
index 8bfb56e49f8..c29a89c9802 100644
--- a/code/modules/events/spider_infestation.dm
+++ b/code/modules/events/spider_infestation.dm
@@ -29,6 +29,6 @@
var/obj/vent = pick(vents)
var/obj/effect/spider/spiderling/S = new(vent.loc)
if(prob(66))
- S.grow_as = /mob/living/simple_animal/hostile/giant_spider/nurse
+ S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/nurse
vents -= vent
spawncount--
\ No newline at end of file
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 54fb349d79d..34bb9efa0c3 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -396,7 +396,7 @@ obj/machinery/hydroponics/proc/mutatepest()
visible_message("The pests seem to behave oddly...")
for(var/i=0, i<3, i++)
var/obj/effect/spider/spiderling/S = new(src.loc)
- S.grow_as = /mob/living/simple_animal/hostile/giant_spider/hunter
+ S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
else
usr << "The pests seem to behave oddly, but quickly settle down..."
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
new file mode 100644
index 00000000000..8a3606c10a4
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -0,0 +1,23 @@
+/mob/living/simple_animal/butterfly
+ name = "butterfly"
+ desc = "A colorful butterfly, how'd it get up here?"
+ icon_state = "butterfly"
+ icon_living = "butterfly"
+ icon_dead = "butterfly_dead"
+ turns_per_move = 1
+ emote_see = list("flutters")
+ response_help = "shoos"
+ response_disarm = "brushes aside"
+ response_harm = "aquashes"
+ speak_chance = 0
+ maxHealth = 2
+ health = 2
+ harm_intent_damage = 1
+ friendly = "nudges"
+ pass_flags = PASSTABLE
+ ventcrawler = 2
+ mob_size = 0
+
+/mob/living/simple_animal/butterfly/New()
+ ..()
+ color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
new file mode 100644
index 00000000000..66707ccf069
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -0,0 +1,64 @@
+/mob/living/simple_animal/hostile/poison/bees
+ name = "space bee swarm"
+ desc = ""
+ icon_state = "bee_1"
+ icon_living = "bee"
+ icon_dead = ""
+ speak_emote = list("buzzes")
+ emote_hear = list("buzzes")
+ turns_per_move = 0
+ melee_damage_lower = 1
+ melee_damage_upper = 1
+ attacktext = "stings"
+ response_help = "shoos"
+ response_disarm = "swats away"
+ response_harm = "squashes"
+ stop_automated_movement_when_pulled = 0
+ maxHealth = 10
+ health = 10
+ faction = list("hostile")
+ move_to_delay = 0
+ environment_smash = 0
+ mouse_opacity = 2
+ pass_flags = PASSTABLE
+
+ //Spaceborn beings don't get hurt by space
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+/mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(var/movement_dir = 0)
+ return 1
+
+/mob/living/simple_animal/hostile/poison/bees/New()
+ ..()
+ update_bees()
+
+/mob/living/simple_animal/hostile/poison/bees/Die()
+ ..()
+ qdel(src)
+ return
+
+/mob/living/simple_animal/hostile/poison/bees/Life()
+ ..()
+ update_bees()
+
+/mob/living/simple_animal/hostile/poison/bees/proc/update_bees()
+ while(overlays.len != health-1) //how many bees do we have in the swarm?
+ var/N = rand(1, 4)
+ var/image/I = image(icon='icons/mob/animal.dmi',icon_state="bee_[N]", pixel_x = rand(-8, 8), pixel_y = rand(-8, 8))
+ if(overlays.len < health-1)
+ overlays.Add(I)
+ if(overlays.len > health-1)
+ overlays.Remove(I)
+ poison_per_bite = health * 0.5 //each bee is half a toxin reagent
+ if(health > 1)
+ desc = "A buzzy swarm of [health] poisonous space bees, renowned for their aggressiveness"
+ else
+ desc = "Although now lonely, this single space bee is still poisonous and very angry at you."
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index f4ffc2f8eae..42d05eb5d08 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -4,8 +4,24 @@
#define MOVING_TO_TARGET 3
#define SPINNING_COCOON 4
+/mob/living/simple_animal/hostile/poison
+ var/poison_per_bite = 5
+ var/poison_type = "toxin"
+
+/mob/living/simple_animal/hostile/poison/AttackingTarget()
+ ..()
+ if(isliving(target))
+ var/mob/living/L = target
+ if(L.reagents)
+ L.reagents.add_reagent("toxin", poison_per_bite)
+ if(prob(poison_per_bite))
+ L << "You feel a tiny prick."
+ L.reagents.add_reagent(poison_type, poison_per_bite)
+
+
+
//basic spider mob, these generally guard nests
-/mob/living/simple_animal/hostile/giant_spider
+/mob/living/simple_animal/hostile/poison/giant_spider
name = "giant spider"
desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes."
icon_state = "guard"
@@ -29,8 +45,6 @@
melee_damage_upper = 20
heat_damage_per_tick = 20
cold_damage_per_tick = 20
- var/poison_per_bite = 5
- var/poison_type = "toxin"
faction = list("spiders")
var/busy = 0
pass_flags = PASSTABLE
@@ -38,7 +52,7 @@
ventcrawler = 2
//nursemaids - these create webs and eggs
-/mob/living/simple_animal/hostile/giant_spider/nurse
+/mob/living/simple_animal/hostile/poison/giant_spider/nurse
desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes."
icon_state = "nurse"
icon_living = "nurse"
@@ -55,7 +69,7 @@
var/fed = 0
//hunters have the most poison and move the fastest, so they can find prey
-/mob/living/simple_animal/hostile/giant_spider/hunter
+/mob/living/simple_animal/hostile/poison/giant_spider/hunter
desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
icon_state = "hunter"
icon_living = "hunter"
@@ -67,17 +81,7 @@
poison_per_bite = 5
move_to_delay = 5
-/mob/living/simple_animal/hostile/giant_spider/AttackingTarget()
- ..()
- if(isliving(target))
- var/mob/living/L = target
- if(L.reagents)
- L.reagents.add_reagent("toxin", poison_per_bite)
- if(prob(poison_per_bite))
- L << "You feel a tiny prick."
- L.reagents.add_reagent(poison_type, 5)
-
-/mob/living/simple_animal/hostile/giant_spider/Life()
+/mob/living/simple_animal/hostile/poison/giant_spider/Life()
..()
if(!stat && !ckey)
if(stance == HOSTILE_STANCE_IDLE)
@@ -94,7 +98,7 @@
// Chops off each leg with a 50/50 chance of harvesting one, until finally calling
// default harvest action
-/mob/living/simple_animal/hostile/giant_spider/harvest()
+/mob/living/simple_animal/hostile/poison/giant_spider/harvest()
if(butcher_state > 0)
butcher_state--
icon_state = icon_dead + "[butcher_state]"
@@ -105,7 +109,7 @@
else
return ..()
-/mob/living/simple_animal/hostile/giant_spider/nurse/proc/GiveUp(var/C)
+/mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/GiveUp(var/C)
spawn(100)
if(busy == MOVING_TO_TARGET)
if(cocoon_target == C && get_dist(src,cocoon_target) > 1)
@@ -113,7 +117,7 @@
busy = 0
stop_automated_movement = 0
-/mob/living/simple_animal/hostile/giant_spider/nurse/Life()
+/mob/living/simple_animal/hostile/poison/giant_spider/nurse/Life()
..()
if(!stat && !ckey)
if(stance == HOSTILE_STANCE_IDLE)
@@ -122,7 +126,7 @@
if(!busy && prob(30))
//first, check for potential food nearby to cocoon
for(var/mob/living/C in can_see)
- if(C.stat && !istype(C,/mob/living/simple_animal/hostile/giant_spider))
+ if(C.stat && !istype(C,/mob/living/simple_animal/hostile/poison/giant_spider))
cocoon_target = C
busy = MOVING_TO_TARGET
Goto(C, move_to_delay)
@@ -161,7 +165,7 @@
busy = 0
stop_automated_movement = 0
-/mob/living/simple_animal/hostile/giant_spider/verb/Web()
+/mob/living/simple_animal/hostile/poison/giant_spider/verb/Web()
set name = "Lay Web"
set category = "Spider"
set desc = "Spread a sticky web to slow down prey."
@@ -179,7 +183,7 @@
stop_automated_movement = 0
-/mob/living/simple_animal/hostile/giant_spider/nurse/verb/Wrap()
+/mob/living/simple_animal/hostile/poison/giant_spider/nurse/verb/Wrap()
set name = "Wrap"
set category = "Spider"
set desc = "Wrap up prey to feast upon and objects for safe keeping."
@@ -219,7 +223,7 @@
M.loc = C
large_cocoon = 1
for(var/mob/living/L in C.loc)
- if(istype(L, /mob/living/simple_animal/hostile/giant_spider))
+ if(istype(L, /mob/living/simple_animal/hostile/poison/giant_spider))
continue
large_cocoon = 1
L.loc = C
@@ -235,7 +239,7 @@
busy = 0
stop_automated_movement = 0
-/mob/living/simple_animal/hostile/giant_spider/nurse/verb/LayEggs()
+/mob/living/simple_animal/hostile/poison/giant_spider/nurse/verb/LayEggs()
set name = "Lay Eggs"
set category = "Spider"
set desc = "Lay a clutch of eggs, but you must wrap a creature for feeding first."
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 55b9aa1147e..ee4e22936fa 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -186,8 +186,8 @@ proc/wabbajack(mob/living/M)
if("bat") new_mob = new /mob/living/simple_animal/hostile/retaliate/bat(M.loc)
if("goat") new_mob = new /mob/living/simple_animal/hostile/retaliate/goat(M.loc)
if("killertomato") new_mob = new /mob/living/simple_animal/hostile/killertomato(M.loc)
- if("spiderbase") new_mob = new /mob/living/simple_animal/hostile/giant_spider(M.loc)
- if("spiderhunter") new_mob = new /mob/living/simple_animal/hostile/giant_spider/hunter(M.loc)
+ if("spiderbase") new_mob = new /mob/living/simple_animal/hostile/poison/giant_spider(M.loc)
+ if("spiderhunter") new_mob = new /mob/living/simple_animal/hostile/poison/giant_spider/hunter(M.loc)
else
var/animal = pick("parrot","corgi","crab","pug","cat","mouse","chicken","cow","lizard","chick")
switch(animal)
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index af2d901cd31..2b363ca9647 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 8afefba2c46..2b47583327b 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -139,6 +139,7 @@
#include "code\datums\uplink_item.dm"
#include "code\datums\diseases\_disease.dm"
#include "code\datums\diseases\_MobProcs.dm"
+#include "code\datums\diseases\anxiety.dm"
#include "code\datums\diseases\appendicitis.dm"
#include "code\datums\diseases\beesease.dm"
#include "code\datums\diseases\brainrot.dm"
@@ -1116,6 +1117,7 @@
#include "code\modules\mob\living\simple_animal\parrot.dm"
#include "code\modules\mob\living\simple_animal\shade.dm"
#include "code\modules\mob\living\simple_animal\simple_animal.dm"
+#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm"
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
#include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
@@ -1127,6 +1129,7 @@
#include "code\modules\mob\living\simple_animal\friendly\slime.dm"
#include "code\modules\mob\living\simple_animal\hostile\alien.dm"
#include "code\modules\mob\living\simple_animal\hostile\bear.dm"
+#include "code\modules\mob\living\simple_animal\hostile\bees.dm"
#include "code\modules\mob\living\simple_animal\hostile\carp.dm"
#include "code\modules\mob\living\simple_animal\hostile\creature.dm"
#include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm"