From e026c65a6f38628ea5c69411c229a01f43b5ca1d Mon Sep 17 00:00:00 2001 From: Duck- Date: Sun, 31 Aug 2014 00:20:25 -0400 Subject: [PATCH] Protolasers (WIP/unobtainable), beginnings of accuracy rework. My first project! Done by myself! Yesss. okay, sounds helped. but it was mostly me. --- aurora.dme | 1 + code/modules/mob/living/carbon/human/life.dm | 4 + .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/mob_movement.dm | 5 + code/modules/projectiles/gun.dm | 3 + code/modules/projectiles/guns/energy/laser.dm | 2 +- .../projectiles/guns/energy/modular.dm | 374 ++++++++++++++++++ code/modules/projectiles/projectile.dm | 2 +- code/modules/projectiles/projectile/beams.dm | 40 +- .../modules/projectiles/projectile/bullets.dm | 5 +- code/setup.dm | 6 +- data/investigate/gravity.html | 4 +- icons/obj/projectiles.dmi | Bin 31208 -> 32559 bytes 13 files changed, 438 insertions(+), 10 deletions(-) create mode 100644 code/modules/projectiles/guns/energy/modular.dm diff --git a/aurora.dme b/aurora.dme index 072ce7b4..558067c9 100644 --- a/aurora.dme +++ b/aurora.dme @@ -1231,6 +1231,7 @@ #include "code\modules\projectiles\guns\energy\erifles.dm" #include "code\modules\projectiles\guns\energy\laser.dm" #include "code\modules\projectiles\guns\energy\lawgiver.dm" +#include "code\modules\projectiles\guns\energy\modular.dm" #include "code\modules\projectiles\guns\energy\nuclear.dm" #include "code\modules\projectiles\guns\energy\pulse.dm" #include "code\modules\projectiles\guns\energy\special.dm" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index c1146fe5..e630823d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1321,6 +1321,10 @@ var/obj/item/weapon/gun/energy/rifle/sniperrifle/s = locate() in src if(s.zoom) s.zoom() + if(locate(/obj/item/weapon/gun/energy/laser/modular, contents)) + var/obj/item/weapon/gun/energy/laser/modular/s = locate() in src + if(s.zoom) + s.zoom() else sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index cba6b0f6..407ef126 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1019,7 +1019,7 @@ /* /mob/living/silicon/robot/proc/updatefire() return -* +*/ //Call when target overlay should be added/removed /mob/living/silicon/robot/update_targeted() if(!targeted_by && target_locked) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f005c06e..95b412f7 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -192,6 +192,11 @@ var/obj/item/weapon/gun/energy/rifle/sniperrifle/s = locate() in mob if(s.zoom) s.zoom() + if(locate(/obj/item/weapon/gun/energy/laser/modular, mob.contents)) // If mob moves while zoomed in with modular rifle, unzoom them. + var/obj/item/weapon/gun/energy/laser/modular/s = locate() in mob + if(s.zoom) + s.zoom() + if(Process_Grab()) return diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 5fa82687..ea46b882 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -44,6 +44,9 @@ var/force_unwielded = 0 //Force modification, because striking someone with a rifle held in two hands -hurts- var/force_wielded = 0 + var/accuracy = -30 //goes into projectile.dm to provide individual offsets for each gun. negative to increase base accuracy + var/rangedrop = 5 //how much accuracy the average gun loses for every tile + proc/can_wield() //Override in order to make a weapon two handed, remember to add toggle_wield(mob/user as mob) in the weapon somewhere return 0 //Override /Fire(..) to force the weapon to be two handed diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 6d1a5deb..2535afc7 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -21,7 +21,7 @@ isHandgun() return 1 -obj/item/weapon/gun/energy/laser/retro +/obj/item/weapon/gun/energy/laser/retro name ="retro laser" icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm new file mode 100644 index 00000000..4912e167 --- /dev/null +++ b/code/modules/projectiles/guns/energy/modular.dm @@ -0,0 +1,374 @@ +/obj/item/weapon/gun/energy/laser/modular/ + name = "basic protolaser" + desc = "A basic, modular laser rifle." + icon_state = "laser" + item_state = "laser" + fire_sound = 'sound/weapons/Laser.ogg' + slot_flags = SLOT_BACK + w_class = 4 + m_amt = 2000 + origin_tech = "combat=3;magnets=2" + projectile_type = "/obj/item/projectile/beam/reallyweak" + fire_delay = 16 + cell_type = "/obj/item/weapon/cell" + + var/canzoom = 0 + var/zoom = 0 + var/open = 0 + + var/upgradepointtotal = 16 //KNOWN BUG: Crashes if you try to VV it with a lot of stuff inside. By a lot, I mean 'everything.' At least in all my tests. + var/upgradepoints = 0 + + //Changeable part mods// + + var/obj/item/weapon/stock_parts/micro_laser/lasertype + var/obj/item/weapon/stock_parts/manipulator/delaymod + var/obj/item/weapon/stock_parts/scanning_module/targetmod + var/obj/item/weapon/stock_parts/console_screen/screen + var/obj/item/weapon/stock_parts/capacitor/powermod +// var/obj/item/weapon/stock_parts/matter_bin/heatsink //i have no idea what this is for yet so. + + var/hasscreen = 0 // for scoping. + + +/obj/item/weapon/gun/energy/laser/modular/pistol // small modular laser pistol. + name = "basic protopistol" + desc = "A basic, modular laser pistol." + + w_class = 2 + upgradepointtotal = 10 + +/obj/item/weapon/gun/energy/laser/modular/pistol/advanced //better version of the pistol + name = "advanced protopistol" + desc = "A protopistol with an improved frame, capable of holding more upgrades." + + w_class = 2 + upgradepointtotal = 16 + +/obj/item/weapon/gun/energy/laser/modular/advanced //better version of the rifle. + name = "advanced protolaser" + desc = "A protolaser with an improved frame, capable of holding more upgrades." + + upgradepointtotal = 22 + +/obj/item/weapon/gun/energy/laser/modular/advanced/bluespace //for admins. maybe r&d with cell nerf if feeling generous + name = "bluespace protolaser" + desc = "A highly-advanced laser, capable of holding all your upgrades. Powered by bluespace." + + upgradepointtotal = 35 //enough for everything + cell_type = "/obj/item/weapon/cell/infinite" + +/obj/item/weapon/gun/energy/laser/modular/pistol/bluespace //for admins + name = "bluespace protopistol" + desc = "A highly-advanced pistol, capable of holding all your upgrades. Powered by bluespace." + + w_class = 2 + upgradepointtotal = 35 //enough for all of the things + cell_type = "/obj/item/weapon/cell/infinite" + +/obj/item/weapon/gun/energy/laser/modular/attackby(obj/item/W, mob/user) //the modding stuffs + + if (istype(W, /obj/item/weapon/screwdriver)) + if(open == 1) + user << "You secure the parts and close the [src]." + open = 0 + checkparts() //applies the upgrades. + else if(open == 0) + user << "You open the gun and remove the parts from [src]." + open = 1 + upgradepoints = 0 //you open the gun and everything falls out. reset this stuff here. + hasscreen = 0 + canzoom = 0 + /* + Have it reset all the gun's stats here. Do it after the gun has stats. Gun does not have stats yet + */ + if(lasertype) //if lasertype exists ie is not null + lasertype.loc = get_turf(src.loc) + lasertype = null // drop to floor and set to null + if(delaymod) + delaymod.loc = get_turf(src.loc) + delaymod = null + if(targetmod) + targetmod.loc = get_turf(src.loc) + targetmod = null + if(powermod) + powermod.loc = get_turf(src.loc) + powermod = null + if(screen) + screen.loc = get_turf(src.loc) + screen = null +/* if(heatsink) + heatsink.loc = get_turf(src.loc) + heatsink = null */ +/* if(cell_type) + cell_type.loc = get_turf(src.loc) + cell_type = null +*/ + checkparts() //resets all values since everything popped out. + + if (open == 1) + if (istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if (!lasertype) + lasertype = W + if(lasertype.rating == 1) + if(assignpoints(3, user)) + user.drop_item() + W.loc = src + user << "You install a [lasertype.name] in [src]." + else + lasertype = null + return + else if(lasertype.rating == 2) + if(assignpoints(5, user)) + user.drop_item() + W.loc = src + user << "You install a [lasertype.name] in [src]." + else + lasertype = null + return + else if(lasertype.rating == 3) + if(assignpoints(8, user)) + user.drop_item() + W.loc = src + user << "You install a [lasertype.name] in [src]." + else + lasertype = null + return + + else if (lasertype) + user << "There's already a laser inside!" + + else if (istype(W, /obj/item/weapon/stock_parts/manipulator)) + if (!delaymod) + delaymod = W + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + if(delaymod.rating == 1) + if(assignpoints(2, user)) + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + else + delaymod = null + return + else if(delaymod.rating == 2) + if(assignpoints(6, user)) + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + else + delaymod = null + return + else if(delaymod.rating == 3) + if(assignpoints(12, user)) + user.drop_item() + W.loc = src + user << "You install a [delaymod.name] in [src]." + else + delaymod = null + return + + else if (delaymod) + user << "There's already a manipulator inside!" + + else if (istype(W, /obj/item/weapon/stock_parts/scanning_module)) + if (!targetmod) + targetmod = W + if(targetmod.rating == 1) + if(assignpoints(2, user)) + user.drop_item() + W.loc = src + user << "You install a [targetmod.name] in [src]." + else + targetmod = null + return + else if(targetmod.rating == 2) + if(assignpoints(4, user)) + user.drop_item() + W.loc = src + user << "You install a [targetmod.name] in [src]." + else + targetmod = null + return + + else if(targetmod.rating == 3) + if(assignpoints(6, user)) + user.drop_item() + W.loc = src + user << "You install a [targetmod.name] in [src]." + else + targetmod = null + return + + else if (targetmod) + user << "There's already a scanning module inside!" + + else if (istype(W, /obj/item/weapon/stock_parts/console_screen)) + if (!screen) + screen = W + if(assignpoints(3, user)) + user.drop_item() + W.loc = src + hasscreen = 1 + user << "You install a screen in [src]." + else + screen = null + return + + + else if (screen) + user << "There's already a screen inside!" + else if (istype(W, /obj/item/weapon/stock_parts/capacitor)) + if (!powermod) + powermod = W + if(powermod.rating == 1) + if(assignpoints(1, user)) + user.drop_item() + W.loc = src + user << "You install a [powermod.name] in [src]." + else + powermod = null + return + + else if(powermod.rating == 2) + if(assignpoints(3, user)) + user.drop_item() + W.loc = src + user << "You install a [powermod.name] in [src]." + else + powermod = null + return + + else if(powermod.rating == 3) + if(assignpoints(6, user)) + user.drop_item() + W.loc = src + user << "You install a [powermod.name] in [src]." + else + powermod = null + return + + + else if (powermod) + user << "There's already a capacitor inside!" + +/* else if (istype(W, /obj/item/weapon/stock_parts/matter_bin)) + if (!heatsink) + user.drop_item() + W.loc = src + heatsink = W + user << "You install a [heatsink.name] in [src]." + if(heatsink.rating == 1) + upgradepoints += 2 + else if(heatsink.rating == 2) + upgradepoints += 5 + else if(heatsink.rating == 3) + upgradepoints += 10 + + else if (heatsink) + user << "There's already a heatsink inside!" +*/ +/obj/item/weapon/gun/energy/laser/modular/proc/checkparts() //updates parts and values + + if(!lasertype) + projectile_type = "/obj/item/projectile/beam/reallyweak" + charge_cost = 150 + else if(lasertype.rating == 1) + projectile_type = "/obj/item/projectile/beam/green" // preferably a green laser. expecting standard 40 damage. + charge_cost = 200 + else if(lasertype.rating == 2) + projectile_type = "/obj/item/projectile/beam/blue" //powerful. eight shots with highest-end power equipment. + charge_cost = 500 + else if(lasertype.rating == 3) + projectile_type = "/obj/item/projectile/beam/violet" //extremely high-powered. you get four shots -with- top-tier powermods. less without. + charge_cost = 1000 + + if(!delaymod) + fire_delay = 16 + else if(delaymod.rating == 1) + fire_delay = 8 + else if(delaymod.rating == 2) + fire_delay = 4 + else if(delaymod.rating == 3) + fire_delay = 2 + + if(!targetmod) // TBD after projectile accuracy. extreme placeholder values. +// miss_modifier = 0 + canzoom = 0 + else if(targetmod.rating == 1) +// miss_modifier = -30 + canzoom = 0 + else if(targetmod.rating == 2) +// miss_modifier = -60 + canzoom = 1 //advanced and up scanning modules let you zoom in. + else if(targetmod.rating == 3) +// miss_modifier = -90 + canzoom = 1 + if(!powermod) + charge_cost = 1.5*charge_cost + else if(powermod.rating == 1) + charge_cost = charge_cost + else if(powermod.rating == 2) + charge_cost = charge_cost/2 + else if(powermod.rating == 3) + charge_cost = charge_cost/4 + +/* if(!heatsink) + + else if(heatsink.rating == 1) + + else if(heatsink.rating == 2) + + else if(heatsink.rating == 3)*/ + +/obj/item/weapon/gun/energy/laser/modular/proc/assignpoints(var/newpoints, var/mob/user as mob) + if((upgradepointtotal) >= (upgradepoints + newpoints)) + upgradepoints += newpoints + user << "You have used [upgradepoints]/[upgradepointtotal] upgrade points. This upgrade costs [newpoints] points." + return 1 + else + user << "The frame cannot handle this many upgrades!" + user << "You have used [upgradepoints]/[upgradepointtotal] upgrade points. This upgrade costs [newpoints] points." + return 0 + +/obj/item/weapon/gun/energy/laser/modular/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0) + if(open == 1) + user << "Secure the gun with a screwdriver first!" + return + ..() + +/obj/item/weapon/gun/energy/laser/modular/dropped(mob/user) + user.client.view = world.view + +/obj/item/weapon/gun/energy/laser/modular/verb/zoom() + set category = "Object" + set name = "Use Scan-Screen" + set popup_menu = 0 + + if(usr.stat || !(istype(usr,/mob/living/carbon/human))) + usr << "You are unable to focus on the screen." + return + if(!zoom && global_hud.darkMask[1] in usr.client.screen) + usr << "Your welding equipment makes it hard to see the screen." + return + if(!zoom && usr.get_active_hand() != src) + usr << "You are too distracted to watch the screen, perhaps if it was in your active hand this might work better" + return + if((hasscreen == 0) || (canzoom == 0)) + usr << "This gun lacks the parts for components for zooming." + return + + if(usr.client.view == world.view) + if(!usr.hud_used.hud_shown) + usr.button_pressed_F12(1) // If the user has already limited their HUD this avoids them having a HUD when they zoom in + usr.button_pressed_F12(1) + usr.client.view = 12 + zoom = 1 + else + usr.client.view = world.view + if(!usr.hud_used.hud_shown) + usr.button_pressed_F12(1) + zoom = 0 + usr << "Zoom mode [zoom?"en":"dis"]abled." + return \ No newline at end of file diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8e19a9d1..7aee9719 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -93,7 +93,7 @@ var/obj/item/weapon/gun/daddy = shot_from //Kinda balanced by fact you need like 2 seconds to aim if (daddy.target && original in daddy.target) //As opposed to no-delay pew pew miss_modifier += -30 - def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 5*distance) + def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 10*distance) // add +daddy.missmod vars to gun and this. snowflake accuracy if(!def_zone) visible_message("\blue \The [src] misses [M] narrowly!") diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 23abaaef..236517f3 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -188,4 +188,42 @@ var/list/beam_master = list() damage = 30 damage_type = BURN flag = "laser" - eyeblur = 4 \ No newline at end of file + eyeblur = 4 + +//modular laser projectiles + +/obj/item/projectile/beam/reallyweak + name = "unfocused laser" + icon_state = "laser" + damage = 20 + +/obj/item/projectile/beam/green + name = "green laser" + icon_state = "lasergreen" + damage = 40 + agony = 25 //these extra values and below are all timed so they knock you out only on the killing/critting blow. more for coolness than effect. + +/obj/item/projectile/beam/blue + name = "blue laser" + icon_state = "laserblue" + damage = 60 + irradiate = 40 + agony = 40 + + +/obj/item/projectile/beam/violet + name = "violet laser" + icon_state = "laserviolet" + damage = 80 + irradiate = 50 + agony = 50 + +/obj/item/projectile/beam/violet/on_hit(var/atom/target, var/blocked = 0) + if(istype(target, /mob/living/carbon)) + var/mob/living/carbon/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() + else if(istype(target, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() \ No newline at end of file diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 933a5021..2b21cc6b 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -43,7 +43,10 @@ var/mob/living/carbon/M = target M.adjust_fire_stacks(1) M.IgniteMob() - + else if(istype(target, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() /obj/item/projectile/bullet/incendiary/shell name = "incendiary shell" damage_type = BURN diff --git a/code/setup.dm b/code/setup.dm index c0259f40..ee89e314 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -62,9 +62,9 @@ #define PRESSURE_DAMAGE_COEFFICIENT 4 //The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE #define MAX_HIGH_PRESSURE_DAMAGE 4 //This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :( -#define LOW_PRESSURE_DAMAGE 6 //The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). -//low pressure damage bumped to 6 because current ZAS means cold does not proc half the time. You can waltz in space and be totally fine. -#define PRESSURE_SUIT_REDUCTION_COEFFICIENT 0.8 //This is how much (percentual) a suit with the flag STOPSPRESSUREDMAGE reduces pressure. +#define LOW_PRESSURE_DAMAGE 4 //The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). +//low pressure damage bumped to 4 because current ZAS means cold does not proc half the time. 6 was too much. +#define PRESSURE_SUIT_REDUCTION_COEFFICIENT 0.6 //This is how much (percentual) a suit with the flag STOPSPRESSUREDMAGE reduces pressure. orig. .8 but we had spacewalkers without helmets. #define PRESSURE_HEAD_REDUCTION_COEFFICIENT 0.4 //This is how much (percentual) a helmet/hat with the flag STOPSPRESSUREDMAGE reduces pressure. // Doors! diff --git a/data/investigate/gravity.html b/data/investigate/gravity.html index ef0b20af..cbf8cd75 100644 --- a/data/investigate/gravity.html +++ b/data/investigate/gravity.html @@ -1,2 +1,2 @@ -21:21 [0x20077ce] (92,152,1) || the gravitational generator has regained power.
-21:21 [0x20077ce] (92,152,1) || the gravitational generator is now charging.
+22:48 [0x200779e] (92,152,1) || the gravitational generator has regained power.
+22:48 [0x200779e] (92,152,1) || the gravitational generator is now charging.
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index da413aa54b7ea2ba10a5264ff6cbcfea764aa701..495db1b1cee13f06d7e524d7cf7a3a1728605123 100644 GIT binary patch delta 12297 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 delta 10935 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