diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm
index c5336b84239..683ee085a48 100644
--- a/code/game/gamemodes/gang/gang.dm
+++ b/code/game/gamemodes/gang/gang.dm
@@ -168,13 +168,15 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
carbon_mob.silent = max(carbon_mob.silent, 5)
carbon_mob.flash_act(1, 1)
gangster_mind.current.Stun(5)
- gangster_mind.current << "You are now a member of the [G.name] Gang!"
- gangster_mind.current << "Help your bosses take over the station by claiming territory with special spraycans only they can provide. Simply spray on any unclaimed area of the station."
- gangster_mind.current << "Their ultimate objective is to take over the station with a Dominator machine."
- gangster_mind.current << "You can identify your bosses by their large, bright [G.color] \[G\] icon."
+ if(G.is_deconvertible)
+ gangster_mind.current << "You are now a member of the [G.name] Gang!"
+ gangster_mind.current << "Help your bosses take over the station by claiming territory with special spraycans only they can provide. Simply spray on any unclaimed area of the station."
+ gangster_mind.current << "Their ultimate objective is to take over the station with a Dominator machine."
+ gangster_mind.current << "You can identify your bosses by their large, bright [G.color] \[G\] icon."
+ gangster_mind.store_memory("You are a member of the [G.name] Gang!")
gangster_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the [G.name] Gang!"
gangster_mind.special_role = "[G.name] Gangster"
- gangster_mind.store_memory("You are a member of the [G.name] Gang!")
+
G.add_gang_hud(gangster_mind)
if(jobban_isbanned(gangster_mind.current, ROLE_GANG))
addtimer(src, "replace_jobbaned_player", 0, FALSE, gangster_mind.current, ROLE_GANG, ROLE_GANG)
@@ -190,6 +192,8 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
var/removed
for(var/datum/gang/G in gangs)
+ if(!G.is_deconvertible && !remove_bosses)
+ return 0
if(gangster_mind in G.gangsters)
G.gangsters -= gangster_mind
removed = 1
@@ -251,13 +255,14 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
//////////////////////////////////////////////////////////////////////
/datum/game_mode/proc/auto_declare_completion_gang(datum/gang/winner)
- if(gangs.len)
- if(!winner)
- world << "The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]
"
- feedback_set_details("round_end_result","loss - gangs failed takeover")
- else
- world << "The [winner.name] Gang successfully performed a hostile takeover of the station!
"
- feedback_set_details("round_end_result","win - gang domination complete")
+ if(!gangs.len)
+ return
+ if(!winner)
+ world << "The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]
"
+ feedback_set_details("round_end_result","loss - gangs failed takeover")
+ else
+ world << "The [winner.name] Gang successfully performed a hostile takeover of the station!
"
+ feedback_set_details("round_end_result","win - gang domination complete")
for(var/datum/gang/G in gangs)
var/text = "The [G.name] Gang was [winner==G ? "victorious" : "defeated"] with [round((G.territory.len/start_state.num_territories)*100, 1)]% control of the station!"
diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm
index b78e961c9ad..7c443d1c14b 100644
--- a/code/game/gamemodes/gang/gang_datum.dm
+++ b/code/game/gamemodes/gang/gang_datum.dm
@@ -16,6 +16,7 @@
var/dom_attempts = 2
var/points = 15
var/datum/atom_hud/antag/gang/ganghud
+ var/is_deconvertible = TRUE //Can you deconvert normal gangsters from the gang
var/domination_timer
var/is_dominating
@@ -135,7 +136,6 @@
/datum/gang/proc/income()
if(!bosses.len)
return
-
var/added_names = ""
var/lost_names = ""
@@ -214,3 +214,19 @@
//Increase outfit stock
for(var/obj/item/device/gangtool/tool in gangtools)
tool.outfits = min(tool.outfits+1,5)
+
+
+//Multiverse
+
+/datum/gang/multiverse
+ dom_attempts = 0
+ points = 0
+ fighting_style = "multiverse"
+ is_deconvertible = FALSE
+
+/datum/gang/multiverse/New(loc, multiverse_override)
+ name = multiverse_override
+ ganghud = new()
+
+/datum/gang/multiverse/income()
+ return
\ No newline at end of file
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 2d998b9c1e3..130579b3cb0 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -208,14 +208,14 @@ var/global/list/multiverse = list()
hitsound = 'sound/weapons/bladeslice.ogg'
flags = CONDUCT
slot_flags = SLOT_BELT
+ sharpness = IS_SHARP
force = 20
throwforce = 10
- w_class = 2
+ w_class = 3
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/faction = list("unassigned")
var/cooldown = 0
var/assigned = "unassigned"
- var/evil = TRUE
/obj/item/weapon/multisword/New()
..()
@@ -241,27 +241,20 @@ var/global/list/multiverse = list()
assigned = "[user.real_name]"
user.faction = list("[user.real_name]")
user << "You bind the sword to yourself. You can now use it to summon help."
- if(!usr.mind.special_role)
- if(prob(30))
- user << "With your new found power you could easily conquer the station!"
- var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
- hijack_objective.owner = usr.mind
- usr.mind.objectives += hijack_objective
- hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
- usr << "Objective #[1]: [hijack_objective.explanation_text]"
- ticker.mode.traitors += usr.mind
- usr.mind.special_role = "[usr.real_name] Prime"
- evil = TRUE
- else
- user << "With your new found power you could easily defend the station!"
- var/datum/objective/survive/new_objective = new /datum/objective/survive
- new_objective.owner = usr.mind
- new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones."
- usr << "Objective #[1]: [new_objective.explanation_text]"
- usr.mind.objectives += new_objective
- ticker.mode.traitors += usr.mind
- usr.mind.special_role = "[usr.real_name] Prime"
- evil = FALSE
+ if(!is_gangster(user))
+ var/datum/gang/multiverse/G = new(src, "[user.real_name]")
+ ticker.mode.gangs += G
+ G.bosses += user.mind
+ G.add_gang_hud(user.mind)
+ user.mind.gang_datum = G
+ user << "With your new found power you could easily conquer the station!"
+ var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
+ hijack_objective.owner = user.mind
+ user.mind.objectives += hijack_objective
+ hijack_objective.explanation_text = "Ensure only [user.real_name] and their copies are on the shuttle!"
+ user << "Objective #[1]: [hijack_objective.explanation_text]"
+ ticker.mode.traitors += user.mind
+ user.mind.special_role = "[user.real_name] Prime"
else
var/list/candidates = get_candidates(ROLE_WIZARD)
if(candidates.len)
@@ -279,15 +272,16 @@ var/global/list/multiverse = list()
user << "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies."
-/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T)
+/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M, icon_updates=0)
M.key = C.key
- M.mind.name = usr.real_name
- M << "You are an alternate version of [usr.real_name] from another universe! Help them accomplish their goals at all costs."
- M.real_name = usr.real_name
- M.name = usr.real_name
- M.faction = list("[usr.real_name]")
+ M.mind.name = user.real_name
+ M << "You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs."
+ ticker.mode.add_gangster(M.mind, user.mind.gang_datum, FALSE)
+ M.real_name = user.real_name
+ M.name = user.real_name
+ M.faction = list("[user.real_name]")
if(prob(50))
var/list/all_species = list()
for(var/speciestype in subtypesof(/datum/species))
@@ -301,30 +295,11 @@ var/global/list/multiverse = list()
M.dna.update_dna_identity()
equip_copy(M)
- if(evil)
- var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
- hijack_objective.owner = M.mind
- M.mind.objectives += hijack_objective
- hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
- M << "Objective #[1]: [hijack_objective.explanation_text]"
- M.mind.special_role = "multiverse traveller"
- log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.")
- else
- var/datum/objective/protect/new_objective = new /datum/objective/protect
- new_objective.owner = M.mind
- new_objective.target = usr.mind
- new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones."
- M.mind.objectives += new_objective
- M << "Objective #[1]: [new_objective.explanation_text]"
- M.mind.special_role = "multiverse traveller"
- log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.")
-
/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M)
var/obj/item/weapon/multisword/sword = new /obj/item/weapon/multisword
sword.assigned = assigned
sword.faction = list("[assigned]")
- sword.evil = evil
var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator")
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index a5cd1b7d5b5..1314301b3be 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -469,6 +469,26 @@
return 0
return (ticker.mode.name != "ragin' mages" && !config.no_summon_magic)
+/datum/spellbook_entry/summon/multisword
+ name = "Multiverse War"
+ category = "Rituals"
+ desc = "Triggers a multiverse war in which the crew (and you) must summon copies of yourself from alternate realities to do battle and hijack the emergency shuttle. Automatically triggers a shuttle call on purchase."
+ log_name = "MW"
+ cost = 8
+
+/datum/spellbook_entry/summon/multisword/IsAvailible()
+ if(!ticker.mode) // In case spellbook is placed on map
+ return 0
+ return (ticker.mode.name != "ragin' mages" && !config.no_summon_magic)
+
+/datum/spellbook_entry/summon/multisword/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book)
+ feedback_add_details("wizard_spell_learned",log_name)
+ only_me()
+ new /obj/item/weapon/multisword(get_turf(user)) //Because the proc skips special roles
+ SSshuttle.emergency.request()
+ playsound(get_turf(user),"sound/magic/CastSummon.ogg",50,1)
+ user << "You have triggerd a multiverse war!"
+
/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book)
feedback_add_details("wizard_spell_learned",log_name)
rightandwrong(1, user, 25)
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index 5312c41b33c..d6a6950a68e 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -92,6 +92,12 @@ var/highlander = FALSE
H << "You are the multiverse summoner. Activate your blade to summon copies of yourself from another universe to fight by your side."
H.mind.announce_objectives()
+ var/datum/gang/multiverse/G = new(src, "[H.real_name]")
+ ticker.mode.gangs += G
+ G.bosses += H.mind
+ G.add_gang_hud(H.mind)
+ H.mind.gang_datum = G
+
var/obj/item/slot_item_ID = H.get_item_by_slot(slot_wear_id)
qdel(slot_item_ID)
var/obj/item/slot_item_hand = H.get_item_for_held_index(2)