diff --git a/aurorastation.dme b/aurorastation.dme
index 53831e2a939..c8110c9fc86 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -674,7 +674,6 @@
#include "code\game\gamemodes\technomancer\spells\dispel.dm"
#include "code\game\gamemodes\technomancer\spells\energy_siphon.dm"
#include "code\game\gamemodes\technomancer\spells\flame_tongue.dm"
-#include "code\game\gamemodes\technomancer\spells\gambit.dm"
#include "code\game\gamemodes\technomancer\spells\illusion.dm"
#include "code\game\gamemodes\technomancer\spells\instability_tap.dm"
#include "code\game\gamemodes\technomancer\spells\mark_recall.dm"
diff --git a/code/_helpers/logging/debug.dm b/code/_helpers/logging/debug.dm
index a3ff7e583a4..fd8919db583 100644
--- a/code/_helpers/logging/debug.dm
+++ b/code/_helpers/logging/debug.dm
@@ -14,7 +14,7 @@
if(!C.prefs) //This is to avoid null.toggles runtime error while still initialyzing players preferences
return
if(C.prefs.toggles & CHAT_DEBUGLOGS)
- to_chat(C, "DEBUG: [text]")
+ to_chat(C, "DEBUG: [text]")
send_gelf_log(short_message = text, long_message = "[time_stamp()]: [text]", level = level, category = "DEBUG")
/// Logging for loading and caching assets
diff --git a/code/game/gamemodes/technomancer/spells/gambit.dm b/code/game/gamemodes/technomancer/spells/gambit.dm
deleted file mode 100644
index ea3a71eef10..00000000000
--- a/code/game/gamemodes/technomancer/spells/gambit.dm
+++ /dev/null
@@ -1,117 +0,0 @@
-/datum/technomancer/spell/gambit
- name = "Gambit"
- desc = "This function causes you to receive a random function, including those which you haven't purchased."
-// enhancement_desc = "Makes results less random and more biased towards what the function thinks you need in your current situation."
- enhancement_desc = "Instead of a purely random spell, it will give you a \"random\" spell."
- spell_power_desc = "Makes certain rare functions possible to acquire via Gambit which cannot be obtained otherwise, if above 100%."
- ability_icon_state = "tech_gambit"
- cost = 50
- obj_path = /obj/item/spell/gambit
- category = UTILITY_SPELLS
-
-/var/global/list/all_technomancer_gambit_spells = subtypesof(/obj/item/spell) - list(
- /obj/item/spell/gambit,
- /obj/item/spell/projectile,
- /obj/item/spell/aura,
- /obj/item/spell/insert,
- /obj/item/spell/spawner,
- /obj/item/spell/summon,
- /obj/item/spell/modifier)
-
-/obj/item/spell/gambit
- name = "gambit"
- desc = "Do you feel lucky?"
- icon_state = "gambit"
- cast_methods = CAST_USE
- aspect = ASPECT_UNSTABLE
-
-/obj/item/spell/gambit/on_use_cast(mob/living/carbon/human/user)
- . = ..()
- if(pay_energy(200))
- adjust_instability(3)
- if(check_for_scepter())
- give_new_spell(biased_random_spell())
- else
- give_new_spell(random_spell())
- qdel(src)
-
-/obj/item/spell/gambit/proc/give_new_spell(var/spell_type)
- owner.drop_from_inventory(src, null)
- owner.place_spell_in_hand(spell_type)
-
-// Gives a random spell.
-/obj/item/spell/gambit/proc/random_spell()
- var/list/potential_spells = all_technomancer_gambit_spells.Copy()
- return pick(potential_spells)
-
-// Gives a "random" spell.
-/obj/item/spell/gambit/proc/biased_random_spell()
- var/list/potential_spells = list()
-
- // First the spell will concern itself with the health of the technomancer.
- if(prob(owner.getBruteLoss() + owner.getBruteLoss() * 2)) // Having 20 brute means a 40% chance of being added to the pool.
- if(!owner.isSynthetic())
- potential_spells |= /obj/item/spell/modifier/mend_life
- else
- potential_spells |= /obj/item/spell/modifier/mend_synthetic
-
- // Second, the spell will try to prepare the technomancer for threats.
- var/hostile_mobs = 0 // Counts how many hostile mobs. Higher numbers make it more likely for AoE spells to be chosen.
-
- for(var/mob/living/L in view(owner))
- // Spiders, carp... bears.
- if(istype(L, /mob/living/simple_animal))
- var/mob/living/simple_animal/SM = L
- if(!is_ally(SM))
- hostile_mobs++
- if(SM.summoned || SM.supernatural) // Our creations might be trying to kill us.
- potential_spells |= /obj/item/spell/abjuration
-
- // Always assume borgs are hostile.
- if(istype(L, /mob/living/silicon/robot))
- if(!istype(L, /mob/living/silicon/robot/drone)) // Drones are okay, however.
- hostile_mobs++
- potential_spells |= /obj/item/spell/projectile/ionic_bolt
-
- // Finally we get to humanoids.
- if(istype(L, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = L
- if(is_ally(H)) // Don't get scared by our apprentice.
- continue
-
- for(var/obj/item/I in list(H.l_hand, H.r_hand))
- // Guns are scary.
- if(istype(I, /obj/item/gun)) // Toy guns will count as well but oh well.
- hostile_mobs++
- continue
- // Strong melee weapons are scary as well.
- else if(I.force >= 15)
- hostile_mobs++
- continue
-
- if(hostile_mobs)
- potential_spells |= /obj/item/spell/shield
- potential_spells |= /obj/item/spell/reflect
- potential_spells |= /obj/item/spell/targeting_matrix
- potential_spells |= /obj/item/spell/warp_strike
-
- if(hostile_mobs >= 3) // Lots of baddies, give them AoE.
- potential_spells |= /obj/item/spell/spawner/fire_blast
- potential_spells |= /obj/item/spell/condensation
- potential_spells |= /obj/item/spell/aura/frost
- else
- potential_spells |= /obj/item/spell/projectile/beam
- potential_spells |= /obj/item/spell/projectile/overload
- potential_spells |= /obj/item/spell/projectile/force_missile
- potential_spells |= /obj/item/spell/projectile/lightning
-
- // Third priority is recharging the core.
- if(core.energy / core.max_energy <= 0.5)
- potential_spells |= /obj/item/spell/energy_siphon
- potential_spells |= /obj/item/spell/instability_tap
-
- // Fallback method in case nothing gets added.
- if(!potential_spells.len)
- potential_spells = all_technomancer_gambit_spells.Copy()
-
- return pick(potential_spells)
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index e936aa2a914..0d0a5c62c68 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -133,6 +133,11 @@
"[user.name] unbuckles [MA.name].", \
SPAN_NOTICE("You were unbuckled from [src] by [user.name]."),\
SPAN_NOTICE("You hear metal clanking."))
+ else if(isliving(user) && isobj(MA))
+ user.visible_message(\
+ "[user] unbuckles \the [MA] from [src].",\
+ SPAN_NOTICE("You unbuckle \the [MA] from [src]."),\
+ SPAN_NOTICE("You hear metal clanking."))
else
MA.visible_message(\
"[MA.name] unbuckles themselves.",\
diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
index ac1c104602f..38dd31ba60a 100644
--- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
+++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
@@ -5,7 +5,7 @@
program_key_icon_state = "teal_key"
extended_desc = "This program connects to life signs monitoring system to provide basic information on crew health."
required_access_run = access_medical
- required_access_download = access_cmo
+ required_access_download = access_medical
requires_ntnet = TRUE
network_destination = "crew lifesigns monitoring system"
size = 11
diff --git a/code/modules/psionics/complexus/complexus_process.dm b/code/modules/psionics/complexus/complexus_process.dm
index 3cfa4250d5d..561d66404d1 100644
--- a/code/modules/psionics/complexus/complexus_process.dm
+++ b/code/modules/psionics/complexus/complexus_process.dm
@@ -29,7 +29,7 @@
else if(psionic_rank == PSI_RANK_HARMONIOUS)
aura_color = "#64c464"
- if(psionic_rank > PSI_RANK_SENSITIVE && last_psionic_rank < PSI_RANK_HARMONIOUS)
+ if(psionic_rank > PSI_RANK_SENSITIVE && (get_rank() != last_psionic_rank))
switch(psionic_rank)
if(PSI_RANK_HARMONIOUS)
psi_points = PSI_POINTS_HARMONIOUS
@@ -37,11 +37,13 @@
psi_points = PSI_POINTS_APEX
if(PSI_RANK_LIMITLESS)
psi_points = PSI_POINTS_LIMITLESS
+ else
+ psi_points = 0
/// We had special abilities unique to our level, so get rid of 'em.
if(last_psionic_rank > PSI_RANK_HARMONIOUS)
wipe_user_abilities()
- if(last_psionic_rank > PSI_RANK_SENSITIVE && psionic_rank < PSI_RANK_HARMONIOUS)
+ if(last_psionic_rank > PSI_RANK_SENSITIVE && psionic_rank < PSI_RANK_HARMONIOUS && (get_rank() != last_psionic_rank))
psi_points = 0
wipe_user_abilities()
diff --git a/html/changelogs/mattatlas-cyberhex.yml b/html/changelogs/mattatlas-cyberhex.yml
new file mode 100644
index 00000000000..32f3802b0bf
--- /dev/null
+++ b/html/changelogs/mattatlas-cyberhex.yml
@@ -0,0 +1,45 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: MattAtlas
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "Fixed debug logs not being tagged as debug in the chat."
+ - bugfix: "Fixed relogging giving you more psi-points."
+ - bugfix: "Fixed medborgs being unable to download suit sensors."
+ - rscdel: "Removed the Gambit technomancer spell as it was a hacky and now buggy implementation."
+ - bugfix: "Fixed roller bags unbuckling themselves."