diff --git a/aurorastation.dme b/aurorastation.dme index f17dca66d65..48f613ddabf 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -755,6 +755,7 @@ #include "code\game\objects\items\devices\floor_painter.dm" #include "code\game\objects\items\devices\hacktool.dm" #include "code\game\objects\items\devices\holowarrant.dm" +#include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightmeter.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\magnetic_lock.dm" diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm new file mode 100644 index 00000000000..807d7af9898 --- /dev/null +++ b/code/game/objects/items/devices/laserpointer.dm @@ -0,0 +1,128 @@ + + +/obj/item/device/laser_pointer + name = "laser pointer" + desc = "Don't shine it in your eyes!" + icon = 'icons/obj/device.dmi' + icon_state = "pointer" + item_state = "pen" + var/pointer_icon_state + slot_flags = SLOT_BELT + w_class = 1 + var/turf/pointer_loc + var/obj/item/weapon/stock_parts/micro_laser/diode //cant use the laser without it + + + + +/obj/item/device/laser_pointer/red + pointer_icon_state = "red_laser" +/obj/item/device/laser_pointer/green + pointer_icon_state = "green_laser" +/obj/item/device/laser_pointer/blue + pointer_icon_state = "blue_laser" +/obj/item/device/laser_pointer/purple + pointer_icon_state = "purple_laser" + + +/obj/item/device/laser_pointer/Initialize() + . = ..() + diode = new(src) + icon_state = "pointer" + if(!pointer_icon_state) + pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser") + +/obj/item/device/laser_pointer/upgraded/Initialize() + . = ..() + diode = new /obj/item/weapon/stock_parts/micro_laser/ultra + + + +/obj/item/device/laser_pointer/attack(mob/living/M, mob/user) + laser_act(M, user) + +/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if(!diode) + user.drop_item() + W.forceMove(src) + diode = W + to_chat(user, "You install a [diode.name] in [src].") + else + to_chat(user, "[src] already has a laser diode.") + + else if(istype(W, /obj/item/weapon/screwdriver)) + if(diode) + to_chat(user, "You remove the [diode.name] from the [src].") + diode.forceMove(get_turf(user)) + diode = null + return + ..() + return + +/obj/item/device/laser_pointer/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/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user) + if( !(user in (viewers(7,target))) ) + return + if (!diode) + to_chat(user, "You point [src] at [target], but nothing happens!") + return + if (!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return + + add_fingerprint(user) + + + var/outmsg + var/turf/targloc = get_turf(target) + + if(istype(target, /obj/machinery/camera)) + var/obj/machinery/camera/C = target + + if(prob(25)) + C.emp_act(28) + outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!" + + admin_attack_log(user, src,"hits the camera with a laser pointer", "EMPd a camera with a laser pointer") + + else + outmsg = "You fail to hit the lens of [C] with [src]." + + if(iscarbon(target)) + if(user.zone_sel.selecting == "eyes") + var/mob/living/carbon/C = target + if(C.eyecheck() <= 0 && prob(30)) + outmsg = "You blind [C] with [src]" + C.eye_blind = 3 + else + outmsg = "You fail to blind [C] with [src]" + + //laser pointer image + icon_state = "pointer_[pointer_icon_state]" + var/list/showto = list() + for(var/mob/M in range(7,targloc)) + if(M.client) + showto += M.client + var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10) + I.pixel_x = target.pixel_x + rand(-5,5) + I.pixel_y = target.pixel_y + rand(-5,5) + + if(outmsg) + to_chat(user, outmsg) + else + to_chat(user, "You point [src] at [target].") + + + flick_overlay(I, showto, 10) + icon_state = "pointer" + +/obj/item/device/laser_pointer/Destroy() + if (diode) + QDEL_NULL(diode) + + . = ..() \ No newline at end of file diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 2e28e5471ee..69c798ce110 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -1005,7 +1005,10 @@ /obj/item/eightball = 11, /obj/item/eightball/haunted = 1, /obj/item/eightball/broken = 1, - /obj/item/weapon/spirit_board = 5 + /obj/item/weapon/spirit_board = 5, + /obj/item/device/laser_pointer = 1 + + ) /obj/random/arcade/orion diff --git a/html/changelogs/laserpointers.yml b/html/changelogs/laserpointers.yml new file mode 100644 index 00000000000..0d73ae9ab40 --- /dev/null +++ b/html/changelogs/laserpointers.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +################################# + +# Your name. +author: Drago + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds laser pointers." diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 3a46959f49f..718a93f5be6 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ