From d5ac77e58090c1d8465081f6976eaac117d94115 Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Wed, 28 Apr 2021 17:35:32 +0700 Subject: [PATCH 01/10] Normal Hulk start All Hulk All spell for Hulk --- code/_onclick/other_mobs.dm | 6 - code/game/atoms.dm | 7 - code/game/gamemodes/blob/theblob.dm | 3 - code/game/machinery/OpTable.dm | 7 - code/game/machinery/doors/airlock.dm | 5 + code/game/machinery/doors/firedoor.dm | 5 + code/game/mecha/mecha.dm | 9 - code/game/objects/effects/effects.dm | 3 - code/game/objects/items.dm | 3 - code/game/objects/items/weapons/twohanded.dm | 5 - code/game/objects/obj_defense.dm | 15 - code/game/objects/structures/grille.dm | 9 - code/game/objects/structures/window.dm | 5 - code/game/turfs/simulated.dm | 7 + .../turfs/simulated/floor/indestructible.dm | 3 - code/game/turfs/simulated/walls.dm | 13 - .../turfs/simulated/walls_indestructible.dm | 3 - code/game/turfs/simulated/walls_misc.dm | 7 - .../carbon/alien/humanoid/humanoid_defense.dm | 18 - .../carbon/alien/larva/larva_defense.dm | 15 - .../mob/living/carbon/human/human_defense.dm | 17 +- .../mob/living/silicon/silicon_defense.dm | 12 - .../living/simple_animal/animal_defense.dm | 11 - code/modules/mob/living/simple_animal/hulk.dm | 170 +++++++ .../mob/living/simple_animal/hulk_power.dm | 444 ++++++++++++++++++ .../mob/living/simple_animal/slime/slime.dm | 8 - icons/mob/Hulk.dmi | Bin 0 -> 2730 bytes icons/mob/zilla.dmi | Bin 0 -> 2004 bytes paradise.dme | 2 + sound/effects/hulk_hit_airlock.ogg | Bin 0 -> 21998 bytes sound/effects/hulk_step.ogg | Bin 0 -> 7059 bytes 31 files changed, 634 insertions(+), 178 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/hulk.dm create mode 100644 code/modules/mob/living/simple_animal/hulk_power.dm create mode 100644 icons/mob/Hulk.dmi create mode 100644 icons/mob/zilla.dmi create mode 100644 sound/effects/hulk_hit_airlock.ogg create mode 100644 sound/effects/hulk_step.ogg diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 4497f170a2d87..287a49a0b2e87 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -11,12 +11,6 @@ var/obj/item/clothing/gloves/G = gloves // not typecast specifically enough in defines if(proximity && istype(G) && G.Touch(A, 1)) return - - if(HULK in mutations) - if(proximity) //no telekinetic hulk attack - if(A.attack_hulk(src)) - return - if(buckled && isstructure(buckled)) var/obj/structure/S = buckled if(S.prevents_buckled_mobs_attacking()) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 1ff66c1bf0fef..232f160abce9a 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -200,13 +200,6 @@ /atom/proc/mech_melee_attack(obj/mecha/M) return -/atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) - if(does_attack_animation) - user.changeNext_move(CLICK_CD_MELEE) - add_attack_logs(user, src, "Punched with hulk powers") - user.do_attack_animation(src, ATTACK_EFFECT_SMASH) - /atom/proc/CheckParts(list/parts_list) for(var/A in parts_list) if(istype(A, /datum/reagent)) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index afe8e3fabe721..990f5c06822f7 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -147,9 +147,6 @@ ..() take_damage(power / 400, BURN, "energy") -/obj/structure/blob/hulk_damage() - return 15 - /obj/structure/blob/attack_animal(mob/living/simple_animal/M) if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut return diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 551f58594bb6c..3759d09ce6903 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -31,13 +31,6 @@ patient = null return ..() -/obj/machinery/optable/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - ..(user, TRUE) - visible_message("[user] destroys the operating table!") - qdel(src) - return TRUE - /obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0) if(height == 0) return TRUE diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index d670c42e5a863..94150a9fda171 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -714,6 +714,11 @@ About the new airlock wires panel: if(isElectrified()) shock(user, 100) +/obj/machinery/door/airlock/attack_animal(mob/user) + if(istype(user, /mob/living/simple_animal/hulk)) + var/mob/living/simple_animal/hulk/H = user + H.attack_hulk(src) + /obj/machinery/door/airlock/attack_hand(mob/user) if(shock_user(user, 100)) return diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index b19888ba90716..4261cba745f7b 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -178,6 +178,11 @@ if(user.can_advanced_admin_interact()) forcetoggle(TRUE) +/obj/machinery/door/firedoor/attack_animal(mob/user) + if(istype(user, /mob/living/simple_animal/hulk)) + var/mob/living/simple_animal/hulk/H = user + H.attack_hulk(src) + /obj/machinery/door/firedoor/attack_alien(mob/user) add_fingerprint(user) if(welded) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 64e490b85a6e3..ab13a8de34296 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -569,15 +569,6 @@ attack_generic(user, animal_damage, user.melee_damage_type, "melee", play_soundeffect) return TRUE -/obj/mecha/hulk_damage() - return 15 - -/obj/mecha/attack_hulk(mob/living/carbon/human/user) - . = ..() - if(.) - log_message("Attack by hulk. Attacker - [user].", 1) - add_attack_logs(user, OCCUPANT_LOGGING, "Hulk punched mech [src]") - /obj/mecha/blob_act(obj/structure/blob/B) log_message("Attack by blob. Attacker - [B].") take_damage(30, BRUTE, "melee", 0, get_dir(src, B)) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 625d2ad8fd9d3..a403615df9d90 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -12,9 +12,6 @@ /obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) return -/obj/effect/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - return FALSE - /obj/effect/singularity_act() qdel(src) return FALSE diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5052874f5cc2e..50293709322a4 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -620,9 +620,6 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect /obj/item/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) return -/obj/item/attack_hulk(mob/living/carbon/human/user) - return FALSE - /obj/item/attack_animal(mob/living/simple_animal/M) if(can_be_hit) return ..() diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 96509d658b3f0..e976a7d2c21f0 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -321,11 +321,6 @@ return ..() return FALSE -/obj/item/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up - if(wielded) - to_chat(user, "You can't pick up such a dangerous item with your meaty hands without losing fingers, better not to!") - return TRUE - /obj/item/twohanded/dualsaber/green blade_color = "green" diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index e41d2173c238e..bd391012b0f7b 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -71,21 +71,6 @@ take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) ///Called to get the damage that hulks will deal to the obj. -/obj/proc/hulk_damage() - return 150 //the damage hulks do on punches to this object, is affected by melee armor - -/obj/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - ..(user, TRUE) - visible_message("[user] smashes [src]!") - if(density) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - else - playsound(src, 'sound/effects/bang.ogg', 50, 1) - take_damage(hulk_damage(), BRUTE, "melee", 0, get_dir(src, user)) - return TRUE - return FALSE /obj/blob_act(obj/structure/blob/B) if(isturf(loc)) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index b1e0f40b8d9ef..ef9dcbbae3e30 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -73,15 +73,6 @@ if(. && !QDELETED(src) && !shock(user, 70)) take_damage(rand(5,10), BRUTE, "melee", 1) -/obj/structure/grille/hulk_damage() - return 60 - -/obj/structure/grille/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - if(!shock(user, 70)) - ..(user, TRUE) - return TRUE - /obj/structure/grille/attack_hand(mob/living/user) . = ..() if(.) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 65c212af72330..b7367d0a258c8 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -175,11 +175,6 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", add_fingerprint(user) playsound(src, 'sound/effects/glassknock.ogg', 50, 1) -/obj/structure/window/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) - if(!can_be_reached(user)) - return 1 - . = ..() - /obj/structure/window/attack_hand(mob/user) if(!can_be_reached(user)) return diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 80325022e05ce..5b6aa30bce7d6 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -103,6 +103,13 @@ if(TURF_WET_PERMAFROST) // Permafrost M.slip("the frosted floor", 0, 5, tilesSlipped = 1, walkSafely = 0, slipAny = 1) + var/mob/living/simple_animal/hulk/Hulk = A + if(istype(A, /mob/living/simple_animal/hulk)) + if(!Hulk.lying) + playsound(src,'sound/effects/hulk_step.ogg', CHANNEL_BUZZ) + if (istype(A, /mob/living/simple_animal/hulk/clown_hulk)) + if(!Hulk.lying) + playsound(src, pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg'), CHANNEL_BUZZ) /turf/simulated/ChangeTurf(path, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE) . = ..() diff --git a/code/game/turfs/simulated/floor/indestructible.dm b/code/game/turfs/simulated/floor/indestructible.dm index 4f551fb485a08..5a2874acd9bc9 100644 --- a/code/game/turfs/simulated/floor/indestructible.dm +++ b/code/game/turfs/simulated/floor/indestructible.dm @@ -27,9 +27,6 @@ /turf/simulated/floor/indestructible/attack_hand(mob/user) return -/turf/simulated/floor/indestructible/attack_hulk(mob/user, does_attack_animation = FALSE) - return - /turf/simulated/floor/indestructible/attack_animal(mob/living/simple_animal/M) return diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 23d0c9789bd8e..3a0255c795c8e 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -271,19 +271,6 @@ to_chat(M, "You push the wall but nothing happens!") return -/turf/simulated/wall/attack_hulk(mob/user, does_attack_animation = FALSE) - ..(user, TRUE) - - if(prob(hardness) || rotting) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - dismantle_wall(TRUE) - else - playsound(src, 'sound/effects/bang.ogg', 50, 1) - add_dent(WALL_DENT_HIT) - to_chat(user, text("You punch the wall.")) - return TRUE - /turf/simulated/wall/attack_hand(mob/user) user.changeNext_move(CLICK_CD_MELEE) if(rotting) diff --git a/code/game/turfs/simulated/walls_indestructible.dm b/code/game/turfs/simulated/walls_indestructible.dm index 6bb3cb9c22a98..e1a31a99a1605 100644 --- a/code/game/turfs/simulated/walls_indestructible.dm +++ b/code/game/turfs/simulated/walls_indestructible.dm @@ -36,9 +36,6 @@ /turf/simulated/wall/indestructible/attack_hand(mob/user) return -/turf/simulated/wall/indestructible/attack_hulk(mob/user, does_attack_animation = FALSE) - return - /turf/simulated/wall/indestructible/attack_animal(mob/living/simple_animal/M) return diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 56908a7ecae9f..54ce2d6178a92 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -115,13 +115,6 @@ for(var/i in 1 to 3) new/obj/item/clockwork/alloy_shards/small(src) -/turf/simulated/wall/clockwork/attack_hulk(mob/living/user, does_attack_animation = 0) - ..() - if(heated) - to_chat(user, "The wall is searing hot to the touch!") - user.adjustFireLoss(5) - playsound(src, 'sound/machines/fryer/deep_fryer_emerge.ogg', 50, TRUE) - /turf/simulated/wall/clockwork/mech_melee_attack(obj/mecha/M) ..() if(heated) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index 3174879caacf0..af04be5629d7d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -1,21 +1,3 @@ -/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "You don't want to hurt [src]!") - return FALSE - ..(user, TRUE) - adjustBruteLoss(15) - var/hitverb = "punched" - if(mob_size < MOB_SIZE_LARGE) - Paralyse(1) - spawn(0) - step_away(src, user, 15) - sleep(1) - step_away(src, user, 15) - hitverb = "slammed" - playsound(loc, "punch", 25, 1, -1) - visible_message("[user] has [hitverb] [src]!", "[user] has [hitverb] [src]!") - return TRUE /mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M) if(..()) diff --git a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm index d13dab884b226..9a3d3eb8ee120 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm @@ -16,21 +16,6 @@ visible_message("[M] has attempted to kick [src]!", \ "[M] has attempted to kick [src]!") - -/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "You don't want to hurt [src]!") - return FALSE - ..(user, TRUE) - adjustBruteLoss(5 + rand(1, 9)) - spawn(0) - Paralyse(1) - step_away(src, user, 15) - sleep(3) - step_away(src, user, 15) - return TRUE - /mob/living/carbon/alien/larva/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) if(!no_effect && !visual_effect_icon) visual_effect_icon = ATTACK_EFFECT_BITE diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 87d7165b8d3dd..9fca5102612f7 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -24,7 +24,7 @@ emp_act var/list/safe_list = list(/obj/item/projectile/beam/lasertag, /obj/item/projectile/beam/practice) if(is_type_in_list(P, safe_list)) //And it's safe visible_message("The [P.name] gets reflected by [src]!", \ - "The [P.name] gets reflected by [src]!") + "The [P.name] gets reflected by [src]!") P.reflect_back(src) return -1 // complete projectile permutation @@ -543,21 +543,6 @@ emp_act w_uniform.add_mob_blood(source) update_inv_w_uniform() -/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "You don't want to hurt [src]!") - return FALSE - var/hulk_verb = pick("smash", "pummel") - if(check_shields(user, 15, "the [hulk_verb]ing")) - return - ..(user, TRUE) - playsound(loc, user.dna.species.unarmed.attack_sound, 25, 1, -1) - var/message = "[user] has [hulk_verb]ed [src]!" - visible_message("[message]", "[message]") - adjustBruteLoss(15) - return TRUE - /mob/living/carbon/human/attack_hand(mob/user) if(..()) //to allow surgery to return properly. return diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 36d11b0f2a2b7..db31cb9ff461c 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -41,18 +41,6 @@ if(L.a_intent == INTENT_HELP) visible_message("[L.name] rubs its head against [src].") -/mob/living/silicon/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "You don't want to hurt [src]!") - return FALSE - ..(user, TRUE) - adjustBruteLoss(rand(10, 15)) - playsound(loc, "punch", 25, 1, -1) - visible_message("[user] has punched [src]!", "[user] has punched [src]!") - return TRUE - return FALSE - /mob/living/silicon/attack_hand(mob/living/carbon/human/M) switch(M.a_intent) if(INTENT_HELP) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 28fff50a124c9..2320134177f99 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -29,17 +29,6 @@ updatehealth() return TRUE -/mob/living/simple_animal/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) - if(user.a_intent == INTENT_HARM) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "You don't want to hurt [src]!") - return FALSE - ..(user, TRUE) - playsound(loc, "punch", 25, 1, -1) - visible_message("[user] has punched [src]!", "[user] has punched [src]!") - adjustBruteLoss(15) - return TRUE - /mob/living/simple_animal/attack_alien(mob/living/carbon/alien/humanoid/M) if(..()) //if harm or disarm intent. if(M.a_intent == INTENT_DISARM) diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm new file mode 100644 index 0000000000000..fb2c864cb734c --- /dev/null +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -0,0 +1,170 @@ +//Human hulk +/mob/living/simple_animal/hulk + name = "Hulk" + real_name = "Hulk" + desc = "" + icon = 'icons/mob/Hulk.dmi' + icon_state = "Hulk" + icon_living = "Hulk" + maxHealth = 400 + health = 400 + speed = 1.25 + harm_intent_damage = 20 + melee_damage_lower = 20 + melee_damage_upper = 20 + 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) + + speak_emote = list("roars") + emote_hear = list("roars") + response_help = "thinks better of touching" + response_disarm = "flails at" + response_harm = "punches" + environment_smash = 2 + + a_intent = INTENT_HARM + stop_automated_movement = 1 + status_flags = CANPUSH + universal_speak = 1 + universal_understand = 1 + attack_sound = list('sound/weapons/punch1.ogg') + minbodytemp = 0 + var/hulk_powers = list() + var/mob/living/original_body + var/health_regen = 1.5 + +/mob/living/simple_animal/hulk/human + hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk_jump, + /obj/effect/proc_holder/spell/aoe_turf/hulk_dash) + +//Clown Hulk + +/mob/living/simple_animal/hulk/clown_hulk + name = "Champion of Honk" + real_name = "Champion of Honk" + icon = 'icons/mob/Hulk.dmi' + icon_state = "Champion of Honk" + icon_living = "Champion of Honk" + maxHealth = 250 + health = 250 + speed = 1 + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 5 + + speak_emote = list("honks") + emote_hear = list("honks") + attack_sound = list('sound/items/bikehorn.ogg') + health_regen = 6 + + hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk_honk, + /obj/effect/proc_holder/spell/aoe_turf/hulk_joke) + +//Godzilla + +/mob/living/simple_animal/hulk/zilla + name = "Zilla" + real_name = " Zilla" + icon = 'icons/mob/zilla.dmi' + icon_state = "zilla" + icon_living = "zilla" + maxHealth = 450 + health = 450 + speed = 1.5 + harm_intent_damage = 30 + melee_damage_lower = 30 + melee_damage_upper = 30 + + speak_emote = list("gnaw") + emote_hear = list("gnaw") + attack_sound = list('sound/weapons/bite.ogg') + health_regen = 1.5 + + hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk_mill, + /obj/effect/proc_holder/spell/targeted/click/hulk_spit, + /obj/effect/proc_holder/spell/targeted/click/hulk_lazor) + +/mob/living/simple_animal/hulk/Life() + if(health < 1) + death() + return + + var/matrix/Mx = matrix() + if(health < maxHealth * 0.2) + Mx.Scale(0.75) + Mx.Translate(0,-5) + else if(health < maxHealth * 0.4) + Mx.Scale(0.8) + Mx.Translate(0,-4) + else if(health < maxHealth * 0.6) + Mx.Scale(0.85) + Mx.Translate(0,-3) + else if(health < maxHealth * 0.8) + Mx.Scale(0.9) + Mx.Translate(0,-2) + else + Mx.Scale(1) + Mx.Translate(0,0) + transform = Mx + + var/datum/gas_mixture/environment = loc.return_air() + if(environment) + var/pressure = environment.return_pressure() + if(pressure > 110) + health -= 7 + else if(pressure <= 5) + health -= 12 + else if(pressure <= 25) + health -= 8 + else if(pressure <= 45) + health -= 5 + else if(pressure <= 55) + health -= 3 + + if(pressure <= 75) + if(prob(15)) + emote("me",1,"gasps!") + + weakened = 0 + if(health > 0) + health = min(health + health_regen, maxHealth) + adjustBruteLoss(-health_regen) + adjustToxLoss(-health_regen) + adjustOxyLoss(-health_regen) + adjustFireLoss(-health_regen) + ..() + +/mob/living/proc/hulk_scream(obj/target, chance) + if(prob(chance)) + visible_message("[src] has punched \the [target]!",\ + "You punch the [target]!",\ + "You feel some weird vibration!") + playsound(target, 'sound/effects/hulk_hit_airlock.ogg', CHANNEL_BUZZ, 75) + return 0 + else + say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" )) + visible_message("[src] has destroyed some mechanic in the [target]!",\ + "You destroy some mechanic in the [target] door, which holds it in place!",\ + "You feel some weird vibration!") + playsound(target, pick('sound/effects/explosion1.ogg', 'sound/effects/explosion2.ogg'), CHANNEL_BUZZ) + return 1 + +/mob/living/simple_animal/hulk/proc/attack_hulk(obj/machinery/door/D) + do_attack_animation(D) + changeNext_move(CLICK_CD_MELEE) + if(istype(D,/obj/machinery/door/airlock)) + var/obj/machinery/door/airlock/A = D + if(A.welded || A.locked) + if(hulk_scream(A, 75)) + A.deconstruct(src) + return + if(istype(D,/obj/machinery/door/firedoor)) + var/obj/machinery/door/firedoor/F = D + if(FD_CLOSED) + if(hulk_scream(F)) + qdel(F) + return + if(D.density) + to_chat(src, "You force your fingers between \ + the doors and begin to pry them open...") + playsound(D, 'sound/machines/airlockforced.ogg', CHANNEL_BUZZ, 30, null, -4) + D.open(1) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hulk_power.dm b/code/modules/mob/living/simple_animal/hulk_power.dm new file mode 100644 index 0000000000000..b304d41c6405f --- /dev/null +++ b/code/modules/mob/living/simple_animal/hulk_power.dm @@ -0,0 +1,444 @@ +//HUMAN HULK + +//Dash +/obj/effect/proc_holder/spell/aoe_turf/hulk_dash + name = "Dash" + desc = "" + panel = "Hulk" + charge_max = 130 + clothes_req = 0 + range = 5 + +/obj/effect/proc_holder/spell/aoe_turf/hulk_dash/cast(list/targets, mob/user = usr) + var/turf/T = get_turf(get_step(usr,usr.dir)) + for(var/mob/living/M in T.contents) + to_chat(usr, "Something right in front of you!") + return + T = get_turf(get_step(T,usr.dir)) + for(var/mob/living/M in T.contents) + to_chat(usr, "Something right in front of you!") + return + + var/failure = 0 + if (istype(usr.loc,/mob) || usr.lying || usr.stunned || usr.buckled || usr.stat) + to_chat(usr, "You can't dash right now!") + return + + if (istype(usr.loc,/turf) && !(istype(usr.loc,/turf/space))) + for(var/mob/M in range(usr, 1)) + if(M.pulling == usr) + M.stop_pulling() + + + usr.visible_message("[usr.name] dashes forward!") + playsound(usr, 'sound/weapons/thudswoosh.ogg', CHANNEL_BUZZ) + if(failure) + usr.Weaken(5) + usr.Stun(5) + usr.visible_message(" \the [usr] attempts to dash away but was interrupted!", + "You attempt to dash but suddenly interrupted!", + "You hear the flexing of powerful muscles and suddenly a crash as a body hits the floor.") + return 0 + + usr.say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" )) + var/prevLayer = usr.layer + usr.layer = 9 + var/cur_dir = usr.dir + var/turf/simulated/floor/tile = usr.loc + if(tile && istype(tile)) + tile.break_tile() + var/speed = 3 + for(var/i=0, i<30, i++) + var/hit = 0 + T = get_turf(get_step(usr,usr.dir)) + if(i < 7) + if(istype(T,/turf/simulated/wall)) + hit = 1 + else if(istype(T,/turf/simulated/floor)) + for(var/obj/structure/S in T.contents) + if(istype(S,/obj/structure/window)) + hit = 1 + if(istype(S,/obj/structure/grille)) + hit = 1 + else if(i > 6) + if(istype(T,/turf/simulated/floor)) + for(var/obj/structure/S in T.contents) + if(istype(S,/obj/structure/window)) + S.ex_act(2) + if(istype(S,/obj/structure/grille)) + qdel(S) + if(istype(T,/turf/simulated/wall)) + var/turf/simulated/wall/W = T + var/mob/living/carbon/human/H = usr + if(istype(T,/turf/simulated/wall/r_wall)) + playsound(H, 'sound/weapons/tablehit1.ogg', CHANNEL_BUZZ) + hit = 1 + H.Weaken(10) + H.take_overall_damage(25, used_weapon = "reinforced wall") + else + playsound(H, 'sound/weapons/tablehit1.ogg', CHANNEL_BUZZ) + if(i > 20) + if(prob(65)) + hit = 1 + W.dismantle_wall(1) + else + hit = 1 + W.take_damage(50) + H.Weaken(5) + else + hit = 1 + W.take_damage(25) + H.Weaken(5) + if(i > 20) + usr.canmove = 0 + usr.density = 0 + for(var/mob/living/M in T.contents) + if(!M.lying) + var/turf/target = get_turf(get_step(usr,cur_dir)) + hit = 1 + playsound(M, 'sound/weapons/tablehit1.ogg', CHANNEL_BUZZ) + for(var/o=0, o<10, o++) + target = get_turf(get_step(target,cur_dir)) + var/mob/living/carbon/human/H = M + if(istype(H,/mob/living/carbon/human)) + var/bodypart_name = pick(BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_HEAD,BODY_ZONE_TAIL) + var/obj/item/organ/external/BP = H.bodyparts_by_name[bodypart_name] + H.apply_damage(20,BRUTE,BP) + BP.fracture() + M.Weaken(5) + M.Stun(5) + else + M.Weaken(5) + M.Stun(5) + M.take_overall_damage(40, used_weapon = "Hulk Foot") + M.throw_at(target, 200, 100) + break + else if(i > 6) + for(var/mob/living/M in T.contents) + playsound(M, 'sound/misc/slip.ogg', CHANNEL_BUZZ) + M.Weaken(5) + if(usr.lying) + break + if(hit) + break + if(i < 7) + speed++ + if(speed > 3) + speed = 0 + step(usr, cur_dir) + else if(i < 14) + speed++ + if(speed > 2) + speed = 0 + step(usr, cur_dir) + else if(i < 21) + speed++ + if(speed > 1) + speed = 0 + step(usr, cur_dir) + else if(i < 30) + step(usr, cur_dir) + sleep(1) + usr.density = 1 + usr.canmove = 1 + usr.layer = prevLayer + else + to_chat(usr, "You need a ground to do this!") + return + + if (istype(usr.loc,/obj)) + var/obj/container = usr.loc + to_chat(usr, "You dash and slam your head against the inside of [container]! Ouch!") + usr.paralysis += 3 + usr.weakened += 5 + container.visible_message("[usr.loc] emits a loud thump and rattles a bit.") + playsound(usr, 'sound/effects/bang.ogg', CHANNEL_BUZZ) + var/wiggle = 6 + while(wiggle > 0) + wiggle-- + container.pixel_x = rand(-3,3) + container.pixel_y = rand(-3,3) + sleep(1) + container.pixel_x = 0 + container.pixel_y = 0 + + return + +//Jump +/obj/effect/proc_holder/spell/aoe_turf/hulk_jump + name = "Leap" + desc = "" + panel = "Hulk" + charge_max = 130 + clothes_req = 0 + range = 5 + +/obj/effect/proc_holder/spell/aoe_turf/hulk_jump/cast(list/targets , mob/user = usr) + //for(var/turf/T in targets) + var/failure = 0 + if (istype(usr.loc,/mob) || usr.lying || usr.stunned || usr.buckled || usr.stat) + to_chat(usr, "You can't jump right now!") + return + + if (istype(usr.loc,/turf) && !(istype(usr.loc,/turf/space))) + + for(var/mob/M in range(usr, 1)) + if(M.pulling == usr) + M.stop_pulling() + + usr.visible_message("[usr.name] takes a huge leap!") + playsound(usr, 'sound/weapons/thudswoosh.ogg', CHANNEL_BUZZ) + if(failure) + usr.Weaken(5) + usr.Stun(5) + usr.visible_message(" \the [usr] attempts to leap away but is slammed back down to the ground!", + "You attempt to leap away but are suddenly slammed back down to the ground!", + "You hear the flexing of powerful muscles and suddenly a crash as a body hits the floor.") + return 0 + + usr.say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" )) + var/prevLayer = usr.layer + usr.layer = 9 + var/cur_dir = usr.dir + var/turf/simulated/floor/tile = usr.loc + if(tile) + tile.break_tile() + var/o=3 + for(var/i=0, i<14, i++) + usr.density = 0 + usr.canmove = 0 + o++ + if(o == 4) + o = 0 + step(usr, cur_dir) + if(i < 7) usr.pixel_y += 8 + else usr.pixel_y -= 8 + sleep(1) + playsound(usr, 'sound/effects/explosionfar.ogg', CHANNEL_BUZZ) + for(tile in range(1, usr)) + if(prob(50)) + tile.break_tile() + for(var/mob/living/M in usr.loc.contents) + if(M != usr) + var/mob/living/carbon/human/H = M + if(istype(H,/mob/living/carbon/human)) + playsound(H, 'sound/weapons/tablehit1.ogg', CHANNEL_BUZZ) + var/bodypart_name = pick(BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_HEAD,BODY_ZONE_TAIL) + var/obj/item/organ/external/BP = H.bodyparts_by_name[bodypart_name] + H.apply_damage(20,BRUTE,BP) + BP.fracture() + H.Stun(5) + H.Weaken(5) + else + playsound(M, 'sound/weapons/tablehit1.ogg', CHANNEL_BUZZ) + M.Stun(5) + M.Weaken(5) + M.take_overall_damage(35, used_weapon = "Hulk Foot") + var/snd = 1 + for(var/direction in GLOB.alldirs) + var/turf/T = get_step(usr,direction) + for(var/mob/living/M in T.contents) + if( (M != usr) && !(M.stat)) + if(snd) + snd = 0 + playsound(M, 'sound/misc/slip.ogg', CHANNEL_BUZZ) + M.Weaken(2) + for(var/i=0, i<6, i++) + spawn(i) + if(i < 3) M.pixel_y += 8 + else M.pixel_y -= 8 + usr.density = 1 + usr.canmove = 1 + usr.layer = prevLayer + else + to_chat(usr, "You need a ground to do this!") + return + + if (istype(usr.loc,/obj)) + var/obj/container = usr.loc + to_chat(usr, "You leap and slam your head against the inside of [container]! Ouch!") + usr.paralysis += 3 + usr.weakened += 5 + container.visible_message("[usr.loc] emits a loud thump and rattles a bit.") + playsound(usr, 'sound/effects/bang.ogg', CHANNEL_BUZZ) + var/wiggle = 6 + while(wiggle > 0) + wiggle-- + container.pixel_x = rand(-3,3) + container.pixel_y = rand(-3,3) + sleep(1) + container.pixel_x = 0 + container.pixel_y = 0 + + return +//Clown-Hulk + +//Hulk Honk +/obj/effect/proc_holder/spell/aoe_turf/hulk_honk + name = "HulkHONK" + desc = "" + panel = "Hulk" + charge_max = 250 + clothes_req = 0 + range = 2 + +/obj/effect/proc_holder/spell/aoe_turf/hulk_honk/cast(list/target,mob/user = usr) + if (usr.incapacitated()) + to_chat(usr, "You can't right now!") + return + playsound(usr, 'sound/items/airhorn.ogg', CHANNEL_BUZZ) + for(var/mob/living/carbon/M in ohearers(2)) + if(CLUMSY in M.mutations) + M.adjustBruteLoss(-10) + M.adjustToxLoss(-10) + M.adjustOxyLoss(-10) + M.AdjustWeakened(-1) + M.AdjustStunned(-1) + else + if(istype(M)) + var/mob/living/carbon/human/H = M + if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs)) + continue + M.stuttering += 2 + M.AdjustEarDamage(rand(0, 2)) + M.Weaken(2) + var /turf/simulated/victim_loc = M.loc + victim_loc.MakeSlippery(TURF_WET_LUBE, 5 SECONDS) + +//Hulk Joke +/obj/effect/proc_holder/spell/aoe_turf/hulk_joke + name = "Joke" + desc = "" + panel = "Hulk" + charge_max = 350 + clothes_req = 0 + range = 2 + +/obj/effect/proc_holder/spell/aoe_turf/hulk_joke/cast(list/targets,mob/user = usr) + if (usr.incapacitated()) + to_chat(usr, "You can't right now!") + return + + var/mob/living/simple_animal/hulk/clown_hulk = usr + clown_hulk.adjustBruteLoss(-50) + clown_hulk.adjustToxLoss(-10) + clown_hulk.adjustOxyLoss(-10) + clown_hulk.AdjustWeakened(-1) + clown_hulk.AdjustStunned(-1) + + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(10,0, usr.loc) + smoke.start() + playsound(usr,'sound/spookoween/scary_clown_appear.ogg',CHANNEL_BUZZ, 100) + + +//Zilla + +//Hulk Mill +/obj/effect/proc_holder/spell/aoe_turf/hulk_mill + name = "Windmill" + desc = "" + panel = "Hulk" + charge_max = 200 + clothes_req = 0 + range = 2 + +/obj/effect/proc_holder/spell/aoe_turf/hulk_mill/cast(list/targets,mob/user = usr) + if (usr.lying || usr.incapacitated()) + to_chat(usr, "You can't do that right now!") + return + for(var/i in 1 to 45) + if(usr.dir == 1) + usr.setDir(2) + else if(usr.dir == 2) + usr.setDir(4) + else if(usr.dir == 4) + usr.setDir(8) + else if(usr.dir == 8) + usr.setDir(1) + + for(var/mob/living/M in view(2, usr) - usr - usr.contents) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/bodypart_name = pick(BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_HEAD,BODY_ZONE_TAIL) + var/obj/item/organ/external/BP = H.bodyparts_by_name[bodypart_name] + H.apply_damage(2,BRUTE,BP) + else + M.apply_damage(2, used_weapon = "Tail") + playsound(M, 'sound/weapons/tablehit1.ogg', CHANNEL_BUZZ) + if(prob(3)) + M.Weaken(2) + sleep(1) + +//Harchok +/obj/item/projectile/energy/hulkspit + name = "spit" + icon = 'icons/obj/projectiles.dmi' + icon_state = "neurotoxin" + damage = 15 + damage_type = TOX + +/obj/item/projectile/energy/hulkspit/on_hit(atom/target, def_zone = BODY_ZONE_CHEST, blocked = 0) + if(istype(target, /mob/living/carbon)) + var/mob/living/carbon/M = target + M.Weaken(2) + M.adjust_fire_stacks(20) + M.IgniteMob() + +/obj/effect/proc_holder/spell/targeted/click/hulk_spit + name = "Fire Spit" + desc = "" + panel = "Hulk" + invocation_type = "shout" + allowed_type = /atom + charge_max = 250 + clothes_req = 0 + range = 20 + +/obj/effect/proc_holder/spell/targeted/click/hulk_spit/cast(list/targets,mob/user = usr) + var/target = targets[1] + if (usr.lying || usr.incapacitated()) + to_chat(usr, "You can't do that right now!") + return + + var/turf/T = usr.loc + var/turf/U = get_step(usr,usr.dir) // Get the tile infront of the move, based on their direction + if(!isturf(U) || !isturf(T)) + return + + var/obj/item/projectile/energy/hulkspit/HS = new /obj/item/projectile/energy/hulkspit(usr.loc) + HS.current = get_turf(user) + HS.preparePixelProjectile(target, get_turf(target), user) + HS.fire() + user.newtonian_move(get_dir(U, T)) + playsound(usr, 'sound/magic/fireball.ogg', CHANNEL_BUZZ) + +//Laser + +/obj/effect/proc_holder/spell/targeted/click/hulk_lazor + name = "LazorZ" + desc = "" + panel = "Hulk" + invocation_type = "shout" + allowed_type = /atom + charge_max = 250 + clothes_req = 0 + range = 20 + +/obj/effect/proc_holder/spell/targeted/click/hulk_lazor/cast(list/targets,mob/user = usr) + var/target = targets[1] + if (usr.lying || usr.incapacitated()) + to_chat(usr, "You can't right now!") + return + + var/turf/T = usr.loc + var/turf/U = get_step(usr, usr.dir) // Get the tile infront of the move, based on their direction + if(!isturf(U) || !isturf(T)) + return + + var/obj/item/projectile/beam/B = new /obj/item/projectile/beam(usr.loc) + playsound(usr, 'sound/weapons/laser.ogg', CHANNEL_BUZZ) + B.current = get_turf(user) + B.preparePixelProjectile(target, get_turf(target), user) + B.fire() + user.newtonian_move(get_dir(U, T)) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 1b67b53119a3e..62be2e1a45606 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -297,14 +297,6 @@ if(..()) //successful larva bite. attacked += 10 -/mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user) - if(user.a_intent == INTENT_HARM) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "You don't want to hurt [src]!") - return FALSE - discipline_slime(user) - return ..() - /mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/M) if(buckled) M.do_attack_animation(src, ATTACK_EFFECT_DISARM) diff --git a/icons/mob/Hulk.dmi b/icons/mob/Hulk.dmi new file mode 100644 index 0000000000000000000000000000000000000000..76da67f762460f3c0aa440b652b7025d77c4b088 GIT binary patch literal 2730 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 k7@JSvani?W7y7` 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 D(9{!? literal 0 HcmV?d00001 From 3b336be5138d26aebe0c8447df4fc55378a7dae2 Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Wed, 28 Apr 2021 19:07:31 +0700 Subject: [PATCH 02/10] Delete atmos_rec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Убрал то что не нужно --- code/modules/mob/living/simple_animal/hulk.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm index fb2c864cb734c..a19696df09a90 100644 --- a/code/modules/mob/living/simple_animal/hulk.dm +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -12,7 +12,6 @@ harm_intent_damage = 20 melee_damage_lower = 20 melee_damage_upper = 20 - 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) speak_emote = list("roars") emote_hear = list("roars") From 048305cabdcd4d3439269792835e0a262aca2385 Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Fri, 30 Apr 2021 20:09:56 +0700 Subject: [PATCH 03/10] spell_icon spell icon by tumor (NiRoLex) --- .../mob/living/simple_animal/hulk_power.dm | 16 +++++++++++++++- icons/mob/actions/actions.dmi | Bin 126006 -> 129537 bytes icons/mob/actions/hulk_spell.dmi.tmp | Bin 0 -> 1792 bytes 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 icons/mob/actions/hulk_spell.dmi.tmp diff --git a/code/modules/mob/living/simple_animal/hulk_power.dm b/code/modules/mob/living/simple_animal/hulk_power.dm index b304d41c6405f..78a85c4ceec1d 100644 --- a/code/modules/mob/living/simple_animal/hulk_power.dm +++ b/code/modules/mob/living/simple_animal/hulk_power.dm @@ -5,6 +5,8 @@ name = "Dash" desc = "" panel = "Hulk" + action_icon_state = "charge_hulk" + action_background_icon_state = "bg_hulk" charge_max = 130 clothes_req = 0 range = 5 @@ -169,6 +171,8 @@ name = "Leap" desc = "" panel = "Hulk" + action_icon_state = "jump_hulk" + action_background_icon_state = "bg_hulk" charge_max = 130 clothes_req = 0 range = 5 @@ -278,6 +282,8 @@ name = "HulkHONK" desc = "" panel = "Hulk" + action_icon_state = "honk_hulk" + action_background_icon_state = "bg_hulk" charge_max = 250 clothes_req = 0 range = 2 @@ -310,6 +316,8 @@ name = "Joke" desc = "" panel = "Hulk" + action_icon_state = "joke_hulk" + action_background_icon_state = "bg_hulk" charge_max = 350 clothes_req = 0 range = 2 @@ -339,6 +347,8 @@ name = "Windmill" desc = "" panel = "Hulk" + action_icon_state = "mill_hulk" + action_background_icon_state = "bg_hulk" charge_max = 200 clothes_req = 0 range = 2 @@ -390,6 +400,8 @@ desc = "" panel = "Hulk" invocation_type = "shout" + action_icon_state = "harchok_hulk" + action_background_icon_state = "bg_hulk" allowed_type = /atom charge_max = 250 clothes_req = 0 @@ -420,8 +432,10 @@ desc = "" panel = "Hulk" invocation_type = "shout" + action_icon_state = "lazer_hulk" + action_background_icon_state = "bg_hulk" allowed_type = /atom - charge_max = 250 + charge_max = 70 clothes_req = 0 range = 20 diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index a8f226c2f0109462fb4237d6bc1f0c5b355f6c9c..bc52d0a73876c118acd4b95ad4601425f986474c 100644 GIT binary patch delta 7827 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 delta 4268 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 Date: Sat, 1 May 2021 17:11:47 +0700 Subject: [PATCH 04/10] Transform_spell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Спелл превращение в халка --- code/modules/mob/living/simple_animal/hulk.dm | 10 +++++- .../mob/living/simple_animal/hulk_power.dm | 35 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm index a19696df09a90..93300c6306be5 100644 --- a/code/modules/mob/living/simple_animal/hulk.dm +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -166,4 +166,12 @@ to_chat(src, "You force your fingers between \ the doors and begin to pry them open...") playsound(D, 'sound/machines/airlockforced.ogg', CHANNEL_BUZZ, 30, null, -4) - D.open(1) \ No newline at end of file + D.open(1) + +/mob/living/simple_animal/hulk/New() + ..() + name = text("[initial(name)] ([rand(1, 1000)])") + real_name = name + status_flags ^= CANPUSH + for(var/spell in hulk_powers) + src.AddSpell(new spell) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hulk_power.dm b/code/modules/mob/living/simple_animal/hulk_power.dm index 78a85c4ceec1d..3286f9b7c02cc 100644 --- a/code/modules/mob/living/simple_animal/hulk_power.dm +++ b/code/modules/mob/living/simple_animal/hulk_power.dm @@ -1,3 +1,38 @@ +//Transform spell + +/obj/effect/proc_holder/spell/aoe_turf/hulk_transform + name = "Transform" + desc = "" + panel = "Hulk" + action_icon_state = "transformarion_hulk" + action_background_icon_state = "bg_hulk" + charge_max = 100 + clothes_req = 0 + +/obj/effect/proc_holder/spell/aoe_turf/hulk_transform/cast(list/targets, mob/user = usr) + to_chat(usr, "You can feel real POWER.") + if(istype(loc, /obj/machinery/dna_scannernew)) + var/obj/machinery/dna_scannernew/DSN = loc + DSN.occupant = null + DSN.icon_state = "scanner_0" + var/mob/living/simple_animal/hulk/Monster + if(CLUMSY in usr.mutations) + Monster = new /mob/living/simple_animal/hulk/clown_hulk(get_turf(usr)) + else if(isunathi(usr)) + Monster = new /mob/living/simple_animal/hulk/zilla(get_turf(usr)) + else + Monster = new /mob/living/simple_animal/hulk/human(get_turf(usr)) + + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(10, 0, usr.loc) + smoke.start() + playsound(usr, 'sound/effects/bamf.ogg', CHANNEL_BUZZ) + Monster.original_body = usr + usr.forceMove(Monster) + usr.mind.transfer_to(Monster) + Monster.say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" )) + return + //HUMAN HULK //Dash From 5ad7f62aa0568922528c4f95989e215af95a3598 Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Sat, 1 May 2021 17:20:22 +0700 Subject: [PATCH 05/10] Spooky Scary Honk pick for spell/joke --- code/modules/mob/living/simple_animal/hulk_power.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hulk_power.dm b/code/modules/mob/living/simple_animal/hulk_power.dm index 3286f9b7c02cc..2f26058bdfae0 100644 --- a/code/modules/mob/living/simple_animal/hulk_power.dm +++ b/code/modules/mob/living/simple_animal/hulk_power.dm @@ -372,7 +372,7 @@ var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(10,0, usr.loc) smoke.start() - playsound(usr,'sound/spookoween/scary_clown_appear.ogg',CHANNEL_BUZZ, 100) + playsound(usr,pick('sound/spookoween/scary_clown_appear.ogg','sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg','sound/spookoween/scary_horn3.ogg'),CHANNEL_BUZZ, 100) //Zilla From 39e97622bfe39f527759ac4b6733d333b63f4e58 Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Sat, 1 May 2021 18:39:24 +0700 Subject: [PATCH 06/10] Fix + Add spell in HULK Block MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Пофиксил бесконечное разможение халков(Заспавненых) и сделал выдачу абилки людям с геном халка --- code/game/dna/genes/powers.dm | 12 +++--- code/modules/mob/living/simple_animal/hulk.dm | 14 +++---- .../mob/living/simple_animal/hulk_power.dm | 40 +++++++++++-------- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index d893c64565cab..309152463c89a 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -136,14 +136,15 @@ ..() block = GLOB.hulkblock -/datum/dna/gene/basic/hulk/activate(mob/M, connected, flags) +/datum/dna/gene/basic/hulk/activate(mob/M) ..() - var/status = CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH - M.status_flags &= ~status + M.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_transform) -/datum/dna/gene/basic/hulk/deactivate(mob/M, connected, flags) +/datum/dna/gene/basic/hulk/deactivate(mob/M) ..() - M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH + for(var/obj/effect/proc_holder/spell/S in M.mob_spell_list) + if(S==/obj/effect/proc_holder/spell/aoe_turf/hulk/ | /obj/effect/proc_holder/spell/targeted/click/hulk/) + M.RemoveSpell(S) /datum/dna/gene/basic/hulk/OnDrawUnderlays(mob/M, g) if(HULK in M.mutations) @@ -159,7 +160,6 @@ genemutcheck(M, GLOB.hulkblock,null,MUTCHK_FORCED) M.update_mutations() //update our mutation overlays M.update_body() - M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH //temporary fix until the problem can be solved. to_chat(M, "You suddenly feel very weak.") /datum/dna/gene/basic/xray diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm index 93300c6306be5..b5f6152c44810 100644 --- a/code/modules/mob/living/simple_animal/hulk.dm +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -32,8 +32,8 @@ var/health_regen = 1.5 /mob/living/simple_animal/hulk/human - hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk_jump, - /obj/effect/proc_holder/spell/aoe_turf/hulk_dash) + hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_jump, + /obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_dash) //Clown Hulk @@ -55,8 +55,8 @@ attack_sound = list('sound/items/bikehorn.ogg') health_regen = 6 - hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk_honk, - /obj/effect/proc_holder/spell/aoe_turf/hulk_joke) + hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_honk, + /obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_joke) //Godzilla @@ -78,9 +78,9 @@ attack_sound = list('sound/weapons/bite.ogg') health_regen = 1.5 - hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk_mill, - /obj/effect/proc_holder/spell/targeted/click/hulk_spit, - /obj/effect/proc_holder/spell/targeted/click/hulk_lazor) + hulk_powers = list(/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_mill, + /obj/effect/proc_holder/spell/targeted/click/hulk/hulk_spit, + /obj/effect/proc_holder/spell/targeted/click/hulk/hulk_lazor) /mob/living/simple_animal/hulk/Life() if(health < 1) diff --git a/code/modules/mob/living/simple_animal/hulk_power.dm b/code/modules/mob/living/simple_animal/hulk_power.dm index 2f26058bdfae0..cd4b084bef748 100644 --- a/code/modules/mob/living/simple_animal/hulk_power.dm +++ b/code/modules/mob/living/simple_animal/hulk_power.dm @@ -1,6 +1,6 @@ //Transform spell -/obj/effect/proc_holder/spell/aoe_turf/hulk_transform +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_transform name = "Transform" desc = "" panel = "Hulk" @@ -9,9 +9,15 @@ charge_max = 100 clothes_req = 0 -/obj/effect/proc_holder/spell/aoe_turf/hulk_transform/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_transform/cast(list/targets, mob/user = usr) + if(HAS_TRAIT(usr, TRAIT_PACIFISM)) + to_chat(usr, "Not enough angry power") + return + if(istype(usr,/mob/living/simple_animal/hulk)) + to_chat(usr, "You are already hulk") + return to_chat(usr, "You can feel real POWER.") - if(istype(loc, /obj/machinery/dna_scannernew)) + if(istype(usr.loc, /obj/machinery/dna_scannernew)) var/obj/machinery/dna_scannernew/DSN = loc DSN.occupant = null DSN.icon_state = "scanner_0" @@ -36,7 +42,7 @@ //HUMAN HULK //Dash -/obj/effect/proc_holder/spell/aoe_turf/hulk_dash +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_dash name = "Dash" desc = "" panel = "Hulk" @@ -46,7 +52,7 @@ clothes_req = 0 range = 5 -/obj/effect/proc_holder/spell/aoe_turf/hulk_dash/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_dash/cast(list/targets, mob/user = usr) var/turf/T = get_turf(get_step(usr,usr.dir)) for(var/mob/living/M in T.contents) to_chat(usr, "Something right in front of you!") @@ -202,7 +208,7 @@ return //Jump -/obj/effect/proc_holder/spell/aoe_turf/hulk_jump +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_jump name = "Leap" desc = "" panel = "Hulk" @@ -212,7 +218,7 @@ clothes_req = 0 range = 5 -/obj/effect/proc_holder/spell/aoe_turf/hulk_jump/cast(list/targets , mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_jump/cast(list/targets , mob/user = usr) //for(var/turf/T in targets) var/failure = 0 if (istype(usr.loc,/mob) || usr.lying || usr.stunned || usr.buckled || usr.stat) @@ -313,7 +319,7 @@ //Clown-Hulk //Hulk Honk -/obj/effect/proc_holder/spell/aoe_turf/hulk_honk +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_honk name = "HulkHONK" desc = "" panel = "Hulk" @@ -323,7 +329,7 @@ clothes_req = 0 range = 2 -/obj/effect/proc_holder/spell/aoe_turf/hulk_honk/cast(list/target,mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_honk/cast(list/target,mob/user = usr) if (usr.incapacitated()) to_chat(usr, "You can't right now!") return @@ -347,7 +353,7 @@ victim_loc.MakeSlippery(TURF_WET_LUBE, 5 SECONDS) //Hulk Joke -/obj/effect/proc_holder/spell/aoe_turf/hulk_joke +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_joke name = "Joke" desc = "" panel = "Hulk" @@ -357,7 +363,7 @@ clothes_req = 0 range = 2 -/obj/effect/proc_holder/spell/aoe_turf/hulk_joke/cast(list/targets,mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_joke/cast(list/targets,mob/user = usr) if (usr.incapacitated()) to_chat(usr, "You can't right now!") return @@ -378,7 +384,7 @@ //Zilla //Hulk Mill -/obj/effect/proc_holder/spell/aoe_turf/hulk_mill +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_mill name = "Windmill" desc = "" panel = "Hulk" @@ -388,7 +394,7 @@ clothes_req = 0 range = 2 -/obj/effect/proc_holder/spell/aoe_turf/hulk_mill/cast(list/targets,mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_mill/cast(list/targets,mob/user = usr) if (usr.lying || usr.incapacitated()) to_chat(usr, "You can't do that right now!") return @@ -430,7 +436,7 @@ M.adjust_fire_stacks(20) M.IgniteMob() -/obj/effect/proc_holder/spell/targeted/click/hulk_spit +/obj/effect/proc_holder/spell/targeted/click/hulk/hulk_spit name = "Fire Spit" desc = "" panel = "Hulk" @@ -442,7 +448,7 @@ clothes_req = 0 range = 20 -/obj/effect/proc_holder/spell/targeted/click/hulk_spit/cast(list/targets,mob/user = usr) +/obj/effect/proc_holder/spell/targeted/click/hulk/hulk_spit/cast(list/targets,mob/user = usr) var/target = targets[1] if (usr.lying || usr.incapacitated()) to_chat(usr, "You can't do that right now!") @@ -462,7 +468,7 @@ //Laser -/obj/effect/proc_holder/spell/targeted/click/hulk_lazor +/obj/effect/proc_holder/spell/targeted/click/hulk/hulk_lazor name = "LazorZ" desc = "" panel = "Hulk" @@ -474,7 +480,7 @@ clothes_req = 0 range = 20 -/obj/effect/proc_holder/spell/targeted/click/hulk_lazor/cast(list/targets,mob/user = usr) +/obj/effect/proc_holder/spell/targeted/click/hulk/hulk_lazor/cast(list/targets,mob/user = usr) var/target = targets[1] if (usr.lying || usr.incapacitated()) to_chat(usr, "You can't right now!") From cf4c66afe1b8f0cccd051c28d2f5ce6581364227 Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Sat, 1 May 2021 20:13:45 +0700 Subject: [PATCH 07/10] Hulk Death MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Смерть халка возвращает игроку его старую куклу с 5 секундами паралича. --- code/game/dna/genes/powers.dm | 4 +-- code/modules/mob/living/simple_animal/hulk.dm | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index 309152463c89a..a23b358c1c50c 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -142,9 +142,7 @@ /datum/dna/gene/basic/hulk/deactivate(mob/M) ..() - for(var/obj/effect/proc_holder/spell/S in M.mob_spell_list) - if(S==/obj/effect/proc_holder/spell/aoe_turf/hulk/ | /obj/effect/proc_holder/spell/targeted/click/hulk/) - M.RemoveSpell(S) + M.RemoveSpell(/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_transform) /datum/dna/gene/basic/hulk/OnDrawUnderlays(mob/M, g) if(HULK in M.mutations) diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm index b5f6152c44810..576ae7f82ca6d 100644 --- a/code/modules/mob/living/simple_animal/hulk.dm +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -132,6 +132,36 @@ adjustFireLoss(-health_regen) ..() +/mob/living/simple_animal/hulk/death() + unmutate() + +/mob/living/simple_animal/hulk/proc/unmutate() + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(10, 0, src.loc) + smoke.start() + playsound(src, 'sound/effects/bamf.ogg', CHANNEL_BUZZ) + + var/obj/effect/decal/remains/human/RH = new /obj/effect/decal/remains/human(src.loc) + var/matrix/Mx = matrix() + Mx.Scale(1.5) + RH.transform = Mx + + for(var/mob/M in contents) + M.loc = src.loc + if(istype(M, /mob/living)) + var/mob/living/L = M + L.Paralyse(15) + L.update_canmove() + + if(mind && original_body) + mind.transfer_to(original_body) + original_body.mutations.Remove(HULK) + original_body.dna.SetSEState(GLOB.hulkblock,0) + genemutcheck(original_body, GLOB.hulkblock,null,MUTCHK_FORCED) + to_chat(original_body, "You suddenly feel very weak.") + original_body.update_mutations() //update our mutation overlays + qdel(src) + /mob/living/proc/hulk_scream(obj/target, chance) if(prob(chance)) visible_message("[src] has punched \the [target]!",\ From 9f4d81e53b70ac79a9c2361d2227fbd0fcba3b7a Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Sat, 1 May 2021 20:22:15 +0700 Subject: [PATCH 08/10] Delete Old Hulk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Убрал то что теперь не имеет смысла. Человек с геном халка может подбирать оружие ,так как,пока он не превратиться в большого халка, он обычный человек ,просто с зеленой кожей. --- code/game/objects/items/devices/laserpointer.dm | 3 --- code/game/objects/items/weapons/twohanded.dm | 4 ---- code/modules/mob/living/carbon/human/human.dm | 3 --- 3 files changed, 10 deletions(-) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index cfaea9f32f9d9..bafd2b8e9bce8 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -81,9 +81,6 @@ return if(ishuman(user)) var/mob/living/carbon/human/H = user - if((HULK in H.mutations) || (NOGUNS in H.dna.species.species_traits)) - user << "Your fingers can't press the button!" - return add_fingerprint(user) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index e976a7d2c21f0..0ddf8c1633af0 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -297,10 +297,6 @@ ..() /obj/item/twohanded/dualsaber/attack(mob/target, mob/living/user) - if(HULK in user.mutations) - to_chat(user, "You grip the blade too hard and accidentally close it!") - unwield() - return ..() if((CLUMSY in user.mutations) && (wielded) && prob(40)) to_chat(user, "You twirl around a bit before losing your balance and impaling yourself on the [src].") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0533af57057c0..73ea07dd31aac 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1776,9 +1776,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X . = ..() if(G.trigger_guard == TRIGGER_GUARD_NORMAL) - if(HULK in mutations) - to_chat(src, "Your meaty finger is much too large for the trigger guard!") - return FALSE if(NOGUNS in dna.species.species_traits) to_chat(src, "Your fingers don't fit in the trigger guard!") return FALSE From ea6196494115dd5e62b69879c2fe24b8114700d5 Mon Sep 17 00:00:00 2001 From: FatFatFat1 <48385210+FatFatFat1@users.noreply.github.com> Date: Sat, 1 May 2021 20:48:30 +0700 Subject: [PATCH 09/10] Zabil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Кусок кода забыл убрать --- code/game/objects/items/devices/laserpointer.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index bafd2b8e9bce8..fd3ea10fdb369 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -78,10 +78,6 @@ return if(!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") - return - if(ishuman(user)) - var/mob/living/carbon/human/H = user - add_fingerprint(user) //nothing happens if the battery is drained From a09c3c3657beaabfba44a4bbc1e78250dd23d319 Mon Sep 17 00:00:00 2001 From: FatFat Date: Mon, 31 May 2021 22:53:32 +0700 Subject: [PATCH 10/10] Desc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ♂ --- code/modules/mob/living/simple_animal/hulk.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm index 576ae7f82ca6d..8512708592edd 100644 --- a/code/modules/mob/living/simple_animal/hulk.dm +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -2,7 +2,7 @@ /mob/living/simple_animal/hulk name = "Hulk" real_name = "Hulk" - desc = "" + desc = "Big b♂y" icon = 'icons/mob/Hulk.dmi' icon_state = "Hulk" icon_living = "Hulk"