From 5e720a6844d2dbe6f0983f6528688944859b0136 Mon Sep 17 00:00:00 2001 From: HatArchAzel Date: Mon, 18 Sep 2023 09:30:06 -0700 Subject: [PATCH] Modular simplemob synx redux (#6999) --- icons/effects/synx_labels_ch.dmi | Bin 0 -> 368 bytes .../mob/living/simple_animal/aliens/synx.dm | 1011 +++++++++++++++++ modular_chomp/icons/mob/synx_modular.dmi | Bin 0 -> 4170 bytes vorestation.dme | 2 +- 4 files changed, 1012 insertions(+), 1 deletion(-) create mode 100644 icons/effects/synx_labels_ch.dmi create mode 100644 modular_chomp/code/modules/mob/living/simple_animal/aliens/synx.dm create mode 100644 modular_chomp/icons/mob/synx_modular.dmi diff --git a/icons/effects/synx_labels_ch.dmi b/icons/effects/synx_labels_ch.dmi new file mode 100644 index 0000000000000000000000000000000000000000..acc3f8bf19fbc311000e94db8a00355b41dc6018 GIT binary patch literal 368 zcmV-$0gwKPP)Sad{Xb7OL8aCB*JZU6vyoKseCa&`Cg zQ*iP1ui*(4fOM(jEBqQ7igleJ-7oR_E;M-o5! zi(P%7UsC%Ed-|Y7m0;w5Fd;>xC#ES9syToMUIdcmv4Pf+TgPt8ar6Q8cs_#z1H{4r O0000 0) //sanity check, no healing the victim if somehow this is a negative value. + L.adjustFireLoss(damage_done) + return + else + to_chat(src,"Your stomach bounces off of the victim's armor!") + return + return //If stomach is distended, return here to perform no forcefeeding or poison injecton. + + if(isliving(A)) + var/mob/living/L = A + +/* if(prob(forcefeedchance) && !ckey)//Forcefeeding code //Only triggers if not player-controlled //This does not currently work + L.Weaken(2) + update_icon() + set_AI_busy(TRUE) + src.feed_self_to_grabbed(src,L) + update_icon() + set_AI_busy(FALSE) +*/ + if(L.reagents) //Seemingly broken. Would probably be really annoying anyways, so probably for the best that it doesn't work. -Azel + var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) + if(L.can_inject(src, null, target_zone)) + if(prob(poison_chance)) + to_chat(L, "You feel a strange substance on you.") + L.reagents.add_reagent(poison_type, poison_per_bite) + + + +/mob/living/simple_mob/animal/synx/hear_say(message,verb,language,fakename,isItalics,var/mob/living/speaker) + . = ..() + if(!message || !speaker) return + if (speaker == src) return + speaker = speaker.GetVoice() + speak += message + voices += speaker + if(voices.len>=memorysize) + voices -= (pick(voices))//making the list more dynamic + if(speak.len>=memorysize) + speak -= (pick(speak))//making the list more dynamic + if(resting) + resting = !resting + if(message=="Honk!") + bikehorn() + +/mob/living/simple_mob/animal/synx/ai/pet/clown/Life() + ..() + if(vore_fullness) + size_multiplier = 1+(0.5*vore_fullness) + update_icons() + if(!vore_fullness && size_multiplier != 1) + size_multiplier = 1 + update_icons() +/mob/living/simple_mob/animal/synx/Life() + ..() +//mob/living/simple_mob/animal/synx/ai/handle_idle_speaking() //Only ai-controlled synx will randomly speak + if(voices && prob(speak_chance/2)) + randomspeech() + +/mob/living/simple_mob/animal/synx/perform_the_nom(mob/living/user, mob/living/prey, mob/living/pred, obj/belly/belly, delay) //Synx can only eat people if their organs are on the inside. + if(stomach_distended) + to_chat(src,"You can't eat people without your stomach inside of you!") + return + else + ..() + +////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////// POWERS!!!! ///////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + +/mob/living/simple_mob/proc/contort() + set name = "contort" + set desc = "Allows to hide beneath tables or certain items. Toggled on or off." + set category = "Abilities" + + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + + if(status_flags & HIDING) + status_flags &= ~HIDING + reset_plane_and_layer() + to_chat(src,"You have stopped hiding.") + else + status_flags |= HIDING + layer = HIDING_LAYER //Just above cables with their 2.44 + plane = OBJ_PLANE + to_chat(src,"You are now hiding.") + + + update_icons() + +/mob/living/simple_mob/animal/synx/proc/disguise() + set name = "Toggle Form" + set desc = "Switch between amorphous and humanoid forms." + set category = "Abilities" + + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + + // If transform isn't true + if(stomach_distended) + to_chat(src,"You can't disguise with your stomach outside of your body!") + return + if(!transformed) + to_chat(src,"Now they see your true form.") + icon_living = transformed_state //Switch state to transformed state + movement_cooldown = 3 + else // If transformed is true. + to_chat(src,"You changed back into your disguise.") + icon_living = initial(icon_living) //Switch state to what it was originally defined. + movement_cooldown = 6 + + + transformed = !transformed + update_icons() + +/mob/living/simple_mob/animal/synx/proc/randomspeech() + set name = "speak" + set desc = "Take a sentence you heard and speak it." + set category = "Abilities" + if(speak && voices) + handle_mimic() + else + usr << "YOU NEED TO HEAR THINGS FIRST, try using Ventcrawl to eevesdrop on nerds." + +/mob/living/simple_mob/animal/synx/proc/handle_mimic() + name = pick(voices) + spawn(2) + src.say(pick(speak)) + spawn(5) + name = realname + +//lo- procs adjusted to mobs. + +/mob/living/simple_mob/animal/synx + var/next_sonar_ping = 0 + +/mob/living/simple_mob/animal/synx/proc/sonar_ping() + set name = "Listen In" + set desc = "Allows you to listen in to movement and noises around you." + set category = "Abilities" + + if(incapacitated()) + to_chat(src, "You need to recover before you can use this ability.") + return + if(world.time < next_sonar_ping) + to_chat(src, "You need another moment to focus.") + return + if(is_deaf() || is_below_sound_pressure(get_turf(src))) + to_chat(src, "You are for all intents and purposes currently deaf!") + return + next_sonar_ping += 10 SECONDS + var/heard_something = FALSE + to_chat(src, "You take a moment to listen in to your environment...") + for(var/mob/living/L in range(client.view, src)) + var/turf/T = get_turf(L) + if(!T || L == src || L.stat == DEAD || is_below_sound_pressure(T)) + continue + heard_something = TRUE + var/feedback = list() + feedback += "There are noises of movement " + var/direction = get_dir(src, L) + if(direction) + feedback += "towards the [dir2text(direction)], " + switch(get_dist(src, L) / client.view) + if(0 to 0.2) + feedback += "very close by." + if(0.2 to 0.4) + feedback += "close by." + if(0.4 to 0.6) + feedback += "some distance away." + if(0.6 to 0.8) + feedback += "further away." + else + feedback += "far away." + else // No need to check distance if they're standing right on-top of us + feedback += "right on top of you." + feedback += "" + to_chat(src,jointext(feedback,null)) + if(!heard_something) + to_chat(src, "You hear no movement but your own.") + + + + + +/mob/living/simple_mob/animal/synx/proc/distend_stomach() + set name = "Distend Stomach" + set desc = "Allows you to throw up your stomach, giving your attacks burn damage at the cost of your stomach contents going everywhere. Yuck." + set category = "Abilities" + + if(transformed) + to_chat(src,"Your limbs are in the way!") //Kind of a weak excuse but since you already can't transform when your stomach is out, this avoids situations calling a sprite that doesn't exist and lightens my workload on making and implementing them + return + + if(!stomach_distended && !transformed) //true if stomach distended is null, 0, or "" + stomach_distended = !stomach_distended //switch statement + to_chat (src, "You disgorge your stomach, spilling its contents!") + melee_damage_lower = 1 //Hopefully this will make all brute damage not apply while stomach is distended. I don't see a better way to do this. + melee_damage_upper = 1 + icon_living = stomach_distended_state + attack_armor_type = "bio" //apply_melee_effects should handle all burn damage code so this might not be necessary. + attacktext += distend_attacktext + attacktext -= initial_attacktext + + for(var/belly in src.vore_organs) //Spit out all contents because our insides are now outsides + var/obj/belly/B = belly + for(var/atom/movable/A in B) + playsound(src, 'sound/effects/splat.ogg', 50, 1) + B.release_specific_contents(A) + update_icons() + return + + if(stomach_distended) //If our stomach has been vomitted + stomach_distended = !stomach_distended + to_chat (src, "You swallow your insides!") + melee_damage_lower = SYNX_LOWER_DAMAGE //This is why I'm using a define + melee_damage_upper = SYNX_UPPER_DAMAGE + icon_living = initial(icon_living) + attack_armor_type = "melee" + attacktext += initial_attacktext + attacktext -= distend_attacktext + update_icons() + return + +/// +/// Icon generation stuff +/// + +/mob/living/simple_mob/animal/synx/update_icon() + update_fullness() + build_icons() + + + +/mob/living/simple_mob/animal/synx/proc/build_icons(var/random) + cut_overlays() + if(stat == DEAD) + icon_state = "synx_dead" + plane = MOB_LAYER + return + if(random) + var/list/bodycolors = list("#FFFFFF") + body = pick(body_styles) + overlay_colors["Body"] = pick(bodycolors) + horns = pick(horn_styles) + var/list/horncolors = list("#FFE100","#A75A35","#1C4DFF","#FF0000","#404C6D","#2F2F2F","#55CE21","#711BFF","#DEDEE0") + overlay_colors["Horns"] = pick(horncolors) + var/list/markingcolors = list("#2F2F2F") + markings = pick(marking_styles) + overlay_colors["Marks"] = pick(markingcolors) + var/list/eyecolors = list("#FFE100","#FF6A00","#1C4DFF","#FF0000","#3D5EBE","#FF006E","#55CE21","#711BFF","#939EFF") + eyes = pick(eye_styles) + overlay_colors["Eyes"] = pick(eyecolors) + + + var/image/I = image(icon, "synx_body[body][transformed? "-t" : null][stomach_distended? "-s" : null]") + I.color = overlay_colors["Body"] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = (status_flags & HIDING)? OBJ_PLANE : MOB_PLANE + I.layer = (status_flags & HIDING)? HIDING_LAYER : MOB_LAYER + add_overlay(I) + + I = image(icon, "synx_horns[horns][transformed? "-t" : null]") + I.color = overlay_colors["Horns"] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = (status_flags & HIDING)? OBJ_PLANE : MOB_PLANE + I.layer = (status_flags & HIDING)? HIDING_LAYER : MOB_LAYER + add_overlay(I) + + I = image(icon, "synx_markings[markings][transformed? "-t" : null]") + I.color = overlay_colors["Marks"] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = (status_flags & HIDING)? OBJ_PLANE : MOB_PLANE + I.layer = (status_flags & HIDING)? HIDING_LAYER : MOB_LAYER + add_overlay(I) + + I = image(icon, "synx_eyes[eyes][transformed? "-t" : null]") + I.color = overlay_colors["Eyes"] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = (status_flags & HIDING)? OBJ_PLANE : MOB_PLANE + I.layer = (status_flags & HIDING)? HIDING_LAYER : MOB_LAYER + add_overlay(I) + +/mob/living/simple_mob/animal/synx/proc/set_style() + set name = "Set Style" + set desc = "Customise your icons." + set category = "Abilities" + + var/list/options = list("Body","Horns","Marks","Eyes") + for(var/option in options) + LAZYSET(options, option, new /image('icons/effects/synx_labels_ch.dmi', option)) + var/choice = show_radial_menu(src, src, options, radius = 60) + if(!choice || QDELETED(src) || src.incapacitated()) + return FALSE + . = TRUE + switch(choice) + if("Body") + options = body_styles + for(var/option in options) + var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_body[option]", dir = 2) + LAZYSET(options, option, I) + choice = show_radial_menu(src, src, options, radius = 90) + if(!choice || QDELETED(src) || src.incapacitated()) + return 0 + var/new_color = input("Pick body color:","Body Color", overlay_colors["Body"]) as null|color + if(!new_color) + return 0 + body = choice + overlay_colors["Body"] = new_color + if("Horns") + options = horn_styles + for(var/option in options) + var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_horns[option]", dir = 2) + LAZYSET(options, option, I) + choice = show_radial_menu(src, src, options, radius = 90) + if(!choice || QDELETED(src) || src.incapacitated()) + return 0 + var/new_color = input("Pick horn color:","Horn Color", overlay_colors["Horns"]) as null|color + if(!new_color) + return 0 + horns = choice + overlay_colors["Horns"] = new_color + if("Marks") + options = marking_styles + for(var/option in options) + var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_markings[option]", dir = 2) + LAZYSET(options, option, I) + choice = show_radial_menu(src, src, options, radius = 90) + if(!choice || QDELETED(src) || src.incapacitated()) + return 0 + var/new_color = input("Pick marking color:","Marking Color", overlay_colors["Marks"]) as null|color + if(!new_color) + return 0 + markings = choice + overlay_colors["Marks"] = new_color + if("Eyes") + options = eye_styles + for(var/option in options) + var/image/I = new /image('modular_chomp/icons/mob/synx_modular.dmi', "synx_eyes[option]", dir = 2) + LAZYSET(options, option, I) + choice = show_radial_menu(src, src, options, radius = 90) + if(!choice || QDELETED(src) || src.incapacitated()) + return 0 + var/new_color = input("Pick eye color:","Eye Color", overlay_colors["Eyes"]) as null|color + if(!new_color) + return 0 + eyes = choice + overlay_colors["Eyes"] = new_color + if(.) + build_icons() + +//////////////////////////////////////// +////////////////PET VERSION///////////// +//////////////////////////////////////// +/mob/living/simple_mob/animal/synx/ai/pet + faction = "Cargonia" //Should not share a faction with those pesky non station synxes.//This is so newspaper has a failchance + name = "Bob" + desc = "A very regular pet." + tt_desc = "synxus pergulus" + glow_range = 4 + glow_toggle = 1 + player_msg = "You aren't supposed to be in this. Wrong mob." + +/mob/living/simple_mob/animal/synx/ai/pet/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.vore_verb = "swallow" + B.digest_burn = 1 + B.digest_brute = 0 + +/mob/living/simple_mob/animal/synx/ai/pet/holo/init_vore() + if(!voremob_loaded) + return + .=..() + var/obj/belly/B = vore_selected + B.vore_verb = "swallow" + B.digest_burn = 5 + B.digest_brute = 5 + +/mob/living/simple_mob/animal/synx/ai/pet + speak_chance = 2.0666 + +//HONKMOTHER Code. +/*/mob/living/simple_mob/animal/synx/proc/honk() + set name = "HONK" + set desc = "TAAA RAINBOW" + set category = "Abilities" + icon_state = "synx_pet_rainbow" + icon_living = "synx_pet_rainbow" + playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) +*/ +/mob/living/simple_mob/animal/synx/proc/bikehorn() + playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) + +//HOLOSEEDSPAWNCODE +/mob/living/simple_mob/animal/synx/ai/pet/holo/death() + ..() + visible_message("\The [src] fades away!") + var/location = get_turf(src) + new /obj/item/seeds/hardlightseed/typesx(location) + qdel(src) + +/mob/living/simple_mob/animal/synx/ai/pet/holo/gib() + visible_message("\The [src] fades away!") + var/location = get_turf(src) + new /obj/item/seeds/hardlightseed/typesx(location) + qdel(src) + +//////////////////////////////////////// +////////////////SYNX VARIATIONS///////// +//////////////////////////////////////// +//TODO: Figure out a way to properly implement these into the customization system. Not important rn as far as getting the system out goes, since none of them are actually in use, but these should probably be either commented out/removed or otherwise implemented into the system- their sprites don't play nice with it as things stand! +/mob/living/simple_mob/animal/synx/ai/pet/holo + poison_chance = 100 + poison_type = "fakesynxchem" //unlike synxchem this one heals! + name = "Hardlight synx" + desc = "A cold blooded, genderless, space eel.. or a hologram of one. Guess the current synx are undergoing re-training? Either way this one is probably infinitely more friendly.. and less deadly." + icon_state = "synx_hardlight_living" + icon_living = "synx_hardlight_living" + icon_dead = "synx_hardlight_dead" + icon_gib = null + alpha = 127 + speak = list("SX System Online") + faction = "neutral"//Can be safely bapped with newspaper. + melee_damage_lower = 0 //Holos do no damage + melee_damage_upper = 0 + meat_amount = 0 + meat_type = null + //Vore Section + vore_default_mode = DM_HEAL + vore_capacity = 2 + vore_digest_chance = 0 //Holos cannot digest + vore_pounce_chance = 40 //Shouldn't fight + vore_bump_chance = 0 //lowered bump chance + vore_escape_chance = 30 //Much higher escape chance.. it's a hologram. + swallowTime = 10 SECONDS //Much more time to run + +//Commenting out OC content as to fit with content policy while I'm at it-- it won't work with the modular system anyways currently. Sorry, Shark!! I might try to add in a back marking category at some point so Greed can be recreated here at least, though. -Azel +/*/mob/living/simple_mob/animal/synx/ai/pet/greed + name = "Greed" + desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. black, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has the name Greed burnt into its back, the burnt in name seems to be luminescent making it harder for it to blend into the dark." + //icon= //icon= would just set what DMI we are using, we already have our special one set. + icon_state = "synx_greed_living" + icon_living = "synx_greed_living" + icon_dead = "synx_greed_dead" + speak = list("Who is there?")//preset unique words Greed remembers, to be defined more + player_msg = "You Hunger." + health = 100//Slightly lower health due to being damaged permanently. + speak_chance = 5 + //Vore Section + vore_capacity = 4 //What a fat noodle. + vore_digest_chance = 1 //Multivore but lower digest chance + vore_pounce_chance = 90 //Fighting is effort, engulf them whole. + vore_bump_chance = 2 //lowered bump chance + vore_escape_chance = 5 //Multivore allows for people to shove eachother out so lower normal escape chance. + +/mob/living/simple_mob/animal/synx/ai/pet/greed/synth + +/* +▓███▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓███▓ + ▓▓ ▓▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓▓█ +▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓▓ +▓ █▓▓▓ █▓▓ █▓▓ █▓▓ █▓▓ █▓▓▓ +▓ █▓▓▓▓█ █▓▓ ▓█ █▓▓ ▓█ █▓▓█▓█ █▓▓▓ █▓▓▓ +▓ █▓▓▓ ▓█▓ █▓█▓█ █▓█▓█ ▓▓█ ▓█ █▓▓▓ +▓█ █▓▓▓ ▓▓▓ ▓▓▓ ▓▓ █▓▓▓ +▓▓ █▓▓ ▓ ▓ ▓ █▓▓▓ + ▓ █▓▓ ▓█ █▓▓ + ▓ ▓▓▓ ▓▓ █▓▓ + █\ ▓▓ ▓▓ ▓█ ▓ █▓▓ + ▓█\ ▓█ ▓█▓ ▓▓▓ █▓ █▓▓ + ▓▓▓█ ▓ ▓▓▓▓ ▓ ▓▓ ▓ █▓▓ + ▓█▓ ▓▓█▓▓ ▓ ▓▓ ▓▓▓ + ▓▓ █▓▓█ █▓ █▓▓ + ▓▓ ▓▓▓ ▓▓ █▓▓ + ▓ ▓▓▓ ▓ █▓▓ + ▓▓ █▓▓█ █▓ █▓▓▓ + ▓ █▓▓▓ ▓▓█ █▓█ ▓▓ █▓▓▓ + ▓ █▓▓▓▓▓ ▓▓█ ▓▓ ▓▓█▓ █▓▓▓ + ▓ █▓▓▓ ▓▓▓ ▓▓▓ █▓▓▓ + ▓ █▓▓▓ ▓▓▓ ▓▓▓ █▓▓▓ + ▓█▓██▓▓▓█▓█▓█▓▓▓█▓█▓█▓▓▓█▓█▓██▓▓▓ +*/ + icon_state = "synx_C_living" + icon_living = "synx_C_living" + icon_dead = "synx_C_dead" + //hostile = 1 + name = "SYN-KinC" + desc = "A robotic recreation of a an Alien parasite. The metal plates seem quite thick." + humanoid_hands = 1 + health = 200 //Metally + player_msg = "All systems nominal." + /////////////////////ARMOR + armor = list( + "melee" = 50, + "bullet" = 50, + "laser" = -50, + "energy" = -50, + "bomb" = 50, + "bio" = 100, + "rad" = 100) + ////////////////////////////MED INJECTOR + poison_type = "oxycodone" //OD effects, eye_blurry | Confuse + for slimes | stuttering + poison_chance = 77 //high but not guranteed. + poison_per_bite = 9 //OD for oxyc is 20 + //////////////////////////////////////////////FACTION + faction = "SYN" + + +/mob/living/simple_mob/animal/synx/ai/pet/greed/synth/New() + ..() + name = "SYN-KinC-([rand(100,999)])" + +/mob/living/simple_mob/animal/synx/ai/pet/greed/synth/goodboy + //hostile = 0 + faction = "neutral" + +/mob/living/simple_mob/animal/synx/ai/pet/diablo + //var/diablo_LIVING = "synx_diablo_living" + //var/diablo_DEAD = "synx_diablo_dead" + name = "diablo" + desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. grey, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has a small shock collar on it that reads 'diablo'." + icon_state = "synx_diablo_living" + icon_living = "synx_diablo_living" + icon_dead = "synx_diablo_dead" + speak = list( ) + //Vore Section + vore_capacity = 2 +*/ +/mob/living/simple_mob/animal/synx/ai/pet/clown + //hostile = 1 + poison_chance = 100 + poison_type = "clownsynxchem" //unlike synxchem this one HONKS + name = "Inflatable Clown Synx" + desc = "Honk!, made this here with all the fun on in the booth. At the gate outside, when they pull up, they get me loose. Yeah, Jump Out Clowns, that's Clown gang, hoppin' out tiny cars. This shit way too funny, when we pull up give them the honk hard!" + icon_state = "synx_pet_rainbow" + icon_living = "synx_pet_rainbow" + //icon_dead = "synx_hardlight_dead" + icon_gib = null + faction = "clown" + melee_damage_lower = 1 + melee_damage_upper = 1 + //environment_smash = 0 + //destroy_surroundings = 0 + //Vore Section + vore_default_mode = DM_HEAL + vore_capacity = 10 + vore_digest_chance = 0 + vore_pounce_chance = 1 //MAKE THEM HONK + vore_bump_chance = 0 //lowered bump chance + vore_escape_chance = 100 + +//////////////////////////////////////// +////////////////SYNX DEBUG////////////// +//////////////////////////////////////// +/mob/living/simple_mob/animal/synx/ai/pet/debug + name = "Syntox" + desc = "ERROR Connection to translation server could not be established!" + +/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/rename() + set name = "rename" + set desc = "Renames the synx" + set category = "DEBUG" + name = input(usr, "What would you like to change name to?", "Renaming", null) + +/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/redesc() + set name = "redesc" + set desc = "Redescribes the synx" + set category = "DEBUG" + desc = input(usr, "What would you like to change desc to?", "Redescribing", null) + +/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/resprite() + set name = "resprite" + set desc = "Resprite the synx" + set category = "DEBUG" + icon_state = input(usr, "What would you like to change icon_state to?", "Respriting", null) + +/mob/living/simple_mob/animal/synx/ai/pet/debug/New() + verbs |= /mob/living/simple_mob/animal/synx/ai/pet/debug/proc/rename + verbs |= /mob/living/simple_mob/animal/synx/ai/pet/debug/proc/resprite + verbs |= /mob/living/simple_mob/animal/synx/ai/pet/debug/proc/redesc + +//////////////////////////////////////// +////////////////SYNX SPAWNER//////////// +//////////////////////////////////////// +/obj/random/mob/synx + name = "This is synxes" + +/obj/random/mob/synx/item_to_spawn() +// return pick(prob(66);/mob/living/simple_mob/animal/synx/ai/pet/greed, +// prob(33);/mob/living/simple_mob/animal/synx/ai/pet/holo, // Commented out as it doesn't currently work with the modular sprite system. Will try and get this up and working before TOO long, hopefully. -Azel + return /*pick (prob(50);*//mob/living/simple_mob/animal/synx/ai///) //normal eel boyo. + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////NOT A SYNX///////but acts kinda like one///////// +//////////////////////////////////////////////////////////////////////////// +/* +Content relating to the SCP Foundation, including the SCP Foundation logo, is licensed under +Creative Commons Sharealike 3.0 and all concepts originate from http://www.scp-wiki.net and its authors. +This includes the sprites of the below Mob which are based upon SCP 939. +*/ +//SCP-939 +//sprites to be made. +/datum/ai_holder/simple_mob/scp + hostile = TRUE // The majority of simplemobs are hostile. + retaliate = TRUE // The majority of simplemobs will fight back. + cooperative = TRUE + returns_home = FALSE + can_flee = TRUE + speak_chance = 0 // If the mob's saylist is empty, nothing will happen. + wander = TRUE + base_wander_delay = 3 + autopilot = TRUE //As the ghost in this shell you only control the voices. + wander_when_pulled = TRUE + outmatched_threshold = 100 //pussy + flee_when_outmatched = TRUE + call_distance = 100 + mauling = FALSE + vision_range = 10 //no kiting, they have ears. + use_astar = TRUE //Clever boy! + threaten = TRUE + +/mob/living/simple_mob/animal/synx/scp + name = "Unknown" + desc = "It's a red canine looking creature." + tt_desc = "Unknown Alien Lifeform" + + poison_chance = 0 //no poison, + ai_holder_type = /datum/ai_holder/simple_mob/scp + say_list_type = /datum/say_list/malf_drone + + icon = 'icons/mob/synxmanyvoices.dmi' + icon_state = "939_living" + icon_living = "939_living" + icon_dead = "939_dead" + pixel_x = -15 + +#undef SYNX_LOWER_DAMAGE +#undef SYNX_UPPER_DAMAGE diff --git a/modular_chomp/icons/mob/synx_modular.dmi b/modular_chomp/icons/mob/synx_modular.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8d7ea98108481a601d7b46abc90819568d9eaaf1 GIT binary patch literal 4170 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 TGd8OKFLq1cT(4T!E#`j!m%Zff literal 0 HcmV?d00001 diff --git a/vorestation.dme b/vorestation.dme index 2c0ea39978..b93649525c 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3222,7 +3222,6 @@ #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_module.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_storage.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_subtypes.dm" -#include "code\modules\mob\living\simple_animal\aliens\synx.dm" #include "code\modules\mob\living\simple_mob\appearance.dm" #include "code\modules\mob\living\simple_mob\butchering.dm" #include "code\modules\mob\living\simple_mob\combat.dm" @@ -4699,6 +4698,7 @@ #include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\positive.dm" #include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\xenomorph_hybrid_trait.dm" #include "modular_chomp\code\modules\mob\living\silicon\robot\drone\drone_items.dm" +#include "modular_chomp\code\modules\mob\living\simple_animal\aliens\synx.dm" #include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\civilian.dm" #include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\clown.dm" #include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\combat.dm"