diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 384cfb5f29a..feadeece28f 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -10,6 +10,8 @@ GLOBAL_LIST_INIT(last_names, file2list("config/names/last.txt")) GLOBAL_LIST_INIT(clown_names, file2list("config/names/clown.txt")) GLOBAL_LIST_INIT(mime_names, file2list("config/names/mime.txt")) GLOBAL_LIST_INIT(golem_names, file2list("config/names/golem.txt")) +GLOBAL_LIST_INIT(megacarp_first_names, file2list("strings/names/megacarp1.txt")) +GLOBAL_LIST_INIT(megacarp_last_names, file2list("strings/names/megacarp2.txt")) GLOBAL_LIST_INIT(verbs, file2list("config/names/verbs.txt")) GLOBAL_LIST_INIT(nouns, file2list("config/names/nouns.txt")) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index ef0ddb2baf9..b071b3f4961 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -1,20 +1,25 @@ +#define REGENERATION_DELAY 60 // After taking damage, how long it takes for automatic regeneration to begin for megacarps (ty robustin!) + /mob/living/simple_animal/hostile/carp name = "space carp" desc = "A ferocious, fang-bearing creature that resembles a fish." icon = 'icons/mob/carp.dmi' - icon_state = "carp" + icon_state = "base" + icon_living = "base" + icon_dead = "base_dead" icon_gib = "carp_gib" speak_chance = 0 turns_per_move = 5 butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2) - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "hits" emote_taunt = list("gnashes") taunt_chance = 30 speed = 0 maxHealth = 25 health = 25 + harm_intent_damage = 8 obj_damage = 50 melee_damage_lower = 15 @@ -27,31 +32,68 @@ 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 - faction = list("carp") - flying = 1 + flying = TRUE pressure_resistance = 200 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE - var/carp_color = "carp" //holder for icon set - var/list/icon_sets = list("carp", "blue", "yellow", "grape", "rust", "teal", "purple") + var/random_color = TRUE //if the carp uses random coloring + var/rarechance = 1 //chance for rare color variant + + var/static/list/carp_colors = list(\ + "lightpurple" = "#c3b9f1", \ + "lightpink" = "#da77a8", \ + "green" = "#70ff25", \ + "grape" = "#df0afb", \ + "swamp" = "#e5e75a", \ + "turquoise" = "#04e1ed", \ + "brown" = "#ca805a", \ + "teal" = "#20e28e", \ + "lightblue" = "#4d88cc", \ + "rusty" = "#dd5f34", \ + "beige" = "#bbaeaf", \ + "yellow" = "#f3ca4a", \ + "blue" = "#09bae1", \ + "palegreen" = "#7ef099", \ + ) + var/static/list/carp_colors_rare = list(\ + "silver" = "#fdfbf3", \ + ) /mob/living/simple_animal/hostile/carp/Initialize(mapload) . = ..() - carp_randomify() + carp_randomify(rarechance) update_icons() -/mob/living/simple_animal/hostile/carp/proc/carp_randomify() - if(prob(1)) - carp_color = pick("white", "black") - else - carp_color = pick(icon_sets) - icon_state = "[carp_color]" - icon_living = "[carp_color]" - icon_dead = "[carp_color]_dead" +/mob/living/simple_animal/hostile/carp/proc/carp_randomify(rarechance) + if(random_color) + var/our_color + if(prob(rarechance)) + our_color = pick(carp_colors_rare) + add_atom_colour(carp_colors_rare[our_color], FIXED_COLOUR_PRIORITY) + else + our_color = pick(carp_colors) + add_atom_colour(carp_colors[our_color], FIXED_COLOUR_PRIORITY) + add_carp_overlay() -/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/movement_dir = 0) - return 1 //No drifting in space for space carp! //original comments do not steal +/mob/living/simple_animal/hostile/carp/proc/add_carp_overlay() + if(!random_color) + return + cut_overlays() + var/mutable_appearance/base_overlay = mutable_appearance(icon, "base_mouth") + base_overlay.appearance_flags = RESET_COLOR + add_overlay(base_overlay) + +/mob/living/simple_animal/hostile/carp/proc/add_dead_carp_overlay() + if(!random_color) + return + cut_overlays() + var/mutable_appearance/base_dead_overlay = mutable_appearance(icon, "base_dead_mouth") + base_dead_overlay.appearance_flags = RESET_COLOR + add_overlay(base_dead_overlay) + +/mob/living/simple_animal/hostile/carp/Process_Spacemove(movement_dir = 0) + return TRUE //No drifting in space for space carp! //original comments do not steal /mob/living/simple_animal/hostile/carp/AttackingTarget() . = ..() @@ -59,15 +101,34 @@ var/mob/living/carbon/human/H = target H.adjustStaminaLoss(8) +/mob/living/simple_animal/hostile/carp/death(gibbed) + . = ..() + cut_overlays() + if(!random_color || gibbed) + return + add_dead_carp_overlay() + +/mob/living/simple_animal/hostile/carp/revive() + ..() + regenerate_icons() + +/mob/living/simple_animal/hostile/carp/regenerate_icons() + cut_overlays() + if(!random_color) + return + if(stat != DEAD) + add_carp_overlay() + else + add_dead_carp_overlay() + ..() + /mob/living/simple_animal/hostile/carp/holocarp icon_state = "holocarp" icon_living = "holocarp" maxbodytemp = INFINITY gold_core_spawnable = CHEM_MOB_SPAWN_INVALID del_on_death = 1 - -/mob/living/simple_animal/hostile/carp/holocarp/carp_randomify() - return + random_color = FALSE /mob/living/simple_animal/hostile/carp/megacarp icon = 'icons/mob/alienqueen.dmi' @@ -77,13 +138,34 @@ icon_living = "megacarp" icon_dead = "megacarp_dead" icon_gib = "megacarp_gib" - maxHealth = 65 - health = 65 + maxHealth = 20 + health = 20 pixel_x = -16 mob_size = MOB_SIZE_LARGE + random_color = FALSE + obj_damage = 80 melee_damage_lower = 20 melee_damage_upper = 20 -/mob/living/simple_animal/hostile/carp/megacarp/carp_randomify() - return + var/regen_cooldown = 0 + +/mob/living/simple_animal/hostile/carp/megacarp/Initialize() + . = ..() + name = "[pick(GLOB.megacarp_first_names)] [pick(GLOB.megacarp_last_names)]" + melee_damage_lower += rand(2, 10) + melee_damage_upper += rand(10, 20) + maxHealth += rand(30, 60) + move_to_delay = rand(3, 7) + +/mob/living/simple_animal/hostile/carp/megacarp/adjustHealth(amount, updating_health = TRUE) + . = ..() + if(.) + regen_cooldown = world.time + REGENERATION_DELAY + +/mob/living/simple_animal/hostile/carp/megacarp/Life() + ..() + if(regen_cooldown < world.time) + heal_overall_damage(4) + +#undef REGENERATION_DELAY \ No newline at end of file diff --git a/icons/mob/carp.dmi b/icons/mob/carp.dmi index f5bb7f116b9..5b6138ee99a 100644 Binary files a/icons/mob/carp.dmi and b/icons/mob/carp.dmi differ diff --git a/strings/names/megacarp1.txt b/strings/names/megacarp1.txt new file mode 100644 index 00000000000..881cb7a80ba --- /dev/null +++ b/strings/names/megacarp1.txt @@ -0,0 +1,79 @@ +Legendary +Epic +Rare +Common +Elusive +Lackluster +Bloody +Strange +Unremarkable +Scarcely Lethal +Mildly Menacing +Truly Feared +Wicked +Nasty +Normal +Unique +Vintage +Genuine +Unusual +Haunted +Big +Small +The +Savage +Hungry +Sated +Despicable +Nice +Helpful +Rogue +Spotted +Deep Blue +Quick +Slow +Beloved +Aggressive +Angry +Bewildered +Clumsy +Defeated +Grumpy +Itchy +Scratchy +Lazy +Mysterious +Repulsive +Thoughtless +Broad +Chubby +Crooked +Curved +Deep +Flat +High +Hollow +Low +Narrow +Round +Shallow +Robust +Skinny +Square Nose +Steep Nose +Renegade +Ancient +Old +Fast +Brief +Short +Frustratingly Elusive +Curvy +Fitted +Forked +Rugged +Sinuous +Slimy +Sweeping +Twisted +Crooked \ No newline at end of file diff --git a/strings/names/megacarp2.txt b/strings/names/megacarp2.txt new file mode 100644 index 00000000000..f00ec8bb2ce --- /dev/null +++ b/strings/names/megacarp2.txt @@ -0,0 +1,54 @@ +Laser Shark +Hammerhead Shark +Wobbegong Shark +Smooth-Hound Shark +Thresher Shark +Sand Shark +Mackerel Shark +Sawshark +Angel Shark +Cat Shark +Space Shark +Cow Shark +Goblin Shark +Ghast Shark +Ghost Shark +Nightmare Shark +Sharkling +Sharknado +Megalodon +Minilodon +Dog Shark +Moby Dick +Flipper Shark +Space Kraken +Great White Shark +Asteroid Shark +Meteor Shark +Derelict Shark +Lava Shark +Whale Shark +Traitor Shark +Magishark +Chaos Shark +Incinerator Shark +Shredder Shark +Shawshark +Judicator Shark +Snapjaw Shark +Bloodhound Shark +Vermin Shark +Chomper Shark +Megalomaniac Shark +Frog Shark +Buffalo Shark +Lizard Shark +Pulse Shark +Baby Gargantuan Shark +Flying Shark +Spacetime Shark +Freon Shark +Plasma Shark +Guru Shark +Toxic Shark +Spider Shark