Merge pull request #5644 from Jordie0608/beekeepermodewhen

Adds bee swarms and butterflies and diseases to create them
This commit is contained in:
Cheridan
2014-11-13 17:04:29 -06:00
13 changed files with 199 additions and 57 deletions
+40
View File
@@ -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
+28 -20
View File
@@ -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
+4 -4
View File
@@ -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)))
+4 -4
View File
@@ -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)
+1 -1
View File
@@ -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--
+1 -1
View File
@@ -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."
+2 -2
View File
@@ -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

+3
View File
@@ -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"