From 2bf91a4b2e7ad5bcd4e85b7a221a88641fa9c4dc Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 9 Jan 2016 23:54:29 -0500 Subject: [PATCH 1/5] Adding back some stuff...but still need to work some shit out --- code/game/gamemodes/traitor/traitor.dm | 40 ++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index df18240e7bf..e95deef10be 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -337,15 +337,45 @@ traitor_mob.mind.store_memory("Potential Collaborator: [M.real_name]") /datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind) - //var/ref = "\ref[traitor_mind]" var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO] - tatorhud.join_solo_hud(traitor_mind.current) - set_antag_hud(traitor_mind.current, "hudsyndicate") + var/ref = "\ref[traitor_mind]" + if(ref in implanter) + if(traitor_mind.current) + tatorhud.join_solo_hud(traitor_mind.current) + set_antag_hud(traitor_mind.current, "hudsyndicate") + for(var/headref in implanter) + for(var/datum/mind/t_mind in implanter[headref]) + var/datum/mind/head = locate(headref) + if(head) + if(head.current) + if(head.current.client) + tatorhud.join_solo_hud(head.current) + set_antag_hud(head.current, "hudsyndicate") + if(t_mind.current) + if(t_mind.current.client) + tatorhud.join_solo_hud(t_mind.current) + set_antag_hud(t_mind.current, "hudsyndicate") /datum/game_mode/proc/update_traitor_icons_removed(datum/mind/traitor_mind) var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO] - tatorhud.leave_hud(traitor_mind.current) - set_antag_hud(traitor_mind.current, null) + for(var/headref in implanter) + var/datum/mind/head = locate(headref) + for(var/datum/mind/t_mind in implanter[headref]) + if(t_mind.current) + if(t_mind.current.client) + tatorhud.leave_hud(t_mind.current) + set_antag_hud(t_mind.current, null) + + if(head) + //log_to_dd("found [head.name]") + if(head.current) + if(head.current.client) + tatorhud.leave_hud(head.current) + set_antag_hud(head.current, null) + if(traitor_mind.current.client) + tatorhud.leave_hud(traitor_mind.current) + set_antag_hud(traitor_mind.current, null) + /datum/game_mode/proc/remove_traitor_mind(datum/mind/traitor_mind, datum/mind/head) //var/list/removal From 602d4c1c2f49b208dd3ed6e44b86f08dcd77f8ee Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 12 Jan 2016 16:22:42 -0500 Subject: [PATCH 2/5] what am i even doing... --- code/datums/hud.dm | 8 +++- code/game/gamemodes/antag_hud.dm | 27 +++++++++++ code/game/gamemodes/traitor/traitor.dm | 44 ++++-------------- code/game/gamemodes/vampire/vampire_powers.dm | 7 +++ .../objects/items/weapons/implants/implant.dm | 9 +++- html/changelogs/fethas.yml | 36 ++++++++++++++ icons/mob/hud.dmi | Bin 11974 -> 12050 bytes 7 files changed, 95 insertions(+), 36 deletions(-) create mode 100644 html/changelogs/fethas.yml diff --git a/code/datums/hud.dm b/code/datums/hud.dm index f25d18ab255..e01ceb3e295 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -71,7 +71,13 @@ var/datum/atom_hud/huds = list( \ // for(var/datum/gang/G in ticker.mode.gangs) // gang_huds += G.ganghud - for(var/datum/atom_hud/hud in huds)//|gang_huds)) + var/serv_huds = list()//mindslaves and/or vampire thralls + if(ticker.mode) + for(var/datum/mindslaves/serv in (ticker.mode.vampires | ticker.mode.traitors)) + serv_huds += serv.thrallhud + + + for(var/datum/atom_hud/hud in (huds|serv_huds))//|gang_huds)) if(src in hud.hudusers) hud.add_hud_to(src) diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index facf096b610..b021a1b57e0 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -74,3 +74,30 @@ for(var/datum/atom_hud/data/hud in huds) if(current in hud.hudusers) hud.remove_hud_from(current) + + +///Master Servent Datum Sytems,Based on TG Gang system// + +/datum/mindslaves + var/name = "ERROR" + var/list/datum/mind/masters = list() + var/list/datum/mind/serv = list() + var/datum/atom_hud/antag/thrallhud + var/icontype + +/datum/mindslaves/New(loc,mastername) + + name = mastername + thrallhud = new() + +/datum/mindslaves/proc/add_serv_hud(datum/mind/serv_mind,var/icon) + thrallhud.join_hud(serv_mind.current) + icontype = icon + if(serv_mind in masters) + world << "Master Added" + var/I = image('icons/mob/hud.dmi', loc = serv_mind.current, icon_state = "hud[icontype]") + serv_mind.current.client.images += I + else + var/I = image('icons/mob/hud.dmi', loc = serv_mind.current, icon_state = "hud[icontype]") + serv_mind.current.client.images += I + diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index e95deef10be..80e941715bc 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -338,43 +338,14 @@ /datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind) var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO] - var/ref = "\ref[traitor_mind]" - if(ref in implanter) - if(traitor_mind.current) - tatorhud.join_solo_hud(traitor_mind.current) - set_antag_hud(traitor_mind.current, "hudsyndicate") - for(var/headref in implanter) - for(var/datum/mind/t_mind in implanter[headref]) - var/datum/mind/head = locate(headref) - if(head) - if(head.current) - if(head.current.client) - tatorhud.join_solo_hud(head.current) - set_antag_hud(head.current, "hudsyndicate") - if(t_mind.current) - if(t_mind.current.client) - tatorhud.join_solo_hud(t_mind.current) - set_antag_hud(t_mind.current, "hudsyndicate") + //var/ref = "\ref[traitor_mind]" + tatorhud.join_solo_hud(traitor_mind.current) + set_antag_hud(traitor_mind.current, "hudsyndicate") /datum/game_mode/proc/update_traitor_icons_removed(datum/mind/traitor_mind) var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO] - for(var/headref in implanter) - var/datum/mind/head = locate(headref) - for(var/datum/mind/t_mind in implanter[headref]) - if(t_mind.current) - if(t_mind.current.client) - tatorhud.leave_hud(t_mind.current) - set_antag_hud(t_mind.current, null) - - if(head) - //log_to_dd("found [head.name]") - if(head.current) - if(head.current.client) - tatorhud.leave_hud(head.current) - set_antag_hud(head.current, null) - if(traitor_mind.current.client) - tatorhud.leave_hud(traitor_mind.current) - set_antag_hud(traitor_mind.current, null) + tatorhud.leave_hud(traitor_mind.current) + set_antag_hud(traitor_mind.current, null) /datum/game_mode/proc/remove_traitor_mind(datum/mind/traitor_mind, datum/mind/head) @@ -385,6 +356,11 @@ implanted -= traitor_mind traitors -= traitor_mind traitor_mind.special_role = null + + for(var/image/I in traitor_mind.current.client.images) + if(I.icon_state == "hudsyndicate") + qdel(I) + update_traitor_icons_removed(traitor_mind) //world << "Removed [traitor_mind.current.name] from traitor shit" traitor_mind.current << "\red The fog clouding your mind clears. You remember nothing from the moment you were implanted until now.(You don't remember who implanted you)" diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 615f99c1b4c..791dca2579b 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -325,6 +325,13 @@ ticker.mode.vampire_thralls[ref] = list(H.mind) else ticker.mode.vampire_thralls[ref] += H.mind + + var/datum/mindslaves/slaved = new(null,src) + slaved.masters = src + slaved.serv = H + slaved.add_serv_hud(src.mind,"vampire")//handles master servent icons + slaved.add_serv_hud(H.mind,"vampthrall") + ticker.mode.vampire_enthralled.Add(H.mind) ticker.mode.vampire_enthralled[H.mind] = src.mind H.mind.special_role = "VampThrall" diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 9b2e3ef86fc..92a895b369b 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -413,7 +413,14 @@ the implant may become unstable and either pre-maturely inject the subject or si H.mind.objectives += p for(var/datum/objective/objective in H.mind.objectives) H << "Objective #1: [objective.explanation_text]" - ticker.mode.update_traitor_icons_added(H.mind) + + var/datum/mindslaves/slaved = new(null,user) + slaved.masters = user + slaved.serv = H + slaved.add_serv_hud(user.mind,"syndicate")//handles master servent icons + slaved.add_serv_hud(H.mind,"mindslave") + + ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds ticker.mode.update_traitor_icons_added(user.mind) log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].") return 1 diff --git a/html/changelogs/fethas.yml b/html/changelogs/fethas.yml new file mode 100644 index 00000000000..9f846471277 --- /dev/null +++ b/html/changelogs/fethas.yml @@ -0,0 +1,36 @@ +################################ +# 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 +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. Remove the quotation mark and put in your name when copy+pasting the example changelog. +author: Fethas + +# 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, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Readds the hud icon showing up for master and servent" + - rscadd: "adds mindslave datum hud thingy based on TGs gang huds" diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index b7486d89af98804b9277620a0a02f94426a02340..9b2a74768d18a802ffdb263cdfaa4ffbb97b1f73 100644 GIT binary patch literal 12050 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%0AsnoUpGL04lqKeG-b`X#bcS%Cj2C73cvY^PJPWX& z>Q=aCF43pataZ1kUZ;xsr1RpN7Vis)rs`E%lqn)?D5W7bgFPW`7k72Q(`&pETX4m;Qe-GcP1Uul4uDOg2|vz}K6;m!G#_o)Puw&`7a!d_lVV4w z5}9JBn=U|eA8)Nr=V-!#D&Z5o$J}L)NBCqr^r##x)sNXC*GH2nU;+R^KU)W2opO|} zM0rd>-_Bm__kX7{v?X7+t`sgt>d8Bl{gJeFccM%CljOe6#L3Q~W5_fYy7S_(j+Gk_ zW2WP)-gVymBID#2`NOn3kLv`YJ3-O(T+Ov$Dn*}K+dX;E<%yDjGtnWLWwLMdQil+# zGY!ieEaUrrnMpR%h5Kn0xDE%4!0KiK3ovs(CuX9B9HKF=;fGM_)-^)t4}EQ7(wfWk z;~V%f_33k=TnQr*R7?-(WC#&Xmx>mIHC+bQyGT=w}ZycJs z%}XI#YwyPF5uwRfb}?wzP}ClABXAOq{vlt2>Hqa>7XxZ~FCBF(`-X|jV&3(~%Z~_u zs6KTr16WR2U@PY+`H-y7mN>V94d)G^-) z(cBKvWKS-bYK!xcv0n+Qph!|Z;w>mc$pqd?@M|-FrLUs@Kfmhwg^!ES*c!0p2s502 z{NH9>l_zvUaevFoo?1eevnIz8&pL#On0y+uCMlgLWuKL}LVuKq8 z{do?h;2ybUWtC32fyaASR^yD)32geo5!673h5)AFU-b04;SL9A=Lf9qBe1epU|s~0 z+|zSy1kwK1Jc--4IXm>Z^(ZgRhqScsIWC=VB6?nyoOQMaA%!SWli;hA5^C@tcVA!} z+g~fV$ZWw;5nlv2y@`=Vl9E!u)Vt<0v#q*7>-#!b(>aOf)g_fzq z*x8PMq)TzS0j?kZw5vFUL^8F&SODdB-MYK{Id?dOH*VZG1-NFn1|s3})dvT3W_`B0 zmZb80Px3Gi12A@Xe_h&p;bw{pnkfV1hs>^A<#xxgC)C)idSUuT;B-o0-V4Flz@;qg z!NC|9@PJ@(eCJqf^wY7Se5nG^r5Z$iiwIb!m`yMJBYg1-qrM}|XSV*E@&T3G<#U8- jxzr6Xfo1W!>_jSylb>^i?sE_X0>BkRbAu{9r$_$>d}^wE literal 11974 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 LQ@Kp>Md<$kXHl0L From 53222772bcd9813e631039586e0a5926cd2411c3 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 13 Jan 2016 03:37:45 -0500 Subject: [PATCH 3/5] i almost want to give up on this --- code/game/gamemodes/antag_hud.dm | 10 ++-------- code/game/gamemodes/vampire/vampire_powers.dm | 4 ++-- code/game/objects/items/weapons/implants/implant.dm | 4 ++-- code/modules/mob/dead/observer/observer.dm | 2 +- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index b021a1b57e0..ffb67fdf394 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -92,12 +92,6 @@ /datum/mindslaves/proc/add_serv_hud(datum/mind/serv_mind,var/icon) thrallhud.join_hud(serv_mind.current) - icontype = icon - if(serv_mind in masters) - world << "Master Added" - var/I = image('icons/mob/hud.dmi', loc = serv_mind.current, icon_state = "hud[icontype]") - serv_mind.current.client.images += I - else - var/I = image('icons/mob/hud.dmi', loc = serv_mind.current, icon_state = "hud[icontype]") - serv_mind.current.client.images += I + icontype = "hud[icon]" + ticker.mode.set_antag_hud(serv_mind.current,icontype) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 791dca2579b..7b622f31d52 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -337,8 +337,8 @@ H.mind.special_role = "VampThrall" H << "\red You have been Enthralled by [name]. Follow their every command." src << "\red You have successfully Enthralled [H.name]. If they refuse to do as you say just adminhelp." - ticker.mode.update_vampire_icons_added(H.mind) - ticker.mode.update_vampire_icons_added(src.mind) + //ticker.mode.update_vampire_icons_added(H.mind) + //ticker.mode.update_vampire_icons_added(src.mind) log_admin("[ckey(src.key)] has mind-slaved [ckey(H.key)].") /client/vampire/proc/vampire_bats() diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 92a895b369b..5ee9aa35c74 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -420,8 +420,8 @@ the implant may become unstable and either pre-maturely inject the subject or si slaved.add_serv_hud(user.mind,"syndicate")//handles master servent icons slaved.add_serv_hud(H.mind,"mindslave") - ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds - ticker.mode.update_traitor_icons_added(user.mind) + //ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds + //ticker.mode.update_traitor_icons_added(user.mind) log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].") return 1 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7ae9f75cd82..045dd6ff142 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -308,7 +308,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //var/datum/atom_hud/A = huds[DATA_HUD_SECURITY_ADVANCED] //var/adding_hud = (usr in A.hudusers) ? 0 : 1 for(var/datum/atom_hud/H in huds) - if(istype(H, /datum/atom_hud/antag))// || istype(H, /datum/atom_hud/data/human/security/advanced)) + if(istype(H, /datum/atom_hud/antag)|| istype(H,/datum/mindslaves))// || istype(H, /datum/atom_hud/data/human/security/advanced)) if(!M.antagHUD) //(adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr) H.add_hud_to(usr) From 28a2980110119531442732570fb15cfaa44f60b3 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 14 Jan 2016 14:56:56 -0500 Subject: [PATCH 4/5] HALP HALP --- code/datums/mind.dm | 7 +++++++ code/game/gamemodes/antag_hud.dm | 3 +++ code/game/gamemodes/traitor/traitor.dm | 11 +++++++---- code/game/gamemodes/vampire/vampire.dm | 7 +++++++ code/game/gamemodes/vampire/vampire_powers.dm | 9 ++++----- .../objects/items/weapons/implants/implant.dm | 7 +++---- code/modules/mob/dead/observer/observer.dm | 16 ++++++++++------ 7 files changed, 41 insertions(+), 19 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 860ebdd01b9..c622bd2c083 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -60,6 +60,7 @@ var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD + var/datum/mindslaves/som //stands for slave or master...hush.. var/rev_cooldown = 0 @@ -903,6 +904,9 @@ ticker.mode.vampires += src ticker.mode.grant_vampire_powers(current) ticker.mode.update_vampire_icons_added(src) + var/datum/mindslaves/slaved = new() + slaved.masters += src + src.som = slaved //we MIGT want to mindslave someone special_role = "Vampire" current << "Your powers are awoken. Your lust for blood grows... You are a Vampire!" log_admin("[key_name(usr)] has vampired [key_name(current)]") @@ -999,6 +1003,9 @@ if("traitor") if(!(src in ticker.mode.traitors)) ticker.mode.traitors += src + var/datum/mindslaves/slaved = new() + slaved.masters += src + src.som = slaved //we MIGT want to mindslave someone special_role = "traitor" current << "\red You are a traitor!" log_admin("[key_name(usr)] has traitored [key_name(current)]") diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index ffb67fdf394..e7df5173c1b 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -95,3 +95,6 @@ icontype = "hud[icon]" ticker.mode.set_antag_hud(serv_mind.current,icontype) +/datum/mindslaves/proc/leave_serv_hud(datum/mind/free_mind) + thrallhud.leave_hud(free_mind.current) + ticker.mode.set_antag_hud(free_mind.current,null) \ No newline at end of file diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 80e941715bc..228dc66fe30 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -53,6 +53,9 @@ var/datum/mind/traitor = pick(possible_traitors) traitors += traitor traitor.special_role = "traitor" + var/datum/mindslaves/slaved = new() + slaved.masters += traitor + traitor.som = slaved //we MIGT want to mindslave someone traitor.restricted_roles = restricted_jobs possible_traitors.Remove(traitor) @@ -355,12 +358,12 @@ implanter[ref] -= traitor_mind implanted -= traitor_mind traitors -= traitor_mind + var/datum/mindslaves/slaved = traitor_mind.som + slaved.serv -= traitor_mind traitor_mind.special_role = null + traitor_mind.som = null - for(var/image/I in traitor_mind.current.client.images) - if(I.icon_state == "hudsyndicate") - qdel(I) - + slaved.leave_serv_hud(traitor_mind) update_traitor_icons_removed(traitor_mind) //world << "Removed [traitor_mind.current.name] from traitor shit" traitor_mind.current << "\red The fog clouding your mind clears. You remember nothing from the moment you were implanted until now.(You don't remember who implanted you)" diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 0931adfe4ef..553a971362c 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -59,6 +59,9 @@ vampires += vampire vampire.restricted_roles = restricted_jobs modePlayer += vampires + var/datum/mindslaves/slaved = new() + slaved.masters += vampire + vampire.som = slaved //we MIGT want to mindslave someone vampire.special_role = "Vampire" // Needs to be done in pre-setup to prevent role bugs return 1 else @@ -398,6 +401,10 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha vampire_thralls[ref] -= vampire_mind vampire_enthralled -= vampire_mind vampire_mind.special_role = null + var/datum/mindslaves/slaved = vampire_mind.som + slaved.serv -= vampire_mind + vampire_mind.som = null + slaved.leave_serv_hud(vampire_mind) update_vampire_icons_removed(vampire_mind) //world << "Removed [vampire_mind.current.name] from vampire shit" vampire_mind.current << "\red The fog clouding your mind clears. You remember nothing from the moment you were enthralled until now." diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 7b622f31d52..7d64abe7809 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -326,9 +326,10 @@ else ticker.mode.vampire_thralls[ref] += H.mind - var/datum/mindslaves/slaved = new(null,src) - slaved.masters = src - slaved.serv = H + //ticker.mode.update_vampire_icons_added(H.mind) + ticker.mode.update_vampire_icons_added(src.mind) + var/datum/mindslaves/slaved = src.mind.som + slaved.serv += H slaved.add_serv_hud(src.mind,"vampire")//handles master servent icons slaved.add_serv_hud(H.mind,"vampthrall") @@ -337,8 +338,6 @@ H.mind.special_role = "VampThrall" H << "\red You have been Enthralled by [name]. Follow their every command." src << "\red You have successfully Enthralled [H.name]. If they refuse to do as you say just adminhelp." - //ticker.mode.update_vampire_icons_added(H.mind) - //ticker.mode.update_vampire_icons_added(src.mind) log_admin("[ckey(src.key)] has mind-slaved [ckey(H.key)].") /client/vampire/proc/vampire_bats() diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 5ee9aa35c74..79dca7fa122 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -414,14 +414,13 @@ the implant may become unstable and either pre-maturely inject the subject or si for(var/datum/objective/objective in H.mind.objectives) H << "Objective #1: [objective.explanation_text]" - var/datum/mindslaves/slaved = new(null,user) - slaved.masters = user - slaved.serv = H + ticker.mode.update_traitor_icons_added(user.mind) + var/datum/mindslaves/slaved = user.mind.som + slaved.serv += H slaved.add_serv_hud(user.mind,"syndicate")//handles master servent icons slaved.add_serv_hud(H.mind,"mindslave") //ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds - //ticker.mode.update_traitor_icons_added(user.mind) log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].") return 1 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 045dd6ff142..0ba96f3e5bb 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -307,13 +307,17 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //var/datum/atom_hud/A = huds[DATA_HUD_SECURITY_ADVANCED] //var/adding_hud = (usr in A.hudusers) ? 0 : 1 - for(var/datum/atom_hud/H in huds) - if(istype(H, /datum/atom_hud/antag)|| istype(H,/datum/mindslaves))// || istype(H, /datum/atom_hud/data/human/security/advanced)) - if(!M.antagHUD) + var/serv_huds = list()//mindslaves and/or vampire thralls + for(var/datum/mindslaves/serv in (ticker.mode.vampires | ticker.mode.traitors)) + serv_huds += serv.thrallhud + + for(var/datum/atom_hud/antag/H in (huds|serv_huds)) + //if(istype(H, /datum/atom_hud/antag))// || istype(H, /datum/atom_hud/data/human/security/advanced)) + if(!M.antagHUD) //(adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr) - H.add_hud_to(usr) - else - H.remove_hud_from(usr) + H.add_hud_to(usr) + else + H.remove_hud_from(usr) if(!M.antagHUD) usr << "AntagHud Toggled ON" M.antagHUD = 1 From f40daffbe83c5e3d870f2ac001252eee9ee52f03 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 16 Jan 2016 15:50:43 -0500 Subject: [PATCH 5/5] I FIXED IT --- code/game/gamemodes/antag_hud.dm | 10 +++++----- code/game/gamemodes/traitor/traitor.dm | 11 ++++++----- code/game/gamemodes/vampire/vampire_powers.dm | 3 ++- code/game/objects/items/weapons/implants/implant.dm | 13 ++++++++----- code/modules/mob/dead/observer/observer.dm | 5 +---- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index e7df5173c1b..0b2ee9320de 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -1,20 +1,20 @@ /datum/atom_hud/antag hud_icons = list(SPECIALROLE_HUD,NATIONS_HUD) -/datum/atom_hud/antag/proc/join_hud(mob/M) +/datum/atom_hud/antag/proc/join_hud(mob/M,var/slave) if(!istype(M)) CRASH("join_hud(): [M] ([M.type]) is not a mob!") - if(M.mind.antag_hud) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged + if(M.mind.antag_hud && !slave) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged M.mind.antag_hud.leave_hud(M) if(!ismask(M))//FUCK YOU MASK OF NARNAR! add_to_hud(M) add_hud_to(M) M.mind.antag_hud = src -/datum/atom_hud/antag/proc/join_solo_hud(mob/M)//for non team antags and for observer huds +/datum/atom_hud/antag/proc/join_solo_hud(mob/M,var/slave)//for non team antags and for observer huds if(!istype(M)) CRASH("join_hud(): [M] ([M.type]) is not a mob!") - if(M.mind.antag_hud) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged + if(M.mind.antag_hud && !slave) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged M.mind.antag_hud.leave_hud(M) add_to_hud(M) M.mind.antag_hud = src @@ -91,7 +91,7 @@ thrallhud = new() /datum/mindslaves/proc/add_serv_hud(datum/mind/serv_mind,var/icon) - thrallhud.join_hud(serv_mind.current) + thrallhud.join_hud(serv_mind.current,1) icontype = "hud[icon]" ticker.mode.set_antag_hud(serv_mind.current,icontype) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 228dc66fe30..c975aa8292c 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -358,12 +358,13 @@ implanter[ref] -= traitor_mind implanted -= traitor_mind traitors -= traitor_mind - var/datum/mindslaves/slaved = traitor_mind.som - slaved.serv -= traitor_mind - traitor_mind.special_role = null - traitor_mind.som = null + if(traitor_mind.som) + var/datum/mindslaves/slaved = traitor_mind.som + slaved.serv -= traitor_mind + traitor_mind.special_role = null + traitor_mind.som = null + slaved.leave_serv_hud(traitor_mind) - slaved.leave_serv_hud(traitor_mind) update_traitor_icons_removed(traitor_mind) //world << "Removed [traitor_mind.current.name] from traitor shit" traitor_mind.current << "\red The fog clouding your mind clears. You remember nothing from the moment you were implanted until now.(You don't remember who implanted you)" diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 7d64abe7809..e07f24983b1 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -326,9 +326,10 @@ else ticker.mode.vampire_thralls[ref] += H.mind - //ticker.mode.update_vampire_icons_added(H.mind) + ticker.mode.update_vampire_icons_added(H.mind) ticker.mode.update_vampire_icons_added(src.mind) var/datum/mindslaves/slaved = src.mind.som + H.mind.som = slaved slaved.serv += H slaved.add_serv_hud(src.mind,"vampire")//handles master servent icons slaved.add_serv_hud(H.mind,"vampthrall") diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 79dca7fa122..d27cd74140d 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -415,12 +415,15 @@ the implant may become unstable and either pre-maturely inject the subject or si H << "Objective #1: [objective.explanation_text]" ticker.mode.update_traitor_icons_added(user.mind) - var/datum/mindslaves/slaved = user.mind.som - slaved.serv += H - slaved.add_serv_hud(user.mind,"syndicate")//handles master servent icons - slaved.add_serv_hud(H.mind,"mindslave") + ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds + + if(user.mind.som)//do not add if not a traitor..and you just picked up an implanter in the hall... + var/datum/mindslaves/slaved = user.mind.som + H.mind.som = slaved + slaved.serv += H + slaved.add_serv_hud(user.mind,"syndicate")//handles master servent icons + slaved.add_serv_hud(H.mind,"mindslave") - //ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].") return 1 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0ba96f3e5bb..de34f55df94 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -307,11 +307,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //var/datum/atom_hud/A = huds[DATA_HUD_SECURITY_ADVANCED] //var/adding_hud = (usr in A.hudusers) ? 0 : 1 - var/serv_huds = list()//mindslaves and/or vampire thralls - for(var/datum/mindslaves/serv in (ticker.mode.vampires | ticker.mode.traitors)) - serv_huds += serv.thrallhud - for(var/datum/atom_hud/antag/H in (huds|serv_huds)) + for(var/datum/atom_hud/antag/H in (huds)) //if(istype(H, /datum/atom_hud/antag))// || istype(H, /datum/atom_hud/data/human/security/advanced)) if(!M.antagHUD) //(adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr)