diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 90bfe97f9f..caf1c0a08f 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -25,6 +25,7 @@ var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID var/species = SPECIES_HUMAN //defaults to generic-ass humans var/random_species = FALSE //flip to TRUE to randomize species from the list below + var/corpse_outfit /// Set to an outfit to equip on spawn. var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake. // var/random_appearance = FALSE //TODO: make this work // var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death @@ -92,6 +93,9 @@ M.set_id_info(W) M.equip_to_slot_or_del(W, slot_wear_id) + if(corpse_outfit) + var/decl/hierarchy/outfit/outfit = GET_DECL(corpse_outfit) + outfit.equip(M) // I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example. diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index fe6211f64f..fa27a18511 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -34,10 +34,10 @@ var/turf/T = get_turf(src) if(istype(T)) - return T.attackby(O, user) - + return T.attackby(O, user) + . = ..() - + // Holder for vine plants. // Icons for plants are generated as overlays, so setting it to invisible wouldn't work. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 268e871e84..06107e6981 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1105,12 +1105,7 @@ if(species.icon_scale_x != 1 || species.icon_scale_y != 1) update_transform() - if(species.base_color && default_colour) - //Apply colour. - r_skin = hex2num(copytext(species.base_color,2,4)) - g_skin = hex2num(copytext(species.base_color,4,6)) - b_skin = hex2num(copytext(species.base_color,6,8)) - else + if(!default_colour || !species.apply_default_colours(src)) r_skin = 0 g_skin = 0 b_skin = 0 diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm index 3dd829940c..15cc100be5 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -33,7 +33,6 @@ experience." catalogue_data = list(/datum/category_item/catalogue/fauna/vox) - slowdown = -0.5 speech_sounds = list('sound/voice/shriek1.ogg') @@ -171,3 +170,41 @@ SPAN_NOTICE("\The [src]'s scaling bristles roughly."), self_message = SPAN_NOTICE("You bristle your scaling and deflate your internal bladders, restoring mobility but leaving yourself vulnerable to low pressure.") ) + +/datum/species/vox/apply_default_colours(var/mob/living/carbon/human/H) + if(!H.h_style) + H.h_style = "Short Vox Quills" + var/hair_color = "#594219" + H.r_hair = hex2num(copytext(hair_color,2,4)) + H.g_hair = hex2num(copytext(hair_color,4,6)) + H.b_hair = hex2num(copytext(hair_color,6,8)) + var/skin_color = "#526D29" + H.r_skin = hex2num(copytext(skin_color,2,4)) + H.g_skin = hex2num(copytext(skin_color,4,6)) + H.b_skin = hex2num(copytext(skin_color,6,8)) + var/scutes_color = "#BC7D3E" + var/obj/item/organ/external/head = H.get_organ(BP_HEAD) + head.markings = list( + "Vox Beak" = list( + "color" = scutes_color, + "datum" = body_marking_styles_list["Vox Beak"] + ) + ) + for(var/bp in list(BP_L_ARM, BP_L_HAND, BP_R_ARM, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) + var/obj/item/organ/external/limb = H.get_organ(bp) + if(limb) + LAZYINITLIST(limb.markings) + limb.markings["Vox Scutes"] = list( + "color" = scutes_color, + "datum" = body_marking_styles_list["Vox Scutes"] + ) + var/claw_color = "#A0A654" + for(var/bp in list(BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_TORSO)) + var/obj/item/organ/external/limb = H.get_organ(bp) + if(limb) + LAZYINITLIST(limb.markings) + limb.markings["Vox Claws"] = list( + "color" = claw_color, + "datum" = body_marking_styles_list["Vox Claws"] + ) + return TRUE diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 14b0335a0b..cb38366f4c 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -537,3 +537,12 @@ /datum/species/proc/handle_falling(mob/living/carbon/human/H, atom/hit_atom, damage_min, damage_max, silent, planetary) return FALSE + +/datum/species/proc/apply_default_colours(var/mob/living/carbon/human/H) + if(base_color) + //Apply colour. + H.r_skin = hex2num(copytext(base_color,2,4)) + H.g_skin = hex2num(copytext(base_color,4,6)) + H.b_skin = hex2num(copytext(base_color,6,8)) + return TRUE + return FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm index 35d78884b4..7a1e66df3b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm @@ -106,4 +106,4 @@ ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/event /decl/mob_organ_names/combatdrone - hit_zones = list("chassis", "comms array", "sensor suite", "left weapons module", "right weapons module", "maneuvering thruster") \ No newline at end of file + hit_zones = list("chassis", "comms array", "sensor suite", "left weapons module", "right weapons module", "maneuvering thruster") diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm index 22f7b8379a..a99ee6585a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm @@ -57,4 +57,4 @@ can_flee = FALSE // Fearless dumb machines. /decl/mob_organ_names/hivebot - hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg") \ No newline at end of file + hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg") diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 3c5af2fc43..a129a261f6 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -472,6 +472,18 @@ var/global/const/standard_monitor_styles = "blank=ipc_blank;\ species_alternates = list(SPECIES_HUMAN = "Morgan Trading Co") suggested_species = SPECIES_TESHARI + +/datum/robolimb/vox + company = "Arkmade" + icon = 'icons/mob/human_races/cyberlimbs/vox/primalis.dmi' + unavailable_to_build = TRUE + species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_TAJ, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT) + suggested_species = SPECIES_VOX + +/datum/robolimb/vox/crap + company = "Improvised" + icon = 'icons/mob/human_races/cyberlimbs/vox/improvised.dmi' + /obj/item/disk/limb name = "Limb Blueprints" desc = "A disk containing the blueprints for prosthetics." diff --git a/icons/mob/ascent.dmi b/icons/mob/ascent.dmi new file mode 100644 index 0000000000..cf74d73796 Binary files /dev/null and b/icons/mob/ascent.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/vox/improvised.dmi b/icons/mob/human_races/cyberlimbs/vox/improvised.dmi new file mode 100644 index 0000000000..3b4301b1c9 Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/vox/improvised.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/vox/improvised.dmi.png b/icons/mob/human_races/cyberlimbs/vox/improvised.dmi.png new file mode 100644 index 0000000000..4f99efe28e Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/vox/improvised.dmi.png differ diff --git a/icons/mob/human_races/cyberlimbs/vox/primalis.dmi b/icons/mob/human_races/cyberlimbs/vox/primalis.dmi new file mode 100644 index 0000000000..a093e6982d Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/vox/primalis.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/vox/primalis.dmi.png b/icons/mob/human_races/cyberlimbs/vox/primalis.dmi.png new file mode 100644 index 0000000000..a093e6982d Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/vox/primalis.dmi.png differ diff --git a/maps/submaps/space_submaps/space.dm b/maps/submaps/space_submaps/space.dm index 374f046f51..c2bf0ae517 100644 --- a/maps/submaps/space_submaps/space.dm +++ b/maps/submaps/space_submaps/space.dm @@ -9,4 +9,4 @@ name = "POI - Space Content" desc = "A map template base. In space." -// To be added: Templates for space exploration when they are made. \ No newline at end of file +// To be added: Templates for space exploration when they are made. diff --git a/maps/submaps/space_submaps/vox_derelict/icons/plating_vox.dmi b/maps/submaps/space_submaps/vox_derelict/icons/plating_vox.dmi new file mode 100644 index 0000000000..791597c177 Binary files /dev/null and b/maps/submaps/space_submaps/vox_derelict/icons/plating_vox.dmi differ diff --git a/maps/submaps/space_submaps/vox_derelict/icons/tiles_vox.dmi b/maps/submaps/space_submaps/vox_derelict/icons/tiles_vox.dmi new file mode 100644 index 0000000000..d91a6a2504 Binary files /dev/null and b/maps/submaps/space_submaps/vox_derelict/icons/tiles_vox.dmi differ diff --git a/maps/submaps/space_submaps/vox_derelict/icons/vox_conduit.dmi b/maps/submaps/space_submaps/vox_derelict/icons/vox_conduit.dmi new file mode 100644 index 0000000000..a974312ff8 Binary files /dev/null and b/maps/submaps/space_submaps/vox_derelict/icons/vox_conduit.dmi differ diff --git a/maps/submaps/space_submaps/vox_derelict/icons/vox_large.dmi b/maps/submaps/space_submaps/vox_derelict/icons/vox_large.dmi new file mode 100644 index 0000000000..39f666662f Binary files /dev/null and b/maps/submaps/space_submaps/vox_derelict/icons/vox_large.dmi differ diff --git a/maps/submaps/space_submaps/vox_derelict/icons/vox_machines.dmi b/maps/submaps/space_submaps/vox_derelict/icons/vox_machines.dmi new file mode 100644 index 0000000000..b8e0f3d852 Binary files /dev/null and b/maps/submaps/space_submaps/vox_derelict/icons/vox_machines.dmi differ diff --git a/maps/submaps/space_submaps/vox_derelict/icons/vox_mobs.dmi b/maps/submaps/space_submaps/vox_derelict/icons/vox_mobs.dmi new file mode 100644 index 0000000000..3b4301b1c9 Binary files /dev/null and b/maps/submaps/space_submaps/vox_derelict/icons/vox_mobs.dmi differ diff --git a/maps/submaps/space_submaps/vox_derelict/vox_derelict.dm b/maps/submaps/space_submaps/vox_derelict/vox_derelict.dm new file mode 100644 index 0000000000..67f92489fe --- /dev/null +++ b/maps/submaps/space_submaps/vox_derelict/vox_derelict.dm @@ -0,0 +1,200 @@ +/* + +/obj/effect/overmap/visitable/event_vox_derelict + name = "vox derelict" + desc = "A sundered fragment of a much larger vessel. LADAR paints a partial vox silhouette." + scanner_desc = "A sundered fragment of a much larger vessel. LADAR paints a partial vox silhouette." + icon_state = "object" + in_space = 1 + start_x = 7 + start_y = 4 + +/datum/map_template/space/vox_derelict + name = "Vox Derelict" + desc = "A sheared-off chunk of a derelict vox vessel." + mappath = 'maps/submaps/space_submaps/vox_derelict/vox_derelict.dmm' + cost = INFINITY + +/area/vox_derelict/hallway/e + name = "Vox Derelict - Starboard Arm" + +/area/vox_derelict/hallway/n + name = "Vox Derelict - Fore Arm" + +/area/vox_derelict/hallway/w + name = "Vox Derelict - Port Arm" + +/area/vox_derelict/hallway/s + name = "Vox Derelict - Aft Arm" + +/area/vox_derelict/hallway/se + name = "Vox Derelict - Aft Starboard Arm" + +/area/vox_derelict/hallway/ne + name = "Vox Derelict - Fore Starboard Arm" + +/area/vox_derelict/hallway/sw + name = "Vox Derelict - Aft Port Arm" + +/area/vox_derelict/hallway/nw + name = "Vox Derelict - Fore Port Arm" + +/area/vox_derelict/fluid_processing + name = "Vox Derelict - Fluid Process" + +/area/vox_derelict/grove_one + name = "Vox Derelict - Primary Auxillary Grove" + +/area/vox_derelict/grove_two + name = "Vox Derelict - Secondary Auxillary Grove" + +/area/vox_derelict/grove_three + name = "Vox Derelict - Tertiary Auxillary Grove" + +/area/vox_derelict/storage + name = "Vox Derelict - Storage Nook" + +/area/vox_derelict/mass_reclamation + name = "Vox Derelict - Mass Reclamation" + +/area/vox_derelict/core + name = "Vox Derelict - Apex Core" + +/obj/effect/shuttle_landmark/automatic/vox_derelict +*/ + +/decl/flooring/vox_tiles + name = "vox tiling" + desc = "Tight-fitting plates of some blue-green vox composite." + icon = 'maps/submaps/space_submaps/vox_derelict/icons/tiles_vox.dmi' + icon_base = "floor" + has_base_range = 4 + +/turf/simulated/floor/vox + name = "vox plating" + desc = "It quivers uneasily, and feels like hard leather." + icon = 'maps/submaps/space_submaps/vox_derelict/icons/plating_vox.dmi' + icon_state = "plating" + base_name = "vox plating" + base_desc = "It quivers uneasily, and feels like hard leather." + base_icon = 'maps/submaps/space_submaps/vox_derelict/icons/plating_vox.dmi' + oxygen = 0 + nitrogen = MOLES_O2STANDARD + MOLES_N2STANDARD + +/turf/simulated/floor/vox/tiled + name = "vox tiling" + desc = "Tight-fitting plates of some blue-green vox composite." + icon = 'maps/submaps/space_submaps/vox_derelict/icons/tiles_vox.dmi' + icon_state = "floor1" + initial_flooring = /decl/flooring/vox_tiles + +/obj/structure/vox/apex_body + name = "vox biocomputer" + desc = "An enormous spiralling mass of metal and leathery vox biomatter. Whatever life must have once resided in this monstrous shell has fled it." + icon = 'maps/submaps/space_submaps/vox_derelict/icons/vox_large.dmi' + icon_state = "apex" + pixel_x = -48 + pixel_y = 64 + +/obj/structure/vox/apex_pool + name = "vox reclamation pool" + desc = "A wide, shallow pool of inky liquid, stirred by invisible motion below the surface." + pixel_x = -48 + icon = 'maps/submaps/space_submaps/vox_derelict/icons/vox_large.dmi' + icon_state = "pit" + +/obj/structure/vox_conduit + name = "ark conduit" + desc = "Some kind of energy conduit, ribbed and ridged and occasionally twitching." + icon = 'maps/submaps/space_submaps/vox_derelict/icons/vox_conduit.dmi' + icon_state = "conduit" + layer = TURF_LAYER+0.01 + plane = TURF_PLANE + +/obj/structure/vox_light + name = "ark light" + desc = "A dim, steady light set into the hull, gleaming like deep sea bioluminescence." + icon = 'maps/submaps/space_submaps/vox_derelict/icons/vox_conduit.dmi' + icon_state = "light" + layer = TURF_LAYER+0.01 + plane = TURF_PLANE + +/obj/structure/vox_light/Initialize() + . = ..() + set_light(8, 0.3, COLOR_CYAN) + +/obj/effect/landmark/corpse/vox + species = SPECIES_VOX + +/obj/effect/landmark/corpse/vox/worker + name = "Vox Worker" + corpse_outfit = /decl/hierarchy/outfit/vox/survivor + +/obj/effect/landmark/corpse/vox/raider + name = "Vox Raider" + corpse_outfit = /decl/hierarchy/outfit/vox/raider + +/decl/mob_organ_names/vox_drone + hit_zones = list( + "chassis", + "crown", + "tail", + "left claw", + "right claw", + "left motivator", + "right motivator" + ) + +/datum/ai_holder/simple_mob/vox_drone + pointblank = TRUE + conserve_ammo = TRUE + firing_lanes = TRUE + can_flee = FALSE + +/datum/say_list/vox_drone + +/mob/living/simple_mob/mechanical/ark_adjunct + name = "vox worker drone" + desc = "Some kind of vox-made drone, all clicking bioalloy and glowing magenta lights." + icon = 'maps/submaps/space_submaps/vox_derelict/icons/vox_mobs.dmi' + icon_state = "improvised" + icon_living = "improvised" + icon_dead = "improvised_dead" + faction = "vox_ark" + maxHealth = 3 LASERS_TO_KILL + health = 3 LASERS_TO_KILL + water_resist = 1 + movement_sound = 'sound/effects/servostep.ogg' + attacktext = list("slashed") + organ_names = /decl/mob_organ_names/vox_drone + ai_holder_type = /datum/ai_holder/simple_mob/vox_drone + say_list_type = /datum/say_list/vox_drone + melee_damage_lower = 8 + melee_damage_upper = 8 + attack_armor_pen = 5 + +/mob/living/simple_mob/mechanical/ark_adjunct/soldier + name = "vox soldier drone" + icon_state = "arkmade" + icon_living = "arkmade" + icon_dead = "arkmade_dead" + maxHealth = 6 LASERS_TO_KILL + health = 6 LASERS_TO_KILL + melee_damage_lower = 15 + melee_damage_upper = 25 + attack_armor_pen = 25 + +// VOX PROPS: todo proper icons +/obj/machinery/portable_atmospherics/hydroponics/vox + name = "biofoundry growth vat" + color = COLOR_GREEN_GRAY + +/obj/structure/table/vox + color = COLOR_GREEN_GRAY + +/obj/structure/rack/vox + color = COLOR_GREEN_GRAY + +/obj/machinery/door/airlock/vox + name = "vox bulkhead orifice" + color = COLOR_GREEN_GRAY diff --git a/polaris.dme b/polaris.dme index 8761cf28ed..438f2a5c5e 100644 --- a/polaris.dme +++ b/polaris.dme @@ -3341,6 +3341,7 @@ #include "maps\submaps\engine_submaps\engine_areas.dm" #include "maps\submaps\engine_submaps\southern_cross\_engine_submaps.dm" #include "maps\submaps\space_submaps\space.dm" +#include "maps\submaps\space_submaps\vox_derelict\vox_derelict.dm" #include "maps\submaps\surface_submaps\mountains\mountains.dm" #include "maps\submaps\surface_submaps\mountains\mountains_areas.dm" #include "maps\submaps\surface_submaps\plains\plains.dm"