diff --git a/_maps/virtual_domains/ancientmilsim_nova.dmm b/_maps/virtual_domains/ancientmilsim_nova.dmm index b262430eddfd..eaaa5b13d10f 100644 --- a/_maps/virtual_domains/ancientmilsim_nova.dmm +++ b/_maps/virtual_domains/ancientmilsim_nova.dmm @@ -102,6 +102,10 @@ /obj/effect/landmark/bitrunning/curiosity_spawn, /turf/open/floor/grass/fairy, /area/virtual_domain/protected_space/ancient_milsim) +"ds" = ( +/obj/item/stack/sheet/mineral/sandbags/fifty, +/turf/open/misc/grass/planet/ancient_milsim, +/area/virtual_domain/ancient_milsim/loot_camp) "dB" = ( /obj/effect/landmark/bitrunning/curiosity_spawn, /turf/open/misc/dirt/planet, @@ -494,6 +498,9 @@ /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/lanca, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, /turf/open/floor/iron/dark, /area/virtual_domain/ancient_milsim/loot_camp) "ob" = ( @@ -510,6 +517,7 @@ /turf/open/floor/plating, /area/virtual_domain/ancient_milsim/maintenance) "ol" = ( +/obj/item/automatic_turret_folded, /turf/open/floor/iron/dark, /area/virtual_domain/ancient_milsim/carrier) "or" = ( @@ -1078,6 +1086,10 @@ /obj/item/storage/medkit/frontier/stocked, /turf/open/floor/iron/white, /area/virtual_domain/ancient_milsim/medbay) +"Cj" = ( +/obj/item/storage/barricade, +/turf/open/floor/iron/dark, +/area/virtual_domain/ancient_milsim/loot_camp) "Cr" = ( /obj/structure/chair/office/light{ dir = 4 @@ -1531,6 +1543,7 @@ /area/virtual_domain/ancient_milsim/carrier) "My" = ( /obj/structure/table, +/obj/item/storage/barricade, /turf/open/floor/iron/dark, /area/virtual_domain/ancient_milsim/loot_camp) "Mz" = ( @@ -1743,6 +1756,9 @@ /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/stock_parts/matter_bin/super, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, +/obj/item/minespawner/ancient_milsim, /turf/open/floor/iron/dark, /area/virtual_domain/ancient_milsim/loot_camp) "RC" = ( @@ -4183,7 +4199,7 @@ Uz "} (38,1,1) = {" Uz -Vl +ds Vl Vl TG @@ -4360,7 +4376,7 @@ Uz TQ bB bB -ki +Cj vQ ki Ww diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 3c7012106b18..115685459c28 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -72,7 +72,7 @@ product = /obj/item/food/grown/cannabis/ultimate genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/green, /datum/plant_gene/trait/modified_volume/omega_weed) mutatelist = null - reagents_add = list(/datum/reagent/drug/thc = 0.3, //NOVA EDIT CHANGE - MORE NARCOTICS - ORIGINAL: reagents_add = list(/datum/reagent/drug/cannabis = 0.3, + reagents_add = list(/datum/reagent/drug/thc = 0.3, // NOVA EDIT CHANGE - MORE NARCOTICS - ORIGINAL: reagents_add = list(/datum/reagent/drug/cannabis = 0.3, /datum/reagent/toxin/mindbreaker = 0.3, /datum/reagent/mercury = 0.15, /datum/reagent/lithium = 0.15, diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index 1f3384edc369..94b36e749be3 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -932,3 +932,19 @@ in a consumer grade battery recharger, these atmos blocking, aesthetically pleasing, and now superconductivity insulators can be made by the average crewmember if they follow the easy to follow 32 steps! +2024-12-30: + Stalkeros: + - rscadd: Three new Ancient MilSim DLC loadouts have been added. Go try them all! + - qol: Ancient MilSim DLC loadouts now show the general rundown of their abilities + in the crate name, consequently the spawner beacon too. + - balance: In general, it should be easier for bitrunners to defend themselves in + Ancient MilSim, thanks to numerous scattered barricades and landmines. + - balance: In general, it should also be easier for SNPCs to defend themselves in + Ancient MilSim, too, thanks to the fully automatic mounted machine gun. + - balance: Similarly vague item/spell reshuffle has been done for bitrunning disks + and abilities. + - bugfix: Scream For Me can now actually be used. + - qol: If you are to select a random name as a Syndicate Assault ghost role, -Cybersun + Counter-Bitrunner-, you'll get a random bitrunning alias instead of your own. + - balance: Cybersun Counter-Bitrunners can become immune to spells, on demand. + - code_imp: General code cleanup of several Ancient MilSim-related things. diff --git a/html/changelogs/archive/2025-01.yml b/html/changelogs/archive/2025-01.yml new file mode 100644 index 000000000000..736db98481ff --- /dev/null +++ b/html/changelogs/archive/2025-01.yml @@ -0,0 +1,14 @@ +2025-01-01: + vinylspiders: + - bugfix: hash can now be created again by grinding dried cannabis leaves in a grinder + or with a mortar and pestle +2025-01-02: + CoiledLamb, JohnFulpWillard, Ebin-Halcyon, axietheaxolotl, sergeirocks100: + - image: The coroner's scrubs and jumpsuit now have digitigrade sprites. + RatFromTheJungle: + - qol: made previously required experiments into discounts for a majority of the + tech-web, pretty much everything but alien tech, surgeries (to keep the coroners + job safe,) fishing, and illegal tech. +2025-01-04: + somenetwork: + - rscadd: Donation reward for bonkaitheroris diff --git a/modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi b/modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi index 5304cf9deea5..be7c2eecfb91 100644 Binary files a/modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi and b/modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi differ diff --git a/modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi b/modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi index c201c4a918f7..856b84a9a98a 100644 Binary files a/modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi and b/modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/medical.dmi b/modular_nova/master_files/icons/mob/clothing/under/medical.dmi index 16070f2d27b4..fb616b9e40d7 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/medical.dmi and b/modular_nova/master_files/icons/mob/clothing/under/medical.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi index 0b27b7e0d053..cc7c8ed11a6c 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi and b/modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi differ diff --git a/modular_nova/master_files/icons/obj/plushes.dmi b/modular_nova/master_files/icons/obj/plushes.dmi index 7ef967b47d8b..877e44ac6019 100644 Binary files a/modular_nova/master_files/icons/obj/plushes.dmi and b/modular_nova/master_files/icons/obj/plushes.dmi differ diff --git a/modular_nova/modules/bitrunning/code/anchor.dm b/modular_nova/modules/bitrunning/code/anchor.dm new file mode 100644 index 000000000000..26be4338f49b --- /dev/null +++ b/modular_nova/modules/bitrunning/code/anchor.dm @@ -0,0 +1,34 @@ +/obj/item/domain_anchor + name = "domain connection anchor" + desc = "A disposable tablet with a set of programs and utilities meant to stabilize the local square meter of domain infospace for new connections to be hopefully-safe.
\ + In layman's terms, this creates additional bitrunning spawn points." + icon = 'modular_nova/modules/bitrunning/icons/remote.dmi' + icon_state = "delivery_running" + +/obj/item/domain_anchor/examine(mob/user) + . = ..() + . += span_notice("Use in-hand to create a new spawn point.") + +/obj/item/domain_anchor/attack_self(mob/user, modifiers) + for(var/obj/machinery/quantum_server/server in SSmachines.get_machines_by_type(/obj/machinery/quantum_server)) + server.exit_turfs += get_turf(src) + server.retries_spent -= 1 + server.threat += 1 + server.radio.talk_into(src, "Potential secure datastream detected. Locking on the new spawn point.", RADIO_CHANNEL_SUPPLY) + new /obj/effect/landmark/bitrunning/domain_anchor(drop_location()) + user.balloon_alert(user, "connection stabilized!") + qdel(src) + +/obj/effect/landmark/bitrunning/domain_anchor + name = "anchored secure connection" + desc = "Highly stable connection protocol, and consequentially a trojan, used by bitrunners during attacks on high-value targets when numbers are key and \ + just three attempts aren't enough.
\ + In several seconds it will merge itself with the code, becoming nigh-invisible to any means of detection." + icon = 'icons/effects/effects.dmi' + icon_state = "curse" + invisibility = INVISIBILITY_NONE + +/obj/effect/landmark/bitrunning/domain_anchor/Initialize(mapload) + . = ..() + animate(src, alpha = 0, 10 SECONDS) + QDEL_IN(src, 10 SECONDS) diff --git a/modular_nova/modules/bitrunning/code/disks.dm b/modular_nova/modules/bitrunning/code/disks.dm index 5af4720efdab..8a3cbf9aeb47 100644 --- a/modular_nova/modules/bitrunning/code/disks.dm +++ b/modular_nova/modules/bitrunning/code/disks.dm @@ -7,6 +7,7 @@ /datum/action/cooldown/spell/shapeshift/minor_illusion, /datum/action/cooldown/spell/conjure_item/fire, /datum/action/cooldown/spell/conjure_item/water, + /datum/action/cooldown/spell/conjure/cheese, ) /obj/item/bitrunning_disk/item/tier0 @@ -70,7 +71,7 @@ /datum/orderable_item/bitrunning_tech/ability_tier0 cost_per_order = 350 purchase_path = /obj/item/bitrunning_disk/ability/tier0 - desc = "This disk contains a program that lets you cast Minor Illusion, Conjure Presents!, Produce Flame, or Produce Water." + desc = "This disk contains a program that lets you cast Minor Illusion, Summon Cheese, Produce Flame, or Produce Water." /datum/orderable_item/bitrunning_tech/item_tier0 cost_per_order = 350 @@ -81,6 +82,7 @@ . = ..() selectable_items += list( /obj/item/storage/belt/military, + /obj/item/book_of_babel, ) /obj/item/bitrunning_disk/item/tier2/Initialize(mapload) @@ -90,30 +92,41 @@ ) selectable_items += list( /obj/item/storage/toolbox/guncase/clandestine, - /obj/item/autosurgeon/syndicate/hackerman, + /obj/item/autosurgeon/syndicate/hackerman/bitrunning, /obj/item/clothing/head/helmet, /obj/item/melee/energy/sword/saber/blue, + /obj/item/shield/energy, /obj/item/storage/medkit/expeditionary/surplus, ) +/obj/item/autosurgeon/syndicate/hackerman/bitrunning + name = "hacking arm implanter" + /obj/item/bitrunning_disk/item/tier3/Initialize(mapload) . = ..() selectable_items -= list( /obj/item/gun/energy/e_gun/nuclear, ) selectable_items += list( - /obj/item/autosurgeon/syndicate/nodrop, + /obj/item/domain_anchor, + /obj/item/autosurgeon/syndicate/nodrop/bitrunning, /obj/item/gun/energy/modular_laser_rifle, /obj/item/storage/belt/holster/energy/nanite, /obj/item/minigunpack, ) +/obj/item/autosurgeon/syndicate/nodrop/bitrunning + name = "anti-drop implanter" + /obj/item/bitrunning_disk/ability/tier1/Initialize(mapload) . = ..() selectable_actions += list( /datum/action/cooldown/spell/touch/lay_on_hands, /datum/action/cooldown/spell/conjure/flare, ) + selectable_actions -= list( + /datum/action/cooldown/spell/conjure/cheese, + ) /obj/item/bitrunning_disk/ability/tier2/Initialize(mapload) . = ..() @@ -121,9 +134,13 @@ /datum/action/cooldown/adrenaline, /datum/action/cooldown/spell/charge, /datum/action/cooldown/mob_cooldown/dash, - /datum/action/cooldown/spell/touch/scream_for_me, + /datum/action/cooldown/spell/touch/scream_for_me/bitrunning, ) +/datum/action/cooldown/spell/touch/scream_for_me/bitrunning + name = "Unshackled Scream For Me" + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC + /obj/item/bitrunning_disk/ability/tier3/Initialize(mapload) . = ..() selectable_actions += list( @@ -148,13 +165,13 @@ desc = "This disk contains a program that lets you equip a luxury medipen, a pistol case, an armour vest, a helmet, an energy sword, an expeditionary medkit, or a hacker implant." /datum/orderable_item/bitrunning_tech/item_tier3 - desc = "This disk contains a program that lets you equip a Hyeseong laser rifle, a laser minigun pack, a nanite pistol holster, a dual bladed energy sword, a minibomb, or an anti-drop implanter." + desc = "This disk contains a program that lets you equip a domain connection anchor, Hyeseong laser rifle, a laser minigun pack, a nanite pistol holster, a dual bladed energy sword, a minibomb, or an anti-drop implanter." /datum/orderable_item/bitrunning_tech/ability_tier1 - desc = "This disk contains a program that lets you cast Summon Cheese, Summon Light Source, Lesser Heal, or Mending Touch." + desc = "This disk contains a program that lets you cast Summon Light Source, Lesser Heal, or Mending Touch." /datum/orderable_item/bitrunning_tech/ability_tier2 - desc = "This disk contains a program that lets you cast Fireball, Lightning Bolt, Scream For Me, Forcewall, Adrenaline Rush, Dash, or Charge Item." + desc = "This disk contains a program that lets you cast Fireball, Lightning Bolt, Unshackled Scream For Me, Forcewall, Adrenaline Rush, Dash, or Charge Item." /datum/orderable_item/bitrunning_tech/ability_tier3 desc = "This disk contains a program that lets you shapeshift into a lesser ashdrake, a polar bear, a holy juggernaut, or a holy wraith; or cast Death Loop." diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm index ab9b051b4e51..a318137dc25c 100644 --- a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm @@ -1,6 +1,8 @@ /obj/item/choice_beacon/ancient_milsim name = "early access equipment beacon" desc = "Summon a gear closet for your contributions in the early access testing. Synchronises with the current game version to give you the most up-to-date class equipment." + icon = 'modular_nova/modules/bitrunning/icons/remote.dmi' + icon_state = "delivery_dlc" company_source = "'Time Of Valor 2' development team" company_message = span_bold("Thanks, and have fun!") @@ -12,41 +14,65 @@ gear_options[initial(crate.name)] = crate return gear_options +/obj/structure/closet/crate/secure/weapon/milsim + desc = "(ToV 2 Playtester Reward) UNIF Counter-Insurgency Detachment bundle: featuring equipment provided to field operators in medium-intensity firefights.
\ + 'VCIM (Void Combat Identification Measures) camo' Skin (Alt 1/Strobeless, Opaque Glass)." + +/obj/structure/closet/crate/secure/weapon/milsim/PopulateContents() + . = ..() + new /obj/item/knife/combat(src) + new /obj/item/gun/energy/modular_laser_rifle/carbine(src) + new /obj/item/radio/headset/headset_faction(src) + /obj/structure/closet/crate/secure/weapon/milsim/after_open() qdel(src) /obj/structure/closet/crate/secure/weapon/milsim/mechanic - name = "mechanic loadout crate" + name = "mechanic (abductor toolbelt/cable coil dispenser/medHUD)" /obj/structure/closet/crate/secure/weapon/milsim/mechanic/PopulateContents() . = ..() - new /obj/item/knife/combat(src) - new /obj/item/gun/energy/modular_laser_rifle/carbine(src) - new /obj/item/mod/control/pre_equipped/responsory/milsim_mechanic(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim/mechanic(src) /obj/structure/closet/crate/secure/weapon/milsim/marksman - name = "marksman loadout crate" + name = "marksman (barricade box/throwing knife dispenser/NVG-sonar)" /obj/structure/closet/crate/secure/weapon/milsim/marksman/PopulateContents() . = ..() - new /obj/item/knife/combat(src) - new /obj/item/gun/energy/modular_laser_rifle/carbine(src) - new /obj/item/mod/control/pre_equipped/responsory/milsim_marksman(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim/marksman(src) /obj/structure/closet/crate/secure/weapon/milsim/medic - name = "medic loadout crate" + name = "medic (combat hypospray/combat hypovials dispenser/medHUD)" /obj/structure/closet/crate/secure/weapon/milsim/medic/PopulateContents() . = ..() - new /obj/item/knife/combat(src) - new /obj/item/gun/energy/modular_laser_rifle/carbine(src) - new /obj/item/mod/control/pre_equipped/responsory/milsim_medic(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim/medic(src) /obj/structure/closet/crate/secure/weapon/milsim/trapper - name = "trapper loadout crate" + name = "trapper (chameleon projector/stealth landmine dispenser/thermals)" /obj/structure/closet/crate/secure/weapon/milsim/trapper/PopulateContents() . = ..() - new /obj/item/knife/combat(src) - new /obj/item/gun/energy/modular_laser_rifle/carbine(src) - new /obj/item/mod/control/pre_equipped/responsory/milsim_trapper(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim/trapper(src) + +/obj/structure/closet/crate/secure/weapon/milsim/saboteur + name = "saboteur (Binyat implanter/EMP grenade dispenser/material scanner-mesons)" + +/obj/structure/closet/crate/secure/weapon/milsim/saboteur/PopulateContents() + . = ..() + new /obj/item/clothing/glasses/material(src) + new /obj/item/mod/control/pre_equipped/responsory/milsim/saboteur(src) + +/obj/structure/closet/crate/secure/weapon/milsim/sentinel + name = "sentinel (heavy machinegun/burger dispenser/NVG-sonar)" + +/obj/structure/closet/crate/secure/weapon/milsim/sentinel/PopulateContents() + . = ..() + new /obj/item/mod/control/pre_equipped/responsory/milsim/sentinel(src) + +/obj/structure/closet/crate/secure/weapon/milsim/trooper + name = "trooper (Sol rifle/Sol rifle magazine dispenser/NVG-sonar)" + +/obj/structure/closet/crate/secure/weapon/milsim/trooper/PopulateContents() + . = ..() + new /obj/item/mod/control/pre_equipped/responsory/milsim/trooper(src) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm index 8cda78124450..2cbace5a1536 100644 --- a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm @@ -1,30 +1,28 @@ /datum/mod_theme/responsory/ancient_milsim armor_type = /datum/armor/armor_sf_hardened -/obj/item/mod/control/pre_equipped/responsory/milsim_mechanic +/obj/item/mod/control/pre_equipped/responsory/milsim theme = /datum/mod_theme/responsory/ancient_milsim applied_cell = /obj/item/stock_parts/power_store/cell/super starting_frequency = MODLINK_FREQ_NANOTRASEN req_access = null + +/obj/item/mod/control/pre_equipped/responsory/milsim/mechanic applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/status_readout/operational, /obj/item/mod/module/jetpack, - /obj/item/mod/module/visor/meson, + /obj/item/mod/module/visor/medhud, ) default_pins = list( /obj/item/mod/module/jetpack, - /obj/item/mod/module/visor/meson, + /obj/item/mod/module/visor/medhud, ) - insignia_type = /obj/item/mod/module/insignia/engineer - additional_module = /obj/item/mod/module/dispenser/emp + insignia_type = /obj/item/mod/module/insignia/milsim_mechanic + additional_module = /obj/item/mod/module/dispenser/ancient_milsim/mechanic -/obj/item/mod/control/pre_equipped/responsory/milsim_trapper - theme = /datum/mod_theme/responsory/ancient_milsim - applied_cell = /obj/item/stock_parts/power_store/cell/super - starting_frequency = MODLINK_FREQ_NANOTRASEN - req_access = null +/obj/item/mod/control/pre_equipped/responsory/milsim/trapper applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/magnetic_harness, @@ -36,14 +34,10 @@ /obj/item/mod/module/jetpack, /obj/item/mod/module/visor/thermal, ) - insignia_type = /obj/item/mod/module/insignia/commander - additional_module = /obj/item/mod/module/dispenser/landmine + insignia_type = /obj/item/mod/module/insignia/milsim_trapper + additional_module = /obj/item/mod/module/dispenser/ancient_milsim/trapper -/obj/item/mod/control/pre_equipped/responsory/milsim_marksman - theme = /datum/mod_theme/responsory/ancient_milsim - applied_cell = /obj/item/stock_parts/power_store/cell/super - starting_frequency = MODLINK_FREQ_NANOTRASEN - req_access = null +/obj/item/mod/control/pre_equipped/responsory/milsim/marksman applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/magnetic_harness, @@ -57,14 +51,10 @@ /obj/item/mod/module/active_sonar, /obj/item/mod/module/visor/night, ) - insignia_type = /obj/item/mod/module/insignia/security - additional_module = /obj/item/mod/module/dispenser/throwing_knife + insignia_type = /obj/item/mod/module/insignia/milsim_marksman + additional_module = /obj/item/mod/module/dispenser/ancient_milsim/marksman -/obj/item/mod/control/pre_equipped/responsory/milsim_medic - theme = /datum/mod_theme/responsory/ancient_milsim - applied_cell = /obj/item/stock_parts/power_store/cell/super - starting_frequency = MODLINK_FREQ_NANOTRASEN - req_access = null +/obj/item/mod/control/pre_equipped/responsory/milsim/medic applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/magnetic_harness, @@ -76,52 +66,104 @@ /obj/item/mod/module/jetpack, /obj/item/mod/module/visor/medhud, ) - insignia_type = /obj/item/mod/module/insignia/medic - additional_module = /obj/item/mod/module/dispenser/hypospray + insignia_type = /obj/item/mod/module/insignia/milsim_medic + additional_module = /obj/item/mod/module/dispenser/ancient_milsim/medic -/obj/item/mod/module/dispenser/emp - name = "MOD EMP grenade dispenser module" - desc = "This module can create activated EMP grenades at the user's liking." - removable = FALSE - dispense_type = /obj/item/grenade/empgrenade +/obj/item/mod/control/pre_equipped/responsory/milsim/saboteur + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/status_readout/operational, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/meson, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/visor/meson, + ) + insignia_type = /obj/item/mod/module/insignia/milsim_saboteur + additional_module = /obj/item/mod/module/dispenser/ancient_milsim/saboteur -/obj/item/mod/module/dispenser/emp/on_use() - . = ..() - if(!.) - return - var/obj/item/grenade/empgrenade/grenade = . - grenade.arm_grenade(mod.wearer) - -/obj/item/mod/module/dispenser/landmine - name = "MOD landmine dispenser module" - desc = "This module can create deactivated landmines at the user's liking." - removable = FALSE - cooldown_time = 10 SECONDS - dispense_type = /obj/item/minespawner/ancient_milsim +/obj/item/mod/control/pre_equipped/responsory/milsim/sentinel + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/status_readout/operational, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/active_sonar, + /obj/item/mod/module/visor/night, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/active_sonar, + /obj/item/mod/module/visor/night, + ) + insignia_type = /obj/item/mod/module/insignia/milsim_sentinel + additional_module = /obj/item/mod/module/dispenser/ancient_milsim/sentinel -/obj/item/mod/module/dispenser/throwing_knife - name = "MOD throwing knife dispenser module" - desc = "This module can create throwing knives at the user's liking." - removable = FALSE - cooldown_time = 5 SECONDS - dispense_type = /obj/item/knife/combat/throwing +/obj/item/mod/control/pre_equipped/responsory/milsim/trooper + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/status_readout/operational, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/active_sonar, + /obj/item/mod/module/visor/night, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/active_sonar, + /obj/item/mod/module/visor/night, + ) + insignia_type = /obj/item/mod/module/insignia/milsim_trooper + additional_module = /obj/item/mod/module/dispenser/ancient_milsim/trooper -/obj/item/mod/module/dispenser/hypospray - name = "MOD custom hypospray dispenser module" - desc = "This module can create a single combat hypospray and additional cartridges at the user's liking." +/obj/item/mod/module/dispenser/ancient_milsim removable = FALSE - cooldown_time = 5 SECONDS - dispense_type = /obj/item/hypospray/mkii/deluxe/cmo/combat var/first_use = TRUE + var/new_dispense_type = /obj/item/food/burger/tofu + var/new_cooldown_time = 2 SECONDS -/obj/item/mod/module/dispenser/hypospray/on_use() +/obj/item/mod/module/dispenser/ancient_milsim/on_use() . = ..() if(first_use) first_use = FALSE - cooldown_time = 15 SECONDS - dispense_type = /obj/item/reagent_containers/cup/vial/large/ancient_milsim + cooldown_time = new_cooldown_time + dispense_type = new_dispense_type + +/obj/item/mod/module/dispenser/ancient_milsim/mechanic + name = "MOD alien tools-cable dispenser module" + desc = "This module can create set of advanced tools and additional cable coils at the user's liking." + dispense_type = /obj/item/storage/belt/military/abductor/full + cooldown_time = 5 SECONDS + new_dispense_type = /obj/item/stack/cable_coil + new_cooldown_time = 15 SECONDS + +/obj/item/mod/module/dispenser/ancient_milsim/trapper + name = "MOD chameleon projector-stealth landmines dispenser module" + desc = "This module can create a chameleon projector and additional stealth landmines at the user's liking." + dispense_type = /obj/item/chameleon + cooldown_time = 10 SECONDS + new_dispense_type = /obj/item/minespawner/ancient_milsim + new_cooldown_time = 10 SECONDS -/obj/item/hypospray/mkii/deluxe/cmo/combat +/obj/item/mod/module/dispenser/ancient_milsim/marksman + name = "MOD barricade box-throwing knives dispenser module" + desc = "This module can create a box of barricades and additional throwing knives at the user's liking." + dispense_type = /obj/item/storage/barricade + cooldown_time = 15 SECONDS + new_dispense_type = /obj/item/knife/combat/throwing + new_cooldown_time = 5 SECONDS + +/obj/item/mod/module/dispenser/ancient_milsim/medic + name = "MOD custom hypospray-hypospray vials dispenser module" + desc = "This module can create a single combat hypospray and additional cartridges at the user's liking." + dispense_type = /obj/item/hypospray/mkii/deluxe/cmo/combat/ancient_milsim + cooldown_time = 5 SECONDS + new_dispense_type = /obj/item/reagent_containers/cup/vial/large/ancient_milsim + new_cooldown_time = 15 SECONDS + +/obj/item/hypospray/mkii/deluxe/cmo/combat/ancient_milsim start_vial = /obj/item/reagent_containers/cup/vial/large/ancient_milsim /obj/item/reagent_containers/cup/vial/large/ancient_milsim @@ -134,3 +176,50 @@ /datum/reagent/medicine/coagulant = 15, /datum/reagent/medicine/c2/penthrite = 15, ) + +/obj/item/mod/module/dispenser/ancient_milsim/saboteur + name = "MOD Binyat implanter-EMP grenade dispenser module" + desc = "This module can create a single Binyat deck implanter and additional EMP grenades at the user's liking." + dispense_type = /obj/item/autosurgeon/syndicate/binyat + cooldown_time = 15 SECONDS + new_dispense_type = /obj/item/grenade/empgrenade + new_cooldown_time = 10 SECONDS + +/obj/item/autosurgeon/syndicate/binyat + starting_organ = /obj/item/organ/cyberimp/hackerman_deck + +/obj/item/mod/module/dispenser/ancient_milsim/sentinel + name = "MOD stationary machinegun-burger dispenser module" + desc = "This module can create a single disassembled heavy machinegun and additional burgers at the user's liking." + dispense_type = /obj/item/automatic_turret_folded + cooldown_time = 15 SECONDS + new_cooldown_time = 5 SECONDS + +/obj/item/mod/module/dispenser/ancient_milsim/trooper + name = "MOD Sol rifle-Sol rifle magazine dispenser module" + desc = "This module can create a single .40 Sol caliber assault rifle and additional magazines at the user's liking." + dispense_type = /obj/item/gun/ballistic/automatic/sol_rifle/evil + cooldown_time = 25 SECONDS + new_dispense_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard + new_cooldown_time = 15 SECONDS + +/obj/item/mod/module/insignia/milsim_mechanic + color = "#ff7300" + +/obj/item/mod/module/insignia/milsim_trapper + color = "#372297" + +/obj/item/mod/module/insignia/milsim_marksman + color = "#a01d1d" + +/obj/item/mod/module/insignia/milsim_medic + color = "#2fdab4" + +/obj/item/mod/module/insignia/milsim_saboteur + color = "#1eff00" + +/obj/item/mod/module/insignia/milsim_sentinel + color = "#b536c0" + +/obj/item/mod/module/insignia/milsim_trooper + color = "#7e7e7e" diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mounted_machine_gun.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mounted_machine_gun.dm new file mode 100644 index 000000000000..24dc1362ac20 --- /dev/null +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mounted_machine_gun.dm @@ -0,0 +1,40 @@ +/obj/item/automatic_turret_folded + name = "folded heavy machine gun" + desc = "A folded and unloaded heavy machine gun, ready to be deployed and used." + icon = 'modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi' + icon_state = "folded_hmg" + inhand_icon_state = "folded_hmg" + max_integrity = 250 + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + +/obj/item/automatic_turret_folded/Initialize(mapload) + . = ..() + AddComponent(/datum/component/deployable, 7 SECONDS, /obj/machinery/deployable_turret/hmg/ancient_milsim) + +/obj/machinery/deployable_turret/hmg/ancient_milsim + icon = 'modular_nova/modules/mounted_machine_gun/icons/turret.dmi' + icon_state = "mmg" + projectile_type = /obj/projectile/bullet/manned_turret/hmg/ancient_milsim + number_of_shots = 1 + cooldown_duration = 1 SECONDS + rate_of_fire = 2 + spawned_on_undeploy = /obj/item/automatic_turret_folded + +/obj/machinery/deployable_turret/hmg/ancient_milsim/checkfire(atom/targeted_atom, mob/user) + target = targeted_atom + if(target == user || target == get_turf(src)) + return + target_turf = get_turf(target) + fire_helper(user) + +/obj/projectile/bullet/manned_turret/hmg/ancient_milsim + damage = 25 + armour_penetration = 15 + light_system = OVERLAY_LIGHT + light_range = 1 + light_power = 1.4 + light_color = COLOR_SOFT_RED + ricochets_max = 4 + ricochet_chance = 30 + dismemberment = 1 diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm index 10f9920bcbe3..f2e16e64804f 100644 --- a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm @@ -5,7 +5,7 @@ cost = BITRUNNER_COST_HIGH desc = "Recreate the events of the Border War's 'hot' part-long-gone as a Solarian strike team sweeping CIN compounds; sponsored by the SolFed recreation enthusiasts. \ Multiplayer playthrough and proper preparation highly recommended." - completion_loot = list(/obj/item/stack/spacecash/c100 = 3) //Sponsored + completion_loot = list(/obj/item/stack/spacecash/c200 = 3) //Sponsored difficulty = BITRUNNER_DIFFICULTY_HIGH help_text = "The last part of this domain has a chance to be very PvP-centric. It's best if you don't come alone, and smuggle some ability and gear disks." forced_outfit = /datum/outfit/solfed_bitrun @@ -14,13 +14,6 @@ mob_modules = list(/datum/modular_mob_segment/cin_mobs) reward_points = BITRUNNER_REWARD_HIGH secondary_loot = list( - /obj/item/gun/ballistic/automatic/pistol/toy = 2, - /obj/item/clothing/under/sol_peacekeeper = 1, - /obj/item/clothing/under/syndicate/rus_army/cin_surplus/random_color = 1, - /obj/item/clothing/gloves/frontier_colonist = 2, - /obj/item/clothing/shoes/jackboots/frontier_colonist = 2, - /obj/item/storage/box/colonial_rations = 2, - /obj/item/binoculars = 1, - /obj/item/trench_tool = 1, + /obj/item/stack/spacecash/c100 = 12, /obj/item/bitrunning_disk/item/ancient_milsim = 3, ) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/syndicate_assault/ghost_spawner.dm b/modular_nova/modules/bitrunning/code/virtual_domains/syndicate_assault/ghost_spawner.dm index 4caf1944fd66..5c47ef1342c4 100644 --- a/modular_nova/modules/bitrunning/code/virtual_domains/syndicate_assault/ghost_spawner.dm +++ b/modular_nova/modules/bitrunning/code/virtual_domains/syndicate_assault/ghost_spawner.dm @@ -10,14 +10,45 @@ important_text = "Stalling for long enough will also allow us to recoup the costs. Complete denial is still preferable." random_appearance = FALSE -/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie/proc/apply_syndiename(mob/living/carbon/human/spawned_human) - var/bitrunning_alias = spawned_human.client?.prefs?.read_preference(/datum/preference/name/hacker_alias) || pick(GLOB.hacker_aliases) - spawned_human.fully_replace_character_name(spawned_human.real_name, "[bitrunning_alias]") +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie/proc/apply_pref_alias(mob/living/carbon/human/spawned_human) + var/pref_alias = spawned_human.client?.prefs?.read_preference(/datum/preference/name/hacker_alias) + spawned_human.fully_replace_character_name(spawned_human.real_name, "[pref_alias]") + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie/proc/apply_random_alias(mob/living/carbon/human/spawned_human) + var/random_alias = pick(GLOB.hacker_aliases) + spawned_human.fully_replace_character_name(spawned_human.real_name, "[random_alias]") /obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie/special(mob/living/carbon/human/spawned_human) . = ..() - apply_syndiename(spawned_human) + var/datum/action/cooldown/spell/home_network/norton = new(spawned_human) + norton.Grant(spawned_human) + apply_random_alias(spawned_human) /obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie/post_transfer_prefs(mob/living/carbon/human/spawned_human) . = ..() - apply_syndiename(spawned_human) + apply_pref_alias(spawned_human) + +/datum/action/cooldown/spell/home_network + name = "Home Network" + desc = "Makes the caster immune to many forms of practical hacks, backing themselves to the home network." + + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "bci_shield" + sound = 'sound/effects/magic/staff_animation.ogg' + cooldown_time = 10 SECONDS + spell_requirements = SPELL_REQUIRES_HUMAN + + invocation = "NOR TON" + invocation_type = INVOCATION_SHOUT + +/datum/action/cooldown/spell/home_network/is_valid_target(atom/cast_on) + return isliving(cast_on) + +/datum/action/cooldown/spell/home_network/cast(mob/living/cast_on) + . = ..() + cast_on.visible_message( + span_warning("Numerous loading bars and nano-scale hexagonal energy shields briefly cover [cast_on]!"), + span_notice("You protect yourself from foreign intrusion!"), + ) + ADD_TRAIT(cast_on, TRAIT_ANTIMAGIC, REF(src)) + Remove(cast_on) diff --git a/modular_nova/modules/bitrunning/icons/remote.dmi b/modular_nova/modules/bitrunning/icons/remote.dmi new file mode 100644 index 000000000000..e8b5dc723bcc Binary files /dev/null and b/modular_nova/modules/bitrunning/icons/remote.dmi differ diff --git a/modular_nova/modules/morenarcotics/code/thc.dm b/modular_nova/modules/morenarcotics/code/thc.dm index b08ce009f724..925ce3a02a55 100644 --- a/modular_nova/modules/morenarcotics/code/thc.dm +++ b/modular_nova/modules/morenarcotics/code/thc.dm @@ -1,8 +1,9 @@ /obj/item/food/grown/cannabis/on_grind() - . = ..() if(HAS_TRAIT(src, TRAIT_DRIED)) - grind_results = list(/datum/reagent/drug/thc/hash = 0.15*src.seed.potency) - reagents.clear_reagents() //prevents anything else from coming out + if(!reagents) + return ..() + reagents.convert_reagent(/datum/reagent/drug/thc, /datum/reagent/drug/thc/hash, 1, include_source_subtypes = FALSE) + return ..() /datum/chemical_reaction/hash required_reagents = list(/datum/reagent/drug/thc/hash = 10) diff --git a/modular_nova/modules/research/techweb/nodes/disabled-experiments.dm b/modular_nova/modules/research/techweb/nodes/disabled-experiments.dm new file mode 100644 index 000000000000..062cf5bbbf22 --- /dev/null +++ b/modular_nova/modules/research/techweb/nodes/disabled-experiments.dm @@ -0,0 +1,29 @@ +/// changes required experiments to be discount instead +/datum/techweb_node/proc/make_requirements_optional() + discount_experiments = required_experiments.Copy() + required_experiments = list() + +/datum/techweb_node/gas_compression/New() + make_requirements_optional() + return ..() + +/datum/techweb_node/selection/New() + make_requirements_optional() + return ..() + +/datum/techweb_node/parts_adv/New() + make_requirements_optional() + return ..() + +/datum/techweb_node/mech_combat/New() + make_requirements_optional() + return ..() + +/datum/techweb_node/medbay_equip_adv/New() + make_requirements_optional() + return ..() + +/datum/techweb_node/explosives/New() + make_requirements_optional() + return ..() + diff --git a/tgstation.dme b/tgstation.dme index 7fa3ac451ab2..6eece2668bf1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7230,6 +7230,7 @@ #include "modular_nova\modules\better_vox\code\vox_clothing.dm" #include "modular_nova\modules\better_vox\code\vox_species.dm" #include "modular_nova\modules\better_vox\code\vox_sprite_accessories.dm" +#include "modular_nova\modules\bitrunning\code\anchor.dm" #include "modular_nova\modules\bitrunning\code\disks.dm" #include "modular_nova\modules\bitrunning\code\flair.dm" #include "modular_nova\modules\bitrunning\code\loot.dm" @@ -7248,6 +7249,7 @@ #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mine.dm" #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mobs.dm" #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mod.dm" +#include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\mounted_machine_gun.dm" #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\outfit.dm" #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\turf.dm" #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\turret.dm" @@ -8453,6 +8455,7 @@ #include "modular_nova\modules\records_on_examine\code\record_variables.dm" #include "modular_nova\modules\records_on_examine\code\records_procs.dm" #include "modular_nova\modules\records_on_examine\code\view_exploitables.dm" +#include "modular_nova\modules\research\techweb\nodes\disabled-experiments.dm" #include "modular_nova\modules\resleeving\code\rsd_interface.dm" #include "modular_nova\modules\resleeving\code\research\resleeving_research.dm" #include "modular_nova\modules\robot_limb_detach\code\robot_limb_detach_quirk.dm"