Revolution Improvements (#7878)

- Added a new category to the traitor uplink, which is only available to revolutionaries.

- Head Revolutionaries now spawn with an uplink that has 50 TC, they also get an alert telling them to not abuse it.

- Revamped the drill dropper into a generic orbital dropper, capable of dropping ANY sort of item you wish it to.

- Added a Mech orbital dropper. Added an Armory orbital dropper.

- Made loyalty implants display their text correctly when they implant someone.

- Added aggression implants, which makes whoever it is implanted into extremely aggressive. Quite useful for starting a revolution.

- Added some description_antag to mercenary cipherkeys, informing the reader that the mercenary radio key is :t.

- Added a gear crate (not for mercs) which is just six syndicate softsuits. Useful in a pinch.
This commit is contained in:
Geeves
2020-01-08 18:45:58 -03:00
committed by Alberyk
parent 2b1908df72
commit bead18d3f1
20 changed files with 355 additions and 146 deletions
@@ -1,118 +0,0 @@
/obj/item/device/drill_dropper
name = "laser targeting dropper"
desc = "This drill literally pierces the heavens."
icon = 'icons/obj/device.dmi'
icon_state = "drillpointer"
item_state = "binoculars"
slot_flags = SLOT_BELT
w_class = 2
var/has_dropped = 0
var/tileoffset = 8
var/viewsize = 7
var/emagged = FALSE
/obj/item/device/drill_dropper/attack_self(mob/user)
zoom(user,tileoffset,viewsize)
/obj/item/device/drill_dropper/attack(mob/living/M, mob/user)
laser_act(M, user)
/obj/item/device/drill_dropper/afterattack(var/atom/target, var/mob/living/user, flag, params)
if(flag) //we're placing the object on a table or in backpack
return
laser_act(target, user)
/obj/item/device/drill_dropper/proc/laser_act(var/atom/target, var/mob/living/user)
if(has_dropped >= 2)
to_chat(user, "<span class='warning'>You can't use this device again!</span>")
return
var/turf/targloc = get_turf(target)
if(!emagged)
for(var/turf/t in block(locate(targloc.x+2,targloc.y+2,targloc.z),locate(targloc.x-2,targloc.y-2,targloc.z)))
if (!istype(t.loc, /area/mine))
to_chat(user, "<span class='warning'>You can't do this so close to the station, point the laser further into the mine!</span>")
return
if (!isfloor(targloc))
to_chat(user, "<span class='warning'>You cannot request a drill on unstable flooring!</span>")
return
for(var/turf/t2 in block(locate(targloc.x+2,targloc.y+2,targloc.z+1),locate(targloc.x-2,targloc.y-2,targloc.z+1)))
if (!istype(t2.loc, /area/mine))
to_chat(user, "<span class='warning'>You can't do this beneath the station, point the laser further away from it!</span>")
return
if(!(user in (viewers(14,target))) )
to_chat(user, "<span class='warning'>You can't paint the target that far away!</span>")
return
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
add_fingerprint(user)
//laser pointer image
icon_state = "drillpointer_on"
var/list/showto = list()
for(var/mob/M in viewers(targloc))
if(M.client)
showto += M.client
var/image/I = image('icons/obj/projectiles.dmi',targloc,"red_laser",10)
I.pixel_x = target.pixel_x + rand(-5,5)
I.pixel_y = target.pixel_y + rand(-5,5)
to_chat(user, "<span class='notice'>You paint the target at [target].</span>")
var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)
announcer.config(list("Supply" = 0, "Common" = 0))
if(announcer)
if(!emagged)
announcer.autosay("Stand by for drillfall, ETA ten seconds, clear the targetted area.", "Mining Requests Console", "Supply")
else
announcer.autosay("St%n^ b* for dr$llfa#l, ETA t@n s*c%&ds, RUN.", "Mining Requests Console", "Common")
has_dropped++
addtimer(CALLBACK(GLOBAL_PROC, /proc/explosion, targloc, 1, 2, 4, 6), 100) //YEEHAW
addtimer(CALLBACK(src, .proc/drill_drop, targloc), 105)
flick_overlay(I, showto, 20) //2 seconds of the red dot appearing
icon_state = "drillpointer"
/obj/item/device/drill_dropper/proc/drill_drop(var/turf/target)
var/turf/lefttarget = locate(target.x-1, target.y, target.z)
var/turf/righttarget = locate(target.x+1, target.y, target.z)
var/turf/aboveturfleft = GetAbove(lefttarget)
var/turf/aboveturf = GetAbove(target)
var/turf/aboveturfright = GetAbove(righttarget)
var/has_crashed = FALSE
if(aboveturf)
if(!aboveturf.is_hole)
aboveturf.ChangeTurf(/turf/space)
target.visible_message("<span class='danger'>The drill parts crash through the roof!</span>")
has_crashed = TRUE
if(aboveturfleft)
if(!aboveturfleft.is_hole)
aboveturfleft.ChangeTurf(/turf/space)
if(!has_crashed)
target.visible_message("<span class='danger'>The drill parts crash through the roof!</span>")
has_crashed = TRUE
if(aboveturfright)
if(!aboveturfright.is_hole)
aboveturfright.ChangeTurf(/turf/space)
if(!has_crashed)
target.visible_message("<span class='danger'>The drill parts crash through the roof!</span>")
has_crashed = TRUE
new /obj/machinery/mining/brace(lefttarget)
new /obj/machinery/mining/drill(target)
new /obj/machinery/mining/brace(righttarget)
/obj/item/device/drill_dropper/emag_act(var/remaining_charges, var/mob/user)
if(!emagged)
emagged = TRUE
to_chat(user, "<span class='danger'>You override \the [src]'s area safety checks!</span>")
return 1
else
to_chat(user, "<span class='danger'>\The [src]'s area safety checks have already been disabled.</span>")
@@ -0,0 +1,100 @@
/obj/item/device/orbital_dropper
name = "laser targeting dropper"
desc = "A device used to paint a target, which will then promptly orbitally drop the requested items."
icon = 'icons/obj/device.dmi'
icon_state = "drillpointer"
item_state = "binoculars"
slot_flags = SLOT_BELT
w_class = ITEMSIZE_SMALL
var/has_dropped = 0 // Counter of how many times the targeter has been used
var/drop_amount = 2 // How many times can this item be used?
var/tileoffset = 8 // How far can you zoom with these binocular targeters
var/viewsize = 7 // How large the view is when you zoom
var/paint_distance = 14 // From how far away can you paint a target?
var/emagged = FALSE // If emagged, things can be dropped in on station areas
var/drop_message = "Orbital package inbound, clear the targetted area immediately!"
var/drop_message_emagged = "O*b$ital p&ck@ge in#)und, c-c-c-!"
var/announcer_name = "Mining Requests Console"
var/announcer_channel = "Supply" // If not emagged, will announce to this channel. If emagged, will always announce on the common channel.
var/template_name
/obj/item/device/orbital_dropper/attack_self(mob/user)
zoom(user, tileoffset, viewsize)
/obj/item/device/orbital_dropper/attack(mob/living/M, mob/user)
laser_act(M, user)
/obj/item/device/orbital_dropper/afterattack(var/atom/target, var/mob/living/user, flag, params)
if(flag) //we're placing the targetter on a table or in backpack
return
laser_act(target, user)
/obj/item/device/orbital_dropper/proc/laser_act(var/atom/target, var/mob/living/user)
if(has_dropped >= drop_amount)
to_chat(user, span("warning", "You can't use this device again!"))
return
var/turf/targloc = get_turf(target)
if(!emagged)
for(var/turf/t in block(locate(targloc.x+3,targloc.y+3,targloc.z), locate(targloc.x-3,targloc.y-3,targloc.z)))
if (!istype(t.loc, /area/mine))
to_chat(user, span("warning", "You can't do this so close to the station, point the laser further into the mine!"))
return
if (!isfloor(targloc))
to_chat(user, span("warning", "You cannot request this on unstable flooring!"))
return
if(!(user in (viewers(paint_distance, target))) )
to_chat(user, span("warning", "You can't paint the target that far away!"))
return
if (!user.IsAdvancedToolUser())
to_chat(user, span("warning", "You don't have the dexterity to do this!"))
return
add_fingerprint(user)
//laser pointer image
icon_state = "drillpointer_on"
var/list/showto = list()
for(var/mob/M in viewers(targloc))
if(M.client)
showto += M.client
var/image/I = image('icons/obj/projectiles.dmi', targloc, "red_laser", 10)
I.pixel_x = target.pixel_x + rand(-5,5)
I.pixel_y = target.pixel_y + rand(-5,5)
to_chat(user, span("notice", "You paint the target at [target]."))
var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)
announcer.config(list("Common" = FALSE, "Entertainment" = FALSE, "Response Team" = FALSE, "Science" = FALSE, "Command" = FALSE, "Medical" = FALSE, "Engineering" = FALSE, "Security" = FALSE, "Supply" = FALSE, "Service" = FALSE, "Mercenary" = FALSE, "Raider" = FALSE, "Ninja" = FALSE, "AI Private" = FALSE))
if(announcer)
if(!emagged)
announcer.autosay(drop_message, announcer_name, announcer_channel)
else
announcer.autosay(drop_message_emagged, announcer_name, "Common")
has_dropped++
addtimer(CALLBACK(GLOBAL_PROC, /proc/explosion, targloc, 1, 2, 4, 6), 100) //YEEHAW
addtimer(CALLBACK(src, .proc/orbital_drop, targloc, user), 105)
flick_overlay(I, showto, 20) //2 seconds of the red dot appearing
icon_state = "drillpointer"
/obj/item/device/orbital_dropper/proc/orbital_drop(var/turf/target, var/user)
var/dmm_suite/maploader = new
if(!maploader)
log_debug("Error, unable to load maploader in proc orbital_drop!")
return
log_and_message_admins("[key_name_admin(src)] has used a [src] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>.")
maploader.load_map(file("maps/templates/orbital/" + template_name), target.x, target.y, target.z, no_changeturf = TRUE)
/obj/item/device/orbital_dropper/emag_act(var/remaining_charges, var/mob/user)
if(!emagged)
emagged = TRUE
to_chat(user, span("danger", "You override \the [src]'s area safety checks!"))
return TRUE
else
to_chat(user, span("danger", "\The [src]'s area safety checks have already been disabled."))
@@ -0,0 +1,39 @@
/obj/item/device/orbital_dropper/drill
name = "drill dropper"
desc = "A device used to paint a target, which will then promptly orbitally drop the requested items. This drill literally pierces the heavens."
drop_message = "Stand by for drillfall, ETA ten seconds, clear the targetted area."
drop_message_emagged = "St%n^ b* for dr$llfa#l, ETA t@n s*c%&ds, RUN."
template_name = "drill.dmm"
/obj/item/device/orbital_dropper/mecha
name = "mecha dropper"
desc = "A device used to paint a target, which will then promptly orbitally drop the requested items. This one feels vaguely familiar..."
drop_amount = 1
drop_message = "Mech coming in hot!"
drop_message_emagged = "Mech comin- SHIT! WHO PAINTED THAT?"
announcer_name = "Respawn Mech Industries"
announcer_channel = "Common"
template_name = "combat-mecha.dmm"
/obj/item/device/orbital_dropper/armory
name = "armory dropper"
desc = "A device used to paint a target, which will then promptly orbitally drop the requested items. Who's ready to raise hell?"
drop_amount = 1
drop_message = "The cavalry has arrived!"
drop_message_emagged = "The cav-cav-cav-BzzzZZTTT!"
announcer_name = "GunCourier Industries Autodrone"
announcer_channel = "Common"
template_name = "mini-armory.dmm"
/obj/item/device/orbital_dropper/armory/syndicate
description_antag = "This is a stealthy variant of the standard armory orbital drop. It will not report itself dropping on common, unless emagged."
announcer_name = "Syndicate Autodrone"
announcer_channel = "Mercenary"
@@ -19,6 +19,7 @@
icon_state = "cypherkey"
channels = list("Mercenary" = 1)
origin_tech = list(TECH_ILLEGAL = 3)
description_antag = "An encryption key that allows you to intercept comms and speak on private non-station channels. Use :t to access the private channel."
syndie = 1//Signifies that it de-crypts Syndicate transmissions
/obj/item/device/encryptionkey/raider
@@ -149,3 +150,10 @@
/obj/item/device/encryptionkey/entertainment
name = "entertainment radio key"
channels = list("Entertainment" = 1)
/obj/item/device/encryptionkey/rev
name = "standard encryption key"
desc = "An encryption key for a radio headset. Contains cypherkeys."
channels = list("Raider" = 1)
origin_tech = list(TECH_ILLEGAL = 2)
description_antag = "An encryption key that allows you to speak on private non-station channels. Use :x to access the private channel."
+22 -9
View File
@@ -387,21 +387,34 @@ A list of items and costs is stored under the datum of every game mode, alongsid
discord_bot.send_to_cciaa("Announcer - Fake announcement:`[title]` - `[message]`, sent by [user]!")
qdel(src)
//ninja
/obj/item/device/ninja_uplink
name = "infiltrator uplink"
desc = "A small device used for access to a restricted cache of specialized items."
/obj/item/device/special_uplink
name = "special uplink"
desc = "A small device with knobs and switches."
description_antag = "This is hidden uplink! Use it in-hand to access the uplink interface and spend telecrystals to beam in items. Make sure to do it in private, it could look suspicious!"
icon = 'icons/obj/radio.dmi'
icon_state = "radio"
flags = CONDUCT
w_class = 2
w_class = ITEMSIZE_SMALL
var/starting_telecrystals // how much telecrystals the uplink should spawn with, defaults to default amount if not set
/obj/item/device/ninja_uplink/New(var/loc, var/mind)
/obj/item/device/special_uplink/New(var/loc, var/mind)
..()
hidden_uplink = new(src, mind)
hidden_uplink.uses = DEFAULT_TELECRYSTAL_AMOUNT
if(!starting_telecrystals)
hidden_uplink.uses = DEFAULT_TELECRYSTAL_AMOUNT
else
hidden_uplink.uses = starting_telecrystals
hidden_uplink.nanoui_menu = 1
/obj/item/device/ninja_uplink/attack_self(mob/user as mob)
if (hidden_uplink)
/obj/item/device/special_uplink/attack_self(mob/user as mob)
if(hidden_uplink)
hidden_uplink.trigger(user)
/obj/item/device/special_uplink/ninja
name = "infiltrator uplink"
/obj/item/device/special_uplink/rev
name = "station bounced radio"
desc = null // SBRs have no desc
icon_state = "walkietalkie" // more incognito
starting_telecrystals = DEFAULT_TELECRYSTAL_AMOUNT * 2