Files
GS13NG/code/modules/projectiles/pins.dm
r4d6 12a01d1656 update (#9)
* Minor underwear fixes and tweaks.

* Allows ghost mentors to orbit around the target instead of changing their view to the mob's.

* Ports some hud and update_icon code updates.

* contamination nerf

* Fix

* Stops humanoids whose skin_tone variable is set to "albino" from showing up as pale when examined should their species not use skintones anyway.

* Hello darkness my old friend.

* Ports "Refactors can_see_reagents"

* F

* MKUltra made double opt-in

* ROBUST OPTING MECHANICS

* Adds a hacky framework for digitigrade polyclothes

also adds a digitigrade state for polychromic shorts

* also adds aphrodisiacs, slaps, all hypno as prefs

* errors

* Modernizes Polychromic Uniform Code

No more modular_citadel, but the neck polychrome crap needs more work in another PR

* oh god please don't mess up

* git y u do dis

;-;

* Revert "Makes HE pipes realistically radiate away heat"

* more coat stuff yes yes

* woops

* Wew

* Steos are bad

* new wings and fluff

* Forgot a sprite

* another one

* I swear I had this in here orginally.

* Fixes mistake in less commit.

* reattaches missing antenna

* Effectively removes the long unrequired roboticist encryption key.

* updates ratvar coat

* magazine metal cost tweaks, speedloader in AIB

* the very shitty idea: "muh speedloader"

* Updating dynamic config, some balancing

* Automatic changelog generation for PR #10282 [ci skip]

* unfucks short hair 80s so the left facing sprite doesnt make you look like a crackhead

* Automatic changelog generation for PR #10266 [ci skip]

* ah, the wonders of atomization

* [s] fixes a little door assembly glass dupe exploit

* Update BoxStation.dmm

* Update pai_defense.dm

* fixes bad sprite states

* Automatic changelog generation for PR #10242 [ci skip]

* Automatic changelog generation for PR #10237 [ci skip]

* Added a ghost role with its own spawner for the purposes of chillling in the ninja holding facility.

* holy shit i hope this compiles

* e

* yee

* Automatic changelog generation for PR #10128 [ci skip]

* Nope, it didn't compile, Harold.

* Automatic changelog generation for PR #10283 [ci skip]

* Automatic changelog generation for PR #10281 [ci skip]

* Automatic changelog generation for PR #10250 [ci skip]

* Applied suggestions and minor tweaks.

* f

* yeah fair enough

Co-Authored-By: Ghom <42542238+Ghommie@users.noreply.github.com>

* Update engine_goggles.dm

* changes

* Automatic changelog generation for PR #10264 [ci skip]

* Automatic changelog generation for PR #10298 [ci skip]

* Good idea, tbh.

* Small touch-up.

* Nerfs armor and antistun

* Automatic changelog generation for PR #10296 [ci skip]

* let the adminbus commence

* sprites

* clothing add

* fix

* vending

* loadout

* FIXEdD

* Automatic changelog generation for PR #10265 [ci skip]

* Automatic changelog generation for PR #10289 [ci skip]

* Automatic changelog generation for PR #10268 [ci skip]

* Update CentCom.dmm

* ehh fine but why would you use this proc for that

* Update language_holder.dm

* Automatic changelog generation for PR #10315 [ci skip]

* cocooooonuuuuuuts

* excludes certain ghost roles from being affected by health events

* fixes the thing

* probably fixes pandoras attacking their owners

* Update stamina.dm

* Update sprint.dm

* Update food_reagents.dm

* Automatic changelog generation for PR #10322 [ci skip]

* does the fix?

* What about this?

* Wait no its actually the other way around.

* weh

* Automatic changelog generation for PR #10297 [ci skip]

* Automatic changelog generation for PR #10299 [ci skip]

* more weh.

* even more weh.

* all of the weh.

* ah

* Automatic changelog generation for PR #10217 [ci skip]

* maybe fixes?

* Don't use named arguments on new, please.

* Made a line use the dang macro

* Made sure ghost cafe visitors don't get midround antags

* Automatic changelog generation for PR #10328 [ci skip]

* Physiology so species changes dont fuck it up

* Whoops

* Aarggghh small fucking differences

* Makes ass slap attempts fail more loudly on opted-out mobs

* Automatic changelog generation for PR #10318 [ci skip]

* Automatic changelog generation for PR #10091 [ci skip]

* Update borghydro.dm

* Update grass_carpet.dm

* Ports reflector blobs

Ports reflectors from /TG/

* mouth

* Fixes UI for poly collars

AltClick for collars was seemingly forgotten so I've added it back

* auto ooc

* roundend too

* hnnnnnng code improvements

* marshmallow

* telescopic IVs

* tiny fix

* Automatic changelog generation for PR #10324 [ci skip]

* Automatic changelog generation for PR #10323 [ci skip]

* Update code/modules/hydroponics/grown/grass_carpet.dm

Co-Authored-By: Ghom <42542238+Ghommie@users.noreply.github.com>

* got it

* Update engine_goggles.dm

* [s] Fixes ghost anti-ghostrole timers a little.

* chestbursters deleting brains fix.

* Wait a minute...

* ...which var are you?

* Update belt.dm

* tiny fixes

* makes it a trait

* few fixes

* wow divide by 0 very cool

* Automatic changelog generation for PR #10095 [ci skip]

* Automatic changelog generation for PR #10312 [ci skip]

* Automatic changelog generation for PR #10243 [ci skip]

* Automatic changelog generation for PR #10336 [ci skip]

* Automatic changelog generation for PR #10335 [ci skip]

* Automatic changelog generation for PR #10334 [ci skip]

* Automatic changelog generation for PR #10239 [ci skip]

* Automatic changelog generation for PR #10168 [ci skip]

* Automatic changelog generation for PR #10331 [ci skip]

* Automatic changelog generation for PR #10320 [ci skip]

* Maybe he means this?

* CE Locker Exodus: The Removaling

Removes junk from the CE locker.
Adds empty engineering lockers.
I don't know how to do this as a child and not have populate contents fill the child.

* ok

* Automatic changelog generation for PR #10348 [ci skip]

* Automatic changelog generation for PR #10333 [ci skip]

* changelog.html

* desc

* hnnnng

* weh

* did this actually change anything

* Automatic changelog generation for PR #10337 [ci skip]

* yee.

* yee2.

* Automatic changelog generation for PR #10339 [ci skip]

* Ghommies fixes

* Automatic changelog generation for PR #10306 [ci skip]

* amazing.

* Automatic changelog generation for PR #10357 [ci skip]

* Automatic changelog generation for PR #10301 [ci skip]

* Update chem_master.dm

* Automatic changelog generation for PR #10123 [ci skip]

* Automatic changelog generation for PR #10165 [ci skip]

* Automatic changelog generation for PR #10338 [ci skip]

* Automatic changelog generation for PR #10344 [ci skip]

* Oh god oh fuck

* Update code/modules/hydroponics/seeds.dm

Co-Authored-By: Ghom <42542238+Ghommie@users.noreply.github.com>

* Update code/modules/hydroponics/seeds.dm

Co-Authored-By: Ghom <42542238+Ghommie@users.noreply.github.com>

* Update code/modules/hydroponics/gene_modder.dm

Co-Authored-By: Ghom <42542238+Ghommie@users.noreply.github.com>

* Update telescopic_iv.dm

* Automatic changelog generation for PR #10364 [ci skip]

* afwafwadjiwao

* Automatic changelog generation for PR #10365 [ci skip]

* Automatic changelog generation for PR #10319 [ci skip]

* Automatic changelog generation for PR #10345 [ci skip]

* Automatic changelog generation for PR #10362 [ci skip]

* Automatic changelog generation for PR #10309 [ci skip]

* Makes lockers into subtypes

Adds new lockers cleanly at the bottom instead and as subtypes.

* dab

* dab 2x

* Automatic changelog generation for PR #10349 [ci skip]

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Putnam3145 <putnam3145@gmail.com>
Co-authored-by: Michiyamenotehifunana <31995558+Michiyamenotehifunana@users.noreply.github.com>
Co-authored-by: Seris02 <49109742+Seris02@users.noreply.github.com>
Co-authored-by: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Co-authored-by: shellspeed1 <46614774+shellspeed1@users.noreply.github.com>
Co-authored-by: Hatterhat <31829017+Hatterhat@users.noreply.github.com>
Co-authored-by: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Co-authored-by: CitadelStationBot <citadelstationcommunity@gmail.com>
Co-authored-by: Detective-Google <48196179+Detective-Google@users.noreply.github.com>
Co-authored-by: LetterJay <9606363+LetterJay@users.noreply.github.com>
Co-authored-by: Lin <linzolle@gmail.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Co-authored-by: kappa-sama <44128284+kappa-sama@users.noreply.github.com>
Co-authored-by: Arturlang <arturpaavooskari.lang@gmail.com>
Co-authored-by: loginsandylogout <nintendofan356@gmail.com>
Co-authored-by: BlackMajor <henrydyer6@hotmail.com>
Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>
Co-authored-by: KathrinBailey <53862927+KathrinBailey@users.noreply.github.com>
Co-authored-by: nik707 <38332985+nik707@users.noreply.github.com>
2019-12-31 13:12:23 -05:00

232 lines
7.4 KiB
Plaintext

/obj/item/firing_pin
name = "electronic firing pin"
desc = "A small authentication device, to be inserted into a firearm receiver to allow operation. NT safety regulations require all new designs to incorporate one."
icon = 'icons/obj/device.dmi'
icon_state = "firing_pin"
item_state = "pen"
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_TINY
attack_verb = list("poked")
var/fail_message = "<span class='warning'>INVALID USER.</span>"
var/selfdestruct = 0 // Explode when user check is failed.
var/force_replace = 0 // Can forcefully replace other pins.
var/pin_removeable = 0 // Can be replaced by any pin.
var/obj/item/gun/gun
/obj/item/firing_pin/New(newloc)
..()
if(istype(newloc, /obj/item/gun))
gun = newloc
/obj/item/firing_pin/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag)
if(istype(target, /obj/item/gun))
var/obj/item/gun/G = target
if(G.pin && (force_replace || G.pin.pin_removeable))
G.pin.forceMove(get_turf(G))
G.pin.gun_remove(user)
to_chat(user, "<span class ='notice'>You remove [G]'s old pin.</span>")
if(!G.pin)
if(!user.temporarilyRemoveItemFromInventory(src))
return
gun_insert(user, G)
to_chat(user, "<span class ='notice'>You insert [src] into [G].</span>")
else
to_chat(user, "<span class ='notice'>This firearm already has a firing pin installed.</span>")
/obj/item/firing_pin/emag_act(mob/user)
. = ..()
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
to_chat(user, "<span class='notice'>You override the authentication mechanism.</span>")
return TRUE
/obj/item/firing_pin/proc/gun_insert(mob/living/user, obj/item/gun/G)
gun = G
forceMove(gun)
gun.pin = src
return
/obj/item/firing_pin/proc/gun_remove(mob/living/user)
gun.pin = null
gun = null
return
/obj/item/firing_pin/proc/pin_auth(mob/living/user)
return TRUE
/obj/item/firing_pin/proc/auth_fail(mob/living/user)
if(user)
user.show_message(fail_message, MSG_VISUAL)
if(selfdestruct)
if(user)
user.show_message("<span class='danger'>SELF-DESTRUCTING...</span><br>", MSG_VISUAL)
to_chat(user, "<span class='userdanger'>[gun] explodes!</span>")
explosion(get_turf(gun), -1, 0, 2, 3)
if(gun)
qdel(gun)
/obj/item/firing_pin/magic
name = "magic crystal shard"
desc = "A small enchanted shard which allows magical weapons to fire."
// Test pin, works only near firing range.
/obj/item/firing_pin/test_range
name = "test-range firing pin"
desc = "This safety firing pin allows weapons to be fired within proximity to a firing range."
fail_message = "<span class='warning'>TEST RANGE CHECK FAILED.</span>"
pin_removeable = TRUE
/obj/item/firing_pin/test_range/pin_auth(mob/living/user)
if(!istype(user))
return FALSE
for(var/obj/machinery/magnetic_controller/M in range(user, 3))
return TRUE
return FALSE
// Implant pin, checks for implant
/obj/item/firing_pin/implant
name = "implant-keyed firing pin"
desc = "This is a security firing pin which only authorizes users who are implanted with a certain device."
fail_message = "<span class='warning'>IMPLANT CHECK FAILED.</span>"
var/obj/item/implant/req_implant = null
/obj/item/firing_pin/implant/pin_auth(mob/living/user)
if(user)
for(var/obj/item/implant/I in user.implants)
if(req_implant && I.type == req_implant)
return TRUE
return FALSE
/obj/item/firing_pin/implant/mindshield
name = "mindshield firing pin"
desc = "This Security firing pin authorizes the weapon for only mindshield-implanted users."
icon_state = "firing_pin_loyalty"
req_implant = /obj/item/implant/mindshield
/obj/item/firing_pin/implant/pindicate
name = "syndicate firing pin"
icon_state = "firing_pin_pindi"
req_implant = /obj/item/implant/weapons_auth
// Honk pin, clown's joke item.
// Can replace other pins. Replace a pin in cap's laser for extra fun!
/obj/item/firing_pin/clown
name = "hilarious firing pin"
desc = "Advanced clowntech that can convert any firearm into a far more useful object."
color = "#FFFF00"
fail_message = "<span class='warning'>HONK!</span>"
force_replace = TRUE
/obj/item/firing_pin/clown/pin_auth(mob/living/user)
playsound(src, 'sound/items/bikehorn.ogg', 50, 1)
return FALSE
// Ultra-honk pin, clown's deadly joke item.
// A gun with ultra-honk pin is useful for clown and useless for everyone else.
/obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user)
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY))))
return FALSE
return TRUE
/obj/item/firing_pin/clown/ultra/gun_insert(mob/living/user, obj/item/gun/G)
..()
G.clumsy_check = FALSE
/obj/item/firing_pin/clown/ultra/gun_remove(mob/living/user)
gun.clumsy_check = initial(gun.clumsy_check)
..()
// Now two times deadlier!
/obj/item/firing_pin/clown/ultra/selfdestruct
desc = "Advanced clowntech that can convert any firearm into a far more useful object. It has a small nitrobananium charge on it."
selfdestruct = TRUE
// DNA-keyed pin.
// When you want to keep your toys for yourself.
/obj/item/firing_pin/dna
name = "DNA-keyed firing pin"
desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link."
icon_state = "firing_pin_dna"
fail_message = "<span class='warning'>DNA CHECK FAILED.</span>"
var/unique_enzymes = null
/obj/item/firing_pin/dna/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag && iscarbon(target))
var/mob/living/carbon/M = target
if(M.dna && M.dna.unique_enzymes)
unique_enzymes = M.dna.unique_enzymes
to_chat(user, "<span class='notice'>DNA-LOCK SET.</span>")
/obj/item/firing_pin/dna/pin_auth(mob/living/carbon/user)
if(user && user.dna && user.dna.unique_enzymes)
if(user.dna.unique_enzymes == unique_enzymes)
return TRUE
return FALSE
/obj/item/firing_pin/dna/auth_fail(mob/living/carbon/user)
if(!unique_enzymes)
if(user && user.dna && user.dna.unique_enzymes)
unique_enzymes = user.dna.unique_enzymes
to_chat(user, "<span class='notice'>DNA-LOCK SET.</span>")
else
..()
/obj/item/firing_pin/dna/dredd
desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link. It has a small explosive charge on it."
selfdestruct = TRUE
/obj/item/firing_pin/holy
name = "blessed pin"
desc = "A firing pin that only responds to those who are holier than thou."
/obj/item/firing_pin/holy/pin_auth(mob/living/user)
if(user.mind.isholy)
return TRUE
return FALSE
// Laser tag pins
/obj/item/firing_pin/tag
name = "laser tag firing pin"
desc = "A recreational firing pin, used in laser tag units to ensure users have their vests on."
fail_message = "<span class='warning'>SUIT CHECK FAILED.</span>"
var/obj/item/clothing/suit/suit_requirement = null
var/tagcolor = ""
/obj/item/firing_pin/tag/pin_auth(mob/living/user)
if(ishuman(user))
var/mob/living/carbon/human/M = user
if(istype(M.wear_suit, suit_requirement))
return TRUE
to_chat(user, "<span class='warning'>You need to be wearing [tagcolor] laser tag armor!</span>")
return FALSE
/obj/item/firing_pin/tag/red
name = "red laser tag firing pin"
icon_state = "firing_pin_red"
suit_requirement = /obj/item/clothing/suit/redtag
tagcolor = "red"
/obj/item/firing_pin/tag/blue
name = "blue laser tag firing pin"
icon_state = "firing_pin_blue"
suit_requirement = /obj/item/clothing/suit/bluetag
tagcolor = "blue"
/obj/item/firing_pin/Destroy()
if(gun)
gun.pin = null
return ..()