diff --git a/hyperstation/code/mobs/mimic.dm b/hyperstation/code/mobs/mimic.dm index e69de29b..9683b6f0 100644 --- a/hyperstation/code/mobs/mimic.dm +++ b/hyperstation/code/mobs/mimic.dm @@ -0,0 +1,159 @@ +/mob/living/simple_animal/hostile/hs13mimic + name = "Mimic" + icon = 'hyperstation/icons/mobs/mimic.dmi' + desc = "What the fuck is that?" + icon_state = "mimic" + icon_living = "mimic" + icon_dead = "mimic_dead" + gender = NEUTER + speak_chance = 0 + turns_per_move = 5 + maxHealth = 50 + health = 50 + //move_to_delay = 4 + speed = 0 + see_in_dark = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 2) + response_help = "prods" + response_disarm = "pushes aside" + response_harm = "smacks" + melee_damage_lower = 8 + melee_damage_upper = 12 + attacktext = "slams" + attack_sound = 'sound/weapons/punch1.ogg' + ventcrawler = VENTCRAWLER_ALWAYS + faction = list("mimic") + gold_core_spawnable = NO_SPAWN + vision_range = 2 + aggro_vision_range = 9 + wander = TRUE + var/unstealth = FALSE + var/knockdown_people = 1 + +/mob/living/simple_animal/hostile/hs13mimic/Initialize() + . = ..() + // When initialized, make sure they take the form of something. + unstealth = FALSE + Mimictransform() + +/mob/living/simple_animal/hostile/hs13mimic/proc/Mimictransform() //The list of default things to transform needs to be bigger, consider this in the future. + + var/transformitem = rand(1,100) + if(unstealth == FALSE) + wander = FALSE + vision_range = initial(vision_range) + switch(transformitem) + if(1 to 20) + name = "drinking glass" + icon = 'icons/obj/drinks.dmi' + icon_state = "glass_empty" + desc = "Your standard drinking glass." + if(21 to 30) + name = "Private Security Officer" + desc = "A cardboard cutout of a private security officer." + icon = 'icons/obj/cardboard_cutout.dmi' + icon_state = "cutout_ntsec" + if(31 to 40) + name = "pen" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "pen" + desc = "It's a black ink pen, modified for use with both paper and Nanotransen-brand Digital-Readpads™!" + if(41 to 50) + name = "newspaper" + desc = "An issue of The Griffon, the newspaper circulating aboard Kin.Co Space Stations." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "newspaper" + if(51 to 60) + name = "toolbox" + desc = "Danger. Very robust." + icon = 'icons/obj/storage.dmi' + icon_state = "red" + if(61 to 70) + name = "emergency oxygen tank" + desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it." + icon = 'icons/obj/tank.dmi' + icon_state = "emergency" + if(71 to 80) + name = "drinking glass" + icon = 'icons/obj/drinks.dmi' + icon_state = "glass_empty" + desc = "Your standard drinking glass." + if(81 to 90) + name = "fleshlight" + icon = 'hyperstation/icons/obj/fleshlight.dmi' + icon_state = "fleshlight_totallynotamimic" + desc = "A sex toy disguised as a flashlight, used to stimulate someones penis, complete with colour changing sleeve." + if(91 to 100) + icon = 'modular_citadel/icons/obj/genitals/dildo.dmi' + switch(rand(1,3)) //switch within a switch hmmmmmmmmmm + if(1) + icon_state = "dildo_knotted_2" + name = "small knotted dildo" + if(2) + icon_state = "dildo_flared_4" + name = "huge flared dildo" + if(3) + icon_state = "dildo_knotted_3" + name = "big knotted dildo" + desc = "Floppy!" + else + restore() + +/mob/living/simple_animal/hostile/hs13mimic/AttackingTarget() + . = ..() + if(knockdown_people && . && prob(15) && iscarbon(target)) + var/mob/living/carbon/C = target + C.Knockdown(40) + C.visible_message("\The [src] knocks down \the [C]!", \ + "\The [src] knocks you down!") + +/mob/living/simple_animal/hostile/hs13mimic/adjustHealth(amount, updating_health = TRUE, forced = FALSE) + trigger() + . = ..() + +/mob/living/simple_animal/hostile/hs13mimic/FindTarget() + . = ..() + if(.) + trigger() + else if(!target && unstealth) + trytftorandomobject() + +/mob/living/simple_animal/hostile/hs13mimic/proc/restore() + //back to normal + name = initial(name) + icon = 'hyperstation/icons/mobs/mimic.dmi' + icon_state = "mimic" + desc = initial(desc) + wander = TRUE + vision_range = 9 + +/mob/living/simple_animal/hostile/hs13mimic/proc/trigger() + if(unstealth == FALSE) + unstealth = TRUE + visible_message("The [src] Reveals itself to be a Mimic!") + Mimictransform() + playsound(loc, 'hyperstation/sound/creatures/mimictransform.ogg', 75, TRUE) + triggerOthers(target) // Friends too! + +/mob/living/simple_animal/hostile/hs13mimic/proc/triggerOthers(passtarget) // + for(var/mob/living/simple_animal/hostile/hs13mimic/C in oview(5, src.loc)) + if(passtarget && C.target == null) + C.target = passtarget + C.trigger() + +/mob/living/simple_animal/hostile/hs13mimic/proc/trytftorandomobject() + var/list/obj/item/listItems = list() + for(var/obj/item/I in oview(9,src.loc)) + listItems += I + if(LAZYLEN(listItems)) + var/obj/item/changedReference = pick(listItems) + unstealth = FALSE + wander = FALSE + vision_range = initial(vision_range) + name = changedReference.name + icon = changedReference.icon + icon_state = changedReference.icon_state + desc = changedReference.desc + else + unstealth = FALSE + Mimictransform() diff --git a/hyperstation/icons/obj/fleshlight.dmi b/hyperstation/icons/obj/fleshlight.dmi index 35f4feba..e40a8dd6 100644 Binary files a/hyperstation/icons/obj/fleshlight.dmi and b/hyperstation/icons/obj/fleshlight.dmi differ diff --git a/hyperstation/sound/creatures/mimictransform.ogg b/hyperstation/sound/creatures/mimictransform.ogg new file mode 100644 index 00000000..d6ecd92f Binary files /dev/null and b/hyperstation/sound/creatures/mimictransform.ogg differ