diff --git a/baystation12.dme b/baystation12.dme index 62dd738febb..9e229bc0498 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -3294,6 +3294,7 @@ #include "code\modules\trading_stations\trading_station_types\0_always_spawn\materials.dm" #include "code\modules\trading_stations\trading_station_types\0_always_spawn\medical.dm" #include "code\modules\trading_stations\trading_station_types\0_always_spawn\security.dm" +#include "code\modules\trading_stations\trading_station_types\0_always_spawn\terra.dm" #include "code\modules\trading_stations\trading_station_types\2_rare\weapons.dm" #include "code\modules\trading_stations\trading_station_types\3_very_rare\obs.dm" #include "code\modules\trusted-players\procs.dm" diff --git a/code/__defines/guns.dm b/code/__defines/guns.dm index c8f2eb0ebb8..2825cc2fd54 100644 --- a/code/__defines/guns.dm +++ b/code/__defines/guns.dm @@ -9,6 +9,10 @@ #define CALIBER_REVOLVER_MEDIUM ".357 Special" #define CALIBER_REVOLVER_HEAVY ".454 Casull" +#define CALIBER_SMG "10mmS" +#define CALIBER_SMG_SMALL "7mmS" +#define CALIBER_SMG_FLECHETTE "4mmS" + #define CALIBER_RIFLE "5mmR" #define CALIBER_RIFLE_MILITARY "7mmR" #define CALIBER_T12 "10x24mmR" diff --git a/code/__defines/supply.dm b/code/__defines/supply.dm index 378840f3aa7..c03b4a6a7fc 100644 --- a/code/__defines/supply.dm +++ b/code/__defines/supply.dm @@ -8,6 +8,7 @@ // Trade categories for the sake of standardization #define TRADE_CAT_WEAPONS "Weapons" #define TRADE_CAT_AMMO "Ammunition" +#define TRADE_CAT_ARTILLERY "Artillery" #define TRADE_CAT_ARMOR "Armor" #define TRADE_CAT_EQUIPMENT "Equipment" #define TRADE_CAT_CLOTHING "Clothing" @@ -22,6 +23,7 @@ #define TRADE_CAT_MEDICAL "Medical" #define TRADE_CAT_MEDKIT "Medical Kits" #define TRADE_CAT_CHEMICAL "Chemical" +#define TRADE_CAT_CHEMCARTS "Chemical Cartridges" // As in - faction is a part of us #define FACTION_STATE_PROTECTORATE 4 diff --git a/code/_global_vars/sound.dm b/code/_global_vars/sound.dm index eed5570cadf..97b8eb7c8be 100644 --- a/code/_global_vars/sound.dm +++ b/code/_global_vars/sound.dm @@ -131,3 +131,8 @@ GLOBAL_LIST_INIT(t12_sound,\ 'sound/weapons/gunshot/autorifle-1.ogg',\ 'sound/weapons/gunshot/autorifle-2.ogg',\ 'sound/weapons/gunshot/autorifle-3.ogg')) + +GLOBAL_LIST_INIT(mp38_sound,\ + list(\ + 'sound/weapons/gunshot/mp38_1.ogg', + 'sound/weapons/gunshot/mp38_2.ogg')) diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index df361b097d1..b1e19dddd27 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -45,16 +45,22 @@ SUBSYSTEM_DEF(supply) for(var/tf in factions) var/datum/trade_faction/TF = factions[tf] for(var/tf2 in factions) - var/datum/trade_faction/TF2 = factions[tf] + var/datum/trade_faction/TF2 = factions[tf2] if(TF == TF2) // Technically not, but this will be how we declare same faction relations for now TF.relationship[TF2.name] = FACTION_STATE_PROTECTORATE continue - if(!(TF2.name in TF.relationship)) - TF.relationship[TF2] = FACTION_STATE_NEUTRAL // This ensures that relations are always mirrored between two datums SetFactionRelations(TF, TF2, TF.relationship[TF2]) + // Now we set it to neutral for the missing ones + for(var/tf in factions) + var/datum/trade_faction/TF = factions[tf] + for(var/tf2 in factions) + var/datum/trade_faction/TF2 = factions[tf2] + if(!(TF2.name in TF.relationship)) + SetFactionRelations(TF, TF2, FACTION_STATE_NEUTRAL) + InitTradeStations() /datum/controller/subsystem/supply/Destroy() @@ -194,15 +200,7 @@ SUBSYSTEM_DEF(supply) if(!seller_faction) return - switch(seller_faction.relationship[buyer_faction.name]) - if(FACTION_STATE_ANIMOSITY) - . *= 1.25 - if(FACTION_STATE_RIVAL) - . *= 1.5 - if(FACTION_STATE_ENEMY) - . *= 2.0 - if(FACTION_STATE_WAR) // Normally that'd be an embargo, but some outlaw traders exist - . *= 3.0 + . *= station.GetFactionMarkup(buyer_faction) if(buyer_faction.name in seller_faction.trade_markup) . *= seller_faction.trade_markup[buyer_faction.name] @@ -385,7 +383,10 @@ SUBSYSTEM_DEF(supply) qdel(item) ++export_count else if(item != AM) - item.forceMove(get_turf(AM)) // Should be the same tile + if(!isobj(item) || !ismob(item)) + qdel(item) + else + item.forceMove(get_turf(AM)) // Should be the same tile // The max is a soft cap if(export_count > 100) diff --git a/code/game/machinery/trade_beacon.dm b/code/game/machinery/trade_beacon.dm index b5460e090d6..3f753131095 100644 --- a/code/game/machinery/trade_beacon.dm +++ b/code/game/machinery/trade_beacon.dm @@ -3,6 +3,19 @@ icon_state = "beacon" anchored = TRUE density = TRUE + var/beacon_range = 2 + +/obj/machinery/trade_beacon/attackby(obj/item/W, mob/user) + if(isMultitool(W)) + beacon_range = beacon_range >= 2 ? 1 : 2 + anchored = !anchored + user.visible_message( + SPAN_NOTICE("\The [user] pulses some circuitry within [src]."), + SPAN_NOTICE("You set [src]'s effective range to [beacon_range].") + ) + playsound(src.loc, "sound/effects/pop.ogg", 50) + return + return ..() /obj/machinery/trade_beacon/proc/Activate() flick("[icon_state]_active", src) @@ -32,7 +45,7 @@ /obj/machinery/trade_beacon/sending/proc/GetObjects() var/list/objects = list() - for(var/atom/movable/A in range(2, src)) + for(var/atom/movable/A in range(beacon_range, src)) if(A.anchored) continue if(A == src) @@ -65,7 +78,7 @@ /obj/machinery/trade_beacon/receiving/proc/DropItem(drop_type) var/list/valid_turfs = list() - for(var/turf/simulated/floor/F in range(2, src)) + for(var/turf/simulated/floor/F in range(beacon_range, src)) if(F.contains_dense_objects(TRUE)) continue valid_turfs += F diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 3ba57e73345..7038cd2e7cd 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -226,7 +226,11 @@ /obj/item/storage/box/ammo/sniperammo/apds name = "box of sniper APDS shells" - startswith = list(/obj/item/ammo_casing/shell/apds = 3) + startswith = list(/obj/item/ammo_casing/shell/apds = 7) + +/obj/item/storage/box/ammo/sniperammo/explosive + name = "box of sniper explosive shells" + startswith = list(/obj/item/ammo_casing/shell/explosive = 7) /obj/item/storage/box/flashbangs name = "box of flashbangs" diff --git a/code/game/sound.dm b/code/game/sound.dm index 6975eaf07ed..bbd54881dce 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -162,6 +162,7 @@ var/const/FALLOFF_SOUNDS = 0.5 if ("glasscrack") soundin = pick(GLOB.glasscrack_sound) if ("tray_hit") soundin = pick(GLOB.tray_hit_sound) if ("gun_t12") soundin = pick(GLOB.t12_sound) + if ("gun_mp38") soundin = pick(GLOB.mp38_sound) return soundin /client/verb/stop_sounds() diff --git a/code/modules/fabrication/designs/general/designs_arms_ammo.dm b/code/modules/fabrication/designs/general/designs_arms_ammo.dm index a246033c288..397bd99b04f 100644 --- a/code/modules/fabrication/designs/general/designs_arms_ammo.dm +++ b/code/modules/fabrication/designs/general/designs_arms_ammo.dm @@ -25,10 +25,6 @@ name = "ammunition (shotgun, flash)" path = /obj/item/ammo_casing/shotgun/flash -/datum/fabricator_recipe/arms_ammo/hidden/magazine_smg_rubber - name = "ammunition (SMG rubber) top mounted" - path = /obj/item/ammo_magazine/smg_top/rubber - /datum/fabricator_recipe/arms_ammo/hidden/flamethrower path = /obj/item/flamethrower/full @@ -72,6 +68,10 @@ name = "ammunition (submachine gun)" path = /obj/item/ammo_magazine/smg +/datum/fabricator_recipe/arms_ammo/hidden/magazine_smg_rubber + name = "ammunition (SMG rubber) top mounted" + path = /obj/item/ammo_magazine/smg_top/rubber + /datum/fabricator_recipe/arms_ammo/hidden/magazine_uzi name = "ammunition (machine pistol)" path = /obj/item/ammo_magazine/machine_pistol diff --git a/code/modules/item_worth/value_procs.dm b/code/modules/item_worth/value_procs.dm index 7250a9ec782..d4e9ab6c22e 100644 --- a/code/modules/item_worth/value_procs.dm +++ b/code/modules/item_worth/value_procs.dm @@ -22,9 +22,15 @@ return base * Uses /obj/item/ammo_casing/Value(base) + . = ..() if(!BB) - return 1 - return ..() + return + + for(var/mat in matter) + var/material/material_def = SSmaterials.get_material_by_name(mat) + . += material_def.value * (matter[mat] / SHEET_MATERIAL_AMOUNT) + + . = round(., 0.5) /obj/item/reagent_containers/Value(base) . = ..() @@ -66,3 +72,16 @@ if(!key) // Mindless humans cost less . *= 0.2 . = round(.) + +/obj/structure/ship_munition/disperser_charge/explosive/Value(base) + . = ..() + . += devastation_modifier * 10000 + +/obj/structure/ship_munition/disperser_charge/orbital_bombardment/Value(base) + . = ..() + . += bomb_number * (devastation_modifier * 2000) + +/obj/item/organ/Value(base) + . = ..() + if(damage) + . -= round(. * (damage / max_damage)) diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index ed36fff2d1b..1e849176b88 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -17,24 +17,29 @@ var/list/worths = list( /obj/item/reagent_containers/glass/rag = -5, /obj/item/reagent_containers/glass = -60, /obj/item/reagent_containers = -1, +//OFD CHARGES, + /obj/structure/ship_munition/disperser_charge/orbital_bombardment = -5000, + /obj/structure/ship_munition/disperser_charge/explosive = -2500, + /obj/structure/ship_munition/disperser_charge = 2500, //GUNS, /obj/item/gun/energy/laser/practice = 500, /obj/item/gun/energy/laser/dogan = 1900, + /obj/item/gun/energy/laser/assault = 5500, /obj/item/gun/energy/laser = 3000, /obj/item/gun/energy/retro = 1400, - /obj/item/gun/energy/captain = 2500, - /obj/item/gun/energy/lasercannon = 4100, - /obj/item/gun/energy/xray = 2900, - /obj/item/gun/energy/sniperrifle = 5400, - /obj/item/gun/energy/lasertag = 10, - /obj/item/gun/energy/gun/nuclear = 2800, - /obj/item/gun/energy/pulse_rifle/destroyer = 6500, - /obj/item/gun/energy/pulse_rifle = 4200, - /obj/item/gun/energy/taser = 500, - /obj/item/gun/energy/crossbow/largecrossbow = 1600, - /obj/item/gun/energy/crossbow = 750, - /obj/item/gun/energy/temperature = 3000, - /obj/item/gun/energy = 2100, + /obj/item/gun/energy/captain = 12500, + /obj/item/gun/energy/lasercannon = 7500, + /obj/item/gun/energy/xray = 9000, + /obj/item/gun/energy/sniperrifle = 14000, + /obj/item/gun/energy/lasertag = 500, + /obj/item/gun/energy/gun/nuclear = 6000, + /obj/item/gun/energy/pulse_rifle/destroyer = 12000, + /obj/item/gun/energy/pulse_rifle = 8000, + /obj/item/gun/energy/taser = 1200, + /obj/item/gun/energy/crossbow/largecrossbow = 8600, + /obj/item/gun/energy/crossbow = 5750, + /obj/item/gun/energy/temperature = 4000, + /obj/item/gun/energy = 2000, //LAUNCHERS, /obj/item/gun/launcher/crossbow = 120, /obj/item/gun/launcher/pneumatic/small = 100, @@ -43,12 +48,12 @@ var/list/worths = list( /obj/item/gun/launcher/alien = 3500, /obj/item/gun/launcher = 300, //AUTOMATICS, - /obj/item/gun/projectile/automatic/t12 = 4200, - /obj/item/gun/projectile/automatic/t18 = 3200, + /obj/item/gun/projectile/automatic/t12 = 5200, + /obj/item/gun/projectile/automatic/t18 = 4200, /obj/item/gun/projectile/automatic/ak47 = 2100, - /obj/item/gun/projectile/automatic/merc_smg = 3250, - /obj/item/gun/projectile/automatic/assault_rifle = 3800, - /obj/item/gun/projectile/automatic/bullpup_rifle = 3100, + /obj/item/gun/projectile/automatic/merc_smg = 3850, + /obj/item/gun/projectile/automatic/assault_rifle = 5600, + /obj/item/gun/projectile/automatic/bullpup_rifle = 4800, /obj/item/gun/projectile/automatic/battlerifle = 1750, /obj/item/gun/projectile/automatic/semistrip = 1250, /obj/item/gun/projectile/automatic/l6_saw = 13400, @@ -61,8 +66,16 @@ var/list/worths = list( /obj/item/gun/projectile/pistol/gyropistol = 5500, /obj/item/gun/projectile/heavysniper/ant = 1800, /obj/item/gun/projectile/heavysniper/boltaction = 500, - /obj/item/gun/projectile/heavysniper = 12000, + /obj/item/gun/projectile/heavysniper = 26000, + /obj/item/gun/projectile/rocket_launcher = 10000, /obj/item/gun/projectile = 1500, +//MAGNETIC, + /obj/item/gun/magnetic/railgun/automatic/dominion = 480000, + /obj/item/gun/magnetic/railgun/automatic = 90000, + /obj/item/gun/magnetic/railgun/tcc = 16000, + /obj/item/gun/magnetic/railgun/flechette = 21000, + /obj/item/gun/magnetic/railgun = 29000, + /obj/item/gun/magnetic = 8000, //GUN, /obj/item/gun = 500, //MATERIAL STACKS, @@ -249,21 +262,25 @@ var/list/worths = list( /obj/item/defibrillator = 700, /obj/item/auto_cpr = 500, //WELDINGTOOLS, - /obj/item/weldingtool/largetank = 150, - /obj/item/weldingtool/hugetank = 300, - /obj/item/weldingtool/experimental = 600, - /obj/item/weldingtool = 100, + /obj/item/weldingtool = 50, + /obj/item/welder_tank/mini = 50, + /obj/item/welder_tank/large = 150, + /obj/item/welder_tank/huge = 250, + /obj/item/welder_tank/experimental = 500, + /obj/item/welder_tank = 100, /obj/item/crowbar = 10, /obj/item/beartrap = 35, /obj/item/nullrod = 60, /obj/item/weldpack = 300, - /obj/item/stock_parts/circuitboard/aicore = 6000, - /obj/item/stock_parts/circuitboard = 1000, + /obj/item/stock_parts/circuitboard/aicore = 1000, + /obj/item/stock_parts/circuitboard = 200, //GRENADES, /obj/item/grenade/fake = 50, /obj/item/grenade/anti_photon = 200, /obj/item/grenade/empgrenade = 180, + /obj/item/grenade/frag/high_yield = 600, /obj/item/grenade/frag = 300, + /obj/item/grenade/supermatter = 2500, /obj/item/grenade/spawnergrenade/viscerator = 600, /obj/item/grenade/spawnergrenade/spesscarp = 350, /obj/item/grenade/spawnergrenade = 300, @@ -272,17 +289,17 @@ var/list/worths = list( /obj/item/implanter = 80, //MELEE, /obj/item/melee/cultblade = 500, - /obj/item/melee/energy/axe = 3400, - /obj/item/melee/energy = 2000, + /obj/item/melee/energy/axe = 5000, + /obj/item/melee/energy = 2500, /obj/item/melee/whip = 200, /obj/item/melee/whip/abyssal = 1025, /obj/item/melee/baton/cattleprod = 30, /obj/item/melee/baton = 80, - /obj/item/melee/classic_baton = 30, - /obj/item/melee/telebaton = 90, + /obj/item/melee/classic_baton = 40, + /obj/item/melee/telebaton = 100, /obj/item/excalibur = 5000, - /obj/item/tank/jetpack = 390, - /obj/item/tank = 40, + /obj/item/tank/jetpack = 450, + /obj/item/tank = 50, /obj/item/contraband/poster = 25, //MATERIAL, /obj/item/material/sword/katana/replica = -120, @@ -510,26 +527,41 @@ var/list/worths = list( /obj/item/device/eftpos = 30, /obj/item/device = 90, //ORGANS, - /obj/item/organ/internal/heart = 1200, - /obj/item/organ/internal/brain = 1200, - /obj/item/organ = 400, + /obj/item/organ/internal/brain/adherent = -10000, + /obj/item/organ/internal/powered = -2000, + /obj/item/organ/internal/larva_producer = -14000, + /obj/item/organ/internal/heart/abomination = -9000, + /obj/item/organ/internal/posibrain = -2000, + /obj/item/organ/internal/voicebox = -1200, + /obj/item/organ/internal/eyes/insectoid = -1800, + /obj/item/organ/internal/phoron = -2200, + /obj/item/organ/internal/acetone = -1900, + /obj/item/organ/internal/lungs/insectoid = -1200, + /obj/item/organ/internal/brain/starlight = -19000, + /obj/item/organ/internal/stomach/vox = -4900, + /obj/item/organ/internal/voxstack = -28000, + /obj/item/organ/internal/heart = -2400, + /obj/item/organ/internal/brain = -14000, + /obj/item/organ/internal = -900, + /obj/item/organ = 100, //ITEMS, - /obj/item/slime_extract = 200, + /obj/item/slime_extract = 2500, /obj/item/robot_parts/robot_component = 250, /obj/item/robot_parts = 30, - /obj/item/modular_computer/tablet = 1300, - /obj/item/modular_computer = 4000, - /obj/item/solar_assembly = 680, + /obj/item/modular_computer/tablet = 600, + /obj/item/modular_computer = 1000, + /obj/item/solar_assembly = 220, /obj/item/ammo_magazine = -30, - /obj/item/ammo_casing = 5, + /obj/item/ammo_casing = -5, /obj/item/construct/conveyor = 100, /obj/item/construct/conveyor_switch = 30, /obj/item/supply_beacon = 5000, /obj/item/frame = 60, /obj/item/pipe = 100, /obj/item/machine_chassis/pipe_meter = 300, - /obj/item/blueprints = 4000, //Information is valuable, - /obj/item/bodybag/cryobag = 2000, + /obj/item/blueprints = 12000, //Information is valuable, + /obj/item/bodybag/cryobag = 800, + /obj/item/bodybag/rescue = 200, /obj/item/bodybag = 20, /obj/item/glass_jar = 10, /obj/item/target = 15, @@ -627,12 +659,12 @@ var/list/worths = list( /mob/living = 100, //MACHINERY, /obj/machinery/mining/brace = -300, - /obj/machinery/auto_cloner = -15000, - /obj/machinery/giga_drill = -5000, - /obj/machinery/artifact = -15000, + /obj/machinery/auto_cloner = -25000, + /obj/machinery/giga_drill = -9000, + /obj/machinery/artifact = -18000, /obj/machinery/power/supermatter/shard = 60000, /obj/machinery/power/supermatter = 200000, /obj/machinery/atmospherics/pipe = 0, - /obj/machinery/the_singularitygen = -25000, + /obj/machinery/the_singularitygen = 25000, /obj/machinery = -50, ) //Must be in descending order. Child before parents, otherwise it doesn't work., diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index dd282bca885..19b1abd6153 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -78,7 +78,7 @@ icon_state = "syndicateranged" icon_living = "syndicateranged" casingtype = /obj/item/ammo_casing/pistol - projectilesound = 'sound/weapons/gunshot/smg.ogg' + projectilesound = 'sound/weapons/gunshot/mp5.ogg' projectiletype = /obj/item/projectile/bullet/pistol loot_list = list( /obj/item/gun/projectile/automatic/merc_smg = 1, diff --git a/code/modules/modular_computers/file_system/programs/generic/supply.dm b/code/modules/modular_computers/file_system/programs/generic/supply.dm index ba5c1e2cc2e..34d88409246 100644 --- a/code/modules/modular_computers/file_system/programs/generic/supply.dm +++ b/code/modules/modular_computers/file_system/programs/generic/supply.dm @@ -65,6 +65,9 @@ /datum/computer_file/program/supply/OnStoreFile(obj/item/stock_parts/computer/hard_drive/HD) . = ..() + SSticker.OnRoundstart(CALLBACK(src, .proc/OnRoundStart, HD)) + +/datum/computer_file/program/supply/proc/OnRoundStart(obj/item/stock_parts/computer/hard_drive/HD) if(!istype(HD)) return diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 5645446efe7..a3808cbed19 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -8,6 +8,7 @@ slot_flags = SLOT_BELT | SLOT_EARS throwforce = 1 w_class = ITEM_SIZE_TINY + matter = list(MATERIAL_STEEL = 100) var/leaves_residue = TRUE var/caliber = "" //Which kind of guns it can be loaded into @@ -29,6 +30,8 @@ . = BB BB = null set_dir(pick(GLOB.alldirs)) //spin spent casings + for(var/mat in matter) + matter[mat] = round(matter[mat] * 0.2) // Aurora forensics port, gunpowder residue. if(leaves_residue) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index ade08d97cc6..daba6ffe5d7 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -118,12 +118,16 @@ name = "stick magazine" icon_state = "machine_pistol" mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/pistol + ammo_type = /obj/item/ammo_casing/smg matter = list(MATERIAL_STEEL = 1200) - caliber = CALIBER_PISTOL + caliber = CALIBER_SMG max_ammo = 16 multiple_sprites = 1 +/obj/item/ammo_magazine/machine_pistol/rubber + labels = list("rubber") + ammo_type = /obj/item/projectile/bullet/smg/rubber + /obj/item/ammo_magazine/machine_pistol/empty initial_ammo = 0 @@ -131,9 +135,9 @@ name = "top mounted magazine" icon_state = "smg_top" mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/pistol/small + ammo_type = /obj/item/projectile/bullet/smg/small matter = list(MATERIAL_STEEL = 1200) - caliber = CALIBER_PISTOL_SMALL + caliber = CALIBER_SMG_SMALL max_ammo = 20 multiple_sprites = 1 @@ -142,26 +146,45 @@ /obj/item/ammo_magazine/smg_top/rubber labels = list("rubber") - ammo_type = /obj/item/ammo_casing/pistol/small/rubber + ammo_type = /obj/item/ammo_casing/smg/small/rubber /obj/item/ammo_magazine/smg_top/practice labels = list("practice") - ammo_type = /obj/item/ammo_casing/pistol/small/practice + ammo_type = /obj/item/ammo_casing/smg/small/practice /obj/item/ammo_magazine/smg - name = "box magazine" + name = "smg magazine" icon_state = "smg" origin_tech = list(TECH_COMBAT = 2) mag_type = MAGAZINE - caliber = CALIBER_PISTOL + caliber = CALIBER_SMG matter = list(MATERIAL_STEEL = 1500) - ammo_type = /obj/item/ammo_casing/pistol + ammo_type = /obj/item/ammo_casing/smg max_ammo = 20 multiple_sprites = 1 /obj/item/ammo_magazine/smg/empty initial_ammo = 0 +/obj/item/ammo_magazine/smg/flame + name = "submachine gun magazine (incendiary)" + ammo_type = /obj/item/ammo_casing/smg/flame + +/obj/item/ammo_magazine/proto_smg + name = "submachine gun magazine" + icon_state = CALIBER_SMG_FLECHETTE + origin_tech = list(TECH_COMBAT = 4) + mag_type = MAGAZINE + caliber = CALIBER_SMG_FLECHETTE + matter = list(MATERIAL_STEEL = 2000) + ammo_type = /obj/item/ammo_casing/smg/flechette + max_ammo = 40 + multiple_sprites = 1 + +/obj/item/ammo_magazine/proto_smg/hp + name = "submachine gun magazine (HP)" + ammo_type = /obj/item/ammo_casing/smg/flechette/hp + /obj/item/ammo_magazine/pistol name = "pistol magazine" icon_state = "pistol_mag" @@ -272,20 +295,19 @@ caliber = CALIBER_PISTOL_SMALL max_ammo = 8 -/obj/item/ammo_magazine/proto_smg - name = "submachine gun magazine" - icon_state = CALIBER_PISTOL_FLECHETTE - origin_tech = list(TECH_COMBAT = 4) - mag_type = MAGAZINE - caliber = CALIBER_PISTOL_FLECHETTE - matter = list(MATERIAL_STEEL = 2000) - ammo_type = /obj/item/ammo_casing/flechette - max_ammo = 40 - multiple_sprites = 1 +// SMG boxes +/obj/item/ammo_magazine/box/smg + name = "ammunition box" + icon_state = "smallpistol" + origin_tech = list(TECH_COMBAT = 2) + caliber = CALIBER_SMG + matter = list(MATERIAL_STEEL = 4500) + ammo_type = /obj/item/ammo_casing/smg + max_ammo = 60 -/obj/item/ammo_magazine/proto_smg/hp - name = "submachine gun magazine (HP)" - ammo_type = /obj/item/ammo_casing/flechette/hp +/obj/item/ammo_magazine/box/smg/small + caliber = CALIBER_SMG_SMALL + ammo_type = /obj/item/ammo_casing/smg/small /obj/item/ammo_magazine/gyrojet name = "microrocket magazine" diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 878baa29d02..57b74e7f9d5 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -1,3 +1,4 @@ +// Pistol /obj/item/ammo_casing/pistol desc = "A pistol bullet casing." caliber = CALIBER_PISTOL @@ -48,6 +49,7 @@ desc = "An antique pistol bullet casing. Somewhere between 9 and 11 mm in caliber." caliber = CALIBER_PISTOL_ANTIQUE +// Revolver /obj/item/ammo_casing/revolver desc = "A revolver bullet casing." icon_state = "magnumcasing" @@ -74,6 +76,51 @@ caliber = CALIBER_REVOLVER_HEAVY projectile_type = /obj/item/projectile/bullet/revolver/heavy +// SMG +/obj/item/ammo_casing/smg + desc = "An SMG bullet casing." + caliber = CALIBER_SMG + projectile_type = /obj/item/projectile/bullet/smg + icon_state = "pistolcasing" + spent_icon = "pistolcasing-spent" + +/obj/item/ammo_casing/smg/rubber + desc = "A rubber SMG bullet casing." + projectile_type = /obj/item/projectile/bullet/smg/rubber + icon_state = "pistolcasing_r" + +/obj/item/ammo_casing/smg/flame + desc = "An incendiary SMG bullet casing." + projectile_type = /obj/item/projectile/bullet/smg/flame + icon_state = "pistolcasing_fi" + +/obj/item/ammo_casing/smg/small + desc = "A small SMG bullet casing." + caliber = CALIBER_SMG_SMALL + projectile_type = /obj/item/projectile/bullet/smg/small + +/obj/item/ammo_casing/smg/small/rubber + desc = "A small rubber SMG bullet casing." + projectile_type = /obj/item/projectile/bullet/smg/small/rubber + icon_state = "pistolcasing_r" + +/obj/item/ammo_casing/smg/small/practice + desc = "A small practice SMG bullet casing." + projectile_type = /obj/item/projectile/bullet/smg/small/practice + icon_state = "pistolcasing_p" + +/obj/item/ammo_casing/smg/flechette + desc = "An SMG flechette casing." + caliber = CALIBER_SMG_FLECHETTE + projectile_type = /obj/item/projectile/bullet/smg/flechette + icon_state = "flechette-casing" + spent_icon = "flechette-casing-spent" + +/obj/item/ammo_casing/smg/flechette/hp + desc = "An SMG flechette (HP) casing." + projectile_type = /obj/item/projectile/bullet/smg/flechette/hp + +// Special /obj/item/ammo_casing/gyrojet desc = "A minirocket casing." caliber = CALIBER_GYROJET @@ -81,16 +128,7 @@ icon_state = "lcasing" spent_icon = "lcasing-spent" -/obj/item/ammo_casing/flechette - desc = "A flechette casing." - caliber = CALIBER_PISTOL_FLECHETTE - projectile_type = /obj/item/projectile/bullet/flechette - icon_state = "flechette-casing" - spent_icon = "flechette-casing-spent" - -/obj/item/ammo_casing/flechette/hp - projectile_type = /obj/item/projectile/bullet/flechette/hp - +// Shotgun /obj/item/ammo_casing/shotgun name = "shotgun slug" desc = "A shotgun slug." @@ -139,8 +177,8 @@ projectile_type = /obj/item/projectile/bullet/shotgun/beanbag matter = list(MATERIAL_STEEL = 180) -//Can stun in one hit if aimed at the head, but -//is blocked by clothing that stops tasers and is vulnerable to EMP +// Can stun in one hit if aimed at the head, but +// is blocked by clothing that stops tasers and is vulnerable to EMP /obj/item/ammo_casing/shotgun/stunshell name = "stun shell" desc = "An energy stun cartridge." @@ -154,7 +192,7 @@ if(prob(100/severity)) BB = null update_icon() -//Does not stun, only blinds, but has area of effect. +// Does not stun, only blinds, but has area of effect. /obj/item/ammo_casing/shotgun/flash name = "flash shell" desc = "A chemical shell used to signal distress or provide illumination." @@ -163,6 +201,7 @@ projectile_type = /obj/item/projectile/energy/flash/flare matter = list(MATERIAL_STEEL = 90, MATERIAL_GLASS = 90) +// Rifle /obj/item/ammo_casing/rifle desc = "A rifle bullet casing." caliber = CALIBER_RIFLE @@ -175,6 +214,7 @@ projectile_type = /obj/item/projectile/bullet/rifle/flame icon_state = "riflecasing_fi" +// Antimatter rifle /obj/item/ammo_casing/shell name = "shell casing" desc = "An antimaterial shell casing." @@ -182,13 +222,21 @@ spent_icon = "lcasing-spent" caliber = CALIBER_ANTIMATERIAL projectile_type = /obj/item/projectile/bullet/rifle/shell - matter = list(MATERIAL_STEEL = 1250) + matter = list(MATERIAL_STEEL = 1250, MATERIAL_DIAMOND = 250) /obj/item/ammo_casing/shell/apds name = "\improper APDS shell casing" - desc = "An Armour Piercing Discarding Sabot shell." + desc = "An Armour Piercing Discarding Sabot antimaterial shell." projectile_type = /obj/item/projectile/bullet/rifle/shell/apds + matter = list(MATERIAL_STEEL = 1750, MATERIAL_DIAMOND = 750) +/obj/item/ammo_casing/shell/explosive + name = "explosive shell casing" + desc = "An explosive antimaterial shell." + projectile_type = /obj/item/projectile/bullet/rifle/shell/explosive + matter = list(MATERIAL_STEEL = 1500, MATERIAL_PHORON = 1250, MATERIAL_DIAMOND = 250) + +// "Military" rifle /obj/item/ammo_casing/rifle/military desc = "A military rifle bullet casing." caliber = CALIBER_RIFLE_MILITARY @@ -221,6 +269,7 @@ projectile_type = /obj/item/projectile/bullet/rifle/ak47/flame icon_state = "riflecasing_fi" +// Rocket launcher /obj/item/ammo_casing/rocket name = "rocket shell" desc = "An explosive designed to be fired from a launcher." @@ -228,6 +277,7 @@ projectile_type = /obj/item/projectile/bullet/rocket caliber = CALIBER_ROCKET fall_sounds = list() + matter = list(MATERIAL_STEEL = 2500, MATERIAL_PHORON = 500) /obj/item/ammo_casing/rocket/expend() QDEL_NULL(src) @@ -237,7 +287,9 @@ name = "heavy rocket shell" desc = "A high explosive designed to be fired from a launcher." projectile_type = /obj/item/projectile/bullet/rocket/heavy + matter = list(MATERIAL_STEEL = 2500, MATERIAL_PHORON = 2500) +// The other stuff /obj/item/ammo_casing/cap name = "cap" desc = "A cap for children toys." @@ -258,6 +310,7 @@ desc = "A small bullet casing fitted with a single-use ion pulse generator." projectile_type = /obj/item/projectile/ion/tiny icon_state = "smallcasing_h" + matter = list(MATERIAL_STEEL = 130, MATERIAL_URANIUM = 100) /obj/item/ammo_casing/shotgun/emp name = "haywire slug" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 762cc4e07e6..4f04dfa3f34 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -389,7 +389,7 @@ // If your skill in weapons is higher than/equal to (screen_shake + 2) - it won't shake at all. if(screen_shake && !user.skill_check(SKILL_WEAPONS,screen_shake+2)) spawn() - shake_camera(user, screen_shake+1, screen_shake) + shake_camera(user, screen_shake + 1 + (zoom*2), screen_shake) if(combustion) var/turf/curloc = get_turf(src) @@ -467,7 +467,10 @@ acc_mod += 2 acc_mod += user.ranged_accuracy_mods() - acc_mod += accuracy + if(zoom) + acc_mod += scoped_accuracy + else + acc_mod += accuracy P.hitchance_mod = accuracy_power*acc_mod P.dispersion = disp_mod @@ -566,19 +569,6 @@ return zoom(user, zoom_offset, view_size) - if(zoom) - accuracy = scoped_accuracy - if(user.skill_check(SKILL_WEAPONS, SKILL_MASTER)) - accuracy += 2 - if(screen_shake) - screen_shake = round(screen_shake*zoom_amount+1) //screen shake is worse when looking through a scope - -//make sure accuracy and screen_shake are reset regardless of how the item is unzoomed. -/obj/item/gun/zoom() - ..() - if(!zoom) - accuracy = initial(accuracy) - screen_shake = initial(screen_shake) /obj/item/gun/examine(mob/user) . = ..() diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm index 2e694d24a0f..a97b3037ebb 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm @@ -9,11 +9,12 @@ projectile_type = /obj/item/projectile/bullet/magnetic/slug one_hand_penalty = 6 power_cost = 300 - fire_delay = 35 + fire_delay = 25 w_class = ITEM_SIZE_HUGE slot_flags = SLOT_BACK loaded = /obj/item/rcd_ammo/large // ~30 shots bulk = GUN_BULK_RIFLE + 1 + accuracy = 5 cell = /obj/item/cell/hyper capacitor = /obj/item/stock_parts/capacitor/adv @@ -107,6 +108,7 @@ fire_delay = 8 slowdown_held = 3 slowdown_worn = 2 + accuracy = 0 slot_flags = SLOT_BACK w_class = ITEM_SIZE_NO_CONTAINER @@ -114,7 +116,7 @@ firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=null, one_hand_penalty=1, burst_accuracy=null, dispersion=null), list(mode_name="3-round burst", burst=3, fire_delay=null, one_hand_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), - list(mode_name="full auto", burst=1, fire_delay=0, burst_delay=1, one_hand_penalty=3, burst_accuracy=list(0,-1,-2), dispersion=list(0.2, 0.8, 1.2), autofire_enabled=1) + list(mode_name="full auto", burst=1, fire_delay=0, burst_delay=2, one_hand_penalty=3, burst_accuracy=list(0,-1,-2), dispersion=list(0.2, 0.8, 1.2), autofire_enabled=1) ) /obj/item/gun/magnetic/railgun/automatic/examine(mob/user, distance) @@ -128,6 +130,26 @@ icon = 'icons/obj/guns/railgun_old_heavy.dmi' icon_state = "old_heavy_railgun" +// I felt like we could use some bullshit weapon design +/obj/item/gun/magnetic/railgun/automatic/dominion + name = "\improper ST-410 railgun" + desc = "A standard-issue railgun used by shock troopers of the Terran Dominion during third expansion era. The power of that level was never meant to be in the hands of humans..." + fire_delay = 2 + slowdown_held = 1.5 + slowdown_worn = 0.5 + + power_cost = 50 + cell = /obj/item/cell/hyper + capacitor = /obj/item/stock_parts/capacitor/super + + origin_tech = list(TECH_COMBAT = 9, TECH_MATERIAL = 6, TECH_MAGNET = 8, TECH_DOMINION = 5) + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=null, one_hand_penalty=2, burst_accuracy=null, dispersion=null), + list(mode_name="5-round burst", burst=5, fire_delay=null, one_hand_penalty=4, burst_accuracy=list(0), dispersion=list(0.0, 0.2, 0.4)), + list(mode_name="full auto", burst=1, fire_delay=0, burst_delay=0.2, one_hand_penalty=8, burst_accuracy=list(0), dispersion=list(0.1, 0.2, 0.3), autofire_enabled=1) + ) + /obj/item/gun/magnetic/railgun/flechette name = "flechette gun" desc = "The MI-12 Skadi is a burst fire capable railgun that fires flechette rounds at high velocity. Deadly against armour, but much less effective against soft targets." diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 0ace66753e3..cdd394026d4 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -7,10 +7,10 @@ w_class = ITEM_SIZE_NORMAL bulk = -1 load_method = MAGAZINE - caliber = CALIBER_PISTOL_FLECHETTE + caliber = CALIBER_SMG_FLECHETTE origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 3) slot_flags = SLOT_BELT - ammo_type = /obj/item/ammo_casing/flechette + ammo_type = /obj/item/ammo_casing/smg/flechette magazine_type = /obj/item/ammo_magazine/proto_smg allowed_magazines = /obj/item/ammo_magazine/proto_smg multi_aim = 1 @@ -32,9 +32,9 @@ icon_state = "mpistolen" safety_icon = "safety" item_state = "mpistolen" - caliber = CALIBER_PISTOL + caliber = CALIBER_SMG origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ESOTERIC = 3) - ammo_type = /obj/item/ammo_casing/pistol + ammo_type = /obj/item/ammo_casing/smg magazine_type = /obj/item/ammo_magazine/machine_pistol allowed_magazines = /obj/item/ammo_magazine/machine_pistol //more damage compared to the wt550, smaller mag size one_hand_penalty = 2 @@ -70,7 +70,7 @@ safety_icon = "safety" w_class = ITEM_SIZE_LARGE force = 10 - caliber = CALIBER_PISTOL + caliber = CALIBER_SMG origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ESOTERIC = 8) slot_flags = SLOT_BELT|SLOT_BACK magazine_type = /obj/item/ammo_magazine/smg @@ -143,10 +143,10 @@ item_state = "wt550" safety_icon = "safety" w_class = ITEM_SIZE_NORMAL - caliber = CALIBER_PISTOL_SMALL + caliber = CALIBER_SMG_SMALL origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) slot_flags = SLOT_BELT - ammo_type = /obj/item/ammo_casing/pistol/small + ammo_type = /obj/item/ammo_casing/smg/small load_method = MAGAZINE magazine_type = /obj/item/ammo_magazine/smg_top/rubber allowed_magazines = /obj/item/ammo_magazine/smg_top diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 05c30adba62..a037e6b52db 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -118,7 +118,7 @@ if(Bump(M)) //Bump will make sure we don't hit a mob multiple times return -/* short-casing projectiles, like the kind used in pistols or SMGs */ +/* Short-casing projectiles, like the kind used in pistols */ /obj/item/projectile/bullet/pistol fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' @@ -127,7 +127,7 @@ /obj/item/projectile/bullet/pistol/flame name = "incendiary bullet" - damage = 5 + damage = 25 /obj/item/projectile/bullet/pistol/flame/attack_mob(mob/living/target_mob, distance, miss_modifier) . = ..() @@ -186,22 +186,58 @@ distance_falloff = 2.5 armor_penetration = 15 +/* SMG bullets */ +/obj/item/projectile/bullet/smg + fire_sound = "gun_mp38" + damage = 25 + distance_falloff = 3 + armor_penetration = 10 + +/obj/item/projectile/bullet/smg/rubber + name = "rubber bullet" + damage_flags = 0 + damage = 5 + agony = 25 + embed = FALSE + +/obj/item/projectile/bullet/smg/flame + name = "incendiary bullet" + damage = 15 + +/obj/item/projectile/bullet/smg/flame/attack_mob(mob/living/target_mob, distance, miss_modifier) + . = ..() + if(target_mob.fire_stacks < 5) + target_mob.adjust_fire_stacks(1) + target_mob.IgniteMob() + +/obj/item/projectile/bullet/smg/small + fire_sound = 'sound/weapons/gunshot/mp5.ogg' + damage = 18 + penetration_modifier = 1.2 + distance_falloff = 4 + +/obj/item/projectile/bullet/smg/small/rubber + name = "rubber bullet" + damage_flags = 0 + damage = 5 + agony = 15 + embed = FALSE + //4mm. Tiny, very low damage, does not embed, but has very high penetration. Only to be used for the experimental SMG. -/obj/item/projectile/bullet/flechette - fire_sound = 'sound/weapons/gunshot/smg.ogg' - damage = 20 +/obj/item/projectile/bullet/smg/flechette + fire_sound = 'sound/weapons/gunshot/mp19.ogg' + damage = 12 penetrating = 1 armor_penetration = 70 embed = FALSE distance_falloff = 2 -// Higher damage, less AP -/obj/item/projectile/bullet/flechette/hp - fire_sound = 'sound/weapons/gunshot/smg_alt.ogg' - damage = 36 - armor_penetration = 20 +// Higher damage, no AP +/obj/item/projectile/bullet/smg/flechette/hp + damage = 30 + armor_penetration = 0 -/* shotgun projectiles */ +/* Shotgun projectiles */ /obj/item/projectile/bullet/shotgun name = "slug" @@ -276,7 +312,7 @@ /obj/item/projectile/bullet/rifle/t12 fire_sound = "gun_t12" - damage = 14 + damage = 18 armor_penetration = 85 /obj/item/projectile/bullet/rifle/t18 @@ -302,21 +338,35 @@ damage = 35 /obj/item/projectile/bullet/rifle/shell - fire_sound = 'sound/weapons/gunshot/sniper.ogg' - damage = 80 + fire_sound = 'sound/weapons/gunshot/sniper_antimatter.ogg' + damage = 120 stun = 3 weaken = 3 penetrating = 3 - armor_penetration = 70 + armor_penetration = 50 penetration_modifier = 1.2 distance_falloff = 0.5 /obj/item/projectile/bullet/rifle/shell/apds - damage = 70 - penetrating = 5 - armor_penetration = 80 + fire_sound = 'sound/weapons/gunshot/sniper_heavy.ogg' + damage = 80 + penetrating = 8 + armor_penetration = 100 penetration_modifier = 1.5 +/obj/item/projectile/bullet/rifle/shell/apds/get_structure_damage() + return damage * 7 + +/obj/item/projectile/bullet/rifle/shell/explosive + penetrating = 0 + armor_penetration = 30 + +/obj/item/projectile/bullet/rifle/shell/explosive/on_hit(atom/target, blocked = 0) + var/turf/T = get_turf(target) + if(isturf(T)) + explosion(target, 0, 1, 4) + return ..() + /* Miscellaneous */ /obj/item/projectile/bullet/gyro name = "minirocket" @@ -325,7 +375,7 @@ var/gyro_heavy_impact = 0 var/gyro_light_impact = 2 -/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0) +/obj/item/projectile/bullet/gyro/on_hit(atom/target, blocked = 0) if(isturf(target)) explosion(target, gyro_devastation, gyro_heavy_impact, gyro_light_impact) ..() @@ -340,6 +390,9 @@ /obj/item/projectile/bullet/pistol/practice damage = 5 +/obj/item/projectile/bullet/smg/small/practice + damage = 5 + /obj/item/projectile/bullet/rifle/military/practice damage = 5 diff --git a/code/modules/projectiles/projectile/magnetic.dm b/code/modules/projectiles/projectile/magnetic.dm index c31b8c13459..28b4cad9805 100644 --- a/code/modules/projectiles/projectile/magnetic.dm +++ b/code/modules/projectiles/projectile/magnetic.dm @@ -6,21 +6,22 @@ penetrating = 5 armor_penetration = 65 penetration_modifier = 1.1 - fire_sound = 'sound/weapons/railgun.ogg' + fire_sound = 'sound/weapons/gunshot/railgun.ogg' distance_falloff = 1 /obj/item/projectile/bullet/magnetic/slug name = "slug" icon_state = "gauss_silenced" - damage = 75 + damage = 115 armor_penetration = 90 -// Used by those "automatic" railguns +// Used by those "automatic" railguns; The most powerful projectile in the game /obj/item/projectile/bullet/magnetic/slug/super name = "anti-tank slug" icon_state = "gauss" - damage = 150 + damage = 250 armor_penetration = 90 + fire_sound = 'sound/weapons/gunshot/railgun_2.ogg' /obj/item/projectile/bullet/magnetic/flechette name = "flechette" @@ -28,4 +29,4 @@ damage = 35 armor_penetration = 100 fire_sound = 'sound/weapons/rapidslice.ogg' - distance_falloff = 0.5 \ No newline at end of file + distance_falloff = 0.5 diff --git a/code/modules/psionics/equipment/null_ammo.dm b/code/modules/psionics/equipment/null_ammo.dm index fe812bd409a..07c069524b2 100644 --- a/code/modules/psionics/equipment/null_ammo.dm +++ b/code/modules/psionics/equipment/null_ammo.dm @@ -1,8 +1,8 @@ -/obj/item/projectile/revolver/medium/nullglass +/obj/item/projectile/bullet/revolver/medium/nullglass name = "nullglass bullet" shrapnel_type = /obj/item/material/shard/nullglass -/obj/item/projectile/revolver/medium/nullglass/on_hit(atom/target, blocked = 0, def_zone = null) +/obj/item/projectile/bullet/revolver/medium/nullglass/on_hit(atom/target, blocked = 0, def_zone = null) . = ..() var/mob/living/L = target if(L.psi) @@ -11,7 +11,7 @@ /obj/item/ammo_casing/revolver/medium/nullglass desc = "A revolver bullet casing with a nullglass coating." - projectile_type = /obj/item/projectile/revolver/medium/nullglass + projectile_type = /obj/item/projectile/bullet/revolver/medium/nullglass /obj/item/ammo_casing/revolver/medium/nullglass/disrupts_psionics() return src diff --git a/code/modules/reagents/Chemistry-Reagents/toxins/toxins_drugs.dm b/code/modules/reagents/Chemistry-Reagents/toxins/toxins_drugs.dm index e3359453261..8b670641ff0 100644 --- a/code/modules/reagents/Chemistry-Reagents/toxins/toxins_drugs.dm +++ b/code/modules/reagents/Chemistry-Reagents/toxins/toxins_drugs.dm @@ -11,7 +11,7 @@ color = "#60a584" metabolism = REM * 0.5 overdose = REAGENTS_OVERDOSE - value = 2.8 + value = 3 should_admin_log = TRUE addiction_types = list(/datum/addiction/hallucinogens = 4) @@ -38,7 +38,7 @@ color = "#efebaa" overdose = REAGENTS_OVERDOSE / 6 data = 0 - value = 2 + value = 3 addiction_types = list(/datum/addiction/nicotine = 10) /datum/reagent/nicotine/affect_blood(mob/living/carbon/M, alien, removed) @@ -70,7 +70,7 @@ color = "#202040" metabolism = REM * 0.25 overdose = REAGENTS_OVERDOSE - value = 2.5 + value = 5 addiction_types = list(/datum/addiction/hallucinogens = 4) /datum/reagent/serotrotium/affect_blood(mob/living/carbon/M, alien, removed) @@ -93,7 +93,7 @@ color = "#b31008" metabolism = REM * 0.25 overdose = REAGENTS_OVERDOSE - value = 0.6 + value = 6 should_admin_log = TRUE addiction_types = list(/datum/addiction/hallucinogens = 10) @@ -115,7 +115,7 @@ color = "#e700e7" overdose = REAGENTS_OVERDOSE metabolism = REM * 0.5 - value = 0.7 + value = 7 /datum/reagent/psilocybin/affect_blood(mob/living/carbon/M, alien, removed) if (alien == IS_DIONA) @@ -166,6 +166,7 @@ overdose = 25 should_admin_log = TRUE addiction_types = list(/datum/addiction/psionics = 40) + value = 50 // M A X I M U M C H E E S E var/global/list/dose_messages = list( @@ -236,6 +237,7 @@ metabolism = 1 overdose = 5 addiction_types = list(/datum/addiction/psionics = 100) // You usually only take small amount + value = 100 var/global/list/dose_messages = list( "Your name is called. It is your time.", @@ -282,12 +284,14 @@ reagent_state = LIQUID color = "#d5f29d" addiction_types = list(/datum/addiction/psionics = 4, /datum/addiction/hallucinogens = 2) + value = 20 // It is made out of gold and mindbreaker toxin, quite expensive /datum/reagent/mensvir/affect_blood(mob/living/carbon/M, alien, removed) + M.hallucination(5, 25) + M.add_chemical_effect(CE_PULSE, 1) + if(!M.psi) // Sorry, elitist drug return - M.hallucination(5, 25) - M.add_chemical_effect(CE_PULSE, 1) M.add_chemical_effect(CE_THIRDEYE, 1) M.psi.stamina = min(M.psi.max_stamina, M.psi.stamina + 1) diff --git a/code/modules/trading_stations/_faction.dm b/code/modules/trading_stations/_faction.dm index 2546215cc35..2b2bd89325c 100644 --- a/code/modules/trading_stations/_faction.dm +++ b/code/modules/trading_stations/_faction.dm @@ -20,6 +20,15 @@ /datum/trade_faction/independent name = FACTION_INDEPENDENT desc = "Belongs to no big players in the universe, all on their own in this cruel world." + relationship = list( + FACTION_TERRAGOV = FACTION_STATE_ANIMOSITY, + FACTION_SOL_CENTRAL = FACTION_STATE_ANIMOSITY, + FACTION_ISC = FACTION_STATE_RIVAL, + FACTION_NANOTRASEN = FACTION_STATE_ANIMOSITY, + FACTION_CYBERSUN = FACTION_STATE_ANIMOSITY, + FACTION_REBORN_CHRISTIAN_CHURCH = FACTION_STATE_ENEMY, + FACTION_TERRASENATE_OBS = FACTION_STATE_ENEMY, + ) // The big three diff --git a/code/modules/trading_stations/_trading_station.dm b/code/modules/trading_stations/_trading_station.dm index fd79adff4a0..ee0930ad2fa 100644 --- a/code/modules/trading_stations/_trading_station.dm +++ b/code/modules/trading_stations/_trading_station.dm @@ -292,3 +292,21 @@ if(!isnum(cost)) return wealth -= cost + +/// Returns a multiplier to markup based on faction relations +/datum/trading_station/proc/GetFactionMarkup(datum/trade_faction/buyer_faction) + var/datum/trade_faction/seller_faction = SSsupply.GetFaction(faction) + if(!istype(seller_faction) || !istype(buyer_faction)) + return 1.0 + + switch(seller_faction.relationship[buyer_faction.name]) + if(FACTION_STATE_ANIMOSITY) + return 1.25 + if(FACTION_STATE_RIVAL) + return 1.5 + if(FACTION_STATE_ENEMY) + return 2.0 + if(FACTION_STATE_WAR) // Normally that'd be an embargo, but some outlaw traders exist + return 3.0 + else + return 1.0 diff --git a/code/modules/trading_stations/trading_station_types/0_always_spawn/medical.dm b/code/modules/trading_stations/trading_station_types/0_always_spawn/medical.dm index da34e4de40d..50cb496b306 100644 --- a/code/modules/trading_stations/trading_station_types/0_always_spawn/medical.dm +++ b/code/modules/trading_stations/trading_station_types/0_always_spawn/medical.dm @@ -1,3 +1,5 @@ +#define CARTRIDGE(type) /obj/item/reagent_containers/chem_disp_cartridge/##type + /datum/trading_station/medical name_pool = list( "ZHTB \"Pill\"" = "Zeng-Hu Trade Beacon \"Pill\": Wares for your wounds and more!", @@ -27,7 +29,7 @@ /obj/item/stack/medical/advanced/ointment = GOODS_DEFAULT, /obj/item/reagent_containers/glass/bottle/inaprovaline = GOODS_DEFAULT, /obj/item/reagent_containers/glass/bottle/antitoxin = GOODS_DEFAULT, - /obj/item/reagent_containers/ivbag/nanoblood = GOODS_DEFAULT, + /obj/item/reagent_containers/ivbag/nanoblood = CUSTOM_GOODS_NAME("nanoblood IV bag"), /obj/item/bodybag/rescue = GOODS_DEFAULT, ), TRADE_CAT_MEDKIT = list( @@ -41,6 +43,34 @@ /obj/item/reagent_containers/glass/bottle/carpotoxin = GOODS_DEFAULT, /obj/item/reagent_containers/glass/bottle/spider_venom = GOODS_DEFAULT, ), + TRADE_CAT_CHEMCARTS = list( + CARTRIDGE(water) = CUSTOM_GOODS_NAME("cartridge (water)"), + CARTRIDGE(potassium) = CUSTOM_GOODS_NAME("cartridge (potassium)"), + CARTRIDGE(sugar) = CUSTOM_GOODS_NAME("cartridge (sugar)"), + CARTRIDGE(sodium) = CUSTOM_GOODS_NAME("cartridge (sodium)"), + CARTRIDGE(aluminium) = CUSTOM_GOODS_NAME("cartridge (aluminium)"), + CARTRIDGE(silicon) = CUSTOM_GOODS_NAME("cartridge (silicon)"), + CARTRIDGE(phosphorus) = CUSTOM_GOODS_NAME("cartridge (phosphorus)"), + CARTRIDGE(sulfur) = CUSTOM_GOODS_NAME("cartridge (sulfur)"), + CARTRIDGE(iron) = CUSTOM_GOODS_NAME("cartridge (iron)"), + CARTRIDGE(copper) = CUSTOM_GOODS_NAME("cartridge (copper)"), + CARTRIDGE(mercury) = CUSTOM_GOODS_NAME("cartridge (mercury)"), + CARTRIDGE(radium) = CUSTOM_GOODS_NAME("cartridge (radium)"), + CARTRIDGE(ethanol) = CUSTOM_GOODS_NAME("cartridge (ethanol)"), + CARTRIDGE(sacid) = CUSTOM_GOODS_NAME("cartridge (sacid)"), + CARTRIDGE(tungsten) = CUSTOM_GOODS_NAME("cartridge (tungsten)"), + CARTRIDGE(hclacid) = CUSTOM_GOODS_NAME("cartridge (hclacid)"), + CARTRIDGE(lithium) = CUSTOM_GOODS_NAME("cartridge (lithium)"), + CARTRIDGE(carbon) = CUSTOM_GOODS_NAME("cartridge (carbon)"), + CARTRIDGE(ammonia) = CUSTOM_GOODS_NAME("cartridge (ammonia)"), + CARTRIDGE(acetone) = CUSTOM_GOODS_NAME("cartridge (acetone)"), + CARTRIDGE(hydrazine) = CUSTOM_GOODS_NAME("cartridge (hydrazine)"), + CARTRIDGE(inaprov) = CUSTOM_GOODS_NAME("cartridge (inaprov)"), + CARTRIDGE(ryetalyn) = CUSTOM_GOODS_NAME("cartridge (ryetalyn)"), + CARTRIDGE(paracetamol) = CUSTOM_GOODS_NAME("cartridge (paracetamol)"), + CARTRIDGE(dylovene) = CUSTOM_GOODS_NAME("cartridge (dylovene)"), + CARTRIDGE(tricord) = CUSTOM_GOODS_NAME("cartridge (tricord)"), + ), ) hidden_inventory = list( TRADE_CAT_EQUIPMENT = list( @@ -53,3 +83,5 @@ /obj/item/storage/firstaid/combat = GOODS_DEFAULT, ), ) + +#undef CARTRIDGE diff --git a/code/modules/trading_stations/trading_station_types/0_always_spawn/terra.dm b/code/modules/trading_stations/trading_station_types/0_always_spawn/terra.dm new file mode 100644 index 00000000000..38486c579c9 --- /dev/null +++ b/code/modules/trading_stations/trading_station_types/0_always_spawn/terra.dm @@ -0,0 +1,44 @@ +/datum/trading_station/terra + name_pool = list( + "TTB \"Invictus\"" = "Terran Trade Beacon \"Invictus\": Marine Corps equipment, sold exclusively to TerraGov associates.", + ) + uid = "terra" + unlock_favor = 10000 + faction = FACTION_TERRAGOV + whitelist_factions = list(FACTION_TERRAGOV) + spawn_always = TRUE + markup = 1.2 + inventory = list( + TRADE_CAT_ARTILLERY = list( + /obj/structure/ship_munition/disperser_charge/fire = GOODS_DEFAULT, + /obj/structure/ship_munition/disperser_charge/emp = GOODS_DEFAULT, + /obj/structure/ship_munition/disperser_charge/mining = GOODS_DEFAULT, + /obj/structure/ship_munition/disperser_charge/explosive = GOODS_DEFAULT, + /obj/structure/ship_munition/disperser_charge/explosive/high = GOODS_DEFAULT, + /obj/structure/ship_munition/disperser_charge/orbital_bombardment = GOODS_DEFAULT, + ), + TRADE_CAT_WEAPONS = list( + /obj/item/gun/projectile/automatic/t18 = GOODS_DEFAULT, + /obj/item/gun/projectile/automatic/t12 = GOODS_DEFAULT, + /obj/item/gun/projectile/heavysniper = GOODS_DEFAULT, + /obj/item/gun/projectile/rocket_launcher = GOODS_DEFAULT, + /obj/item/gun/magnetic/railgun = GOODS_DEFAULT, + ), + TRADE_CAT_AMMO = list( + /obj/item/ammo_magazine/t18 = GOODS_DEFAULT, + /obj/item/ammo_magazine/t12 = GOODS_DEFAULT, + /obj/item/ammo_casing/shell = GOODS_DEFAULT, + /obj/item/ammo_casing/rocket = GOODS_DEFAULT, + ), + ) + hidden_inventory = list( + TRADE_CAT_ARTILLERY = list( + /obj/structure/ship_munition/disperser_charge/orbital_bombardment/high = GOODS_DEFAULT, + ), + TRADE_CAT_WEAPONS = list( + /obj/item/gun/magnetic/railgun/automatic = GOODS_DEFAULT, + ), + TRADE_CAT_AMMO = list( + /obj/item/ammo_casing/rocket/heavy = GOODS_DEFAULT, + ), + ) diff --git a/code/modules/trading_stations/trading_station_types/2_rare/weapons.dm b/code/modules/trading_stations/trading_station_types/2_rare/weapons.dm index 0080a13978d..3016d198e67 100644 --- a/code/modules/trading_stations/trading_station_types/2_rare/weapons.dm +++ b/code/modules/trading_stations/trading_station_types/2_rare/weapons.dm @@ -3,7 +3,7 @@ "TTB \"Telum\"" = "Terran Trade Beacon \"Telum\": Surplus marine equipment sold to friends of humanity!", ) uid = "weapons_terra" - unlock_favor = 15000 + unlock_favor = 8000 faction = FACTION_TERRAGOV spawn_probability = 30 markup = 1.2 @@ -25,13 +25,3 @@ /obj/item/clothing/head/helmet/merc = CUSTOM_GOODS_NAME("marine combat helmet"), ), ) - hidden_inventory = list( - TRADE_CAT_WEAPONS = list( - /obj/item/gun/projectile/automatic/t18 = CUSTOM_GOODS_NAME("T18 rifle"), - /obj/item/gun/projectile/automatic/t12 = CUSTOM_GOODS_NAME("T12 rifle"), - ), - TRADE_CAT_AMMO = list( - /obj/item/ammo_magazine/t18 = CUSTOM_GOODS_NAME("T18 rifle magazine"), - /obj/item/ammo_magazine/t12 = CUSTOM_GOODS_NAME("T12 rifle magazine"), - ), - ) diff --git a/code/modules/trading_stations/trading_station_types/3_very_rare/obs.dm b/code/modules/trading_stations/trading_station_types/3_very_rare/obs.dm index 6199785e5ca..025210aee1e 100644 --- a/code/modules/trading_stations/trading_station_types/3_very_rare/obs.dm +++ b/code/modules/trading_stations/trading_station_types/3_very_rare/obs.dm @@ -17,15 +17,20 @@ /obj/item/clothing/glasses/tacgoggles = GOODS_DEFAULT, /obj/item/clothing/glasses/thermal = GOODS_DEFAULT, /obj/item/clothing/glasses/night = GOODS_DEFAULT, - /obj/item/contraband/poster/order_black_of_sun = GOODS_DEFAULT, + /obj/item/contraband/poster/order_black_of_sun = CUSTOM_GOODS_NAME("OBS poster"), ), TRADE_CAT_CLOTHING = list( /obj/item/clothing/gloves/thick/combat = GOODS_DEFAULT, ), TRADE_CAT_WEAPONS = list( + /obj/item/gun/projectile/automatic/ak47 = GOODS_DEFAULT, /obj/item/tank/phoron/onetankbomb = GOODS_DEFAULT, /obj/item/grenade/frag = GOODS_DEFAULT, ), + TRADE_CAT_AMMO = list( + /obj/item/ammo_magazine/ak47 = GOODS_DEFAULT, + /obj/item/ammo_magazine/ak47/extended = GOODS_DEFAULT, + ), ) hidden_inventory = list( TRADE_CAT_VOIDSUIT = list( diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 067b9e5df4e..672f84bfa31 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/maps/away/bunker/bunker_access.dm b/maps/away/bunker/bunker_access.dm index 574c733fb97..43aad1a0bd4 100644 --- a/maps/away/bunker/bunker_access.dm +++ b/maps/away/bunker/bunker_access.dm @@ -5,18 +5,21 @@ id = access_bunker desc = "ISC Bunker" region = ACCESS_REGION_NONE + access_type = ACCESS_TYPE_NONE /var/const/access_bunker_security = "ACCESS_BUNKER_SECURITY" /datum/access/bunker_security id = access_bunker_security desc = "ISC Bunker Security" region = ACCESS_REGION_NONE + access_type = ACCESS_TYPE_NONE /var/const/access_bunker_armory = "ACCESS_BUNKER_ARMORY" /datum/access/bunker_armory id = access_bunker_armory desc = "ISC Bunker Armory" region = ACCESS_REGION_NONE + access_type = ACCESS_TYPE_NONE /* ID Cards */ diff --git a/sound/weapons/gunshot/mp19.ogg b/sound/weapons/gunshot/mp19.ogg new file mode 100644 index 00000000000..6820c70a4b1 Binary files /dev/null and b/sound/weapons/gunshot/mp19.ogg differ diff --git a/sound/weapons/gunshot/mp38_1.ogg b/sound/weapons/gunshot/mp38_1.ogg new file mode 100644 index 00000000000..d2aed125f6b Binary files /dev/null and b/sound/weapons/gunshot/mp38_1.ogg differ diff --git a/sound/weapons/gunshot/mp38_2.ogg b/sound/weapons/gunshot/mp38_2.ogg new file mode 100644 index 00000000000..1936f9dd866 Binary files /dev/null and b/sound/weapons/gunshot/mp38_2.ogg differ diff --git a/sound/weapons/gunshot/mp5.ogg b/sound/weapons/gunshot/mp5.ogg new file mode 100644 index 00000000000..e5383af24a3 Binary files /dev/null and b/sound/weapons/gunshot/mp5.ogg differ diff --git a/sound/weapons/gunshot/sniper.ogg b/sound/weapons/gunshot/old_rifle.ogg similarity index 100% rename from sound/weapons/gunshot/sniper.ogg rename to sound/weapons/gunshot/old_rifle.ogg diff --git a/sound/weapons/gunshot/pulse_energy.ogg b/sound/weapons/gunshot/pulse_energy.ogg new file mode 100644 index 00000000000..77db3a3478a Binary files /dev/null and b/sound/weapons/gunshot/pulse_energy.ogg differ diff --git a/sound/weapons/railgun.ogg b/sound/weapons/gunshot/railgun.ogg similarity index 100% rename from sound/weapons/railgun.ogg rename to sound/weapons/gunshot/railgun.ogg diff --git a/sound/weapons/gunshot/railgun_2.ogg b/sound/weapons/gunshot/railgun_2.ogg new file mode 100644 index 00000000000..bacdfdbbcd4 Binary files /dev/null and b/sound/weapons/gunshot/railgun_2.ogg differ diff --git a/sound/weapons/gunshot/smg.ogg b/sound/weapons/gunshot/smg.ogg deleted file mode 100644 index cb3c1a49b56..00000000000 Binary files a/sound/weapons/gunshot/smg.ogg and /dev/null differ diff --git a/sound/weapons/gunshot/smg_alt.ogg b/sound/weapons/gunshot/smg_alt.ogg deleted file mode 100644 index 3dabedba1a4..00000000000 Binary files a/sound/weapons/gunshot/smg_alt.ogg and /dev/null differ diff --git a/sound/weapons/gunshot/sniper_antimatter.ogg b/sound/weapons/gunshot/sniper_antimatter.ogg new file mode 100644 index 00000000000..799c55a1b30 Binary files /dev/null and b/sound/weapons/gunshot/sniper_antimatter.ogg differ diff --git a/sound/weapons/gunshot/sniper_heavy.ogg b/sound/weapons/gunshot/sniper_heavy.ogg new file mode 100644 index 00000000000..6a0d4b87637 Binary files /dev/null and b/sound/weapons/gunshot/sniper_heavy.ogg differ