Skip to content

Commit

Permalink
add: Ashwalkers survival update (#5893) [testmerge][1a48fda]
Browse files Browse the repository at this point in the history
  • Loading branch information
actions-user committed Dec 22, 2024
1 parent b04f2c0 commit 1a87daf
Show file tree
Hide file tree
Showing 40 changed files with 627 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -244,14 +244,14 @@
/turf/simulated/floor/lava,
/area/ruin/unpowered/ash_walkers)
"aK" = (
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
/obj/structure/stone_tile/block/cracked{
dir = 8
},
/obj/structure/stone_tile/cracked{
dir = 1
},
/obj/structure/stone_tile,
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
/turf/simulated/floor/indestructible/boss/indoors,
/area/ruin/unpowered/ash_walkers)
"aM" = (
Expand All @@ -277,6 +277,7 @@
/area/ruin/unpowered/ash_walkers)
"aP" = (
/obj/structure/stone_tile,
/obj/item/healthanalyzer/gem_analyzer,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aQ" = (
Expand Down Expand Up @@ -372,6 +373,7 @@
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"bc" = (
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
/obj/structure/stone_tile/block{
dir = 4
},
Expand All @@ -381,7 +383,6 @@
/obj/structure/stone_tile{
dir = 4
},
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
/turf/simulated/floor/indestructible/boss/indoors,
/area/ruin/unpowered/ash_walkers)
"bd" = (
Expand Down Expand Up @@ -485,7 +486,7 @@
/obj/structure/stone_tile/cracked{
dir = 4
},
/obj/item/rcd/preloaded,
/obj/item/stack/fireproof_rods/twentyfive,
/turf/simulated/floor/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"bn" = (
Expand Down Expand Up @@ -1417,6 +1418,14 @@
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"BC" = (
/obj/structure/stone_tile{
dir = 1
},
/obj/effect/mapping_helpers/no_lava,
/obj/machinery/smartfridge/drying_rack/ash,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"EV" = (
/obj/effect/mapping_helpers/no_lava,
/obj/structure/stone_tile{
Expand Down Expand Up @@ -1590,7 +1599,7 @@ ba
bn
bz
ak
cb
BC
df
bX
co
Expand Down
3 changes: 2 additions & 1 deletion code/datums/mapgen/LavalandGenerator.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
/obj/structure/flora/ash/stem_shroom = 2,
/obj/structure/flora/ash/cacti = 1,
/obj/structure/flora/ash/tall_shroom = 2,
/obj/structure/flora/ash/fireblossom = 2
/obj/structure/flora/ash/fireblossom = 2,
/obj/structure/flora/ash/coaltree = 1
)

smoothing_iterations = 50
Expand Down
11 changes: 11 additions & 0 deletions code/game/objects/items/devices/scanners.dm
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,17 @@ REAGENT SCANNER
origin_tech = "magnets=2;biotech=2"
usesound = 'sound/items/deconstruct.ogg'

/obj/item/healthanalyzer/gem_analyzer
name = "eye of health"
icon = 'icons/obj/device.dmi'
icon_state = "Gem_analyzer"
item_state = "gem_analyzer"
desc = "Необычный самоцвет в форме сердца."
origin_tech = null

/obj/item/healthanalyzer/gem_analyzer/attackby(obj/item/I, mob/user, params)
return ATTACK_CHAIN_BLOCKED_ALL

/obj/item/reagent_scanner
name = "reagent scanner"
desc = "A hand-held reagent scanner which identifies chemical agents and blood types."
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/stacks/sheets/leather.dm
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
if(!do_after(user, 5 SECONDS * I.toolspeed, src, category = DA_CAT_TOOL))
return ATTACK_CHAIN_PROCEED
to_chat(user, span_notice("You cut the hair from [src]."))
var/obj/item/stack/sheet/hairlesshide/hide = new(drop_location(), amount)
var/obj/item/stack/sheet/hairlesshide/hide = new(drop_location(), 3 * amount)
hide.add_fingerprint(user)
qdel(src)
return ATTACK_CHAIN_BLOCKED_ALL
Expand Down
200 changes: 200 additions & 0 deletions code/game/objects/items/tent.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
/obj/item/folded_tent
name = "primitive folded tent"
desc = "Сложенная палатка."
icon = 'icons/obj/tent.dmi'
icon_state = "tent_folded"
item_state = "tent_folded"
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
var/unfoldedtent_path = /obj/structure/tent

/obj/item/folded_tent/attack_self(mob/user)
if(!do_after(user, 15 SECONDS, user))
return
if(loc == user)
deploy_tent(user, get_turf(user))
else
deploy_tent(user, get_turf(src))

/obj/item/folded_tent/pickup(mob/user)
if(contains(user))
return FALSE
return ..()

/obj/item/folded_tent/proc/deploy_tent(mob/user, atom/location)
var/obj/structure/tent/item_tent = new unfoldedtent_path(location)
item_tent.foldedtent_instance = src
user.drop_item_ground(src)
move_to_null_space()
return item_tent

/obj/structure/tent
name = "Primitive tent"
desc = "Примитивная палатка, способная защитить от бури. Сделана из шкур голиафов."
icon = 'icons/obj/tent.dmi'
icon_state = "tent"
max_integrity = 50
density = TRUE
anchored = TRUE
var/foldedtent_path = /obj/item/folded_tent
var/obj/item/folded_tent/foldedtent_instance = null
var/mob/living/carbon/human/occupant = null

/obj/structure/tent/proc/perform_fold(mob/living/carbon/human/the_folder)
var/folding_tent = new foldedtent_path(get_turf(src))
the_folder.put_in_hands(folding_tent)

/obj/structure/tent/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params)
if(!do_after(usr, 5 SECONDS, usr))
return

if(over_object == usr && ishuman(usr) && !usr.incapacitated() && !HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) && !length(contents) && usr.Adjacent(src))
usr.visible_message(
span_notice("[usr] folds up [src]."),
span_notice("You fold up [src]."),
)
perform_fold(usr)
qdel(src)
return FALSE

if(over_object == usr && ishuman(usr) && !usr.incapacitated() && usr.Adjacent(src))
if(attempt_fold(usr))
usr.visible_message(
span_notice("[usr] folds up [src]."),
span_notice("You fold up [src]."),
)
perform_fold(usr)
qdel(src)
return FALSE

return ..()

/obj/structure/tent/proc/attempt_fold(mob/living/carbon/human/the_folder)
. = FALSE
if(!istype(the_folder))
return

if(LAZYLEN(contents))
return

return TRUE

/obj/structure/tent/grab_attack(mob/living/grabber, atom/movable/grabbed_thing)
. = TRUE
if(grabber.grab_state < GRAB_AGGRESSIVE || !ismob(grabbed_thing))
return .

var/mob/target = grabbed_thing
if(occupant)
grabber.balloon_alert(grabber, "палатка занята!")
return .

visible_message(span_notice("[grabber] starts putting [target] into [src]."))
if(!do_after(grabber, 2 SECONDS, target) || !target || !grabber || grabber.pulling != target || !grabber.Adjacent(src))
return .

target.forceMove(src)
occupant = target

/obj/structure/tent/MouseDrop_T(atom/movable/O, mob/user, params)
if(O.loc == user)
return

if(user.incapacitated() || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
return

if(get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))
return

if(!ismob(O))
return

if(isanimal(O) || issilicon(O))
return

if(!isturf(user.loc) || !isturf(O.loc))
return

if(occupant)
usr.balloon_alert(usr, "палатка занята!")
return TRUE

var/mob/living/L = O
if(!istype(L) || L.buckled)
return

if(L == user)
visible_message(span_notice("[user] starts climbing into the tent."))
else
visible_message(span_notice("[user] starts putting [L.name] into the tent."))

. = TRUE
INVOKE_ASYNC(src, PROC_REF(put_in), L, user)

/obj/structure/tent/Destroy()
for(var/mob/M in contents)
M.forceMove(get_turf(src))
REMOVE_TRAIT(M, TRAIT_ASHSTORM_IMMUNE, "ash")

return ..()

/obj/structure/tent/proc/put_in(mob/living/L, mob/user)
if(!do_after(user, 2 SECONDS, L))
return

if(occupant)
user.balloon_alert(user, "палатка занята!")
return

if(!L)
return

L.forceMove(src)
occupant = L
ADD_TRAIT(L, TRAIT_ASHSTORM_IMMUNE, "ash")

/obj/structure/tent/verb/move_inside()
set name = "Enter Tent"
set category = "Object"
set src in oview(1)
if(!ishuman(usr) || usr.incapacitated() || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.buckled)
return

if(occupant)
usr.balloon_alert(usr, "палатка занята!")
return

visible_message(span_notice("[usr] starts climbing into the tent."))
put_in(usr, usr)

/obj/structure/tent/verb/eject()
set name = "Eject Tent"
set category = "Object"
set src in oview(1)

if(usr.default_can_use_topic(src) != UI_INTERACTIVE)
return

if(usr.incapacitated() || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED))
return

go_out()
add_fingerprint(usr)

/obj/structure/tent/relaymove(mob/user as mob)
go_out()

/obj/structure/tent/proc/go_out()
if(!occupant)
return

occupant.forceMove(loc)
if(!istype(occupant, /datum/species/unathi/draconid))
REMOVE_TRAIT(occupant, TRAIT_ASHSTORM_IMMUNE, "ash")
occupant = null

/obj/structure/tent/force_eject_occupant(mob/target)
go_out()

/obj/structure/tent/attack_ai(mob/user)
return attack_hand(user)
2 changes: 1 addition & 1 deletion code/game/objects/items/weapons/shields.dm
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
item_state = "goliath_shield"
materials = list()
origin_tech = "materials=1;combat=3;biotech=2"
block_chance = 30
block_chance = 45
obj_integrity = 380
max_integrity = 380

Expand Down
26 changes: 26 additions & 0 deletions code/game/objects/items/weapons/weaponry.dm
Original file line number Diff line number Diff line change
Expand Up @@ -450,3 +450,29 @@
w_class = WEIGHT_CLASS_BULKY
block_chance = 30

/obj/item/kolotushka
name = "primitive kolotushka"
desc = "Простейшая дубина из кости, воплощает в себе силу природы и первобытную мощь."
icon_state = "kolotushka"
item_state = "kolotushka"
hitsound = 'sound/weapons/kolotushka_smash.ogg'
slot_flags = ITEM_SLOT_BELT
force = 3
throwforce = 3
w_class = WEIGHT_CLASS_NORMAL
var/stamina_damage = 22

/obj/item/kolotushka/afterattack(atom/target, mob/user, proximity, params, status)
if(!isliving(target) || !proximity || user.incapacitated() || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
return

var/mob/living/victim = target
if(isrobot(victim))
if(prob(30))
victim.flash_eyes(3 SECONDS)
victim.Stun(3 SECONDS)

if(ishuman(victim))
victim.apply_damage(stamina_damage, STAMINA, blocked = victim.getarmor(user.zone_selected, MELEE))
if(prob(30))
victim.Knockdown(3 SECONDS)
24 changes: 24 additions & 0 deletions code/game/objects/structures/watercloset.dm
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,14 @@
can_rotate = 0
resistance_flags = UNACIDABLE

/obj/structure/sink/puddle/Initialize(mapload)
. = ..()

var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
)
AddElement(/datum/element/connect_loc, loc_connections)


/obj/structure/sink/puddle/attack_hand(mob/user)
flick("puddle-splash", src)
Expand Down Expand Up @@ -731,6 +739,22 @@

return ..()

/obj/structure/sink/puddle/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
SIGNAL_HANDLER
wash(arrived)

/obj/structure/sink/puddle/proc/wash(atom/target)
if(isitem(target))
var/obj/item/item = target
item.extinguish()

if(isliving(target))
var/mob/living/l_target = target
l_target.ExtinguishMob()
l_target.adjust_fire_stacks(-20)
to_chat(l_target, span_warning("You've been drenched in water!"))

target.clean_blood()

//////////////////////////////////
// Bathroom Fixture Items //
Expand Down
Loading

0 comments on commit 1a87daf

Please sign in to comment.