mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 04:26:03 +01:00
Merge pull request #5644 from Jordie0608/beekeepermodewhen
Adds bee swarms and butterflies and diseases to create them
This commit is contained in:
@@ -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 << "<span class='notice'>Your feel anxious.</span>"
|
||||
if(3)
|
||||
if(prob(10))
|
||||
affected_mob << "<span class='notice'>Your stomach flutters.</span>"
|
||||
if(prob(5))
|
||||
affected_mob << "<span class='notice'>You feel panicky.</span>"
|
||||
if(prob(2))
|
||||
affected_mob << "<span class='danger'>You're overtaken with panic!</span>"
|
||||
affected_mob.confused += (rand(2,3))
|
||||
if(4)
|
||||
if(prob(10))
|
||||
affected_mob << "<span class='danger'>You feel butterflies in your stomach.</span>"
|
||||
if(prob(5))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] stumbles around in a panic.</span>", \
|
||||
"<span class='userdanger'>You have a panic attack!</span>")
|
||||
affected_mob.confused += (rand(6,8))
|
||||
affected_mob.jitteriness += (rand(6,8))
|
||||
if(prob(2))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up butterflies!</span>", \
|
||||
"<span class='userdanger'>You cough up butterflies!</span>")
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
return
|
||||
@@ -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 << "<span class='notice'>You taste honey in your mouth.</span>"
|
||||
if(3)
|
||||
//Should give the bee spit verb
|
||||
if(prob(10))
|
||||
affected_mob << "<span class='notice'>Your stomach rumbles.</span>"
|
||||
if(prob(2))
|
||||
affected_mob << "<span class='danger'>Your stomach stings painfully.</span>"
|
||||
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("<span class='danger'>[affected_mob] buzzes.</span>", \
|
||||
"<span class='userdanger'>Your stomach buzzes violently!</span>")
|
||||
if(prob(5))
|
||||
affected_mob << "<span class='danger'>You feel something moving in your throat.</span>"
|
||||
if(prob(1))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a swarm of bees!</span>", \
|
||||
"<span class='userdanger'>You cough up a swarm of bees!</span>")
|
||||
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
|
||||
return
|
||||
@@ -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
|
||||
|
||||
@@ -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 << "<span class='notice'>You struggle against the tight bonds! (This will take about [breakout_time] minutes.)</span>"
|
||||
visible_message("You see something struggling and writhing in the [src]!")
|
||||
if(do_after(user,(breakout_time*60*10)))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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--
|
||||
@@ -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..."
|
||||
|
||||
|
||||
@@ -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))
|
||||
@@ -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."
|
||||
@@ -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 << "<span class='danger'>You feel a tiny prick.</span>"
|
||||
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 << "<span class='danger'>You feel a tiny prick.</span>"
|
||||
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."
|
||||
|
||||
@@ -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)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 196 KiB After Width: | Height: | Size: 194 KiB |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user