diff --git a/code/game/gamemodes/technomancer/spell_objs_helpers.dm b/code/game/gamemodes/technomancer/spell_objs_helpers.dm index 05afae4a3b..f11c027566 100644 --- a/code/game/gamemodes/technomancer/spell_objs_helpers.dm +++ b/code/game/gamemodes/technomancer/spell_objs_helpers.dm @@ -21,9 +21,14 @@ return 0 /obj/item/weapon/spell/proc/allowed_to_teleport() - if(owner && owner.z in using_map.admin_levels) - return 0 - return 1 + if(owner) + if(owner.z in using_map.admin_levels) + return FALSE + + var/turf/T = get_turf(owner) + if(T.block_tele) + return FALSE + return TRUE /obj/item/weapon/spell/proc/within_range(var/atom/target, var/max_range = 7) // Beyond 7 is off the screen. if(range(get_dist(owner, target) <= max_range)) diff --git a/code/game/gamemodes/technomancer/spells/blink.dm b/code/game/gamemodes/technomancer/spells/blink.dm index c0012c991c..320374542d 100644 --- a/code/game/gamemodes/technomancer/spells/blink.dm +++ b/code/game/gamemodes/technomancer/spells/blink.dm @@ -23,9 +23,12 @@ var/turf/starting = get_turf(AM) var/list/targets = list() + if(starting.block_tele) + return + valid_turfs: for(var/turf/simulated/T in range(AM, range)) - if(T.density || istype(T, /turf/simulated/mineral)) //Don't blink to vacuum or a wall + if(T.density || T.block_tele || istype(T, /turf/simulated/mineral)) //Don't blink to vacuum or a wall continue for(var/atom/movable/stuff in T.contents) if(stuff.density) @@ -54,7 +57,10 @@ if(istype(hit_atom, /atom/movable)) var/atom/movable/AM = hit_atom if(!within_range(AM)) - user << "\The [AM] is too far away to blink." + to_chat(user, "\The [AM] is too far away to blink.") + return + if(!allowed_to_teleport()) + to_chat(user, "Teleportation doesn't seem to work here.") return if(pay_energy(400)) if(check_for_scepter()) @@ -67,6 +73,9 @@ to_chat(user, "You need more energy to blink [AM] away!") /obj/item/weapon/spell/blink/on_use_cast(mob/user) + if(!allowed_to_teleport()) + to_chat(user, "Teleportation doesn't seem to work here.") + return if(pay_energy(200)) if(check_for_scepter()) safe_blink(user, calculate_spell_power(10)) @@ -80,6 +89,9 @@ /obj/item/weapon/spell/blink/on_melee_cast(atom/hit_atom, mob/living/user, def_zone) if(istype(hit_atom, /atom/movable)) var/atom/movable/AM = hit_atom + if(!allowed_to_teleport()) + to_chat(user, "Teleportation doesn't seem to work here.") + return if(pay_energy(300)) visible_message("\The [user] reaches out towards \the [AM] with a glowing hand.") if(check_for_scepter()) diff --git a/code/game/gamemodes/technomancer/spells/mark_recall.dm b/code/game/gamemodes/technomancer/spells/mark_recall.dm index e47b62c031..306de85043 100644 --- a/code/game/gamemodes/technomancer/spells/mark_recall.dm +++ b/code/game/gamemodes/technomancer/spells/mark_recall.dm @@ -68,6 +68,9 @@ user << "There's no Mark!" return 0 else + if(!allowed_to_teleport()) + to_chat(user, "Teleportation doesn't seem to work here.") + return visible_message("\The [user] starts glowing!") var/light_intensity = 2 var/time_left = 3 diff --git a/code/game/gamemodes/technomancer/spells/passwall.dm b/code/game/gamemodes/technomancer/spells/passwall.dm index e786134b4c..fa7b5f34b9 100644 --- a/code/game/gamemodes/technomancer/spells/passwall.dm +++ b/code/game/gamemodes/technomancer/spells/passwall.dm @@ -46,6 +46,9 @@ checked_turf = get_step(checked_turf, direction) //Advance in the given direction total_cost += check_for_scepter() ? 400 : 800 //Phasing through matter's expensive, you know. i-- + if(checked_turf.block_tele) // The fun ends here. + break + if(!checked_turf.density) //If we found a destination (a non-dense turf), then we can stop. var/dense_objs_on_turf = 0 for(var/atom/movable/stuff in checked_turf.contents) //Make sure nothing dense is where we want to go, like an airlock or window. diff --git a/code/game/jobs/access_datum.dm b/code/game/jobs/access_datum.dm index 322a71f7d4..b63662cd86 100644 --- a/code/game/jobs/access_datum.dm +++ b/code/game/jobs/access_datum.dm @@ -462,3 +462,9 @@ /datum/access/trader id = access_trader access_type = ACCESS_TYPE_PRIVATE + +/var/const/access_alien = 300 // For things like crashed ships. +/datum/access/alien + id = access_alien + desc = "#%_^&*@!" + access_type = ACCESS_TYPE_PRIVATE diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 9b01f7b6bd..87da7c7ac6 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -416,6 +416,24 @@ icon = 'icons/obj/doors/shuttledoors_vertical.dmi' assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft/vertical +/obj/machinery/door/airlock/alien + name = "alien airlock" + desc = "You're fairly sure this is a door." + icon = 'icons/obj/doors/Dooralien.dmi' + explosion_resistance = 20 + secured_wires = TRUE + hackProof = TRUE + assembly_type = /obj/structure/door_assembly/door_assembly_alien + req_one_access = list(access_alien) + +/obj/machinery/door/airlock/alien/locked + icon_state = "door_locked" + locked = TRUE + +/obj/machinery/door/airlock/alien/public // Entry to UFO. + req_one_access = list() + normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside. + /* About the new airlock wires panel: * An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 1b181aebb5..5f6c36454f 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -86,6 +86,23 @@ health = 250 // Since lasers do 40 each. maxhealth = 250 +/obj/machinery/porta_turret/alien // The kind used on the UFO submap. + name = "interior anti-boarding turret" + desc = "A very tough looking turret made by alien hands." + installation = /obj/item/weapon/gun/energy/laser + enabled = TRUE + lethal = TRUE + ailock = TRUE + check_all = TRUE + health = 250 // Similar to the AI turrets. + maxhealth = 250 + +/obj/machinery/porta_turret/alien/destroyed // Turrets that are already dead, to act as a warning of what the rest of the submap contains. + name = "broken interior anti-boarding turret" + desc = "A very tough looking turret made by alien hands. This one looks destroyed, thankfully." + icon_state = "destroyed_target_prism" + stat = BROKEN + /obj/machinery/porta_turret/New() ..() req_access.Cut() @@ -103,6 +120,11 @@ req_one_access.Cut() req_access = list(access_cent_specops) +/obj/machinery/porta_turret/alien/New() + ..() + req_one_access.Cut() + req_access = list(access_alien) + /obj/machinery/porta_turret/Destroy() qdel(spark_system) spark_system = null @@ -436,6 +458,14 @@ var/list/turret_icons return ..() +/obj/machinery/porta_turret/alien/emp_act(severity) // This is overrided to give an EMP resistance as well as avoid scambling the turret settings. + if(prob(75)) // Superior alien technology, I guess. + return + enabled = FALSE + spawn(rand(1 MINUTE, 2 MINUTES)) + if(!enabled) + enabled = TRUE + /obj/machinery/porta_turret/ex_act(severity) switch (severity) if(1) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 38130f2739..6d261a8b3f 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -247,6 +247,7 @@ icon = 'icons/obj/abductor.dmi' icon_state = "belt" item_state = "security" + storage_slots = 8 can_hold = list( /obj/item/device/healthanalyzer, /obj/item/weapon/dnainjector, @@ -284,6 +285,7 @@ new /obj/item/weapon/surgical/FixOVein/alien(src) new /obj/item/weapon/surgical/bone_clamp/alien(src) new /obj/item/weapon/surgical/cautery/alien(src) + new /obj/item/weapon/surgical/surgicaldrill/alien(src) /obj/item/weapon/storage/belt/champion name = "championship belt" diff --git a/code/game/objects/structures/alien_props.dm b/code/game/objects/structures/alien_props.dm new file mode 100644 index 0000000000..cb791ec54b --- /dev/null +++ b/code/game/objects/structures/alien_props.dm @@ -0,0 +1,79 @@ +// These contain structures to make certain 'alien' (as in the ayyy ones, not xenomorphs) submaps more filled, and don't really do anything. + +/obj/structure/prop/alien + name = "some alien thing" + desc = "My description is broken, bug a developer." + icon = 'icons/obj/abductor.dmi' + density = TRUE + anchored = TRUE + var/interaction_message = null + +/obj/structure/prop/alien/attack_hand(mob/living/user) // Used to tell the player that this isn't useful for anything. + if(!istype(user)) + return FALSE + if(!interaction_message) + return ..() + else + to_chat(user, interaction_message) + +/obj/structure/prop/alien/computer + name = "alien console" + desc = "The console flashes what appear to be symbols you've never seen before." + icon_state = "console-c" + interaction_message = "The console flashes a series of unknown symbols as you press a button on what is presumably a keyboard. It probably some sort of \ + authentication error. Since you're not an alien, you should probably leave it alone." + +/obj/structure/prop/alien/computer/camera + desc = "This console is briefly flashing video feeds of various locations close by." + icon_state = "camera" + +/obj/structure/prop/alien/computer/camera/flipped + icon_state = "camera_flipped" + +/obj/structure/prop/alien/dispenser + name = "alien dispenser" + desc = "This looks like it dispenses... something?" + icon_state = "dispenser" + interaction_message = "You don't see any mechanism to operate this. Probably for the best." + +/obj/structure/prop/alien/pod + name = "alien pod" + desc = "This seems to be a container for something." + icon_state = "experiment" + interaction_message = "You don't see any mechanism to open this thing. Probably for the best." + +/obj/structure/prop/alien/pod/open + name = "opened alien pod" + desc = "At one point, this probably contained something interesting..." + icon_state = "experiment-open" + interaction_message = "You don't see any mechanism to close this thing." + +/obj/structure/prop/alien/power + name = "void core" + icon_state = "core" + desc = "An alien machine that seems to be producing energy seemingly out of nowhere." + interaction_message = "Messing with something that makes energy out of nowhere seems very unwise." + +/obj/item/prop/alien + name = "some alien item" + desc = "My description is broken, bug a developer." + icon = 'icons/obj/abductor.dmi' + +// Mostly useless. Research might like it, however. +/obj/item/prop/alien/junk + name = "alien object" + desc = "You have no idea what this thing does." + icon_state = "health" + w_class = ITEMSIZE_SMALL + var/static/list/possible_states = list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral", "gland") + var/static/list/possible_tech = list(TECH_MATERIAL, TECH_ENGINEERING, TECH_PHORON, TECH_POWER, TECH_BIO, TECH_COMBAT, TECH_MAGNET, TECH_DATA) + +/obj/item/prop/alien/junk/initialize() + ..() + icon_state = pick(possible_states) + var/list/techs = possible_tech.Copy() + origin_tech = list() + for(var/i = 1 to rand(1, 4)) + var/new_tech = pick(techs) + techs -= new_tech + origin_tech[new_tech] = rand(5, 9) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 3a6b7ac045..8ebd9358b5 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -134,3 +134,12 @@ new /obj/item/clothing/head/helmet/thunderdome(src) new /obj/item/clothing/head/helmet/thunderdome(src) new /obj/item/clothing/head/helmet/thunderdome(src) + +/obj/structure/closet/alien + name = "alien container" + desc = "Contains secrets of the universe." + icon = 'icons/obj/abductor.dmi' + icon_state = "alien_locker" + icon_closed = "alien_locker" + icon_opened = "alien_locker_open" + anchored = TRUE \ No newline at end of file diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 7d1810c46f..f63290c010 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -117,6 +117,12 @@ base_icon_state = "voidcraft_vertical" airlock_type = "/voidcraft/vertical" +/obj/structure/door_assembly/door_assembly_alien + base_icon_state = "alien" + base_name = "alien airlock" + airlock_type = "/alien" + glass = -1 + /obj/structure/door_assembly/multi_tile icon = 'icons/obj/doors/door_assembly2x1.dmi' dir = EAST diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index daa6e8c94a..23c8ebd4a1 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -435,3 +435,77 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh loot_depletion = TRUE loot_left = 5 // This is to prevent people from asking the whole station to go down to some alien ruin to get massive amounts of phat lewt. +// Base type for alien piles. +/obj/structure/loot_pile/surface/alien + name = "alien pod" + desc = "A pod which looks bigger on the inside. Something quiet shiny might be inside?" + icon_state = "alien_pile1" + +/obj/structure/loot_pile/surface/alien + common_loot = list( + /obj/item/prop/alien/junk + ) + +// May contain alien tools. +/obj/structure/loot_pile/surface/alien/engineering + uncommon_loot = list( + /obj/item/device/multitool/alien, + /obj/item/stack/cable_coil/alien, + /obj/item/weapon/crowbar/alien, + /obj/item/weapon/screwdriver/alien, + /obj/item/weapon/weldingtool/alien, + /obj/item/weapon/wirecutters/alien, + /obj/item/weapon/wrench/alien + ) + rare_loot = list( + /obj/item/weapon/storage/belt/utility/alien/full + ) + +// May contain alien surgery equipment or powerful medication. +/obj/structure/loot_pile/surface/alien/medical + uncommon_loot = list( + /obj/item/weapon/surgical/FixOVein/alien, + /obj/item/weapon/surgical/bone_clamp/alien, + /obj/item/weapon/surgical/cautery/alien, + /obj/item/weapon/surgical/circular_saw/alien, + /obj/item/weapon/surgical/hemostat/alien, + /obj/item/weapon/surgical/retractor/alien, + /obj/item/weapon/surgical/scalpel/alien, + /obj/item/weapon/surgical/surgicaldrill/alien + ) + rare_loot = list( + /obj/item/weapon/storage/belt/medical/alien + ) + +// May contain powercells or alien weaponry. +/obj/structure/loot_pile/surface/alien/security + uncommon_loot = list( + /obj/item/weapon/cell/device/weapon/recharge/alien + ) + +// The pile found at the very end, and as such has the best loot. +/obj/structure/loot_pile/surface/alien/end + common_loot = list( + /obj/item/device/multitool/alien, + /obj/item/stack/cable_coil/alien, + /obj/item/weapon/crowbar/alien, + /obj/item/weapon/screwdriver/alien, + /obj/item/weapon/weldingtool/alien, + /obj/item/weapon/wirecutters/alien, + /obj/item/weapon/wrench/alien, + + /obj/item/weapon/surgical/FixOVein/alien, + /obj/item/weapon/surgical/bone_clamp/alien, + /obj/item/weapon/surgical/cautery/alien, + /obj/item/weapon/surgical/circular_saw/alien, + /obj/item/weapon/surgical/hemostat/alien, + /obj/item/weapon/surgical/retractor/alien, + /obj/item/weapon/surgical/scalpel/alien, + /obj/item/weapon/surgical/surgicaldrill/alien, + + /obj/item/weapon/cell/device/weapon/recharge/alien, + ) + uncommon_loot = list( + /obj/item/weapon/storage/belt/medical/alien, + /obj/item/weapon/storage/belt/utility/alien/full + ) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index d3e94e1446..ad2ce1be82 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -174,13 +174,6 @@ /obj/structure/bed/padded/New(var/newloc) ..(newloc,"plastic","cotton") -/obj/structure/bed/alien - name = "resting contraption" - desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?" - -/obj/structure/bed/alien/New(var/newloc) - ..(newloc,"resin") - /obj/structure/bed/double name = "double bed" icon_state = "doublebed" @@ -305,3 +298,15 @@ spawn(0) qdel(src) return + +/obj/structure/bed/alien + name = "resting contraption" + desc = "Whatever species designed this must've enjoyed relaxation as well. Looks vaguely comfy." + icon = 'icons/obj/abductor.dmi' + icon_state = "bed" + +/obj/structure/bed/alien/update_icon() + return // Doesn't care about material or anything else. + +/obj/structure/bed/alien/attackby(obj/item/weapon/W, mob/user) + return // No deconning. \ No newline at end of file diff --git a/code/game/turfs/simulated/dungeon/floor.dm b/code/game/turfs/simulated/dungeon/floor.dm new file mode 100644 index 0000000000..743b497878 --- /dev/null +++ b/code/game/turfs/simulated/dungeon/floor.dm @@ -0,0 +1,7 @@ +// Special floor type for Point of Interests. + +/turf/simulated/floor/dungeon + block_tele = TRUE // Anti-cheese. + +/turf/simulated/floor/dungeon/ex_act() + return \ No newline at end of file diff --git a/code/game/turfs/simulated/dungeon/wall.dm b/code/game/turfs/simulated/dungeon/wall.dm new file mode 100644 index 0000000000..b6a8f53c27 --- /dev/null +++ b/code/game/turfs/simulated/dungeon/wall.dm @@ -0,0 +1,13 @@ +// Special wall type for Point of Interests. + +/turf/simulated/wall/dungeon + block_tele = TRUE // Anti-cheese. + +/turf/simulated/wall/dungeon/New(var/newloc) + ..(newloc,"dungeonium") + +/turf/simulated/wall/dungeon/attackby() + return + +/turf/simulated/wall/dungeon/ex_act() + return \ No newline at end of file diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index e62ba0d7f4..0949e69404 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -166,6 +166,19 @@ icon_state = "floor_glass" takes_underlays = 1 +/turf/simulated/shuttle/floor/alien + icon_state = "alienpod1" + light_range = 3 + light_power = 3 + light_color = "#66ffff" // Bright cyan. + +/turf/simulated/shuttle/floor/alien/initialize() + ..() + icon_state = "alienpod[rand(1, 9)]" + +/turf/simulated/shuttle/floor/alienplating + icon_state = "alienplating" + /turf/simulated/shuttle/plating name = "plating" icon = 'icons/turf/floors.dmi' diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index ce4451ff12..19264e23ba 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -107,6 +107,25 @@ icon_state = "dark-nj" join_group = null +/turf/simulated/shuttle/wall/alien + icon = 'icons/turf/shuttle_alien.dmi' + icon_state = "alien" + base_state = "alien" + light_range = 3 + light_power = 3 + light_color = "#ff0066" // Pink-ish + block_tele = TRUE // Will be used for dungeons so this is needed to stop cheesing with handteles. + +/turf/simulated/shuttle/wall/alien/hard_corner + name = "hardcorner wall" + icon_state = "alien-hc" + hard_corner = 1 + +/turf/simulated/shuttle/wall/alien/no_join + name = "nojoin wall" + icon_state = "alien-nj" + join_group = null + /turf/simulated/shuttle/wall/New() ..() //To allow mappers to rename shuttle walls to like "redfloor interior" or whatever for ease of use. diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index d34b210b99..10cee9b6b7 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -28,6 +28,8 @@ var/list/footstep_sounds = null + var/block_tele = FALSE // If true, most forms of teleporting to or from this turf tile will fail. + /turf/New() ..() for(var/atom/movable/AM as mob|obj in src) diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 864ee369ba..088043b33b 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -210,6 +210,16 @@ icon_state = "reactiveoff" ..() +/obj/item/clothing/suit/armor/alien + name = "alien armor" + desc = "It's really resilient yet lightweight, so it's probably meant to be armor. Strangely enough it seems to have been designed for a humanoid shape." + icon_state = "alien" + blood_overlay_type = "armor" + item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor") + slowdown = 0 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + armor = list(melee = 65, bullet = 65, laser = 65, energy = 50, bomb = 50, bio = 0, rad = 40) + //Non-hardsuit ERT armor. /obj/item/clothing/suit/armor/vest/ert name = "emergency response team armor" diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 0db3a1016e..1ce1eca2d8 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -642,6 +642,19 @@ var/list/name_to_material display_name = "elevator panelling" icon_colour = "#666666" +// Ditto. +/material/alienalloy/dungeonium + name = "dungeonium" + display_name = "ultra-durable" + icon_base = "dungeon" + icon_colour = "#FFFFFF" + +/material/alienalloy/alium + name = "alium" + display_name = "alien" + icon_base = "alien" + icon_colour = "#FFFFFF" + /material/resin name = "resin" icon_colour = "#35343a" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 0af9770434..bdea8fed70 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -35,6 +35,24 @@ var/const/signfont = "Times New Roman" var/const/crayonfont = "Comic Sans MS" +/obj/item/weapon/paper/alien + name = "alien tablet" + desc = "It looks highly advanced" + icon = 'icons/obj/abductor.dmi' + icon_state = "alienpaper" + +/obj/item/weapon/paper/alien/update_icon() + if(info) + icon_state = "alienpaper_words" + else + icon_state = "alienpaper" + +/obj/item/weapon/paper/alien/burnpaper() + return + +/obj/item/weapon/paper/alien/AltClick() // No airplanes for me. + return + //lipstick wiping is in code/game/objects/items/weapons/cosmetics.dm! /obj/item/weapon/paper/New() diff --git a/code/modules/power/cells/device_cells.dm b/code/modules/power/cells/device_cells.dm index b6b185519e..87a2a577b7 100644 --- a/code/modules/power/cells/device_cells.dm +++ b/code/modules/power/cells/device_cells.dm @@ -20,6 +20,11 @@ maxcharge = 2400 charge_amount = 20 +/obj/item/weapon/cell/device/weapon/empty/initialize() + ..() + charge = 0 + update_icon() + /obj/item/weapon/cell/device/weapon/recharge name = "self-charging weapon power cell" desc = "A small power cell designed to power handheld weaponry. This one recharges itself." @@ -30,4 +35,13 @@ /obj/item/weapon/cell/device/weapon/recharge/captain charge_amount = 160 //Recharges a lot more quickly... - charge_delay = 100 //... but it takes a while to get started \ No newline at end of file + charge_delay = 100 //... but it takes a while to get started + +/obj/item/weapon/cell/device/weapon/recharge/alien + name = "void cell" + desc = "An alien technology that produces energy seemingly out of nowhere. Its small, cylinderal shape means it might be able to be used with human technology, perhaps?" + icon = 'icons/obj/abductor.dmi' + icon_state = "cell" + charge_amount = 120 // 5%. + charge_delay = 50 // Every five seconds, bit faster than the default. + origin_tech = list(TECH_POWER = 8, TECH_ENGINEERING = 6) \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 6a3eeaa853..447eefe1b8 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -7,7 +7,7 @@ var/obj/item/weapon/cell/power_supply //What type of power cell this uses var/charge_cost = 240 //How much energy is needed to fire. - var/cell_type = null + var/cell_type = /obj/item/weapon/cell/device/weapon var/projectile_type = /obj/item/projectile/beam/practice var/modifystate var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge @@ -41,7 +41,7 @@ if(cell_type) power_supply = new cell_type(src) else - power_supply = new /obj/item/weapon/cell/device/weapon(src) + power_supply = null update_icon() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 2276d7e10c..820486198d 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -52,6 +52,10 @@ self_recharge = 1 use_external_power = 1 +/obj/item/weapon/gun/energy/retro/empty + icon_state = "retro" + cell_type = null + /obj/item/weapon/gun/energy/captain name = "antique laser gun" icon_state = "caplaser" diff --git a/code/modules/tables/presets.dm b/code/modules/tables/presets.dm index 688bff4def..06fca65138 100644 --- a/code/modules/tables/presets.dm +++ b/code/modules/tables/presets.dm @@ -90,6 +90,23 @@ material = get_material_by_name("holowood") ..() +/obj/structure/table/alien + name = "alien table" + desc = "Advanced flat surface technology at work!" + icon_state = "alien_preview" + can_reinforce = FALSE + can_plate = FALSE + +/obj/structure/table/alien/New() + material = get_material_by_name("alium") + verbs -= /obj/structure/table/verb/do_flip + verbs -= /obj/structure/table/proc/do_put + ..() + +/obj/structure/table/alien/dismantle(obj/item/weapon/wrench/W, mob/user) + to_chat(user, "You cannot dismantle \the [src].") + return + //BENCH PRESETS /obj/structure/table/bench/standard icon_state = "plain_preview" diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi index 2d0695ec2f..3b1cc47da6 100644 Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ diff --git a/icons/obj/doors/Dooralien.dmi b/icons/obj/doors/Dooralien.dmi new file mode 100644 index 0000000000..48edcaac41 Binary files /dev/null and b/icons/obj/doors/Dooralien.dmi differ diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi index 3b1a61e7c9..79186074f6 100644 Binary files a/icons/obj/doors/door_assembly.dmi and b/icons/obj/doors/door_assembly.dmi differ diff --git a/icons/obj/loot_piles.dmi b/icons/obj/loot_piles.dmi index 56a3534d7d..d4722d995c 100644 Binary files a/icons/obj/loot_piles.dmi and b/icons/obj/loot_piles.dmi differ diff --git a/icons/obj/tables.dmi b/icons/obj/tables.dmi index 30012e04f1..05a486a08f 100644 Binary files a/icons/obj/tables.dmi and b/icons/obj/tables.dmi differ diff --git a/icons/turf/flooring/shuttle.dmi b/icons/turf/flooring/shuttle.dmi index 8f8cfde5c6..bb724c2d36 100644 Binary files a/icons/turf/flooring/shuttle.dmi and b/icons/turf/flooring/shuttle.dmi differ diff --git a/icons/turf/shuttle_alien.dmi b/icons/turf/shuttle_alien.dmi new file mode 100644 index 0000000000..e851818997 Binary files /dev/null and b/icons/turf/shuttle_alien.dmi differ diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi index e2c93bb554..849a73bfa9 100644 Binary files a/icons/turf/wall_masks.dmi and b/icons/turf/wall_masks.dmi differ diff --git a/maps/submaps/cave_submaps/cave_areas.dm b/maps/submaps/cave_submaps/cave_areas.dm index 44f35a29e4..3222541c3d 100644 --- a/maps/submaps/cave_submaps/cave_areas.dm +++ b/maps/submaps/cave_submaps/cave_areas.dm @@ -9,4 +9,8 @@ name = "Prepper Bunker" /area/submap/cave/qShuttle - name = "Quarantined Shuttle" \ No newline at end of file + name = "Quarantined Shuttle" + +/area/submap/cave/crashed_ufo + name = "Crashed Alien Vessel" + requires_power = FALSE diff --git a/maps/submaps/cave_submaps/crashed_ufo.dmm b/maps/submaps/cave_submaps/crashed_ufo.dmm new file mode 100644 index 0000000000..a61d3cd11b --- /dev/null +++ b/maps/submaps/cave_submaps/crashed_ufo.dmm @@ -0,0 +1,103 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ac" = (/turf/simulated/shuttle/wall/alien,/area/submap/cave/crashed_ufo) +"ad" = (/obj/structure/closet/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ae" = (/obj/machinery/door/airlock/alien/locked,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"af" = (/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ag" = (/obj/machinery/porta_turret/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ah" = (/obj/structure/loot_pile/surface/alien/engineering,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ai" = (/obj/structure/prop/alien/computer,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aj" = (/obj/item/weapon/wrench/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ak" = (/obj/structure/bed/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"al" = (/obj/structure/table/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"am" = (/obj/structure/table/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"an" = (/obj/structure/closet/alien,/obj/item/prop/alien/junk,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ao" = (/obj/structure/prop/alien/power,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ap" = (/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aq" = (/obj/structure/table/alien,/obj/item/weapon/paper/alien{icon_state = "alienpaper_words"; info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]"},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ar" = (/turf/simulated/shuttle/wall/alien/hard_corner,/area/submap/cave/crashed_ufo) +"as" = (/obj/structure/prop/alien/computer,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"at" = (/obj/structure/table/alien,/obj/item/prop/alien/junk,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"au" = (/obj/structure/table/alien,/obj/item/weapon/paper/alien{icon_state = "alienpaper_words"; info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]"},/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"av" = (/obj/structure/loot_pile/surface/alien/security,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aw" = (/obj/structure/prop/alien/computer{dir = 8},/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"ax" = (/obj/structure/prop/alien/computer{tag = "icon-console-c (EAST)"; icon_state = "console-c"; dir = 4},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ay" = (/obj/machinery/door/airlock/alien/locked{welded = 1},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"az" = (/obj/structure/bed/alien,/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aA" = (/obj/item/weapon/screwdriver/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aB" = (/obj/item/device/multitool/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aC" = (/obj/structure/prop/alien/computer/camera/flipped{tag = "icon-camera_flipped (EAST)"; icon_state = "camera_flipped"; dir = 4},/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aD" = (/obj/structure/prop/alien/computer/camera{tag = "icon-camera (WEST)"; icon_state = "camera"; dir = 8},/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aE" = (/obj/machinery/porta_turret/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aF" = (/obj/machinery/door/airlock/alien/locked{p_open = 1},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aG" = (/obj/effect/decal/remains/robot,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aH" = (/obj/item/stack/cable_coil/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aI" = (/obj/structure/table/alien,/obj/item/prop/alien/junk,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aJ" = (/obj/structure/prop/alien/computer{tag = "icon-console-c (EAST)"; icon_state = "console-c"; dir = 4},/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aK" = (/obj/structure/table/alien,/obj/item/weapon/weldingtool/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aL" = (/obj/structure/bed/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aM" = (/obj/structure/prop/alien/computer/camera,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aN" = (/obj/structure/closet/alien,/obj/item/weapon/paper/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aO" = (/obj/structure/bed/alien,/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aP" = (/obj/structure/loot_pile/surface/alien/end,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aQ" = (/obj/structure/table/alien,/obj/item/weapon/crowbar/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aR" = (/obj/structure/table/alien,/obj/item/weapon/surgical/FixOVein/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aS" = (/obj/structure/table/alien,/obj/item/weapon/wirecutters/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aT" = (/obj/machinery/door/airlock/alien/locked,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aU" = (/obj/effect/decal/remains/lizard,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aV" = (/obj/structure/prop/alien/dispenser,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aW" = (/obj/structure/table/alien,/obj/item/weapon/surgical/bone_clamp/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aX" = (/obj/structure/loot_pile/surface/alien/medical,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aY" = (/obj/structure/closet/alien,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"aZ" = (/obj/structure/prop/alien/dispenser,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"ba" = (/obj/effect/decal/remains/mouse,/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) +"bb" = (/obj/structure/closet/alien,/obj/item/prop/alien/junk,/obj/item/prop/alien/junk,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bc" = (/obj/machinery/porta_turret/alien/destroyed{tag = "icon-destroyed_target_prism (SOUTHEAST)"; icon_state = "destroyed_target_prism"; dir = 6},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bd" = (/obj/item/weapon/cell/device/weapon/empty,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"be" = (/obj/machinery/porta_turret/alien/destroyed{tag = "icon-destroyed_target_prism (SOUTHWEST)"; icon_state = "destroyed_target_prism"; dir = 10},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bf" = (/obj/item/weapon/gun/energy/retro/empty,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bg" = (/obj/item/weapon/reagent_containers/hypospray/autoinjector/used,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bh" = (/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bi" = (/obj/effect/decal/remains/human{desc = "They look like human remains. Based on the equipment you saw nearby when you walked in, they were some kind of command person, and a poor one at that."},/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bj" = (/obj/item/clothing/gloves/yellow,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bk" = (/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bl" = (/obj/machinery/door/airlock/alien/public,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"bm" = (/obj/item/clothing/suit/storage/hooded/wintercoat/captain,/obj/item/clothing/shoes/boots/winter/command,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaababababacacacacacacacababababaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabababacacacacadadadadadacacacacabababaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababacacacabaeabababafabababaeabacacacababaaaaaaaaaaaaaa +aaaaaaaaaaaaababacacabababacabababababababacabababacacababaaaaaaaaaaaa +aaaaaaaaaaababacacababacacacacagabababagacacacacababacacababaaaaaaaaaa +aaaaaaaaababacacababacacahaiacacababajacacakafacacababacacababaaaaaaaa +aaaaaaababacacababacacagababalacacabacacamabafanacacababacacababaaaaaa +aaaaaaabacacababacacaoababapalaqaraearacacaeacacacacacababacacabaaaaaa +aaaaababacababacacaoababapapapabarabaragapapasatatacacacababacababaaaa +aaaaabacacabacacagababapapapababaeabaeababapapapauacanacacabacacabaaaa +aaaaabacababacahababapapapababaharabaravababapapawacabafacababacabaaaa +aaababacaeacacaxabapapapababadacarayaracavababapapaeabazacacaeacababaa +aaabacacababacacalalapaAabadacacasabasacacavababapacamacacababacacabaa +aaabacadababagacacamaBafahacacaCapabapaDacacavabaEacacacagababadacabaa +aaabacadababababacararaFaracapapapaGapapapacaraeararacababababadacabaa +aaabacadabaHabababaeabababacagapaIaqaqapagacabababaeabababababadacabaa +aaabacadababababacararaearacaJapamafaKapawacaraeararacafabababadacabaa +aaabacadababagacacasacapaLacacapapapapapacacaMapapaNacacagababadacabaa +aaabacacababacacapapacapapaOacacagaPagacacaQapapapacacacacababacacabaa +aaababacaeacacaRapaOaracapapaLacacacacacaSaEapaparacapacacacaeacababaa +aaaaabacababacauapapaTapapapapaOarabaraCapapapapaTapaUapacababacabaaaa +aaaaabacacabacacaVaWaragapacapapaeabaeapapapapaparacapacacabacacabaaaa +aaaaababacababacacacacaraearacacarabarapaparaTaracacacacababacababaaaa +aaaaaaabacacababacacacaXabababaXaraearaYacacapacacacacababacacabaaaaaa +aaaaaaababacacababacacaZababaXacacabacacacapbaapacacababacacababaaaaaa +aaaaaaaaababacacababacacbbaXacacabababacacacapacacababacacababaaaaaaaa +aaaaaaaaaaababacacababacacacacbcbdababbeacacacacababacacababaaaaaaaaaa +aaaaaaaaaaaaababacacabababarabababbfabbgbharabababacacababaaaaaaaaaaaa +aaaaaaaaaaaaaaababacacacabaeabbdababbibjbkaeabacacacababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabababacacaracabarblarbmacaracacabababaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaababababacararabaracacababababaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababarblarabababaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/polaris.dme b/polaris.dme index f193f1328c..91721ed7a2 100644 --- a/polaris.dme +++ b/polaris.dme @@ -988,6 +988,7 @@ #include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tanks.dm" #include "code\game\objects\random\random.dm" +#include "code\game\objects\structures\alien_props.dm" #include "code\game\objects\structures\barsign.dm" #include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\catwalk.dm" @@ -1083,6 +1084,8 @@ #include "code\game\turfs\simulated\wall_types.dm" #include "code\game\turfs\simulated\walls.dm" #include "code\game\turfs\simulated\water.dm" +#include "code\game\turfs\simulated\dungeon\floor.dm" +#include "code\game\turfs\simulated\dungeon\wall.dm" #include "code\game\turfs\simulated\outdoors\dirt.dm" #include "code\game\turfs\simulated\outdoors\grass.dm" #include "code\game\turfs\simulated\outdoors\outdoors.dm" @@ -2346,6 +2349,7 @@ #include "maps\submaps\_readme.dm" #include "maps\submaps\cave_submaps\cave.dm" #include "maps\submaps\cave_submaps\cave_areas.dm" +#include "maps\submaps\cave_submaps\crashed_ufo.dmm" #include "maps\submaps\space_submaps\space.dm" #include "maps\submaps\surface_submaps\forest.dm" #include "maps\submaps\surface_submaps\forest_areas.dm"