From b3e008f1ce73cb3e5924d5cfef118622924df910 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Tue, 8 Mar 2016 15:52:31 -0800 Subject: [PATCH] Update to HOG and stuffs --- code/game/gamemodes/handofgod/_handofgod.dm | 12 +++ code/game/gamemodes/handofgod/god.dm | 12 +-- code/game/gamemodes/handofgod/items.dm | 77 +++++++++++-------- code/game/gamemodes/handofgod/powers.dm | 63 +++++++++++++-- code/game/gamemodes/handofgod/structures.dm | 47 ++++++++++- .../weapons/implants/implant_loyality.dm | 4 +- 6 files changed, 170 insertions(+), 45 deletions(-) diff --git a/code/game/gamemodes/handofgod/_handofgod.dm b/code/game/gamemodes/handofgod/_handofgod.dm index 100f079770d..c18f5246be3 100644 --- a/code/game/gamemodes/handofgod/_handofgod.dm +++ b/code/game/gamemodes/handofgod/_handofgod.dm @@ -316,6 +316,18 @@ var/global/list/global_handofgod_structuretypes = list() return 1 +/mob/camera/god/proc/is_handofgod_myfollowers(A) + if(!ishuman(A)) + return 0 + var/mob/living/carbon/human/H = A + if(!H.mind) + return 0 + if(side == "red") + if(H.mind in ticker.mode.red_deity_prophets|ticker.mode.red_deity_followers) + return 1 + else if(side == "blue") + if(H.mind in ticker.mode.blue_deity_prophets|ticker.mode.blue_deity_followers) + return 1 ////////////////////// //Roundend Reporting// diff --git a/code/game/gamemodes/handofgod/god.dm b/code/game/gamemodes/handofgod/god.dm index 55f5a16738f..7dcd5b5f933 100644 --- a/code/game/gamemodes/handofgod/god.dm +++ b/code/game/gamemodes/handofgod/god.dm @@ -6,6 +6,7 @@ icon_state = "marker" invisibility = 60 see_in_dark = 0 + see_invisible = 55 sight = SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF languages = HUMAN | MONKEY | ALIEN | ROBOT | SLIME | DRONE | SWARMER hud_possible = list(ANTAG_HUD) @@ -22,7 +23,8 @@ var/list/conduits = list() var/prophets_sacrificed_in_name = 0 var/image/ghostimage = null //For observer with darkness off visiblity - var/list/prophet_hats = list() + var/list/prophets = list() + var/datum/action/innate/godspeak/speak2god /mob/camera/god/New() ..() @@ -51,10 +53,8 @@ for(var/datum/mind/F in followers) if(F.current) F.current << "Your god is DEAD!" - for(var/X in prophet_hats) - var/obj/item/clothing/head/helmet/plate/crusader/prophet/P = X - if(P.speak2god && P.speak2god.god == src) - qdel(P.speak2god) + for(var/X in prophets) + speak2god.Remove(X) ghost_darkness_images -= ghostimage updateallghostimages() return ..() @@ -200,7 +200,7 @@ var/rendered = "Divine Telepathy, [name] [msg]" for(var/mob/M in mob_list) - if(is_handofgod_myprophet(M) || isobserver(M)) + if(is_handofgod_myfollowers(M) || isobserver(M)) M.show_message(rendered, 2) src << rendered diff --git a/code/game/gamemodes/handofgod/items.dm b/code/game/gamemodes/handofgod/items.dm index 010afd2c091..05e99855643 100644 --- a/code/game/gamemodes/handofgod/items.dm +++ b/code/game/gamemodes/handofgod/items.dm @@ -137,43 +137,36 @@ armor = list(melee = 60, bullet = 60, laser = 60, energy = 50, bomb = 70, bio = 50, rad = 50) //religion protects you from disease and radiation, honk. worn_x_dimension = 64 worn_y_dimension = 64 - var/datum/action/innate/godspeak/speak2god + var/side = "neither" - -/obj/item/clothing/head/helmet/plate/crusader/prophet/proc/assign_deity(mob/camera/god/G) - if(speak2god) - if(speak2god.owner) - speak2god.Remove(speak2god.owner) - else - speak2god = new() - speak2god.god = G - G.prophet_hats += src - -/obj/item/clothing/head/helmet/plate/crusader/prophet/Destroy() - if(speak2god) - qdel(speak2god) - return ..() - -/obj/item/clothing/head/helmet/plate/crusader/prophet/equipped(mob/user, slot) +/obj/item/clothing/head/helmet/plate/crusader/prophet/equipped(mob/living/carbon/user, slot) + var/faithful = 0 if(slot == slot_head) - if(speak2god) - speak2god.Grant(user) - user << "You gain the ability to speak to the god this hat belongs to!" - - -/obj/item/clothing/head/helmet/plate/crusader/prophet/dropped(mob/user) - if(speak2god) - if(speak2god.owner == user) - speak2god.Remove(user) - user << "You lose the ability to speak to the god this hat belongs to!" - + switch(side) + if("blue") + faithful = is_handofgod_bluecultist(user) + if("red") + faithful = is_handofgod_redcultist(user) + else + faithful = 1 + if(!faithful) + user << "Your mind is assaulted by a vast power, furious at your desecration!" + user.emote("scream") + user.adjustFireLoss(10) + user.unEquip(src) + user.head = null + user.update_inv_head() + src.screen_loc = null + user.Weaken(1) /obj/item/clothing/head/helmet/plate/crusader/prophet/red icon_state = "prophet-red" + side = "red" /obj/item/clothing/head/helmet/plate/crusader/prophet/blue icon_state = "prophet-blue" + side = "blue" /obj/item/clothing/head/helmet/plate/crusader/prophet/examine(mob/user) @@ -182,8 +175,7 @@ user << "A brownish, religious-looking hat." else user << "A hat bestowed upon a prophet of gods and demigods." - if(speak2god && speak2god.god) - user << "This hat belongs to the [speak2god.god.side] god." + user << "This hat belongs to the [side] god." @@ -192,6 +184,8 @@ name = "godstaff" icon_state = "godstaff-red" var/mob/camera/god/god = null + var/staffcooldown = 0 + var/staffwait = 30 /obj/item/weapon/godstaff/examine(mob/user) ..() @@ -201,6 +195,29 @@ user << "A powerful staff capable of changing the allegiance of god/demigod structures." + +/obj/item/weapon/godstaff/attack_self(mob/living/carbon/user) + if(god && !god.is_handofgod_myprophet(user)) + user << "YOU ARE NOT THE CHOSEN ONE!" + return + if(!(istype(user.head, /obj/item/clothing/head/helmet/plate/crusader/prophet))) + user << "Your connection to your diety isn't strong enough! You must wear your big hat!" + return + if(staffcooldown + staffwait > world.time) + return + user.visible_message("[user] chants deeply and waves their staff") + if(do_after(user, 20,1,src)) + for(var/obj/structure/divine/R in orange(3,user)) + user.say("Grant us true sight my god!") + if(istype(R, /obj/structure/divine/nexus)|| istype(R, /obj/structure/divine/trap)) + continue + R.visible_message("[R] suddenly appears!") + R.invisibility = 0 + R.alpha = initial(R.alpha) + R.density = initial(R.density) + R.activate() + staffcooldown = world.time + /obj/item/weapon/godstaff/red icon_state = "godstaff-red" diff --git a/code/game/gamemodes/handofgod/powers.dm b/code/game/gamemodes/handofgod/powers.dm index 7afcc57c12b..41cb3ec1999 100644 --- a/code/game/gamemodes/handofgod/powers.dm +++ b/code/game/gamemodes/handofgod/powers.dm @@ -43,9 +43,11 @@ var/datum/mind/enemy switch(side) if("red") - enemy = ticker.mode.blue_deities[1] + if(ticker.mode.blue_deities.len) + enemy = ticker.mode.blue_deities[1] if("blue") - enemy = ticker.mode.red_deities[1] + if(ticker.mode.red_deities.len) + enemy = ticker.mode.red_deities[1] if(enemy && is_handofgod_god(enemy.current)) var/mob/camera/god/enemy_god = enemy.current @@ -117,7 +119,9 @@ if(choice && choice.current && choice.current.stat != DEAD) src << "You choose [choice.current] as your prophet." choice.make_Handofgod_prophet(side) - + speak2god = new() + speak2god.god = src + speak2god.Grant(choice.current) //Prophet gear var/mob/living/carbon/human/H = choice.current @@ -134,10 +138,9 @@ if(popehat) var/obj/item/clothing/head/helmet/plate/crusader/prophet/P = new popehat() - P.assign_deity(src) H.unEquip(H.head) - H << "A powerful hat has been bestowed upon your head, you will need to wear this to speak with your god..." + H << "A powerful hat has been bestowed upon your head, you will need to wear this to utilize your staff fully.." H.equip_to_slot_or_del(P,slot_head) if(popestick) @@ -303,3 +306,53 @@ var/itemtype = item_types[item] new itemtype (get_turf(src)) + + + +/mob/camera/god/verb/veil_structures() + set category = "Deity" + set name = "Veil Structures (20)" + set desc = "Hide your structures from sight and touch, but prevent yourself from using them." + + if(!ability_cost(20,1,1)) + return + + src << "You focus your powers and start dragging your influence into the spiritual plane." + for(var/mob/M in orange(3,src))//Yes I know this is terrible, but visible message doesnt work for this + M << "The air begins to shimmer..." + if(do_after(src, 30, 0, src)) + for(var/obj/structure/divine/R in orange(3,src)) + if(istype(R, /obj/structure/divine/nexus)|| istype(R, /obj/structure/divine/trap)||(src.side != R.side)) + continue + R.visible_message("[R] fades away.") + R.invisibility = 55 + R.alpha = 100 //To help ghosts distinguish hidden structures + R.density = 0 + R.deactivate() + src << "You hide your influence from view" + add_faith(-20) + + +/mob/camera/god/verb/reveal_structures() + set category = "Deity" + set name = "Reveal Structures (20)" + set desc = "Make your structures visible again and allow them to be used." + + if(!ability_cost(20,1,1)) + return + + src << "You focus your powers and start dragging your influence into the material plane." + for(var/mob/M in orange(3,src))//Yes I know this is terrible, but visible message doesnt work for this + M << "The air begins to shimmer..." + if(do_after(src, 40, 0, src)) + for(var/obj/structure/divine/R in orange(3,src)) + if(istype(R, /obj/structure/divine/nexus)|| istype(R, /obj/structure/divine/trap)||(src.side != R.side)) + continue + R.visible_message("[R] suddenly appears!") + R.invisibility = 0 + R.alpha = initial(R.alpha) + R.density = initial(R.density) + R.activate() + src << "You bring your influence into view" + add_faith(-20) + diff --git a/code/game/gamemodes/handofgod/structures.dm b/code/game/gamemodes/handofgod/structures.dm index 4b79b6bcbbc..3212041eb04 100644 --- a/code/game/gamemodes/handofgod/structures.dm +++ b/code/game/gamemodes/handofgod/structures.dm @@ -28,11 +28,18 @@ var/side = "neutral" //"blue" or "red", also used for colouring structures when construction is started by a deity var/health = 100 var/maxhealth = 100 + var/deactivated = 0 //Structures being hidden can't be used. Mainly to prevent invisible defense pylons. var/autocolours = TRUE //do we colour to our side? /obj/structure/divine/New() ..() +/obj/structure/divine/proc/deactivate() + deactivated = 1 + +/obj/structure/divine/proc/activate() + deactivated = 0 + /obj/structure/divine/proc/update_icons() if(autocolours) @@ -280,6 +287,15 @@ if(deity) deity.conduits += src +/obj/structure/divine/conduit/deactivate() + ..() + if(deity) + deity.conduits -= src + +/obj/structure/divine/conduit/activate() + ..() + if(deity) + deity.conduits += src /* //No good sprites, and not enough items to make it viable yet /obj/structure/divine/forge @@ -304,6 +320,8 @@ /obj/structure/divine/convertaltar/attack_hand(mob/living/user) ..() + if(deactivated) + return var/mob/living/carbon/human/H = locate() in get_turf(src) if(!is_handofgod_cultist(user)) user << "You try to use it, but unfortunately you don't know any rituals." @@ -332,6 +350,8 @@ /obj/structure/divine/sacrificealtar/attack_hand(mob/living/user) ..() + if(deactivated) + return var/mob/living/L = locate() in get_turf(src) if(!is_handofgod_cultist(user)) user << "You try to use it, but unfortunately you don't know any rituals." @@ -397,6 +417,8 @@ cult_only = FALSE /obj/structure/divine/healingfountain/attack_hand(mob/living/user) + if(deactivated) + return if(last_process + time_between_uses > world.time) user << "The fountain appears to be empty." return @@ -434,7 +456,7 @@ /obj/structure/divine/powerpylon/New() ..() if(deity && deity.god_nexus) - deity.god_nexus.powerpylons |= src + deity.god_nexus.powerpylons += src /obj/structure/divine/powerpylon/Destroy() @@ -443,6 +465,16 @@ return ..() +/obj/structure/divine/powerpylon/deactivate() + ..() + if(deity) + deity.god_nexus.powerpylons -= src + +/obj/structure/divine/powerpylon/activate() + ..() + if(deity) + deity.god_nexus.powerpylons += src + /obj/structure/divine/defensepylon name = "defense pylon" desc = "A pylon which is blessed to withstand many blows, and fire strong bolts at nonbelievers. A god can toggle it." @@ -478,9 +510,22 @@ /obj/structure/divine/defensepylon/attack_god(mob/camera/god/user) if(user.side == side) + if(deactivated) + user << "You need to reveal it first!" + return pylon_gun.on = !pylon_gun.on icon_state = (pylon_gun.on) ? "defensepylon-[side]" : "defensepylon" +/obj/structure/divine/defensepylon/deactivate() + ..() + pylon_gun.on = 0 + icon_state = (pylon_gun.on) ? "defensepylon-[side]" : "defensepylon" + +/obj/structure/divine/defensepylon/activate() + ..() + pylon_gun.on = 1 + icon_state = (pylon_gun.on) ? "defensepylon-[side]" : "defensepylon" + //This sits inside the defensepylon, to avoid copypasta /obj/machinery/porta_turret/defensepylon_internal_turret name = "defense pylon" diff --git a/code/game/objects/items/weapons/implants/implant_loyality.dm b/code/game/objects/items/weapons/implants/implant_loyality.dm index acb98761d04..516e7e83739 100644 --- a/code/game/objects/items/weapons/implants/implant_loyality.dm +++ b/code/game/objects/items/weapons/implants/implant_loyality.dm @@ -32,9 +32,7 @@ return -1 if(target.mind in ticker.mode.revolutionaries) ticker.mode.remove_revolutionary(target.mind) - if(target.mind in ticker.mode.red_deity_followers|ticker.mode.blue_deity_followers) - ticker.mode.remove_hog_follower(target.mind) - if((target.mind in ticker.mode.cult) || (target.mind in ticker.mode.blue_deity_prophets|ticker.mode.red_deity_prophets)) + if((target.mind in ticker.mode.cult) || (target.mind in ticker.mode.blue_deity_prophets|ticker.mode.red_deity_prophets|ticker.mode.red_deity_followers|ticker.mode.blue_deity_followers)) target << "You feel the corporate tendrils of Nanotrasen try to invade your mind!" else target << "You feel a surge of loyalty towards Nanotrasen."