diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 788907d0afa..1b197200c3e 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -56,6 +56,7 @@ #define MUTATION_CAT_EYES /datum/genetics/mutation/cat_eyes #define MUTATION_REGENERATION /datum/genetics/mutation/hyperion #define MUTATION_RAD_PROTECTION /datum/genetics/mutation/rad_protection +#define MUTATION_PUNCH /datum/genetics/mutation/punch //Blood Increasers #define MUTATION_BLOOD_BANK /datum/genetics/mutation/blood_bank #define MUTATION_BLOOD_RIVER /datum/genetics/mutation/blood_river @@ -63,6 +64,10 @@ #define MUTATION_BLOOD_SEA /datum/genetics/mutation/blood_sea #define MUTATION_BLOOD_TEMPLE /datum/genetics/mutation/blood_temple #define MUTATION_VAMPIRE /datum/genetics/mutation/vampire +//Genes that directly decrease instability +#define MUTATION_GENE_MENDING /datum/genetics/mutation/gene_mending +#define MUTATION_GENE_MENDING_H /datum/genetics/mutation/gene_mending_h +#define MUTATION_GENE_MENDING_R /datum/genetics/mutation/gene_mending_r #define MUTATION_SEASONED_MIND /datum/genetics/mutation/seasoned_mind #define MUTATION_SHOCK_LESS /datum/genetics/mutation/shock_less @@ -76,6 +81,7 @@ #define MUTATION_NO_BREATHE /datum/genetics/mutation/disability/nobreathe #define MUTATION_HULK /datum/genetics/mutation/disability/hulk #define MUTATION_FRIENDLY /datum/genetics/mutation/friendly +#define MUTATION_MINER_SIGHT /datum/genetics/mutation/miner_sight //^^^ All mutations! @@ -118,6 +124,7 @@ #define SHOCK_LESS 13 #define VAMPIRE 14 #define PAIN_LESS 15 +#define MINING 16 //Thresholds for mutagenic Destabilization diff --git a/code/game/objects/items/weapons/tools/mods/_defines.dm b/code/__DEFINES/items.dm similarity index 96% rename from code/game/objects/items/weapons/tools/mods/_defines.dm rename to code/__DEFINES/items.dm index cbec7ce8eb1..febf34c8891 100644 --- a/code/game/objects/items/weapons/tools/mods/_defines.dm +++ b/code/__DEFINES/items.dm @@ -73,6 +73,9 @@ #define GUN_UPGRADE_DAMAGE_CLONE "clone_damage" #define GUN_UPGRADE_DAMAGE_HALLOSS "hallucination_damage" #define GUN_UPGRADE_DAMAGE_RADIATION "radiation_damage" +#define GUN_UPGRADE_MELEEDAMAGE "melee_damage" +#define GUN_UPGRADE_MELEEPENETRATION "melee_penetration" +#define GUN_UPGRADE_MELEE_DAMAGE_ADDITIVE "melee_damage_additive" #define GUN_UPGRADE_OFFSET "offset" //Constant offset, in degrees #define GUN_UPGRADE_ZOOM "zoom" @@ -90,6 +93,7 @@ #define GUN_UPGRADE_AUTOEJECT "autoeject" #define GUN_UPGRADE_CELLMINUS "small cell adapter" #define GUN_UPGRADE_THERMAL "thermal scope" +#define GUN_UPGRADE_BAYONET "bayonet" #define GUN_UPGRADE_DNALOCK "biocoded" #define GUN_UPGRADE_FOREGRIP "foregrip" #define GUN_UPGRADE_BIPOD "bipod" diff --git a/code/__DEFINES/perks.dm b/code/__DEFINES/perks.dm index 9b1ca899315..d6ac7635bb4 100644 --- a/code/__DEFINES/perks.dm +++ b/code/__DEFINES/perks.dm @@ -99,6 +99,7 @@ #define PERK_NO_OBFUSCATION /datum/perk/no_obfuscation //isekai perk? #define PERK_BLOOD_LUST /datum/perk/blood_lust #define PERK_NATURAL_STYLE /datum/perk/natural_style +#define PERK_MAP_MAKER /datum/perk/map_maker #define PERK_REZ_SICKNESS /datum/perk/rezsickness #define PERK_REZ_SICKNESS_SEVERE /datum/perk/rezsickness/severe diff --git a/code/__DEFINES/projectile_defines.dm b/code/__DEFINES/projectile_defines.dm index c4bcb1308fc..b665d7af8a9 100644 --- a/code/__DEFINES/projectile_defines.dm +++ b/code/__DEFINES/projectile_defines.dm @@ -54,3 +54,4 @@ #define SLOT_UNDERBARREL "underbarrel" #define SLOT_MECHANICS "mechanics" #define SLOT_MAGWELL "magwell" + diff --git a/code/_onclick/hud/screen_objects/base_screen_objects.dm b/code/_onclick/hud/screen_objects/base_screen_objects.dm index ba9b2ce52f9..820510aff18 100644 --- a/code/_onclick/hud/screen_objects/base_screen_objects.dm +++ b/code/_onclick/hud/screen_objects/base_screen_objects.dm @@ -146,6 +146,7 @@ icon_state = "actionA" screen_loc = "8,1:13" var/minloc = "7,2:13" + var/ErisOptimized_minloc layer = ABOVE_HUD_LAYER plane = ABOVE_HUD_PLANE @@ -162,6 +163,8 @@ if(M.client && M.get_active_hand() == owner) if(M.client.prefs.UI_compact_style) screen_loc = minloc + if(M.defaultHUD == "ErisOptimized" && ErisOptimized_minloc) + screen_loc = ErisOptimized_minloc else screen_loc = initial(screen_loc) diff --git a/code/datums/autolathe/guns.dm b/code/datums/autolathe/guns.dm index 1713bb0ad24..330d296aece 100644 --- a/code/datums/autolathe/guns.dm +++ b/code/datums/autolathe/guns.dm @@ -329,6 +329,10 @@ name = "NM 7.62x39mm \"Copperhead\" rifle" build_path = /obj/item/gun/projectile/automatic/mamba/copperhead +/datum/design/autolathe/gun/viper + name = "NM 7.62x39mm \"Viper\" DMR" + build_path = /obj/item/gun/projectile/automatic/mamba/viper + /datum/design/autolathe/gun/python name = "NM 7.62x39mm \"Python\" heavy sniper" build_path = /obj/item/gun/projectile/automatic/mamba/python diff --git a/code/datums/datum_hud_alt.dm b/code/datums/datum_hud_alt.dm new file mode 100644 index 00000000000..94d525f7aee --- /dev/null +++ b/code/datums/datum_hud_alt.dm @@ -0,0 +1,112 @@ +/datum/hud/human/optimized + name = "ErisOptimized" + icon = 'icons/mob/screen/ErisStyleHolo.dmi' + //Xbags, Ybags for space_orient_objs + //Others for slot_orient_objs + MinStyleFlag = TRUE //We *are* the optimized verson + StorageData = list( + "Xspace" = 4.5*32, //in pixels + "Yspace" = 1.5*32, //in pixels + "ColCount" = 7, + ) + + + HUDoverlays = list( + "flash" = list("type" = /obj/screen/full_1_tile_overlay, "loc" = "WEST,SOUTH-1 to EAST+1,NORTH", "minloc" = "WEST,SOUTH to EAST,NORTH", "icon_state" = "blank"), + "pain" = list("type" = /obj/screen/full_1_tile_overlay, "loc" = "WEST,SOUTH-1 to EAST+1,NORTH", "minloc" = "WEST,SOUTH to EAST,NORTH", "icon_state" = "blank"), + "drugeffect" = list("type" = /obj/screen/drugoverlay, "loc" = "WEST,SOUTH-1 to EAST+1,NORTH", "minloc" = "WEST,SOUTH to EAST,NORTH", "icon_state" = "blank"), + + "damageoverlay" = list("type" = /obj/screen/damageoverlay, "loc" = "1,1:-32", "icon" = 'icons/mob/screen1_full.dmi'), + "glassesoverlay" = list("type" = /obj/screen/glasses_overlay, "loc" = "1,1:-32", "icon_state" = "blank"), + ) + + /* !!!! IF YOU WANT TO ADD A VERB TO THIS - ADD ITS NAME TO code\modules\mob\living\carbon\human\species\species_hud.dm + PLEASE DON'T REPEAT MY MISTAKES, I'VE WASTED HOURS OF MY LIFE ON THIS - Kegdo 2022*/ + HUDneed = list( +//status + "nutrition" = list("type" = /obj/screen/nutrition, "loc" = "EAST+1,4.6", "background" = "back17"), + "neural system accumulation" = list("type" = /obj/screen/nsa, "loc" = "EAST+1,5", "background" = "back17"), + "body temperature" = list("type" = /obj/screen/bodytemp, "loc" = "EAST+1,5.4", "background" = "back17"), + "health" = list("type" = /obj/screen/health, "loc" = "EAST+1,5.8", "background" = "back1"), + "sanity" = list("type" = /obj/screen/sanity, "loc" = "EAST+1,6.8", "background" = "back1"), + "oxygen" = list("type" = /obj/screen/oxygen, "loc" = "EAST+1:1,7.8", "background" = "back18"), + "fire" = list("type" = /obj/screen/fire, "loc" = "16.46:1,7.8", "background" = "back18"), + "pressure" = list("type" = /obj/screen/pressure, "loc" = "16:1,8.27", "background" = "back18"), + "toxin" = list("type" = /obj/screen/toxin, "loc" = "16.46:1,8.27", "background" = "back18"), + "internal" = list("type" = /obj/screen/internal, "loc" = "16,8.75", "background" = "back15"), +//corner buttons + //"jump" = list("type" = /obj/screen/jump, "loc" = "EAST+1,BOTTOM+1:-6", "minloc" = "RIGHT,3:-6", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "look up" = list("type" = /obj/screen/look_up, "loc" = "16,2.83", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "throw" = list("type" = /obj/screen/HUDthrow, "loc" = "16,1.35", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "pull" = list("type" = /obj/screen/pull, "loc" = "16,2.47", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "drop" = list("type" = /obj/screen/drop, "loc" = "16,0.96", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "resist" = list("type" = /obj/screen/resist, "loc" = "16,2.1", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "rest" = list("type" = /obj/screen/rest, "loc" = "16,3.22", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "block" = list("type" = /obj/screen/block, "loc" = "16,1.71", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "move intent" = list("type" = /obj/screen/mov_intent, "loc" = "EAST,BOTTOM", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), + "implant bionics" = list("type" = /obj/screen/implant_bionics, "loc" = "EAST-2,BOTTOM-1", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back13"), + "craft menu" = list("type" = /obj/screen/craft_menu, "loc" = "EAST-2:16,BOTTOM", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back13"), + "wield" = list("type" = /obj/screen/wield, "loc" = "13,0", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back13"), + "intent" = list("type" = /obj/screen/intent, "loc" = "EAST-1,BOTTOM", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), + "damage zone" = list("type" = /obj/screen/zone_sel, "loc" = "EAST+1,BOTTOM", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), +//hand buttons + "equip" = list("type" = /obj/screen/equip, "loc" = "8,1", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back14-l"), + "swap hand" = list("type" = /obj/screen/swap, "loc" = "8,1", "hideflag" = TOGGLE_BOTTOM_FLAG), + "right arm bionics" = list("type" = /obj/screen/bionics/r_arm, "loc" = "7:19,1", "background" = "back16"), + "left arm bionics" = list("type" = /obj/screen/bionics/l_arm, "loc" = "10,1", "background" = "back16"), + + "toggle inventory" = list("type" = /obj/screen/toggle_invetory, "loc" = "2,0", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1", "minloc" = "16,15"), + "action palette" = list("type" = /obj/screen/action_palette, "loc" = "16,9.25") + ) + + slot_data = list ( + "Uniform" = list("loc" = "2,1", "state" = "center", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "1,0"), + "Suit" = list("loc" = "3,1", "state" = "equip", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "3,0"), + "Mask" = list("loc" = "3,2", "state" = "mask", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "12,0"), + "Gloves" = list("loc" = "4,1", "state" = "gloves", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "16,12"), + "Glasses" = list("loc" = "2,2", "state" = "glasses", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "16,11"), + "Left Ear" = list("loc" = "4,2", "state" = "ears0", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "16,14"), + "Right Ear" = list("loc" = "4,3", "state" = "ears1", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "16,3.6"), + "Hat" = list("loc" = "3,3", "state" = "hair", "hideflag" = TOGGLE_INVENTORY_FLAG, "background" = "back1", "minloc" = "16,13"), + "Shoes" = list("loc" = "3,0", "state" = "shoes", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1", "minloc" = "2,0"), + "Suit Storage" = list("loc" = "4,0", "state" = "suit-belt","hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), + "Back" = list("loc" = "5,0", "state" = "back", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1", "minloc" = "6,0"), + "ID" = list("loc" = "11,0", "state" = "id", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), + "Left Pocket" = list("loc" = "10,0", "state" = "pocket_l", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), + "Right Pocket" = list("loc" = "7,0", "state" = "pocket_r", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), + "Belt" = list("loc" = "6,0", "state" = "belt", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1", "minloc" = "5,0"), + "Left Hand" = list("loc" = "9,0", "state" = "hand-l", "hideflag" = TOGGLE_BOTTOM_FLAG, "type" = /obj/screen/inventory/hand, "background" = "back1"), + "Right Hand" = list("loc" = "8,0", "state" = "hand-r", "hideflag" = TOGGLE_BOTTOM_FLAG, "type" = /obj/screen/inventory/hand, "background" = "back1") + ) + + HUDfrippery = list( + list("loc" = "1,0", "icon_state" = "frame0-3", "hideflag" = TOGGLE_BOTTOM_FLAG), + list("loc" = "1,0", "icon_state" = "frame3-4", "hideflag" = TOGGLE_BOTTOM_FLAG), + list("loc" = "1,1", "icon_state" = "frame2-2", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "1,2", "icon_state" = "frame2-3", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "1,3", "icon_state" = "frame2-1", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "1,1", "icon_state" = "frame1-3", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "1,2", "icon_state" = "frame1-7", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "1,3", "icon_state" = "frame1-5", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "5,1", "icon_state" = "frame1-2", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "5,2", "icon_state" = "frame1-6", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "5,3", "icon_state" = "frame1-4", "hideflag" = TOGGLE_INVENTORY_FLAG), + list("loc" = "8,1:13", "icon_state" = "frame1-8", "hideflag" = TOGGLE_BOTTOM_FLAG), + list("loc" = "9,1:13", "icon_state" = "frame1-1", "hideflag" = TOGGLE_BOTTOM_FLAG), + list("loc" = "12,0", "icon_state" = "frame3-2", "hideflag" = TOGGLE_BOTTOM_FLAG), + list("loc" = "12,0", "icon_state" = "frame0-2", "hideflag" = TOGGLE_BOTTOM_FLAG), + list("loc" = "12,0", "icon_state" = "frame0-3", "hideflag" = TOGGLE_BOTTOM_FLAG), + list("loc" = "EAST+1,3.6", "icon_state" = "frame1-1"), + list("loc" = "EAST+1,3.6", "icon_state" = "frame3-3"), + list("loc" = "EAST+1,3.6", "icon_state" = "frame0-4"), + list("loc" = "16,10", "icon_state" = "frame3-1") + ) + //list("loc" = "2,3", "icon_state" = "block", "hideflag" = TOGGLE_INVENTORY_FLAG), + + +/datum/hud/human/optimized/New() + ..() + +/datum/interface/ghost_Eris/optimized + mobtype = /mob/observer/ghost + styleName = "ErisOptimized" diff --git a/code/datums/outfits/jobs/ghostroles.dm b/code/datums/outfits/jobs/ghostroles.dm index 915018d9046..c29092d63e5 100644 --- a/code/datums/outfits/jobs/ghostroles.dm +++ b/code/datums/outfits/jobs/ghostroles.dm @@ -152,7 +152,7 @@ ) -/decl/hierarchy/outfit/sri_ert +/decl/hierarchy/outfit/si_ert name = "Ethics Committee investigator" l_ear = /obj/item/device/radio/headset/heads/rd mask = /obj/item/clothing/mask/gas diff --git a/code/datums/outfits/jobs/science.dm b/code/datums/outfits/jobs/science.dm index a5a41198f45..389ce95b43e 100644 --- a/code/datums/outfits/jobs/science.dm +++ b/code/datums/outfits/jobs/science.dm @@ -36,8 +36,6 @@ pda_slot = slot_r_store id_type = /obj/item/card/id/dkgrey pda_type = /obj/item/modular_computer/pda/science/roboticist - backpack_contents = list(/obj/item/hydrogen_fuel_cell = 1) - l_pocket = /obj/item/device/robotanalyzer /decl/hierarchy/outfit/job/science/roboticist/New() ..() diff --git a/code/datums/perks/backgrounds.dm b/code/datums/perks/backgrounds.dm index 7744538f1f0..3b9f79ec3e2 100644 --- a/code/datums/perks/backgrounds.dm +++ b/code/datums/perks/backgrounds.dm @@ -280,3 +280,145 @@ This is NOT for racial-specific perks, but rather specifically for general backg H.sanity.view_damage_threshold += 15 H.sanity.change_max_level(-50) ..() + +/datum/perk/map_maker + name = "Map Maker" + desc = "When holding paper and a box of crayons (must have at least 1 crayon) or a multi-colour pen you can from time to time create a complex map of the area around you in a 20 range. \ + This map will show humanoids and non-humanoids. With constant work you should be able to increase your range of map making." + icon_state = "map" + + active = FALSE + passivePerk = FALSE + +/datum/perk/map_maker/activate() + var/mob/living/carbon/human/user = usr + if(!istype(user)) + return ..() + var/obj/I = user.get_active_hand() + var/obj/II = user.get_inactive_hand() + var/can_map = FALSE + var/crayon_check = FALSE + var/obj/item/storage/fancy/crayons/C + var/obj/item/paper/P + if(istype(I, /obj/item/storage/fancy/crayons)) + C = I + if(C.contents) + crayon_check = TRUE + + if(istype(II, /obj/item/storage/fancy/crayons)) + C = II + if(C.contents) + crayon_check = TRUE + + if(istype(I, /obj/item/pen/multi)) + crayon_check = TRUE + + if(istype(II, /obj/item/pen/multi)) + crayon_check = TRUE + + if(crayon_check) + if(istype(I, /obj/item/paper)) + P = I + can_map = TRUE + if(istype(II, /obj/item/paper)) + P = II + can_map = TRUE + + if(!can_map) + to_chat(usr, SPAN_NOTICE("You are missing something to make a map with. Ensure you have paper and the *full* box of crayons in both hands!")) + return FALSE + + + if(world.time < cooldown_time) + to_chat(usr, SPAN_NOTICE("It is too early to make another map, you have to wait a bit until you can accurately depict your surroundings again.")) + return FALSE + cooldown_time = world.time + 5 MINUTES + user.visible_message("[user] taps the ground and draws on some paper!", "You tap the ground, as you create a map from scratch", "You hear something scribbling!") + log_and_message_admins("used their [src] perk.") + qdel(P) + + var/range = 20 + if(isliving(user)) + var/mob/living/L = user + var/tasklevel = L.learnt_tasks.get_task_mastery_level("MAP_CRAFTING") + range += tasklevel + L.learnt_tasks.attempt_add_task_mastery(/datum/task_master/task/map_crafting, "MAP_CRAFTING", skill_gained = 1, learner = L) + + var/icon/mineralmapss = new("icons/480x480.dmi","black") + mineralmapss.Scale(world.maxx-TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) + for(var/turf/T in trange(range,user)) + if(T.x >= world.maxx-TRANSITIONEDGE || T.x <= TRANSITIONEDGE) continue + if(T.y >= world.maxy-TRANSITIONEDGE || T.y <= TRANSITIONEDGE) continue + + if(istype(T, /turf/simulated/wall)) + var/turf/simulated/wall/TA = T + mineralmapss.DrawBox(rgb(135,132,132),TA.x,TA.y,TA.x, TA.y) + if(istype(T, /turf/simulated/wall/r_wall)) + mineralmapss.DrawBox(rgb(104, 105, 104),TA.x,TA.y,TA.x, TA.y) + if(istype(T, /turf/simulated/floor)) + var/turf/simulated/floor/TA = T + mineralmapss.DrawBox(rgb(255,248,220),TA.x,TA.y,TA.x, TA.y) + for(var/obj/structure/catwalk/CW in TA.contents) + mineralmapss.DrawBox(rgb(186,142,35),CW.x,CW.y,CW.x, CW.y) + for(var/obj/structure/window/WD in TA.contents) + mineralmapss.DrawBox(rgb(175,227,255),WD.x,WD.y,WD.x, WD.y) + for(var/obj/structure/scrap/DS in TA.contents) + mineralmapss.DrawBox(rgb(183,110,121),DS.x,DS.y,DS.x, DS.y) + for(var/obj/structure/salvageable/PS in TA.contents) + mineralmapss.DrawBox(rgb(183,110,121),PS.x,PS.y,PS.x, PS.y) + for(var/obj/structure/closet/MS in TA.contents) + mineralmapss.DrawBox(rgb(183,110,121),MS.x,MS.y,MS.x, MS.y) + for(var/mob/M in TA.contents) + if(ishuman(M)) + mineralmapss.DrawBox(rgb(57,255,20),M.x,M.y,M.x, M.y) + else + mineralmapss.DrawBox(rgb(129,2,3),M.x,M.y,M.x, M.y) + + for(var/obj/machinery/porta_turret/PT in TA.contents) + mineralmapss.DrawBox(rgb(255,165,0),PT.x,PT.y,PT.x, PT.y) + for(var/obj/machinery/power/os_turret/OS in TA.contents) + mineralmapss.DrawBox(rgb(255,165,0),OS.x,OS.y,OS.x, OS.y) + for(var/obj/item/spider_shadow_trap/SST in TA.contents) + mineralmapss.DrawBox(rgb(0,255,255),SST.x,SST.y,SST.x, SST.y) + + for(var/obj/item/beartrap/RT in TA.contents) + mineralmapss.DrawBox(rgb(255,0,0),RT.x,RT.y,RT.x, RT.y) + for(var/obj/item/emp_mine/RT in TA.contents) + mineralmapss.DrawBox(rgb(255,0,0),RT.x,RT.y,RT.x, RT.y) + for(var/obj/item/mine/RT in TA.contents) + mineralmapss.DrawBox(rgb(255,0,0),RT.x,RT.y,RT.x, RT.y) + for(var/obj/structure/wire_splicing/RT in TA.contents) + mineralmapss.DrawBox(rgb(255,0,0),RT.x,RT.y,RT.x, RT.y) + + continue + if(istype(T, /turf/space) || istype(T, /turf/simulated/open)) + var/turf/TA = T + mineralmapss.DrawBox(rgb(0,0,0),TA.x,TA.y,TA.x, TA.y) + for(var/obj/structure/catwalk/CW in TA.contents) + mineralmapss.DrawBox(rgb(186,142,35),CW.x,CW.y,CW.x, CW.y) + + continue + if(istype(T, /turf/simulated/mineral)) + var/turf/simulated/mineral/MW = T + mineralmapss.DrawBox(rgb(96, 70, 15),MW.x,MW.y,MW.x, MW.y) + + mineralmapss.Scale((world.maxx-TRANSITIONEDGE )* 6,(world.maxy-TRANSITIONEDGE) * 6) + sleep(0) + var/obj/item/paper/G = new(user.loc) + G.name = "Area Map" + G.info = "[icon2html(mineralmapss,world)]
Legend:
" + G.info += "People Neon Green
" + G.info += "Life (Not-Plants) Brick Red
" + G.info += "R-Wall Shadow Gray
" + G.info += "Flooring Clay Gray
" + G.info += "Mineral Wall Mud Brown
" + G.info += "Turret Dusk Sun Yellow
" + G.info += "Glass-Windows Coal Blue
" + G.info += "Scrap/Lootables/Salvage Rose Gold
" + G.info += "Trap Hostile Spotted Red
" + G.info += "Open Space Burnt Mess Black
" + G.info += "CatWalks Bee Yellow
" + G.update_icon() + + return ..() + diff --git a/code/datums/setup_option/backgrounds/origin_upbringing.dm b/code/datums/setup_option/backgrounds/origin_upbringing.dm index c6a19b6ea37..496f6c99b36 100644 --- a/code/datums/setup_option/backgrounds/origin_upbringing.dm +++ b/code/datums/setup_option/backgrounds/origin_upbringing.dm @@ -276,3 +276,15 @@ STAT_COG = -10, STAT_VIV = -30 ) + +/datum/category_item/setup_option/background/bckgrnd/map_maker + name = "Map Making" + desc = "Your enhanced perception allows you to visualize the terrain around you, marking down walls, foes, and loot nearby." + perks = list(PERK_MAP_MAKER) + + //Weak perk if you already know the map, also takes resources to use + stat_modifiers = list( + STAT_BIO = -5, + STAT_COG = 10, + ) + diff --git a/code/game/machinery/vendor/weapon_kit_vendors.dm b/code/game/machinery/vendor/weapon_kit_vendors.dm index 4483bee7148..3aa0085fe00 100644 --- a/code/game/machinery/vendor/weapon_kit_vendors.dm +++ b/code/game/machinery/vendor/weapon_kit_vendors.dm @@ -278,6 +278,7 @@ /obj/machinery/vending/marshal_kit/proc/RedeemRangerPrimary(obj/item/voucher/voucher, mob/redeemer) var/items = list( "Spec-Op Kit" = /obj/item/storage/box/m_kit/specop, + "Viper Kit" = /obj/item/storage/box/m_kit/viper, "Custer Kit" = /obj/item/storage/box/m_kit/custer, "Peacekeeper Kit" = /obj/item/storage/box/m_kit/peacekeeper) var/selection = items[input(redeemer, "Pick your primary weapon", "Marshal Voucher Redemption") as null|anything in items] diff --git a/code/game/objects/effects/spawners/ghostroles.dm b/code/game/objects/effects/spawners/ghostroles.dm index b4aeaa6b69b..3fa205ace67 100644 --- a/code/game/objects/effects/spawners/ghostroles.dm +++ b/code/game/objects/effects/spawners/ghostroles.dm @@ -240,13 +240,13 @@ C.activate() C.make_inquisitor() -/obj/effect/mob_spawn/human/sri_ert +/obj/effect/mob_spawn/human/si_ert name = "deployment sleeper" - desc = "A sleeper, with an unconscious body inside. The occupant seems to be a member of the SRI Ethics committee." + desc = "A sleeper, with an unconscious body inside. The occupant seems to be a member of the SI Ethics committee." mob_name = "a human" icon = 'icons/obj/Cryogenic2.dmi' icon_state = "sleeper_1" - outfit = /decl/hierarchy/outfit/sri_ert + outfit = /decl/hierarchy/outfit/si_ert ghost_role_perks = list(PERK_SURGICAL_MASTER, PERK_ROBOTICS_EXPERT, PERK_SI_SCI, PERK_CHEMIST, PERK_TRUE_NAME) short_desc = "You are a member of the Soteria Ethics Committee." flavour_text = "An accusation has been made against the Soteria Research Institute that besmirches our good name and committment to progress and the betterment of science. \ diff --git a/code/game/objects/items/weapons/autolathe_disk/gun_parts_disks.dm b/code/game/objects/items/weapons/autolathe_disk/gun_parts_disks.dm index a388dbc1045..36ccc3f3e09 100644 --- a/code/game/objects/items/weapons/autolathe_disk/gun_parts_disks.dm +++ b/code/game/objects/items/weapons/autolathe_disk/gun_parts_disks.dm @@ -32,31 +32,31 @@ Avoid any disks here being found or used commonly beyond an intended purpose, ot ) // Marshal-specific disk, used by Marshals for high-end gun crafting. MOST gun parts should be here, but thankfully licenses keep it at limited-use. -// For mass-production, Guild should be used. Only thing this disk has that Guild does not is heavy rifle barrles, AMR barrels, rubber grips, and machinegun mechanisms. +// Infinate given gun parts are mass-printed by Guild, orderable by LS, and can be taken from broken down guns. Guild can mass-produce better, but only Marshals can print high-end. /obj/item/computer_hardware/hard_drive/portable/design/gun_parts/marshal disk_name = "NM - \"Gunsmiths United\" firearm parts" icon_state = "marshal" - license = 20 + license = -1 designs = list( - /datum/design/autolathe/part/grip/wood = 0, + /datum/design/autolathe/part/grip/wood, /datum/design/autolathe/part/grip/plastic, /datum/design/autolathe/part/grip/serb, /datum/design/autolathe/part/grip/rubber, /datum/design/autolathe/part/mechanism/pistol, /datum/design/autolathe/part/mechanism/revolver, /datum/design/autolathe/part/mechanism/shotgun, - /datum/design/autolathe/part/mechanism/autorifle = 1, + /datum/design/autolathe/part/mechanism/autorifle, /datum/design/autolathe/part/mechanism/smg, - /datum/design/autolathe/part/mechanism/machinegun = 1, + /datum/design/autolathe/part/mechanism/machinegun, /datum/design/autolathe/part/barrel/pistol, /datum/design/autolathe/part/barrel/magnum, - /datum/design/autolathe/part/barrel/kurtz = 1, - /datum/design/autolathe/part/barrel/carbine = 1, - /datum/design/autolathe/part/barrel/rifle = 1, - /datum/design/autolathe/part/barrel/heavy = 1, + /datum/design/autolathe/part/barrel/kurtz, + /datum/design/autolathe/part/barrel/carbine, + /datum/design/autolathe/part/barrel/rifle, + /datum/design/autolathe/part/barrel/heavy, /datum/design/autolathe/part/barrel/shotgun, - /datum/design/autolathe/part/barrel/amr = 5, + /datum/design/autolathe/part/barrel/amr, ) // Bootleg-gun production stuff. Found in loot-piles, can be bought by LSS for a slightly inflated price. @@ -133,7 +133,7 @@ Avoid any disks here being found or used commonly beyond an intended purpose, ot /datum/design/autolathe/gun_frame/mamba, /datum/design/autolathe/gun_frame/opshot, /datum/design/autolathe/gun_frame/wind, - /datum/design/autolathe/gun_frame/takeshi //No more Omni and DP, both are BS guns like smhing my Smh on my SMH + /datum/design/autolathe/gun_frame/takeshi ) //Rearranged into Pistol > Revolver > SMG > Carbine > Shotgun > Rifle > MG for better clarity diff --git a/code/game/objects/items/weapons/autolathe_disk/marshal.dm b/code/game/objects/items/weapons/autolathe_disk/marshal.dm index 3b6c912ec85..0353ff4a16f 100644 --- a/code/game/objects/items/weapons/autolathe_disk/marshal.dm +++ b/code/game/objects/items/weapons/autolathe_disk/marshal.dm @@ -55,7 +55,7 @@ /datum/design/autolathe/gun/ion_pistol = 5, //launcher /datum/design/autolathe/gun/grenade_launcher_lenar = 7, - //sniper + //sniper - Left here for now till Python can be made off a Mamba frame. /datum/design/autolathe/gun/python = 5, //flaregun /datum/design/autolathe/gun/flare_gun, @@ -254,6 +254,24 @@ /datum/design/autolathe/ammo/rifle_lethal = 4, ) +/obj/item/computer_hardware/hard_drive/portable/design/guns/viper + disk_name = "NM - 7.62mm Viper DMR" + icon_state = "marshal" + + license = 16 + designs = list( + /datum/design/autolathe/gun/viper = 6, + /datum/design/autolathe/ammo/rifle_short_practice = 0, + /datum/design/autolathe/ammo/rifle_short_rubber, + /datum/design/autolathe/ammo/rifle_short, + /datum/design/autolathe/ammo/rifle_short_lethal = 2, + /datum/design/autolathe/ammo/rifle_practice = 1, + /datum/design/autolathe/ammo/rifle_rubber = 2, + /datum/design/autolathe/ammo/rifle = 2, + /datum/design/autolathe/ammo/rifle_lethal = 4, + ) + +// 8.6 Rifles /obj/item/computer_hardware/hard_drive/portable/design/guns/python disk_name = "NM - 7.62mm Python Heavy Rifle" icon_state = "marshal" diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm index ccb0d7f7b4e..5438dc5dd5d 100644 --- a/code/game/objects/items/weapons/cards_ids_syndicate.dm +++ b/code/game/objects/items/weapons/cards_ids_syndicate.dm @@ -268,13 +268,13 @@ access_external_airlocks, access_paramedic, access_research_equipment, access_medical_suits) /obj/item/card/id/syndicate/ert/research_ert - name = "SRI ID card" + name = "SI ID card" desc = "An ID straight from the SI Ethics Committee. Wait, they have an ethics commitee?" registered_name = "Ethics Commitee Agent" assignment = "Ethics Commitee Agent" access = list( - access_rd, access_heads, access_tox, access_genetics, access_morgue, - access_tox_storage, access_teleporter, access_sec_doors, + access_rd, access_heads, access_tox, access_genetics, access_morgue, access_cmo, + access_tox_storage, access_teleporter, access_sec_doors, access_paramedic, access_moebius, access_medical_equip, access_chemistry, access_virology, access_surgery, access_psychiatrist, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, access_eva, access_external_airlocks, access_medical_suits, access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network, access_maint_tunnels, access_research_equipment diff --git a/code/game/objects/items/weapons/storage/hardcases.dm b/code/game/objects/items/weapons/storage/hardcases.dm index 82aff723a78..3a134671730 100644 --- a/code/game/objects/items/weapons/storage/hardcases.dm +++ b/code/game/objects/items/weapons/storage/hardcases.dm @@ -515,7 +515,7 @@ obj/item/storage/hcases/attackby(obj/item/W, mob/user) if(!stamped) stamped = TRUE var/list/options = list() // Moved the Galaxy to secondary selection - options["Osprey - precision rifle"] = list(/obj/item/gun/projectile/automatic/omnirifle/scoped/fancy,/obj/item/ammo_magazine/heavy_rifle_408,/obj/item/ammo_magazine/heavy_rifle_408, /obj/item/ammo_magazine/heavy_rifle_408/rubber, /obj/item/storage/pouch/ammo) + options["Python - precision rifle"] = list(/obj/item/gun/projectile/automatic/mamba/python,/obj/item/ammo_magazine/heavy_rifle_408,/obj/item/ammo_magazine/heavy_rifle_408, /obj/item/ammo_magazine/heavy_rifle_408/rubber, /obj/item/storage/pouch/ammo) options["SWAT - combat shotgun"] = list(/obj/item/gun/projectile/shotgun/pump/swat, /obj/item/ammo_magazine/speed_loader_shotgun, /obj/item/ammo_magazine/speed_loader_shotgun, /obj/item/ammo_magazine/speed_loader_shotgun/beanbag, /obj/item/ammo_magazine/ammobox/c10x24_small, /obj/item/storage/pouch/tubular) options["Ostwind - police carbine"] = list(/obj/item/gun/projectile/automatic/ostwind, /obj/item/ammo_magazine/light_rifle_257, /obj/item/ammo_magazine/light_rifle_257, /obj/item/ammo_magazine/light_rifle_257/rubber/pepperball, /obj/item/storage/pouch/ammo) options["Gleam - Assault Laser"] = list(/obj/item/gun/energy/lasercore/militia/blaster, /obj/item/cell/medium/high, /obj/item/cell/medium/high, /obj/item/cell/medium/high, /obj/item/storage/pouch/tubular) @@ -708,7 +708,7 @@ obj/item/storage/hcases/attackby(obj/item/W, mob/user) /obj/item/storage/hcases/ert/medical name = "medical imprinter hard case" - desc = "A hardcase containing a number of advanced mental imprinters. This one bears the badge of the SRI medical division." + desc = "A hardcase containing a number of advanced mental imprinters. This one bears the badge of the SI medical division." can_hold = list(/obj/item/device/mental_imprinter, /obj/item/device/mental_imprinter) /obj/item/storage/hcases/ert/medical/populate_contents() diff --git a/code/game/objects/items/weapons/storage/marshal_kits.dm b/code/game/objects/items/weapons/storage/marshal_kits.dm index 08bca2a151f..cc647f4a024 100644 --- a/code/game/objects/items/weapons/storage/marshal_kits.dm +++ b/code/game/objects/items/weapons/storage/marshal_kits.dm @@ -92,11 +92,13 @@ new /obj/item/ammo_magazine/rifle_75/rubber(src) new /obj/item/ammo_magazine/rifle_75(src) new /obj/item/ammo_magazine/rifle_75(src) + new /obj/item/ammo_casing/grenade(src) //One flash, one baton shell for actual use on the copperhead. + new /obj/item/ammo_casing/grenade/flash(src) new /obj/item/storage/pouch/ammo(src) //Ranger kits /obj/item/storage/box/m_kit/custer - name = "Custer Kit" + name = "Custer lever action kit" desc = "The standard Marshal box kit containing a Custer lever action rifle, a variant of the famous Armstrong repeating rifle chambered in 8.6mm." populate_contents() @@ -106,6 +108,17 @@ new /obj/item/ammo_magazine/speed_loader_heavy_rifle_408(src) //Still a full packet this way new /obj/item/storage/pouch/ammo(src) +/obj/item/storage/box/m_kit/viper + name = "Viper marksman rifle kit" + desc = "The standard Marshal box kit containing a Viper DMR, a variant of the typical Mamba frame but in 7.62 with a recoil compensating stock. Perfect for marksmen." + + populate_contents() + new /obj/item/gun/projectile/automatic/mamba/viper(src) + new /obj/item/ammo_magazine/rifle_75/rubber(src) + new /obj/item/ammo_magazine/rifle_75(src) + new /obj/item/ammo_magazine/rifle_75(src) + new /obj/item/storage/pouch/ammo(src) + /obj/item/storage/box/m_kit/specop name = "Spec-Op Caseless SMG Kit" desc = "The standard Marshal box kit containing a Spec-Op submachinegun, a powerhouse for operators prefering silenced and traceless weapons." diff --git a/code/game/objects/items/weapons/tools/_tools.dm b/code/game/objects/items/weapons/tools/_tools.dm index 9d04c59289c..8a35b62aeef 100644 --- a/code/game/objects/items/weapons/tools/_tools.dm +++ b/code/game/objects/items/weapons/tools/_tools.dm @@ -1276,8 +1276,9 @@ /obj/screen/item_action/top_bar/tool_info icon = 'icons/mob/screen/gun_actions.dmi' - screen_loc = "8,1:13" + screen_loc = "7.95,1.4" minloc = "7,2:13" + ErisOptimized_minloc = "16,10.3" name = "Tool information" icon_state = "info" diff --git a/code/game/objects/items/weapons/tools/knifes_daggers.dm b/code/game/objects/items/weapons/tools/knifes_daggers.dm index 0b09c61e99a..d42d3ae001b 100644 --- a/code/game/objects/items/weapons/tools/knifes_daggers.dm +++ b/code/game/objects/items/weapons/tools/knifes_daggers.dm @@ -23,6 +23,7 @@ slot_flags = SLOT_BELT structure_damage_factor = STRUCTURE_DAMAGE_BLADE var/backstab_damage = 10 + var/can_remove = TRUE //For bayonet gunmod usage. has_alt_mode = TRUE alt_mode_damagetype = HALLOSS @@ -31,6 +32,20 @@ alt_mode_toggle = "switches their stance to avoid using the blade of their weapon" alt_mode_lossrate = 0.7 +//Handles attaching bayonets to guns capable of taking them. Think of bayonet lugs. +/obj/item/tool/knife/New() + ..() + var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) + I.weapon_upgrades = list( + GUN_UPGRADE_BAYONET = TRUE, + GUN_UPGRADE_MELEE_DAMAGE_ADDITIVE = 10, + GUN_UPGRADE_MELEEPENETRATION = ARMOR_PEN_MODERATE, + GUN_UPGRADE_OFFSET = 4 + ) + I.gun_loc_tag = GUN_UNDERBARREL + I.req_gun_tags = list(GUN_KNIFE) + I.prefix = "bayonetted" + /obj/item/tool/knife/resolve_attackby(atom/target, mob/user) . = ..() if(!(iscarbon(target) || isanimal(target))) diff --git a/code/game/objects/items/weapons/tools/mods/_upgrades.dm b/code/game/objects/items/weapons/tools/mods/_upgrades.dm index 758200e8abc..aaf293fbe98 100644 --- a/code/game/objects/items/weapons/tools/mods/_upgrades.dm +++ b/code/game/objects/items/weapons/tools/mods/_upgrades.dm @@ -181,6 +181,9 @@ to_chat(user, SPAN_WARNING("This hardsuit can't fit any more modifications!")) return FALSE + if(!required_qualities.len) + return FALSE + if(required_qualities.len) var/qmatch = FALSE for (var/q in required_qualities) @@ -199,6 +202,9 @@ to_chat(user, SPAN_WARNING("This armor can't fit anymore modifications!")) return FALSE + if(!required_qualities.len) + return FALSE + if(required_qualities.len) var/qmatch = FALSE for (var/q in required_qualities) @@ -473,6 +479,15 @@ if(weapon_upgrades[GUN_UPGRADE_THERMAL]) G.vision_flags = SEE_MOBS + if(weapon_upgrades[GUN_UPGRADE_BAYONET]) + G.attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + G.sharp = TRUE + G.bayonet = weapon_upgrades[GUN_UPGRADE_BAYONET] + if(weapon_upgrades[GUN_UPGRADE_MELEE_DAMAGE_ADDITIVE]) + G.force += weapon_upgrades[GUN_UPGRADE_MELEE_DAMAGE_ADDITIVE] + if(weapon_upgrades[GUN_UPGRADE_MELEEPENETRATION]) + G.armor_divisor += weapon_upgrades[GUN_UPGRADE_MELEEPENETRATION] + if(weapon_upgrades[GUN_UPGRADE_DNALOCK]) G.dna_compare_samples = TRUE if(G.dna_lock_sample == "not_set") diff --git a/code/game/objects/items/weapons/tools/simple_weapons.dm b/code/game/objects/items/weapons/tools/simple_weapons.dm index cee2bb518aa..8b5e0c293e0 100644 --- a/code/game/objects/items/weapons/tools/simple_weapons.dm +++ b/code/game/objects/items/weapons/tools/simple_weapons.dm @@ -1008,9 +1008,61 @@ ) alt_mode_toggle = "switches their stance to strike at targets with the shaft" alt_mode_lossrate = 0.4 + extended_reach = TRUE /obj/item/tool/cheap/saber name = "cheap saber" desc = "A saber of acceptable quality, mass-produced by Lonestar. Probably not fit for parrying, but why not give it a try?" icon_state = "cheap_saber" item_state = "cutlass" + +//Complex cheap weapon arts +/obj/item/tool/cheap/rapier + name = "cheap cinq rapier" + desc = "A mass-produced copy of a cinq rapier by Lonestar. Is unable to be used for parrying but has some techniques." + icon_state = "cheap_rapier" + item_state = "katana" + force = WEAPON_FORCE_NORMAL + armor_divisor = ARMOR_PEN_EXTREME + clickdelay_offset = -2 //DEFAULT_QUICK_COOLDOWN = 4 so we offset are weapon to quick + var/coin_tracker = 0 //Used to track hits used in fancy modes + alt_mode_toggle = "switches their stance to strike without stabbing" + alt_mode_lossrate = 0.4 + +/obj/item/tool/cheap/rapier/resolve_attackby(atom/target, mob/user) + clickdelay_offset = -2 //Resets + + if(coin_tracker >= 10) + force += 5 + icon_state = "cheap_rapier_form_two" + if(coin_tracker >= 20) + if(prob(coin_tracker)) + force += 3 //20% more base damage rounded up + clickdelay_offset = -3 //slightly faster attacking + + if(coin_tracker >= 25) + coin_tracker = 0 + clickdelay_offset = -8 //Refund that click + icon_state = "cheap_rapier" + + + if(ismob(target)) + var/mob/living/M = target + if(M.stat != DEAD) + coin_tracker += 1 + + .=..() + refresh_upgrades() + + //So this is a bit missleading, reach attacks do *not* chain themselfs so you must range one attack folks + if(coin_tracker >= 5 && coin_tracker <= 10) + extended_reach = TRUE + icon_state = "cheap_rapier_form_one" + + +/obj/item/tool/cheap/rapier/dropped() + coin_tracker = 0 + refresh_upgrades() + update_icon() + icon_state = "cheap_rapier" + ..() diff --git a/code/game/objects/random/lathe_disks/guns.dm b/code/game/objects/random/lathe_disks/guns.dm index 59d841caa28..b9d2ffb8d0e 100644 --- a/code/game/objects/random/lathe_disks/guns.dm +++ b/code/game/objects/random/lathe_disks/guns.dm @@ -125,7 +125,7 @@ /obj/item/computer_hardware/hard_drive/portable/design/guns/pulse_rifle = 1, /obj/item/computer_hardware/hard_drive/portable/design/guns/sa_kalashnikov = 2, /obj/item/computer_hardware/hard_drive/portable/design/guns/tac_kalashnikov = 1, - /obj/item/computer_hardware/hard_drive/portable/design/guns/python = 1, + /obj/item/computer_hardware/hard_drive/portable/design/guns/viper = 1, /obj/item/computer_hardware/hard_drive/portable/design/guns/copperhead = 2, /obj/item/computer_hardware/hard_drive/portable/design/blackshield/luger = 3, /obj/item/computer_hardware/hard_drive/portable/design/guns/bulldog = 3, diff --git a/code/game/objects/random/oddities.dm b/code/game/objects/random/oddities.dm index 75d56b07c6a..e9b9600271f 100644 --- a/code/game/objects/random/oddities.dm +++ b/code/game/objects/random/oddities.dm @@ -159,6 +159,7 @@ /obj/item/gun_upgrade/mechanism/brass_kit = 1, //Armor /obj/item/clothing/suit/crimsoncross_regaloutfit = 0.1, //Little rarer then even soap + /obj/item/clothing/shoes/crimsoncross_warp = 1, //Misc - things that are not a "gun" but still good for this /obj/item/oddity/nt/seal = 0.5, /obj/item/soap/bluespase = 0.5, diff --git a/code/game/objects/structures/burrows.dm b/code/game/objects/structures/burrows.dm index 6d806d5735c..148aa0a1213 100755 --- a/code/game/objects/structures/burrows.dm +++ b/code/game/objects/structures/burrows.dm @@ -19,7 +19,7 @@ //Any failed attempt to collapse it will reduce the health, making future attempts easier health = 100 - var/isSealed = TRUE // borrow spawns as cracks and becomes a hole when critters emerge + var/isSealed = TRUE // burrow spawns as cracks and becomes a hole when critters emerge var/isRevealed = FALSE // when burrow is revealed it prevents interactions with turf and is not hiden anymore @@ -94,7 +94,7 @@ if(prob(3) && T.z == 2) //Bottom floor of maints only deepmaint_entry_point = TRUE - if(deepmaint_entry_point) //so we can tell at a glace what is a deep maints borrow + if(deepmaint_entry_point) //so we can tell at a glace what is a deep maints burrow desc = "There appears to be an entrance here, covered by rubble and dirt. Collapsing it would take some serious tools and time." //Lets remove ourselves from the global list and cleanup any held references @@ -533,8 +533,15 @@ percentage is a value in the range 0..1 that determines what portion of this mob //We record the time to prevent exploits of starting and quickly cancelling var/start = world.time var/target_time = WORKTIME_FAST+ 2*health + var/health_mod = 0.66 - if (I.use_tool(user, src, target_time, QUALITY_DIGGING, health * 0.66, list(STAT_MEC, STAT_ROB), forced_sound = WORKSOUND_PICKAXE)) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(MINING in H.mutations) + target_time *= 0.5 + health_mod = 0.33 + + if (I.use_tool(user, src, target_time, QUALITY_DIGGING, health * health_mod, list(STAT_MEC, STAT_ROB), forced_sound = WORKSOUND_PICKAXE)) //On success, the hole is destroyed! new /obj/random/scrap/sparse_weighted(get_turf(user)) user.visible_message("[user] collapses [src] with \the [I] and dumps trash which was in the way.", "You collapse [src] with \the [I] and dump trash which was in the way.") @@ -565,7 +572,7 @@ percentage is a value in the range 0..1 that determines what portion of this mob health -= (I.get_tool_quality(QUALITY_DIGGING)*time_mult) -//Seal up cracks in a borrow. +//Seal up cracks in a burrow. /obj/structure/burrow/proc/crack_removal(obj/item/I, mob/user) //Safty check if(!isRevealed) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 94192938c87..93c73585453 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -13,8 +13,7 @@ else new /obj/item/storage/backpack/satchel/purple/scientist(src) new /obj/item/clothing/under/rank/scientist(src) - //new /obj/item/clothing/suit/labcoat/science(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) + new /obj/item/clothing/suit/storage/toggle/labcoat/science(src) new /obj/item/clothing/shoes/jackboots(src) new /obj/item/device/radio/headset/headset_sci(src) new /obj/item/tank/air(src) @@ -22,6 +21,31 @@ new /obj/item/storage/belt/sci(src) new /obj/item/storage/bag/xenobio(src) new /obj/item/bodybag/xenobio(src) + new /obj/item/device/science_tool(src) + +/obj/structure/closet/secure_closet/personal/robo + name = "soteria roboticist's locker" + req_access = list(access_robotics) + icon_state = "science" + +/obj/structure/closet/secure_closet/personal/robo/populate_contents() + if(populated_contents) + return + populated_contents = TRUE + if(prob(50)) + new /obj/item/storage/backpack/purple/scientist(src) + else + new /obj/item/storage/backpack/satchel/purple/scientist(src) + new /obj/item/clothing/under/rank/roboticist(src) + new /obj/item/clothing/suit/storage/rank/robotech_jacket(src) + new /obj/item/clothing/shoes/jackboots(src) + new /obj/item/device/radio/headset/headset_sci(src) + new /obj/item/tank/air(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/storage/belt/sci(src) + new /obj/item/device/robotanalyzer(src) + new /obj/item/hydrogen_fuel_cell(src) + /obj/structure/closet/secure_closet/reinforced/RD name = "soteria research overseer's locker" diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 70a42031264..454ea0d2aca 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -505,6 +505,10 @@ to_chat(user, SPAN_WARNING("Someone's already washing here.")) return + if(istype(O, /obj/item/reagent_containers/cooking_with_jane)) + to_chat(user, SPAN_WARNING("The [O] doesn‘t seem to accept water directly from the tap. Use a beaker or other proxy to add reagents.")) + return + var/obj/item/reagent_containers/RG = O if (istype(RG) && RG.is_refillable()) var/amount_to_add = min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 94400f44701..fc2d27cfe23 100755 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1233,7 +1233,7 @@ ADMIN_VERB_ADD(/datum/admins/proc/toggleguests, R_ADMIN, FALSE) return //Extra sanity check to make sure only observers are shoved into things //Same as assume-direct-control perm requirements. - if (!check_rights(R_ADMIN|R_DEBUG,0)) + if (!check_rights(R_ADMIN|R_MOD|R_DEBUG,0)) return 0 if (!frommob.ckey) return 0 diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 48dd7220bef..f60702f279f 100755 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -635,26 +635,31 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(prefs) prefs.ShowChoices(usr) + +//Small note! If you ever set your character UI it will error /client/proc/create_UI(var/mob_type) destroy_UI() if(!mob_type) mob_type = mob.type if(!UI) - var/success = FALSE + //var/success = FALSE for(var/S in GLOB.ui_styles[mob_type]) var/datum/interface/style = S if(initial(style.styleName) == prefs.UI_style) UI = new style(src) - success = TRUE + //success = TRUE break - if(!success) - log_debug("Could not find style \"[prefs.UI_style]\" for [mob_type].") + //if(!success) + //log_debug("Could not find style \"[prefs.UI_style]\" for [mob_type].") if(UI) UI.show() /client/proc/destroy_UI() if(UI) + for(var/i in screen) + if(UI._elements.Find(i)) + screen.Remove(i) qdel(UI) UI = null diff --git a/code/modules/client/ui_style.dm b/code/modules/client/ui_style.dm index 79b5eb91879..b38e615d8da 100644 --- a/code/modules/client/ui_style.dm +++ b/code/modules/client/ui_style.dm @@ -1,7 +1,8 @@ /var/all_ui_styles = list( - "ErisStyle" + "ErisStyle", + "ErisOptimized" ) /proc/ui_style2icon(ui_style) if(ui_style in all_ui_styles) @@ -36,6 +37,9 @@ var/UI_style_new = input(usr, "Select a style.") as null|anything in all_ui_styles if(UI_style_new) prefs.UI_style = UI_style_new + if(ishuman(mob)) + var/mob/living/carbon/human/human = mob + human.check_HUD() var/UI_style_alpha_new = input(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255","Alpha",prefs.UI_style_alpha) as null|num if(UI_style_alpha_new && (UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) @@ -45,8 +49,8 @@ if(UI_style_color_new) prefs.UI_style_color = UI_style_color_new + var/mob/living/carbon/human/H = mob prefs.save_preferences() - var/mob/living/carbon/human/H = src.mob H.regenerate_icons() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1380b79b30f..5a4927fcfa5 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -179,10 +179,11 @@ /obj/screen/item_action/top_bar/clothing_info icon = 'icons/mob/screen/gun_actions.dmi' - screen_loc = "8,1:13" + screen_loc = "7.95,1.4" minloc = "7,2:13" name = "Clothing information" icon_state = "info" + ErisOptimized_minloc = "16,10.3" /obj/item/clothing/refresh_upgrades() var/obj/item/clothing/referencecarmor = new type() diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 0f9a7ec9517..6750d5c19ea 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -928,8 +928,6 @@ var/list/options = list() options["prime dark"] = "prime" options["prime royal"] = "prime_alt" - options["prime royal claric"] = "prime_alt2" - options["prime royal doctor"] = "prime_alt3" options["prime saint"] = "prime_saint" options["prime paladin"] = "prime_paladin" options["prime laurel"] = "laurel_g" diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index ba29db0dc8c..3670257398a 100755 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -249,6 +249,7 @@ continue if(armor_list) piece.armor = armor + piece.name = "[suit_type] [initial(piece.name)]" if(canremove) piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT) @@ -687,9 +688,8 @@ if(!check_slot.armor_list || check_slot == wearer.shoes || check_slot == wearer.gloves) return TRUE for(var/i in check_slot.armor_list) - var/a = check_slot.armor_list[i] - for(a in armor) - if(check_slot.armor_list[i] > 2) + for(var/a in armor) + if(check_slot.armor_list[i] > 2 && i == a) return FALSE if(check_slot.armor_list[ARMOR_BIO] > 75) //Let the nerds keep the labcoat drip return FALSE diff --git a/code/modules/clothing/spacesuits/rig/rig_ui.dm b/code/modules/clothing/spacesuits/rig/rig_ui.dm index ee0ae324817..304a21f7aa9 100644 --- a/code/modules/clothing/spacesuits/rig/rig_ui.dm +++ b/code/modules/clothing/spacesuits/rig/rig_ui.dm @@ -144,6 +144,7 @@ if(ishuman(usr) && (usr.stat || usr.stunned || usr.lying)) return FALSE toggle_piece(params["piece"], usr) + updateArmor() . = TRUE if("interact_module") var/module_index = text2num(params["module"]) diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm index 652ca8c1aac..debfea2ea27 100644 --- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm +++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm @@ -65,6 +65,7 @@ return wearing_rig.toggle_piece("helmet",user) + wearing_rig.updateArmor() /mob/living/carbon/human/rig/verb/toggle_chest() @@ -81,6 +82,7 @@ return wearing_rig.toggle_piece("chest",user) + wearing_rig.updateArmor() /mob/living/carbon/human/rig/verb/toggle_gauntlets() @@ -96,6 +98,7 @@ return wearing_rig.toggle_piece("gauntlets",user) + wearing_rig.updateArmor() /mob/living/carbon/human/rig/verb/toggle_boots() @@ -111,6 +114,7 @@ return wearing_rig.toggle_piece("boots",user) + wearing_rig.updateArmor() /mob/living/carbon/human/rig/verb/deploy_suit() diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index 7b2f37dd28b..4a1c46a5f65 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -59,7 +59,7 @@ /obj/item/clothing/head/helmet/space/rig/combat/ironhammer light_overlay = "sec_light" camera_networks = list(NETWORK_SECURITY) -//blacksheild +//blackshield /obj/item/rig/combat/blackshield name = "Blackshield Ops control module" desc = "A Blackshield RIG module that has been tailored for CQC. Due to its plating, it's slightly bulkier than normal standard security hardsuits." diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 207014fe956..1bdbaf13e1a 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -13,9 +13,7 @@ bullet = 0, bomb = 0, bio = 50, - bomb = 0, - bio = 0, - rad = 0 + bomb = 0 ) /obj/item/clothing/suit/storage/toggle/labcoat/poofy @@ -56,8 +54,6 @@ bullet = 0, bomb = 0, bio = 75, - bomb = 0, - bio = 0, rad = 0 ) @@ -90,8 +86,6 @@ bullet = 0, bomb = 0, bio = 50, - bomb = 0, - bio = 0, rad = 0 ) diff --git a/code/modules/cooking_with_jane/recipes/recipe.dm b/code/modules/cooking_with_jane/recipes/recipe.dm index a781be35709..a5dda8cc6fd 100644 --- a/code/modules/cooking_with_jane/recipes/recipe.dm +++ b/code/modules/cooking_with_jane/recipes/recipe.dm @@ -1514,7 +1514,7 @@ cooking_container = OVEN product_type = /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit step_builder = list( - list(CWJ_ADD_ITEM, /obj/item/reagent_containers/food/snacks/sliceable/flatdough, qmod=0.5), + list(CWJ_ADD_ITEM, /obj/item/reagent_containers/food/snacks/doughslice, qmod=0.5), list(CWJ_ADD_PRODUCE, "plumphelmet", qmod=0.2, reagent_skip=TRUE), list(CWJ_ADD_REAGENT, "water", 5), list(CWJ_ADD_REAGENT, "flour", 5), diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index aa11c4b5775..0ebd5b06aba 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -641,7 +641,7 @@ I said no! result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza /datum/recipe/mushroompizza - fruit = list("mushroom" = 5, "tomato" = 1) + fruit = list("plumphelmet" = 5, "tomato" = 1) items = list( /obj/item/reagent_containers/food/snacks/sliceable/flatdough, /obj/item/reagent_containers/food/snacks/cheesewedge @@ -837,7 +837,7 @@ I said no! result = /obj/item/reagent_containers/food/snacks/rofflewaffles /datum/recipe/stew - fruit = list("potato" = 1, "tomato" = 1, "carrot" = 1, "mushroom" = 1) // No eggplant! Terrible! + fruit = list("potato" = 1, "tomato" = 1, "carrot" = 1, "plumphelmet" = 1) // No eggplant! Terrible! reagents = list("water" = 10) items = list(/obj/item/reagent_containers/food/snacks/meat) result = /obj/item/reagent_containers/food/snacks/stew @@ -1084,12 +1084,12 @@ I said no! result = /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit /datum/recipe/mushroomsoup - fruit = list("mushroom" = 1) + fruit = list("plumphelmet" = 1) reagents = list("milk" = 5, "cream" = 5, "sodiumchloride" = 1, "blackpepper" = 1) result = /obj/item/reagent_containers/food/snacks/mushroomsoup /datum/recipe/chawanmushi - fruit = list("mushroom" = 1) + fruit = list("plumphelmet" = 1) reagents = list("water" = 5, "soysauce" = 5) items = list( /obj/item/reagent_containers/food/snacks/egg, diff --git a/code/modules/genetics/machinery/genetics_cloner.dm b/code/modules/genetics/machinery/genetics_cloner.dm index 0cd29863de7..66020f40aad 100644 --- a/code/modules/genetics/machinery/genetics_cloner.dm +++ b/code/modules/genetics/machinery/genetics_cloner.dm @@ -205,7 +205,7 @@ This makes cloning vat is probably the most dangerous tool in Genetics. Because return if(embryo) - addLog("Error, Please vacate the dead embryo from the chamber~!") + addLog("Error, Please vacate the nonviable embryo from the chamber~!") return container = find_container() @@ -373,12 +373,12 @@ This makes cloning vat is probably the most dangerous tool in Genetics. Because //TODO: SPECIAL BREAKOUT EVENT breakout() else - addLog("Protein not available~, The Embryo has starved to death.") + addLog("Protein not available~, The Embryo has starved.") stop() //The clone is dead. else if(clone_ready) visible_message(SPAN_DANGER("The creature inside the cloning vat begins to stir...")) else - addLog("Protein container not found~, The Embryo has starved to death.") + addLog("Protein container not found~, The Embryo has starved.") stop() else breakout() diff --git a/code/modules/genetics/machinery/genetics_items.dm b/code/modules/genetics/machinery/genetics_items.dm index aa869a20300..d673467d3be 100644 --- a/code/modules/genetics/machinery/genetics_items.dm +++ b/code/modules/genetics/machinery/genetics_items.dm @@ -603,7 +603,12 @@ Neglects to mention where to find its pieces. "The Hyperion mutation can enhance cloned organs, like the Blood Vessels.", "The Hyperion mutation can enhance cloned organs, like the Nerves.", "The Hyperion mutation can enhance cloned organs, like the Muscles.", - "Mixed with a cloking mutation, the Hyperion mutation can be combined to cause phasing.", + "Hell Divers are just a really hungry and leathery opossum if you don't think too much about it!", + "The flesh sacs with protein milk can lead to heavier hands.", + "Baldness and coughing when combined can lead to protective coating for genes.", + "DNA Mending and Epilepsy can create another layer of DNA protection.", + "DNA Mending and Nervousness can create another layer of DNA protection.", + "Mixed with a cloaking mutation, the Hyperion mutation can be combined to cause phasing.", "A greater cloaking mutation can be irradiated to cause phasing.", "The DNA of a golden roach can be combined with an imbecile mutation to make a mutagen that enforces docility.", "The barotrauma mutation can be irradiated to make a strain that removes a need for breathing.", @@ -612,7 +617,8 @@ Neglects to mention where to find its pieces. "Flesh sacs can be achieved through irradiated vatgrown DNA- if you're a morally ambiguous person.", "Flesh sacs can be achieved through irradiated monkey DNA with only limited moral quandaries!", "Bank to Bank, River to River, Ocean to Ocean, weaved together to make a Temple.", - "Eye's of a cat, belly of a beast and a bank of blood will make a most regal sickness.", + "Mix Unstable foot, Eye's of a cat and dwarfism to create something any miner would love.", + "Belly of a beast, a bank of blood, and eye's of a cat will make a most regal sickness.", "If you combine the mutations that make roaches and spiders accept you, you can create a mutation that will cause them to ignore you.")) desc = "Xenogenetics fact of the day: [blurb]" diff --git a/code/modules/genetics/mutations/gene_mending.dm b/code/modules/genetics/mutations/gene_mending.dm new file mode 100644 index 00000000000..29ceb596f93 --- /dev/null +++ b/code/modules/genetics/mutations/gene_mending.dm @@ -0,0 +1,56 @@ + +//Macro: MUTATION_GENE_MENDING +/datum/genetics/mutation/gene_mending + name = "DNA Mending" + key = "MUTATION_GENE_MENDING" + desc = "Simply helps stability." + gain_text = "Nothing seems to change." + instability = -10 + +//Macro: MUTATION_GENE_MENDING_H +/datum/genetics/mutation/gene_mending_h + name = "DNA Healing" + key = "MUTATION_GENE_MENDING_H" + desc = "Simply helps stability at the cost of users health." + gain_text = "Nothing seems to change?" + instability = -10 + +/datum/genetics/mutation/gene_mending_h/onPlayerImplant() + ..() + var/mob/living/carbon/human/H = container.holder + H.maxHealth -= 10 + +/datum/genetics/mutation/gene_mending_h/onMobImplant() + ..() + var/mob/M = container.holder + M.maxHealth -= 10 + +/datum/genetics/mutation/gene_mending_h/onPlayerRemove() + ..() + var/mob/living/carbon/human/H = container.holder + H.maxHealth += 10 + +/datum/genetics/mutation/gene_mending_h/onMobRemove() + ..() + var/mob/M = container.holder + M.maxHealth += 10 + +//Macro: MUTATION_GENE_MENDING_R +/datum/genetics/mutation/gene_mending_r + name = "DNA Robusting" + key = "MUTATION_GENE_MENDING_R" + desc = "Simply helps stability at the cost of being much more sensitive to chemicals." + gain_text = "Nothing seems to change..." + instability = -10 + +/datum/genetics/mutation/gene_mending_r/onPlayerImplant() + ..() + var/mob/living/carbon/human/H = container.holder + H.metabolism_effects.nsa_mult -= 0.10 //10% less NSA, + H.metabolism_effects.calculate_nsa() + +/datum/genetics/mutation/gene_mending_r/onPlayerRemove() + ..() + var/mob/living/carbon/human/H = container.holder + H.metabolism_effects.nsa_mult += 0.10 + H.metabolism_effects.calculate_nsa() diff --git a/code/modules/genetics/mutations/miner_sight.dm b/code/modules/genetics/mutations/miner_sight.dm new file mode 100644 index 00000000000..ed9adc66a13 --- /dev/null +++ b/code/modules/genetics/mutations/miner_sight.dm @@ -0,0 +1,15 @@ +/datum/genetics/mutation/miner_sight + name = "Miner Sight" + key = "MUTATION_MINER_SIGHT" + desc = "The holder is able to mine more ore veins and close burrows with ease." + var/mutation = MINING + gain_text = "When looking at burrows and ore veins its hard to ignore the glints that now seem to shimmer." + instability = 25 + +/datum/genetics/mutation/miner_sight/onMobImplant() + ..() + container.holder.mutations.Add(mutation) + +/datum/genetics/mutation/miner_sight/onMobRemove() + ..() + container.holder.mutations.Remove(mutation) diff --git a/code/modules/genetics/mutations/punch.dm b/code/modules/genetics/mutations/punch.dm new file mode 100644 index 00000000000..4c3a601c6b3 --- /dev/null +++ b/code/modules/genetics/mutations/punch.dm @@ -0,0 +1,38 @@ +//Macro: MUTATION_PUNCH +/datum/genetics/mutation/punch + name = "Heavy Hands" + key = "MUTATION_PUNCH" + desc = "Increases the force you can put in your bare-handed blows." + gain_text = "Your hands feel like heavy liquid is pooling inside them..." + instability = 10 + +/datum/genetics/mutation/punch/onMobImplant() + if(!..()) + return + if(ishuman(container.holder)) + var/mob/living/carbon/human/human_holder = container.holder + human_holder.punch_damage_increase += 3 + //Imagine the fun of this on colony allied monsters + if(istype(container.holder, /mob/living/simple_animal/hostile)) + var/mob/living/simple_animal/hostile/HE = container.holder + HE.melee_damage_lower += 6 + HE.melee_damage_upper += 6 + if(issuperioranimal(container.holder)) + var/mob/living/carbon/superior_animal/SA = container.holder + SA.melee_damage_lower += 6 + SA.melee_damage_upper += 6 + +/datum/genetics/mutation/punch/onMobImplant() + if(!..()) + return + if(ishuman(container.holder)) + var/mob/living/carbon/human/human_holder = container.holder + human_holder.punch_damage_increase -= 3 + if(istype(container.holder, /mob/living/simple_animal/hostile)) + var/mob/living/simple_animal/hostile/HE = container.holder + HE.melee_damage_lower -= 6 + HE.melee_damage_upper -= 6 + if(issuperioranimal(container.holder)) + var/mob/living/carbon/superior_animal/SA = container.holder + SA.melee_damage_lower -= 6 + SA.melee_damage_upper -= 6 \ No newline at end of file diff --git a/code/modules/genetics/recipes/abilities.dm b/code/modules/genetics/recipes/abilities.dm index eb6a27e6252..4026c090d80 100644 --- a/code/modules/genetics/recipes/abilities.dm +++ b/code/modules/genetics/recipes/abilities.dm @@ -1,5 +1,5 @@ //File for all recipies that consist of combinations of genes that produce abilities. - +//A-Z required /datum/genetics/mutation_recipe/combination/wurm_cry required_mutations = list(MUTATION_SCREAMING, MUTATION_TERMITE_FRIEND) result_path = MUTATION_WURM_CRY diff --git a/code/modules/genetics/recipes/blood_based.dm b/code/modules/genetics/recipes/blood_based.dm index 1c87d8fd6b2..9b41079ba5b 100644 --- a/code/modules/genetics/recipes/blood_based.dm +++ b/code/modules/genetics/recipes/blood_based.dm @@ -1,3 +1,4 @@ +//A-Z required /datum/genetics/mutation_recipe/combination/blood_river required_mutations = list(MUTATION_BLOOD_BANK, MUTATION_BLOOD_BANK) result_path = MUTATION_BLOOD_RIVER @@ -15,5 +16,5 @@ result_path = MUTATION_BLOOD_TEMPLE /datum/genetics/mutation_recipe/combination/vampire - required_mutations = list(MUTATION_CAT_EYES, MUTATION_BLOOD_BANK, MUTATION_BOTTOMLESS_BELLY) + required_mutations = list(MUTATION_BLOOD_BANK, MUTATION_BOTTOMLESS_BELLY, MUTATION_CAT_EYES) result_path = MUTATION_VAMPIRE \ No newline at end of file diff --git a/code/modules/genetics/recipes/cloning_recipes.dm b/code/modules/genetics/recipes/cloning_recipes.dm index 7eab8d59f25..782a8347ba2 100644 --- a/code/modules/genetics/recipes/cloning_recipes.dm +++ b/code/modules/genetics/recipes/cloning_recipes.dm @@ -1,3 +1,4 @@ +//A-Z required //====================================================================== //Roach Combinations /datum/genetics/mutation_recipe/irradiation/roach @@ -92,33 +93,33 @@ //====================================================================== //Termite Combinations /datum/genetics/mutation_recipe/irradiation/termite - required_on_clone_types = list(/mob/living/carbon/superior_animal/termite) + required_on_clone_types = list(/mob/living/carbon/superior_animal/termite_no_despawn) /datum/genetics/mutation_recipe/irradiation/termite/get_result() var/list/random_termite = pick( - list("type" = /mob/living/carbon/superior_animal/termite, "name" = "Pekhota termite"), - list("type" = /mob/living/carbon/superior_animal/termite/iron, "name" = "Pomoshchnik termite"), - list("type" = /mob/living/carbon/superior_animal/termite/silver, "name" = "Pushka termite"), - list("type" = /mob/living/carbon/superior_animal/termite/uranium, "name" = "Smertnik termite"), - list("type" = /mob/living/carbon/superior_animal/termite/plasma, "name" = "Kop'ye termite")) + list("type" = /mob/living/carbon/superior_animal/termite_no_despawn, "name" = "Pekhota termite"), + list("type" = /mob/living/carbon/superior_animal/termite_no_despawn/iron, "name" = "Pomoshchnik termite"), + list("type" = /mob/living/carbon/superior_animal/termite_no_despawn/silver, "name" = "Pushka termite"), + list("type" = /mob/living/carbon/superior_animal/termite_no_despawn/uranium, "name" = "Smertnik termite"), + list("type" = /mob/living/carbon/superior_animal/termite_no_despawn/plasma, "name" = "Kop'ye termite")) var/datum/genetics/mutation/new_mutation = new /datum/genetics/mutation/copy_mob(random_termite["type"], random_termite["name"]) return new_mutation //======================= //Queen /datum/genetics/mutation_recipe/combination/queen_termite - required_on_clone_types = list(/mob/living/carbon/superior_animal/termite/silver) + required_on_clone_types = list(/mob/living/carbon/superior_animal/termite_no_despawn/silver) required_mutations = list(MUTATION_GIGANTISM) /datum/genetics/mutation_recipe/combination/queen_termite/get_result() - return new /datum/genetics/mutation/copy_mob(/mob/living/carbon/superior_animal/termite/diamond, "Koroleva termite") + return new /datum/genetics/mutation/copy_mob(/mob/living/carbon/superior_animal/termite_no_despawn/diamond, "Koroleva termite") //======================= //King /datum/genetics/mutation_recipe/combination/king_termite - required_on_clone_types = list(/mob/living/carbon/superior_animal/termite/plasma) + required_on_clone_types = list(/mob/living/carbon/superior_animal/termite_no_despawn/plasma) required_mutations = list(MUTATION_GIGANTISM) /datum/genetics/mutation_recipe/combination/king_termite/get_result() - return new /datum/genetics/mutation/copy_mob(/mob/living/carbon/superior_animal/termite/osmium, "Korol termite") + return new /datum/genetics/mutation/copy_mob(/mob/living/carbon/superior_animal/termite_no_despawn/osmium, "Korol termite") //====================================================================== //Increase Cow. @@ -333,6 +334,15 @@ /datum/genetics/mutation_recipe/combination/mouse/get_result() return new /datum/genetics/mutation/copy_mob(/mob/living/simple_animal/opossum, "opossom") +//====================================================================== +//possom to helldiver +/datum/genetics/mutation_recipe/combination/opossum + required_on_clone_types = list(/mob/living/simple_animal/opossum) + required_mutations = list(MUTATION_BOTTOMLESS_BELLY, MUTATION_COW_SKIN) + +/datum/genetics/mutation_recipe/combination/opossum/get_result() + return new /datum/genetics/mutation/copy_mob(/mob/living/simple_animal/hostile/helldiver, "hell diver") + //====================================================================== //cat and panther /datum/genetics/mutation_recipe/combination/kitten diff --git a/code/modules/genetics/recipes/fail_recipes.dm b/code/modules/genetics/recipes/fail_recipes.dm index e0e22047bda..13edd655ab4 100644 --- a/code/modules/genetics/recipes/fail_recipes.dm +++ b/code/modules/genetics/recipes/fail_recipes.dm @@ -1,3 +1,4 @@ +//A-Z required //Small side function for defining what mutations a "failed" recipe can result in. //Made its own thing so it can be found and changed easily //Used in onRecipeFail() in code/modules/genetics/genetics.dm diff --git a/code/modules/genetics/recipes/milk_recipes.dm b/code/modules/genetics/recipes/milk_recipes.dm index f3d2ca6c22c..46f45ccf547 100644 --- a/code/modules/genetics/recipes/milk_recipes.dm +++ b/code/modules/genetics/recipes/milk_recipes.dm @@ -1,3 +1,4 @@ +//A-Z required /datum/genetics/mutation_recipe/irradiation/milk_c required_mutations = list(MUTATION_MOO) result_path = MUTATION_CHOC_MILK diff --git a/code/modules/genetics/recipes/mutation_recipe_defines.dm b/code/modules/genetics/recipes/mutation_recipe_defines.dm index dd047fa20d6..81745ea7eb8 100644 --- a/code/modules/genetics/recipes/mutation_recipe_defines.dm +++ b/code/modules/genetics/recipes/mutation_recipe_defines.dm @@ -9,8 +9,11 @@ * Values in the list have a format of: * mutation_recipe_list.[compare_string] = list(/datum/genetics/mutation_recipe/recipe_path) * +* Note that the genes are auto sorted A-Z based on name. +* Combining uses A-Z naming so make sure they are in the correct order! +* * recipe_path- The type path of a given recipe. -* compare_string- +* compare_string- * A concatinated list of mutation keys (created through list2params if there are multiple). * If the recipe is an Irradiation type, the compare_string is prepended with an 'I~' * If the recipe is an Combination type, the compare_string is prepended with an 'C~' @@ -35,7 +38,7 @@ error("initialize_mutation_recipes(): Mutation recipe [example_recipe.type] created incorrectly- unexpected recipe type.") var/ingredient_mutations = example_recipe.required_mutations - + //We sort the list so that the compare string will be uniform for any given set of ingredients. if (example_recipe.required_mutations) if(istype(ingredient_mutations, /list)) @@ -45,7 +48,7 @@ compare_string = compare_string + "G~" + "[key]" else compare_string = compare_string + "G~" + ingredient_mutations - + //Add an 'M~' as a count for each clone mutation recipe required, so we don't have to compare carelessly. if(example_recipe.required_on_clone_types) var/ingredient_mobs = example_recipe.required_on_clone_types @@ -69,11 +72,11 @@ */ /datum/genetics/mutation_recipe var/result_path = null //type path of the resulting Mutation - + var/required_mutations //String -or- list of KEYS for a given mutation. "Copy Mob" mutations should NOT be included in this list, and use required_copy_mob_types - + var/list/required_on_clone_types = null //Path -or- list of paths for comparing with incoming clone type mutations. - + var/recipe_type //Type of a given recipe, so we can differentiate between irradiation and clone type mutations. var/priority = 1 //Let's face it, we can make overlap by mistake. If two mutation recipes exist for a compare string, the valid recipe with the highest priority will win out. diff --git a/code/modules/genetics/recipes/organ_recipes.dm b/code/modules/genetics/recipes/organ_recipes.dm index 20e4628a3cf..7bbcb17b93d 100644 --- a/code/modules/genetics/recipes/organ_recipes.dm +++ b/code/modules/genetics/recipes/organ_recipes.dm @@ -1,3 +1,4 @@ +//A-Z required /datum/genetics/mutation_recipe/combination/b_heart required_mutations = list(MUTATION_HEART, MUTATION_HYPERION) result_path = MUTATION_B_HEART diff --git a/code/modules/genetics/recipes/passives.dm b/code/modules/genetics/recipes/passives.dm new file mode 100644 index 00000000000..4823903646a --- /dev/null +++ b/code/modules/genetics/recipes/passives.dm @@ -0,0 +1,20 @@ +//A-Z required +/datum/genetics/mutation_recipe/combination/punch + required_mutations = list(MUTATION_SAC, MUTATION_PROT_MILK) + result_path = MUTATION_PUNCH + +/datum/genetics/mutation_recipe/combination/mend + required_mutations = list(MUTATION_COUGHING, MUTATION_MKNEWAIFUHAIR) + result_path = MUTATION_GENE_MENDING + +/datum/genetics/mutation_recipe/combination/mend_r + required_mutations = list(MUTATION_GENE_MENDING, MUTATION_EPILEPSY) + result_path = MUTATION_GENE_MENDING_R + +/datum/genetics/mutation_recipe/combination/mend_h + required_mutations = list(MUTATION_GENE_MENDING, MUTATION_NERVOUSNESS) + result_path = MUTATION_GENE_MENDING_H + +/datum/genetics/mutation_recipe/combination/miner_sight + required_mutations = list(MUTATION_CAT_EYES, MUTATION_DWARFISM, MUTATION_UNBALANCED) + result_path = MUTATION_MINER_SIGHT \ No newline at end of file diff --git a/code/modules/genetics/recipes/sproachder_recipes.dm b/code/modules/genetics/recipes/sproachder_recipes.dm index 8486dbc5992..6084f832340 100644 --- a/code/modules/genetics/recipes/sproachder_recipes.dm +++ b/code/modules/genetics/recipes/sproachder_recipes.dm @@ -1,3 +1,4 @@ +//A-Z required /datum/genetics/mutation_recipe/combination/sproachder_friend required_mutations = list(MUTATION_ROACH_FRIEND, MUTATION_SPIDER_FRIEND) result_path = MUTATION_SPROACHDER_FRIEND \ No newline at end of file diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index c3aa651ba54..f66edc7f39c 100755 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -28,15 +28,20 @@ return var/list/usable_qualities = list(QUALITY_EXCAVATION) var/tool_type = I.get_tool_type(user, usable_qualities, src) + var/mining_eyes = 0 + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(MINING in H.mutations) + mining_eyes = 20 if(tool_type==QUALITY_EXCAVATION) to_chat(user, SPAN_NOTICE("You try to break out a rock geode or two.")) - if(I.use_tool(user, src, WORKTIME_DELAYED, tool_type, FAILCHANCE_ZERO, required_stat = STAT_ROB)) + if(I.use_tool(user, src, WORKTIME_DELAYED-mining_eyes, tool_type, FAILCHANCE_ZERO, required_stat = STAT_ROB)) new /obj/random/material_ore_small(get_turf(src)) - if(prob(50)) + if(prob(50+mining_eyes)) new /obj/random/material_ore_small(get_turf(src)) - if(prob(25)) + if(prob(25+mining_eyes)) new /obj/random/material_ore_small(get_turf(src)) - if(prob(5)) + if(prob(5+mining_eyes)) new /obj/random/material_ore_small(get_turf(src)) to_chat(user, SPAN_NOTICE("You break out some rock geode(s).")) return @@ -285,6 +290,8 @@ if(isliving(user)) var/mob/living/digger = user var/task_level = digger.learnt_tasks.get_task_mastery_level("SLAB_CLEARER") + if(MINING in user.mutations) + mineral_result += 3 if(task_level) mineral_result += task_level @@ -532,6 +539,9 @@ if(!task_level) task_level = 0 + if(MINING in user.mutations) + task_level += 3 + var/obj/item/stack/ore/newsand = new /obj/item/stack/ore/glass(src) newsand.amount = rand(3)+2 + task_level diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 54d5260ef3c..4dbf76a8429 100755 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -38,7 +38,7 @@ uniquic_armor_act //Shrapnel if(P.can_embed() && (check_absorb < 2) && !src.stats.getPerk(PERK_IRON_FLESH)) var/armor = getarmor_organ(organ, ARMOR_BULLET) - if(prob((20 + max(P.damage_types[BRUTE] - armor, -10) * P.embed_mult))) + if(prob((20 + max(P.damage_types[BRUTE] - (armor * 4), -10) * P.embed_mult))) if(!P.shrapnel_type) var/obj/item/material/shard/shrapnel/SP = new() SP.name = (P.name != "shrapnel")? "[P.name] shrapnel" : "shrapnel" @@ -566,15 +566,38 @@ uniquic_armor_act return perm - //soj edit //This atm only has 1 armor in it thus its coding is trash and snowflake +//user /mob/living/carbon/human/proc/unique_armor_check(atom/A, mob/user, EF) - //message_admins("unique_armor_check([user.name]) EF [EF]") - //Optimiation based on only 1 suit being this check, no point in asking for 99.99% of the time past this by types - if(!wear_suit) - //message_admins("No suit found") - return EF + //message_admins("unique_armor_check(A [A] user [user]) EF [EF]") + if(istype(shoes, /obj/item/clothing/shoes/crimsoncross_warp)) + //message_admins("SHOES FOUND!!!!") + var/obj/item/clothing/shoes/crimsoncross_warp/CW = shoes + CW.harm_charge += EF + if(0 0) + fear = fear / sanity.max_level + if(fear != 1) + fear += 1 + //So that sanity + //message_admins("fear1 [fear]") + fear += (fear * sanity.level / sanity.max_level) + //message_admins("fear2 [fear]") + fear += (fear * sanity.level / sanity.max_level) + //message_admins("fear3 [fear]") + //Mile stones for increase penitles for speed reduction + if(CW.harm_charge >= 1200) + fear += 3 + if(CW.harm_charge >= 800) + fear += 2 + if(CW.harm_charge >= 400) + fear += 1 + CW.harm_charge -= (CW.squeaking * 2) * fear //Higher sanity = more draw! + CW.drain = (CW.squeaking * 2) * fear //Feedback for a perk (and debugging!) + return CW.squeaking //We at this moment only have one outfit that we check and its by path for now. if(istype(wear_suit,/obj/item/clothing/suit/crimsoncross_regaloutfit)) //message_admins("Suit found") diff --git a/code/modules/mob/living/carbon/human/human_hud.dm b/code/modules/mob/living/carbon/human/human_hud.dm index f5295a5d613..eecce626aa3 100644 --- a/code/modules/mob/living/carbon/human/human_hud.dm +++ b/code/modules/mob/living/carbon/human/human_hud.dm @@ -16,6 +16,7 @@ recreate_flag = TRUE if(recreate_flag) + H.hide_HUD() H.destroy_HUD() H.create_HUD() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index bcb1a4d7e40..7d205c51935 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -12,6 +12,8 @@ tally -= chem_effects[CE_SPEEDBOOST] if(CE_SLOWDOWN in chem_effects) tally += chem_effects[CE_SLOWDOWN] + if(MOVING_QUICKLY(src)) + tally -= unique_armor_check(src, src, 0) if(isturf(loc)) var/turf/T = loc if(T.get_lumcount() < 0.6) @@ -81,7 +83,6 @@ return tally - /mob/living/carbon/human/allow_spacemove() //Can we act? if(restrained()) return 0 diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm index c938e362746..64d76bd7b82 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm @@ -177,6 +177,7 @@ melee_damage_lower = 35 melee_damage_upper = 40 poison_type = "aranecolmin" //Shockingly this is more deadly then normal as it makes metaball faster + inherent_mutations = list(MUTATION_PUNCH) /mob/living/carbon/superior_animal/giant_spider/tarantula/burrowing name = "trapdoor spider" diff --git a/code/modules/mob/living/carbon/superior_animal/sa_breath.dm b/code/modules/mob/living/carbon/superior_animal/sa_breath.dm new file mode 100644 index 00000000000..c0e72cf1654 --- /dev/null +++ b/code/modules/mob/living/carbon/superior_animal/sa_breath.dm @@ -0,0 +1,89 @@ +//SOJ's attempt to fix and optimize npcs atmos intractions +//First optimization is to stop having mobs eat air and less new gas mixtures +/mob/living/carbon/superior_animal/proc/sa_handle_breath() + var/datum/gas_mixture/environment = loc.return_air_for_internal_lifeform() + handle_breath(environment) + handle_environment(environment) //it should be pretty safe to move this out of ai inactive if this causes problems. + if(can_burrow && bad_environment) + evacuate() + +// massively reduces code to a be bare minium +/mob/living/carbon/superior_animal/handle_breath(datum/gas_mixture/environment as anything) + var/damage = 0 + if(breath_required_type) + if(environment.gas[breath_required_type] < min_breath_required_type) + damage = min_breath_required_type - environment.gas[breath_required_type] + adjustOxyLoss(damage) + + if(breath_poison_type) + if(environment.gas[breath_poison_type] > min_breath_poison_type) + damage = environment.gas[breath_poison_type] * (min_breath_poison_type + 1) + adjustOxyLoss(damage) + + if(damage) + bad_environment = TRUE + else + bad_environment = FALSE + + return + +/mob/living/carbon/superior_animal/handle_environment(datum/gas_mixture/environment as anything) + var/pressure = environment.return_pressure() + var/damage = 0 +// message_admins("pressure = [pressure] temp = [environment.temperature]") + + if(pressure < min_air_pressure) + damage = min_air_pressure - pressure + adjustBruteLoss(damage) + if(pressure > max_air_pressure) + damage = pressure - max_air_pressure + adjustBruteLoss(damage) + +// message_admins("environment.temperature [environment.temperature] < [min_bodytemperature] min_bodytemperature") + + if(environment.temperature < min_bodytemperature) + damage = min_bodytemperature - environment.temperature +// message_admins("i did cold run and delt [damage]") + + if(cold_protection) + if(cold_protection >= 1) + damage = 0 + var/cold_protected = damage * cold_protection + damage = damage - cold_protected + + adjustFireLoss(damage) + +// message_admins("environment.temperature [environment.temperature] > [max_bodytemperature] max_bodytemperature") + + + if(environment.temperature > max_bodytemperature) + damage = environment.temperature - max_bodytemperature +// message_admins("i did run hot and delt [damage]") + if(heat_protection) + if(heat_protection >= 1) + damage = 0 + var/heat_protected = damage * heat_protection + damage = damage - heat_protected + adjustFireLoss(damage) + + //Pasma in the air is bad + if(!contaminant_immunity) + if(environment.gas["plasma"] > 25) + damage = environment.gas["plasma"] * 0.1 //This can get to crazy high damage + adjustToxLoss(damage) + + + if(damage) + bad_environment = TRUE + else + bad_environment = FALSE + + return + + + + + + + + diff --git a/code/modules/mob/living/carbon/superior_animal/superior_animal.dm b/code/modules/mob/living/carbon/superior_animal/superior_animal.dm index 16a5412829e..80bcfcecfe2 100755 --- a/code/modules/mob/living/carbon/superior_animal/superior_animal.dm +++ b/code/modules/mob/living/carbon/superior_animal/superior_animal.dm @@ -176,36 +176,6 @@ return safepick(possible_locations) //return one at random -// Same as breath but with innecesarry code removed and damage tripled. Environment pressure damage moved here since we handle moles. - -/mob/living/carbon/superior_animal/handle_breath(datum/gas_mixture/breath as anything) - var/breath_pressure = (breath.total_moles*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - var/breath_required = breath_pressure > 15 && (breath_required_type || breath_poison_type) - if(!breath_required) // 15 KPA Minimum - return FALSE - adjustOxyLoss(breath.gas[breath_required_type] ? 0 : ((((breath.gas[breath_required_type] / breath.total_moles) * breath_pressure) < min_breath_required_type) ? 0 : 6)) - adjustToxLoss(breath.gas[breath_poison_type] ? 0 : ((((breath.gas[breath_poison_type] / breath.total_moles) * breath_pressure) < min_breath_poison_type) ? 0 : 6)) - -/mob/living/carbon/superior_animal/handle_environment(datum/gas_mixture/environment as anything) - var/pressure = environment.return_pressure() - var/enviro_damage = (bodytemperature < min_bodytemperature) || (pressure < min_air_pressure) || (pressure > max_air_pressure) - if(enviro_damage) // its like this to avoid extra processing further below without using goto - bodytemperature += (bodytemperature - environment.temperature) * (environment.total_moles / MOLES_CELLSTANDARD) * (bodytemperature < min_bodytemperature ? 1 - heat_protection : -1 + cold_protection) - adjustFireLoss(bodytemperature < min_bodytemperature ? 0 : 15) - adjustBruteLoss((pressure < min_air_pressure || pressure > max_air_pressure) ? 0 : 6) - bad_environment = TRUE - return FALSE - bad_environment = FALSE - if (!contaminant_immunity) - for(var/g in environment.gas) - if(gas_data.flags[g] & XGM_GAS_CONTAMINANT && environment.gas[g] > gas_data.overlay_limit[g] + 1) - pl_effects() - break - - if (overkill_dust && (getFireLoss() >= maxHealth*2)) - dust() - return FALSE - // branchless isincapacited check made for roaches. /mob/living/carbon/superior_animal/proc/cheap_incapacitation_check() // This works based off constants ,override it if you want it to be dynamic . Based off isincapacited return stunned > 0 || weakened > 0 || resting || pinned.len > 0 || stat || paralysis || sleeping || (status_flags & FAKEDEATH) || buckled() > 0 @@ -585,14 +555,10 @@ if (!AI_inactive) handle_status_effects() update_lying_buckled_and_verb_status() - if(!never_stimulate_air) - var/datum/gas_mixture/environment = loc.return_air_for_internal_lifeform() - var/datum/gas_mixture/breath = environment.remove_volume(BREATH_VOLUME) - handle_breath(breath) - handle_environment(environment) //it should be pretty safe to move this out of ai inactive if this causes problems. - if (can_burrow && bad_environment) - evacuate() - //Fire handling , not passing the whole list because thats unefficient. + if(!never_stimulate_air && stat != DEAD)//Dead things dont breath + sa_handle_breath() + //Fire handling , not passing the whole list because thats unefficient. + if(on_fire) handle_fire() // this one in particular im very unhappy about. every 3 ticks, if a superior mob is dead to something that doesnt directly apply damage, it dies. i hate this. handle_regular_status_updates() // we should probably still do this even if we're dead or something diff --git a/code/modules/mob/living/living_hud.dm b/code/modules/mob/living/living_hud.dm index c8a34bf0d01..4c5f07ba152 100644 --- a/code/modules/mob/living/living_hud.dm +++ b/code/modules/mob/living/living_hud.dm @@ -35,8 +35,23 @@ var/p = HUDtech[i] src.client.screen += HUDtech[p] hud_used?.reorganize_alerts() -//For HUD checking needs - return + +/mob/living/proc/hide_HUD() + if(client) + for(var/i = 1 to HUDneed.len) + client.screen.Remove(HUDneed[HUDneed[i]]) + + for(var/obj/screen/HUDinv in HUDinventory) + client.screen.Remove(HUDinv) + + for(var/obj/screen/HUDinv in HUDfrippery) + client.screen.Remove(HUDinv) + + for(var/obj/screen/HUDinv in HUDprocess) + client.screen.Remove(HUDinv) + + for(var/i = 1 to HUDtech.len) + client.screen.Remove(HUDtech[HUDtech[i]]) /mob/living/proc/recolor_HUD(var/_color, var/_alpha) for (var/i=1,i<=HUDneed.len,i++) diff --git a/code/modules/mob/living/simple_animal/hostile/big.dm b/code/modules/mob/living/simple_animal/hostile/big.dm index f5c53ea3266..bd984bc43a9 100644 --- a/code/modules/mob/living/simple_animal/hostile/big.dm +++ b/code/modules/mob/living/simple_animal/hostile/big.dm @@ -4,7 +4,7 @@ icon = 'icons/mob/64x64.dmi' icon_state = "snake" icon_dead = "snake-dead" - faction = "snake" + faction = "pond" maxHealth = 100 health = 100 melee_damage_lower = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 9fc3e089b55..e27201af5b5 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -66,10 +66,11 @@ var/list/mydirs = list(NORTH, SOUTH, EAST, WEST, SOUTHWEST, NORTHWEST, NORTHEAST continue else if(L in friends) continue - else if(L.target_dummy) //So we target these over normal lists + if(L.target_dummy) //So we target these over normal lists if(!SA_attackable(L)) stance = HOSTILE_STANCE_ATTACK T = L + break else if(!SA_attackable(L)) stance = HOSTILE_STANCE_ATTACK diff --git a/code/modules/modular_computers/file_system/programs/generic/records.dm b/code/modules/modular_computers/file_system/programs/generic/records.dm index b97c3bb500f..ea2e4e2e45d 100644 --- a/code/modules/modular_computers/file_system/programs/generic/records.dm +++ b/code/modules/modular_computers/file_system/programs/generic/records.dm @@ -68,6 +68,8 @@ if(!F.verify_access_edit(get_record_access(user))) to_chat(user, "\The [nano_host()] flashes an \"Access Denied\" warning.") return + if(user.ckey) + log_and_message_admins("Records Edit: Editor = \"[user.real_name]\" Ckey \"[user.ckey]\" Record holder Name: \"[R.get_name()]\"", location = user.loc) F.ask_value(user) /datum/nano_module/records/Topic(href, href_list) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 85db2ed3458..ac3d3ad132c 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -110,6 +110,9 @@ For the sake of consistency, I suggest always rounding up on even values when ap var/silenced = FALSE var/fire_sound_silenced = 'sound/weapons/Gunshot_silenced.wav' //Firing sound used when silenced + //For bayonet icon handling + var/bayonet = FALSE + var/icon_contained = TRUE var/static/list/item_icons_cache = list() var/wielded_item_state = null diff --git a/code/modules/projectiles/gun_hud_actions.dm b/code/modules/projectiles/gun_hud_actions.dm index 3e54004a5ff..b44049b83ee 100644 --- a/code/modules/projectiles/gun_hud_actions.dm +++ b/code/modules/projectiles/gun_hud_actions.dm @@ -6,6 +6,7 @@ /obj/screen/item_action/top_bar/gun/safety name = "safety" icon_state = "safety1" + ErisOptimized_minloc = "8,1.35" /obj/screen/item_action/top_bar/gun/safety/update_icon() ..() @@ -16,6 +17,7 @@ /obj/screen/item_action/top_bar/gun/fire_mode name = "fire mode" icon_state = "mode_semi" + ErisOptimized_minloc = "8,1.35" /obj/screen/item_action/top_bar/gun/fire_mode/update_icon() ..() @@ -30,6 +32,7 @@ icon_state = "scope0" screen_loc = "9,1:13" minloc = "8,2:13" + ErisOptimized_minloc = "9,1.35" /obj/screen/item_action/top_bar/gun/scope/update_icon() ..() @@ -43,6 +46,7 @@ minloc = null name = "Weapon Info" icon_state = "info" + ErisOptimized_minloc = "16.5,10.3" /obj/item/gun/ui_action_click(mob/living/user, action_name) switch(action_name) diff --git a/code/modules/projectiles/guns/energy/laser/peacekeeper.dm b/code/modules/projectiles/guns/energy/laser/peacekeeper.dm index 4ea71511631..0c641adfa18 100644 --- a/code/modules/projectiles/guns/energy/laser/peacekeeper.dm +++ b/code/modules/projectiles/guns/energy/laser/peacekeeper.dm @@ -13,15 +13,17 @@ cell_type = /obj/item/cell/medium origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) matter = list(MATERIAL_PLASTEEL = 12, MATERIAL_STEEL = 8, MATERIAL_WOOD = 10, MATERIAL_SILVER = 4) - fire_delay = 15 - init_recoil = CARBINE_RECOIL(1) + init_recoil = CARBINE_RECOIL(1.2) //More recoil than abdicator, but it fires faster so.. damage_multiplier = 1 - penetration_multiplier = 0.7 + penetration_multiplier = 1 + + proj_step_multiplier = 0.7 //Akin to abdicator, bit slower, but only because I fear if higher taser will be STRONG. Should be 30%. + price_tag = 900 gun_tags = list(GUN_LASER, GUN_ENERGY) init_firemodes = list( - list(mode_name="stunshot", projectile_type=/obj/item/projectile/energy/electrode/stunshot, fire_sound= 'sound/weapons/energy/Taser.ogg', charge_cost = 200, icon="stun"), - list(mode_name="buckshot", projectile_type=/obj/item/projectile/bullet/pellet/shotgun/energy, fire_sound='sound/weapons/guns/fire/sunrise_fire.ogg', charge_cost = 100, icon="kill"), + list(mode_name="stunshot", projectile_type=/obj/item/projectile/energy/electrode/stunshot, fire_sound= 'sound/weapons/energy/Taser.ogg', fire_delay = 10, charge_cost = 150, icon="stun"), + list(mode_name="buckshot", projectile_type=/obj/item/projectile/bullet/pellet/shotgun/energy, fire_sound='sound/weapons/guns/fire/sunrise_fire.ogg', fire_delay = 15, charge_cost = 100, icon="kill"), ) serial_type = "NM" diff --git a/code/modules/projectiles/guns/energy/pulse/glock.dm b/code/modules/projectiles/guns/energy/pulse/glock.dm index e1896385660..012783e6e95 100644 --- a/code/modules/projectiles/guns/energy/pulse/glock.dm +++ b/code/modules/projectiles/guns/energy/pulse/glock.dm @@ -3,7 +3,7 @@ desc = "The \"Galaxy\" plasma pistol is an odd sight, to say the least.. \ Its externals appear to be based into a modified \"Sky\" pistol frame with elements from the various energy weapons being crammed into its exterior. \ If you can get past its crude appearance, it appears to be a well made firearm; sporting an improved grip compared to the pistol it was based off \ - and flexibility in firemodes; sporting a plasma setting, a laser setting and an emergency ion setting! \ + and flexibility in firemodes; sporting a plasma setting, a stun-bolt setting, and an emergency ion setting! \ On the bottom of the grip appears to have a covered access port, a scipt \"M\" letter etched over the cover." icon = 'icons/obj/guns/energy/plasglock.dmi' icon_state = "plaslock" @@ -27,7 +27,7 @@ gun_tags = list(GUN_LASER, GUN_ENERGY, GUN_SIGHT) init_firemodes = list( list(mode_name="plasma bolt", mode_desc="Hard hitting plasma bolts to reduce armor", projectile_type=/obj/item/projectile/plasma, fire_sound='sound/weapons/energy/pulse.ogg', charge_cost=120, fire_delay=8, icon="destroy", projectile_color = "#00AAFF"), - list(mode_name="laser", mode_desc="Weak laser to pierce armor and skin", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/energy/laser_pistol.ogg', charge_cost=80, fire_delay=0.5, icon="kill", projectile_color = "#00AAFF"), + list(mode_name="stunshot", mode_desc="A strong bolt of electricty, capable of taking down targets with only minor long-lasting damage", projectile_type=/obj/item/projectile/energy/electrode/stunshot, fire_sound='sound/weapons/energy/Taser.ogg', charge_cost=100, fire_delay=0.5, icon="vaporize", projectile_color = "#00AAFF"), list(mode_name="ion shot", mode_desc="An iodizing shot to disable cells, electronics and cybernetics ", projectile_type=/obj/item/projectile/ion, fire_sound='sound/effects/supermatter.ogg', fire_delay=12, charge_cost=300, icon="charge", projectile_color = "#ff7f24"), ) serial_type = "NM" diff --git a/code/modules/projectiles/guns/launcher/projectile_grenade_launcher.dm b/code/modules/projectiles/guns/launcher/projectile_grenade_launcher.dm index 2fd17b6b22a..ee8f3300014 100644 --- a/code/modules/projectiles/guns/launcher/projectile_grenade_launcher.dm +++ b/code/modules/projectiles/guns/launcher/projectile_grenade_launcher.dm @@ -15,6 +15,7 @@ load_method = SINGLE_CASING origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 2) handle_casings = HOLD_CASINGS + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG) //Would be funny as shit if it took a bayonet but, no. fire_sound = 'sound/weapons/guns/fire/GLfire.ogg' bulletinsert_sound = 'sound/weapons/guns/interact/china_lake_reload.ogg' // Might not be a M203 but better than a mag sound. max_shells = 3 diff --git a/code/modules/projectiles/guns/oddity_items.dm b/code/modules/projectiles/guns/oddity_items.dm index c3cdc79d253..db717b7ccbf 100644 --- a/code/modules/projectiles/guns/oddity_items.dm +++ b/code/modules/projectiles/guns/oddity_items.dm @@ -1000,4 +1000,20 @@ price_tag = 3500 //Silk and gold //all its affects are in human_defense.dm +/obj/item/clothing/shoes/crimsoncross_warp + name = "\"Warp\" Running shoes" + desc = "An anomalous clothing created by rivals of the unknown person(or group?) of the bluecross, their work marked by a crimson cross, these items are known to vanish and reappear when left alone. \ + A pair of shoes that the more the wearer gets hurt the more charge it builds up. When running, they automatically spend charge to gain a speed boost. Walking doesn't use charge." + icon_state = "wcorp" + item_state = "wcorp" + var/harm_charge = 0 + var/squeaking = 0 + var/drain = 0 + +/obj/item/clothing/shoes/crimsoncross_warp/examine(mob/user) + ..() + if(ishuman(user)) + if(user.stats.getPerk(PERK_NO_OBFUSCATION)) + to_chat(user, SPAN_WARNING("The shoes have a charge rating of [harm_charge], last speedboost value was [squeaking]. Last charge use from running was [drain].")) + //Tools and tool mods (these are for things not intended for fighting but for actual tools) diff --git a/code/modules/projectiles/guns/projectile/automatic/ak47.dm b/code/modules/projectiles/guns/projectile/automatic/ak47.dm index 26307d46241..1c1712f8148 100644 --- a/code/modules/projectiles/guns/projectile/automatic/ak47.dm +++ b/code/modules/projectiles/guns/projectile/automatic/ak47.dm @@ -283,6 +283,9 @@ if(!ammo_magazine || !length(ammo_magazine.stored_ammo)) iconstring += "_slide" + if (bayonet) + add_overlay("bayonet") + icon_state = iconstring set_item_state(itemstring) diff --git a/code/modules/projectiles/guns/projectile/automatic/greasegun.dm b/code/modules/projectiles/guns/projectile/automatic/greasegun.dm index 25b4bc6df33..a481fbdf7cc 100644 --- a/code/modules/projectiles/guns/projectile/automatic/greasegun.dm +++ b/code/modules/projectiles/guns/projectile/automatic/greasegun.dm @@ -48,7 +48,7 @@ desc = "A Grease Gun SMG frame. Cheap? Yes, but also effective." icon_state = "frame_grease" result = /obj/item/gun/projectile/automatic/greasegun - gripvars = list(/obj/item/part/gun/grip/wood, /obj/item/part/gun/grip/black) + gripvars = list(/obj/item/part/gun/grip/black, /obj/item/part/gun/grip/wood) mechanismvar = /obj/item/part/gun/mechanism/smg barrelvars = list(/obj/item/part/gun/barrel/pistol) resultvars = list(/obj/item/gun/projectile/automatic/greasegun, /obj/item/gun/projectile/automatic/texan) diff --git a/code/modules/projectiles/guns/projectile/automatic/luger.dm b/code/modules/projectiles/guns/projectile/automatic/luger.dm index 130d19bedcd..b455fc73e52 100644 --- a/code/modules/projectiles/guns/projectile/automatic/luger.dm +++ b/code/modules/projectiles/guns/projectile/automatic/luger.dm @@ -26,6 +26,7 @@ /obj/item/gun/projectile/automatic/luger/update_icon() ..() + cut_overlays() var/iconstring = initial(icon_state) var/itemstring = "" @@ -36,6 +37,9 @@ if (!ammo_magazine || !length(ammo_magazine.stored_ammo)) iconstring += "_slide" + if (bayonet) + add_overlay("bayonet") + icon_state = iconstring set_item_state(itemstring) diff --git a/code/modules/projectiles/guns/projectile/automatic/mamba.dm b/code/modules/projectiles/guns/projectile/automatic/mamba.dm index f36a3b1aa1c..0c81c1c6d70 100644 --- a/code/modules/projectiles/guns/projectile/automatic/mamba.dm +++ b/code/modules/projectiles/guns/projectile/automatic/mamba.dm @@ -22,7 +22,7 @@ init_recoil = CARBINE_RECOIL(1) folding_stock = TRUE can_dual = FALSE //please god please please NO MORE NO MORE GOD, PLEASE - gun_tags = list(GUN_PROJECTILE, GUN_SILENCABLE, GUN_MAGWELL, GUN_SIGHT) + gun_tags = list(GUN_PROJECTILE, GUN_SILENCABLE, GUN_MAGWELL, GUN_SIGHT, GUN_KNIFE) init_firemodes = list( SEMI_AUTO_NODELAY, BURST_2_ROUND, @@ -33,7 +33,7 @@ /obj/item/gun/projectile/automatic/mamba/update_icon() ..() - + cut_overlays() var/iconstring = initial(icon_state) var/itemstring = "" @@ -53,6 +53,9 @@ iconstring += "_s" itemstring += "_s" + if (bayonet) + add_overlay("bayonet") + icon_state = iconstring set_item_state(itemstring) @@ -60,13 +63,44 @@ . = ..() update_icon() +//////////////////// +//7.62mm Viper DMR// +//////////////////// +/obj/item/gun/projectile/automatic/mamba/viper + name = "\"Viper\" marksman rifle" + desc = "The \"Viper\" designated marksman rifle appears to be a design based off the Nadezhda Marshal's \"Mamba\" carbine. \ + Chambered in 7.62 and sporting a special recoil-compensating stock, along with an improved scope, the \"Viper\" acts as a perfect intermediate rifle between that of a battle rifle and a sniper; perfect for flexibility in the field." + icon_state = "viper" + item_state = "viper" + icon = 'icons/obj/guns/projectile/viper.dmi' + fire_sound = 'sound/weapons/guns/fire/rifle.ogg' + w_class = ITEM_SIZE_HUGE + slot_flags = SLOT_BACK + caliber = CAL_RIFLE + load_method = SINGLE_CASING|MAGAZINE + mag_well = MAG_WELL_RIFLE + matter = list(MATERIAL_PLASTEEL = 15, MATERIAL_PLASTIC = 10) + gun_tags = list(GUN_PROJECTILE, GUN_SILENCABLE, GUN_MAGWELL, GUN_SIGHT) + price_tag = 1200 + damage_multiplier = 1.2 //Better damage than AS-VAL, lacks autmatic fire + penetration_multiplier = 1.2 //Same pen as AS-VAL + extra_damage_mult_scoped = 0.2 //1.4 bonus damage when scoped. ZOOM. + zoom_factors = list(0.8) + init_recoil = RIFLE_RECOIL(1) //Lower than AS-VAL + folding_stock = FALSE + init_firemodes = list( + SEMI_AUTO_NODELAY, + BURST_2_ROUND_NOLOSS, + ) + gun_parts = list(/obj/item/part/gun/frame/mamba = 1, /obj/item/part/gun/grip/rubber = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/part/gun/barrel/lrifle = 1) + ///////////////////////////////////////// //7.62mm Copperhead w/ grenade launcher// ///////////////////////////////////////// /obj/item/gun/projectile/automatic/mamba/copperhead name = "\"Copperhead\" battle rifle" desc = "The \"Copperhead\" rifle appears to be a design based off the Nadezhda Marshal's \"Mamba\" carbine. \ - Chambered in 7.62mm and sporting a carry handle the Copperhead is intended both as a squad support weapon and as a battle rifle sporting a recoil compensating stock as well as an underbarrel grenade launcher to ensure both uses." + Chambered in 7.62mm and sporting a carry handle the \"Copperhead\" is intended both as a squad support weapon and as a battle rifle sporting a recoil compensating stock as well as an underbarrel grenade launcher to ensure both uses." icon_state = "copperhead" item_state = "copperhead" icon = 'icons/obj/guns/projectile/copperhead.dmi' @@ -77,18 +111,19 @@ load_method = SINGLE_CASING|MAGAZINE mag_well = MAG_WELL_RIFLE matter = list(MATERIAL_PLASTEEL = 15, MATERIAL_PLASTIC = 10) + gun_tags = list(GUN_PROJECTILE, GUN_SILENCABLE, GUN_MAGWELL, GUN_SIGHT) price_tag = 1200 - damage_multiplier = 1.2 - penetration_multiplier = 1.1 + damage_multiplier = 1.2 //Same as AK + penetration_multiplier = 1.1 //Higher than AK zoom_factors = list(0.4) - init_recoil = CARBINE_RECOIL(1) + init_recoil = RIFLE_RECOIL(1) folding_stock = FALSE init_firemodes = list( SEMI_AUTO_NODELAY, FULL_AUTO_300, list(mode_name="fire 40mm grenade", mode_desc="Shoot the built in underbarrel grenade launcher", burst=1, fire_delay=null, move_delay=null, icon="grenade", use_launcher=1) ) - gun_parts = list(/obj/item/part/gun/frame/mamba = 1, /obj/item/part/gun/grip/rubber = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/part/gun/barrel/lrifle = 1) + gun_parts = list(/obj/item/part/gun/frame/mamba = 1, /obj/item/part/gun/grip/serb = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/part/gun/barrel/lrifle = 1) var/obj/item/gun/projectile/underslung/launcher /obj/item/gun/projectile/automatic/mamba/copperhead/Initialize() @@ -137,32 +172,35 @@ /obj/item/gun/projectile/automatic/mamba/python name = "\"Python\" heavy sniper" desc = "A fine work of the Nadezhda Marshal gunsmiths is the Python, a heavy rifle with a state of the art smart scope displaying wind speeds, built in range finding, nightvision capability and an internal stabilization system. \ - Chambered in 7.62mm for stability, the normally mediocre round punches above its weight to compete with larger 8.6x70mm rifles." + Chambered in the heavy 8.6mm for velocity and armor peircing capability, able to punch well above its weight even compared to other 8.6mm rifles. However, due to its design, it seems incapable of taking drum magazines." icon_state = "python" item_state = "python" icon = 'icons/obj/guns/projectile/python.dmi' fire_sound = 'sound/weapons/guns/fire/python.ogg' w_class = ITEM_SIZE_HUGE slot_flags = SLOT_BACK - caliber = CAL_RIFLE - mag_well = MAG_WELL_RIFLE + caliber = CAL_HRIFLE + mag_well = MAG_WELL_HRIFLE //No drum mags, for now. Smaller 14 round mags only due to how hard it slaps. matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_PLASTIC = 12) price_tag = 1400 - fire_delay = 15 - damage_multiplier = 1.2 + fire_delay = 10 //To avoid being a constant spam-click fire gun. Hits way too hard for fast fire rate. + damage_multiplier = 1.2 //~33 damage base. Same as longarm. penetration_multiplier = 1.4 - zoom_factors = list(1.2) - extra_damage_mult_scoped = 0.4 - init_recoil = CARBINE_RECOIL(1.2) + zoom_factors = list(0.6, 1.2) + extra_damage_mult_scoped = 0.4 //1.6 total; STRONG due to chambered in 8.6mm. ~42 damage base. + init_recoil = RIFLE_RECOIL(0.8) //More recoil than Longarm, because it slaps harder. see_invisible_gun = SEE_INVISIBLE_NOLIGHTING - gun_tags = list(GUN_PROJECTILE, GUN_MAGWELL, GUN_SIGHT) + gun_tags = list(GUN_PROJECTILE, GUN_SILENCABLE, GUN_MAGWELL, GUN_SIGHT) folding_stock = FALSE init_firemodes = list( - list(mode_name="semi-automatic", mode_desc = "A semi-automatic firemode.", mode_type = /datum/firemode/automatic, fire_delay=15, icon="semi" + list(mode_name="semi-automatic", mode_desc = "A semi-automatic firemode.", mode_type = /datum/firemode/automatic, fire_delay=10, icon="semi" )) wield_delay = 1.5 SECOND - wield_delay_factor = 0.4 // 40 vig to insta wield , heavy class rifle + wield_delay_factor = 0.5 // 50 vig to insta wield , heavy class sniper rifle + + //Can't be crafted rn, needs change made to ability to take gun barrel etc. So - you can break it down, but not create new ones. + gun_parts = list(/obj/item/stack/material/plasteel = 5, /obj/item/part/gun/grip/rubber = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/part/gun/barrel/hrifle = 1) /obj/item/gun/projectile/automatic/mamba/python/Initialize() . = ..() @@ -173,7 +211,7 @@ icon_state = "frame_mamba" matter = list(MATERIAL_PLASTEEL = 8) result = /obj/item/gun/projectile/automatic/mamba - gripvars = list(/obj/item/part/gun/grip/black, /obj/item/part/gun/grip/rubber) - resultvars = list(/obj/item/gun/projectile/automatic/mamba, /obj/item/gun/projectile/automatic/mamba/copperhead) + gripvars = list(/obj/item/part/gun/grip/black, /obj/item/part/gun/grip/serb, /obj/item/part/gun/grip/rubber) + resultvars = list(/obj/item/gun/projectile/automatic/mamba, /obj/item/gun/projectile/automatic/mamba/copperhead, /obj/item/gun/projectile/automatic/mamba/viper) mechanismvar = /obj/item/part/gun/mechanism/autorifle barrelvars = list(/obj/item/part/gun/barrel/srifle, /obj/item/part/gun/barrel/lrifle) diff --git a/code/modules/projectiles/guns/projectile/automatic/nordwind.dm b/code/modules/projectiles/guns/projectile/automatic/nordwind.dm index 094e2d394fb..22269b0e457 100644 --- a/code/modules/projectiles/guns/projectile/automatic/nordwind.dm +++ b/code/modules/projectiles/guns/projectile/automatic/nordwind.dm @@ -55,7 +55,7 @@ slot_flags = SLOT_BACK load_method = SINGLE_CASING|MAGAZINE mag_well = MAG_WELL_RIFLE - gun_tags = list(GUN_PROJECTILE) + gun_tags = list(GUN_PROJECTILE, GUN_MAGWELL, GUN_KNIFE) //Able to take a bayonet to stay competative. matter = list(MATERIAL_PLASTEEL = 10, MATERIAL_STEEL = 10, MATERIAL_WOOD = 10) price_tag = 700 zoom_factors = list(0.6) @@ -77,7 +77,7 @@ /obj/item/gun/projectile/automatic/nordwind/update_icon() ..() - + cut_overlays() var/iconstring = initial(icon_state) var/itemstring = "" @@ -87,6 +87,9 @@ if (!ammo_magazine || !length(ammo_magazine.stored_ammo)) iconstring += "_slide" + if (bayonet) + add_overlay("bayonet") + icon_state = iconstring set_item_state(itemstring) @@ -104,6 +107,7 @@ w_class = ITEM_SIZE_NORMAL slot_flags = SLOT_BACK|SLOT_BELT matter = list(MATERIAL_PLASTEEL = 5, MATERIAL_STEEL = 6, MATERIAL_WOOD = 5) + gun_tags = list(GUN_PROJECTILE, GUN_MAGWELL) //Boo-womp, no more bayonet. gun_parts = list(/obj/item/part/gun/grip/wood = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/stack/material/plasteel = 2) price_tag = 450 zoom_factors = list() diff --git a/code/modules/projectiles/guns/projectile/automatic/solmarine.dm b/code/modules/projectiles/guns/projectile/automatic/solmarine.dm index a9122674369..32165823f1c 100644 --- a/code/modules/projectiles/guns/projectile/automatic/solmarine.dm +++ b/code/modules/projectiles/guns/projectile/automatic/solmarine.dm @@ -94,26 +94,6 @@ shotgun_haver = FALSE -/obj/item/gun/projectile/automatic/omnirifle/solmarine/shotgunless_sawn - name = "sawn down \"Saturnian\" carbine" - desc = "An ancient design that predates mass autolathe-printed rifles found commonly in the Sol Federation's oldest military stockpiles. Reliable but heavily dated. \ - Unlike other old stocks this one was always intented to be a 6.5mm.\ - Someone butchered this thing beyond recognition! At least it fits in a holster now." - icon = 'icons/obj/guns/projectile/sawnoff/solmarine.dmi' - matter = list(MATERIAL_IRON = 10, MATERIAL_PLASTIC = 8) - init_recoil = CARBINE_RECOIL(1.2) - damage_multiplier = 0.8 - price_tag = 650 - icon_state = "solmarine" - item_state = "solmarine" - gun_parts = list(/obj/item/part/gun/grip/serb = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/stack/material/plasteel = 2) - shotgun_haver = FALSE - init_firemodes = list( - SEMI_AUTO_NODELAY, - BURST_3_ROUND - ) - - /obj/item/gun/projectile/automatic/omnirifle/solmarine/shotgunless name = "\"Saturnian\" carbine" desc = "An ancient design that predates mass autolathe-printed rifles found commonly in the Sol Federation's oldest military stockpiles. Reliable but heavily dated. \ @@ -123,6 +103,7 @@ item_state = "service" matter = list(MATERIAL_IRON = 20, MATERIAL_PLASTIC = 16) shotgun_haver = FALSE + gun_tags = list(GUN_PROJECTILE, GUN_SCOPE, GUN_MAGWELL, GUN_SILENCABLE, GUN_KNIFE) //No shotgun, so it can take a bayonet. saw_off = TRUE sawn = /obj/item/gun/projectile/automatic/omnirifle/solmarine/shotgunless_sawn serial_type = "Sol Fed" @@ -134,6 +115,7 @@ /obj/item/gun/projectile/automatic/omnirifle/solmarine/shotgunless/update_icon() ..() + cut_overlays() var/iconstring = initial(icon_state) var/itemstring = "" @@ -144,6 +126,9 @@ if (!ammo_magazine || !length(ammo_magazine.stored_ammo)) iconstring += "_slide" + if (bayonet) + add_overlay("bayonet") + icon_state = iconstring set_item_state(itemstring) @@ -151,6 +136,25 @@ . = ..() update_icon() +/obj/item/gun/projectile/automatic/omnirifle/solmarine/shotgunless_sawn + name = "sawn down \"Saturnian\" carbine" + desc = "An ancient design that predates mass autolathe-printed rifles found commonly in the Sol Federation's oldest military stockpiles. Reliable but heavily dated. \ + Unlike other old stocks this one was always intented to be a 6.5mm.\ + Someone butchered this thing beyond recognition! At least it fits in a holster now." + icon = 'icons/obj/guns/projectile/sawnoff/solmarine.dmi' + matter = list(MATERIAL_IRON = 10, MATERIAL_PLASTIC = 8) + init_recoil = CARBINE_RECOIL(1.2) + damage_multiplier = 0.8 + price_tag = 650 + icon_state = "solmarine" + item_state = "solmarine" + gun_parts = list(/obj/item/part/gun/grip/serb = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/stack/material/plasteel = 2) + shotgun_haver = FALSE + init_firemodes = list( + SEMI_AUTO_NODELAY, + BURST_3_ROUND + ) + /obj/item/part/gun/frame/solmarine name = "Solmarine frame" desc = "A Solmarine carbine frame. For those who want to be re-enactors of soldiers from 600 years ago." diff --git a/code/modules/projectiles/guns/projectile/automatic/sts.dm b/code/modules/projectiles/guns/projectile/automatic/sts.dm index 5916a435a29..64419b74836 100644 --- a/code/modules/projectiles/guns/projectile/automatic/sts.dm +++ b/code/modules/projectiles/guns/projectile/automatic/sts.dm @@ -19,7 +19,7 @@ cocked_sound = 'sound/weapons/guns/interact/ltrifle_cock.ogg' damage_multiplier = 1.2 init_recoil = RIFLE_RECOIL(1.1) - gun_tags = list(GUN_PROJECTILE, GUN_SCOPE, GUN_MAGWELL, GUN_SILENCABLE) + gun_tags = list(GUN_PROJECTILE, GUN_SCOPE, GUN_MAGWELL, GUN_SILENCABLE, GUN_KNIFE) //Can add bayonet serial_type = "SA" gun_parts = list(/obj/item/part/gun/frame/sts = 1, /obj/item/part/gun/grip/black = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/part/gun/barrel/srifle = 1) saw_off = TRUE @@ -35,7 +35,7 @@ /obj/item/gun/projectile/automatic/sts/update_icon() ..() - + cut_overlays() var/iconstring = initial(icon_state) var/itemstring = "" @@ -45,6 +45,9 @@ if (!ammo_magazine || !length(ammo_magazine.stored_ammo)) iconstring += "_slide" + if (bayonet) + add_overlay("bayonet") + icon_state = iconstring set_item_state(itemstring) @@ -138,6 +141,7 @@ fire_sound = 'sound/weapons/guns/fire/sniper_fire.ogg' cocked_sound = 'sound/weapons/guns/interact/batrifle_cock.ogg' saw_off = TRUE + gun_tags = list(GUN_PROJECTILE, GUN_SCOPE, GUN_MAGWELL, GUN_SILENCABLE) //No bayonet for you. sawn = /obj/item/gun/projectile/automatic/sts/rifle/heavy/sawn gun_parts = list(/obj/item/part/gun/frame/sts = 1, /obj/item/part/gun/grip/rubber = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/part/gun/barrel/hrifle = 1) init_firemodes = list( diff --git a/code/modules/projectiles/guns/projectile/boltgun.dm b/code/modules/projectiles/guns/projectile/boltgun.dm index 02b8ad3b69a..675e5c363b1 100644 --- a/code/modules/projectiles/guns/projectile/boltgun.dm +++ b/code/modules/projectiles/guns/projectile/boltgun.dm @@ -64,7 +64,7 @@ /obj/item/gun/projectile/boltgun/update_icon() ..() - + cut_overlays() var/iconstring = initial(icon_state) var/itemstring = "" @@ -80,6 +80,9 @@ iconstring += "_s" itemstring += "_s" + if (bayonet) //Used not for base Mosin, but any sub-types that end up able to take bayonets. + add_overlay("bayonet") + icon_state = iconstring set_item_state(itemstring) diff --git a/code/modules/projectiles/guns/projectile/boltgun/armstrong.dm b/code/modules/projectiles/guns/projectile/boltgun/armstrong.dm index 06972578149..6da23059f08 100644 --- a/code/modules/projectiles/guns/projectile/boltgun/armstrong.dm +++ b/code/modules/projectiles/guns/projectile/boltgun/armstrong.dm @@ -17,7 +17,7 @@ extra_damage_mult_scoped = 0.2 //scoping this should be rewarded its not that good matter = list(MATERIAL_STEEL = 25, MATERIAL_WOOD = 10, MATERIAL_PLASTEEL = 5) saw_off = FALSE - gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SILENCABLE) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SILENCABLE, GUN_KNIFE) //Normally, wouldn't make a lever take knives. But they need it to be competative w/ other guns. serial_type = "H&S" gun_parts = list(/obj/item/part/gun/frame/armstrong = 1, /obj/item/part/gun/grip/wood = 1, /obj/item/part/gun/mechanism/boltgun = 1, /obj/item/part/gun/barrel/magnum = 1) diff --git a/code/modules/projectiles/guns/projectile/boltgun/mares_leg.dm b/code/modules/projectiles/guns/projectile/boltgun/mares_leg.dm index 3060ce0990e..cc1a2b6d6e0 100644 --- a/code/modules/projectiles/guns/projectile/boltgun/mares_leg.dm +++ b/code/modules/projectiles/guns/projectile/boltgun/mares_leg.dm @@ -17,7 +17,7 @@ matter = list(MATERIAL_STEEL = 20, MATERIAL_WOOD = 6, MATERIAL_PLASTEEL = 7) serial_type = "INDEX" extra_bulk = -2 - gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SCOPE) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SCOPE, GUN_KNIFE) //Allows bayonet. Too far? Maybe, but still. Gives it more use. /obj/item/gun/projectile/boltgun/lever/shotgun/bounty name = "\"Bounty\" repeating shotgun" @@ -30,3 +30,4 @@ price_tag = 950 matter = list(MATERIAL_STEEL = 20, MATERIAL_PLASTIC = 6, MATERIAL_PLASTEEL = 7) serial_type = "NM" + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SCOPE) //No more bayonet for you. diff --git a/code/modules/projectiles/guns/projectile/boltgun/roe_sika.dm b/code/modules/projectiles/guns/projectile/boltgun/roe_sika.dm index 3827767f9a1..6cdbb3b81c7 100644 --- a/code/modules/projectiles/guns/projectile/boltgun/roe_sika.dm +++ b/code/modules/projectiles/guns/projectile/boltgun/roe_sika.dm @@ -14,7 +14,7 @@ sharp = FALSE caliber = CAL_LRIFLE matter = list(MATERIAL_PLASTEEL = 10, MATERIAL_WOOD = 10, MATERIAL_GLASS = 10) - gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SILENCABLE) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SILENCABLE, GUN_KNIFE) //Can take bayonet. saw_off = TRUE sawn = /obj/item/gun/projectile/boltgun/sawn/light serial_type = "Hunt Inc" @@ -30,6 +30,7 @@ load_method = SINGLE_CASING init_recoil = HMG_RECOIL(0.6) matter = list(MATERIAL_PLASTEEL = 5, MATERIAL_WOOD = 5) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_SILENCABLE) //No more bayonet. max_shells = 10 saw_off = FALSE serial_type = "Hunt Inc" diff --git a/code/modules/projectiles/guns/projectile/shotgun/combatsg.dm b/code/modules/projectiles/guns/projectile/shotgun/combatsg.dm index 3c0a6a098c1..6a2cf0c223a 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/combatsg.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/combatsg.dm @@ -15,6 +15,7 @@ damage_multiplier = 1.2 penetration_multiplier = 1 init_recoil = RIFLE_RECOIL(1.2) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG) //No bayonet due to underbarrel. saw_off = TRUE sawn = /obj/item/gun/projectile/shotgun/pump/combat/sawn serial_type = "Absolute" diff --git a/code/modules/projectiles/guns/projectile/shotgun/doublebarrel.dm b/code/modules/projectiles/guns/projectile/shotgun/doublebarrel.dm index cb5a2b0e2d6..2aacbb64a3e 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/doublebarrel.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/doublebarrel.dm @@ -15,6 +15,7 @@ slot_flags = SLOT_BACK caliber = CAL_SHOTGUN origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_KNIFE) //Tape-on bayonet sprite; doing this to replace axe shotgun which looks bad.. I regret it. ammo_type = /obj/item/ammo_casing/shotgun/beanbag bulletinsert_sound = 'sound/weapons/guns/interact/shotgun_insert.ogg' fire_sound = 'sound/weapons/guns/fire/max_sawn_off.ogg' //Actual double barrel sound @@ -53,6 +54,9 @@ if (bolt_open) iconstring += "_open" + if (bayonet) + iconstring += "_b" + icon_state = iconstring /obj/item/gun/projectile/shotgun/doublebarrel/attack_self(mob/user) //Someone overrode attackself for this class, soooo. diff --git a/code/modules/projectiles/guns/projectile/shotgun/gladstone.dm b/code/modules/projectiles/guns/projectile/shotgun/gladstone.dm index 2e7e6df23ee..10cd0c13d1e 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/gladstone.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/gladstone.dm @@ -15,6 +15,7 @@ matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_PLASTIC = 6) price_tag = 850 init_recoil = RIFLE_RECOIL(1.2) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG) //No bayonet for you. saw_off = TRUE sawn = /obj/item/gun/projectile/shotgun/pump/gladstone/sawn serial_type = "H&S" diff --git a/code/modules/projectiles/guns/projectile/shotgun/pump.dm b/code/modules/projectiles/guns/projectile/shotgun/pump.dm index 46087f21e55..cc66d25e679 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/pump.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/pump.dm @@ -12,6 +12,7 @@ caliber = CAL_SHOTGUN origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) load_method = SINGLE_CASING|SPEEDLOADER + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_KNIFE) //Unlike base shotguns, can take a bayonet. Why? Because trench shotgun funni. ammo_type = /obj/item/ammo_casing/shotgun/beanbag handle_casings = HOLD_CASINGS fire_sound = 'sound/weapons/guns/fire/shotgunp_fire.ogg' @@ -40,6 +41,17 @@ mechanismvar = /obj/item/part/gun/mechanism/shotgun barrelvars = list(/obj/item/part/gun/barrel/shotgun) +//Snowflake update-icon code for bayonets. +/obj/item/gun/projectile/shotgun/pump/update_icon() + ..() + cut_overlays() + var/iconstring = initial(icon_state) + + if (bayonet) + add_overlay("bayonet") + + icon_state = iconstring + /obj/item/gun/projectile/shotgun/pump/consume_next_projectile() if(chambered) return chambered.BB @@ -80,6 +92,7 @@ damage_multiplier = 1 penetration_multiplier = 0.9 init_recoil = RIFLE_RECOIL(1.2) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG) //No bayonet like Grizzly. saw_off = TRUE sawn = /obj/item/gun/projectile/shotgun/pump/obrez gun_parts = list(/obj/item/part/gun/grip/wood = 1, /obj/item/part/gun/mechanism/shotgun = 1, /obj/item/stack/material/plasteel = 2) @@ -102,6 +115,7 @@ penetration_multiplier = 0.8 init_recoil = RIFLE_RECOIL(1.3) saw_off = FALSE + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG) //No bayonet like Grizzly. gun_parts = list(/obj/item/stack/material/wood = 2, /obj/item/part/gun/mechanism/shotgun = 1, /obj/item/stack/material/plasteel = 2) wield_delay = 0.2 SECOND wield_delay_factor = 0.2 // 20 vig diff --git a/code/modules/projectiles/guns/projectile/shotgun/riot.dm b/code/modules/projectiles/guns/projectile/shotgun/riot.dm index 6dd923a22cf..deb852aa0eb 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/riot.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/riot.dm @@ -21,11 +21,12 @@ matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_PLASTIC = 10) price_tag = 1250 damage_multiplier = 1.2 - init_recoil = RIFLE_RECOIL(1.3) + init_recoil = RIFLE_RECOIL(1) //Less than a Siaga, but has less ammo capacity. gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG) init_firemodes = list( - list(mode_name="semiauto", mode_desc="Shoot once per pull after chambering", burst=1, fire_delay=5, move_delay=null, icon="semi") + FULL_AUTO_200_NOLOSS, //Less capacity + no external loader mags so, you get slower fire than Siaga/Pug but no damage reduction. + SEMI_AUTO_NODELAY ) serial_type = "SD GmbH" @@ -68,13 +69,17 @@ ammo_type = /obj/item/ammo_casing/shotgun matter = list(MATERIAL_PLASTEEL = 25, MATERIAL_PLASTIC = 12) price_tag = 1000 - damage_multiplier = 0.8 + damage_multiplier = 0.8 //You get the damage back by unfolding the stock. penetration_multiplier = 1 zoom_factors = list(0.2) init_recoil = RIFLE_RECOIL(1.4) folding_stock = TRUE //we can fold our stocks can_dual = FALSE + init_firemodes = list( + SEMI_AUTO_NODELAY //No full auto for you. + ) + wield_delay = 0.8 SECOND wield_delay_factor = 0.4 // 40 vig , after all its designed for CQC gun_parts = list(/obj/item/part/gun/frame/opshot = 1, /obj/item/part/gun/grip/black = 1, /obj/item/part/gun/mechanism/shotgun = 1, /obj/item/part/gun/barrel/shotgun = 1) @@ -91,6 +96,7 @@ /obj/item/gun/projectile/automatic/riot_autoshotgun/opshot/update_icon() ..() + cut_overlays() var/iconstring = initial(icon_state) var/itemstring = "" @@ -100,6 +106,8 @@ if(wielded) itemstring += "_doble" + if (bayonet) + add_overlay("bayonet") icon_state = iconstring set_item_state(itemstring) diff --git a/code/modules/projectiles/guns/projectile/shotgun/swat.dm b/code/modules/projectiles/guns/projectile/shotgun/swat.dm index 73fd50c2cad..3493bd51e8a 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/swat.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/swat.dm @@ -13,6 +13,7 @@ max_shells = 7 ammo_type = /obj/item/ammo_casing/shotgun matter = list(MATERIAL_PLASTEEL = 25, MATERIAL_PLASTIC = 12) + gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG) //No bayonet due to underbarrel. price_tag = 1500 damage_multiplier = 1.3 penetration_multiplier = 1.3 diff --git a/code/modules/reagents/machinery/chem_dispenser.dm b/code/modules/reagents/machinery/chem_dispenser.dm index 631be81f586..c2f4a6f1505 100644 --- a/code/modules/reagents/machinery/chem_dispenser.dm +++ b/code/modules/reagents/machinery/chem_dispenser.dm @@ -296,7 +296,7 @@ simple_machinery = TRUE level0 = list( "water","ice","icetea","icegreentea","cola","spacemountainwind","dr_gibb","space_up", - "tonic","sodawater","lemon_lime","sugar","orangejuice","limejuice","lemonjuice", "pineapplejuice", "berryjuice","grapesoda","watermelonjuice") + "tonic","sodawater","lemon_lime","sugar","orangejuice","limejuice","lemonjuice", "pineapplejuice", "berryjuice","grapesoda","watermelonjuice","strawberryjuice") level1 = list("capsaicin", "carbon") level2 = list("banana", "triplecitrus") diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm index 96d48fdbadc..e183e31f889 100644 --- a/code/modules/reagents/reagents/medicine.dm +++ b/code/modules/reagents/reagents/medicine.dm @@ -265,7 +265,7 @@ if(prob(5)) to_chat(M, "You feel a distinctive ache as something begins to eat away at you from the inside out!") return - M.add_chemical_effect(CE_ANTITOX, 3 * removed) + M.add_chemical_effect(CE_ANTITOX, 3 * (dose * 0.1)) //every 10u is 3 antitox, starts out slow but rapidly grows if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/internal/liver/L = H.random_organ_by_process(OP_LIVER) diff --git a/code/modules/research/designs/mecha_equipment.dm b/code/modules/research/designs/mecha_equipment.dm index 7f3f2c34617..2b9fceb6298 100644 --- a/code/modules/research/designs/mecha_equipment.dm +++ b/code/modules/research/designs/mecha_equipment.dm @@ -204,7 +204,7 @@ /datum/design/research/item/mecha/shield_droid name = "Shield droid" - desc = "Automated sheild droid, exosuits' second best companion. BEEP BOOP!" + desc = "Automated shield droid, exosuits' second best companion. BEEP BOOP!" build_path = /obj/item/mecha_parts/mecha_equipment/combat_shield /datum/design/research/item/mecha/plasma_generator diff --git a/code/modules/sprite_accessories/_accessory_hair.dm b/code/modules/sprite_accessories/_accessory_hair.dm index 91d6873c7ff..306ec458ac7 100755 --- a/code/modules/sprite_accessories/_accessory_hair.dm +++ b/code/modules/sprite_accessories/_accessory_hair.dm @@ -35,6 +35,10 @@ name = "Bald" icon_state = "bald" +/datum/sprite_accessory/hair/acolyte + name = "Acolyte" + icon_state = "acolyte" + /datum/sprite_accessory/hair/afro name = "Afro" icon_state = "afro" @@ -119,6 +123,13 @@ name = "Bobcurl" icon_state = "bobcurl" +/* Needs a bit more sprite rework + +/datum/sprite_accessory/hair/bob_long + name = "Long bob" + icon_state = "bob_long" +*/ + /datum/sprite_accessory/hair/bowl1 name = "Bowl" icon_state = "bowlcut1" @@ -159,6 +170,10 @@ name = "Business 4" icon_state = "business4" +/datum/sprite_accessory/hair/busness5 + name = "Business 5" + icon_state = "business5" + /datum/sprite_accessory/hair/bun name = "Bun" icon_state = "bun" @@ -215,6 +230,13 @@ name = "Crewcut" icon_state = "crewcut" +/* needs blackscaling + +/datum/sprite_accessory/hair/courtly + name = "Courtly" + icon_state = "courtly" +*/ + /datum/sprite_accessory/hair/crono name = "Chrono" icon_state = "toriyama" @@ -324,6 +346,14 @@ name = "Glossy" icon_state = "glossy" +/datum/sprite_accessory/hair/gloomy + name = "Gloomy" + icon_state = "hair_gloomy" + +/datum/sprite_accessory/hair/gloomylong + name = "Gloomy Long" + icon_state = "hair_gloomylong" + /datum/sprite_accessory/hair/gumshoe name = "Gumshoe" icon_state = "gumshoe" @@ -448,6 +478,10 @@ name = "Long" icon_state = "vlong" +/datum/sprite_accessory/hair/longeralt1 + name = "Long Alternative" + icon_state = "vlong_alt" + /datum/sprite_accessory/hair/longeralt2 name = "Long 2" icon_state = "longeralt2" @@ -572,6 +606,14 @@ name = "Parted" icon_state = "parted" +/datum/sprite_accessory/hair/pigtails2 + name = "Pigtails 2" + icon_state = "pigtails2" + +/datum/sprite_accessory/hair/pigtails3 + name = "Pigtails 3" + icon_state = "pigtails3" + /datum/sprite_accessory/hair/pixie name = "Pixie" icon_state = "pixie" @@ -608,6 +650,10 @@ name = "Ponytail 7" icon_state = "ponytail7" +/datum/sprite_accessory/hair/ponytail8 + name = "Ponytail 8" + icon_state = "ponytail8" + /datum/sprite_accessory/hair/poofy name = "Poofy" icon_state = "poofy" @@ -628,6 +674,10 @@ name = "Ramona" icon_state = "ramona" +/datum/sprite_accessory/hair/recruit + name = "Recruit" + icon_state = "recruit" + /datum/sprite_accessory/hair/reversemohawk name = "Reverse Mohawk" icon_state = "reversemohawk" @@ -756,6 +806,10 @@ name = "One Shoulder" icon_state = "oneshoulder" +/datum/sprite_accessory/hair/tartar + name = "Tartar" + icon_state = "tartar" + /datum/sprite_accessory/hair/thinning name = "Thinning" icon_state = "thinning" @@ -816,6 +870,10 @@ name = "Vivi" icon_state = "vivi" +/datum/sprite_accessory/hair/viking + name = "Viking" + icon_state = "viking" + /datum/sprite_accessory/hair/volaju name = "Volaju" icon_state = "volaju" diff --git a/code/modules/trade/datums/trade_stations_presets/1-common/zarya.dm b/code/modules/trade/datums/trade_stations_presets/1-common/zarya.dm index 327015d91d6..d70be5a4381 100644 --- a/code/modules/trade/datums/trade_stations_presets/1-common/zarya.dm +++ b/code/modules/trade/datums/trade_stations_presets/1-common/zarya.dm @@ -68,7 +68,7 @@ "Antiveshchestvo" = list( /obj/item/am_containment = good_data("Antimatter Fuel Jar", list(3, 5), 500), - /obj/item/am_shielding_container = good_data("Antimatter Sheilding Kit", list(3, 5), 300) + /obj/item/am_shielding_container = good_data("Antimatter Shielding Kit", list(3, 5), 300) ), "Plokhiye Idei" = list( /obj/item/am_containment = good_data("Antimatter Fuel Jar", list(3, 5), 500), diff --git a/code/modules/trade/datums/trade_stations_presets/2-uncommon/KriosanConfederacy.dm b/code/modules/trade/datums/trade_stations_presets/2-uncommon/KriosanConfederacy.dm index 0959c71d547..741a14e43d3 100644 --- a/code/modules/trade/datums/trade_stations_presets/2-uncommon/KriosanConfederacy.dm +++ b/code/modules/trade/datums/trade_stations_presets/2-uncommon/KriosanConfederacy.dm @@ -32,10 +32,10 @@ /obj/item/ammo_magazine/ammobox/shotgun ), "Pets" = list( - /mob/living/simple_animal/corgi = good_data("Noble Corgi", list(4, 5), 500), - /mob/living/simple_animal/corgi/puppy = good_data("Young Corgi", list(3, 5), 250), - /mob/living/simple_animal/lizard = good_data("Crate Pusher", list(2, 5), 100), - /mob/living/simple_animal/cat = good_data("Rat Slayer", list(4, 5), 150) + /mob/living/simple_animal/corgi = good_data("Noble Corgi", list(1, 2), 500), + /mob/living/simple_animal/corgi/puppy = good_data("Young Corgi", list(1, 2), 250), + /mob/living/simple_animal/lizard = good_data("Crate Pusher", list(1, 2), 100), + /mob/living/simple_animal/cat = good_data("Rat Slayer", list(1, 2), 150) ), "Assault Armor" = list( /obj/item/clothing/suit/space/void/assault = good_data("Assault Armor", list(3, 5), 20000) diff --git a/code/modules/trade/datums/trade_stations_presets/2-uncommon/advmoe.dm b/code/modules/trade/datums/trade_stations_presets/2-uncommon/advmoe.dm index fef6f41bdde..7d3939be940 100644 --- a/code/modules/trade/datums/trade_stations_presets/2-uncommon/advmoe.dm +++ b/code/modules/trade/datums/trade_stations_presets/2-uncommon/advmoe.dm @@ -9,7 +9,7 @@ spawn_always = TRUE markup = UNCOMMON_GOODS offer_limit = 1 - base_income = 1600 + base_income = 1200 wealth = 0 hidden_inv_threshold = 2000 recommendation_threshold = 3000 @@ -17,9 +17,9 @@ recommendations_needed = 1 inventory = list( "Scientific Surplus" = list( - /obj/item/storage/deferred/slime = custom_good_amount_range(list(1, 3)), - /obj/item/storage/deferred/xenobotany = custom_good_amount_range(list(1, 3)), - /obj/item/storage/deferred/rnd = custom_good_amount_range(list(-1, 2)), + /obj/item/storage/deferred/slime = custom_good_amount_range(list(0, 1)), + /obj/item/storage/deferred/xenobotany = custom_good_amount_range(list(2, 5)), + /obj/item/storage/deferred/rnd = custom_good_amount_range(list(-1, 1)), /obj/item/storage/part_replacer/mini, /obj/item/device/geiger ), diff --git a/code/modules/trade/datums/trade_stations_presets/2-uncommon/trash_refine.dm b/code/modules/trade/datums/trade_stations_presets/2-uncommon/trash_refine.dm index 195bc0f3238..99d6f1c31a8 100644 --- a/code/modules/trade/datums/trade_stations_presets/2-uncommon/trash_refine.dm +++ b/code/modules/trade/datums/trade_stations_presets/2-uncommon/trash_refine.dm @@ -37,22 +37,22 @@ ) hidden_inventory = list( "Premium Trash" = list( - /obj/structure/scrap = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/large = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/medical = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/medical/large = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/vehicle = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/vehicle/large = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/food = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/food/large = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/guns = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/guns/large = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/science = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/science/large = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/cloth = custom_good_amount_range(list(2,5)), // Could be a concern with the armor part offer, but it's locked behind discovery and a secret inventory. Something to watch for. - /obj/structure/scrap/cloth/large = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/poor = custom_good_amount_range(list(2,5)), - /obj/structure/scrap/poor/large = custom_good_amount_range(list(2,5)) + /obj/structure/scrap = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/large = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/medical = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/medical/large = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/vehicle = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/vehicle/large = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/food = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/food/large = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/guns = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/guns/large = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/science = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/science/large = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/cloth = custom_good_amount_range(list(1,2)), // Could be a concern with the armor part offer, but it's locked behind discovery and a secret inventory. Something to watch for. + /obj/structure/scrap/cloth/large = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/poor = custom_good_amount_range(list(1,2)), + /obj/structure/scrap/poor/large = custom_good_amount_range(list(1,2)) ) ) // TODO: offers diff --git a/code/modules/trade/datums/trade_stations_presets/3-rare/monstertrapper.dm b/code/modules/trade/datums/trade_stations_presets/3-rare/monstertrapper.dm index e21bcf08fd7..76bd6571783 100644 --- a/code/modules/trade/datums/trade_stations_presets/3-rare/monstertrapper.dm +++ b/code/modules/trade/datums/trade_stations_presets/3-rare/monstertrapper.dm @@ -11,7 +11,7 @@ spawn_always = TRUE markup = UNCOMMON_GOODS offer_limit = 5 - base_income = 3200 + base_income = 800 hidden_inv_threshold = 2000 recommendation_threshold = 3500 stations_recommended = list("illegal2") @@ -19,12 +19,12 @@ inventory = list( "Roach Cubes and Eggs" = list( /obj/item/storage/deferred/roacheggs, // make egg box - /obj/item/reagent_containers/food/snacks/cube/roach/roachling = custom_good_amount_range(list(1, 5)), - /obj/item/reagent_containers/food/snacks/cube/roach = custom_good_amount_range(list(1, 5)), - /obj/item/reagent_containers/food/snacks/cube/roach/jager = custom_good_amount_range(list(1, 5)), - /obj/item/reagent_containers/food/snacks/cube/roach/seuche = custom_good_amount_range(list(1, 5)), - /obj/item/reagent_containers/food/snacks/cube/roach/panzer = custom_good_amount_range(list(1, 5)), - /obj/item/reagent_containers/food/snacks/cube/roach/grestrahlte = custom_good_amount_range(list(1, 5)) + /obj/item/reagent_containers/food/snacks/cube/roach/roachling = custom_good_amount_range(list(1, 2)), + /obj/item/reagent_containers/food/snacks/cube/roach = custom_good_amount_range(list(1, 2)), + /obj/item/reagent_containers/food/snacks/cube/roach/jager = custom_good_amount_range(list(1, 2)), + /obj/item/reagent_containers/food/snacks/cube/roach/seuche = custom_good_amount_range(list(1, 2)), + /obj/item/reagent_containers/food/snacks/cube/roach/panzer = custom_good_amount_range(list(1, 2)), + /obj/item/reagent_containers/food/snacks/cube/roach/grestrahlte = custom_good_amount_range(list(1, 2)) ), "Roach Toxins" = list( /obj/item/reagent_containers/glass/bottle/trade/blattedin = good_data("blattedin bottle", list(-1, 2), 600), @@ -43,14 +43,14 @@ ) hidden_inventory = list( "High-End Roach Product" = list( - /obj/item/reagent_containers/food/snacks/cube/roach/kraftwerk = custom_good_amount_range(list(1, 5)), + /obj/item/reagent_containers/food/snacks/cube/roach/kraftwerk = custom_good_amount_range(list(1, 2)), /obj/item/reagent_containers/glass/bottle/trade/fuhrerole = good_data("fuhrerole bottle", list(1, 1), 900) // /obj/item/reagent_containers/glass/bottle/trade/kaiseraurum = good_data("kaiseraurum bottle", list(1, 1), 1000) Kaiseraurum doesn't exist here, you just get an empty bottle ), "Just Spiders" = list( - /mob/living/carbon/superior_animal/giant_spider = custom_good_amount_range(list(2, 3)), - /mob/living/carbon/superior_animal/giant_spider/nurse = custom_good_amount_range(list(-2, 3)), - /mob/living/carbon/superior_animal/giant_spider/hunter = custom_good_amount_range(list(1, 2)) + /mob/living/carbon/superior_animal/giant_spider = custom_good_amount_range(list(0, 1)), + /mob/living/carbon/superior_animal/giant_spider/nurse = custom_good_amount_range(list(-2, 1)), + /mob/living/carbon/superior_animal/giant_spider/hunter = custom_good_amount_range(list(0, 1)) ) ) //Types of items bought by the station diff --git a/code/modules/trade/datums/trade_stations_presets/4-unique/bluespace_tech.dm b/code/modules/trade/datums/trade_stations_presets/4-unique/bluespace_tech.dm index 706466c7ef5..1c625e49761 100644 --- a/code/modules/trade/datums/trade_stations_presets/4-unique/bluespace_tech.dm +++ b/code/modules/trade/datums/trade_stations_presets/4-unique/bluespace_tech.dm @@ -30,6 +30,6 @@ offer_types = list( /obj/item/bluespace_crystal = offer_data("bluespace crystal", 2000, 10), /obj/item/oddity/si_bluespace_scanner = offer_data("Bluespace Tuning Device", 2400, 3), // Significantly higher material cost per piece, longer production time per piece, more diverse mat req hence increase in sale price - /obj/item/reagent_containers/food/snacks/csandwich = offer_data("sandwich", 400, 1), + /obj/item/reagent_containers/food/snacks/toastedsandwich = offer_data("toasted sandwich", 400, 1), /obj/item/gun/energy/plasma/stranger = offer_data("unknown plasma gun", 5000, 1) ) diff --git a/icons/effects/perks.dmi b/icons/effects/perks.dmi index 8c87344f8ba..748fb279871 100644 Binary files a/icons/effects/perks.dmi and b/icons/effects/perks.dmi differ diff --git a/icons/inventory/feet/icon.dmi b/icons/inventory/feet/icon.dmi index 2c30c654ab7..1e903f88653 100644 Binary files a/icons/inventory/feet/icon.dmi and b/icons/inventory/feet/icon.dmi differ diff --git a/icons/inventory/feet/mob.dmi b/icons/inventory/feet/mob.dmi index 74afecde5f5..f26072798ef 100644 Binary files a/icons/inventory/feet/mob.dmi and b/icons/inventory/feet/mob.dmi differ diff --git a/icons/inventory/head/icon.dmi b/icons/inventory/head/icon.dmi index a9211f96244..a7cf3cd46f6 100644 Binary files a/icons/inventory/head/icon.dmi and b/icons/inventory/head/icon.dmi differ diff --git a/icons/inventory/head/mob.dmi b/icons/inventory/head/mob.dmi index 35cc425fe06..bc36a9b1d6a 100644 Binary files a/icons/inventory/head/mob.dmi and b/icons/inventory/head/mob.dmi differ diff --git a/icons/inventory/suit/icon.dmi b/icons/inventory/suit/icon.dmi index 6e4d2474389..a76f7bc9bc0 100644 Binary files a/icons/inventory/suit/icon.dmi and b/icons/inventory/suit/icon.dmi differ diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi index 9219d214f42..83f308ad88e 100644 Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ diff --git a/icons/inventory/suit/mob_fem.dmi b/icons/inventory/suit/mob_fem.dmi index 450451f10d2..389856b466d 100644 Binary files a/icons/inventory/suit/mob_fem.dmi and b/icons/inventory/suit/mob_fem.dmi differ diff --git a/icons/mob/ErisStyleHolo.dmi b/icons/mob/ErisStyleHolo.dmi index 10c04343f20..3ecd50daab8 100644 Binary files a/icons/mob/ErisStyleHolo.dmi and b/icons/mob/ErisStyleHolo.dmi differ diff --git a/icons/mob/hair.dmi b/icons/mob/hair.dmi index 8cab4f1e356..e9fa9c987cc 100644 Binary files a/icons/mob/hair.dmi and b/icons/mob/hair.dmi differ diff --git a/icons/mob/human_races/species/human/hair.dmi b/icons/mob/human_races/species/human/hair.dmi index 60cd343bf8e..26cdd70316d 100644 Binary files a/icons/mob/human_races/species/human/hair.dmi and b/icons/mob/human_races/species/human/hair.dmi differ diff --git a/icons/mob/screen/ErisStyleHolo.dmi b/icons/mob/screen/ErisStyleHolo.dmi index 5096cb67dc3..a9ac360d6dc 100644 Binary files a/icons/mob/screen/ErisStyleHolo.dmi and b/icons/mob/screen/ErisStyleHolo.dmi differ diff --git a/icons/obj/guns/projectile/ak_homemade.dmi b/icons/obj/guns/projectile/ak_homemade.dmi index df7b06d132f..22f16b73dad 100644 Binary files a/icons/obj/guns/projectile/ak_homemade.dmi and b/icons/obj/guns/projectile/ak_homemade.dmi differ diff --git a/icons/obj/guns/projectile/custer.dmi b/icons/obj/guns/projectile/custer.dmi index 6964ec00352..3e3ca1031f1 100644 Binary files a/icons/obj/guns/projectile/custer.dmi and b/icons/obj/guns/projectile/custer.dmi differ diff --git a/icons/obj/guns/projectile/dshotgun.dmi b/icons/obj/guns/projectile/dshotgun.dmi index cf2f71e343d..35bb0fe2566 100644 Binary files a/icons/obj/guns/projectile/dshotgun.dmi and b/icons/obj/guns/projectile/dshotgun.dmi differ diff --git a/icons/obj/guns/projectile/lever.dmi b/icons/obj/guns/projectile/lever.dmi index 9a6fca9c050..33f8764eecd 100644 Binary files a/icons/obj/guns/projectile/lever.dmi and b/icons/obj/guns/projectile/lever.dmi differ diff --git a/icons/obj/guns/projectile/lightboltgun.dmi b/icons/obj/guns/projectile/lightboltgun.dmi index 46b8319690b..df6a5f154ef 100644 Binary files a/icons/obj/guns/projectile/lightboltgun.dmi and b/icons/obj/guns/projectile/lightboltgun.dmi differ diff --git a/icons/obj/guns/projectile/lightboltgun_wood.dmi b/icons/obj/guns/projectile/lightboltgun_wood.dmi index b3988804258..0932ea1aeb3 100644 Binary files a/icons/obj/guns/projectile/lightboltgun_wood.dmi and b/icons/obj/guns/projectile/lightboltgun_wood.dmi differ diff --git a/icons/obj/guns/projectile/luger.dmi b/icons/obj/guns/projectile/luger.dmi index 2c6ae2350f0..42a14266d6a 100644 Binary files a/icons/obj/guns/projectile/luger.dmi and b/icons/obj/guns/projectile/luger.dmi differ diff --git a/icons/obj/guns/projectile/mamba.dmi b/icons/obj/guns/projectile/mamba.dmi index 1d2476200d3..aec90de75a3 100644 Binary files a/icons/obj/guns/projectile/mamba.dmi and b/icons/obj/guns/projectile/mamba.dmi differ diff --git a/icons/obj/guns/projectile/mares.dmi b/icons/obj/guns/projectile/mares.dmi index 00bc0126162..112e08b75aa 100644 Binary files a/icons/obj/guns/projectile/mares.dmi and b/icons/obj/guns/projectile/mares.dmi differ diff --git a/icons/obj/guns/projectile/martian.dmi b/icons/obj/guns/projectile/martian.dmi index 533365ccdb1..1d95663421c 100644 Binary files a/icons/obj/guns/projectile/martian.dmi and b/icons/obj/guns/projectile/martian.dmi differ diff --git a/icons/obj/guns/projectile/operator.dmi b/icons/obj/guns/projectile/operator.dmi index c2f1ff6a4ef..d824e1d5262 100644 Binary files a/icons/obj/guns/projectile/operator.dmi and b/icons/obj/guns/projectile/operator.dmi differ diff --git a/icons/obj/guns/projectile/python.dmi b/icons/obj/guns/projectile/python.dmi index bca130d5a9a..34d2826aced 100644 Binary files a/icons/obj/guns/projectile/python.dmi and b/icons/obj/guns/projectile/python.dmi differ diff --git a/icons/obj/guns/projectile/sawnoff/sawnshotgun.dmi b/icons/obj/guns/projectile/sawnoff/sawnshotgun.dmi index 89f4022a027..a24a84f409d 100644 Binary files a/icons/obj/guns/projectile/sawnoff/sawnshotgun.dmi and b/icons/obj/guns/projectile/sawnoff/sawnshotgun.dmi differ diff --git a/icons/obj/guns/projectile/sawnoff/sts25.dmi b/icons/obj/guns/projectile/sawnoff/sts25.dmi index d468bc6afda..d54bd595b91 100644 Binary files a/icons/obj/guns/projectile/sawnoff/sts25.dmi and b/icons/obj/guns/projectile/sawnoff/sts25.dmi differ diff --git a/icons/obj/guns/projectile/sawnoff/sts30.dmi b/icons/obj/guns/projectile/sawnoff/sts30.dmi index 5affee25f9f..84317e93019 100644 Binary files a/icons/obj/guns/projectile/sawnoff/sts30.dmi and b/icons/obj/guns/projectile/sawnoff/sts30.dmi differ diff --git a/icons/obj/guns/projectile/sawnoff/sts35.dmi b/icons/obj/guns/projectile/sawnoff/sts35.dmi index 97818d8d9c7..1e405e013c5 100644 Binary files a/icons/obj/guns/projectile/sawnoff/sts35.dmi and b/icons/obj/guns/projectile/sawnoff/sts35.dmi differ diff --git a/icons/obj/guns/projectile/sawnoff/sts40.dmi b/icons/obj/guns/projectile/sawnoff/sts40.dmi index f87e3b90b44..e49becd25da 100644 Binary files a/icons/obj/guns/projectile/sawnoff/sts40.dmi and b/icons/obj/guns/projectile/sawnoff/sts40.dmi differ diff --git a/icons/obj/guns/projectile/shotgun.dmi b/icons/obj/guns/projectile/shotgun.dmi index 12a21238e29..3f76ae1e1f8 100644 Binary files a/icons/obj/guns/projectile/shotgun.dmi and b/icons/obj/guns/projectile/shotgun.dmi differ diff --git a/icons/obj/guns/projectile/strelki.dmi b/icons/obj/guns/projectile/strelki.dmi index 3a7c7980611..5b97d5d1109 100644 Binary files a/icons/obj/guns/projectile/strelki.dmi and b/icons/obj/guns/projectile/strelki.dmi differ diff --git a/icons/obj/guns/projectile/sts25.dmi b/icons/obj/guns/projectile/sts25.dmi index 0da467a4869..020d2120470 100644 Binary files a/icons/obj/guns/projectile/sts25.dmi and b/icons/obj/guns/projectile/sts25.dmi differ diff --git a/icons/obj/guns/projectile/sts30.dmi b/icons/obj/guns/projectile/sts30.dmi index 7e2c17d972c..2de931c9439 100644 Binary files a/icons/obj/guns/projectile/sts30.dmi and b/icons/obj/guns/projectile/sts30.dmi differ diff --git a/icons/obj/guns/projectile/sts35.dmi b/icons/obj/guns/projectile/sts35.dmi index 104b4738b50..312c822a485 100644 Binary files a/icons/obj/guns/projectile/sts35.dmi and b/icons/obj/guns/projectile/sts35.dmi differ diff --git a/icons/obj/guns/projectile/sts40.dmi b/icons/obj/guns/projectile/sts40.dmi index 7f2a85654f2..92608f48ee6 100644 Binary files a/icons/obj/guns/projectile/sts40.dmi and b/icons/obj/guns/projectile/sts40.dmi differ diff --git a/icons/obj/guns/projectile/viper.dmi b/icons/obj/guns/projectile/viper.dmi new file mode 100644 index 00000000000..5ec3f4d1812 Binary files /dev/null and b/icons/obj/guns/projectile/viper.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index d2b6c5e6c91..f5352204df2 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/maps/Centcom/map/centcom.dmm b/maps/Centcom/map/centcom.dmm index 578dcd23bdc..0c52260e17e 100755 --- a/maps/Centcom/map/centcom.dmm +++ b/maps/Centcom/map/centcom.dmm @@ -7590,15 +7590,12 @@ /area/centcom/evac) "II" = ( /obj/structure/table/rack/shelf, -/obj/item/gun/projectile/automatic/omnirifle/scoped, -/obj/item/gun/projectile/automatic/omnirifle/scoped{ - pixel_y = 8 - }, -/obj/item/gun/projectile/automatic/omnirifle/scoped{ - pixel_y = -4 +/obj/item/gun/projectile/automatic/omnirifle/scoped/fancy{ + pixel_y = 5 }, -/obj/item/gun/projectile/automatic/omnirifle/scoped{ - pixel_y = 4 +/obj/item/gun/projectile/automatic/omnirifle/scoped/fancy, +/obj/item/gun/projectile/automatic/omnirifle/scoped/fancy{ + pixel_y = -5 }, /turf/simulated/floor/tiled/dark/techfloor_grid, /area/centcom/evac) diff --git a/maps/__DeepTunnels/deeptunnels.dm b/maps/__DeepTunnels/deeptunnels.dm index 69638af9c05..bfe6edca350 100644 --- a/maps/__DeepTunnels/deeptunnels.dm +++ b/maps/__DeepTunnels/deeptunnels.dm @@ -1,5 +1,7 @@ #include "map/_Nadezhda_Deep_Tunnels.dmm" + +//MINING Map /obj/map_data/nadezda_t name = "Nadezhda Deep Tunnels" is_player_level = TRUE @@ -10,4 +12,3 @@ height = 1 digsites = "ANY" -//MINING diff --git a/maps/__Nadezhda/map/_Nadezhda_Colony.dmm b/maps/__Nadezhda/map/_Nadezhda_Colony.dmm index 98d95283b13..75814a28120 100644 --- a/maps/__Nadezhda/map/_Nadezhda_Colony.dmm +++ b/maps/__Nadezhda/map/_Nadezhda_Colony.dmm @@ -9598,10 +9598,9 @@ /turf/simulated/floor/industrial/grey_slates_long, /area/nadezhda/maintenance/undergroundfloor1south) "bSK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flora/small/rock3, -/turf/simulated/floor/tiled/dark/golden, -/area/nadezhda/outside/inside_colony) +/obj/structure/plasticflaps, +/turf/simulated/floor/tiled/dark/techfloor, +/area/nadezhda/absolutism/bioreactor) "bSP" = ( /obj/structure/flora/small/bushb1, /obj/structure/flora/small/bushb1, @@ -18331,6 +18330,15 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "panic_room_blastshutters"; + layer = 2.6; + name = "Panic Room Lockdown"; + opacity = 0 + }, /turf/simulated/floor/tiled/steel/techfloor, /area/nadezhda/command/panic_room) "dBe" = ( @@ -26104,9 +26112,8 @@ /area/nadezhda/crew_quarters) "eXt" = ( /obj/structure/catwalk, -/obj/machinery/door/airlock/command{ - name = "Command Passageway"; - req_access = list(61) +/obj/machinery/door/airlock/maintenance_command{ + req_access = list(19) }, /turf/simulated/floor/plating/under, /area/nadezhda/security/tactical_blackshield) @@ -31702,16 +31709,15 @@ /turf/simulated/floor/wood/wild4, /area/colony) "gcm" = ( -/obj/machinery/door/airlock/command{ - name = "Command Passageway"; - req_access = list(61) - }, /obj/structure/catwalk, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/machinery/door/airlock/maintenance_command{ + req_access = list(19) + }, /turf/simulated/floor/plating/under, /area/nadezhda/command/hallway) "gcn" = ( @@ -38286,15 +38292,6 @@ }, /area/nadezhda/command/tcommsat/computer) "hoE" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "maint_hatch_telecomm"; - layer = 2.6; - name = "Blast Doors"; - opacity = 0 - }, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; @@ -38309,11 +38306,10 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ - name = "Bridge"; +/obj/structure/catwalk, +/obj/machinery/door/airlock/maintenance_command{ req_access = list(19) }, -/obj/structure/catwalk, /turf/simulated/floor/plating/under, /area/nadezhda/command/hallway) "hoH" = ( @@ -43007,6 +43003,13 @@ /obj/structure/table/reinforced, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/nadezhda/engineering/foyer) +"ifO" = ( +/obj/machinery/conveyor/east{ + id = "pile ripper belt"; + operating = 1 + }, +/turf/simulated/floor/plating/under, +/area/nadezhda/engineering/engine_waste) "ifQ" = ( /turf/simulated/floor/tiled/techmaint, /area/nadezhda/maintenance/undergroundfloor1east) @@ -44184,7 +44187,7 @@ /obj/machinery/conveyor/south{ id = "trash" }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/steel/gray_perforated, /area/nadezhda/quartermaster/hangarsupply) "irR" = ( /turf/simulated/shuttle/wall/science{ @@ -58628,7 +58631,6 @@ icon_state = "1-8" }, /obj/effect/decal/cleanable/dirt, -/obj/structure/table/rack, /turf/simulated/floor/carpet/bcarpet, /area/nadezhda/absolutism/bioreactor) "lij" = ( @@ -60973,7 +60975,7 @@ /obj/machinery/conveyor/south{ id = "trash" }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/steel/gray_perforated, /area/nadezhda/quartermaster/hangarsupply) "lHU" = ( /obj/effect/floor_decal/industrial/warningwhite/full, @@ -74280,6 +74282,9 @@ /obj/effect/floor_decal/industrial/danger, /obj/effect/decal/cleanable/blood/oil, /obj/structure/railing, +/obj/machinery/conveyor_switch{ + id = "pile ripper belt" + }, /turf/simulated/floor/tiled/dark/gray_perforated, /area/nadezhda/engineering/engine_waste) "odM" = ( @@ -80116,7 +80121,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/steel/gray_perforated, /area/nadezhda/quartermaster/hangarsupply) "pic" = ( /obj/structure/plasticflaps, @@ -80976,6 +80981,15 @@ req_access = list(19) }, /obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "panic_room_blastshutters"; + layer = 2.6; + name = "Panic Room Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating/under, /area/nadezhda/command/hallway) "pqZ" = ( @@ -89137,6 +89151,15 @@ dir = 8 }, /obj/effect/floor_decal/industrial_plant/steel_stayclear, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "panic_room_blastshutters"; + layer = 2.6; + name = "Panic Room Lockdown"; + opacity = 0 + }, /turf/simulated/floor/tiled/steel/techfloor, /area/nadezhda/command/panic_room) "qSa" = ( @@ -90614,6 +90637,15 @@ /obj/machinery/door/airlock/maintenance_common{ req_access = list(19) }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "panic_room_blastshutters"; + layer = 2.6; + name = "Panic Room Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating/under, /area/nadezhda/command/hallway) "rgZ" = ( @@ -94059,6 +94091,7 @@ /obj/machinery/shower{ dir = 8 }, +/obj/structure/curtain/open/shower, /turf/simulated/floor/tiled/white/techfloor, /area/nadezhda/security/hut_cell1) "rQd" = ( @@ -95611,6 +95644,14 @@ }, /turf/simulated/floor/tiled/dark/danger, /area/nadezhda/medical/sleeper) +"seb" = ( +/obj/structure/sink/kitchen{ + name = "utility sink"; + dir = 8; + pixel_x = 20 + }, +/turf/simulated/floor/tiled/steel, +/area/nadezhda/security/hut_cell1) "seg" = ( /obj/machinery/button/remote/blast_door{ dir = 8; @@ -100964,6 +101005,11 @@ /area/nadezhda/maintenance/undergroundfloor1north) "tgo" = ( /obj/effect/floor_decal/industrial/box/red, +/obj/machinery/recycler, +/obj/machinery/conveyor/east{ + id = "disposals grinder"; + operating = 1 + }, /turf/simulated/floor/tiled/dark/gray_platform, /area/nadezhda/engineering/engine_waste) "tgt" = ( @@ -103878,7 +103924,7 @@ output_side = 4; refuse_output_side = 2 }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/steel/gray_perforated, /area/nadezhda/quartermaster/hangarsupply) "tIG" = ( /obj/structure/flora/small/trailrockb2, @@ -105577,7 +105623,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/random/furniture/pottedplant, -/turf/simulated/floor/tiled/steel/orangecorner, +/turf/simulated/floor/tiled/white/cargo, /area/nadezhda/hallway/surface/section1) "tYt" = ( /obj/effect/floor_decal/industrial/road/warning3, @@ -105806,7 +105852,7 @@ /obj/machinery/disposal/deliveryChute{ dir = 1 }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/steel/gray_perforated, /area/nadezhda/quartermaster/hangarsupply) "uar" = ( /obj/machinery/atmospherics/unary/vent_pump{ @@ -111304,7 +111350,7 @@ /obj/machinery/conveyor/south{ id = "trash" }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/steel/gray_perforated, /area/nadezhda/quartermaster/hangarsupply) "uZT" = ( /obj/effect/decal/cleanable/dirt, @@ -111519,11 +111565,8 @@ /turf/simulated/floor/tiled/white/panels, /area/nadezhda/rnd/xenobiology) "vcf" = ( -/obj/machinery/conveyor/south{ - id = "trash" - }, /obj/structure/plasticflaps, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/steel/gray_perforated, /area/nadezhda/quartermaster/hangarsupply) "vch" = ( /turf/unsimulated/mask, @@ -116564,10 +116607,8 @@ /turf/simulated/floor/tiled/dark/gray_perforated, /area/nadezhda/security/armory) "vWS" = ( -/obj/structure/sink/kitchen{ - name = "utility sink"; - pixel_y = 28 - }, +/obj/structure/toilet, +/obj/structure/curtain/open/shower, /turf/simulated/floor/tiled/steel, /area/nadezhda/security/hut_cell1) "vWY" = ( @@ -117595,7 +117636,7 @@ /turf/simulated/wall/r_wall, /area/nadezhda/security) "whD" = ( -/obj/structure/closet/wardrobe/job/robotics_black, +/obj/structure/closet/secure_closet/personal/robo, /turf/simulated/floor/tiled/techmaint, /area/nadezhda/rnd/lab) "whE" = ( @@ -124203,9 +124244,9 @@ /area/nadezhda/command/meeting_room) "xuY" = ( /obj/structure/catwalk, -/obj/machinery/door/airlock/command{ - name = "Telecommunications"; - req_access = list(61) +/obj/machinery/door/airlock/glass_command{ + name = "Bridge"; + req_access = list(19) }, /turf/simulated/floor/plating/under, /area/nadezhda/command/hallway) @@ -143972,7 +144013,7 @@ nQC nQC cdP reC -reC +whD whD rLm rfd @@ -197739,7 +197780,7 @@ sOw sVn hgO odF -jYT +ifO mQR cXt tip @@ -200520,7 +200561,7 @@ uFd jZv sKG ebW -ebW +bSK gPC vqw tRJ @@ -225512,7 +225553,7 @@ fqh pYW djy rQb -fyd +seb lfc kpX jaI @@ -233643,7 +233684,7 @@ kvx kvx vXi svB -bSK +sOP mvt sOP rIK diff --git a/modular_sojourn/task_master/_task_master_defines.dm b/modular_sojourn/task_master/_task_master_defines.dm index 02299fbc466..da014a8664e 100644 --- a/modular_sojourn/task_master/_task_master_defines.dm +++ b/modular_sojourn/task_master/_task_master_defines.dm @@ -14,3 +14,4 @@ #define SLIP_N_DIE /datum/task_master/task/slip_n_die #define SLAB_CLEARER /datum/task_master/task/slab_clearer #define SHEATH_ARTS /datum/task_master/task/sheath_arts +#define MAP_CRAFTING /datum/task_master/task/map_crafting diff --git a/modular_sojourn/task_master/tasks.dm b/modular_sojourn/task_master/tasks.dm index 1ab9db99bd5..dd596dc7d46 100644 --- a/modular_sojourn/task_master/tasks.dm +++ b/modular_sojourn/task_master/tasks.dm @@ -224,3 +224,12 @@ //We skip over level 1 do to some check stuff with how sheaths work if(level == 1) level = 2 + +/datum/task_master/task/map_crafting + name = "Map Crafting" + key = "MAP_CRAFTING" + desc = "The way of map making is complex, but with constant work you can do a better job." + gain_text = "Little bit better than last time..." + level_thresholds = 1 //1 -> 1.5 -> 2.25 -> 3.75 ect ect + alt_scaling_number = 1.5 + unlocked = FALSE diff --git a/sojourn-station.dme b/sojourn-station.dme index 7c2b230244e..835cbb8c3d8 100644 --- a/sojourn-station.dme +++ b/sojourn-station.dme @@ -50,6 +50,7 @@ #include "code\__DEFINES\integrated_circuit.dm" #include "code\__DEFINES\inventory_sizes.dm" #include "code\__DEFINES\is_helpers.dm" +#include "code\__DEFINES\items.dm" #include "code\__DEFINES\items_clothing.dm" #include "code\__DEFINES\jobs.dm" #include "code\__DEFINES\lighting.dm" @@ -317,6 +318,7 @@ #include "code\datums\datum.dm" #include "code\datums\datum_click_handlers.dm" #include "code\datums\datum_hud.dm" +#include "code\datums\datum_hud_alt.dm" #include "code\datums\faction.dm" #include "code\datums\gps_data.dm" #include "code\datums\hierarchy.dm" @@ -1352,7 +1354,6 @@ #include "code\game\objects\items\weapons\tools\weldingtools.dm" #include "code\game\objects\items\weapons\tools\wirecutters.dm" #include "code\game\objects\items\weapons\tools\wrenches.dm" -#include "code\game\objects\items\weapons\tools\mods\_defines.dm" #include "code\game\objects\items\weapons\tools\mods\_upgrades.dm" #include "code\game\objects\items\weapons\tools\mods\armor_mods.dm" #include "code\game\objects\items\weapons\tools\mods\mod_types.dm" @@ -2037,6 +2038,7 @@ #include "code\modules\genetics\mutations\flame_retardant.dm" #include "code\modules\genetics\mutations\friend_bug.dm" #include "code\modules\genetics\mutations\friendly.dm" +#include "code\modules\genetics\mutations\gene_mending.dm" #include "code\modules\genetics\mutations\gigantism.dm" #include "code\modules\genetics\mutations\gold_roach.dm" #include "code\modules\genetics\mutations\honk.dm" @@ -2044,9 +2046,11 @@ #include "code\modules\genetics\mutations\ingredients.dm" #include "code\modules\genetics\mutations\item_makers.dm" #include "code\modules\genetics\mutations\milk.dm" +#include "code\modules\genetics\mutations\miner_sight.dm" #include "code\modules\genetics\mutations\painless.dm" #include "code\modules\genetics\mutations\phasing.dm" #include "code\modules\genetics\mutations\poison_gas.dm" +#include "code\modules\genetics\mutations\punch.dm" #include "code\modules\genetics\mutations\rad_protection.dm" #include "code\modules\genetics\mutations\rand_instability.dm" #include "code\modules\genetics\mutations\roach_blood.dm" @@ -2066,6 +2070,7 @@ #include "code\modules\genetics\recipes\milk_recipes.dm" #include "code\modules\genetics\recipes\mutation_recipe_defines.dm" #include "code\modules\genetics\recipes\organ_recipes.dm" +#include "code\modules\genetics\recipes\passives.dm" #include "code\modules\genetics\recipes\sproachder_recipes.dm" #include "code\modules\ghosttrap\trap.dm" #include "code\modules\hivemind\core.dm" @@ -2336,6 +2341,7 @@ #include "code\modules\mob\living\carbon\superior_animal\attack.dm" #include "code\modules\mob\living\carbon\superior_animal\defense.dm" #include "code\modules\mob\living\carbon\superior_animal\life.dm" +#include "code\modules\mob\living\carbon\superior_animal\sa_breath.dm" #include "code\modules\mob\living\carbon\superior_animal\superior_animal.dm" #include "code\modules\mob\living\carbon\superior_animal\superior_defines.dm" #include "code\modules\mob\living\carbon\superior_animal\ameridian\ameridian_behemoth.dm" diff --git a/sound/weapons/guns/fire/NM_PARA.ogg b/sound/weapons/guns/fire/NM_PARA.ogg index fa368603ad4..d6113a7817e 100644 Binary files a/sound/weapons/guns/fire/NM_PARA.ogg and b/sound/weapons/guns/fire/NM_PARA.ogg differ diff --git a/sound/weapons/guns/interact/vector_cock.ogg b/sound/weapons/guns/interact/vector_cock.ogg index df196b20538..cfcc7ae0f96 100644 Binary files a/sound/weapons/guns/interact/vector_cock.ogg and b/sound/weapons/guns/interact/vector_cock.ogg differ diff --git a/sound/weapons/vector_empty_alarm.ogg b/sound/weapons/vector_empty_alarm.ogg index cd552e67371..bafec980abc 100644 Binary files a/sound/weapons/vector_empty_alarm.ogg and b/sound/weapons/vector_empty_alarm.ogg differ diff --git a/tgui/yarn.lock b/tgui/yarn.lock index abe99ec80e7..07662773a1a 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -2890,13 +2890,13 @@ __metadata: linkType: hard "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 languageName: node linkType: hard