diff --git a/code/__DEFINES/~monkestation/virology.dm b/code/__DEFINES/~monkestation/virology.dm index 7b63db744b2..c648514eaaf 100644 --- a/code/__DEFINES/~monkestation/virology.dm +++ b/code/__DEFINES/~monkestation/virology.dm @@ -36,6 +36,7 @@ #define DISEASE_TRANSFORMATION "transformation" #define DISEASE_GONDOLA "gondola" #define DISEASE_GONDOLA_DIGITAL "digital_gondola" +#define DISEASE_CLOWNDOLA "clowndola" #define DISEASE_XENO "xeno" #define DISEASE_CORGI "corgi" #define DISEASE_SLIME "slime" diff --git a/code/game/objects/items/food/meatslab.dm b/code/game/objects/items/food/meatslab.dm index 1392be35591..111a7488dd1 100644 --- a/code/game/objects/items/food/meatslab.dm +++ b/code/game/objects/items/food/meatslab.dm @@ -360,6 +360,25 @@ /obj/item/food/meat/slab/gondola/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/gondola, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE, /datum/pollutant/food/fried_meat) //Add medium rare later maybe? +// Olympus Station Edit Start +/obj/item/food/meat/slab/clowndola + name = "clowndola meat" + desc = "According to NT, clowndola are a protected species that must be left alone." + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/clowndola_mutation_toxin = 5, + /datum/reagent/consumable/cooking_oil = 3 + ) + tastes = list("meat" = 4, "delirium" = 1) + foodtypes = RAW | MEAT | GORE + +/obj/item/food/meat/slab/clowndola/make_processable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/clowndola, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") + +/obj/item/food/meat/slab/clowndola/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/clowndola, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE, /datum/pollutant/food/fried_meat) //Add medium rare later maybe? +// Olympus Station Edit End + /obj/item/food/meat/slab/penguin name = "penguin meat" icon_state = "birdmeat" @@ -507,6 +526,10 @@ name = "gondola steak" tastes = list("meat" = 1, "tranquility" = 1) +/obj/item/food/meat/steak/clowndola + name = "clowndola steak" + tastes = list("meat" = 1, "delirium" = 1) + /obj/item/food/meat/steak/penguin name = "penguin steak" icon_state = "birdsteak" @@ -631,6 +654,15 @@ /obj/item/food/meat/rawcutlet/gondola/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/gondola, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE, /datum/pollutant/food/fried_meat) +// Olympus Station Edit Start +/obj/item/food/meat/rawcutlet/clowndola + name = "raw clowndola cutlet" + tastes = list("meat" = 1, "delirium" = 1) + +/obj/item/food/meat/rawcutlet/clowndola/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/clowndola, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE, /datum/pollutant/food/fried_meat) +// Olympus Station Edit End + /obj/item/food/meat/rawcutlet/penguin name = "raw penguin cutlet" tastes = list("beef" = 1, "cod fish" = 1) @@ -713,6 +745,12 @@ name = "gondola cutlet" tastes = list("meat" = 1, "tranquility" = 1) +// Olympus Station Edit Start +/obj/item/food/meat/cutlet/clowndola + name = "clowndola cutlet" + tastes = list("meat" = 1, "delirium" = 1) +// Olympus Station Edit End + /obj/item/food/meat/cutlet/penguin name = "penguin cutlet" tastes = list("beef" = 1, "cod fish" = 1) diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm index 80e89dd08d7..04051a10abb 100644 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ b/code/modules/mob/living/simple_animal/friendly/gondola.dm @@ -60,6 +60,28 @@ add_overlay(eyes_overlay) add_overlay(moustache_overlay) +// Olympus Station Edit Start +/mob/living/simple_animal/pet/gondola/attackby(obj/item/O, mob/user, params) + + if(istype(O, /obj/item/food/grown/banana)) + to_chat(user, span_notice("You feed [src] the banana. He starts to feel funny...")) + addtimer(CALLBACK(src, PROC_REF(transformToClowndola)), 5 SECONDS) + src.Disorient(6 SECONDS, 0, paralyze = 3 SECONDS, stack_status = FALSE) + qdel(O) + return + return ..() + +/mob/living/simple_animal/pet/gondola/proc/transformToClowndola() + playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) + visible_message(span_warning("[src] transforms into a Clowndola!")) + var/mob/living/simple_animal/hostile/retaliate/clowndola/new_clowndola = new(get_turf(src)) + if(name != "gondola") + new_clowndola.name = "[name] the Clowndola" + new_clowndola.Disorient(3 SECONDS, 0, paralyze = 3 SECONDS, stack_status = FALSE) + qdel(src) + +// Olympus Station Edit End + /mob/living/simple_animal/pet/gondola/can_speak(allow_mimes = FALSE) return FALSE // Gondolas are the silent walker. diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 8189dbd47b2..cd5d236a32b 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2513,6 +2513,21 @@ exposed_mob.infect_disease_predefined(disease_cat, TRUE, "[ROUND_TIME()] Gondola Reagent Infections [key_name(exposed_mob)]") //exposed_mob.ForceContractDisease(new gondola_disease, FALSE, TRUE) //TODO VIROLOGY SLIME TRANS +// Olympus Station Edit Start +/datum/reagent/clowndola_mutation_toxin + name = "Delirium" + description = "A highly mutative liquid of unknown origin." + color = "#ff9900" //RGB: 154, 103, 80 + taste_description = "inner chaos" + penetrates_skin = NONE + var/disease_cat = DISEASE_CLOWNDOLA + +/datum/reagent/clowndola_mutation_toxin/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0) + . = ..() + if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection)))) + exposed_mob.infect_disease_predefined(disease_cat, TRUE, "[ROUND_TIME()] Clowndola Reagent Infections [key_name(exposed_mob)]") + //exposed_mob.ForceContractDisease(new clowndola_disease, FALSE, TRUE) //TODO VIROLOGY SLIME TRANS +// Olympus Station Edit End /datum/reagent/spider_extract name = "Spider Extract" diff --git a/config/admins.txt b/config/admins.txt index f48ff5bc03c..8d874f70e73 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -4,6 +4,8 @@ #Ranks will match to those with the same name in admin_ranks.txt, if a match isn't found the user won't be adminned. #If SQL-based admin loading is enabled, admins listed here will always be loaded first and will override any duplicate entries in the database. +Kryyto = Game Master + Optimumtact = Host CitrusGender = Game Master NewSta = Game Master diff --git a/icons/mob/simple/gondolas.dmi b/icons/mob/simple/gondolas.dmi index c8540fbac0b..faacde4fe57 100644 Binary files a/icons/mob/simple/gondolas.dmi and b/icons/mob/simple/gondolas.dmi differ diff --git a/monkestation/code/modules/mob/living/simple_animal/hostile/retaliate/clowndola.dm b/monkestation/code/modules/mob/living/simple_animal/hostile/retaliate/clowndola.dm new file mode 100644 index 00000000000..212c98d3f59 --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/hostile/retaliate/clowndola.dm @@ -0,0 +1,85 @@ +/mob/living/simple_animal/hostile/retaliate/clowndola + name = "Clowndola" + real_name = "Clowndola" + desc = "Clowndola is the noisy walker. Having no hands he embodies the Taoist principle of honk (HonkMother) while his crazy eyes shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable." + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + icon_state = "clowndola" + icon_living = "clowndola" + //icon_dead = "clowndola_dead" + icon = 'icons/mob/simple/gondolas.dmi' + //Gondolas aren't affected by cold. + atmos_requirements = list("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 + maxbodytemp = 1500 + maxHealth = 100 + health = 100 + attack_sound = list('sound/items/airhorn2.ogg', 'sound/items/airhorn.ogg', 'sound/items/carhorn.ogg', 'sound/items/bikehorn.ogg') + speak_chance = 20 + turns_per_move = 1 + maxHealth = 80 + health = 80 + loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/food/meat/slab/clowndola = 1) + obj_damage = 0 + harm_intent_damage = 1 + melee_damage_lower = 1 + melee_damage_upper = 1 + attack_same = FALSE + attack_verb_continuous = "honks at" + attack_verb_simple = "honk" + faction = list(FACTION_GONDOLA) + environment_smash = ENVIRONMENT_SMASH_NONE + mouse_opacity = MOUSE_OPACITY_ICON + robust_searching = 1 + unique_name = 1 + speak_emote = list("honk!", "Honk?", "HONK HONK") + + rapid_melee = 4 + var/list/injection_reagents + + +/mob/living/simple_animal/hostile/retaliate/clowndola/AttackingTarget() + . = ..() + if(. && isliving(target)) + var/mob/living/T = target + if(T.reagents) + if(health <= maxHealth/2) + injection_reagents = list( + /datum/reagent/drug/happiness = 1, + /datum/reagent/consumable/superlaughter = 1, + /datum/reagent/consumable/banana = 1 + ) + else + injection_reagents = list( + /datum/reagent/drug/happiness = 1, + /datum/reagent/consumable/laughter = 1, + /datum/reagent/consumable/banana = 1 + ) + for(var/reagent in injection_reagents) + T.reagents.add_reagent(reagent, injection_reagents[reagent]) + + +/mob/living/simple_animal/hostile/retaliate/clowndola/examine(mob/user) + . = ..() + if(health >= maxHealth) + . += "It looks healthy and has a crazy smile for no apparent reason." + else + . += "It looks like it's been roughed up." + +/mob/living/simple_animal/hostile/retaliate/clowndola/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/food/grown/banana/mime)) + src.Disorient(5 SECONDS, 0, paralyze = 5 SECONDS, stack_status = TRUE) + addtimer(CALLBACK(src, PROC_REF(mimebananaEaten)), 5 SECONDS) + qdel(O) + return + return ..() + +/mob/living/simple_animal/hostile/retaliate/clowndola/proc/mimebananaEaten() + playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) + visible_message(span_warning("[src] explodes!")) + new /obj/effect/gibspawner/generic(get_turf(src)) + death(src) diff --git a/monkestation/code/modules/virology/disease/premades/transformations.dm b/monkestation/code/modules/virology/disease/premades/transformations.dm index aa22e69619d..69a811ffb9f 100644 --- a/monkestation/code/modules/virology/disease/premades/transformations.dm +++ b/monkestation/code/modules/virology/disease/premades/transformations.dm @@ -3,13 +3,14 @@ form = "Gondola Cells" origin = "Gondola Toxins" category = DISEASE_GONDOLA + desc = "Consuming the flesh of a Gondola comes at a terrible price." symptoms = list( new /datum/symptom/transformation/gondola ) spread_flags = DISEASE_SPREAD_BLOOD robustness = 75 - + infectionchance = 0 infectionchance_base = 0 stage_variance = 0 @@ -21,6 +22,30 @@ new /datum/symptom/transformation/gondola/digital ) +/datum/disease/advanced/premade/clowndola + name = "Clowndola Transformation" + form = "Clowndola Cells" + origin = "Clowndola Toxins" + category = DISEASE_CLOWNDOLA + desc = "Consuming the flesh of a Clowndola comes at an enjoyable price." + + symptoms = list( + new /datum/symptom/transformation/clowndola + ) + spread_flags = DISEASE_SPREAD_BLOOD + robustness = 75 + + cure_text = "Laughter, ingested or injected." + cures = list(/datum/reagent/consumable/laughter) + cure_chance = 20 + stage_prob = 5 + agent = "Delirium" + + infectionchance = 0 + infectionchance_base = 0 + stage_variance = 0 + severity = DISEASE_SEVERITY_BIOHAZARD + /datum/disease/advanced/premade/xeno name = "Xenomorph Transformation" form = "Foreign Cells" @@ -32,7 +57,7 @@ ) spread_flags = DISEASE_SPREAD_BLOOD robustness = 75 - + infectionchance = 0 infectionchance_base = 0 stage_variance = 0 @@ -48,7 +73,7 @@ ) spread_flags = DISEASE_SPREAD_BLOOD robustness = 75 - + infectionchance = 0 infectionchance_base = 0 stage_variance = 0 @@ -64,7 +89,7 @@ ) spread_flags = DISEASE_SPREAD_BLOOD robustness = 75 - + infectionchance = 0 infectionchance_base = 0 stage_variance = 0 @@ -80,7 +105,7 @@ ) spread_flags = DISEASE_SPREAD_BLOOD robustness = 75 - + infectionchance = 0 infectionchance_base = 0 stage_variance = 0 @@ -96,7 +121,7 @@ ) spread_flags = DISEASE_SPREAD_BLOOD robustness = 75 - + infectionchance = 0 infectionchance_base = 0 stage_variance = 0 diff --git a/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm b/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm index ef13a61fc79..fd36cb9f277 100644 --- a/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm +++ b/monkestation/code/modules/virology/disease/symtoms/restricted/stage1.dm @@ -100,6 +100,11 @@ /datum/symptom/transformation/gondola/digital new_form = /mob/living/simple_animal/pet/gondola/virtual_domain +/datum/symptom/transformation/clowndola + name = "Clowndola Transformation" + max_chance = 50 + new_form = /mob/living/simple_animal/hostile/retaliate/clowndola + /datum/symptom/anxiety name = "Severe Anxiety" desc = "Causes the host to suffer from severe anxiety" diff --git a/tgstation.dme b/tgstation.dme index 592c8afc89b..6bb6b4b26b5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7137,6 +7137,7 @@ #include "monkestation\code\modules\mob\living\carbon\human\species_type\zombies.dm" #include "monkestation\code\modules\mob\living\silicon\death.dm" #include "monkestation\code\modules\mob\living\simple_animal\cluwne.dm" +#include "monkestation\code\modules\mob\living\simple_animal\hostile\retaliate\clowndola.dm" #include "monkestation\code\modules\mob\living\simple_animal\megafauna\wendigo.dm" #include "monkestation\code\modules\mob\living\simple_animal\pets\bees.dm" #include "monkestation\code\modules\mob\living\simple_animal\pets\honk_platinum.dm"