diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm index 3ed884316a..8b853aed63 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/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm index d8b0821a4d..a8f8e6a634 100644 --- a/code/game/objects/effects/alien/aliens.dm +++ b/code/game/objects/effects/alien/aliens.dm @@ -160,8 +160,8 @@ #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 @@ -185,25 +185,28 @@ /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/New(var/newloc, var/newcolor = "#321D37") + var/obj/effect/alien/weeds/existing = locate() in get_turf(newloc) + if(existing) + qdel(existing) + + if(newcolor) + set_color = newcolor + + ..(newloc, src) /obj/effect/alien/weeds/node/Initialize() ..() START_PROCESSING(SSobj, src) - spawn(1 SECOND) - if(color) - set_color = color - /obj/effect/alien/weeds/node/Destroy() STOP_PROCESSING(SSobj, src) ..() @@ -272,12 +275,15 @@ Alien plants should do something if theres a lot of poison qdel(src) return - if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) ) + if(!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) diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index d4f65fc9d1..e48606a2ac 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 d901aeaa61..a5c70aab2c 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 59d56b6c7c..36cef4e4c4 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -109,12 +109,13 @@ 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" +<<<<<<< HEAD //VOREStation edit: medigun /obj/effect/projectile/tracer/medigun icon = 'icons/obj/projectiles_vr.dmi' @@ -122,4 +123,11 @@ light_range = 2 light_power = 0.5 light_color = "#80F5FF" -//VOREStation edit ends \ No newline at end of file +//VOREStation edit ends +======= +/obj/effect/projectile/tracer/cannon + icon_state = "cannon" + light_range = 1 + light_power = 0.5 + light_color = "#f6f2b6" +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index b0be23eb3f..8f300aaaf7 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 317920e5dc..f431bc74fe 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 346f8baa65..5128657811 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 62dde5a3df..a3411ef6fe 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 2c97432955..fe53d2ef55 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 966498a2bd..426f6f7986 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." @@ -203,3 +232,129 @@ prob(30);/mob/living/simple_mob/animal/passive/mouse/brown, prob(30);/mob/living/simple_mob/animal/passive/mouse/gray, prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability. + +// Mercs +/obj/random/mob/merc + name = "Random Mercenary" + desc = "This is a random PoI mercenary." + icon_state = "syndicate" + + mob_faction = "syndicate" + mob_returns_home = 1 + mob_wander_distance = 7 // People like to wander, and these people probably have a lot of stuff to guard. + +/obj/random/mob/merc/item_to_spawn() + return pick(prob(60);/mob/living/simple_mob/humanoid/merc/melee/poi, + prob(40);/mob/living/simple_mob/humanoid/merc/melee/sword/poi, + prob(40);/mob/living/simple_mob/humanoid/merc/ranged/poi, + prob(30);/mob/living/simple_mob/humanoid/merc/ranged/smg/poi, + prob(20);/mob/living/simple_mob/humanoid/merc/ranged/laser/poi, + prob(5);/mob/living/simple_mob/humanoid/merc/ranged/ionrifle/poi, + prob(10);/mob/living/simple_mob/humanoid/merc/ranged/grenadier/poi, + prob(10);/mob/living/simple_mob/humanoid/merc/ranged/rifle/poi, + prob(15);/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag/poi, + prob(10);/mob/living/simple_mob/humanoid/merc/ranged/technician/poi + ) + +/obj/random/mob/merc/armored + name = "Random Armored Infantry Merc" + desc = "This is a random PoI exo or robot for mercs." + icon_state = "drone3" + +/obj/random/mob/merc/armored/item_to_spawn() + return pick(prob(30);/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark, + prob(40);/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax, + prob(40);/mob/living/simple_mob/mechanical/mecha/combat/gygax, + prob(10);/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary, + prob(60);/mob/living/simple_mob/mechanical/mecha/hoverpod/manned, + prob(5);/mob/living/simple_mob/mechanical/mecha/combat/marauder, + prob(1);/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph, + prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus/manned, + prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned, + prob(60);/mob/living/simple_mob/mechanical/mecha/ripley/manned + ) + +/obj/random/mob/merc/all + name = "Random Mercenary All" + desc = "A random PoI mercenary, including armored." + +/obj/random/mob/merc/all/item_to_spawn() + return pick(prob(20);/obj/random/mob/merc, + prob(1);/obj/random/mob/merc/armored + ) + +// Multiple mobs, one spawner. +/obj/random/mob/multiple + name = "Random Multiple Mob Spawner" + desc = "A base multiple-mob spawner. Takes lists of lists." + +/obj/random/mob/multiple/spawn_item() + var/list/things_to_make = item_to_spawn() + + for(var/new_type in things_to_make) + + var/mob/living/simple_mob/M = new new_type(src.loc) + + if(!istype(M)) + continue + + if(M.has_AI()) + var/datum/ai_holder/AI = M.ai_holder + AI.go_sleep() //Don't fight eachother while we're still setting up! + AI.returns_home = mob_returns_home + AI.wander = mob_wander + AI.max_home_distance = mob_wander_distance + if(overwrite_hostility) + AI.hostile = mob_hostile + AI.retaliate = mob_retaliate + AI.go_wake() //Now you can kill eachother if your faction didn't override. + + if(pixel_x || pixel_y) + M.pixel_x = pixel_x + M.pixel_y = pixel_y + +/obj/random/mob/multiple/sifmobs + name = "Random Sifmob Pack" + desc = "A pack of random neutral sif mobs." + +/obj/random/mob/multiple/sifmobs/item_to_spawn() + return pick( + prob(60);list( + /mob/living/simple_mob/animal/sif/diyaab, + /mob/living/simple_mob/animal/sif/diyaab, + /mob/living/simple_mob/animal/sif/diyaab + ), + prob(30);list( + /mob/living/simple_mob/animal/sif/shantak/retaliate, + /mob/living/simple_mob/animal/sif/shantak/retaliate, + /mob/living/simple_mob/animal/sif/shantak/retaliate, + /mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate + ), + prob(20);list( + /mob/living/simple_mob/animal/sif/duck, + /mob/living/simple_mob/animal/sif/duck, + /mob/living/simple_mob/animal/sif/duck + ), + prob(10);list( + /mob/living/simple_mob/animal/sif/kururak/leader, + /mob/living/simple_mob/animal/sif/kururak, + /mob/living/simple_mob/animal/sif/kururak + ), + prob(5);list( + /mob/living/simple_mob/animal/sif/glitterfly, + /mob/living/simple_mob/animal/sif/glitterfly, + /mob/living/simple_mob/animal/sif/glitterfly, + /mob/living/simple_mob/animal/sif/glitterfly, + /mob/living/simple_mob/animal/sif/glitterfly + ), + prob(1);list( + /mob/living/simple_mob/animal/goat, + /mob/living/simple_mob/animal/goat + ), + prob(1);list( + /mob/living/simple_mob/animal/sif/sakimm/intelligent, + /mob/living/simple_mob/animal/sif/sakimm, + /mob/living/simple_mob/animal/sif/sakimm, + /mob/living/simple_mob/animal/sif/sakimm + ) + ) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 9257c2d3a3..7ea80de7ff 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 1b5548cdb4..a0f2c8c307 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/grass.dm b/code/game/objects/structures/flora/grass.dm index d5e7e965a8..92717f4beb 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 c67348a94a..c4d8f58ebd 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 e557fb16da..ad30c8bb88 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 @@ -32,6 +39,12 @@ var/list/grass_types = list( grass_chance = 5 var/tree_chance = 2 + animal_chance = 0.5 + + animal_types = list( + /obj/random/mob/multiple/sifmobs = 1 + ) + grass_types = list( /obj/structure/flora/sif/eyes = 1, /obj/structure/flora/sif/tendrils = 10 @@ -53,6 +66,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 736ee2bc9a..283406d6ba 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/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm index b440c0b834..9ef80846ee 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 0000000000..f1815760b8 --- /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 a0e794929f..800ba8e3ec 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 e44025de7b..d8187fb24e 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 4c18c2aac3..cbdeaca55c 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 6ca62df220..848b5a10e7 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 67fc816298..01cfd9bc62 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/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm index 7003c2b832..49c16763b3 100644 --- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm @@ -21,6 +21,7 @@ new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 90), new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 75), new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 30), +<<<<<<< HEAD new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon",/obj/item/fulton_core, 300), new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack",/obj/item/extraction_pack, 125), new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 20), @@ -52,6 +53,30 @@ 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("Umbrella", /obj/item/weapon/melee/umbrella/random, 10), + new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon", /obj/item/fulton_core, 100), + new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack", /obj/item/extraction_pack, 50), + new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50), + 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, 50), + new /datum/data/mining_equipment("Direct Payment - 1000", /obj/item/weapon/spacecash/c1000, 500), + new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 500), + new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 20), + new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 30), + new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 100), + new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 300), + new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 30), + new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 30), + new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 50), + new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 50), + new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 15), + new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 50), + new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 50), + new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 100), + new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 50), + new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75) +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960) ) //VOREStation Edit End diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cb745aea2e..00d28f1113 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 34530434f1..b73bac92e4 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/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index 543acb842f..f9c68c331f 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/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index c09bf272cc..a8234ac970 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/harvesting.dm b/code/modules/mob/living/simple_mob/harvesting.dm new file mode 100644 index 0000000000..74991920a8 --- /dev/null +++ b/code/modules/mob/living/simple_mob/harvesting.dm @@ -0,0 +1,42 @@ + +/mob/living/simple_mob + // What do you hit the mob with (on help) to get something from it? + var/obj/harvest_tool + // How long do we have to wait until it's harvestable again? + var/harvest_cooldown = 10 MINUTES + // How long does it take to harvest? + var/harvest_delay = 30 SECONDS + // What world.time was the last harvest? + var/harvest_recent = 0 + // How many times can we roll at max on the chance table? + var/harvest_per_hit = 1 + // Verb for harvesting. "sheared" "clipped" etc. + var/harvest_verb = "harvested" + // Associative list of paths and their chances. path = straws in the lot + var/list/harvest_results + +/mob/living/simple_mob/examine(mob/user) + ..(user) + if(user && harvest_tool && (get_dist(user, src) <= 3)) + to_chat(user, "\The [src] can be [harvest_verb] with a [initial(harvest_tool.name)] every [round(harvest_cooldown, 0.1)] minutes.") + var/time_to_harvest = (harvest_recent + harvest_cooldown) - world.time + if(time_to_harvest > 0) + to_chat(user, "It can be [harvest_verb] in [time_to_harvest / (1 MINUTE)] second(s).") + else + to_chat(user, "It can be [harvest_verb] now.") + +/mob/living/simple_mob/proc/livestock_harvest(var/obj/item/tool, var/mob/living/user) + if(!LAZYLEN(harvest_results)) // Might be a unique interaction of an object using the proc to do something weird, or just someone's a donk. + harvest_recent = world.time + return + + if(istype(tool, harvest_tool)) // Sanity incase something incorrect is passed in. + harvest_recent = world.time + + var/max_harvests = rand(1,harvest_per_hit) + + for(var/I = 1 to max_harvests) + var/new_path = pickweight(harvest_results) + new new_path(get_turf(user)) + + 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 6cd5ea9c5b..3721168ff9 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 39e2edcb7d..94bb77ee71 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 06d4eb4caa..87c05b317d 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 790681a3fc..198f99a3f4 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 0845eacc71..f934ab1ec8 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 0aa74f9e6b..10f7ddc2cf 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 ae1abb363f..3687a67c51 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 22c2d02082..37ac83614e 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 2019859f3f..f948da609f 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 abc8811372..2dcb5b8b51 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 a6948a3e00..88321f6bd4 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,18 @@ 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 +<<<<<<< HEAD //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" +======= +/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate + ai_holder_type = /datum/ai_holder/simple_mob/retaliate +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960) 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 8d19324cf2..dab82b850b 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 3973a17add..5bdddb9542 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 0000000000..5c6660e67c --- /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 f5baafcc24..a8aff85526 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,16 @@ // Variant that starts in defense mode, perhaps for PoIs. /mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize() set_defense_mode(TRUE) +<<<<<<< HEAD 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 +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960) 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 0000000000..e24b675c5b --- /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 b187f325bd..1dd8f6e149 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 0000000000..99b6ffbfd1 --- /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 0000000000..6427e89c27 --- /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 0000000000..a66449de78 --- /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 0000000000..dd1c647fd8 --- /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 0000000000..741e4bf087 --- /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 45c6364c1b..778b36694d 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 3fe7a4f21c..f47053cba0 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 ab107fb0b5..d3903c21a8 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 8426448d6c..435260b45e 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 74896b6b6a..9862b71b06 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 e05739d194..d1a6f22b4d 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 132ac6ccf4..ca3f1c8f51 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 2cd0519285..ac039460cb 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/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index 7ecf912cfb..60e3543e19 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 0000000000..edec0dd052 --- /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 0000000000..6a81c02b8b --- /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/html/changelogs/mechoid-newhorizon.yml b/html/changelogs/mechoid-newhorizon.yml new file mode 100644 index 0000000000..e9740680a3 --- /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 6c631498f6..4115b01ef2 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 e956f35874..0c0dce59bc 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 1372ff9a5e..119f56d6b5 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 157c3c11f6..73c39449bb 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 1b753e9c87..1a56a0be84 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 3495683205..32346c5a5e 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 e44e5185f8..909a59a7f2 100644 --- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm +++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm @@ -1,4 +1,5 @@ "a" = (/turf/template_noop,/area/template_noop) +<<<<<<< HEAD "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) @@ -13,6 +14,43 @@ "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) +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm index 9b19efeea7..adeb82580f 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 0000000000..169efe4eb5 --- /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 62cb5c4a26..e9433c68f3 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 @@ -337,6 +338,17 @@ /datum/map_template/surface/mountains/normal/crashedmedshuttle //VOREStation Edit name = "Crashed Med Shuttle" desc = "A medical response shuttle that went missing some time ago. So this is where they went." +<<<<<<< HEAD mappath = 'maps/submaps/surface_submaps/mountains/CrashedMedShuttle1_vr.dmm' //VOREStation Edit cost = 20 fixed_orientation = TRUE +======= + mappath = 'maps/submaps/surface_submaps/mountains/CrashedMedShuttle1.dmm' + cost = 20 + +/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 +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960) diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm index 00700bd7db..a6968fac98 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 0000000000..0018404dca --- /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 0000000000..f10b287e69 --- /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 0000000000..fdc989871d --- /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 0000000000..f3a43e4c91 --- /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 57a27da7c5..f8b8327363 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 f8f017af3d..6c8293c325 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 @@ -213,5 +217,37 @@ /datum/map_template/surface/plains/ChemSpill1 name = "Ruptured Canister" desc = "A dumped chemical canister. Looks dangerous." +<<<<<<< HEAD mappath = 'maps/submaps/surface_submaps/plains/chemspill1_vr.dmm' //VOREStation Edit cost = 10 +======= + mappath = 'maps/submaps/surface_submaps/plains/chemspill1.dmm' + 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" +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960) diff --git a/maps/submaps/surface_submaps/plains/plains_areas.dm b/maps/submaps/surface_submaps/plains/plains_areas.dm index f6e6d9677c..5889576757 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 7bf4c4d921..426c4c67bf 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 02560d6ea8..a681497ed8 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 b856b7a229..08c32f5710 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 3d8f3257a3..12d8173eaf 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 0000000000..ccb107a33f --- /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 cc70345858..604b970b92 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 e041c8a549..3b985d359b 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 0000000000..630c58204d --- /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 7d084f4a85..af854a0017 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 185ddd433f..4f41a473f8 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/vorestation.dme b/vorestation.dme index 0f2cb48d5d..ddf721bcb3 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1341,9 +1341,12 @@ #include "code\game\objects\structures\fence.dm" #include "code\game\objects\structures\fireaxe.dm" #include "code\game\objects\structures\fitness.dm" +<<<<<<< HEAD:vorestation.dme #include "code\game\objects\structures\fitness_vr.dm" #include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\flora_vr.dm" +======= +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\gravemarker.dm" #include "code\game\objects\structures\grille.dm" @@ -1418,7 +1421,11 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" +<<<<<<< HEAD:vorestation.dme #include "code\game\objects\structures\crates_lockers\closets\secure\security_vr.dm" +======= +#include "code\game\objects\structures\flora\flora.dm" +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme #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" @@ -1916,7 +1923,11 @@ #include "code\modules\clothing\under\accessories\permits_vr.dm" #include "code\modules\clothing\under\accessories\storage.dm" #include "code\modules\clothing\under\accessories\torch.dm" +<<<<<<< HEAD:vorestation.dme #include "code\modules\clothing\under\accessories\torch_vr.dm" +======= +#include "code\modules\clothing\under\accessories\temperature\poncho.dm" +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme #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 +2593,16 @@ #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" +<<<<<<< HEAD:vorestation.dme #include "code\modules\mob\living\simple_mob\simple_mob_vr.dm" +======= +#include "code\modules\mob\living\simple_mob\taming.dm" +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme #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,15 +2684,23 @@ #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" +<<<<<<< HEAD:vorestation.dme #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" +======= +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme #include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\mechanical\viscerator.dm" +<<<<<<< HEAD:vorestation.dme #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" +>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme #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 +3068,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 +3077,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 +3492,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"