diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 007e1c1da04..2b85f073e1d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -173,6 +173,10 @@ proc/issyndicate(mob/living/M as mob) synd_mind.current.real_name = "[syndicate_name()] Team [leader_title]" synd_mind.current << "You are the Syndicate leader for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors." synd_mind.current << "If you feel you are not up to this task, give your ID to another operative." + synd_mind.current << "In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it." + + var/obj/item/device/nuclear_challenge/challenge = new /obj/item/device/nuclear_challenge + synd_mind.current.equip_to_slot_or_del(challenge, slot_r_hand) var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/weapon/card/id) diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm new file mode 100644 index 00000000000..c7ea18b48d6 --- /dev/null +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -0,0 +1,45 @@ +#define CHALLENGE_TIME_LIMIT 3000 +#define MIN_CHALLENGE_PLAYERS 50 + +/obj/item/device/nuclear_challenge + name = "Declaration of War (Challenge Mode)" + icon_state = "gangtool-red" + item_state = "walkietalkie" + desc = "Use to send a declaration of hostilities to the target, delaying your shuttle departure for 20 minutes while they prepare for your assault. \ + Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \ + Must be used within five minutes, or your benefactors will lose interest." + + + +/obj/item/device/nuclear_challenge/attack_self(mob/living/user) + if(player_list.len < MIN_CHALLENGE_PLAYERS) + user << "The enemy crew is too small to be worth declaring war on." + return + if(user.z != ZLEVEL_CENTCOMM) + user << "You have to be at your base to use this." + return + + if(world.time > CHALLENGE_TIME_LIMIT) + user << "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand." + return + + var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew?", "Declare war?", "Yes", "No") + if(are_you_sure == "No") + user << "On second thought, the element of surprise isn't so bad after all." + return + + var/war_declaration = "[user.real_name] has declared his intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop them." + command_announcement.Announce(war_declaration, "Declaration of War", 'sound/effects/siren.ogg') + user << "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission." + + for(var/obj/machinery/computer/shuttle/syndicate/S in machines) + S.challenge = TRUE + + var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(get_turf(user)) + U.hidden_uplink.uplink_owner= "[user.key]" + U.hidden_uplink.uses = 280 + qdel(src) + + +#undef CHALLENGE_TIME_LIMIT +#undef MIN_CHALLENGE_PLAYERS diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 6a4dbe224d7..2af6157b0ee 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -317,6 +317,8 @@ return power_station /obj/machinery/teleport/hub/Bumped(M as mob|obj) + if(z == ZLEVEL_CENTCOMM) + M << "You can't use this here." if(power_station && power_station.engaged && !panel_open) //--FalseIncarnate //Prevents AI cores from using the teleporter, prints out failure messages for clarity diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index e2c1aeaed44..8d5f601520c 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -676,6 +676,7 @@ shuttleId = "whiteship" possible_destinations = "whiteship_away;whiteship_home;whiteship_z4" +#define SYNDICATE_CHALLENGE_TIMER 12000 //20 minutes /obj/machinery/computer/shuttle/syndicate name = "syndicate shuttle terminal" @@ -684,11 +685,21 @@ req_access = list(access_syndicate) shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_z3;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" + var/challenge = FALSE /obj/machinery/computer/shuttle/syndicate/recall name = "syndicate shuttle recall terminal" possible_destinations = "syndicate_away" +/obj/machinery/computer/shuttle/syndicate/Topic(href, href_list) + if(href_list["move"]) + if(challenge && world.time < SYNDICATE_CHALLENGE_TIMER) + usr << "You've issued a combat challenge to the station! You've got to give them at least [round(((SYNDICATE_CHALLENGE_TIMER - world.time) / 10) / 60)] more minutes to allow them to prepare." + return 0 + ..() + +#undef SYNDICATE_CHALLENGE_TIMER + /obj/machinery/computer/shuttle/vox name = "skipjack control console" req_access = list(access_vox) diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 7aec18d1dcd..6cbf4105276 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/paradise.dme b/paradise.dme index d3a4fd5c68b..65915b1a4bf 100644 --- a/paradise.dme +++ b/paradise.dme @@ -355,6 +355,7 @@ #include "code\game\gamemodes\nations\nationsdatums.dm" #include "code\game\gamemodes\nations\nationsprocs.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" +#include "code\game\gamemodes\nuclear\nuclear_challenge.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" #include "code\game\gamemodes\revolution\revolution.dm"