diff --git a/code/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm index bcba116014..c8149fc7ce 100644 --- a/code/game/objects/effects/alien/aliens.dm +++ b/code/game/objects/effects/alien/aliens.dm @@ -1,7 +1,6 @@ /* Alien Effects! * Contains: * effect/alien - * Resin * Weeds * Acid */ @@ -14,139 +13,6 @@ desc = "theres something alien about this" icon = 'icons/mob/alien.dmi' -/* - * Resin - */ -/obj/effect/alien/resin - name = "resin" - desc = "Looks like some kind of slimy growth." - icon_state = "resin" - - density = TRUE - opacity = 1 - anchored = TRUE - can_atmos_pass = ATMOS_PASS_NO - var/health = 200 - //var/mob/living/affecting = null - -/obj/effect/alien/resin/wall - name = "resin wall" - desc = "Purple slime solidified into a wall." - icon_state = "resinwall" //same as resin, but consistency ho! - -/obj/effect/alien/resin/membrane - name = "resin membrane" - desc = "Purple slime just thin enough to let light pass through." - icon_state = "resinmembrane" - opacity = 0 - health = 120 - -/obj/effect/alien/resin/New() - ..() - var/turf/T = get_turf(src) - T.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - -/obj/effect/alien/resin/Destroy() - var/turf/T = get_turf(src) - T.thermal_conductivity = initial(T.thermal_conductivity) - ..() - -/obj/effect/alien/resin/proc/healthcheck() - if(health <=0) - density = FALSE - qdel(src) - return - -/obj/effect/alien/resin/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - -/obj/effect/alien/resin/attack_generic(var/mob/user, var/damage, var/attack_verb) - visible_message("[user] [attack_verb] the [src]!") - playsound(src, 'sound/effects/attackblob.ogg', 100, 1) - user.do_attack_animation(src) - health -= damage - healthcheck() - return - -/obj/effect/alien/resin/take_damage(var/damage) - health -= damage - healthcheck() - return - -/obj/effect/alien/resin/ex_act(severity) - switch(severity) - if(1.0) - health-=50 - if(2.0) - health-=50 - if(3.0) - if (prob(50)) - health-=50 - else - health-=25 - healthcheck() - return - -/obj/effect/alien/resin/hitby(AM as mob|obj) - ..() - for(var/mob/O in viewers(src, null)) - O.show_message("[src] was hit by [AM].", 1) - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else - tforce = AM:throwforce - playsound(src, 'sound/effects/attackblob.ogg', 100, 1) - health = max(0, health - tforce) - healthcheck() - ..() - return - -/obj/effect/alien/resin/attack_hand() - usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (HULK in usr.mutations) - to_chat(usr, "You easily destroy the [name].") - for(var/mob/O in oviewers(src)) - O.show_message("[usr] destroys the [name]!", 1) - health = 0 - else - - // Aliens can get straight through these. - if(istype(usr,/mob/living/carbon)) - var/mob/living/carbon/M = usr - if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) - for(var/mob/O in oviewers(src)) - O.show_message("[usr] strokes the [name] and it melts away!", 1) - health = 0 - healthcheck() - return - - to_chat(usr, "You claw at the [name].") - for(var/mob/O in oviewers(src)) - O.show_message("[usr] claws at the [name]!", 1) - health -= rand(5,10) - healthcheck() - return - -/obj/effect/alien/resin/attackby(obj/item/weapon/W as obj, mob/user as mob) - - user.setClickCooldown(user.get_attack_speed(W)) - var/aforce = W.force - health = max(0, health - aforce) - playsound(src, 'sound/effects/attackblob.ogg', 100, 1) - healthcheck() - ..() - return - -/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && mover.checkpass(PASSGLASS)) - return !opacity - return !density - - /* * Weeds */ diff --git a/code/game/objects/structures/alien/alien egg.dm b/code/game/objects/structures/alien/alien egg.dm index 7ca4bd37b7..eebdbb9969 100644 --- a/code/game/objects/structures/alien/alien egg.dm +++ b/code/game/objects/structures/alien/alien egg.dm @@ -4,8 +4,7 @@ desc = "It looks like a weird egg." name = "egg" icon_state = "egg_growing" - density = 0 - anchored = 1 + density = FALSE var/progress = 0 /obj/structure/alien/egg/Initialize() diff --git a/code/game/objects/structures/alien/alien.dm b/code/game/objects/structures/alien/alien.dm index 6aa1ec5060..0715a821fb 100644 --- a/code/game/objects/structures/alien/alien.dm +++ b/code/game/objects/structures/alien/alien.dm @@ -1,10 +1,11 @@ -/obj/structure/alien //Gurg Addition, framework for alien eggs. +/obj/structure/alien //Gurg Addition, framework for alien eggs and structures. name = "alien thing" desc = "There's something alien about this." icon = 'icons/mob/alien.dmi' layer = ABOVE_JUNK_LAYER var/health = 50 unacidable = TRUE + anchored = TRUE /obj/structure/alien/proc/healthcheck() if(health <=0) @@ -40,22 +41,51 @@ tforce = 10 else tforce = AM:throwforce - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + playsound(src, 'sound/effects/attackblob.ogg', 100, 1) health = max(0, health - tforce) healthcheck() ..() return -/obj/structure/alien/attack_generic() - attack_hand(usr) +/obj/structure/alien/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + playsound(src, 'sound/effects/attackblob.ogg', 100, 1) + user.do_attack_animation(src) + health -= damage + healthcheck() + return -/obj/structure/alien/attackby(var/obj/item/weapon/W, var/mob/user) - health = max(0, health - W.force) - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) +/obj/structure/alien/attackby(obj/item/weapon/W as obj, mob/user as mob) + + user.setClickCooldown(user.get_attack_speed(W)) + var/aforce = W.force + health = max(0, health - aforce) + playsound(src, 'sound/effects/attackblob.ogg', 100, 1) + visible_message("[user] attacks the [src]!") healthcheck() ..() return +/obj/structure/alien/attack_hand() + usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if (HULK in usr.mutations) + visible_message("[usr] destroys the [name]!") + health = 0 + else + + // Aliens can get straight through these. + if(istype(usr,/mob/living/carbon)) + var/mob/living/carbon/M = usr + if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) + visible_message ("[usr] strokes the [name] and it melts away!", 1) + health = 0 + healthcheck() + return + visible_message("[usr] claws at the [name]!") + health -= rand(5,10) + healthcheck() + return + /obj/structure/alien/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group) return 0 if(istype(mover) && mover.checkpass(PASSGLASS)) diff --git a/code/game/objects/structures/alien/resin structures.dm b/code/game/objects/structures/alien/resin structures.dm new file mode 100644 index 0000000000..b3326b8dd2 --- /dev/null +++ b/code/game/objects/structures/alien/resin structures.dm @@ -0,0 +1,17 @@ +/obj/structure/alien/wall + name = "resin wall" + desc = "A disgusting mass of purple slime solidified into a wall." + icon_state = "resin wall" + health = 200 + opacity = 1 + density = TRUE + can_atmos_pass = ATMOS_PASS_NO + +/obj/structure/alien/membrane + name = "resin membrane" + desc = "A revolting mass of purple slime, it appears to be stretched enough to be transparent." + icon_state = "resin membrane" + opacity = 0 + health = 120 + density = TRUE + can_atmos_pass = ATMOS_PASS_NO diff --git a/code/modules/materials/materials/organic/resin.dm b/code/modules/materials/materials/organic/resin.dm index a42735627a..a1d66e4eb0 100644 --- a/code/modules/materials/materials/organic/resin.dm +++ b/code/modules/materials/materials/organic/resin.dm @@ -35,11 +35,11 @@ /datum/material/resin/generate_recipes() recipes = list( new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE), - new /datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"), + new /datum/stack_recipe("[display_name] barricade", /obj/structure/alien/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE), new /datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE), new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE), - new /datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), + new /datum/stack_recipe("[display_name] membrane", /obj/structure/alien/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]") ) \ No newline at end of file diff --git a/code/modules/mob/_modifiers/traits_phobias.dm b/code/modules/mob/_modifiers/traits_phobias.dm index 87f8ecc446..d8bd08a549 100644 --- a/code/modules/mob/_modifiers/traits_phobias.dm +++ b/code/modules/mob/_modifiers/traits_phobias.dm @@ -415,7 +415,10 @@ if(istype(thing, /obj/structure/blob)) // blobs are uncomfortable things fear_amount += 3 - if(istype(thing, /obj/effect/alien/resin)) // Resin's a bit slimy according to its own description. + if(istype(thing, /obj/structure/alien)) // Pretty much anything made by xenos are slimey in some way. + fear_amount += 1 + + if(istype(thing, /obj/effect/alien/weeds)) // Disgusting slimey carpet. fear_amount += 1 if(istype(thing, /obj/item/weed_extract)) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index e8751bce1b..5007cb8b41 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -225,36 +225,53 @@ spit_name = "acid" to_chat(src, "You prepare to spit acid.") -/mob/living/carbon/human/proc/resin() // -- TLE +/mob/living/carbon/human/proc/resin() //Gurgs : Refactored resin ability, big thanks to Jon. set name = "Secrete Resin (75)" set desc = "Secrete tough malleable resin." set category = "Abilities" - var/choice = tgui_input_list(usr, "Choose what you wish to shape.","Resin building", list("resin door","resin wall","resin membrane","resin nest","resin blob")) //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist - if(!choice) - return + var/list/options = list("resin door","resin wall","resin membrane","nest","resin blob") + for(var/option in options) + LAZYSET(options, option, new /image('icons/mob/alien.dmi', option)) // based off 'icons/effects/thinktank_labels.dmi' - if(!check_alien_ability(75,1,O_RESIN)) - return + var/choice = show_radial_menu(src, src, options, radius = 42, require_near = TRUE) - visible_message("[src] vomits up a thick purple substance and begins to shape it!", "You shape a [choice].") + if(!choice || QDELETED(src) || src.incapacitated()) + return FALSE + var/targetLoc = get_step(src, dir) + + if(iswall(targetLoc)) + targetLoc = get_turf(src) + var/obj/O switch(choice) if("resin door") - O = new /obj/structure/simple_door/resin(loc) + if(!check_alien_ability(75,1,O_RESIN)) + return + else O = new /obj/structure/simple_door/resin(targetLoc) if("resin wall") - O = new /obj/effect/alien/resin/wall(loc) + if(!check_alien_ability(75,1,O_RESIN)) + return + else O = new /obj/structure/alien/wall(targetLoc) if("resin membrane") - O = new /obj/effect/alien/resin/membrane(loc) - if("resin nest") - O = new /obj/structure/bed/nest(loc) + if(!check_alien_ability(75,1,O_RESIN)) + return + else O = new /obj/structure/alien/membrane(targetLoc) + if("nest") + if(!check_alien_ability(75,1,O_RESIN)) + return + else O = new /obj/structure/bed/nest(targetLoc) if("resin blob") - O = new /obj/item/stack/material/resin(loc) + if(!check_alien_ability(75,1,O_RESIN)) + return + else O = new /obj/item/stack/material/resin(targetLoc) if(O) + visible_message("[src] vomits up a thick purple substance and begins to shape it!", "You shape a [choice].") O.color = "#321D37" + playsound(src, 'sound/effects/blobattack.ogg', 40, 1) return diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 8f49d078a8..40990afe12 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/vorestation.dme b/vorestation.dme index 077fdf2271..0f7d3a73a0 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1498,6 +1498,7 @@ #include "code\game\objects\structures\window_vr.dm" #include "code\game\objects\structures\alien\alien egg.dm" #include "code\game\objects\structures\alien\alien.dm" +#include "code\game\objects\structures\alien\resin structures.dm" #include "code\game\objects\structures\crates_lockers\__closets.dm" #include "code\game\objects\structures\crates_lockers\_closets_appearance_definitions.dm" #include "code\game\objects\structures\crates_lockers\_closets_appearance_definitions_vr.dm"