diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 656b0dff2ab..821576a29bc 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -53,13 +53,14 @@ #define LANGUAGE_AKHANI "Akhani" #define LANGUAGE_ALAI "Alai" #define LANGUAGE_ZADDAT "Vedahq" +#define LANGUAGE_PROMETHEAN "Promethean" #define LANGUAGE_BLOB "Blob" #define LANGUAGE_GIBBERISH "Babel" // Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. #define RESTRICTED 2 // Language can only be acquired by spawning or an admin. -#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight. +#define NONVERBAL 4 // Language uses both verbal and non-verbal components completely to communicate. Out-of-sight speech is garbled. #define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand. #define HIVEMIND 16 // Broadcast to all mobs with this language. #define NONGLOBAL 32 // Do not add to general languages list. diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm index 3ed884316a2..8b853aed632 100644 --- a/code/datums/uplink/ammunition.dm +++ b/code/datums/uplink/ammunition.dm @@ -65,6 +65,10 @@ name = "Anti-Materiel Rifle ammo box (14.5mm)" path = /obj/item/weapon/storage/box/sniperammo +/datum/uplink_item/item/ammo/sniperammo_highvel + name = "Anti-Materiel Rifle ammo box (14.5mm sabot)" + path = /obj/item/weapon/storage/box/sniperammo/highvel + /datum/uplink_item/item/ammo/c545 name = "Rifle Magazine (5.45mm)" path = /obj/item/ammo_magazine/m545 diff --git a/code/datums/uplink/medical_vr.dm b/code/datums/uplink/medical_vr.dm index cb6c9e62312..17a3ddf33a1 100644 --- a/code/datums/uplink/medical_vr.dm +++ b/code/datums/uplink/medical_vr.dm @@ -1,6 +1,26 @@ /********** * Medical * **********/ +/datum/uplink_item/item/medical/fire + name = "Fire medical kit" + item_cost = 10 + path = /obj/item/weapon/storage/firstaid/fire + +/datum/uplink_item/item/medical/toxin + name = "Toxin medical kit" + item_cost = 10 + path = /obj/item/weapon/storage/firstaid/toxin + +/datum/uplink_item/item/medical/o2 + name = "Oxygen medical kit" + item_cost = 10 + path = /obj/item/weapon/storage/firstaid/o2 + +/datum/uplink_item/item/medical/adv + name = "Advanced medical kit" + item_cost = 10 + path = /obj/item/weapon/storage/firstaid/adv + /datum/uplink_item/item/medical/mre name = "Meal, Ready to eat (Random)" item_cost = 5 @@ -26,6 +46,11 @@ item_cost = 5 path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity +/datum/uplink_item/item/medical/pain + name = "Pain injector" + item_cost = 5 + path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain + /datum/uplink_item/item/medical/brute name = "Brute injector" item_cost = 5 @@ -46,6 +71,11 @@ item_cost = 5 path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy +/datum/uplink_item/item/medical/organ + name = "Organ Repair injector" + item_cost = 10 + path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ + /datum/uplink_item/item/medical/nanites name = "Healing Nanite pill bottle" item_cost = 30 diff --git a/code/datums/uplink/tools_vr.dm b/code/datums/uplink/tools_vr.dm index 5a165f7aacc..34794c5cdf6 100644 --- a/code/datums/uplink/tools_vr.dm +++ b/code/datums/uplink/tools_vr.dm @@ -26,6 +26,11 @@ item_cost = 20 path = /obj/item/modular_computer/laptop/preset/custom_loadout/elite +/datum/uplink_item/item/tools/inducer + name = "Inducer" + item_cost = 20 + path = /obj/item/weapon/inducer/syndicate + /datum/uplink_item/item/tools/luxurycapsule name = "Survival Capsule (Luxury)" item_cost = 40 @@ -36,6 +41,11 @@ item_cost = 40 path = /obj/item/device/perfect_tele +/datum/uplink_item/item/tools/uav + name = "Recon Skimmer" + item_cost = 40 + path = /obj/item/device/uav + /datum/uplink_item/item/tools/barcapsule name = "Survival Capsule (Bar)" item_cost = 80 diff --git a/code/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm index d8b0821a4d4..d0cb3dce97a 100644 --- a/code/game/objects/effects/alien/aliens.dm +++ b/code/game/objects/effects/alien/aliens.dm @@ -160,18 +160,30 @@ #define WEED_NODE_BASE "nodebase" /obj/effect/alien/weeds - name = "weeds" - desc = "Weird purple weeds." + name = "growth" + desc = "Weird organic growth." icon_state = "weeds" - anchored = 1 density = 0 plane = TURF_PLANE layer = ABOVE_TURF_LAYER + var/health = 15 var/obj/effect/alien/weeds/node/linked_node = null var/static/list/weedImageCache +/obj/effect/alien/weeds/Initialize(var/mapload, node) + . = ..() + if(isspace(loc)) + return INITIALIZE_HINT_QDEL + + linked_node = node + + if(icon_state == "weeds") + icon_state = pick("weeds", "weeds1", "weeds2") + + fullUpdateWeedOverlays() + /obj/effect/alien/weeds/Destroy() var/turf/T = get_turf(src) // To not mess up the overlay updates. @@ -181,50 +193,41 @@ W.updateWeedOverlays() linked_node = null - ..() + return ..() /obj/effect/alien/weeds/node icon_state = "weednode" - name = "purple sac" - desc = "Weird purple octopus-like thing." + name = "glowing growth" + desc = "Weird glowing organic growth." layer = ABOVE_TURF_LAYER+0.01 light_range = NODERANGE + var/node_range = NODERANGE - var/set_color = null -/obj/effect/alien/weeds/node/New() - ..(src.loc, src) +/obj/effect/alien/weeds/node/Initialize(var/mapload, var/newcolor = "#321D37") + . = ..() -/obj/effect/alien/weeds/node/Initialize() - ..() - START_PROCESSING(SSobj, src) + for(var/obj/effect/alien/weeds/existing in loc) + if(existing == src) + continue + else + qdel(existing) - spawn(1 SECOND) - if(color) - set_color = color + if(newcolor) + set_color = newcolor + + START_PROCESSING(SSobj, src) // Only the node processes in a subsystem, the rest are process()'d by the node /obj/effect/alien/weeds/node/Destroy() STOP_PROCESSING(SSobj, src) - ..() - -/obj/effect/alien/weeds/New(pos, node) - ..() - if(istype(loc, /turf/space)) - qdel(src) - return - linked_node = node - if(icon_state == "weeds")icon_state = pick("weeds", "weeds1", "weeds2") - - fullUpdateWeedOverlays() + return ..() /obj/effect/alien/weeds/proc/updateWeedOverlays() + cut_overlays() - overlays.Cut() - - if(!weedImageCache || !weedImageCache.len) + if(!weedImageCache) weedImageCache = list() -// weedImageCache.len = 4 weedImageCache[WEED_NORTH_EDGING] = image('icons/mob/alien.dmi', "weeds_side_n", layer=2.11, pixel_y = -32) weedImageCache[WEED_SOUTH_EDGING] = image('icons/mob/alien.dmi', "weeds_side_s", layer=2.11, pixel_y = 32) weedImageCache[WEED_EAST_EDGING] = image('icons/mob/alien.dmi', "weeds_side_e", layer=2.11, pixel_x = -32) @@ -234,18 +237,14 @@ var/turf/S = get_step(src, SOUTH) var/turf/E = get_step(src, EAST) var/turf/W = get_step(src, WEST) - if(!locate(/obj/effect/alien) in N.contents) - if(istype(N, /turf/simulated/floor)) - overlays += weedImageCache[WEED_SOUTH_EDGING] - if(!locate(/obj/effect/alien) in S.contents) - if(istype(S, /turf/simulated/floor)) - overlays += weedImageCache[WEED_NORTH_EDGING] - if(!locate(/obj/effect/alien) in E.contents) - if(istype(E, /turf/simulated/floor)) - overlays += weedImageCache[WEED_WEST_EDGING] - if(!locate(/obj/effect/alien) in W.contents) - if(istype(W, /turf/simulated/floor)) - overlays += weedImageCache[WEED_EAST_EDGING] + if(istype(N, /turf/simulated/floor) && !locate(/obj/effect/alien) in N.contents) + add_overlay(weedImageCache[WEED_SOUTH_EDGING]) + if(istype(S, /turf/simulated/floor) && !locate(/obj/effect/alien) in S.contents) + add_overlay(weedImageCache[WEED_NORTH_EDGING]) + if(istype(E, /turf/simulated/floor) && !locate(/obj/effect/alien) in E.contents) + add_overlay(weedImageCache[WEED_WEST_EDGING]) + if(istype(W, /turf/simulated/floor) && !locate(/obj/effect/alien) in W.contents) + add_overlay(weedImageCache[WEED_EAST_EDGING]) /obj/effect/alien/weeds/proc/fullUpdateWeedOverlays() for (var/obj/effect/alien/weeds/W in range(1,src)) @@ -253,70 +252,53 @@ return +// NB: This is not actually called by a processing subsystem, it's called by the node processing /obj/effect/alien/weeds/process() set background = 1 var/turf/U = get_turf(src) -/* - if (locate(/obj/movable, U)) - U = locate(/obj/movable, U) - if(U.density == 1) - qdel(src) - return -Alien plants should do something if theres a lot of poison - if(U.poison> 200000) - health -= round(U.poison/200000) - update() - return -*/ - if (istype(U, /turf/space)) + + if(isspace(U)) qdel(src) return - if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) ) + if(!linked_node) + crash_with("Weeds somehow called process() with null linked_node") return - if(linked_node != src) - color = linked_node.set_color + if(get_dist(linked_node, src) > linked_node.node_range) + return - direction_loop: - for(var/dirn in cardinal) - var/turf/T = get_step(src, dirn) + for(var/dirn in cardinal) + var/turf/T1 = get_turf(src) + var/turf/T2 = get_step(src, dirn) - if (!istype(T) || T.density || locate(/obj/effect/alien/weeds) in T || istype(T.loc, /area/arrival) || istype(T, /turf/space)) - continue + if(!istype(T2) || locate(/obj/effect/alien/weeds) in T2 || istype(T2.loc, /area/arrival) || isspace(T2)) + continue - // if (locate(/obj/movable, T)) // don't propogate into movables - // continue + if(T1.c_airblock(T2) == BLOCKED) + continue - for(var/obj/O in T) - if(!O.CanZASPass(U)) - continue direction_loop + var/obj/effect/E = new /obj/effect/alien/weeds(T2, linked_node) + E.color = color - var/obj/effect/E = new /obj/effect/alien/weeds(T, linked_node) +/obj/effect/alien/weeds/node/process() + set background = 1 + . = ..() - E.color = color + var/list/nearby_weeds = list() + for(var/obj/effect/alien/weeds/W in orange(node_range, src)) + nearby_weeds |= W - if(istype(src, /obj/effect/alien/weeds/node)) - var/obj/effect/alien/weeds/node/N = src - var/list/nearby_weeds = list() - for(var/obj/effect/alien/weeds/W in range(N.node_range,src)) - nearby_weeds |= W + for(var/nbw in nearby_weeds) + var/obj/effect/alien/weeds/W = nbw - for(var/obj/effect/alien/weeds/W in nearby_weeds) - if(!W) - continue + if(!W.linked_node) + W.linked_node = src - if(!W.linked_node) - W.linked_node = src - - W.color = W.linked_node.set_color - - if(W == src) - continue - - if(prob(max(10, 40 - (5 * nearby_weeds.len)))) - W.process() + W.color = W.linked_node.set_color + if(prob(max(10, 40 - (5 * nearby_weeds.len)))) + W.process() /obj/effect/alien/weeds/ex_act(severity) switch(severity) diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index d4f65fc9d10..e48606a2acd 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -74,7 +74,7 @@ light_power = 0.5 light_color = "#8837A3" -/obj/effect/projectile/tungsten/impact +/obj/effect/projectile/impact/tungsten icon_state = "impact_mhd_laser" light_range = 4 light_power = 3 diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm index d901aeaa612..a5c70aab2c2 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm @@ -86,7 +86,7 @@ light_power = 0.5 light_color = "#FF0D00" -/obj/effect/projectile/tungsten/muzzle +/obj/effect/projectile/muzzle/tungsten icon_state = "muzzle_mhd_laser" light_range = 4 light_power = 3 diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 59d56b6c7c4..4326bc536d6 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -109,12 +109,18 @@ light_power = 0.5 light_color = "#0066FF" -/obj/effect/projectile/tungsten/tracer +/obj/effect/projectile/tracer/tungsten icon_state = "mhd_laser" light_range = 4 light_power = 3 light_color = "#3300ff" +/obj/effect/projectile/tracer/cannon + icon_state = "cannon" + light_range = 1 + light_power = 0.5 + light_color = "#f6f2b6" + //VOREStation edit: medigun /obj/effect/projectile/tracer/medigun icon = 'icons/obj/projectiles_vr.dmi' @@ -122,4 +128,4 @@ light_range = 2 light_power = 0.5 light_color = "#80F5FF" -//VOREStation edit ends \ No newline at end of file +//VOREStation edit ends diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index b0be23eb3f2..8f300aaaf78 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -418,7 +418,7 @@ . = ..() if(.) - user.visible_message("[user] cracks and shakes the glowstick.", "You crack and shake the glowstick, turning it on!") + user.visible_message("[user] cracks and shakes \the [name].", "You crack and shake \the [src], turning it on!") START_PROCESSING(SSobj, src) /obj/item/device/flashlight/glowstick/red diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 317920e5dc2..f431bc74fe6 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -142,6 +142,10 @@ if(O) gather_all(get_turf(src), user) +/obj/item/weapon/storage/bag/ore/proc/rangedload(atom/A, mob/user) + var/obj/item/weapon/ore/O = locate() in get_turf(A) + if(O) + gather_all(get_turf(A), user) /obj/item/weapon/storage/bag/ore/examine(mob/user) . = ..() diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 346f8baa655..5128657811c 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -204,6 +204,11 @@ desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." starts_with = list(/obj/item/ammo_casing/a145 = 7) +/obj/item/weapon/storage/box/sniperammo/highvel + name = "box of 14.5mm sabot shells" + desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." + starts_with = list(/obj/item/ammo_casing/a145/highvel = 7) + /obj/item/weapon/storage/box/flashbangs name = "box of flashbangs (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." diff --git a/code/game/objects/random/guns_and_ammo.dm b/code/game/objects/random/guns_and_ammo.dm index 62dde5a3df0..a3411ef6fed 100644 --- a/code/game/objects/random/guns_and_ammo.dm +++ b/code/game/objects/random/guns_and_ammo.dm @@ -400,4 +400,136 @@ /obj/item/weapon/gun/projectile/shotgun/pump/combat, /obj/item/weapon/storage/box/shotgunammo ) - ) \ No newline at end of file + ) + +// Not strictly a gun, but is used in PoIs to spawn the dropped guns of mercs, or a busted version. +/obj/random/projectile/scrapped_gun + name = "broken gun spawner" + desc = "Spawns a random broken gun, or rarely a fully functional one." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_gun/item_to_spawn() + return pickweight(list( + /obj/random/projectile/scrapped_pistol = 10, + /obj/random/projectile/scrapped_smg = 5, + /obj/random/projectile/scrapped_laser = 5, + /obj/random/projectile/scrapped_shotgun = 3, + /obj/random/projectile/scrapped_ionrifle = 3, + /obj/random/projectile/scrapped_bulldog = 1, + /obj/random/projectile/scrapped_flechette = 1, + /obj/random/projectile/scrapped_grenadelauncher = 1, + /obj/random/projectile/scrapped_dartgun = 1 + )) + +/obj/random/projectile/scrapped_shotgun + name = "broken shotgun spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "shotgun" + +/obj/random/projectile/scrapped_shotgun/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/pumpshotgun = 10, + /obj/item/weapon/broken_gun/pumpshotgun_combat = 5, + /obj/item/weapon/gun/projectile/shotgun/pump = 3, + /obj/item/weapon/gun/projectile/shotgun/pump/combat = 1 + )) + +/obj/random/projectile/scrapped_smg + name = "broken smg spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_smg/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/c20r = 10, + /obj/item/weapon/gun/projectile/automatic/c20r = 3 + )) + +/obj/random/projectile/scrapped_pistol + name = "broken pistol spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_pistol/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/silenced45 = 10, + /obj/item/weapon/gun/projectile/silenced = 3 + )) + +/obj/random/projectile/scrapped_laser + name = "broken laser spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_laser/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/laserrifle = 10, + /obj/item/weapon/broken_gun/laser_retro = 5, + /obj/item/weapon/gun/energy/laser = 3, + /obj/item/weapon/gun/energy/retro = 1 + )) + +/obj/random/projectile/scrapped_ionrifle + name = "broken ionrifle spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_ionrifle/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/ionrifle = 10, + /obj/item/weapon/gun/energy/ionrifle = 3 + )) + +/obj/random/projectile/scrapped_bulldog + name = "broken z8 spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_bulldog/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/z8 = 10, + /obj/item/weapon/gun/projectile/automatic/z8 = 3 + )) + +/obj/random/projectile/scrapped_flechette + name = "broken flechette spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_flechette/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/flechette = 10, + /obj/item/weapon/gun/magnetic/railgun/flechette = 3 + )) + +/obj/random/projectile/scrapped_grenadelauncher + name = "broken grenadelauncher spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_grenadelauncher/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/grenadelauncher = 10, + /obj/item/weapon/gun/launcher/grenade = 3 + )) + +/obj/random/projectile/scrapped_dartgun + name = "broken dartgun spawner" + desc = "Loot for PoIs, or their mobs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/scrapped_dartgun/item_to_spawn() + return pickweight(list( + /obj/item/weapon/broken_gun/dartgun = 10, + /obj/item/weapon/gun/projectile/dartgun = 3 + )) diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 2c97432955e..fe53d2ef554 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -711,3 +711,16 @@ /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/purple, /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/grey, /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/brown) + +/obj/random/thermalponcho + name = "random thermal poncho" + desc = "This is a thermal poncho spawn." + icon = 'icons/obj/clothing/ties.dmi' + icon_state = "classicponcho" + +/obj/random/thermalponcho/item_to_spawn() + return pick(prob(5);/obj/item/clothing/accessory/poncho/thermal, + prob(3);/obj/item/clothing/accessory/poncho/thermal/red, + prob(3);/obj/item/clothing/accessory/poncho/thermal/green, + prob(3);/obj/item/clothing/accessory/poncho/thermal/purple, + prob(3);/obj/item/clothing/accessory/poncho/thermal/blue) diff --git a/code/game/objects/random/mob.dm b/code/game/objects/random/mob.dm index 430c8235c91..ac89272f529 100644 --- a/code/game/objects/random/mob.dm +++ b/code/game/objects/random/mob.dm @@ -104,6 +104,15 @@ prob(33);/mob/living/simple_mob/animal/giant_spider/frost, prob(45);/mob/living/simple_mob/animal/sif/shantak) +/obj/random/mob/sif/kururak + name = "Random Kururak" + desc = "This is a random kururak, either waking or hibernating. Will be hostile if more than one are waking." + icon_state = "frost" + +/obj/random/mob/sif/kururak/item_to_spawn() + return pick(prob(1);/mob/living/simple_mob/animal/sif/kururak/hibernate, + prob(20);/mob/living/simple_mob/animal/sif/kururak) + /obj/random/mob/spider name = "Random Spider" //Spiders should patrol where they spawn. desc = "This is a random boring spider." @@ -163,6 +172,7 @@ /obj/random/mob/robotic/item_to_spawn() //Hivebots have a total number of 'lots' equal to the lesser drone, at 60. return pick(prob(60);/mob/living/simple_mob/mechanical/combat_drone/lesser, prob(50);/mob/living/simple_mob/mechanical/combat_drone, + prob(50);/mob/living/simple_mob/mechanical/mining_drone, prob(15);/mob/living/simple_mob/mechanical/mecha/ripley, prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus, prob(10);/mob/living/simple_mob/mechanical/hivebot, @@ -174,6 +184,25 @@ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong, prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard) +/obj/random/mob/robotic/drone + name = "Random Drone" + desc = "This is a random drone." + icon_state = "drone_dead" + + overwrite_hostility = 1 + + mob_faction = "malf_drone" + mob_returns_home = 1 + mob_wander = 1 + mob_wander_distance = 5 + mob_hostile = 1 + mob_retaliate = 1 + +/obj/random/mob/robotic/drone/item_to_spawn() + return pick(prob(6);/mob/living/simple_mob/mechanical/combat_drone/lesser, + prob(1);/mob/living/simple_mob/mechanical/combat_drone, + prob(3);/mob/living/simple_mob/mechanical/mining_drone) + /obj/random/mob/robotic/hivebot name = "Random Hivebot" desc = "This is a random hivebot." diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 9257c2d3a34..7ea80de7ff8 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -161,4 +161,7 @@ var/datum/gas_mixture/above_air = return_air() grave_breath.adjust_gas(gasid, BREATH_MOLES) grave_breath.temperature = (above_air.temperature) - 30 //Underground - return grave_breath \ No newline at end of file + return grave_breath + +/obj/structure/closet/grave/dirthole + name = "hole" diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora/flora.dm similarity index 92% rename from code/game/objects/structures/flora.dm rename to code/game/objects/structures/flora/flora.dm index 1b5548cdb4a..a0f2c8c307d 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora/flora.dm @@ -1,478 +1,493 @@ - -/obj/structure/flora - name = "flora" - desc = "A perfectly generic plant." - - anchored = TRUE // Usually, plants don't move. Usually. - plane = DECAL_PLANE - layer = BELOW_MOB_LAYER - - var/randomize_size = FALSE - var/max_x_scale = 1.25 - var/max_y_scale = 1.25 - var/min_x_scale = 0.9 - var/min_y_scale = 0.9 - - var/harvest_tool = null // The type of item used to harvest the plant. - var/harvest_count = 0 - - var/randomize_harvest_count = TRUE - var/max_harvests = 0 - var/min_harvests = -1 - var/list/harvest_loot = null // Should be an associative list for things to spawn, and their weights. An example would be a branch from a tree. - -/obj/structure/flora/Initialize() - ..() - - if(randomize_size) - icon_scale_x = rand(min_x_scale * 100, max_x_scale * 100) / 100 - icon_scale_y = rand(min_y_scale * 100, max_y_scale * 100) / 100 - - if(prob(50)) - icon_scale_x *= -1 - update_transform() - - if(randomize_harvest_count) - max_harvests = max(0, rand(min_harvests, max_harvests)) // Incase you want to weight it more toward 'not harvestable', set min_harvests to a negative value. - -/obj/structure/flora/examine(mob/user) - . = ..() - if(harvest_count < max_harvests) - . += "It seems to have something hanging from it." - -/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user) - if(can_harvest(W)) - var/harvest_spawn = pickweight(harvest_loot) - var/atom/movable/AM = spawn_harvest(harvest_spawn, user) - - if(!AM) - to_chat(user, "You fail to harvest anything from \the [src].") - - else - to_chat(user, "You harvest \the [AM] from \the [src].") - return - - ..(W, user) - -/obj/structure/flora/proc/can_harvest(var/obj/item/I) - . = FALSE - if(harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests) - . = TRUE - return . - -/obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null) - if(!ispath(path)) - return 0 - var/turf/Target = get_turf(src) - if(user) - Target = get_turf(user) - - var/atom/movable/AM = new path(Target) - - harvest_count++ - return AM - -//bushes -/obj/structure/flora/bush - name = "bush" - icon = 'icons/obj/flora/snowflora.dmi' - icon_state = "snowbush1" - -/obj/structure/flora/bush/New() - ..() - icon_state = "snowbush[rand(1, 6)]" - -/obj/structure/flora/pottedplant - name = "potted plant" - desc = "Really ties the room together." - icon = 'icons/obj/plants.dmi' - icon_state = "plant-26" - - anchored = FALSE - -//newbushes - -/obj/structure/flora/ausbushes - name = "bush" - icon = 'icons/obj/flora/ausflora.dmi' - icon_state = "firstbush_1" - -/obj/structure/flora/ausbushes/New() - ..() - icon_state = "firstbush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/reedbush - icon_state = "reedbush_1" - -/obj/structure/flora/ausbushes/reedbush/New() - ..() - icon_state = "reedbush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/leafybush - icon_state = "leafybush_1" - -/obj/structure/flora/ausbushes/leafybush/New() - ..() - icon_state = "leafybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/palebush - icon_state = "palebush_1" - -/obj/structure/flora/ausbushes/palebush/New() - ..() - icon_state = "palebush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/stalkybush - icon_state = "stalkybush_1" - -/obj/structure/flora/ausbushes/stalkybush/New() - ..() - icon_state = "stalkybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/grassybush - icon_state = "grassybush_1" - -/obj/structure/flora/ausbushes/grassybush/New() - ..() - icon_state = "grassybush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/fernybush - icon_state = "fernybush_1" - -/obj/structure/flora/ausbushes/fernybush/New() - ..() - icon_state = "fernybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/sunnybush - icon_state = "sunnybush_1" - -/obj/structure/flora/ausbushes/sunnybush/New() - ..() - icon_state = "sunnybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/genericbush - icon_state = "genericbush_1" - -/obj/structure/flora/ausbushes/genericbush/New() - ..() - icon_state = "genericbush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/pointybush - icon_state = "pointybush_1" - -/obj/structure/flora/ausbushes/pointybush/New() - ..() - icon_state = "pointybush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/lavendergrass - icon_state = "lavendergrass_1" - -/obj/structure/flora/ausbushes/lavendergrass/New() - ..() - icon_state = "lavendergrass_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/ywflowers - icon_state = "ywflowers_1" - -/obj/structure/flora/ausbushes/ywflowers/New() - ..() - icon_state = "ywflowers_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/brflowers - icon_state = "brflowers_1" - -/obj/structure/flora/ausbushes/brflowers/New() - ..() - icon_state = "brflowers_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/ppflowers - icon_state = "ppflowers_1" - -/obj/structure/flora/ausbushes/ppflowers/New() - ..() - icon_state = "ppflowers_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/sparsegrass - icon_state = "sparsegrass_1" - -/obj/structure/flora/ausbushes/sparsegrass/New() - ..() - icon_state = "sparsegrass_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/fullgrass - icon_state = "fullgrass_1" - -/obj/structure/flora/ausbushes/fullgrass/New() - ..() - icon_state = "fullgrass_[rand(1, 3)]" - -/obj/structure/flora/skeleton - name = "hanging skeleton model" - icon = 'icons/obj/plants.dmi' //what an interesting plant - icon_state = "hangskele" - desc = "It's an anatomical model of a human skeletal system made of plaster." - - plane = OBJ_PLANE - -//potted plants credit: Flashkirby -/obj/structure/flora/pottedplant - name = "potted plant" - desc = "Really brings the room together." - icon = 'icons/obj/plants.dmi' - icon_state = "plant-01" - - plane = OBJ_PLANE - var/obj/item/stored_item - -/obj/structure/flora/pottedplant/examine(mob/user) - . = ..() - if(in_range(user, src) && stored_item) - . += "You can see something in there..." - -/obj/structure/flora/pottedplant/attackby(obj/item/I, mob/user) - if(stored_item) - to_chat(user, "[I] won't fit in. There already appears to be something in here...") - return - - if(I.w_class > ITEMSIZE_TINY) - to_chat(user, "[I] is too big to fit inside [src].") - return - - if(do_after(user, 10)) - user.drop_from_inventory(I, src) - I.forceMove(src) - stored_item = I - src.visible_message("\icon[src] \icon[I] [user] places [I] into [src].") - return - else - to_chat(user, "You refrain from putting things into the plant pot.") - return - - ..() - -/obj/structure/flora/pottedplant/attack_hand(mob/user) - if(!stored_item) - to_chat(user, "You see nothing of interest in [src]...") - else - if(do_after(user, 10)) - to_chat(user, "You find \icon[stored_item] [stored_item] in [src]!") - stored_item.forceMove(get_turf(src)) - stored_item = null - ..() - - -/obj/structure/flora/pottedplant/large - name = "large potted plant" - desc = "This is a large plant. Three branches support pairs of waxy leaves." - icon_state = "plant-26" - -/obj/structure/flora/pottedplant/fern - name = "potted fern" - desc = "This is an ordinary looking fern. It looks like it could do with some water." - icon_state = "plant-02" - -/obj/structure/flora/pottedplant/overgrown - name = "overgrown potted plants" - desc = "This is an assortment of colourful plants. Some parts are overgrown." - icon_state = "plant-03" - -/obj/structure/flora/pottedplant/bamboo - name = "potted bamboo" - desc = "These are bamboo shoots. The tops looks like they've been cut short." - icon_state = "plant-04" - -/obj/structure/flora/pottedplant/largebush - name = "large potted bush" - desc = "This is a large bush. The leaves stick upwards in an odd fashion." - icon_state = "plant-05" - -/obj/structure/flora/pottedplant/thinbush - name = "thin potted bush" - desc = "This is a thin bush. It appears to be flowering." - icon_state = "plant-06" - -/obj/structure/flora/pottedplant/mysterious - name = "mysterious potted bulbs" - desc = "This is a mysterious looking plant. Touching the bulbs cause them to shrink." - icon_state = "plant-07" - catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs) - -/obj/structure/flora/pottedplant/smalltree - name = "small potted tree" - desc = "This is a small tree. It is rather pleasant." - icon_state = "plant-08" - -/obj/structure/flora/pottedplant/unusual - name = "unusual potted plant" - desc = "This is an unusual plant. It's bulbous ends emit a soft blue light." - icon_state = "plant-09" - light_range = 2 - light_power = 0.6 - light_color = "#33CCFF" - catalogue_data = list(/datum/category_item/catalogue/flora/sif_tree) - -/obj/structure/flora/pottedplant/orientaltree - name = "potted oriental tree" - desc = "This is a rather oriental style tree. Its flowers are bright pink." - icon_state = "plant-10" - -/obj/structure/flora/pottedplant/smallcactus - name = "small potted cactus" - desc = "This is a small cactus. Its needles are sharp." - icon_state = "plant-11" - -/obj/structure/flora/pottedplant/tall - name = "tall potted plant" - desc = "This is a tall plant. Tiny pores line its surface." - icon_state = "plant-12" - -/obj/structure/flora/pottedplant/sticky - name = "sticky potted plant" - desc = "This is an odd plant. Its sticky leaves trap insects." - icon_state = "plant-13" - -/obj/structure/flora/pottedplant/smelly - name = "smelly potted plant" - desc = "This is some kind of tropical plant. It reeks of rotten eggs." - icon_state = "plant-14" - -/obj/structure/flora/pottedplant/small - name = "small potted plant" - desc = "This is a pot of assorted small flora. Some look familiar." - icon_state = "plant-15" - -/obj/structure/flora/pottedplant/aquatic - name = "aquatic potted plant" - desc = "This is apparently an aquatic plant. It's probably fake." - icon_state = "plant-16" - -/obj/structure/flora/pottedplant/shoot - name = "small potted shoot" - desc = "This is a small shoot. It still needs time to grow." - icon_state = "plant-17" - -/obj/structure/flora/pottedplant/flower - name = "potted flower" - desc = "This is a slim plant. Sweet smelling flowers are supported by spindly stems." - icon_state = "plant-18" - -/obj/structure/flora/pottedplant/crystal - name = "crystalline potted plant" - desc = "These are rather cubic plants. Odd crystal formations grow on the end." - icon_state = "plant-19" - -/obj/structure/flora/pottedplant/subterranean - name = "subterranean potted plant" - desc = "This is a subterranean plant. It's bulbous ends glow faintly." - icon_state = "plant-20" - light_range = 2 - light_power = 0.6 - light_color = "#FF6633" - -/obj/structure/flora/pottedplant/minitree - name = "potted tree" - desc = "This is a miniature tree. Apparently it was grown to 1/5 scale." - icon_state = "plant-21" - -/obj/structure/flora/pottedplant/stoutbush - name = "stout potted bush" - desc = "This is a stout bush. Its leaves point up and outwards." - icon_state = "plant-22" - -/obj/structure/flora/pottedplant/drooping - name = "drooping potted plant" - desc = "This is a small plant. The drooping leaves make it look like its wilted." - icon_state = "plant-23" - -/obj/structure/flora/pottedplant/tropical - name = "tropical potted plant" - desc = "This is some kind of tropical plant. It hasn't begun to flower yet." - icon_state = "plant-24" - -/obj/structure/flora/pottedplant/dead - name = "dead potted plant" - desc = "This is the dried up remains of a dead plant. Someone should replace it." - icon_state = "plant-25" - -/obj/structure/flora/pottedplant/decorative - name = "decorative potted plant" - desc = "This is a decorative shrub. It's been trimmed into the shape of an apple." - icon_state = "applebush" - -/obj/structure/flora/pottedplant/xmas - name = "small christmas tree" - desc = "This is a tiny well lit decorative christmas tree." - icon_state = "plant-xmas" - -/obj/structure/flora/sif - icon = 'icons/obj/flora/sifflora.dmi' - -/obj/structure/flora/sif/attack_hand(mob/user) - if (user.a_intent == I_HURT) - if(do_after(user, 5 SECONDS)) - user.visible_message("\The [user] digs up \the [src.name].", "You dig up \the [src.name].") - qdel(src) - else - user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].") - -/datum/category_item/catalogue/flora/subterranean_bulbs - name = "Sivian Flora - Subterranean Bulbs" - desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \ - are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \ - known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \ - it to spread much farther than before, with the assistance of humans.\ -

\ - In Sif's early history, Sivian settlers found this plant while they were establishing mines. Their ability \ - to emit low, but consistant amounts of light made them desirable to the settlers. They would often cultivate \ - this plant inside man-made tunnels and mines to act as a backup source of light that would not need \ - electricity. This technique has saved many lost miners, and this practice continues to this day." - value = CATALOGUER_REWARD_EASY - -/obj/structure/flora/sif/subterranean - name = "subterranean plant" - desc = "This is a subterranean plant. It's bulbous ends glow faintly." - icon_state = "glowplant" - light_range = 2 - light_power = 0.6 - light_color = "#FF6633" - catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs) - -/obj/structure/flora/sif/subterranean/Initialize() - icon_state = "[initial(icon_state)][rand(1,2)]" - . = ..() - - -/datum/category_item/catalogue/flora/eyebulbs - name = "Sivian Flora - Eyebulbs" - desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \ - eyes, which shrink when touched. One theory is that the bulbs are a result of mimicry, appearing as eyeballs to protect from predators.

\ - These plants have no known use." - value = CATALOGUER_REWARD_EASY - -/obj/structure/flora/sif/eyes - name = "mysterious bulbs" - desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy." - icon_state = "eyeplant" - catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs) - -/obj/structure/flora/sif/eyes/Initialize() - icon_state = "[initial(icon_state)][rand(1,3)]" - . = ..() - -/datum/category_item/catalogue/flora/mosstendrils - name = "Sivian Flora - Moss Stalks" - desc = "A plant native to Sif. The plant is most closely related to the common, dense moss found covering Sif's terrain. \ - It has evolved a method of camouflage utilizing white hairs on its dorsal sides to make it appear as a small mound of snow from \ - above. It has no known use, though it is a common furnishing in contemporary homes." - value = CATALOGUER_REWARD_TRIVIAL - -/obj/structure/flora/sif/tendrils - name = "stocky tendrils" - desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow." - icon_state = "grass" - randomize_size = TRUE - catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils) - -/obj/structure/flora/sif/tendrils/Initialize() - icon_state = "[initial(icon_state)][rand(1,3)]" - . = ..() + +/obj/structure/flora + name = "flora" + desc = "A perfectly generic plant." + + anchored = TRUE // Usually, plants don't move. Usually. + plane = DECAL_PLANE + layer = BELOW_MOB_LAYER + + var/randomize_size = FALSE + var/max_x_scale = 1.25 + var/max_y_scale = 1.25 + var/min_x_scale = 0.9 + var/min_y_scale = 0.9 + + var/harvest_tool = null // The type of item used to harvest the plant. + var/harvest_count = 0 + + var/randomize_harvest_count = TRUE + var/max_harvests = 0 + var/min_harvests = -1 + var/list/harvest_loot = null // Should be an associative list for things to spawn, and their weights. An example would be a branch from a tree. + +/obj/structure/flora/Initialize() + ..() + + if(randomize_size) + icon_scale_x = rand(min_x_scale * 100, max_x_scale * 100) / 100 + icon_scale_y = rand(min_y_scale * 100, max_y_scale * 100) / 100 + + if(prob(50)) + icon_scale_x *= -1 + update_transform() + + if(randomize_harvest_count) + max_harvests = max(0, rand(min_harvests, max_harvests)) // Incase you want to weight it more toward 'not harvestable', set min_harvests to a negative value. + +/obj/structure/flora/examine(mob/user) + . = ..() + if(harvest_count < max_harvests) + . += get_harvestable_desc() + +/obj/structure/flora/proc/get_harvestable_desc() + return "\The [src] seems to have something hanging from it." + +/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user) + if(can_harvest(W)) + var/harvest_spawn = pickweight(harvest_loot) + var/atom/movable/AM = spawn_harvest(harvest_spawn, user) + + if(!AM) + to_chat(user, "You fail to harvest anything from \the [src].") + + else + to_chat(user, "You harvest \the [AM] from \the [src].") + return + + ..(W, user) + +/obj/structure/flora/proc/can_harvest(var/obj/item/I) + . = FALSE + if(harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests) + . = TRUE + return . + +/obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null) + if(!ispath(path)) + return 0 + var/turf/Target = get_turf(src) + if(user) + Target = get_turf(user) + + var/atom/movable/AM = new path(Target) + + harvest_count++ + return AM + +//bushes +/obj/structure/flora/bush + name = "bush" + icon = 'icons/obj/flora/snowflora.dmi' + icon_state = "snowbush1" + +/obj/structure/flora/bush/New() + ..() + icon_state = "snowbush[rand(1, 6)]" + +/obj/structure/flora/pottedplant + name = "potted plant" + desc = "Really ties the room together." + icon = 'icons/obj/plants.dmi' + icon_state = "plant-26" + + anchored = FALSE + +//newbushes + +/obj/structure/flora/ausbushes + name = "bush" + icon = 'icons/obj/flora/ausflora.dmi' + icon_state = "firstbush_1" + +/obj/structure/flora/ausbushes/New() + ..() + icon_state = "firstbush_[rand(1, 4)]" + +/obj/structure/flora/ausbushes/reedbush + icon_state = "reedbush_1" + +/obj/structure/flora/ausbushes/reedbush/New() + ..() + icon_state = "reedbush_[rand(1, 4)]" + +/obj/structure/flora/ausbushes/leafybush + icon_state = "leafybush_1" + +/obj/structure/flora/ausbushes/leafybush/New() + ..() + icon_state = "leafybush_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/palebush + icon_state = "palebush_1" + +/obj/structure/flora/ausbushes/palebush/New() + ..() + icon_state = "palebush_[rand(1, 4)]" + +/obj/structure/flora/ausbushes/stalkybush + icon_state = "stalkybush_1" + +/obj/structure/flora/ausbushes/stalkybush/New() + ..() + icon_state = "stalkybush_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/grassybush + icon_state = "grassybush_1" + +/obj/structure/flora/ausbushes/grassybush/New() + ..() + icon_state = "grassybush_[rand(1, 4)]" + +/obj/structure/flora/ausbushes/fernybush + icon_state = "fernybush_1" + +/obj/structure/flora/ausbushes/fernybush/New() + ..() + icon_state = "fernybush_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/sunnybush + icon_state = "sunnybush_1" + +/obj/structure/flora/ausbushes/sunnybush/New() + ..() + icon_state = "sunnybush_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/genericbush + icon_state = "genericbush_1" + +/obj/structure/flora/ausbushes/genericbush/New() + ..() + icon_state = "genericbush_[rand(1, 4)]" + +/obj/structure/flora/ausbushes/pointybush + icon_state = "pointybush_1" + +/obj/structure/flora/ausbushes/pointybush/New() + ..() + icon_state = "pointybush_[rand(1, 4)]" + +/obj/structure/flora/ausbushes/lavendergrass + icon_state = "lavendergrass_1" + +/obj/structure/flora/ausbushes/lavendergrass/New() + ..() + icon_state = "lavendergrass_[rand(1, 4)]" + +/obj/structure/flora/ausbushes/ywflowers + icon_state = "ywflowers_1" + +/obj/structure/flora/ausbushes/ywflowers/New() + ..() + icon_state = "ywflowers_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/brflowers + icon_state = "brflowers_1" + +/obj/structure/flora/ausbushes/brflowers/New() + ..() + icon_state = "brflowers_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/ppflowers + icon_state = "ppflowers_1" + +/obj/structure/flora/ausbushes/ppflowers/New() + ..() + icon_state = "ppflowers_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/sparsegrass + icon_state = "sparsegrass_1" + +/obj/structure/flora/ausbushes/sparsegrass/New() + ..() + icon_state = "sparsegrass_[rand(1, 3)]" + +/obj/structure/flora/ausbushes/fullgrass + icon_state = "fullgrass_1" + +/obj/structure/flora/ausbushes/fullgrass/New() + ..() + icon_state = "fullgrass_[rand(1, 3)]" + +/obj/structure/flora/skeleton + name = "hanging skeleton model" + icon = 'icons/obj/plants.dmi' //what an interesting plant + icon_state = "hangskele" + desc = "It's an anatomical model of a human skeletal system made of plaster." + + plane = OBJ_PLANE + +//potted plants credit: Flashkirby +/obj/structure/flora/pottedplant + name = "potted plant" + desc = "Really brings the room together." + icon = 'icons/obj/plants.dmi' + icon_state = "plant-01" + + plane = OBJ_PLANE + var/obj/item/stored_item + +/obj/structure/flora/pottedplant/examine(mob/user) + . = ..() + if(in_range(user, src) && stored_item) + . += "You can see something in there..." + +/obj/structure/flora/pottedplant/attackby(obj/item/I, mob/user) + if(stored_item) + to_chat(user, "[I] won't fit in. There already appears to be something in here...") + return + + if(I.w_class > ITEMSIZE_TINY) + to_chat(user, "[I] is too big to fit inside [src].") + return + + if(do_after(user, 10)) + user.drop_from_inventory(I, src) + I.forceMove(src) + stored_item = I + src.visible_message("[bicon(src)] [bicon(I)] [user] places [I] into [src].") + return + else + to_chat(user, "You refrain from putting things into the plant pot.") + return + + ..() + +/obj/structure/flora/pottedplant/attack_hand(mob/user) + if(!stored_item) + to_chat(user, "You see nothing of interest in [src]...") + else + if(do_after(user, 10)) + to_chat(user, "You find [bicon(stored_item)] [stored_item] in [src]!") + stored_item.forceMove(get_turf(src)) + stored_item = null + ..() + + +/obj/structure/flora/pottedplant/large + name = "large potted plant" + desc = "This is a large plant. Three branches support pairs of waxy leaves." + icon_state = "plant-26" + +/obj/structure/flora/pottedplant/fern + name = "potted fern" + desc = "This is an ordinary looking fern. It looks like it could do with some water." + icon_state = "plant-02" + +/obj/structure/flora/pottedplant/overgrown + name = "overgrown potted plants" + desc = "This is an assortment of colourful plants. Some parts are overgrown." + icon_state = "plant-03" + +/obj/structure/flora/pottedplant/bamboo + name = "potted bamboo" + desc = "These are bamboo shoots. The tops looks like they've been cut short." + icon_state = "plant-04" + +/obj/structure/flora/pottedplant/largebush + name = "large potted bush" + desc = "This is a large bush. The leaves stick upwards in an odd fashion." + icon_state = "plant-05" + +/obj/structure/flora/pottedplant/thinbush + name = "thin potted bush" + desc = "This is a thin bush. It appears to be flowering." + icon_state = "plant-06" + +/obj/structure/flora/pottedplant/mysterious + name = "mysterious potted bulbs" + desc = "This is a mysterious looking plant. Touching the bulbs cause them to shrink." + icon_state = "plant-07" + catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs) + +/obj/structure/flora/pottedplant/smalltree + name = "small potted tree" + desc = "This is a small tree. It is rather pleasant." + icon_state = "plant-08" + +/obj/structure/flora/pottedplant/unusual + name = "unusual potted plant" + desc = "This is an unusual plant. It's bulbous ends emit a soft blue light." + icon_state = "plant-09" + light_range = 2 + light_power = 0.6 + light_color = "#33CCFF" + catalogue_data = list(/datum/category_item/catalogue/flora/sif_tree) + +/obj/structure/flora/pottedplant/orientaltree + name = "potted oriental tree" + desc = "This is a rather oriental style tree. Its flowers are bright pink." + icon_state = "plant-10" + +/obj/structure/flora/pottedplant/smallcactus + name = "small potted cactus" + desc = "This is a small cactus. Its needles are sharp." + icon_state = "plant-11" + +/obj/structure/flora/pottedplant/tall + name = "tall potted plant" + desc = "This is a tall plant. Tiny pores line its surface." + icon_state = "plant-12" + +/obj/structure/flora/pottedplant/sticky + name = "sticky potted plant" + desc = "This is an odd plant. Its sticky leaves trap insects." + icon_state = "plant-13" + +/obj/structure/flora/pottedplant/smelly + name = "smelly potted plant" + desc = "This is some kind of tropical plant. It reeks of rotten eggs." + icon_state = "plant-14" + +/obj/structure/flora/pottedplant/small + name = "small potted plant" + desc = "This is a pot of assorted small flora. Some look familiar." + icon_state = "plant-15" + +/obj/structure/flora/pottedplant/aquatic + name = "aquatic potted plant" + desc = "This is apparently an aquatic plant. It's probably fake." + icon_state = "plant-16" + +/obj/structure/flora/pottedplant/shoot + name = "small potted shoot" + desc = "This is a small shoot. It still needs time to grow." + icon_state = "plant-17" + +/obj/structure/flora/pottedplant/flower + name = "potted flower" + desc = "This is a slim plant. Sweet smelling flowers are supported by spindly stems." + icon_state = "plant-18" + +/obj/structure/flora/pottedplant/crystal + name = "crystalline potted plant" + desc = "These are rather cubic plants. Odd crystal formations grow on the end." + icon_state = "plant-19" + +/obj/structure/flora/pottedplant/subterranean + name = "subterranean potted plant" + desc = "This is a subterranean plant. It's bulbous ends glow faintly." + icon_state = "plant-20" + light_range = 2 + light_power = 0.6 + light_color = "#FF6633" + +/obj/structure/flora/pottedplant/minitree + name = "potted tree" + desc = "This is a miniature tree. Apparently it was grown to 1/5 scale." + icon_state = "plant-21" + +/obj/structure/flora/pottedplant/stoutbush + name = "stout potted bush" + desc = "This is a stout bush. Its leaves point up and outwards." + icon_state = "plant-22" + +/obj/structure/flora/pottedplant/drooping + name = "drooping potted plant" + desc = "This is a small plant. The drooping leaves make it look like its wilted." + icon_state = "plant-23" + +/obj/structure/flora/pottedplant/tropical + name = "tropical potted plant" + desc = "This is some kind of tropical plant. It hasn't begun to flower yet." + icon_state = "plant-24" + +/obj/structure/flora/pottedplant/dead + name = "dead potted plant" + desc = "This is the dried up remains of a dead plant. Someone should replace it." + icon_state = "plant-25" + +/obj/structure/flora/pottedplant/decorative + name = "decorative potted plant" + desc = "This is a decorative shrub. It's been trimmed into the shape of an apple." + icon_state = "applebush" + +/obj/structure/flora/pottedplant/xmas + name = "small christmas tree" + desc = "This is a tiny well lit decorative christmas tree." + icon_state = "plant-xmas" + +/obj/structure/flora/sif + icon = 'icons/obj/flora/sifflora.dmi' + +/obj/structure/flora/sif/attack_hand(mob/user) + if (user.a_intent == I_HURT) + if(do_after(user, 5 SECONDS)) + user.visible_message("\The [user] digs up \the [src.name].", "You dig up \the [src.name].") + qdel(src) + else + user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].") + +/datum/category_item/catalogue/flora/subterranean_bulbs + name = "Sivian Flora - Subterranean Bulbs" + desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \ + are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \ + known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \ + it to spread much farther than before, with the assistance of humans.\ +

\ + In Sif's early history, Sivian settlers found this plant while they were establishing mines. Their ability \ + to emit low, but consistant amounts of light made them desirable to the settlers. They would often cultivate \ + this plant inside man-made tunnels and mines to act as a backup source of light that would not need \ + electricity. This technique has saved many lost miners, and this practice continues to this day." + value = CATALOGUER_REWARD_EASY + +/obj/structure/flora/sif/subterranean + name = "subterranean plant" + desc = "This is a subterranean plant. It's bulbous ends glow faintly." + icon_state = "glowplant" + light_range = 2 + light_power = 0.6 + light_color = "#FF6633" + catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs) + +/obj/structure/flora/sif/subterranean/Initialize() + icon_state = "[initial(icon_state)][rand(1,2)]" + . = ..() + + +/datum/category_item/catalogue/flora/eyebulbs + name = "Sivian Flora - Eyebulbs" + desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \ + eyes, which shrink when touched. One theory is that the bulbs are a result of mimicry, appearing as eyeballs to protect from predators.

\ + These plants have no known use." + value = CATALOGUER_REWARD_EASY + +/obj/structure/flora/sif/eyes + name = "mysterious bulbs" + desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy." + icon_state = "eyeplant" + catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs) + +/obj/structure/flora/sif/eyes/Initialize() + icon_state = "[initial(icon_state)][rand(1,3)]" + . = ..() + +/datum/category_item/catalogue/flora/mosstendrils + name = "Sivian Flora - Moss Stalks" + desc = "A plant native to Sif. The plant is most closely related to the common, dense moss found covering Sif's terrain. \ + It has evolved a method of camouflage utilizing white hairs on its dorsal sides to make it appear as a small mound of snow from \ + above. It has no known use, though it is a common furnishing in contemporary homes." + value = CATALOGUER_REWARD_TRIVIAL + +/obj/structure/flora/sif/tendrils + name = "stocky tendrils" + desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow." + icon_state = "grass" + randomize_size = TRUE + catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils) + + harvest_tool = /obj/item/weapon/material/knife + max_harvests = 1 + min_harvests = -4 + harvest_loot = list( + /obj/item/seeds/wabback = 15, + /obj/item/seeds/blackwabback = 1, + /obj/item/seeds/wildwabback = 30 + ) + +/obj/structure/flora/sif/tendrils/Initialize() + icon_state = "[initial(icon_state)][rand(1,3)]" + . = ..() + +/obj/structure/flora/sif/tendrils/get_harvestable_desc() + return "\The [src] seems to be growing over something." diff --git a/code/game/objects/structures/flora_vr.dm b/code/game/objects/structures/flora/flora_vr.dm similarity index 100% rename from code/game/objects/structures/flora_vr.dm rename to code/game/objects/structures/flora/flora_vr.dm diff --git a/code/game/objects/structures/flora/grass.dm b/code/game/objects/structures/flora/grass.dm index d5e7e965a87..92717f4beb4 100644 --- a/code/game/objects/structures/flora/grass.dm +++ b/code/game/objects/structures/flora/grass.dm @@ -11,7 +11,6 @@ ..() icon_state = "snowgrass[rand(1, 3)]bb" - /obj/structure/flora/grass/green icon_state = "snowgrass1gb" diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index c67348a94ae..c4d8f58ebd9 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -273,7 +273,9 @@ max_harvests = 2 min_harvests = -4 harvest_loot = list( - /obj/item/weapon/reagent_containers/food/snacks/siffruit = 5 + /obj/item/weapon/reagent_containers/food/snacks/siffruit = 20, + /obj/item/weapon/reagent_containers/food/snacks/grown/sifpod = 5, + /obj/item/seeds/sifbulb = 1 ) var/light_shift = 0 diff --git a/code/game/turfs/simulated/outdoors/grass.dm b/code/game/turfs/simulated/outdoors/grass.dm index 5fd8214e57b..1dee4d79c50 100644 --- a/code/game/turfs/simulated/outdoors/grass.dm +++ b/code/game/turfs/simulated/outdoors/grass.dm @@ -12,6 +12,13 @@ var/list/grass_types = list( ) var/grass_chance = 20 + var/animal_chance = 1 + + // Weighted spawn list. + var/list/animal_types = list( + /mob/living/simple_mob/animal/passive/tindalos = 1 + ) + var/list/grass_types = list( /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/fullgrass @@ -63,6 +70,11 @@ var/list/grass_types = list( if(grass_chance && prob(grass_chance) && !check_density()) var/grass_type = pickweight(grass_types) new grass_type(src) + + if(animal_chance && prob(animal_chance) && !check_density()) + var/animal_type = pickweight(animal_types) + new animal_type(src) + . = ..() /turf/simulated/floor/outdoors/grass/forest diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 736ee2bc9af..283406d6bad 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -96,6 +96,42 @@ . = check break +// For now, these two temp procs only return TRUE or FALSE if they can provide resistance to a given temperature. +/obj/item/clothing/proc/handle_low_temperature(var/tempcheck = T20C) + . = FALSE + if(LAZYLEN(accessories)) + for(var/obj/item/clothing/C in accessories) + if(C.handle_low_temperature(tempcheck)) + . = TRUE + + if(min_cold_protection_temperature && min_cold_protection_temperature <= tempcheck) + . = TRUE + +/obj/item/clothing/proc/handle_high_temperature(var/tempcheck = T20C) + . = FALSE + if(LAZYLEN(accessories)) + for(var/obj/item/clothing/C in accessories) + if(C.handle_low_temperature(tempcheck)) + . = TRUE + + if(max_heat_protection_temperature && max_heat_protection_temperature >= tempcheck) + . = TRUE + +// Returns the relative flag-vars for covered protection. +/obj/item/clothing/proc/get_cold_protection_flags() + . = cold_protection + + if(LAZYLEN(accessories)) + for(var/obj/item/clothing/C in accessories) + . |= C.get_cold_protection_flags() + +/obj/item/clothing/proc/get_heat_protection_flags() + . = heat_protection + + if(LAZYLEN(accessories)) + for(var/obj/item/clothing/C in accessories) + . |= C.get_heat_protection_flags() + /obj/item/clothing/proc/refit_for_species(var/target_species) if(!species_restricted) return //this item doesn't use the species_restricted system diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm index 56c7fe63676..692a5786906 100644 --- a/code/modules/clothing/spacesuits/rig/suits/alien.dm +++ b/code/modules/clothing/spacesuits/rig/suits/alien.dm @@ -51,7 +51,13 @@ item_flags = THICKMATERIAL siemens_coefficient = 0.2 offline_slowdown = 5 - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit) + allowed = list( + /obj/item/weapon/gun, + /obj/item/device/flashlight, + /obj/item/weapon/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/weapon/storage + ) air_type = /obj/item/weapon/tank/vox diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index f88f0579072..57e5f6601aa 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -12,7 +12,14 @@ offline_vision_restriction = 1 helm_type = /obj/item/clothing/head/helmet/space/rig/combat - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton) + allowed = list( + /obj/item/weapon/gun, + /obj/item/device/flashlight, + /obj/item/weapon/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/weapon/melee/baton, + /obj/item/weapon/storage + ) /obj/item/weapon/rig/combat/equipped @@ -42,10 +49,26 @@ slowdown = 1 offline_slowdown = 3 offline_vision_restriction = 1 - allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \ - /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \ - /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ - /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit) + allowed = list( + /obj/item/device/flashlight, + /obj/item/weapon/tank, + /obj/item/ammo_magazine, + /obj/item/ammo_casing, + /obj/item/weapon/handcuffs, + /obj/item/device/t_scanner, + /obj/item/weapon/rcd, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool, + /obj/item/device/multitool, + /obj/item/device/radio, + /obj/item/device/analyzer, + /obj/item/weapon/melee/baton, + /obj/item/weapon/gun, + /obj/item/weapon/storage, + /obj/item/weapon/reagent_containers/hypospray, + /obj/item/roller, + /obj/item/device/suit_cooling_unit + ) chest_type = /obj/item/clothing/suit/space/rig/military helm_type = /obj/item/clothing/head/helmet/space/rig/military diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm index 33b4e073515..0edd36c1d28 100644 --- a/code/modules/clothing/spacesuits/rig/suits/ert.dm +++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm @@ -14,10 +14,25 @@ siemens_coefficient= 0.5 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) - allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \ - /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \ - /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ - /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller) + allowed = list( + /obj/item/device/flashlight, + /obj/item/weapon/tank, + /obj/item/device/t_scanner, + /obj/item/weapon/rcd, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/device/multitool, + /obj/item/device/radio, + /obj/item/device/analyzer, + /obj/item/weapon/storage, + /obj/item/weapon/melee/baton, + /obj/item/weapon/gun, + /obj/item/weapon/reagent_containers/hypospray, + /obj/item/roller + ) initial_modules = list( /obj/item/rig_module/ai_container, diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index edf982464de..b2a525f24d8 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -4,7 +4,17 @@ desc = "A lighter, less armoured rig suit." icon_state = "ninja_rig" suit_type = "light suit" - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell) + allowed = list( + /obj/item/weapon/gun, + /obj/item/ammo_magazine, + /obj/item/ammo_casing, + /obj/item/weapon/melee/baton, + /obj/item/weapon/handcuffs, + /obj/item/weapon/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/weapon/cell, + /obj/item/weapon/storage + ) armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) emp_protection = 10 slowdown = 0 diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm index 4724e2c733a..56435ff7f5f 100644 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm @@ -14,7 +14,18 @@ siemens_coefficient = 0.3 glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva helm_type = /obj/item/clothing/head/helmet/space/rig/merc - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs) + allowed = list( + /obj/item/device/flashlight, + /obj/item/weapon/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/weapon/gun, + /obj/item/ammo_magazine, + /obj/item/ammo_casing, + /obj/item/weapon/melee/baton, + /obj/item/weapon/melee/energy/sword, + /obj/item/weapon/handcuffs, + /obj/item/weapon/storage + ) initial_modules = list( /obj/item/rig_module/mounted, diff --git a/code/modules/clothing/spacesuits/rig/suits/pmc.dm b/code/modules/clothing/spacesuits/rig/suits/pmc.dm index b10e559977a..e312ee826a2 100644 --- a/code/modules/clothing/spacesuits/rig/suits/pmc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/pmc.dm @@ -12,10 +12,25 @@ req_access = list(access_cent_specops) armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 95) - allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \ - /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \ - /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ - /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller) + allowed = list( + /obj/item/device/flashlight, + /obj/item/weapon/tank, + /obj/item/device/t_scanner, + /obj/item/weapon/rcd, + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/device/multitool, + /obj/item/device/radio, + /obj/item/device/analyzer, + /obj/item/weapon/melee/baton, + /obj/item/weapon/gun, + /obj/item/weapon/storage, + /obj/item/weapon/reagent_containers/hypospray, + /obj/item/roller + ) /obj/item/weapon/rig/pmc/commander name = "PMC-C hardsuit control module" diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index f9ef544a3a7..d506725759a 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -35,8 +35,7 @@ /obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/storage/briefcase, - /obj/item/weapon/storage/secure/briefcase + /obj/item/weapon/storage, ) req_access = list() @@ -83,7 +82,7 @@ /obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/storage/bag/ore, + /obj/item/weapon/storage, /obj/item/device/t_scanner, /obj/item/weapon/pickaxe, /obj/item/weapon/rcd @@ -121,7 +120,7 @@ /obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/storage/briefcase/inflatable, + /obj/item/weapon/storage, /obj/item/device/t_scanner, /obj/item/weapon/rcd ) @@ -168,7 +167,7 @@ /obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/storage/briefcase/inflatable, + /obj/item/weapon/storage, /obj/item/device/t_scanner, /obj/item/weapon/rcd ) @@ -212,7 +211,7 @@ /obj/item/weapon/tank, /obj/item/device/suit_cooling_unit, /obj/item/stack/flag, - /obj/item/weapon/storage/excavation, + /obj/item/weapon/storage, /obj/item/weapon/pickaxe, /obj/item/device/healthanalyzer, /obj/item/device/measuring_tape, @@ -222,8 +221,8 @@ /obj/item/device/gps, /obj/item/device/beacon_locator, /obj/item/device/radio/beacon, - /obj/item/weapon/pickaxe/hand, - /obj/item/weapon/storage/bag/fossils) + /obj/item/weapon/pickaxe/hand + ) req_access = list() req_one_access = list() @@ -256,7 +255,7 @@ /obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/storage/firstaid, + /obj/item/weapon/storage, /obj/item/device/healthanalyzer, /obj/item/stack/medical, /obj/item/roller @@ -296,7 +295,8 @@ /obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/melee/baton + /obj/item/weapon/melee/baton, + /obj/item/weapon/storage ) req_access = list() diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm index b440c0b8342..9ef80846eee 100644 --- a/code/modules/clothing/under/accessories/armor.dm +++ b/code/modules/clothing/under/accessories/armor.dm @@ -96,9 +96,16 @@ name = "mesh armor plate" desc = "A mesh armor plate made of steel-reinforced synthetic fibers, great for dealing with small blades. Attaches to a plate carrier." icon_state = "armor_stab" - armor = list(melee = 25, bullet = 5, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 5, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0) armorsoak = list(melee = 7, bullet = 5, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) +/obj/item/clothing/accessory/armor/armorplate/blast + name = "gel armor plate" + desc = "A gel armor plate made of high-grade polymers, great for dealing with localized blasts. Attaches to a plate carrier." + icon_state = "armor_blast" + armor = list(melee = 25, bullet = 25, laser = 10, energy = 0, bomb = 30, bio = 0, rad = 0) + armorsoak = list(melee = 5, bullet = 7, laser = 0, energy = 0, bomb = 40, bio = 0, rad = 0) + /obj/item/clothing/accessory/armor/armorplate/medium name = "medium armor plate" desc = "A plasteel-reinforced synthetic armor plate, providing good protection. Attaches to a plate carrier." diff --git a/code/modules/clothing/under/accessories/temperature/poncho.dm b/code/modules/clothing/under/accessories/temperature/poncho.dm new file mode 100644 index 00000000000..f1815760b8f --- /dev/null +++ b/code/modules/clothing/under/accessories/temperature/poncho.dm @@ -0,0 +1,68 @@ + +/obj/item/clothing/accessory/poncho/thermal + name = "thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer." + slot_flags = SLOT_OCLOTHING | SLOT_TIE + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS + + slowdown = 0.2 + + min_cold_protection_temperature = T0C - 40 + max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE + +/obj/item/clothing/accessory/poncho/thermal/green + name = "green thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is green." + icon_state = "greenponcho" + item_state = "greenponcho" + +/obj/item/clothing/accessory/poncho/thermal/red + name = "red thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is red." + icon_state = "redponcho" + item_state = "redponcho" + +/obj/item/clothing/accessory/poncho/thermal/purple + name = "purple thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is purple." + icon_state = "purpleponcho" + item_state = "purpleponcho" + +/obj/item/clothing/accessory/poncho/thermal/blue + name = "blue thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is blue." + icon_state = "blueponcho" + item_state = "blueponcho" + +/obj/item/clothing/accessory/poncho/thermal/security + name = "security thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is black and red, standard NanoTrasen Security colors." + icon_state = "secponcho" + item_state = "secponcho" + +/obj/item/clothing/accessory/poncho/thermal/medical + name = "medical thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is white with green and blue tint, standard Medical colors." + icon_state = "medponcho" + item_state = "medponcho" + +/obj/item/clothing/accessory/poncho/thermal/engineering + name = "engineering thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is yellow and orange, standard Engineering colors." + icon_state = "engiponcho" + item_state = "engiponcho" + +/obj/item/clothing/accessory/poncho/thermal/science + name = "science thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is white with purple trim, standard NanoTrasen Science colors." + icon_state = "sciponcho" + item_state = "sciponcho" + +/obj/item/clothing/accessory/poncho/thermal/cargo + name = "cargo thermal poncho" + desc = "A simple, comfortable poncho with a thermal foil layer. This one is tan and grey, the colors of Cargo." + icon_state = "cargoponcho" + item_state = "cargoponcho" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index a0e794929f2..800ba8e3ecd 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -938,6 +938,11 @@ Uniforms and such name = "explorer's jumpsuit" icon_state = "explorer" +/obj/item/clothing/under/explorer/armored + desc = "A green uniform for operating in hazardous environments. This one looks like it's been modified." + armor = list(melee = 10, bullet = 10, laser = 10,energy = 10, bomb = 10, bio = 10, rad = 30) + armorsoak = list(melee = 5, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 5, rad = 0) + /obj/item/clothing/under/cohesion name = "black cohesion suit" desc = "A plain black cohesion suit intended to assist Prometheans in maintaining their form and prevent direct skin exposure." diff --git a/code/modules/hydroponics/grown_predefined.dm b/code/modules/hydroponics/grown_predefined.dm index e44025de7b3..d8187fb24ef 100644 --- a/code/modules/hydroponics/grown_predefined.dm +++ b/code/modules/hydroponics/grown_predefined.dm @@ -2,4 +2,7 @@ plantname = "ambrosia" /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus - plantname = "ambrosiadeus" \ No newline at end of file + plantname = "ambrosiadeus" + +/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod + plantname = "sifbulb" diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 4c18c2aac3a..cbdeaca55ce 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -292,6 +292,26 @@ set_trait(TRAIT_PRODUCT_COLOUR,"#FFDD00") set_trait(TRAIT_PLANT_COLOUR,"#D6B44D") +/datum/seed/apple/sif + name = "sifbulb" + seed_name = "sivian tree" + display_name = "sivian tree" + kitchen_tag = "apple" + chems = list("nutriment" = list(1,5),"sifsap" = list(10,20)) + +/datum/seed/apple/sif/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_MATURATION,3) + set_trait(TRAIT_PRODUCTION,10) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,12) + set_trait(TRAIT_PRODUCT_ICON,"alien3") + set_trait(TRAIT_PRODUCT_COLOUR,"#0720c3") + set_trait(TRAIT_PLANT_ICON,"tree5") + set_trait(TRAIT_FLESH_COLOUR,"#05157d") + set_trait(TRAIT_IDEAL_LIGHT, 1) + //Ambrosia/varieties. /datum/seed/ambrosia name = "ambrosia" diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 6ca62df220d..848b5a10e77 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -334,3 +334,6 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds) /obj/item/seeds/gnomes seed_type = "gnomes" + +/obj/item/seeds/sifbulb + seed_type = "sifbulb" diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 67fc8162980..01cfd9bc62e 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -386,6 +386,9 @@ strict_color_stacking = TRUE drop_sound = 'sound/items/drop/clothing.ogg' +/obj/item/stack/material/cloth/diyaab + color = "#c6ccf0" + /obj/item/stack/material/resin name = "resin" icon_state = "sheet-resin" diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm index b9b11d988d5..822dccaf577 100644 --- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -41,7 +41,7 @@ new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200), new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200), // new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000), - new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 1000), + new /datum/data/mining_equipment("Thalers - 100", /obj/item/weapon/spacecash/c100, 1000), new /datum/data/mining_equipment("Hardsuit - Control Module", /obj/item/weapon/rig/industrial/vendor, 2000), new /datum/data/mining_equipment("Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800), new /datum/data/mining_equipment("Hardsuit - Drill", /obj/item/rig_module/device/drill, 5000), @@ -58,6 +58,7 @@ new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500), new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 3100), + new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 10000), new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 125), new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 175), new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250), @@ -82,7 +83,7 @@ new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500), new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000), new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 7500), - new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 10000) + new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 750) ) //VOREStation Edit End diff --git a/code/modules/mining/ore_redemption_machine/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm index 7003c2b832c..65b7ccc76dd 100644 --- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm @@ -38,9 +38,10 @@ new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 100), new /datum/data/mining_equipment("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 120), new /datum/data/mining_equipment("UAV - Recon Skimmer", /obj/item/device/uav, 400), - new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 100), + new /datum/data/mining_equipment("Thalers - 100", /obj/item/weapon/spacecash/c100, 100), new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 250), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310), + new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000), new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore",/obj/item/weapon/gun/magnetic/matfed, 300), new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 40), new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 50), @@ -51,7 +52,7 @@ new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 50), new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100), new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750), - new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000) + new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75) ) //VOREStation Edit End diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index d2ed3a38907..e7afc819f06 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -92,7 +92,7 @@ signlang_verb = list("gestures with their hands", "gestures with their ears and tail", "gestures with their ears, tail and hands") colour = "tajaran" key = "l" - flags = WHITELISTED | SIGNLANG | NO_STUTTER | NONVERBAL + flags = WHITELISTED | SIGNLANG | NO_STUTTER //nonverbal define was not needed here, and i need to use it ~Layne /datum/language/tajsign/broadcast(var/mob/living/speaker, var/message, var/speaker_mask) log_say("(SIGN) [message]", speaker) @@ -219,6 +219,19 @@ space_chance = 20 syllables = list("z", "dz", "i", "iv", "ti", "az", "hix", "xo", "av", "xo", "x", "za", "at", "vi") +/datum/language/promethean + name = LANGUAGE_PROMETHEAN + desc = "A complex language composed of guttural noises and bioluminescent signals" + signlang_verb = list("flickers","flashes","rapidly flashes a light","quickly flickers a light") + speech_verb = "gurgles" + ask_verb = "gurgles" + exclaim_verb = "gurgles" + colour = "promethean" + key = "t" + flags = WHITELISTED | NONVERBAL + space_chance = 20 + syllables = list("gur","gul","gug","gel","ger","geg","gir","gil","gig","gor","gol","gog","ug","ul","ur","uu","el","eg","er","oe","ig","il","ir","oi","og","ol","or","oo") + //Syllable Lists /* diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm index 1088a5d811d..1e2dac1a8b5 100644 --- a/code/modules/mob/language/station_vr.dm +++ b/code/modules/mob/language/station_vr.dm @@ -22,7 +22,7 @@ desc = "The dominant language of the Sergal homeworld, Vilous. It consists of aggressive low-pitched hissing and throaty growling." speech_verb = "snarls" colour = "sergal" - key = "t" + key = "T" syllables = list ("grr", "gah", "woof", "arf", "arra", "rah", "wor", "sarg") /datum/language/vulpkanin diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cb745aea2e8..00d28f1113c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -151,6 +151,11 @@ if (prob(50) && !shielded) Paralyse(10) + var/blastsoak = getsoak(null, "bomb") + + b_loss = max(1, b_loss - blastsoak) + f_loss = max(1, f_loss - blastsoak) + var/update = 0 // focus most of the blast on one organ diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 34530434f1f..b73bac92e43 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -817,8 +817,8 @@ //Handle normal clothing for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask)) if(C) - if(C.max_heat_protection_temperature && C.max_heat_protection_temperature >= temperature) - . |= C.heat_protection + if(C.handle_low_temperature(temperature)) + . |= C.get_heat_protection_flags() //See proc/get_heat_protection_flags(temperature) for the description of this proc. /mob/living/carbon/human/proc/get_cold_protection_flags(temperature) @@ -826,8 +826,8 @@ //Handle normal clothing for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask)) if(C) - if(C.min_cold_protection_temperature && C.min_cold_protection_temperature <= temperature) - . |= C.cold_protection + if(C.handle_high_temperature(temperature)) + . |= C.get_cold_protection_flags() /mob/living/carbon/human/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. var/thermal_protection_flags = get_heat_protection_flags(temperature) diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index c6f71cad251..fd440fbc525 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -30,8 +30,8 @@ var/datum/species/shapeshifter/promethean/prometheans spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED health_hud_intensity = 2 num_alternate_languages = 3 - species_language = LANGUAGE_SOL_COMMON - secondary_langs = list(LANGUAGE_SOL_COMMON) // For some reason, having this as their species language does not allow it to be chosen. + species_language = LANGUAGE_PROMETHEAN + secondary_langs = list(LANGUAGE_PROMETHEAN, LANGUAGE_SOL_COMMON) // For some reason, having this as their species language does not allow it to be chosen. assisted_langs = list(LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) // Prometheans are weird, let's just assume they can use basically any language. breath_type = null 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 543acb842f2..f9c68c331f3 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 @@ -121,9 +121,7 @@ if(check_alien_ability(50,1,O_RESIN)) visible_message("[src] has planted some alien weeds!") - var/obj/O = new /obj/effect/alien/weeds/node(loc) - if(O) - O.color = "#321D37" + new /obj/effect/alien/weeds/node(get_turf(src), "#321D37") return /mob/living/carbon/human/proc/Spit(var/atom/A) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index a67e6085497..51eae7933d8 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -286,8 +286,7 @@ proc/get_radio_key_from_channel(var/channel) //Handle nonverbal languages here for(var/datum/multilingual_say_piece/S in message_pieces) if(S.speaking.flags & NONVERBAL) - if(prob(30)) - custom_emote(1, "[pick(S.speaking.signlang_verb)].") + custom_emote(1, "[pick(S.speaking.signlang_verb)].") //These will contain the main receivers of the message var/list/listening = list() diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index c09bf272cc2..a8234ac970a 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -72,6 +72,23 @@ if(istype(O, /obj/item/weapon/material/knife)) harvest(user) + if(user.a_intent == I_HELP && harvest_tool && istype(O, harvest_tool) && stat != DEAD) + if(world.time > (harvest_recent + harvest_cooldown)) + livestock_harvest(O, user) + return + else + to_chat(user, "\The [src] can't be [harvest_verb] so soon.") + return + + if(can_tame(O, user)) + to_chat(user, "You offer \the [src] \the [O].") + if(tame_prob(O, user)) + to_chat(user, "\The [src] appears to accept \the [O], seemingly calmed.") + do_tame(O,user) + else + fail_tame(O, user) + return + return ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm index 6cd5ea9c5bb..3721168ff9b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm @@ -100,6 +100,12 @@ say_list_type = /datum/say_list/spider + tame_items = list( + /obj/item/weapon/reagent_containers/food/snacks/xenomeat = 10, + /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 40, + /obj/item/weapon/reagent_containers/food/snacks/meat = 20 + ) + var/poison_type = "spidertoxin" // The reagent that gets injected when it attacks. var/poison_chance = 10 // Chance for injection to occur. var/poison_per_bite = 5 // Amount added per injection. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm index 39e2edcb7d5..94bb77ee71c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm @@ -45,6 +45,11 @@ poison_per_bite = 0.5 poison_type = "phoron" + tame_items = list( + /obj/item/weapon/tank/phoron = 20, + /obj/item/stack/material/phoron = 30 + ) + var/exploded = FALSE var/explosion_dev_range = 1 var/explosion_heavy_range = 2 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm index 06d4eb4caaa..87c05b317d7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm @@ -47,7 +47,7 @@ /mob/living/simple_mob/animal/passive/crab/sif/Initialize() ..() - adjust_scale(rand(5,15) / 10) + adjust_scale(rand(5,12) / 10) // Meat! diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm index 790681a3fc0..198f99a3f4a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm @@ -166,11 +166,15 @@ /mob/living/simple_mob/animal/passive/fish/icebass/update_icon() overlays.Cut() ..() + if(!dorsal_image) dorsal_image = image(icon, "[icon_state]_mask-body") if(!belly_image) belly_image = image(icon, "[icon_state]_mask-belly") + dorsal_image.icon_state = "[icon_state]_mask-body" + belly_image.icon_state = "[icon_state]_mask-belly" + dorsal_image.color = dorsal_color belly_image.color = belly_color @@ -237,6 +241,8 @@ if(!head_image) head_image = image(icon, "[icon_state]_mask") + head_image.icon_state = "[icon_state]_mask" + head_image.color = head_color overlays += head_image diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm index 0845eacc71c..f934ab1ec86 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm @@ -40,6 +40,23 @@ say_list_type = /datum/say_list/diyaab ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative + // What do you hit the mob with (on help) to get something from it? + harvest_tool = /obj/item/weapon/tool/wirecutters + // How long do we have to wait until it's harvestable again? + harvest_cooldown = 10 MINUTES + // How long does it take to harvest? + harvest_delay = 30 SECONDS + // What world.time was the last harvest? + harvest_recent = 0 + // How many times do we roll on the chance table? + harvest_per_hit = 1 + // Verb for harvesting. "sheared" "clipped" etc. + harvest_verb = "sheared" + // Associative list of paths and their chances. path = straws in the lot + harvest_results = list( + /obj/item/stack/material/cloth/diyaab = 10 + ) + /datum/say_list/diyaab speak = list("Awrr?", "Aowrl!", "Worrl.") emote_see = list("sniffs the air cautiously","looks around") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm index 0aa74f9e6b7..10f7ddc2cf9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm @@ -10,7 +10,7 @@ Family units have been observed to form gangs and scavenge from Sivian domeciles and \ various food transports during stressful months. \ It is advised to seal and hide any form of food near even lone individuals, as they will become \ - increasingly aggressive." + increasingly aggressive in order to acquire it." value = CATALOGUER_REWARD_EASY /mob/living/simple_mob/animal/sif/duck @@ -38,6 +38,11 @@ attack_edge = 1 // Razor-edged wings, and 'claws' made for digging through ice. attacktext = list("nipped", "bit", "cut", "clawed") + tame_items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread = 90, + /obj/item/weapon/reagent_containers/food/snacks/slice/bread = 25 + ) + say_list_type = /datum/say_list/duck ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm index ae1abb363f8..3687a67c510 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm @@ -52,6 +52,12 @@ attacktext = list("bit", "buffeted", "slashed") + tame_items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown = 90, + /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 10, + /obj/item/weapon/reagent_containers/food/snacks/meat = 5 + ) + say_list_type = /datum/say_list/glitterfly ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/glitterfly @@ -81,6 +87,17 @@ /mob/living/simple_mob/animal/sif/glitterfly/rare/Initialize() ..() +/mob/living/simple_mob/animal/sif/glitterfly/unique_tame_check(var/obj/O, var/mob/user) + . = ..() + + if(.) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O + + if(G.seed && G.seed.kitchen_tag == "berries") + return TRUE + return FALSE + /datum/say_list/glitterfly speak = list("Pi..","Po...", "Pa...") emote_see = list("vibrates","flutters", "twirls") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm index 22c2d020829..37ac83614e7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm @@ -28,7 +28,7 @@ icon_state = "bigcat" icon_living = "bigcat" icon_dead = "bigcat_dead" - icon_rest = "bigcat_rest" + icon_rest = "bigcat_sleep" icon = 'icons/mob/64x64.dmi' default_pixel_x = -16 @@ -122,7 +122,7 @@ /mob/living/simple_mob/animal/sif/kururak/apply_melee_effects(atom/A) // Only gains instinct. instinct += rand(1, 2) - return + return ..() /mob/living/simple_mob/animal/sif/kururak/should_special_attack(atom/A) return has_modifier_of_type(/datum/modifier/ace) @@ -136,6 +136,8 @@ set_AI_busy(TRUE) rending_strike(A) set_AI_busy(FALSE) + a_intent = I_HURT + return ..() /mob/living/simple_mob/animal/sif/kururak/verb/do_flash() set category = "Abilities" @@ -329,6 +331,15 @@ else remove_modifiers_of_type(/datum/modifier/ace) +/mob/living/simple_mob/animal/sif/kururak/hibernate/Initialize() + ..() + lay_down() + instinct = 0 + +/* + * Kururak AI + */ + /datum/ai_holder/simple_mob/intentional/kururak hostile = FALSE retaliate = TRUE @@ -359,6 +370,8 @@ else hostile = initial(hostile) + return ..() + /datum/ai_holder/simple_mob/intentional/kururak/pre_special_attack(atom/A) holder.a_intent = I_HURT if(isliving(A)) @@ -378,9 +391,12 @@ else if(istype(A, /obj/mecha)) holder.a_intent = I_GRAB + return ..() + /datum/ai_holder/simple_mob/intentional/kururak/post_melee_attack() if(holder.has_modifier_of_type(/datum/modifier/ace)) request_help() + return ..() // Kururak Ace modifier, given to the one with the highest Instinct. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm index 2019859f3fc..f948da609f3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm @@ -187,6 +187,7 @@ desc = "What appears to be an oversized rodent with hands. This one has a curious look in its eyes." ai_holder_type = /datum/ai_holder/simple_mob/intentional/sakimm randomize_size = FALSE // Most likely to have a hat. + melee_attack_delay = 0 // For some reason, having a delay makes item pick-up not work. /datum/ai_holder/simple_mob/intentional/sakimm hostile = FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm index abc8811372f..2dcb5b8b518 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm @@ -44,6 +44,12 @@ player_msg = "You have the ability to berserk at will, which will grant strong physical bonuses for \ a short period of time, however it will tire you and you will be much weaker for awhile after it expires." + tame_items = list( + /obj/item/organ = 70, + /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 30, + /obj/item/weapon/reagent_containers/food/snacks/meat = 20 + ) + say_list_type = /datum/say_list/savik ai_holder_type = /datum/ai_holder/simple_mob/savik @@ -57,6 +63,12 @@ if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently. berserk() +/mob/living/simple_mob/animal/sif/savik/fail_tame(var/obj/O, var/mob/user) + ..() + + if(prob(30)) // They don't like people messing with them and their food. + berserk() + /datum/ai_holder/simple_mob/savik mauling = TRUE diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm index a6948a3e00b..64aa7fbadc6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm @@ -93,14 +93,16 @@ rally_pack() return ..() - -// These ones only retaliate. Used for a PoI. +// These ones only retaliate. Used for PoIs. /mob/living/simple_mob/animal/sif/shantak/retaliate ai_holder_type = /datum/ai_holder/simple_mob/retaliate +/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + //Vorestation Addition /mob/living/simple_mob/animal/sif/shantak/scruffy name = "Scruffy" ai_holder_type = /datum/ai_holder/simple_mob/passive makes_dirt = 0 - faction = "neutral" \ No newline at end of file + faction = "neutral" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm index 8d19324cf25..dab82b850b9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm @@ -2,4 +2,9 @@ /mob/living/simple_mob/animal/sif minbodytemp = 175 cold_resist = 0.75 - heat_resist = -0.5 \ No newline at end of file + heat_resist = -0.5 + + tame_items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 20, + /obj/item/weapon/reagent_containers/food/snacks/meat = 10 + ) diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm index 3973a17add2..5bdddb9542e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm @@ -89,6 +89,11 @@ firing_lanes = TRUE // But not your buddies! conserve_ammo = TRUE // And don't go wasting bullets! +/datum/ai_holder/simple_mob/merc/ranged/sniper + vision_range = 14 // We're a person with a long-ranged gun. + +/datum/ai_holder/simple_mob/merc/ranged/sniper/max_range(atom/movable/AM) + return holder.ICheckRangedAttack(AM) ? 14 : 1 //////////////////////////////// // Melee @@ -174,6 +179,27 @@ base_attack_cooldown = 5 // Two attacks a second or so. reload_max = 20 +// Rifles +/mob/living/simple_mob/humanoid/merc/ranged/rifle + icon_state = "syndicateranged_rifle" + icon_living = "syndicateranged_rifle" + + loot_list = list(/obj/item/weapon/gun/projectile/automatic/z8 = 100) + + projectilesound = 'sound/weapons/Gunshot_heavy.ogg' + projectiletype = /obj/item/projectile/bullet/rifle/a762 + projectile_dispersion = 8 + projectile_accuracy = -15 + base_attack_cooldown = 5 + reload_max = 30 + +/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag + loot_list = list(/obj/item/weapon/gun/magnetic/railgun/flechette = 100) + projectiletype = /obj/item/projectile/bullet/magnetic/flechette + + projectilesound = 'sound/weapons/rapidslice.ogg' + reload_max = 10 + // Laser Rifle /mob/living/simple_mob/humanoid/merc/ranged/laser icon_state = "syndicateranged_laser" @@ -214,6 +240,89 @@ projectile_accuracy = -40 special_attack_charges = 5 +// Technician, also kind of a miniboss. Carries a dartgun and manhack launcher. +/mob/living/simple_mob/humanoid/merc/ranged/technician + icon_state = "syndicateranged_technician" + icon_living = "syndicateranged_technician" + projectiletype = /obj/item/projectile/fake_syringe/poison // Toxin dart. + projectilesound = 'sound/weapons/Gunshot_old.ogg' + + loot_list = list(/obj/item/weapon/gun/projectile/dartgun = 100, + /obj/item/weapon/gun/launcher/grenade = 100, + /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 50, + /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 30 + ) + + reload_max = 5 + reload_time = 1 SECOND + + // Manhacks. + grenade_type = /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary + + projectile_dispersion = 8 + projectile_accuracy = -40 + special_attack_charges = 5 + +// Sniper, definitely a miniboss, based on its massive range advantage, and method of battle. +// Creates a beam for 2 seconds, fire after another .5, then a 5 second reload. +/mob/living/simple_mob/humanoid/merc/ranged/sniper + icon_state = "syndicateranged_sniper" + icon_living = "syndicateranged_sniper" + projectiletype = /obj/item/projectile/bullet/rifle/a145/highvel // Really scary bullet. + projectilesound = 'sound/weapons/Gunshot_cannon.ogg' + + projectile_accuracy = 75 + + reload_max = 1 + reload_time = 5 SECONDS + + ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged/sniper + + ranged_attack_delay = 2.5 SECONDS + + loot_list = list(/obj/item/sniper_rifle_part/barrel = 50, + /obj/item/sniper_rifle_part/stock = 50, + /obj/item/sniper_rifle_part/trigger_group = 50, + /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 90 + ) + + // Babyfrags. + grenade_type = /obj/item/weapon/grenade/explosive/mini + // Babyfrags go a long way. + special_attack_min_range = 6 + special_attack_max_range = 10 + +/mob/living/simple_mob/humanoid/merc/ranged/sniper/ranged_pre_animation(atom/A) + Beam(get_turf(A), icon_state = "sniper_beam", time = 2 SECONDS, maxdistance = 15) + . = ..() + +/mob/living/simple_mob/humanoid/merc/ranged/sniper/shoot_target(atom/A) + set waitfor = FALSE + setClickCooldown(get_attack_speed()) + + face_atom(A) + + var/atom/orig_targ = A + + if(ranged_attack_delay) + A = get_turf(orig_targ) + ranged_pre_animation(A) + handle_attack_delay(A, ranged_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false. + + if(needs_reload) + if(reload_count >= reload_max) + try_reload() + return FALSE + + visible_message("\The [src] fires at \the [orig_targ]!") + shoot(A) + if(casingtype) + new casingtype(loc) + + if(ranged_attack_delay) + ranged_post_animation(A) + + return TRUE //////////////////////////////// // Space Mercs @@ -274,24 +383,39 @@ // PoI Mercs //////////////////////////////// -// None of these drop weapons, until we have a better way to balance them +// Most likely to drop a broken weapon matching them, if it's a gun. /mob/living/simple_mob/humanoid/merc/melee/poi - loot_list = list() + loot_list = list(/obj/item/weapon/material/knife/tacknife/combatknife = 100) /mob/living/simple_mob/humanoid/merc/melee/sword/poi - loot_list = list() + loot_list = list(/obj/item/weapon/melee/energy/sword/color = 20, + /obj/item/weapon/shield/energy = 40 + ) /mob/living/simple_mob/humanoid/merc/ranged/poi - loot_list = list() + loot_list = list(/obj/random/projectile/scrapped_pistol = 100) /mob/living/simple_mob/humanoid/merc/ranged/smg/poi - loot_list = list() + loot_list = list(/obj/random/projectile/scrapped_smg = 100) /mob/living/simple_mob/humanoid/merc/ranged/laser/poi - loot_list = list() + loot_list = list(/obj/random/projectile/scrapped_laser = 100) -/mob/living/simple_mob/humanoid/merc/ranged/ionrifle - loot_list = list() +/mob/living/simple_mob/humanoid/merc/ranged/ionrifle/poi + loot_list = list(/obj/random/projectile/scrapped_ionrifle = 100) /mob/living/simple_mob/humanoid/merc/ranged/grenadier/poi - loot_list = list() \ No newline at end of file + loot_list = list(/obj/random/projectile/scrapped_shotgun = 100) + +/mob/living/simple_mob/humanoid/merc/ranged/rifle/poi + loot_list = list(/obj/random/projectile/scrapped_bulldog = 100) + +/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag/poi + loot_list = list(/obj/random/projectile/scrapped_flechette = 100) + +/mob/living/simple_mob/humanoid/merc/ranged/technician/poi + loot_list = list(/obj/random/projectile/scrapped_dartgun = 100, + /obj/random/projectile/scrapped_grenadelauncher = 100, + /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 50, + /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 30 + ) \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm similarity index 100% rename from code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm rename to code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm new file mode 100644 index 00000000000..5c6660e67c5 --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm @@ -0,0 +1,126 @@ +/* + Mining drones have a slow-firing, armor-piercing beam that can destroy rocks. + They will, if "tamed", collect ore and deposit it into nearby oreboxes when adjacent. +*/ + +/datum/category_item/catalogue/technology/drone/mining_drone + name = "Drone - Mining Drone" + desc = "A crude modification of the commonly seen combat drone model, usually created\ + from the salvaged husks that litter debris fields. Capable of crude problem solving,\ + the drone's targeting system has been repurposed for locating suitable ores, though even\ + that is only functional in certain conditions.\ +

\ + These drones are armed with high-power mining emitters, which makes their decrepit forms\ + just as lethal as they were in their prime. Modified thrust vectoring devices allow them\ + to gather ore effectively without expending mechanical energy." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/mechanical/mining_drone + name = "mining drone" + desc = "An automated drone with a worn-out appearance, but an ominous gaze." + catalogue_data = list(/datum/category_item/catalogue/technology/drone/mining_drone) + + icon_state = "miningdrone" + icon_living = "miningdrone" + icon_dead = "miningdrone_dead" + has_eye_glow = TRUE + + faction = "malf_drone" + + maxHealth = 50 + health = 50 + movement_cooldown = 5 + hovering = TRUE + + base_attack_cooldown = 5 + projectiletype = /obj/item/projectile/energy/excavate + projectilesound = 'sound/weapons/pulse3.ogg' + + response_help = "pokes" + response_disarm = "gently pushes aside" + response_harm = "hits" + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening + say_list_type = /datum/say_list/malf_drone + + tame_items = list( + /obj/item/weapon/ore/verdantium = 90, + /obj/item/weapon/ore/hydrogen = 90, + /obj/item/weapon/ore/osmium = 70, + /obj/item/weapon/ore/diamond = 70, + /obj/item/weapon/ore/gold = 55, + /obj/item/weapon/ore/silver = 55, + /obj/item/weapon/ore/lead = 40, + /obj/item/weapon/ore/marble = 30, + /obj/item/weapon/ore/coal = 25, + /obj/item/weapon/ore/iron = 25, + /obj/item/weapon/ore/glass = 15, + /obj/item/weapon/ore = 5 + ) + + var/datum/effect/effect/system/ion_trail_follow/ion_trail = null + var/obj/item/shield_projector/shields = null + var/obj/item/weapon/storage/bag/ore/my_storage = null + + var/last_search = 0 + var/search_cooldown = 5 SECONDS + +/mob/living/simple_mob/mechanical/mining_drone/Initialize() + ion_trail = new + ion_trail.set_up(src) + ion_trail.start() + + my_storage = new /obj/item/weapon/storage/bag/ore(src) + shields = new /obj/item/shield_projector/rectangle/automatic/drone(src) + return ..() + +/mob/living/simple_mob/mechanical/mining_drone/Destroy() + QDEL_NULL(ion_trail) + QDEL_NULL(shields) + QDEL_NULL(my_storage) + return ..() + +/mob/living/simple_mob/mechanical/mining_drone/death() + my_storage.forceMove(get_turf(src)) + my_storage = null + ..(null,"suddenly breaks apart.") + qdel(src) + +/mob/living/simple_mob/mechanical/mining_drone/Process_Spacemove(var/check_drift = 0) + return TRUE + +/mob/living/simple_mob/mechanical/mining_drone/IIsAlly(mob/living/L) + . = ..() + + var/mob/living/carbon/human/H = L + if(!istype(H)) + return . + + if(!.) + var/has_tool = FALSE + var/obj/item/I = H.get_active_hand() + if(istype(I,/obj/item/weapon/pickaxe)) + has_tool = TRUE + return has_tool + +/mob/living/simple_mob/mechanical/mining_drone/handle_special() + if(my_storage && (get_AI_stance() in list(STANCE_APPROACH, STANCE_IDLE, STANCE_FOLLOW)) && !is_AI_busy() && isturf(loc) && (world.time > last_search + search_cooldown) && (my_storage.contents.len < my_storage.max_storage_space)) + last_search = world.time + + for(var/turf/T in view(world.view,src)) + if(my_storage.contents.len >= my_storage.max_storage_space) + break + + if((locate(/obj/item/weapon/ore) in T) && prob(40)) + src.Beam(T, icon_state = "holo_beam", time = 0.5 SECONDS) + my_storage.rangedload(T, src) + + if(my_storage.contents.len >= my_storage.max_storage_space) + visible_message("\The [src] emits a shrill beep, indicating its storage is full.") + + var/obj/structure/ore_box/OB = locate() in view(2, src) + + if(istype(OB) && my_storage && my_storage.contents.len) + src.Beam(OB, icon_state = "rped_upgrade", time = 1 SECONDS) + for(var/obj/item/I in my_storage) + my_storage.remove_from_storage(I, OB) diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm index f5baafcc24e..df0984878ed 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm @@ -67,4 +67,12 @@ // Variant that starts in defense mode, perhaps for PoIs. /mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize() set_defense_mode(TRUE) - return ..() + return ..() + +/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary + desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War.\ + This one has been retrofitted into a turret." + + projectiletype = /obj/item/projectile/beam/heavylaser/fakeemitter + + pilot_type = /mob/living/simple_mob/humanoid/merc/ranged diff --git a/code/modules/mob/living/simple_mob/taming.dm b/code/modules/mob/living/simple_mob/taming.dm new file mode 100644 index 00000000000..e24b675c5be --- /dev/null +++ b/code/modules/mob/living/simple_mob/taming.dm @@ -0,0 +1,62 @@ + +/mob/living/simple_mob + // Assoc list of items that can be given to a mob to befriend it, and the percent success. + var/list/tame_items + // List of mobs who are 'friends'. + var/list/tamers + +/mob/living/simple_mob/IIsAlly(mob/living/L) + . = ..() + + if(!. && LAZYLEN(tamers)) + listclearnulls(tamers) + if(L in tamers) + return TRUE + +/mob/living/simple_mob/proc/can_tame(var/obj/O, var/mob/user) + if(!LAZYLEN(tame_items)) + return FALSE + + if(!user) + return FALSE + + if(!O) + return FALSE + + for(var/path in tame_items) + if(istype(O, path) && unique_tame_check(O,user)) + return TRUE + + return FALSE + +/mob/living/simple_mob/proc/unique_tame_check(var/obj/O, var/mob/user) + if(do_after(user, 0.5 SECONDS, src)) + return TRUE + return FALSE + +/mob/living/simple_mob/proc/tame_prob(var/obj/O, var/mob/user) + for(var/path in tame_items) + if(istype(O, path)) + if(prob(tame_items[path])) + return TRUE + return FALSE + +/mob/living/simple_mob/proc/do_tame(var/obj/O, var/mob/user) + if(!user) + return + + if(!LAZYLEN(tamers)) + tamers = list() + + handle_tame_item(O, user) + + tamers |= user + ai_holder.forget_everything() + +/mob/living/simple_mob/proc/handle_tame_item(var/obj/O, var/mob/user) + user.drop_from_inventory(O) + qdel(O) + +/mob/living/simple_mob/proc/fail_tame(var/obj/O, var/mob/user) + user.drop_from_inventory(O) + qdel(O) diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm index b187f325bdf..1dd8f6e149a 100644 --- a/code/modules/projectiles/ammunition/rounds.dm +++ b/code/modules/projectiles/ammunition/rounds.dm @@ -287,6 +287,14 @@ projectile_type = /obj/item/projectile/bullet/rifle/a145 matter = list(DEFAULT_WALL_MATERIAL = 1250) +/obj/item/ammo_casing/a145/highvel + desc = "A 14.5mm sabot shell." + projectile_type = /obj/item/projectile/bullet/rifle/a145 + +/obj/item/ammo_casing/a145/spent/Initialize() + ..() + expend() + /* * 5.45mm */ diff --git a/code/modules/projectiles/broken.dm b/code/modules/projectiles/broken.dm new file mode 100644 index 00000000000..99b6ffbfd10 --- /dev/null +++ b/code/modules/projectiles/broken.dm @@ -0,0 +1,134 @@ + +/obj/item/weapon/broken_gun + desc = "The remains of an unfortunate firearm." + + var/obj/item/weapon/gun/my_guntype = null + + // Materials needed for repair. Associative list, path - number of items + var/list/material_needs + + var/do_rotation = TRUE + +/obj/item/weapon/broken_gun/New(var/newloc, var/path) + ..() + if(path) + if(!setup_gun(path)) + qdel(src) + return + setup_repair_needs() + +/obj/item/weapon/broken_gun/Initialize() + ..() + spawn(30 SECONDS) + if(!my_guntype && !QDELETED(src)) + qdel(src) + +/obj/item/weapon/broken_gun/examine(mob/user) + ..() + if(get_dist(get_turf(user),get_turf(src)) <= 1) + to_chat(user, "You begin inspecting \the [src].") + + if(do_after(user, 5 SECONDS)) + to_chat(user, "\The [src] can possibly be restored with:") + for(var/resource in material_needs) + if(material_needs[resource] > 0) + to_chat(user, "- \icon [resource] x [material_needs[resource]] [resource]") + +/obj/item/weapon/broken_gun/proc/setup_gun(var/obj/item/weapon/gun/path) + if(ispath(path)) + name = "[pick("busted", "broken", "shattered", "scrapped")] [initial(path.name)]" + icon = initial(path.icon) + icon_state = initial(path.icon_state) + + my_guntype = path + + w_class = initial(path.w_class) + + if(do_rotation) + adjust_rotation(rand() * pick(-1,1) * rand(0, 45)) + + return TRUE + + return FALSE + +/obj/item/weapon/broken_gun/proc/setup_repair_needs() + if(!LAZYLEN(material_needs)) + material_needs = list() + + if(prob(40)) + var/chosen_mat = pick(/obj/item/stack/material/plastic, /obj/item/stack/material/plasteel, /obj/item/stack/material/glass) + material_needs[chosen_mat] = rand(1, 3) + + if(prob(30)) + var/component_needed = pick(/obj/item/weapon/stock_parts/gear,/obj/item/weapon/stock_parts/spring,/obj/item/weapon/stock_parts/manipulator) + material_needs[component_needed] = rand(1,3) + + if(ispath(my_guntype, /obj/item/weapon/gun/energy) && prob(25)) + var/component_needed = pick(/obj/item/stack/cable_coil, /obj/item/weapon/stock_parts/scanning_module,/obj/item/weapon/stock_parts/capacitor) + material_needs[component_needed] = rand(1,3) + + if(ispath(my_guntype, /obj/item/weapon/gun/launcher) && prob(50)) + var/component_needed = pick(/obj/item/weapon/tape_roll, /obj/item/weapon/material/wirerod) + material_needs[component_needed] = 1 + + if(ispath(my_guntype, /obj/item/weapon/gun/magnetic) && prob(70)) + var/component_needed = pick(/obj/item/weapon/smes_coil, /obj/item/device/assembly/prox_sensor, /obj/item/weapon/module/power_control) + material_needs[component_needed] = 1 + + material_needs[/obj/item/stack/material/steel] = rand(1,5) + +/obj/item/weapon/broken_gun/attackby(obj/item/W as obj, mob/user as mob) + if(can_repair_with(W, user)) + if(do_after(user, (rand() * 10 SECONDS) + 5 SECONDS)) + repair_with(W, user) + return + + ..() + +/obj/item/weapon/broken_gun/proc/can_repair_with(obj/item/I, mob/user) + for(var/path in material_needs) + if(ispath(path) && istype(I, path)) + if(material_needs[path] > 0) + if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I + if(S.can_use(material_needs[path])) + return TRUE + else + to_chat(user, "You do not have enough [path] to continue repairs.") + else + return TRUE + + return FALSE + +/obj/item/weapon/broken_gun/proc/repair_with(obj/item/I, mob/user) + for(var/path in material_needs) + if(ispath(path) && istype(I, path)) + if(material_needs[path] > 0) + if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I + if(S.can_use(material_needs[path])) + S.use(material_needs[path]) + material_needs[path] = 0 + to_chat(user, "You repair some damage on \the [src] with \the [S].") + else + material_needs[path] = max(0, material_needs[path] - 1) + user.drop_from_inventory(I) + to_chat(user, "You repair some damage on \the [src] with \the [I].") + qdel(I) + + check_complete_repair(user) + + return + +/obj/item/weapon/broken_gun/proc/check_complete_repair(mob/user) + var/fully_repaired = TRUE + for(var/resource in material_needs) + if(material_needs[resource] > 0) + fully_repaired = FALSE + break + + if(fully_repaired) + my_guntype = new my_guntype(get_turf(src)) + my_guntype.name = "[pick("salvaged", "repaired", "old")] [initial(my_guntype.name)]" + to_chat(user, "You finish your repairs on \the [my_guntype].") + qdel(src) diff --git a/code/modules/projectiles/brokenguns/energy.dm b/code/modules/projectiles/brokenguns/energy.dm new file mode 100644 index 00000000000..6427e89c274 --- /dev/null +++ b/code/modules/projectiles/brokenguns/energy.dm @@ -0,0 +1,9 @@ + +/obj/item/weapon/broken_gun/laserrifle/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/energy/laser/empty) + +/obj/item/weapon/broken_gun/laser_retro/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/energy/retro/empty) + +/obj/item/weapon/broken_gun/ionrifle/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/energy/ionrifle/empty) diff --git a/code/modules/projectiles/brokenguns/launcher.dm b/code/modules/projectiles/brokenguns/launcher.dm new file mode 100644 index 00000000000..a66449de78d --- /dev/null +++ b/code/modules/projectiles/brokenguns/launcher.dm @@ -0,0 +1,3 @@ + +/obj/item/weapon/broken_gun/grenadelauncher/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/launcher/grenade) diff --git a/code/modules/projectiles/brokenguns/magnetic.dm b/code/modules/projectiles/brokenguns/magnetic.dm new file mode 100644 index 00000000000..dd1c647fd8e --- /dev/null +++ b/code/modules/projectiles/brokenguns/magnetic.dm @@ -0,0 +1,3 @@ + +/obj/item/weapon/broken_gun/flechette/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/magnetic/railgun/flechette) diff --git a/code/modules/projectiles/brokenguns/projectile.dm b/code/modules/projectiles/brokenguns/projectile.dm new file mode 100644 index 00000000000..741e4bf087d --- /dev/null +++ b/code/modules/projectiles/brokenguns/projectile.dm @@ -0,0 +1,18 @@ + +/obj/item/weapon/broken_gun/c20r/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/projectile/automatic/c20r/empty) + +/obj/item/weapon/broken_gun/silenced45/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/projectile/silenced/empty) + +/obj/item/weapon/broken_gun/pumpshotgun/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/projectile/shotgun/pump/empty) + +/obj/item/weapon/broken_gun/pumpshotgun_combat/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/projectile/shotgun/pump/combat/empty) + +/obj/item/weapon/broken_gun/z8/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/projectile/automatic/z8/empty) + +/obj/item/weapon/broken_gun/dartgun/New(var/newloc) + ..(newloc, /obj/item/weapon/gun/projectile/dartgun) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 45c6364c1b3..778b36694dc 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -19,6 +19,9 @@ list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60), ) +/obj/item/weapon/gun/energy/laser/empty + cell_type = null + /obj/item/weapon/gun/energy/laser/mounted self_recharge = 1 use_external_power = 1 @@ -175,7 +178,7 @@ force = 10 w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. accuracy = -45 //shooting at the hip - scoped_accuracy = 0 + scoped_accuracy = 50 one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand. /obj/item/weapon/gun/energy/sniperrifle/ui_action_click() @@ -192,7 +195,8 @@ name = "antique mono-rifle" desc = "An old laser rifle. This one can only fire once before requiring recharging." description_fluff = "Modeled after ancient hunting rifles, this rifle was dubbed the 'Rainy Day Special' by some, due to its use as some barmens' fight-stopper of choice. One shot is all it takes, or so they say." - icon_state = "eshotgun" + icon = 'icons/obj/energygun.dmi' + icon_state = "mono" item_state = "shotgun" origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_POWER = 3) projectile_type = /obj/item/projectile/beam/sniper @@ -204,6 +208,7 @@ w_class = ITEMSIZE_LARGE accuracy = 10 scoped_accuracy = 15 + charge_meter = FALSE var/scope_multiplier = 1.5 /obj/item/weapon/gun/energy/monorifle/ui_action_click() @@ -220,7 +225,7 @@ name = "combat mono-rifle" desc = "A modernized version of the mono-rifle. This one can fire twice before requiring recharging." description_fluff = "A modern design produced by a company once working from Saint Columbia, based on the antique mono-rifle 'Rainy Day Special' design." - icon_state = "ecshotgun" + icon_state = "cmono" item_state = "cshotgun" charge_cost = 1000 force = 12 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 3fe7a4f21c3..f47053cba00 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -13,6 +13,9 @@ /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) ..(max(severity, 4)) //so it doesn't EMP itself, I guess +/obj/item/weapon/gun/energy/ionrifle/empty + cell_type = null + /obj/item/weapon/gun/energy/ionrifle/pistol name = "ion pistol" desc = "The NT Mk63 EW Pan is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. This model sacrifices capacity for portability." diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index ab107fb0b5d..d3903c21a83 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -58,6 +58,9 @@ // one_handed_penalty = 15 +/obj/item/weapon/gun/projectile/automatic/c20r/empty + magazine_type = null + /obj/item/weapon/gun/projectile/automatic/c20r/update_icon() ..() if(ammo_magazine) @@ -192,6 +195,9 @@ else . += "\The [launcher] is empty." +/obj/item/weapon/gun/projectile/automatic/z8/empty + magazine_type = null + /obj/item/weapon/gun/projectile/automatic/l6_saw name = "light machine gun" desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. 'Aussec Armoury-2531' is engraved on the reciever. Uses 5.45mm rounds. It's also compatible with magazines from STS-35 assault rifles." diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 8426448d6c9..435260b45ee 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -125,6 +125,9 @@ allowed_magazines = list(/obj/item/ammo_magazine/m45) projectile_type = /obj/item/projectile/bullet/pistol/medium +/obj/item/weapon/gun/projectile/silenced/empty + magazine_type = null + /obj/item/weapon/gun/projectile/deagle name = "desert eagle" desc = "The perfect handgun for shooters with a need to hit targets through a wall and behind a fridge in your neighbor's house. Uses .44 rounds." diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 74896b6b6ab..9862b71b068 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -54,6 +54,9 @@ else icon_state = "[icon_state]-empty" +/obj/item/weapon/gun/projectile/shotgun/pump/empty + ammo_type = null + /obj/item/weapon/gun/projectile/shotgun/pump/slug ammo_type = /obj/item/ammo_casing/a12g @@ -67,6 +70,9 @@ ammo_type = /obj/item/ammo_casing/a12g load_method = SINGLE_CASING|SPEEDLOADER +/obj/item/weapon/gun/projectile/shotgun/pump/combat/empty + ammo_type = null + /obj/item/weapon/gun/projectile/shotgun/doublebarrel name = "double-barreled shotgun" desc = "A truely classic weapon. No need to change what works. Uses 12g rounds." diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index e05739d194b..d1a6f22b4d8 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -216,6 +216,16 @@ armor_penetration = 80 hitscan = 1 //so the PTR isn't useless as a sniper weapon + icon_state = "bullet_alt" + tracer_type = /obj/effect/projectile/tracer/cannon + +/obj/item/projectile/bullet/rifle/a145/highvel + damage = 50 + stun = 1 + weaken = 0 + penetrating = 15 + armor_penetration = 90 + /* Miscellaneous */ /obj/item/projectile/bullet/suffocationbullet//How does this even work? diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 132ac6ccf4a..ca3f1c8f51c 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -101,6 +101,19 @@ combustion = FALSE +/obj/item/projectile/energy/excavate + name = "kinetic blast" + icon_state = "kinetic_blast" + fire_sound = 'sound/weapons/pulse3.ogg' + damage_type = BRUTE + damage = 30 + armor_penetration = 60 + excavation_amount = 200 + check_armour = "melee" + + vacuum_traversal = 0 + combustion = FALSE + /obj/item/projectile/energy/dart name = "dart" icon_state = "toxin" diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 2cd05192853..ac039460cb4 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -277,9 +277,9 @@ light_power = 3 light_color = "#3300ff" - muzzle_type = /obj/effect/projectile/tungsten/muzzle - tracer_type = /obj/effect/projectile/tungsten/tracer - impact_type = /obj/effect/projectile/tungsten/impact + muzzle_type = /obj/effect/projectile/muzzle/tungsten + tracer_type = /obj/effect/projectile/tracer/tungsten + impact_type = /obj/effect/projectile/impact/tungsten /obj/item/projectile/beam/tungsten/on_hit(var/atom/target, var/blocked = 0) if(isliving(target)) diff --git a/code/modules/vchat/css/ss13styles.css b/code/modules/vchat/css/ss13styles.css index 375ebb5d808..51d0eb5467a 100644 --- a/code/modules/vchat/css/ss13styles.css +++ b/code/modules/vchat/css/ss13styles.css @@ -162,8 +162,10 @@ h1.alert, h2.alert {color: #000000;} .vulpkanin {color: #B97A57;} .enochian {color: #848A33; letter-spacing:-1pt; word-spacing:4pt; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;} .daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;} -.bug {color: #9e9e39;} +.bug {color: #9e9e39;} .vox {color: #AA00AA;} +.promethean {color: #5A5A5A; font-family:"Comic Sans MS","Comic Sans",cursive;} +.inverted .promethean {color: #A5A5A5; font-family:"Comic Sans MS","Comic Sans",cursive;} .zaddat {color: #941C1C;} .rough {font-family: "Trebuchet MS", cursive, sans-serif;} .say_quote {font-family: Georgia, Verdana, sans-serif;} diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index 7ecf912cfb1..60e3543e196 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -9,19 +9,43 @@ var/datum/artifact_effect/secondary_effect var/being_used = 0 + var/predefined_effects = FALSE + + var/predefined_primary + var/predefined_secondary + + var/predefined_icon_num + + var/predefined_triggers = FALSE + + var/predefined_trig_primary + var/predefined_trig_secondary + /obj/machinery/artifact/New() ..() - var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) - my_effect = new effecttype(src) + if(predefined_effects && predefined_primary) + my_effect = new predefined_primary(src) + + if(predefined_secondary) + secondary_effect = new predefined_secondary(src) + if(prob(75)) + secondary_effect.ToggleActivate(0) + + else + var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) + my_effect = new effecttype(src) - if(prob(75)) - effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) - secondary_effect = new effecttype(src) if(prob(75)) - secondary_effect.ToggleActivate(0) + effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) + secondary_effect = new effecttype(src) + if(prob(75)) + secondary_effect.ToggleActivate(0) - icon_num = rand(0, 14) + if(!isnull(predefined_icon_num)) + icon_num = predefined_icon_num + else + icon_num = rand(0, 14) icon_state = "ano[icon_num]0" if(icon_num == 7 || icon_num == 8) @@ -53,6 +77,13 @@ if(prob(60)) my_effect.trigger = pick(TRIGGER_TOUCH, TRIGGER_HEAT, TRIGGER_COLD, TRIGGER_PHORON, TRIGGER_OXY, TRIGGER_CO2, TRIGGER_NITRO) + if(predefined_triggers) + if(predefined_trig_primary && my_effect) + my_effect.trigger = predefined_trig_primary + + if(predefined_trig_secondary && secondary_effect) + secondary_effect.trigger = predefined_trig_secondary + /obj/machinery/artifact/proc/choose_effect() var/effect_type = input(usr, "What type do you want?", "Effect Type") as null|anything in typesof(/datum/artifact_effect) - /datum/artifact_effect if(effect_type) diff --git a/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm b/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm new file mode 100644 index 00000000000..edec0dd052f --- /dev/null +++ b/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm @@ -0,0 +1,15 @@ +/obj/machinery/artifact/predefined + name = "alien artifact" + desc = "A large alien device." + + predefined_effects = TRUE + + predefined_primary = null + predefined_secondary = null + + predefined_icon_num = null + + predefined_triggers = FALSE + + predefined_trig_primary = null + predefined_trig_secondary = null diff --git a/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm new file mode 100644 index 00000000000..6a81c02b8ba --- /dev/null +++ b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm @@ -0,0 +1,15 @@ +/obj/machinery/artifact/predefined/hungry_statue + name = "alien artifact" + desc = "A large alien device." + + predefined_effects = TRUE + + predefined_primary = /datum/artifact_effect/animate_anomaly + predefined_secondary = /datum/artifact_effect/vampire + + predefined_icon_num = 14 + + predefined_triggers = TRUE + + predefined_trig_primary = TRIGGER_OXY + predefined_trig_secondary = TRIGGER_OXY diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 06ed2760b68..b11b716b668 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -106,6 +106,7 @@ h1.alert, h2.alert {color: #000000;} .bug {color: #9e9e39;} .vox {color: #AA00AA;} .zaddat {color: #941C1C;} +.promethean {color: #5A5A5A;} .rough {font-family: "Trebuchet MS", cursive, sans-serif;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .terminus {font-family: "Times New Roman", Times, serif, sans-serif} diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index 5db091ac833..75789017348 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -1,6 +1,5 @@ some~user - Species -911earlyarther - Xenomorph Hybrid admiraldragon - Vox aetherelemental - Daemon arandomalien - Xenochimera @@ -9,9 +8,7 @@ aruis - Diona aruis - Xenochimera amarewolf - Xenochimera azmodan412 - Xenochimera -azmodan412 - Xenomorph Hybrid bothnevarbackwards - Diona -cameron653 - Xenomorph Hybrid crossexonar - Protean chillyfang - Black-Eyed Shadekin flaktual - Vox @@ -21,7 +18,6 @@ hollifex - Diona inuzari - Diona jademanique - Xenochimera jemli - Gutter -killerdragn - Xenomorph Hybrid ktccd - Diona mewchild - Diona mewchild - Vox @@ -32,14 +28,12 @@ paradoxspace - Xenochimera rapidvalj - Vox rapidvalj - Common Skrellian rapidvalj - High Skrellian -rikaru19xjenkins - Xenomorph Hybrid rikaru19xjenkins - Xenochimera rixunie - Diona rixunie - Gutter rykkastormheart - Xenochimera seiga - Vox sepulchre - Vox -sepulchre - Xenomorph Hybrid silvertalismen - Diona silvertalismen - Vox silvertalismen - Xenochimera @@ -49,12 +43,8 @@ tastypred - Xenochimera timidvi - Diona varonis - Xenochimera verkister - Xenochimera -westfire - Xenomorph Hybrid wickedtemp - Shadekin Empathy -wtfismyname - Xenomorph Hybrid xioen - Diona xioen - Xenochimera -xioen - Xenomorph Hybrid zalvine - Shadekin Empathy zammyman215 - Vox -zekesturm - Xenomorph Hybrid diff --git a/html/changelogs/Layne - Promethean Language.yml b/html/changelogs/Layne - Promethean Language.yml new file mode 100644 index 00000000000..ed0f2e7ab34 --- /dev/null +++ b/html/changelogs/Layne - Promethean Language.yml @@ -0,0 +1,5 @@ +author: Layne +delete-after: True +changes: + - rscadd: "Promethean language." + - tweak: "NONVERBAL define was changed a bit." diff --git a/html/changelogs/atlantiscze-hardsuit.yml b/html/changelogs/atlantiscze-hardsuit.yml new file mode 100644 index 00000000000..92cea414723 --- /dev/null +++ b/html/changelogs/atlantiscze-hardsuit.yml @@ -0,0 +1,6 @@ +author: atlantiscze + +delete-after: True + +changes: + - rscadd: "Hardsuits now allow backpacks to be carried in storage slot. This is limited to hardsuits which are worn on the back slot." \ No newline at end of file diff --git a/html/changelogs/mechoid-newhorizon.yml b/html/changelogs/mechoid-newhorizon.yml new file mode 100644 index 00000000000..e9740680a39 --- /dev/null +++ b/html/changelogs/mechoid-newhorizon.yml @@ -0,0 +1,44 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Mechoid + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds more interactions with animals, like shearing and taming." + - rscadd: "Sif moss turfs can now spawn animal groups." + - rscadd: "New PoIs" + - rscadd: "Thermal poncho attachment, has minor slowdown, but gives thermal protection to the armor it is attached to." + - rscadd: "Mercenaries now drop their guns again. Most likely to be broken, however they can be repaired. Examining when adjacent will allow you to inspect the gun for what is needed." + - rscadd: "Mercenary Snipers now exist. They will telegraph their shots approximately 2 seconds in advance, and can fire at 14 tiles away. Will occasionally drop pieces of their PTRs that survive combat." + - tweak: "Clothing can now check attachments for temperature resistance." + - bugfix: "MHD Howitzer beam effect actually exists again. + - bugfix: "Xenoresin ground cover is properly colored again." diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index 6c631498f65..4115b01ef2e 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index e956f358741..0c0dce59bc4 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/obj/clothing/modular_armor.dmi b/icons/obj/clothing/modular_armor.dmi index 1372ff9a5eb..119f56d6b51 100644 Binary files a/icons/obj/clothing/modular_armor.dmi and b/icons/obj/clothing/modular_armor.dmi differ diff --git a/icons/obj/energygun.dmi b/icons/obj/energygun.dmi index 157c3c11f6d..73c39449bbe 100644 Binary files a/icons/obj/energygun.dmi and b/icons/obj/energygun.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 1b753e9c872..1a56a0be84d 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/turrets.dmi b/icons/obj/turrets.dmi index 34956832055..32346c5a5ef 100644 Binary files a/icons/obj/turrets.dmi and b/icons/obj/turrets.dmi differ diff --git a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm index e44e5185f82..8d1de5b00c4 100644 --- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm +++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm @@ -1,18 +1,39 @@ "a" = (/turf/template_noop,/area/template_noop) -"b" = (/turf/template_noop,/area/submap/Cavelake) -"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Cavelake) -"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) -"e" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) -"f" = (/turf/simulated/floor/outdoors/rocks,/area/submap/Cavelake) -"g" = (/mob/living/simple_mob/animal/sif/hooligan_crab,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) -"h" = (/turf/simulated/floor/water,/area/submap/Cavelake) -"i" = (/mob/living/simple_mob/animal/passive/fish/perch,/turf/simulated/floor/water,/area/submap/Cavelake) -"j" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) -"k" = (/mob/living/simple_mob/animal/passive/fish/trout,/turf/simulated/floor/water,/area/submap/Cavelake) -"l" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) -"m" = (/obj/random/mob/sif,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) -"n" = (/obj/item/clothing/mask/snorkel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) -"o" = (/obj/effect/decal/remains/mouse,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake) +"b" = (/turf/template_noop,/area/submap/CaveTrench) +"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveTrench) +"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"e" = (/turf/simulated/floor/outdoors/rocks,/area/submap/CaveTrench) +"f" = (/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench) +"g" = (/obj/random/mob/robotic/drone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"h" = (/mob/living/simple_mob/animal/passive/fish/trout{faction = "malf_drone"},/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench) +"i" = (/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"j" = (/turf/simulated/wall,/area/submap/CaveTrench) +"k" = (/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"l" = (/mob/living/simple_mob/animal/passive/fish/trout,/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench) +"m" = (/turf/simulated/wall/wood,/area/submap/CaveTrench) +"n" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"o" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"p" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"q" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"r" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"s" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "Rellek's telling me that we're in deep shit if the townies found out I'm cooking up drones out here. Like I give a fuck, We're minning our asses off only to dig into some bug nest to get our legs chewed. Well I'm not looking a gift horse in the mouth. Those drone dudes out in the wild hooked us up with these machines so long as they get some of the metal we dig up. Win win for us, Guess we're retiring early after all."; name = "Note"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"t" = (/obj/structure/table/steel,/obj/item/robot_parts/robot_component/actuator,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"u" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"v" = (/obj/structure/simple_door/wood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"w" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"x" = (/obj/structure/table/steel,/obj/item/device/robotanalyzer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"y" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"z" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"A" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"B" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench) +"C" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"D" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"E" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"F" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench) +"G" = (/obj/structure/table/steel,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/head,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"H" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench) +"I" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/shuttle/plating,/area/submap/CaveTrench) +"J" = (/obj/machinery/drone_fabricator{fabricator_tag = "Unknown"},/turf/simulated/shuttle/plating,/area/submap/CaveTrench) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -55,4 +76,4 @@ abbbbbbbcccccccccccbbbbbccbbbbbbbbbbbbba abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -"} \ No newline at end of file +"} diff --git a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm index 9b19efeea79..adeb82580f9 100644 --- a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm +++ b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm @@ -25,6 +25,7 @@ "ay" = (/obj/effect/decal/mecha_wreckage/gygax{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) "az" = (/obj/effect/gibspawner/generic,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle) "aA" = (/obj/structure/closet/medical_wall,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle) +"aB" = (/obj/machinery/artifact/predefined/hungry_statue,/obj/structure/largecrate,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle) "aC" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) "aD" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) "aE" = (/obj/structure/extinguisher_cabinet,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle) @@ -90,7 +91,7 @@ "bM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) "bN" = (/obj/structure/toilet{dir = 8},/obj/effect/gibspawner/generic,/obj/effect/decal/remains/human,/obj/item/weapon/card/id/syndicate{age = "\\42"; blood_type = "\\O+"; desc = "A strange ID card."; dna_hash = "\[REDACTED]"; fingerprint_hash = "\\------"; name = "Aaron Presley's ID Card(Delivery Service) "; registered_name = "Aaron Presley"; sex = "\\Male"},/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle) "bO" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/remains/human,/obj/item/weapon/flame/lighter/random,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -103,7 +104,7 @@ aaaYaaaRacaaadadaZapbIbybIazbbadaNacanbJaaaaaaaaaa aaaababdbeapapapadadadbIadadauadaNaAaeaTanaaaaataa acaaaaaaapadauadadadacacaSacanadavacbhaeaeahaaaaaa aPadaVaRacadadadbiadacbjafafacadadadbKbpaHaraaaaaa -aaaPadaaacaMadbkadbbacbvafbwacaLadaSbKbqaHaoapaaaa +aaaPadaaacaMadbkadbbacbvaBbwacaLadaSbKbqaHaoapaaaa aPbxaVaRacaWadbbadbbanblbLbzanadbbasaebraFaIaabfaa aPaPaaaaaaaabEazadadanacacacaEadadahaebpaHaoaaaiaa aPaPadaaaJapbIadadaPaPadadadadadadacaeaeaeahaaaaaa @@ -118,4 +119,3 @@ aaaaaaaaaaaaadaLaaaabmbMbObmbmaaaaaaaaaaaaaaaaaaaa aaaaadadaaaaaaacaPbCbmbmbmaaajaaaaaaaaaaaaaaaaaaaa aaaaaaadaaaaaaaPaPaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/maps/submaps/surface_submaps/mountains/excavation1.dmm b/maps/submaps/surface_submaps/mountains/excavation1.dmm new file mode 100644 index 00000000000..169efe4eb5c --- /dev/null +++ b/maps/submaps/surface_submaps/mountains/excavation1.dmm @@ -0,0 +1,51 @@ +"a" = (/turf/simulated/mineral,/area/template_noop) +"b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) +"c" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"d" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"e" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"f" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"g" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"h" = (/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"i" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"j" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"k" = (/obj/mecha/working/ripley,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"l" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"m" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/tool/drill/bore,/obj/item/weapon/ore/marble,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"n" = (/obj/item/weapon/ore,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"o" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"q" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"r" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"s" = (/obj/item/weapon/ore/marble,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"t" = (/obj/item/weapon/ore/gold,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"u" = (/obj/item/weapon/ore/diamond,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"v" = (/mob/living/simple_mob/mechanical/mining_drone,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"w" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/pickaxe/jackhammer,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"x" = (/obj/structure/table/sifwoodentable,/obj/random/projectile/scrapped_grenadelauncher,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"y" = (/obj/structure/table/sifwoodentable,/obj/random/medical/pillbottle,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"z" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"A" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/mining_scanner,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"B" = (/obj/structure/table/sifwoodentable,/obj/random/cigarettes,/obj/random/tool/powermaint,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation) +"C" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"D" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"E" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"F" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) +"G" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation) + +(1,1,1) = {" +aabbbbbbbaa +accdeeefcca +bcdghhijfcb +bdghikihjfb +bliimnoiipb +blhiqirihpb +bliniisnhpb +blhtiuiiipb +bliviinvhpb +blhwinixipb +blhynitzhpb +bliAiniBhpb +bliisinihpb +aCDEniiFDGa +aabbbbbbbaa +"} diff --git a/maps/submaps/surface_submaps/mountains/mountains.dm b/maps/submaps/surface_submaps/mountains/mountains.dm index 62cb5c4a268..c6a7a2f6849 100644 --- a/maps/submaps/surface_submaps/mountains/mountains.dm +++ b/maps/submaps/surface_submaps/mountains/mountains.dm @@ -38,6 +38,7 @@ #include "Geyser2.dmm" #include "Geyser3.dmm" #include "Cliff1.dmm" +#include "excavation1.dmm" #endif // The 'mountains' is the mining z-level, and has a lot of caves. @@ -254,8 +255,8 @@ /datum/map_template/surface/mountains/normal/crashed_ufo_frigate //VOREStation Edit name = "Crashed UFO Frigate" - desc = "A (formerly) flying saucer that is now embedded into the mountain, yet its combat protocols still seem to be running..." - mappath = 'maps/submaps/surface_submaps/mountains/crashed_ufo.dmm' + desc = "A (formerly) flying saucer that is now embedded into the mountain, yet the combat protocols still seem to be running..." + mappath = 'maps/submaps/surface_submaps/mountains/crashed_ufo_frigate.dmm' cost = 60 discard_prob = 50 @@ -340,3 +341,9 @@ mappath = 'maps/submaps/surface_submaps/mountains/CrashedMedShuttle1_vr.dmm' //VOREStation Edit cost = 20 fixed_orientation = TRUE + +/datum/map_template/surface/mountains/deep/excavation1 + name = "Excavation Site" + desc = "An abandoned mining site." + mappath = 'maps/submaps/surface_submaps/mountains/excavation1.dmm' + cost = 20 diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm index 00700bd7dbf..a6968fac98b 100644 --- a/maps/submaps/surface_submaps/mountains/mountains_areas.dm +++ b/maps/submaps/surface_submaps/mountains/mountains_areas.dm @@ -134,4 +134,8 @@ /area/submap/lava_trench/outpost name = "POI - Trench Outpost" requires_power = FALSE - icon_state = "submap2" \ No newline at end of file + icon_state = "submap2" + +/area/submap/Excavation + name = "POI - Excavation Site" + ambience = AMBIENCE_FOREBODING diff --git a/maps/submaps/surface_submaps/plains/BuriedTreasure.dmm b/maps/submaps/surface_submaps/plains/BuriedTreasure.dmm new file mode 100644 index 00000000000..0018404dcab --- /dev/null +++ b/maps/submaps/surface_submaps/plains/BuriedTreasure.dmm @@ -0,0 +1,10 @@ +"a" = (/turf/template_noop,/area/submap/BuriedTreasure) +"b" = (/obj/structure/closet/grave,/obj/random/gun/random,/obj/random/contraband,/obj/random/cash,/obj/random/cigarettes,/obj/random/trash,/obj/random/junk,/obj/random/drinkbottle,/turf/template_noop,/area/submap/BuriedTreasure) + +(1,1,1) = {" +aaaaa +aaaaa +aabaa +aaaaa +aaaaa +"} diff --git a/maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm b/maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm new file mode 100644 index 00000000000..f10b287e69a --- /dev/null +++ b/maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm @@ -0,0 +1,10 @@ +"a" = (/turf/template_noop,/area/submap/BuriedTreasure) +"b" = (/obj/structure/closet/grave,/obj/random/contraband,/obj/random/contraband,/obj/random/cash,/obj/random/cash,/obj/random/cash,/obj/random/cash,/obj/random/drinkbottle,/obj/random/mre,/obj/random/projectile/sec,/obj/item/clothing/under/explorer/armored,/turf/template_noop,/area/submap/BuriedTreasure) + +(1,1,1) = {" +aaaaa +aaaaa +aabaa +aaaaa +aaaaa +"} diff --git a/maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm b/maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm new file mode 100644 index 00000000000..fdc989871df --- /dev/null +++ b/maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm @@ -0,0 +1,10 @@ +"a" = (/turf/template_noop,/area/submap/BuriedTreasure) +"b" = (/obj/structure/closet/grave,/obj/random/energy,/obj/random/drinkbottle,/obj/random/contraband,/obj/random/ammo,/obj/random/ammo,/obj/random/mre,/obj/random/tool/power,/obj/random/unidentified_medicine/fresh_medicine,/obj/random/unidentified_medicine/combat_medicine,/obj/random/medical/pillbottle,/obj/random/soap,/turf/template_noop,/area/submap/BuriedTreasure) + +(1,1,1) = {" +aaaaa +aaaaa +aabaa +aaaaa +aaaaa +"} diff --git a/maps/submaps/surface_submaps/plains/PlainsKururak.dmm b/maps/submaps/surface_submaps/plains/PlainsKururak.dmm new file mode 100644 index 00000000000..f3a43e4c917 --- /dev/null +++ b/maps/submaps/surface_submaps/plains/PlainsKururak.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/PlainsKururak) +"c" = (/obj/random/trash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"d" = (/obj/random/firstaid,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"e" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"f" = (/obj/random/projectile/sec,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"g" = (/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"h" = (/mob/living/simple_mob/animal/sif/kururak,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"i" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"j" = (/obj/random/contraband,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"k" = (/mob/living/simple_mob/animal/sif/diyaab,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak) +"l" = (/obj/random/trash,/turf/template_noop,/area/submap/PlainsKururak) +"m" = (/turf/template_noop,/area/submap/PlainsKururak) + +(1,1,1) = {" +aaaaaaaaaa +abbbbbbbaa +bbbcdefbaa +bbgeehibba +bbieebbbba +bbbjebklma +abbbckkbba +aabbbbibba +aaaabbbbaa +aaaaaaaaaa +"} diff --git a/maps/submaps/surface_submaps/plains/Thiefc.dmm b/maps/submaps/surface_submaps/plains/Thiefc.dmm index 57a27da7c56..f8b83273636 100644 --- a/maps/submaps/surface_submaps/plains/Thiefc.dmm +++ b/maps/submaps/surface_submaps/plains/Thiefc.dmm @@ -13,7 +13,7 @@ "m" = (/obj/structure/table/steel,/obj/item/weapon/paper{desc = "This is some bullshit. First chance we got to knick something that looks half decent turns out to be mostly junk. And now we're getting calls that the other stash we've got has got a spider problem. Fuck this, Between the shitty weather, The pissed of bugs, And now apparently some NT goon running around in the area there's hardly enough reason to stick around. I'm telling Carl I'm out tommorow."; name = "Note"},/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) "n" = (/obj/vehicle/train/trolley,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) "o" = (/obj/structure/closet/crate,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) -"p" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/practiceshells,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"p" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/practiceshells,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/submaps/surface_submaps/plains/plains.dm b/maps/submaps/surface_submaps/plains/plains.dm index f8f017af3db..cf05e432230 100644 --- a/maps/submaps/surface_submaps/plains/plains.dm +++ b/maps/submaps/surface_submaps/plains/plains.dm @@ -28,6 +28,10 @@ #include "SupplyDrop2.dmm" #include "RationCache.dmm" #include "Oldhouse.dmm" +#include "PlainsKururak.dmm" +#include "BuriedTreasure.dmm" +#include "BuriedTreasure2.dmm" +#include "BuriedTreasure3.dmm" #endif @@ -215,3 +219,30 @@ desc = "A dumped chemical canister. Looks dangerous." mappath = 'maps/submaps/surface_submaps/plains/chemspill1_vr.dmm' //VOREStation Edit cost = 10 + +/datum/map_template/surface/plains/PlainsKururak + name = "Lone Kururak" + desc = "A lone Kururak's den." + mappath = 'maps/submaps/surface_submaps/plains/PlainsKururak.dmm' + cost = 10 + +/datum/map_template/surface/plains/BuriedTreasure1 + name = "Buried Treasure 1" + desc = "A hole in the ground, who knows what might be inside!" + mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure.dmm' + cost = 10 + template_group = "Shallow Grave" + +/datum/map_template/surface/plains/BuriedTreasure2 + name = "Buried Treasure 2" + desc = "A hole in the ground, who knows what might be inside!" + mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm' + cost = 10 + template_group = "Shallow Grave" + +/datum/map_template/surface/plains/BuriedTreasure3 + name = "Buried Treasure 3" + desc = "A hole in the ground, who knows what might be inside!" + mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm' + cost = 10 + template_group = "Shallow Grave" diff --git a/maps/submaps/surface_submaps/plains/plains_areas.dm b/maps/submaps/surface_submaps/plains/plains_areas.dm index f6e6d9677c2..58895767572 100644 --- a/maps/submaps/surface_submaps/plains/plains_areas.dm +++ b/maps/submaps/surface_submaps/plains/plains_areas.dm @@ -61,6 +61,9 @@ /area/submap/Smol3 name = "POI - Merchant's Stand" +/area/submap/PlainsKururak + name = "POI - Lone Kururak" + /area/submap/PooledR name = "POI - Pooled Rocks" ambience = AMBIENCE_SIF @@ -103,3 +106,7 @@ /area/submap/ChemSpill1 name = "POI - Ruptured Canister" ambience = AMBIENCE_TECH_RUINS + +/area/submap/BuriedTreasure + name = "POI - Buried Treasure" + ambience = AMBIENCE_FOREBODING diff --git a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm index 7bf4c4d9213..426c4c67bfd 100644 --- a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm +++ b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm @@ -5,7 +5,7 @@ "ae" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/Blackshuttledown) "af" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Blackshuttledown) "ag" = (/obj/structure/table/steel,/turf/template_noop,/area/submap/Blackshuttledown) -"ah" = (/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/template_noop,/area/submap/Blackshuttledown) +"ah" = (/obj/random/mob/merc/all,/turf/template_noop,/area/submap/Blackshuttledown) "ai" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown) "aj" = (/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown) "ak" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown) @@ -63,16 +63,16 @@ "bk" = (/obj/structure/table/steel,/obj/item/weapon/material/knife,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bl" = (/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bm" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bn" = (/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) +"bn" = (/obj/random/mob/merc/all,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bo" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) -"bp" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bp" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/random/projectile/scrapped_gun,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) "bq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) "br" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bs" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bt" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bu" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bv" = (/obj/structure/table/steel,/obj/random/projectile,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) -"bw" = (/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) +"bw" = (/obj/machinery/fusion_fuel_compressor,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) "bx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/Blackshuttledown) "by" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bz" = (/obj/effect/floor_decal/corner/grey,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) @@ -86,7 +86,7 @@ "bH" = (/obj/machinery/power/apc{dir = 8; name = "BSD APC"; pixel_x = -24},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) "bI" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) "bJ" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) -"bK" = (/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,/turf/template_noop,/area/submap/Blackshuttledown) +"bK" = (/obj/machinery/fusion_fuel_injector/mapped{icon_state = "injector0"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown) "bL" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bM" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) "bN" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "We need to take a short stop. The engine's are in need of minor repairs due to turbulence, should be a week's time. We've got reserve food supplies but pleanty of locale fauna to subsist on too if need be. PCRC is keeping most of there assets near New Reykjavik and locale authorities are more mindful then most to travel in this kind of weather. Our outfit should be at the rendezvous point in less then ten days assuming the upper ecehelon hasn't dropped ties with us yet."; name = "Operation Progress/M-53"},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown) @@ -130,17 +130,17 @@ aaabababababababababababababadadabababafabababafababaeababadadabababaa aaababafabadadadababababafababababababababababababababababadadabababaa aaabababababadadadabacababababagagagagagagabababababacabafabadabababaa aaababababababadadabafababababagahabababagabababababababababababababaa -aaabababababababaiajajajakababagabababbKagabababafaiajajajajakabababaa +aaabababababababaiajajajakababagabababahagabababafaiajajajajakabababaa aaabababababababajajajajajajajajajababajajajajajajajajajajajalamababaa aaababababafababajajajajajajanaoajapapajaqarasatauajajajajajalamababaa aaabababababababavajajawaxajayazajaAaAajaBaCaDaEaEaEaFajajaGababababaa aaabababababababaHajajaIaJajayaKaLaLaMajaBaNaNaEaOaDaPajaGabababababaa aaabafababababaHajaQajawaRajayaSaTaTaUajaVaWaEaXaYaZbaajababababafabaa aaabababababaHajbbbcajbdajajayazajajajajajajbeajajajajajbfabababababaa -aaabababababajbgbhazajbiaLaLbhazajbjbkblbmblbnblajbobobpajbfababababaa +aaabababababajbgbhazajbiaLaLbhazajbjbkblbmbnblblajbobobpajbfababababaa aaabababababbqbrblazajbsblblblbtajblblbububublblajbvblblbwalamabababaa -aaabababababbxbrblaKbybhblbzblblbAblblbBbCbCblblbDblblblbwalamabababaa -aaabababababbxbrblaSbEbFblblblblbAblblbCbCbCblblbDblblblbwalamabababaa +aaabababababbxbrblaKbybhblbzblblbAblblbBbCbCblblbDblblblbKalamabababaa +aaabababababbxbrblaSbEbFblblblblbAblblbCbCbCblblbDblblblbKalamabababaa aaabababababbGbrblazajbsblblblbtajblblbububublblajbHblblbIalamabababaa aaabababababajbJbFcsajbLaTaTbFbMajbNbOblbPbnblblajbQbRbSajaGababababaa aaabababababavajbTbUajbdajajayazajajajajajajbAajajajajajaGabababababaa @@ -149,7 +149,7 @@ aaabafabababababavajajcbccajayaSaTaTcdajceblbYblbYajcfajbfabafabababaa aaabababababababaHajajcgchajaycrajaAaAajbYblbYblbYajciajajbfababababaa aaabababababababajajajajajajcjckajapapajbYclcmcncoajajajajalamabababaa aaabababababababajajajajajajajajajababajajajajajajajajajajalamabababaa -aaababafababababcpajajajcqababagbKabababagabababcpajajajajcqababababaa +aaababafababababcpajajajcqababagahabababagabababcpajajajajcqababababaa aaabababadabababababafababababagabababahagababafabafabababadadadababaa aaababadadabacababababafabababagagagagagagababababacababadadadadababaa aaabadadadabababababababaeababababababababababadadabababadadadadababaa diff --git a/maps/submaps/surface_submaps/wilderness/Chapel.dmm b/maps/submaps/surface_submaps/wilderness/Chapel.dmm index 02560d6ea89..a681497ed86 100644 --- a/maps/submaps/surface_submaps/wilderness/Chapel.dmm +++ b/maps/submaps/surface_submaps/wilderness/Chapel.dmm @@ -48,7 +48,7 @@ "aV" = (/obj/item/weapon/flame/candle/candelabra,/obj/structure/table/sifwoodentable,/turf/simulated/floor/wood/sif/broken,/area/submap/Chapel1) "aW" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/flame/candle/candelabra,/turf/simulated/floor/wood/sif,/area/submap/Chapel1) "aX" = (/obj/structure/table/sifwoodentable,/obj/item/glass_jar,/turf/simulated/floor/wood/sif,/area/submap/Chapel1) -"aY" = (/obj/structure/closet/coffin,/obj/random/maintenance/cargo,/obj/effect/decal/remains/human,/turf/simulated/floor/wood/sif,/area/submap/Chapel1) +"aY" = (/obj/structure/closet/coffin,/obj/random/maintenance/cargo,/obj/effect/decal/remains/human,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/wood/sif,/area/submap/Chapel1) "aZ" = (/obj/structure/simple_door/sifwood,/turf/simulated/floor/wood/sif,/area/submap/Chapel1) "ba" = (/obj/structure/bed/padded,/turf/simulated/floor/wood/sif,/area/submap/Chapel1) "bb" = (/obj/structure/closet/coffin,/obj/random/cash,/obj/effect/decal/remains/xeno,/turf/simulated/floor/wood/sif,/area/submap/Chapel1) diff --git a/maps/submaps/surface_submaps/wilderness/DoomP.dmm b/maps/submaps/surface_submaps/wilderness/DoomP.dmm index b856b7a229b..08c32f5710f 100644 --- a/maps/submaps/surface_submaps/wilderness/DoomP.dmm +++ b/maps/submaps/surface_submaps/wilderness/DoomP.dmm @@ -16,7 +16,7 @@ "ap" = (/obj/effect/decal/remains/mouse,/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) "aq" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) "ar" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"as" = (/obj/machinery/porta_turret/poi,/turf/simulated/floor/plating,/area/submap/DoomP) +"as" = (/obj/machinery/porta_turret/poi{faction = "syndicate"},/turf/simulated/floor/plating,/area/submap/DoomP) "at" = (/turf/simulated/wall/r_wall,/area/submap/DoomP) "au" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/r_wall,/area/submap/DoomP) "av" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/submap/DoomP) @@ -24,7 +24,7 @@ "ax" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled,/area/submap/DoomP) "ay" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) "az" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/random/mob/merc/all,/turf/simulated/floor/tiled,/area/submap/DoomP) "aB" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) "aC" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled,/area/submap/DoomP) "aD" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) @@ -38,7 +38,7 @@ "aL" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) "aM" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) "aN" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aO" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aO" = (/obj/structure/table/standard,/obj/random/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP) "aP" = (/turf/simulated/floor/tiled,/area/submap/DoomP) "aQ" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP) "aR" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) @@ -56,7 +56,7 @@ "bd" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled,/area/submap/DoomP) "be" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP) "bf" = (/obj/machinery/light/small,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bg" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bg" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor/tiled,/area/submap/DoomP) "bh" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP) "bi" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) "bj" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) @@ -73,7 +73,7 @@ "bu" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) "bv" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) "bw" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bx" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bx" = (/obj/effect/floor_decal/borderfloor,/obj/random/mob/merc/all,/turf/simulated/floor/tiled,/area/submap/DoomP) "by" = (/turf/simulated/floor/tiled/white,/area/submap/DoomP) "bz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) "bA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) @@ -88,6 +88,11 @@ "bJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) "bK" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) "bL" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bM" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) +"bN" = (/mob/living/bot/cleanbot{faction = "syndicate"; name = "Fitz"},/turf/simulated/floor/tiled,/area/submap/DoomP) +"bO" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/obj/random/soap,/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bP" = (/obj/random/junk,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) +"bQ" = (/obj/random/junk,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -121,15 +126,15 @@ aaabababacafafafafafafafakakakakakafafafacadadasadadasadatauavavavauatadasadadas aaabababacafafafafafafafakakakakakakafafacatatatatatatatatatatawatatatatatatatatatatatafafafafafakakakakafafafafacacabaa aaabababacacafafafafafafakakakakakakafafacataxayaAayaBayazaCataDataEaFaFaFaGaHaIaJaKatafafafafafakakakakafafafafacacabaa aaabababacacacafafafafakakakakakakakafasaLataMaNaOaNaNaNaPaQataPataRaSaSaSaTaUaVaWaVataXasafafafakakakafafafafafafacabaa -aaabababababacacafafafakakakakakakakafafafataYaNaNaNaNaNaPaZatbaatatatatatatbbbcatatatafafafafafakakakafafafafafafacabaa -aaababababababacafafafakakakakakakakakafafatbdbebebfbebebgaPbhaPaPbiaPaPaPaPaPbiaPaPatafafafafafakakakafafafafafafafacaa +aaabababababacacafafafakakakakakakakafafafataYaNaNaNbgaNaPaZatbaatatatatatatbbbcatatatafafafafafakakakafafafafafafacabaa +aaababababababacafafafakakakakakakakakafafatbdbebebfbebxbMaPbhaPbNbiaPaPaPaPaPbiaPaPatafafafafafakakakafafafafafafafacaa aaabababagabababacafafakakakakakakakakasaXatbjatatatatatatatatatatatatatatbkatatatatataXasafafafakakakafafafafafafafacaa -aaababababababacacafafafakakakakakakakakafatblbmbnbobpbqbrbsatbtbubvbwbvbxbybkbzbkbAatafafafafafakakakafafafafafafafacaa +aaababababababacacafafafakakakakakakakakafatblbmbnbobpbqbrbsatbtbubvbwbvbObybkbzbkbAatafafafafafakakakafafafafafafafacaa aaababababababacafafafafakakakakakakakakafatblblbBblbLbBblblatbCbDbDbDbDbDbEatbFatbGatafafafafakakakakakafafafafafafacaa aaababababababacafafafafakakakakakakakakakatatatatatatatatatatatatbHbIbIbIbJatatatatatafafafafakakakakafafafafafafafacaa -aaabababababacacafafafakakakakakakakakakakafafafafaLacacadadadadbKadadadadadbKacacafafafafafafakakakakafafafafafafafacaa +aaabababababacacafafafakakakakakakakakakakafafafafaLacbPadadadadbKadadadadadbKacbPafafafafafafakakakakafafafafafafafacaa aaabababababacafafafafakakakakakakakakakakakakafafasafacacacacacasadadadadadasacafafafafafafakakakakakafafafafafafacacaa -aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadadadadadacacafafafafafakakakakakakafafafafafafacabaa +aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadbQadadadacacafafafafafakakakakakakafafafafafafacabaa aaababababacafafafafafafakakakakakakakakakakakakafafafafafafafafacacacacacacacafafafafafafafakakakakakafafafafafacacabaa aaabababacacafafafafafafakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa aaabababacacafafafafafakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa diff --git a/maps/submaps/surface_submaps/wilderness/Drugden.dmm b/maps/submaps/surface_submaps/wilderness/Drugden.dmm index 3d8f3257a30..12d8173eaf0 100644 --- a/maps/submaps/surface_submaps/wilderness/Drugden.dmm +++ b/maps/submaps/surface_submaps/wilderness/Drugden.dmm @@ -45,6 +45,8 @@ "S" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Drugd) "T" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/carpet,/area/submap/Drugd) "U" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/syringe/drugs,/turf/simulated/floor/carpet,/area/submap/Drugd) +"V" = (/obj/structure/closet/cabinet,/obj/random/projectile/scrapped_gun,/obj/random/toy,/turf/simulated/floor/carpet,/area/submap/Drugd) +"W" = (/obj/structure/closet/cabinet,/obj/random/mre,/obj/random/medical/lite,/turf/simulated/floor/carpet,/area/submap/Drugd) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaa @@ -64,9 +66,9 @@ abcccccccccdllldvwxydccba acccccddddddzlgmoooAdccba acccccdBCDEdllfdFGHIdccba acccccdJKgLdlfMddddddccba -abccccdNllOdhlgdqPwwdccca +abccccdNllOdhlgdVPwwdccca abbcccdlQllelllmoooodccca -abbcccdRlSldllhdqTUndccca +abbcccdRlSldllhdWTUndccca abbcccddddddludddddddccca abbccccccccccccccccccccba abbbcccccccccccccccccccba diff --git a/maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm b/maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm new file mode 100644 index 00000000000..ccb107a33f7 --- /dev/null +++ b/maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm @@ -0,0 +1,25 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/mineral/ignore_mapgen/sif,/area/submap/FrostflyNest) +"c" = (/obj/structure/boulder,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"d" = (/turf/simulated/wall/solidrock,/area/submap/FrostflyNest) +"e" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"f" = (/obj/structure/outcrop/diamond,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"g" = (/obj/random/humanoidremains,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"h" = (/obj/structure/prop/nest{color = "#041164"; creature_types = list(/mob/living/simple_mob/animal/sif/frostfly); name = "frostfly den"; spawn_delay = 300},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"i" = (/obj/random/medical/lite,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"j" = (/obj/random/humanoidremains,/obj/random/gun/random,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"k" = (/obj/random/medical/pillbottle,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) +"l" = (/obj/random/gun/random,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest) + +(1,1,1) = {" +aabbbcbbaa +abbddedbba +bbddfgddbb +bddhieiddb +bdfjefefdb +bdkeegeddb +ceefefldbb +bdddgdddba +bbbdddbbba +abbbbbbaaa +"} diff --git a/maps/submaps/surface_submaps/wilderness/Shack1.dmm b/maps/submaps/surface_submaps/wilderness/Shack1.dmm index cc703458581..604b970b929 100644 --- a/maps/submaps/surface_submaps/wilderness/Shack1.dmm +++ b/maps/submaps/surface_submaps/wilderness/Shack1.dmm @@ -2,21 +2,21 @@ "b" = (/turf/simulated/wall/log_sif,/area/submap/Shack1) "c" = (/turf/template_noop,/area/submap/Shack1) "d" = (/turf/simulated/floor/outdoors/dirt,/area/submap/Shack1) -"e" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken1"},/area/submap/Shack1) +"e" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken1"},/area/submap/Shack1) "f" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/storage/box/matches,/turf/simulated/floor/wood,/area/submap/Shack1) -"g" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/apron/overalls,/obj/item/clothing/under/overalls,/turf/simulated/floor/wood,/area/submap/Shack1) +"g" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/apron/overalls,/obj/item/clothing/under/overalls,/obj/random/mre,/turf/simulated/floor/wood,/area/submap/Shack1) "h" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/Shack1) "i" = (/turf/simulated/floor/wood,/area/submap/Shack1) -"j" = (/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken0"},/area/submap/Shack1) -"k" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken5"},/area/submap/Shack1) +"j" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken0"},/area/submap/Shack1) +"k" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken5"},/area/submap/Shack1) "l" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Shack1) "m" = (/obj/structure/simple_door/wood,/turf/simulated/floor/wood,/area/submap/Shack1) -"n" = (/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken3"},/area/submap/Shack1) +"n" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken3"},/area/submap/Shack1) "o" = (/obj/structure/table/bench/wooden,/turf/simulated/floor/wood,/area/submap/Shack1) "p" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/wooden_reinforced,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/wood,/area/submap/Shack1) "q" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/wooden_reinforced,/obj/item/weapon/material/twohanded/fireaxe/scythe,/turf/simulated/floor/wood,/area/submap/Shack1) "r" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/wood,/area/submap/Shack1) -"s" = (/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken6"},/area/submap/Shack1) +"s" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken6"},/area/submap/Shack1) "t" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/wooden_reinforced,/obj/item/device/flashlight/lamp,/turf/simulated/floor/wood,/area/submap/Shack1) "u" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/Shack1) diff --git a/maps/submaps/surface_submaps/wilderness/Shelter.dmm b/maps/submaps/surface_submaps/wilderness/Shelter.dmm index e041c8a5494..3b985d359b2 100644 --- a/maps/submaps/surface_submaps/wilderness/Shelter.dmm +++ b/maps/submaps/surface_submaps/wilderness/Shelter.dmm @@ -9,7 +9,7 @@ "i" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1) "j" = (/obj/structure/bonfire/sifwood,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1) "k" = (/obj/random/mob/robotic,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1) -"l" = (/obj/structure/bed/roller/adv,/obj/random/humanoidremains,/obj/random/cash,/obj/random/cigarettes,/obj/item/clothing/under/explorer,/obj/item/clothing/shoes/boots/winter/explorer,/obj/item/clothing/mask/gas/explorer,/obj/item/clothing/accessory/permit/gun/planetside,/obj/item/clothing/suit/armor/pcarrier/light/nt,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1) +"l" = (/obj/structure/bed/roller/adv,/obj/random/humanoidremains,/obj/random/cash,/obj/random/cigarettes,/obj/item/clothing/under/explorer,/obj/item/clothing/shoes/boots/winter/explorer,/obj/item/clothing/mask/gas/explorer,/obj/item/clothing/accessory/permit/gun/planetside,/obj/item/clothing/suit/armor/pcarrier/light/nt,/obj/random/projectile/scrapped_smg,/obj/random/projectile/scrapped_pistol,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1) "m" = (/obj/random/medical/lite,/obj/random/technology_scanner,/obj/random/toolbox,/obj/random/trash,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1) "n" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 1},/turf/simulated/floor/outdoors/snow,/area/submap/Shelter1) "o" = (/obj/structure/fence/door/locked{icon_state = "door_closed"; dir = 1},/turf/simulated/floor/outdoors/snow,/area/submap/Shelter1) diff --git a/maps/submaps/surface_submaps/wilderness/kururakden.dmm b/maps/submaps/surface_submaps/wilderness/kururakden.dmm new file mode 100644 index 00000000000..630c58204d2 --- /dev/null +++ b/maps/submaps/surface_submaps/wilderness/kururakden.dmm @@ -0,0 +1,23 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/KururakDen) +"c" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) +"d" = (/obj/random/mob/sif/kururak,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) +"e" = (/mob/living/simple_mob/animal/sif/kururak/leader,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) +"f" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) +"g" = (/obj/random/junk,/obj/random/medical/pillbottle,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) +"h" = (/obj/random/junk,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) +"i" = (/obj/random/powercell,/obj/random/unidentified_medicine/old_medicine,/obj/random/trash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) +"j" = (/obj/random/humanoidremains,/obj/random/coin,/obj/random/contraband,/obj/random/projectile/random,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen) + +(1,1,1) = {" +aaaaaaaaaa +aaaaabbaaa +aaabbbbbaa +aabbbfbbaa +aacbgdccaa +abhdccibaa +abfcefbbaa +abbdjbbaaa +abbbbbbaaa +aaaaaaaaaa +"} diff --git a/maps/submaps/surface_submaps/wilderness/wilderness.dm b/maps/submaps/surface_submaps/wilderness/wilderness.dm index 7d084f4a853..af854a00178 100644 --- a/maps/submaps/surface_submaps/wilderness/wilderness.dm +++ b/maps/submaps/surface_submaps/wilderness/wilderness.dm @@ -22,6 +22,7 @@ #include "Rockybase.dmm" #include "MHR.dmm" #include "GovPatrol.dmm" +#include "kururakden.dmm" #include "DecoupledEngine.dmm" #include "DoomP.dmm" #include "CaveS.dmm" @@ -202,6 +203,12 @@ mappath = 'maps/submaps/surface_submaps/wilderness/GovPatrol.dmm' cost = 5 +/datum/map_template/surface/wilderness/normal/KururakDen + name = "Kururak Den" + desc = "The den of a Kururak pack. May contain hibernating members." + mappath = 'maps/submaps/surface_submaps/wilderness/kururakden.dmm' + cost = 5 + /datum/map_template/surface/wilderness/normal/DecoupledEngine name = "Decoupled Engine" desc = "A damaged fission engine jettisoned from a starship long ago." @@ -272,4 +279,10 @@ name = "Acrid Lake" desc = "A pool of water contaminated with highly dangerous chemicals." mappath = 'maps/submaps/surface_submaps/wilderness/chemspill2.dmm' - cost = 10 \ No newline at end of file + cost = 10 + +/datum/map_template/surface/wilderness/normal/FrostflyNest + name = "Frostfly Nest" + desc = "The nest of a Frostfly, or more." + mappath = 'maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm' + cost = 20 diff --git a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm index 185ddd433f9..4f41a473f8a 100644 --- a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm +++ b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm @@ -95,6 +95,10 @@ name = "POI - Lost Government Patrol" ambience = AMBIENCE_GHOSTLY +/area/submap/KururakDen + name = "POI - Kururak Den" + ambience = AMBIENCE_SIF + /area/submap/DecoupledEngine name = "POI - Decoupled Engine" ambience = AMBIENCE_FOREBODING @@ -138,3 +142,7 @@ /area/submap/ChemSpill2 name = "POI - Acrid Lake" ambience = AMBIENCE_FOREBODING + +/area/submap/FrostflyNest + name = "POI - Frostfly Nest" + ambience = AMBIENCE_SIF diff --git a/maps/tether/submaps/om_ships/curashuttle.dmm b/maps/tether/submaps/om_ships/curashuttle.dmm index 10d24490bb5..91c134a7cd7 100644 --- a/maps/tether/submaps/om_ships/curashuttle.dmm +++ b/maps/tether/submaps/om_ships/curashuttle.dmm @@ -1076,7 +1076,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, -/obj/machinery/autolathe, +/obj/machinery/recharge_station, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/curabitur/curashuttle/eng) "bV" = ( @@ -1275,6 +1275,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/curabitur/curashuttle/eng) "cq" = ( +/obj/machinery/portable_atmospherics/canister/phoron, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/curabitur/curashuttle/eng) "cr" = ( @@ -1323,7 +1324,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 9 }, -/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/autolathe, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/curabitur/curashuttle/eng) "cx" = ( diff --git a/maps/tether/submaps/om_ships/shelter_6.dmm b/maps/tether/submaps/om_ships/shelter_6.dmm index 5d92740312d..e80de136a1c 100644 --- a/maps/tether/submaps/om_ships/shelter_6.dmm +++ b/maps/tether/submaps/om_ships/shelter_6.dmm @@ -1431,6 +1431,12 @@ dir = 9 }, /obj/item/weapon/inducer/hybrid, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid, +/obj/item/weapon/circuitboard/machine/abductor/core/hybrid, +/obj/item/weapon/circuitboard/machine/abductor/core/hybrid, /turf/simulated/floor/tiled/techmaint, /area/shuttle/tabiranth) "bk" = ( diff --git a/vorestation.dme b/vorestation.dme index 0f2cb48d5df..5c3cfcf5b55 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1342,8 +1342,6 @@ #include "code\game\objects\structures\fireaxe.dm" #include "code\game\objects\structures\fitness.dm" #include "code\game\objects\structures\fitness_vr.dm" -#include "code\game\objects\structures\flora.dm" -#include "code\game\objects\structures\flora_vr.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\gravemarker.dm" #include "code\game\objects\structures\grille.dm" @@ -1419,6 +1417,8 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security_vr.dm" +#include "code\game\objects\structures\flora\flora.dm" +#include "code\game\objects\structures\flora\flora_vr.dm" #include "code\game\objects\structures\flora\grass.dm" #include "code\game\objects\structures\flora\trees.dm" #include "code\game\objects\structures\ghost_pods\ghost_pods.dm" @@ -1917,6 +1917,7 @@ #include "code\modules\clothing\under\accessories\storage.dm" #include "code\modules\clothing\under\accessories\torch.dm" #include "code\modules\clothing\under\accessories\torch_vr.dm" +#include "code\modules\clothing\under\accessories\temperature\poncho.dm" #include "code\modules\clothing\under\jobs\civilian.dm" #include "code\modules\clothing\under\jobs\engineering.dm" #include "code\modules\clothing\under\jobs\medsci.dm" @@ -2582,11 +2583,13 @@ #include "code\modules\mob\living\simple_mob\combat.dm" #include "code\modules\mob\living\simple_mob\defense.dm" #include "code\modules\mob\living\simple_mob\hands.dm" +#include "code\modules\mob\living\simple_mob\harvesting.dm" #include "code\modules\mob\living\simple_mob\life.dm" #include "code\modules\mob\living\simple_mob\on_click.dm" #include "code\modules\mob\living\simple_mob\simple_hud.dm" #include "code\modules\mob\living\simple_mob\simple_mob.dm" #include "code\modules\mob\living\simple_mob\simple_mob_vr.dm" +#include "code\modules\mob\living\simple_mob\taming.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\animal.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_captive.dm" @@ -2668,7 +2671,6 @@ #include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm" #include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm" -#include "code\modules\mob\living\simple_mob\subtypes\mechanical\combat_drone.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\corrupt_maint_drone_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\disbot_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm" @@ -2677,6 +2679,8 @@ #include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\viscerator.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\wahlem_vr.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\combat_drone.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\mining_drone.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\ranged_damage.dm" @@ -3044,6 +3048,7 @@ #include "code\modules\power\tesla\telsa_construction.dm" #include "code\modules\power\tesla\tesla_act.dm" #include "code\modules\projectiles\ammunition.dm" +#include "code\modules\projectiles\broken.dm" #include "code\modules\projectiles\dnalocking.dm" #include "code\modules\projectiles\gun.dm" #include "code\modules\projectiles\projectile.dm" @@ -3052,6 +3057,10 @@ #include "code\modules\projectiles\ammunition\magnetic.dm" #include "code\modules\projectiles\ammunition\rounds.dm" #include "code\modules\projectiles\ammunition\smartmag.dm" +#include "code\modules\projectiles\brokenguns\energy.dm" +#include "code\modules\projectiles\brokenguns\launcher.dm" +#include "code\modules\projectiles\brokenguns\magnetic.dm" +#include "code\modules\projectiles\brokenguns\projectile.dm" #include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\launcher.dm" #include "code\modules\projectiles\guns\modular_guns.dm" @@ -3463,6 +3472,8 @@ #include "code\modules\xenoarcheaology\artifacts\crystal.dm" #include "code\modules\xenoarcheaology\artifacts\gigadrill.dm" #include "code\modules\xenoarcheaology\artifacts\replicator.dm" +#include "code\modules\xenoarcheaology\artifacts\predefined\_predefined.dm" +#include "code\modules\xenoarcheaology\artifacts\predefined\hungry_statue.dm" #include "code\modules\xenoarcheaology\effects\animate_anomaly.dm" #include "code\modules\xenoarcheaology\effects\badfeeling.dm" #include "code\modules\xenoarcheaology\effects\berserk.dm"