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"