diff --git a/GainStation13/code/mechanics/infestation.dm b/GainStation13/code/mechanics/infestation.dm new file mode 100644 index 00000000..be8a9a8a --- /dev/null +++ b/GainStation13/code/mechanics/infestation.dm @@ -0,0 +1,100 @@ + +/datum/round_event_control/dessert_infestation + name = "Dessert Infestation" + typepath = /datum/round_event/dessert_infestation + weight = 5 + max_occurrences = 2 + min_players = 8 + +/datum/round_event/dessert_infestation + announceWhen = 100 + var/static/list/dessert_station_areas_blacklist = typecacheof(/area/space, + /area/shuttle, + /area/mine, + /area/holodeck, + /area/ruin, + /area/hallway, + /area/hallway/primary, + /area/hallway/secondary, + /area/hallway/secondary/entry, + /area/engine/supermatter, + /area/engine/atmospherics_engine, + /area/engine/engineering/reactor_core, + /area/engine/engineering/reactor_control, + /area/ai_monitored/turret_protected, + /area/layenia/cloudlayer, + /area/asteroid/nearstation, + /area/science/server, + /area/science/explab, + /area/science/xenobiology, + /area/security/processing) + var/spawncount = 1 + fakeable = FALSE + +/datum/round_event/dessert_infestation/setup() + announceWhen = rand(announceWhen, announceWhen + 50) + spawncount = rand(4, 7) + +/datum/round_event/dessert_infestation/announce(fake) + priority_announce("Unidentified lifesigns detected aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg') + +/datum/round_event/dessert_infestation/start() + var/list/area/stationAreas = list() + var/list/area/eligible_areas = list() + for(var/area/A in world) // Get the areas in the Z level + if(A.z == SSmapping.station_start) + stationAreas += A + for(var/area/place in stationAreas) // first we check if it's a valid area + if(place.outdoors) + continue + if(place.areasize < 16) + continue + if(is_type_in_typecache(place, dessert_station_areas_blacklist)) + continue + eligible_areas += place + for(var/area/place in eligible_areas) // now we check if there are people in that area + var/numOfPeople + for(var/mob/living/carbon/H in place) + numOfPeople++ + break + if(numOfPeople > 0) + eligible_areas -= place + + var/validFound = FALSE + var/list/turf/validTurfs = list() + var/area/pickedArea + while(!validFound || !eligible_areas.len) + pickedArea = pick_n_take(eligible_areas) + var/list/turf/t = get_area_turfs(pickedArea, SSmapping.station_start) + for(var/turf/thisTurf in t) // now we check if it's a closed turf, cold turf or occupied turf and yeet it + if(isopenturf(thisTurf)) + var/turf/open/tempGet = thisTurf + if(tempGet.air.temperature <= T0C) + t -= thisTurf + continue + if(isclosedturf(thisTurf)) + t -= thisTurf + else + for(var/obj/O in thisTurf) + if(O.density && !(istype(O, /obj/structure/table))) + t -= thisTurf + break + if(t.len >= spawncount) //Is the number of available turfs equal or bigger than spawncount? + validFound = TRUE + validTurfs = t + + if(!eligible_areas.len) + message_admins("No eligible areas for spawning dessert mobs.") + return WAITING_FOR_SOMETHING + + notify_ghosts("A group of feeder mobs has spawned in [pickedArea]!", source=pickedArea, action=NOTIFY_ATTACK, flashwindow = FALSE) + while(spawncount > 0 && validTurfs.len) + spawncount-- + var/turf/pickedTurf = pick_n_take(validTurfs) + if(spawncount != 0) + var/spawn_type = /mob/living/simple_animal/hostile/feed/chocolate_slime + spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE) + else + var/spawn_type = /mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast + spawn_atom_to_turf(spawn_type, pickedTurf, 1, FALSE) + return SUCCESSFUL_SPAWN diff --git a/GainStation13/code/mobs/chocoslime.dm b/GainStation13/code/mobs/chocoslime.dm index 0be0657d..0fac4752 100644 --- a/GainStation13/code/mobs/chocoslime.dm +++ b/GainStation13/code/mobs/chocoslime.dm @@ -26,8 +26,8 @@ response_help = "pets" response_disarm = "shoos" response_harm = "hits" - maxHealth = 200 - health = 200 + maxHealth = 100 + health = 100 obj_damage = 0 melee_damage_lower = 0.001 melee_damage_upper = 0.001 @@ -52,13 +52,11 @@ /mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast name = "Creambeast" desc = "A strange mass of thick, creamy ice cream given some sense of instinct." - icon = 'GainStation13/icons/mob/candymonster.dmi' icon_state = "icecream_monster" icon_living = "icecream_monster" icon_dead = "icecream_monster_dead" icon_gib = "icecream_monster_dead" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - move_to_delay = 20 + move_to_delay = 10 projectiletype = /obj/item/projectile/energy/fattening/icecream projectilesound = 'sound/weapons/pierce.ogg' ranged = 1 @@ -69,11 +67,6 @@ maxHealth = 100 health = 100 obj_damage = 0 - melee_damage_lower = 0.001 - melee_damage_upper = 0.001 - speak_emote = list("schlorps") - attacktext = "stuffs itself into" - attack_sound = 'sound/items/eatfood.ogg' vision_range = 2 aggro_vision_range = 9 turns_per_move = 5 @@ -91,10 +84,9 @@ hitsound_wall = 'sound/weapons/tap.ogg' is_reflectable = FALSE light_range = 0 - ///How much fat is added to the target mob? var/food_per_feeding = 5 var/food_fed = /datum/reagent/consumable/nutriment - var/fullness_add = 10 + var/fullness_add = 30 /obj/item/projectile/energy/fattening/icecream/on_hit(atom/target, blocked) . = ..() diff --git a/GainStation13/icons/mob/modclothes/graymodular_bra - Copy.dmi b/GainStation13/icons/mob/modclothes/graymodular_bra - Copy.dmi deleted file mode 100644 index d0f4faf4..00000000 Binary files a/GainStation13/icons/mob/modclothes/graymodular_bra - Copy.dmi and /dev/null differ diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm index 06ff01bc..3552a524 100644 --- a/code/modules/events/shuttle_loan.dm +++ b/code/modules/events/shuttle_loan.dm @@ -1,17 +1,17 @@ -#define HIJACK_SYNDIE 1 -#define RUSKY_PARTY 2 -#define SPIDER_GIFT 3 -#define DEPARTMENT_RESUPPLY 4 -#define ANTIDOTE_NEEDED 5 -#define PIZZA_DELIVERY 6 -#define ITS_HIP_TO 7 -#define MY_GOD_JC 8 -#define SNACK_ATTACK 9 //GS13 - slime shuttle loan +#define SNACK_ATTACK 1 //GS13 - slime shuttle loan +#define HIJACK_SYNDIE 2 +#define RUSKY_PARTY 3 +#define SPIDER_GIFT 4 +#define DEPARTMENT_RESUPPLY 5 +#define ANTIDOTE_NEEDED 6 +#define PIZZA_DELIVERY 7 +#define ITS_HIP_TO 8 +#define MY_GOD_JC 9 /datum/round_event_control/shuttle_loan name = "Shuttle Loan" typepath = /datum/round_event/shuttle_loan - max_occurrences = 1 + max_occurrences = 4 earliest_start = 7 MINUTES /datum/round_event/shuttle_loan @@ -31,6 +31,9 @@ var/message = "Cargo: I just wanna tell you techs good luck, we are all counting on you." var/title = "CentCom Free Real Estate" switch(dispatch_type) + if(SNACK_ATTACK) //GS13 - basically just spawns some slimes and feeder mobs + message = "Cargo: Our science division took couple too many samples from one the local candy biohabitats. Would you care to dispose of the unneeded specimen?" + title = "CentCom Science Division" if(HIJACK_SYNDIE) message = "Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache." title = "CentCom Counter Intelligence" @@ -57,9 +60,6 @@ message = "Cargo: We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it." title = "CentCom Security Division" bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese - if(SNACK_ATTACK) //GS13 - basically just spawns some slimes and feeder mobs - message = "Cargo: Our science division took couple too many samples from one the local candy biohabitats. Would you care to dispose of the unneeded specimen?" - title = "CentCom Science Division" if(prob(50)) priority_announce(message, title) else @@ -77,6 +77,8 @@ SSshuttle.supply.setTimer(3000) switch(dispatch_type) + if(SNACK_ATTACK) + SSshuttle.centcom_message += "Snack attack en route." if(HIJACK_SYNDIE) SSshuttle.centcom_message += "Syndicate hijack team incoming." if(RUSKY_PARTY) @@ -93,8 +95,6 @@ SSshuttle.centcom_message += "Biohazard cleanup incoming." if(MY_GOD_JC) SSshuttle.centcom_message += "Live explosive ordnance incoming. Exercise extreme caution." - if(SNACK_ATTACK) - SSshuttle.centcom_message += "Snack attack en route." /datum/round_event/shuttle_loan/tick() if(dispatched) @@ -121,6 +121,19 @@ var/list/shuttle_spawns = list() switch(dispatch_type) + if(SNACK_ATTACK) //GS13 + shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime) + shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime) + shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast) + if(prob(50)) + shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast) + + shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/donut/choco) + shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/donut/choco) + shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/donut/choco) + shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/chocoorange) + shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/chocoorange) + shuttle_spawns.Add(/obj/item/paper/fluff/chocoslime_research) if(HIJACK_SYNDIE) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/emergency/specialops] pack.generate(pick_n_take(empty_shuttle_turfs)) @@ -239,20 +252,6 @@ else shuttle_spawns.Add(/obj/item/paper/fluff/cargo/bomb/allyourbase) - if(SNACK_ATTACK) //GS13 - shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime) - shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime) - shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast) - if(prob(50)) - shuttle_spawns.Add(/mob/living/simple_animal/hostile/feed/chocolate_slime/creambeast) - - shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/donut/choco) - shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/donut/choco) - shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/donut/choco) - shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/chocoorange) - shuttle_spawns.Add(/obj/item/reagent_containers/food/snacks/chocoorange) - shuttle_spawns.Add(/obj/item/paper/fluff/chocoslime_research) - var/false_positive = 0 while(shuttle_spawns.len && empty_shuttle_turfs.len) var/turf/T = pick_n_take(empty_shuttle_turfs) @@ -290,6 +289,7 @@ /obj/item/paper/fluff/cargo/bomb/allyourbase info = "Somebody set us up the bomb!" +#undef SNACK_ATTACK #undef HIJACK_SYNDIE #undef RUSKY_PARTY #undef SPIDER_GIFT @@ -298,4 +298,3 @@ #undef PIZZA_DELIVERY #undef ITS_HIP_TO #undef MY_GOD_JC -#undef SNACK_ATTACK diff --git a/tgstation.dme b/tgstation.dme index 750db68f..992ea06e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3092,6 +3092,7 @@ #include "GainStation13\code\machinery\feeding_tube.dm" #include "GainStation13\code\mechanics\fatness.dm" #include "GainStation13\code\mechanics\fattening_trap.dm" +#include "GainStation13\code\mechanics\infestation.dm" #include "GainStation13\code\mechanics\spells.dm" #include "GainStation13\code\mechanics\wand.dm" #include "GainStation13\code\mechanics\web_weaving.dm"