diff --git a/code/game/sound.dm b/code/game/sound.dm index 2ebc83973be..07f318993cb 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -5,6 +5,7 @@ var/list/spark_sound = list('sound/effects/sparks1.ogg','sound/effects/sparks2.o var/list/rustle_sound = list('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') var/list/punch_sound = list('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') var/list/clown_sound = list('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') +var/list/slap_sound = list('sound/effects/slap1.ogg','sound/effects/slap2.ogg') var/list/swing_hit_sound = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') var/list/hiss_sound = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') @@ -168,6 +169,8 @@ var/const/SURROUND_CAP = 7 soundin = pick(punch_sound) if ("clownstep") soundin = pick(clown_sound) + if ("slap") + soundin = pick(slap_sound) if ("swing_hit") soundin = pick(swing_hit_sound) if ("hiss") diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 31d5264525c..aa238c674d0 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -173,6 +173,13 @@ _color = "mime" species_fit = list(VOX_SHAPED) +/obj/item/clothing/gloves/white/attackby(obj/item/weapon/W, mob/user) + ..() + if(istype(W, /obj/item/clothing/head/beret)) + new /mob/living/simple_animal/hostile/retaliate/faguette/goblin(get_turf(src)) + qdel(W) + qdel(src) + /obj/item/clothing/gloves/white/advanced //mime traitor gloves, spawn in a silent hand gun with two shots actions_types = list(/datum/action/item_action/toggle_gun) var/obj/item/weapon/gun/projectile/handgun/current_gun = null diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 00092116e18..b4546f77156 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -61,6 +61,13 @@ flags = FPRINT siemens_coefficient = 0.9 +/obj/item/clothing/head/beret/attackby(obj/item/weapon/W, mob/user) + ..() + if(istype(W, /obj/item/clothing/gloves/white)) + new /mob/living/simple_animal/hostile/retaliate/faguette/goblin(get_turf(src)) + qdel(W) + qdel(src) + //Security /obj/item/clothing/head/beret/sec name = "security beret" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm index fb7caa7e205..e01012bfc57 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm @@ -2,7 +2,7 @@ /mob/living/simple_animal/hostile/retaliate/faguette name = "faguette" - desc = "This sad, pitiful creature is all that remains of what used to be a human, cursed by the Gods to aimlessly roam with its mouth and fingers sewn shut, and it’s left arm transformed into a perfectly baked baguette." + desc = "This sad, pitiful creature is all that remains of what used to be a human, cursed by the Gods to aimlessly roam with its mouth and fingers sewn shut, and it's left arm transformed into a perfectly baked baguette." icon_state = "faguette" icon_living = "faguette" icon_dead = "faguette_dead" @@ -29,6 +29,7 @@ melee_damage_upper = 0.1 attacktext = "attacks" attack_sound = 'sound/weapons/genhit1.ogg' + meat_type = null min_oxy = 5 max_oxy = 0 @@ -58,6 +59,9 @@ return ..() +/mob/living/simple_animal/hostile/retaliate/faguette/attackby(obj/item/weapon/O, mob/user) + if(istype(O,/obj/item/weapon/book)) + gib() /mob/living/simple_animal/hostile/retaliate/faguette/proc/handle_disabilities() if ((prob(5) && paralysis < 10)) @@ -68,5 +72,72 @@ if(timestopped) return //under effects of time magick - var/msg = pick("drools through its stitched mouth","silently cries into its baguette","sloppily mimes tieing an invisible noose around its neck") + var/msg = pick("drools slightly","mimes crying into a tissue","sloppily mimes tying an invisible noose") return ..("me", type, "[msg].") + +/mob/living/simple_animal/hostile/retaliate/faguette/AttackingTarget() + if(isliving(target)) + var/mob/living/L = target + if(prob(10)) + L.silent += 3 + L.visible_message("\The [src.name] silences \the [L.name]!") + return + return ..() + + +/mob/living/simple_animal/hostile/retaliate/faguette/goblin + name = "mime goblin" + desc = "A tiny walking beret and gloves. Is it miming for a baguette?" + icon_state = "MimeGoblin" + icon_living = "MimeGoblin" + icon_dead = null + response_help = "pats the" + maxHealth = 100 + health = 100 + size = 1 + environment_smash_flags = SMASH_LIGHT_STRUCTURES + var/footstep = 0 //for slapping + speed = 1 + turns_per_move = 1 + + melee_damage_type = "BRAIN" + +/mob/living/simple_animal/hostile/retaliate/faguette/goblin/attackby(obj/item/weapon/W, mob/user) + if(istype(W,/obj/item/weapon/pen)) //Renaming + var/n_name = copytext(sanitize(input(user, "What would you like to name this mime goblin?", "Mime Goblin Name", null) as text|null), 1, MAX_NAME_LEN*3) + if(n_name && Adjacent(user) && !user.stat) + name = "[n_name]" + return + ..() + +/mob/living/simple_animal/hostile/retaliate/faguette/AttackingTarget() + if(isliving(target)) + var/mob/living/L = target + if(prob(10)) + L.visible_message("\The [src.name] mimes an invisible wall!") + var/obj/effect/forcefield/mime/wall = new(get_turf(src)) + spawn(300) + if(wall) + qdel(wall) + return ..() +/mob/living/simple_animal/hostile/retaliate/faguette/goblin/say() + return + +/mob/living/simple_animal/hostile/retaliate/faguette/goblin/death(var/gibbed = FALSE) + ..(TRUE) + new /obj/item/clothing/head/beret(src.loc) + new /obj/item/clothing/gloves/white(src.loc) + qdel(src) + +/mob/living/simple_animal/hostile/retaliate/faguette/goblin/Move(NewLoc, Dir = 0, step_x = 0, step_y = 0, glide_size_override = 0) + . = ..() + + if(.) + if(m_intent == "run") + if(footstep > 1) + footstep = 0 + playsound(src, "slap", 50, 1) + else + footstep++ + else + playsound(src, "slap", 20, 1) \ No newline at end of file diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 1876cba6879..411354ca786 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/sound/effects/slap1.ogg b/sound/effects/slap1.ogg new file mode 100644 index 00000000000..f09d75412f4 Binary files /dev/null and b/sound/effects/slap1.ogg differ diff --git a/sound/effects/slap2.ogg b/sound/effects/slap2.ogg new file mode 100644 index 00000000000..0e84a0888d9 Binary files /dev/null and b/sound/effects/slap2.ogg differ