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/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index d893c64565cab..a23b358c1c50c 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -136,14 +136,13 @@ ..() 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 + 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) @@ -159,7 +158,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/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/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index cfaea9f32f9d9..fd3ea10fdb369 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -78,13 +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 - if((HULK in H.mutations) || (NOGUNS in H.dna.species.species_traits)) - user << "Your fingers can't press the button!" - return - add_fingerprint(user) //nothing happens if the battery is drained diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 96509d658b3f0..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].") @@ -321,11 +317,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.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 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..8512708592edd --- /dev/null +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -0,0 +1,207 @@ +//Human hulk +/mob/living/simple_animal/hulk + name = "Hulk" + real_name = "Hulk" + desc = "Big b♂y" + 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 + + 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/hulk_jump, + /obj/effect/proc_holder/spell/aoe_turf/hulk/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/hulk_honk, + /obj/effect/proc_holder/spell/aoe_turf/hulk/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/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) + 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/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]!",\ + "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) + +/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 new file mode 100644 index 0000000000000..cd4b084bef748 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hulk_power.dm @@ -0,0 +1,499 @@ +//Transform spell + +/obj/effect/proc_holder/spell/aoe_turf/hulk/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/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(usr.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 +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_dash + name = "Dash" + desc = "" + panel = "Hulk" + action_icon_state = "charge_hulk" + action_background_icon_state = "bg_hulk" + charge_max = 130 + clothes_req = 0 + range = 5 + +/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!") + 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/hulk_jump + name = "Leap" + desc = "" + panel = "Hulk" + action_icon_state = "jump_hulk" + action_background_icon_state = "bg_hulk" + charge_max = 130 + clothes_req = 0 + range = 5 + +/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) + 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/hulk_honk + name = "HulkHONK" + desc = "" + panel = "Hulk" + action_icon_state = "honk_hulk" + action_background_icon_state = "bg_hulk" + charge_max = 250 + clothes_req = 0 + range = 2 + +/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 + 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/hulk_joke + name = "Joke" + desc = "" + panel = "Hulk" + action_icon_state = "joke_hulk" + action_background_icon_state = "bg_hulk" + charge_max = 350 + clothes_req = 0 + range = 2 + +/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 + + 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,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 + +//Hulk Mill +/obj/effect/proc_holder/spell/aoe_turf/hulk/hulk_mill + name = "Windmill" + desc = "" + panel = "Hulk" + action_icon_state = "mill_hulk" + action_background_icon_state = "bg_hulk" + charge_max = 200 + clothes_req = 0 + range = 2 + +/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 + 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/hulk_spit + name = "Fire Spit" + 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 + range = 20 + +/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!") + 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/hulk_lazor + name = "LazorZ" + desc = "" + panel = "Hulk" + invocation_type = "shout" + action_icon_state = "lazer_hulk" + action_background_icon_state = "bg_hulk" + allowed_type = /atom + charge_max = 70 + clothes_req = 0 + range = 20 + +/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!") + 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 0000000000000..76da67f762460 Binary files /dev/null and b/icons/mob/Hulk.dmi differ diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index a8f226c2f0109..bc52d0a73876c 100644 Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ diff --git a/icons/mob/actions/hulk_spell.dmi.tmp b/icons/mob/actions/hulk_spell.dmi.tmp new file mode 100644 index 0000000000000..18c32bf7bac5d Binary files /dev/null and b/icons/mob/actions/hulk_spell.dmi.tmp differ diff --git a/icons/mob/zilla.dmi b/icons/mob/zilla.dmi new file mode 100644 index 0000000000000..2818c8267f761 Binary files /dev/null and b/icons/mob/zilla.dmi differ diff --git a/paradise.dme b/paradise.dme index 3d0be4b44aed9..d45746a278d5f 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1969,6 +1969,8 @@ #include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\damage_procs.dm" +#include "code\modules\mob\living\simple_animal\hulk.dm" +#include "code\modules\mob\living\simple_animal\hulk_power.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" #include "code\modules\mob\living\simple_animal\posessed_object.dm" #include "code\modules\mob\living\simple_animal\powers.dm" diff --git a/sound/effects/hulk_hit_airlock.ogg b/sound/effects/hulk_hit_airlock.ogg new file mode 100644 index 0000000000000..dd55065e4bd41 Binary files /dev/null and b/sound/effects/hulk_hit_airlock.ogg differ diff --git a/sound/effects/hulk_step.ogg b/sound/effects/hulk_step.ogg new file mode 100644 index 0000000000000..f54c544f73517 Binary files /dev/null and b/sound/effects/hulk_step.ogg differ