diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm deleted file mode 100644 index 9823fd54dd2..00000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm +++ /dev/null @@ -1,277 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/plastitanium{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"b" = ( -/obj/machinery/vending/medical{ - emagged = 1 - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"c" = ( -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"d" = ( -/obj/machinery/vending/autodrobe{ - emagged = 1 - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"e" = ( -/obj/machinery/vending/coffee{ - emagged = 1 - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"f" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"g" = ( -/obj/structure/showcase{ - density = 0; - desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; - dir = 4; - icon = 'icons/mob/robots.dmi'; - icon_state = "robot_old"; - name = "Cyborg Statue"; - pixel_x = -9; - pixel_y = 2 - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"h" = ( -/obj/structure/showcase{ - density = 0; - desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; - dir = 8; - icon = 'icons/mob/robots.dmi'; - icon_state = "robot_old"; - name = "Cyborg Statue"; - pixel_x = 9; - pixel_y = 2 - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"i" = ( -/obj/structure/table/glass, -/obj/item/weapon/paper{ - name = "payment table" - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"j" = ( -/obj/machinery/vending/magivend{ - emagged = 1 - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"k" = ( -/obj/machinery/vending/sustenance, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"l" = ( -/obj/machinery/door/airlock/shuttle{ - name = "automated trading pod" - }, -/obj/structure/fans/tiny, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"m" = ( -/obj/structure/table/glass, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"n" = ( -/obj/machinery/vending/boozeomat{ - emagged = 1 - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"o" = ( -/obj/machinery/vending/sovietsoda, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"p" = ( -/obj/item/weapon/paper{ - desc = "Please leave payment on the table - The Trader"; - name = "welcome to the trading post" - }, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"q" = ( -/obj/machinery/vending/snack, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"r" = ( -/obj/machinery/vending/tool, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"s" = ( -/obj/machinery/vending/cola, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"t" = ( -/obj/machinery/vending/clothing, -/turf/open/floor/mineral/titanium/purple{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -b -c -g -i -m -g -c -q -a -"} -(3,1,1) = {" -a -c -c -c -c -c -c -c -c -a -"} -(4,1,1) = {" -a -d -c -c -c -c -c -c -r -a -"} -(5,1,1) = {" -a -c -c -c -j -n -c -c -c -a -"} -(6,1,1) = {" -a -c -c -c -k -o -c -c -c -a -"} -(7,1,1) = {" -a -e -c -c -c -c -c -c -s -a -"} -(8,1,1) = {" -a -c -c -c -c -p -c -c -c -a -"} -(9,1,1) = {" -a -f -c -h -c -c -h -c -t -a -"} -(10,1,1) = {" -a -a -a -a -l -l -a -a -a -a -"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm deleted file mode 100644 index c4f10ea6087..00000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm +++ /dev/null @@ -1,852 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/closed/mineral/volcanic/lava_land_surface, -/area/lavaland/underground) -"c" = ( -/turf/template_noop, -/area/lavaland/underground) -"d" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/underground) -"e" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/underground) -"f" = ( -/turf/open/floor/plating/lava/smooth/lava_land_surface, -/area/lavaland/underground) -"g" = ( -/turf/closed/indestructible/riveted{ - icon = 'icons/turf/walls/iron_wall.dmi'; - icon_state = "iron"; - name = "dense wall" - }, -/area/ruin/powered) -"h" = ( -/obj/structure/table, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"i" = ( -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"j" = ( -/mob/living/simple_animal/hostile/skeleton, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"k" = ( -/obj/structure/bodycontainer/morgue{ - desc = "An oddly modernized tomb, at least compared to where it currently is."; - name = "tomb" - }, -/obj/effect/mob_spawn/human/skeleton, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"l" = ( -/obj/item/weapon/grown/bananapeel, -/obj/structure/mineral_door/transparent/diamond, -/turf/open/floor/vault{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"m" = ( -/obj/item/weapon/ore/diamond, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"n" = ( -/turf/open/floor/vault{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"o" = ( -/obj/item/weapon/ore/gold, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"p" = ( -/turf/open/floor/plating/lava/smooth/lava_land_surface, -/area/ruin/powered) -"q" = ( -/obj/structure/table, -/obj/item/weapon/tome, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"r" = ( -/obj/item/weapon/grown/bananapeel, -/obj/structure/mineral_door/silver, -/turf/open/floor/vault{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"s" = ( -/obj/item/weapon/ore/bananium, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"t" = ( -/obj/item/weapon/grown/bananapeel, -/obj/structure/mineral_door/gold, -/turf/open/floor/vault{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"u" = ( -/obj/structure/table/optable/abductor{ - desc = "A strange, alien-like table for cutting up things, like people."; - name = "strange alien slab" - }, -/obj/effect/gibspawner/human, -/obj/effect/mob_spawn/human/skeleton, -/obj/item/weapon/veilrender/honkrender, -/obj/item/clothing/mask/gas/clown_hat, -/turf/open/floor/vault{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"v" = ( -/obj/structure/table, -/obj/item/weapon/spellbook/oneuse/charge, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"w" = ( -/obj/structure/bodycontainer/morgue{ - desc = "An oddly modernized tomb, at least compared to where it currently is."; - name = "tomb" - }, -/obj/effect/mob_spawn/human/skeleton{ - helmet = /obj/item/clothing/head/ushanka; - name = "russian remains"; - uniform = /obj/item/clothing/under/soviet - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"x" = ( -/obj/item/weapon/ore/uranium, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"y" = ( -/obj/item/weapon/ore/plasma, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"z" = ( -/obj/item/weapon/grown/bananapeel, -/obj/structure/mineral_door/iron, -/turf/open/floor/vault{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"A" = ( -/obj/structure/table, -/obj/item/weapon/twohanded/spear, -/obj/item/weapon/shield/riot/buckler, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) -"B" = ( -/obj/item/weapon/grown/bananapeel, -/obj/structure/mineral_door/iron, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/powered) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -b -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -d -d -e -d -b -b -d -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -d -b -b -b -e -b -b -b -b -b -e -d -d -a -a -a -a -"} -(4,1,1) = {" -a -a -a -b -a -e -d -d -b -g -g -g -g -g -g -g -g -g -b -f -f -d -a -a -a -"} -(5,1,1) = {" -a -a -a -b -b -d -d -e -b -g -k -h -j -k -j -v -w -g -b -b -f -d -a -a -a -"} -(6,1,1) = {" -a -a -b -b -b -d -f -b -g -g -j -i -i -i -i -i -j -g -b -f -f -e -d -a -a -"} -(7,1,1) = {" -a -a -b -b -b -e -b -g -g -g -g -g -r -g -r -g -g -g -g -e -b -b -b -a -a -"} -(8,1,1) = {" -a -b -b -b -g -g -g -g -g -m -n -n -n -i -n -n -n -x -g -g -b -b -b -b -b -"} -(9,1,1) = {" -a -b -b -b -g -h -i -j -g -n -m -n -n -i -n -n -x -n -g -g -g -g -g -b -b -"} -(10,1,1) = {" -a -a -b -b -g -i -k -i -g -n -i -p -p -i -p -p -i -n -g -A -A -A -g -b -b -"} -(11,1,1) = {" -a -a -c -d -g -i -i -i -g -n -p -i -p -i -p -i -p -n -g -i -i -i -g -b -b -"} -(12,1,1) = {" -a -a -b -e -g -j -i -i -l -n -p -p -n -s -n -p -p -n -z -i -j -i -B -b -b -"} -(13,1,1) = {" -a -a -b -b -g -i -k -i -g -i -i -i -s -u -s -i -i -i -g -i -i -i -g -d -d -"} -(14,1,1) = {" -a -a -b -b -g -j -i -i -l -n -p -p -n -s -n -p -p -n -z -i -j -i -B -b -b -"} -(15,1,1) = {" -a -a -b -b -g -i -i -i -g -n -p -i -p -i -p -i -p -n -g -i -i -i -g -b -b -"} -(16,1,1) = {" -a -a -b -e -g -i -k -i -g -n -i -p -p -i -p -p -i -n -g -A -A -A -g -b -b -"} -(17,1,1) = {" -a -a -b -d -g -h -i -j -g -n -o -n -n -i -n -n -y -n -g -g -g -g -g -b -b -"} -(18,1,1) = {" -a -a -b -f -g -g -g -g -g -o -n -n -n -i -n -n -n -y -g -g -b -e -b -b -b -"} -(19,1,1) = {" -a -a -b -d -b -b -d -g -g -g -g -g -t -g -t -g -g -g -g -b -e -d -d -d -d -"} -(20,1,1) = {" -a -a -a -a -b -b -e -d -g -g -k -q -i -k -i -h -k -g -b -b -d -f -d -a -a -"} -(21,1,1) = {" -a -a -a -a -a -b -b -e -d -g -j -i -j -i -j -i -j -g -b -e -d -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -b -b -b -d -g -g -g -g -g -g -g -g -g -b -b -b -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -d -b -b -f -b -b -b -b -b -e -f -b -b -b -b -b -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -d -e -b -b -d -d -b -b -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index 7046b90d9f5..56fa6ddecb1 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -795,11 +795,6 @@ d2 = 8; icon_state = "2-8" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/light/small, /obj/machinery/flasher{ id = "AI"; @@ -815,14 +810,6 @@ pixel_y = 2; req_access_txt = "16" }, -/obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, /turf/open/floor/plasteel/black, /area/turret_protected/ai) "abW" = ( @@ -833,11 +820,6 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/structure/cable{ d1 = 2; d2 = 4; diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 742c700ebb9..f10a33b75e5 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -65,13 +65,9 @@ crimes |= crime return -/datum/datacore/proc/manifest(nosleep = 0) - spawn() - if(!nosleep) - sleep(40) - for(var/mob/living/carbon/human/H in player_list) - manifest_inject(H) - return +/datum/datacore/proc/manifest() + for(var/mob/living/carbon/human/H in player_list) + manifest_inject(H) /datum/datacore/proc/manifest_modify(name, assignment) var/datum/data/record/foundrecord = find_record("name", name, data_core.general) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index daae0bed00b..0dea00071e3 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -309,6 +309,12 @@ mob/living/carbon/human/updateappearance(icon_update=1, mutcolor_update=0, mutat var/datum/mutation/human/HM = pick(good_mutations) . = HM.force_give(M) +/proc/randmutvg(mob/living/carbon/M) + if(!M.has_dna()) + return + var/datum/mutation/human/HM = pick((good_mutations) - mutations_list[HULK] - mutations_list[DWARFISM]) + . = HM.force_give(M) + /proc/randmuti(mob/living/carbon/M) if(!M.has_dna()) return diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index d73a20297da..78e963fcabf 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -126,13 +126,6 @@ cost = 0 allow_duplicates = FALSE -/datum/map_template/ruin/lavaland/ato - name = "Automated Trade Outpost" - id = "ato" - description = "A sign at the front says 'Stealing is bad.'" - suffix = "lavaland_surface_automated_trade_outpost.dmm" - cost = 5 - /datum/map_template/ruin/lavaland/ufo_crash name = "UFO Crash" id = "ufo-crash" @@ -175,14 +168,6 @@ suffix = "lavaland_surface_survivalpod.dmm" cost = 5 -/datum/map_template/ruin/lavaland/tomb - name = "Strange Outpost" - id = "tomb" - description = "A strange tomb, housing the dead of whatever strange civilization \ - lived here before. You swear you hear rattling coming from the inside." - suffix = "lavaland_surface_tomb.dmm" - cost = 10 - /datum/map_template/ruin/lavaland/pizza name = "Ruined Pizza Party" id = "pizza" diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index ed07797e2c6..bd6315d7271 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -155,7 +155,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list( else var/turf/open/floor/engine/cult/F = safepick(cultturfs) if(F) - PoolOrNew(/obj/effect/overlay/temp/cult/turf/open/floor, F) + PoolOrNew(/obj/effect/overlay/temp/cult/turf/floor, F) else // Are we in space or something? No cult turfs or // convertable turfs? diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 416e46fb9be..2081eaae4ad 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -492,7 +492,7 @@ var/list/teleport_runes = list() return var/datum/game_mode/cult/cult_mode - + if(ticker.mode.name == "cult") cult_mode = ticker.mode @@ -571,15 +571,13 @@ var/list/teleport_runes = list() mob_to_sacrifice = input(user, "Choose a corpse to sacrifice.", "Corpse to Sacrifice") as null|anything in potential_sacrifice_mobs else mob_to_sacrifice = potential_sacrifice_mobs[1] - if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, 1)) + if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, TRUE)) return if(potential_revive_mobs.len > 1) mob_to_revive = input(user, "Choose a corpse to revive.", "Corpse to Revive") as null|anything in potential_revive_mobs else - mob_to_sacrifice = potential_revive_mobs[1] - if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, 1)) - return - if(!validness_checks(mob_to_revive, user, 0)) + mob_to_revive = potential_revive_mobs[1] + if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, TRUE) || !validness_checks(mob_to_revive, user, FALSE)) return rune_in_use = 1 if(user.name == "Herbert West") diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 482ff65624f..2310d97b66e 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -30,7 +30,7 @@ var/datum/data/record/R = V var/mob/M = R.fields["reference"] if(M && M.mind) - . += M + . += M.mind /datum/objective/proc/find_target() var/list/possible_targets = list() diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 6fdd489184f..98986c7281a 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -867,3 +867,9 @@ var/real_type = pick(subtypesof(/obj/item/weapon/spellbook/oneuse)) new real_type(loc) qdel(src) + +/obj/item/weapon/spellbook/oneuse/sacredflame + spell = /obj/effect/proc_holder/spell/targeted/sacred_flame + spellname = "sacred flame" + icon_state ="booksacredflame" + desc = "Become one with the flames that burn within... and invite others to do so as well." diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 2da658b0a0a..a66e8204dd0 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -167,7 +167,7 @@ for(var/A in bad_se_blocks) setblock(H.dna.struc_enzymes, A, construct_block(0,2)) if(efficiency > 5 && prob(20)) - randmutg(H) + randmutvg(H) if(efficiency < 3 && prob(50)) var/mob/M = randmutb(H) if(ismob(M)) @@ -197,7 +197,7 @@ beginning to regenerate in a cloning pod. You will \ become conscious when it is complete." - H.hardset_dna(ui, se, H.real_name, null, mrace, features) + H.hardset_dna(ui, H.dna.struc_enzymes, H.real_name, null, mrace, features) if(H) H.faction |= factions diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index d6a4498279f..f4f33c7a40c 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -319,7 +319,8 @@ return ..() /obj/item/mecha_parts/mecha_equipment/cable_layer/Destroy() - chassis.events.clearEvent("onMove",event) + if(chassis) + chassis.events.clearEvent("onMove",event) return ..() /obj/item/mecha_parts/mecha_equipment/cable_layer/action(var/obj/item/stack/cable_coil/target) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index bb73af6b43f..654ede990a9 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -143,26 +143,9 @@ name = mimiced_atom.name appearance = mimiced_atom.appearance setDir(mimiced_atom.dir) + mouse_opacity = 0 animate(src, alpha = 0, time = duration) -/obj/effect/overlay/cult - mouse_opacity = 0 - var/atom/linked - -/obj/effect/overlay/cult/ex_act() - return FALSE - -/obj/effect/overlay/cult/Destroy() - if(linked) - linked = null - ..() - return QDEL_HINT_PUTINPOOL - -/obj/effect/overlay/cult/floor - icon = 'icons/turf/floors.dmi' - icon_state = "cult" - layer = TURF_LAYER - /obj/effect/overlay/temp/cult randomdir = 0 duration = 10 @@ -202,7 +185,7 @@ icon_state = "wallglow" layer = ABOVE_NORMAL_TURF_LAYER -/obj/effect/overlay/temp/cult/turf/open/floor +/obj/effect/overlay/temp/cult/turf/floor icon_state = "floorglow" duration = 5 diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 2cbe518d65d..b0be84a5209 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -36,9 +36,6 @@ SetLuminosity(0) /obj/item/device/flashlight/attack_self(mob/user) - if(!isturf(user.loc)) - user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities. - return 0 on = !on update_brightness(user) for(var/X in actions) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index ee261497d93..030d4493b5a 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -3,19 +3,22 @@ /obj/item/weapon/storage/box/syndicate/New() ..() switch (pickweight(list("bloodyspai" = 3, "stealth" = 3, "bond" = 1, "screwed" = 3, "sabotage" = 3, "guns" = 1, "murder" = 2, "implant" = 2, "hacker" = 2, "lordsingulo" = 2, "darklord" = 1))) - if("bloodyspai") - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/weapon/card/id/syndicate(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/device/camera_bug(src) - new /obj/item/device/multitool/ai_detect(src) - new /obj/item/device/encryptionkey/syndicate(src) - new /obj/item/weapon/reagent_containers/syringe/mulligan(src) - new /obj/item/weapon/switchblade(src) + if("bloodyspai") // 27 tc now this is more right + new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set + new /obj/item/clothing/mask/chameleon(src) // Goes with above + new /obj/item/weapon/card/id/syndicate(src) // 2 tc + new /obj/item/clothing/shoes/chameleon(src) // 2 tc + new /obj/item/device/camera_bug(src) // 1 tc + new /obj/item/device/multitool/ai_detect(src) // 1 tc + new /obj/item/device/encryptionkey/syndicate(src) // 2 tc + new /obj/item/weapon/reagent_containers/syringe/mulligan(src) // 4 tc + new /obj/item/weapon/switchblade(src) //I'll count this as 2 tc + new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals + new /obj/item/device/flashlight/emp(src) // 2 tc + new /obj/item/device/chameleon(src) // 7 tc return - if("stealth") + if("stealth") // 31 tc new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src) new /obj/item/weapon/pen/sleepy(src) new /obj/item/device/healthanalyzer/rad_laser(src) @@ -24,7 +27,7 @@ new /obj/item/clothing/glasses/thermal/syndi(src) return - if("bond") + if("bond") // 29 tc new /obj/item/weapon/gun/projectile/automatic/pistol(src) new /obj/item/weapon/suppressor(src) new /obj/item/ammo_box/magazine/m10mm(src) @@ -35,7 +38,7 @@ return - if("screwed") + if("screwed") // 29 tc new /obj/item/device/sbeacondrop/bomb(src) new /obj/item/weapon/grenade/syndieminibomb(src) new /obj/item/device/sbeacondrop/powersink(src) @@ -44,9 +47,10 @@ new /obj/item/device/encryptionkey/syndicate(src) return - if("guns") + if("guns") // 28 tc now new /obj/item/weapon/gun/projectile/revolver(src) new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/a357(src) new /obj/item/weapon/card/emag(src) new /obj/item/weapon/grenade/plastic/c4(src) new /obj/item/clothing/gloves/color/latex/nitrile(src) @@ -54,14 +58,16 @@ new /obj/item/clothing/under/suit_jacket/really_black(src) return - if("murder") + if("murder") // 28 tc now new /obj/item/weapon/melee/energy/sword/saber(src) new /obj/item/clothing/glasses/thermal/syndi(src) new /obj/item/weapon/card/emag(src) new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/device/encryptionkey/syndicate(src) + new /obj/item/weapon/grenade/syndieminibomb(src) return - if("implant") + if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? new /obj/item/weapon/implanter/freedom(src) new /obj/item/weapon/implanter/uplink(src) new /obj/item/weapon/implanter/emp(src) @@ -70,7 +76,7 @@ new /obj/item/weapon/implanter/storage(src) return - if("hacker") + if("hacker") // 26 tc new /obj/item/weapon/aiModule/syndicate(src) new /obj/item/weapon/card/emag(src) new /obj/item/device/encryptionkey/binary(src) @@ -78,14 +84,14 @@ new /obj/item/device/multitool/ai_detect(src) return - if("lordsingulo") + if("lordsingulo") // 24 tc new /obj/item/device/sbeacondrop(src) new /obj/item/clothing/suit/space/syndicate/black/red(src) new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) new /obj/item/weapon/card/emag(src) return - if("sabotage") + if("sabotage") // 26 tc now new /obj/item/weapon/grenade/plastic/c4 (src) new /obj/item/weapon/grenade/plastic/c4 (src) new /obj/item/device/doorCharge(src) @@ -93,13 +99,17 @@ new /obj/item/device/camera_bug(src) new /obj/item/device/sbeacondrop/powersink(src) new /obj/item/weapon/cartridge/syndicate(src) + new /obj/item/weapon/storage/toolbox/syndicate(src) //To actually get to those places + new /obj/item/pizzabox/bomb - if("darklord") + if("darklord") //20 tc + tk + summon item close enough for now new /obj/item/weapon/melee/energy/sword/saber(src) new /obj/item/weapon/melee/energy/sword/saber(src) new /obj/item/weapon/dnainjector/telemut/darkbundle(src) new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) new /obj/item/weapon/card/id/syndicate(src) + new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks + new /obj/item/weapon/spellbook/oneuse/summonitem(src) return /obj/item/weapon/storage/box/syndie_kit diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index eaaed69b978..f4c3fb67fb9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -174,6 +174,7 @@ new /obj/item/weapon/storage/box/evidence(src) new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/detective_scanner(src) + new /obj/item/device/flashlight/seclite(src) new /obj/item/weapon/holosign_creator/security(src) new /obj/item/weapon/reagent_containers/spray/pepper(src) new /obj/item/clothing/suit/armor/vest/det_suit(src) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index a7895b526d4..5db78340987 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -151,14 +151,17 @@ /turf/open/floor/engine/cult name = "engraved floor" icon_state = "plating" - var/obj/effect/clockwork/overlay/floor/realappearence + var/obj/effect/clockwork/overlay/floor/bloodcult/realappearence /turf/open/floor/engine/cult/New() ..() - PoolOrNew(/obj/effect/overlay/temp/cult/turf/open/floor, src) - realappearence = PoolOrNew(/obj/effect/overlay/cult/floor, src) + PoolOrNew(/obj/effect/overlay/temp/cult/turf/floor, src) + realappearence = PoolOrNew(/obj/effect/clockwork/overlay/floor/bloodcult, src) realappearence.linked = src +/obj/effect/clockwork/overlay/floor/bloodcult + icon_state = "cult" + /turf/open/floor/engine/cult/Destroy() be_removed() return ..() @@ -172,10 +175,6 @@ qdel(realappearence) realappearence = null -/turf/open/floor/engine/cult/New() - PoolOrNew(/obj/effect/overlay/temp/cult/turf/open/floor, src) - ..() - /turf/open/floor/engine/cult/narsie_act() return diff --git a/code/modules/cargo/exports/seeds.dm b/code/modules/cargo/exports/seeds.dm index 2f8da4d3537..9f5847da464 100644 --- a/code/modules/cargo/exports/seeds.dm +++ b/code/modules/cargo/exports/seeds.dm @@ -32,7 +32,5 @@ return 0 var/potDiff = (S.potency - discoveredPlants[S.type]) - if(potDiff < 1) - return round(S.rarity * S.potency / 10) - else - return round(..() * potDiff) + + return round(..() * potDiff) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index a30537fab72..7e9ab1f85c3 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -77,7 +77,7 @@ chameleon_blacklist += target.type var/list/temp_list = typesof(chameleon_type) for(var/V in temp_list - (chameleon_blacklist)) - if(istype(V, /obj/item)) + if(ispath(V, /obj/item)) var/obj/item/I = V if(initial(I.flags) & ABSTRACT) continue diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 6f0487f4836..8751493b999 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -14,9 +14,6 @@ dog_fashion = /datum/dog_fashion/head /obj/item/clothing/head/hardhat/attack_self(mob/user) - if(!isturf(user.loc)) - user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities. - return on = !on icon_state = "hardhat[on]_[item_color]" item_state = "hardhat[on]_[item_color]" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 0d49a915a2c..b4f057cacf5 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -290,8 +290,6 @@ var/mob/user = usr if(user.incapacitated()) return - if(!isturf(user.loc)) - user << "You cannot turn the light on while in this [user.loc]!" F.on = !F.on user << "You toggle the helmetlight [F.on ? "on":"off"]." diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 29a12bb8700..b7e3680b66e 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -14,9 +14,6 @@ /obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user) - if(!isturf(user.loc)) - user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities. - return on = !on icon_state = "[basestate][on]-[item_color]" user.update_inv_head() //so our mob-overlays update diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 0a09918801b..0fbd60d3b06 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -21,7 +21,7 @@ CAT_SPAGHETTI) var/datum/action/innate/crafting/button var/display_craftable_only = FALSE - var/display_compact = FALSE + var/display_compact = TRUE diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 49895449ee5..300ecc83c69 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -38,7 +38,7 @@ ruins_wizard_loadout = 1 for(var/mob/living/carbon/human/H in living_mob_list) - if(ruins_spaceworthiness && (H.z != 1 || istype(H.loc, /turf/open/space))) + if(ruins_spaceworthiness && (H.z != 1 || istype(H.loc, /turf/open/space) || isplasmaman(H))) continue //#savetheminers if(ruins_wizard_loadout && H.mind && ((H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices))) continue diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 0e58d27528d..e0500a68ee6 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -146,4 +146,4 @@ else update_mob() explosion(src.loc,-1,-1,2, flame_range = 5) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 650d81da7d1..e2af04e96cb 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -473,7 +473,7 @@ if(2) new /obj/item/weapon/lava_staff(src) if(3) - new /obj/item/weapon/spellbook/oneuse/fireball(src) + new /obj/item/weapon/spellbook/oneuse/sacredflame(src) new /obj/item/weapon/gun/magic/wand/fireball(src) if(4) new /obj/item/weapon/dragons_blood(src) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 071314025e0..a0866e0ad08 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -46,6 +46,7 @@ new /obj/item/weapon/gun/energy/kinetic_accelerator(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/weapon/survivalcapsule(src) + new /obj/item/device/assault_pod/mining(src) /**********************Shuttle Computer**************************/ @@ -505,30 +506,51 @@ /area/shuttle/auxillary_base name = "Auxillary Base" - + luminosity = 0 //Lighting gets lost when it lands anyway /obj/machinery/computer/shuttle/auxillary_base - name = "auxillary base launch control" + name = "auxillary base management console" icon = 'icons/obj/terminals.dmi' icon_state = "dorm_available" shuttleId = "colony_drop" + desc = "Allows a deployable expedition base to be dropped from the station to a designated mining location. It can also \ +interface with the mining shuttle at the landing site if a mobile beacon is also deployed." + var/launch_warning = TRUE + req_access = list(access_heads) possible_destinations = null clockwork = TRUE + var/obj/item/device/gps/internal/base/locator + +/obj/machinery/computer/shuttle/auxillary_base/New(location, obj/item/weapon/circuitboard/computer/shuttle/C) + ..() + locator = new /obj/item/device/gps/internal/base(src) /obj/machinery/computer/shuttle/auxillary_base/Topic(href, href_list) if(href_list["move"]) - if(z != ZLEVEL_STATION) + if(z != ZLEVEL_STATION && shuttleId == "colony_drop") usr << "You can't move the base again!" return 0 + if(launch_warning) + say("Launch sequence activated! Prepare for drop!") + playsound(loc, 'sound/machines/warning-buzzer.ogg', 70, 0) + launch_warning = FALSE + feedback_add_details("colonies_dropped") //Number of times a base has been dropped! ..() +/obj/machinery/computer/shuttle/auxillary_base/proc/set_mining_mode() + if(z == ZLEVEL_MINING) //The console switches to controlling the mining shuttle once landed. + req_access = list() + shuttleId = "mining" //The base can only be dropped once, so this gives the console a new purpose. + possible_destinations = "mining_home;mining_away;landing_zone_dock" + /obj/item/device/assault_pod/mining name = "Landing Field Designator" icon_state = "gangtool-purple" item_state = "electronic" icon = 'icons/obj/device.dmi' desc = "Deploy to designate the landing zone of the auxillary base." + w_class = 2 shuttle_id = "colony_drop" var/setting = FALSE var/no_restrictions = FALSE //Badmin variable to let you drop the colony ANYWHERE. @@ -546,7 +568,7 @@ if(T.z != ZLEVEL_MINING) user << "Wouldn't do much good dropping a mining base away from the mining area!" return - var/colony_radius = max(width, height)/2 + var/colony_radius = max(width, height)*0.5 var/list/area_counter = get_areas_in_range(colony_radius, T) if(area_counter.len > 1) //Avoid smashing ruins unless you are inside a really big one user << "Unable to acquire a targeting lock. Find an area clear of stuctures or entirely within one." @@ -562,7 +584,7 @@ var/obj/docking_port/stationary/landing_zone = new /obj/docking_port/stationary(T) landing_zone.id = "colony_drop(\ref[src])" - landing_zone.name = "Landing Zone" + landing_zone.name = "Landing Zone ([T.x], [T.y])" landing_zone.dwidth = dwidth landing_zone.dheight = dheight landing_zone.width = width @@ -573,7 +595,7 @@ for(var/obj/machinery/computer/shuttle/S in machines) if(S.shuttleId == shuttle_id) - S.possible_destinations = "[landing_zone.id]" + S.possible_destinations += "[landing_zone.id];" //Serves as a nice mechanic to people get ready for the launch. minor_announce("Auxiliary base landing zone coordinates locked in for [get_area(user)]. Launch command now available!") @@ -587,9 +609,6 @@ no_restrictions = TRUE -/area/shuttle/auxillary_base - name = "Auxillary Base" - /obj/docking_port/mobile/auxillary_base name = "auxillary base" id = "colony_drop" @@ -603,14 +622,16 @@ /obj/structure/mining_shuttle_beacon name = "mining shuttle beacon" + desc = "A bluespace beacon calibrated to mark a landing spot for the mining shuttle when deployed near the auxillary mining base." anchored = 0 density = 0 var/shuttle_ID = "landing_zone_dock" icon = 'icons/obj/objects.dmi' - icon_state = "miningbeacon" //Temp until proper sprite + icon_state = "miningbeacon" var/obj/docking_port/stationary/Mport //Linked docking port for the mining shuttle pressure_resistance = 200 //So it does not get blown into lava. var/anti_spam_cd = 0 //The linking process might be a bit intensive, so this here to prevent over use. + var/console_range = 15 //Wifi range of the beacon to find the aux base console /obj/structure/mining_shuttle_beacon/attack_hand(mob/user) if(anchored) @@ -629,11 +650,10 @@ if(landing_spot.z != ZLEVEL_MINING) user << "This device is only to be used in a mining zone." return - - if(!locate(/obj/machinery/computer/shuttle/auxillary_base) in view(src,15)) - user << "The aux base console must be within view in order to interface." - return //It does not really interface with the base console, it just needs to be near. - + var/obj/machinery/computer/shuttle/auxillary_base/aux_base_console = locate(/obj/machinery/computer/shuttle/auxillary_base) in machines + if(!aux_base_console || get_dist(landing_spot, aux_base_console) > console_range) + user << "The auxillary base's console must be within [console_range] meters in order to interface." + return //Needs to be near the base to serve as its dock and configure it to control the mining shuttle. //Mining shuttles may not be created equal, so we find the map's shuttle dock and size accordingly. @@ -646,7 +666,7 @@ Mport = new(landing_spot) Mport.id = "landing_zone_dock" - Mport.name = "landing zone dock" + Mport.name = "auxillary base landing site" Mport.dwidth = SM.dwidth Mport.dheight = SM.dheight Mport.width = SM.width @@ -685,7 +705,8 @@ qdel(Mport) return - user << "Mining shuttle calibration successful!" + aux_base_console.set_mining_mode() //Lets the colony park the shuttle there, now that it has a dock. + user << "Mining shuttle calibration successful! Shuttle interface available at base console." anchored = 1 //Locks in place to mark the landing zone. playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 4a70f021712..fdf5215ebc3 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -242,8 +242,10 @@ if(assess_patient(H)) last_found = world.time if((last_newpatient_speak + 300) < world.time) //Don't spam these messages! - var/message = pick("Hey, [H.name]! Hold on, I'm coming.","Wait [H.name]! I want to help!","[H.name], you appear to be injured!") + var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/mcoming.ogg',"Wait [H.name]! I want to help!" = 'sound/voice/mhelp.ogg',"[H.name], you appear to be injured!" = 'sound/voice/minjured.ogg') + var/message = pick(messagevoice) speak(message) + playsound(loc, messagevoice[message], 50, 0) last_newpatient_speak = world.time return H else @@ -275,8 +277,10 @@ if(!patient) if(!shut_up && prob(1)) - var/message = pick("Radar, put a mask on!","There's always a catch, and it's the best there is.","I knew it, I should've been a plastic surgeon.","What kind of medbay is this? Everyone's dropping like dead flies.","Delicious!") + var/list/messagevoice = list("Radar, put a mask on!" = 'sound/voice/mradar.ogg',"There's always a catch, and I'm the best there is." = 'sound/voice/mcatch.ogg',"I knew it, I should've been a plastic surgeon." = 'sound/voice/msurgeon.ogg',"What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/mflies.ogg',"Delicious!" = 'sound/voice/mdelicious.ogg') + var/message = pick(messagevoice) speak(message) + playsound(loc, messagevoice[message], 50, 0) var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE) //If in stationary mode, scan range is limited to adjacent patients. patient = scan(/mob/living/carbon/human, oldpatient, scan_range) oldpatient = patient @@ -398,8 +402,10 @@ return if(C.stat == 2) - var/death_message = pick("No! NO!","Live, damnit! LIVE!","I...I've never lost a patient before. Not today, I mean.") - speak(death_message) + var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/mno.ogg',"Live, damnit! LIVE!" = 'sound/voice/mlive.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/mlost.ogg') + var/message = pick(messagevoice) + speak(message) + playsound(loc, messagevoice[message], 50, 0) oldpatient = patient soft_reset() return @@ -447,8 +453,10 @@ break if(!reagent_id) //If they don't need any of that they're probably cured! - var/message = pick("All patched up!","An apple a day keeps me away.","Feel better soon!") + var/list/messagevoice = list("All patched up!" = 'sound/voice/mpatchedup.ogg',"An apple a day keeps me away." = 'sound/voice/mapple.ogg',"Feel better soon!" = 'sound/voice/mfeelbetter.ogg') + var/message = pick(messagevoice) speak(message) + playsound(loc, messagevoice[message], 50, 0) bot_reset() return else @@ -508,6 +516,9 @@ if(prob(50)) new /obj/item/robot_parts/l_arm(Tsec) + if(emagged && prob(25)) + playsound(loc, 'sound/voice/minsult.ogg', 50, 0) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index d7758c60a73..6064d51db0e 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -115,7 +115,7 @@ var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") family = list() if(!dead) - for(var/mob/living/simple_animal/pet/cat/C in mob_list) + for(var/mob/living/simple_animal/pet/cat/kitten/C in mob_list) if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats continue if(C.type in family) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index b10b52bec08..0da855f44da 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -135,6 +135,9 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() anger_modifier = Clamp(((maxHealth - health)/50),0,20) ranged_cooldown = world.time + ranged_cooldown_time + if(swooping) + fire_rain() + return if(prob(15 + anger_modifier) && !client) if(health < maxHealth/2) @@ -142,7 +145,7 @@ Difficulty: Medium else fire_rain() - else if(prob(10+anger_modifier) && !client && !swooping) + else if(prob(10+anger_modifier) && !client) if(health > maxHealth/2) addtimer(src, "swoop_attack", 0) else diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index ff698c1c2dc..40fe0f36a46 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -165,3 +165,9 @@ //Behavior for magazines /obj/item/ammo_box/magazine/proc/ammo_count() return stored_ammo.len + +/obj/item/ammo_box/magazine/proc/empty_magazine() + var/turf_mag = get_turf(src) + for(var/obj/item/ammo in stored_ammo) + ammo.forceMove(turf_mag) + stored_ammo -= ammo \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 079b00aa0c5..03df590ca0a 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -319,8 +319,6 @@ obj/item/weapon/gun/proc/newshot() return var/mob/living/carbon/human/user = usr - if(!isturf(user.loc)) - user << "You cannot turn the light on while in this [user.loc]!" F.on = !F.on user << "You toggle the gunlight [F.on ? "on":"off"]." diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm new file mode 100644 index 00000000000..4ed0fac5829 --- /dev/null +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -0,0 +1,97 @@ +/obj/item/weapon/gun/projectile/bow + name = "bow" + desc = "A sturdy bow made out of wood and reinforced with iron." + icon_state = "bow_unloaded" + item_state = "bow" + fire_sound = 'sound/weapons/grenadelaunch.ogg' + mag_type = /obj/item/ammo_box/magazine/internal/bow + flags = HANDSLOW + weapon_weight = WEAPON_HEAVY + var/draw_sound = 'sound/weapons/draw_bow.ogg' + var/ready_to_fire = 0 + var/slowdown_when_ready = 2 + +/obj/item/weapon/gun/projectile/bow/update_icon() + if(magazine.ammo_count() && !ready_to_fire) + icon_state = "bow_loaded" + else if(ready_to_fire) + icon_state = "bow_firing" + slowdown = slowdown_when_ready + else + icon_state = initial(icon_state) + slowdown = initial(slowdown) + +/obj/item/weapon/gun/projectile/bow/dropped(mob/user) + if(magazine && magazine.ammo_count()) + magazine.empty_magazine() + ready_to_fire = FALSE + update_icon() + +/obj/item/weapon/gun/projectile/bow/attack_self(mob/living/user) + if(!ready_to_fire && magazine.ammo_count()) + ready_to_fire = TRUE + playsound(user, draw_sound, 100, 1) + update_icon() + else + ready_to_fire = FALSE + update_icon() + +/obj/item/weapon/gun/projectile/bow/attackby(obj/item/A, mob/user, params) + var/num_loaded = magazine.attackby(A, user, params, 1) + if(num_loaded) + user << "You ready \the [A] into \the [src]." + update_icon() + chamber_round() + +/obj/item/weapon/gun/projectile/bow/can_shoot() + . = ..() + if(!ready_to_fire) + return FALSE + +/obj/item/weapon/gun/projectile/bow/shoot_with_empty_chamber(mob/living/user as mob|obj) + return + +/obj/item/weapon/gun/projectile/bow/process_chamber(eject_casing = 0, empty_chamber = 1) + . = ..() + ready_to_fire = FALSE + update_icon() + +// ammo +/obj/item/ammo_box/magazine/internal/bow + name = "bow internal magazine" + ammo_type = /obj/item/ammo_casing/caseless/arrow + caliber = "arrow" + max_ammo = 1 + + +/obj/item/projectile/bullet/reusable/arrow + name = "arrow" + icon_state = "arrow" + ammo_type = /obj/item/ammo_casing/caseless/arrow + range = 10 + damage = 25 + damage_type = BRUTE + +/obj/item/ammo_casing/caseless/arrow + name = "arrow" + icon_state = "arrow" + force = 10 + sharpness = IS_SHARP + projectile_type = /obj/item/projectile/bullet/reusable/arrow + caliber = "arrow" + +//quiver +/obj/item/weapon/storage/backpack/quiver + name = "quiver" + desc = "A quiver for holding arrows." + icon_state = "quiver" + item_state = "quiver" + storage_slots = 20 + can_hold = list( + /obj/item/ammo_casing/caseless/arrow + ) + +/obj/item/weapon/storage/backpack/quiver/full/New() + ..() + for(var/i in 1 to storage_slots) + new /obj/item/ammo_casing/caseless/arrow(src) \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 70141a7e14d..876c43fa4b6 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -222,10 +222,10 @@ name = "Nutriment pump implant" desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." id = "ci-nutriment" - req_tech = list("materials" = 5, "powerstorage" = 6, "biotech" = 5) + req_tech = list("materials" = 3, "powerstorage" = 4, "biotech" = 3) build_type = PROTOLATHE | MECHFAB construction_time = 40 - materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 500) + materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 500) build_path = /obj/item/organ/cyberimp/chest/nutriment category = list("Misc", "Medical Designs") @@ -233,7 +233,7 @@ name = "Nutriment pump implant PLUS" desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." id = "ci-nutrimentplus" - req_tech = list("materials" = 5, "powerstorage" = 6, "biotech" = 6) + req_tech = list("materials" = 5, "powerstorage" = 4, "biotech" = 4) build_type = PROTOLATHE | MECHFAB construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_GOLD = 500, MAT_URANIUM = 750) @@ -244,10 +244,10 @@ name = "Reviver implant" desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" id = "ci-reviver" - req_tech = list("materials" = 5, "programming" = 4, "biotech" = 8) + req_tech = list("materials" = 5, "programming" = 4, "biotech" = 5) build_type = PROTOLATHE | MECHFAB construction_time = 60 - materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 500, MAT_URANIUM = 1000, MAT_DIAMOND = 2000) + materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 300, MAT_URANIUM = 500) build_path = /obj/item/organ/cyberimp/chest/reviver category = list("Misc", "Medical Designs") diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index d774c4df317..78790328ea3 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -385,3 +385,24 @@ playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1) C.spin(6,1) ..(targets, user, 3) + +/obj/effect/proc_holder/spell/targeted/sacred_flame + name = "Sacred Flame" + desc = "Makes everyone around you more flammable, and lights yourself on fire." + charge_max = 60 + clothes_req = 0 + invocation = "FI'RAN DADISKO" + invocation_type = "shout" + max_targets = 0 + range = 6 + include_user = 1 + selection_type = "view" + action_icon_state = "sacredflame" + sound = "sound/magic/Fireball.ogg" + +/obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr) + for(var/mob/living/L in targets) + L.adjust_fire_stacks(20) + if(isliving(user)) + var/mob/living/U = user + U.IgniteMob() \ No newline at end of file diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 2e1d1677973..b977b039dff 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -14,7 +14,7 @@ var/synthesizing = 0 var/poison_amount = 5 slot = "stomach" - origin_tech = "materials=4;powerstorage=5;biotech=4" + origin_tech = "materials=2;powerstorage=2;biotech=2" /obj/item/organ/cyberimp/chest/nutriment/on_life() if(synthesizing) @@ -41,14 +41,14 @@ implant_color = "#006607" hunger_threshold = NUTRITION_LEVEL_HUNGRY poison_amount = 10 - origin_tech = "materials=4;powerstorage=5;biotech=5" + origin_tech = "materials=4;powerstorage=3;biotech=3" /obj/item/organ/cyberimp/chest/reviver name = "Reviver implant" desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" icon_state = "chest_implant" implant_color = "#AD0000" - origin_tech = "materials=5;programming=4;biotech=6" + origin_tech = "materials=5;programming=4;biotech=4" slot = "heartdrive" var/revive_cost = 0 var/reviving = 0 diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index 4c8f6125d6d..52c67830aa9 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -119,6 +119,10 @@ var/list/GPS_list = list() gpstag = "MINER" desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." +/obj/item/device/gps/internal/base + gpstag = "NT_AUX" + desc = "A homing signal from Nanotrasen's mining base." + /obj/item/device/gps/visible_debug name = "visible GPS" gpstag = "ADMIN" diff --git a/html/changelog.html b/html/changelog.html index 7cefd0ea105..c19cac99a9d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,36 @@ -->