From 9de132a0a34dc5f54cc6e5e391da5c54d3845320 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Mon, 7 Oct 2013 18:12:22 +0100 Subject: [PATCH 1/3] Small fixes and a new atom flag. * Fixes the ( shaped cyan wire * Fixes a luminosity bug with glowshrooms. * Changes a ridiculous internal loop in intercoms to use the MC. * Makes intercoms not be bloodied by bloody hands. * Adds a "NOBLOODY" flag for atoms that don't want to be bloodied. Signed-off-by: Mloc-Argent --- code/__DEFINES.dm | 1 + code/game/atoms.dm | 1 + .../objects/items/devices/radio/intercom.dm | 18 ++++++++++-------- code/modules/hydroponics/grown.dm | 4 ++-- icons/obj/power_cond/power_cond_cyan.dmi | Bin 5980 -> 5913 bytes 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES.dm b/code/__DEFINES.dm index a7e0d755370..ee354b78393 100644 --- a/code/__DEFINES.dm +++ b/code/__DEFINES.dm @@ -59,6 +59,7 @@ #define FPRINT 256 // takes a fingerprint #define ON_BORDER 512 // item has priority to check when entering or leaving #define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby() +#define NOBLOODY 2048 // used by objects that don't want to get bloodied #define GLASSESCOVERSEYES 1024 #define MASKCOVERSEYES 1024 // get rid of some of the other retardation in these flags diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a2ac031fe19..1d8231b5be8 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -247,6 +247,7 @@ var/list/blood_splatter_icons = list() //returns 1 if made bloody, returns 0 otherwise /atom/proc/add_blood(mob/living/carbon/M) + if(flags & NOBLOODY) return if(!initial(icon) || !initial(icon_state)) return 0 if(!istype(M)) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 01eb03a4a17..83c7fb7f1c0 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -5,13 +5,18 @@ anchored = 1 w_class = 4.0 canhear_range = 2 + flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY var/number = 0 var/anyai = 1 var/mob/living/silicon/ai/ai = list() + var/last_tick //used to delay the powercheck /obj/item/device/radio/intercom/New() - spawn(5) - checkpower() + ..() + processing_objects += src + +/obj/item/device/radio/intercom/Del() + processing_objects -= src ..() /obj/item/device/radio/intercom/attack_ai(mob/user as mob) @@ -51,10 +56,9 @@ return ..() -/obj/item/device/radio/intercom/proc/checkpower() - - // Simple loop, checks for power. Strictly for intercoms - while(src) +/obj/item/device/radio/intercom/process() + if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0)) + last_tick = world.timeofday if(!src.loc) on = 0 @@ -69,5 +73,3 @@ icon_state = "intercom-p" else icon_state = "intercom" - - sleep(30) \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index bc8ecd7c8b3..14f607285c1 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -924,7 +924,7 @@ user.SetLuminosity(round(user.luminosity + (potency/10),1)) /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/dropped(mob/user) - user.SetLuminosity(round(user.luminosity + (potency/10),1)) + user.SetLuminosity(round(user.luminosity - (potency/10),1)) SetLuminosity(round(potency/10,1)) //This object is just a transition object. All it does is make dosh and delete itself. -Cheridan @@ -968,4 +968,4 @@ spawn(5) //So potency can be set in the proc that creates these crops reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) reagents.add_reagent("singulo", 1+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) \ No newline at end of file + bitesize = 1+round(reagents.total_volume / 2, 1) diff --git a/icons/obj/power_cond/power_cond_cyan.dmi b/icons/obj/power_cond/power_cond_cyan.dmi index 6e1fa1238e6e50ac61a3de2c46636ae8ad297f1a..34d981f55f70b4feb4c08f4d8face283de1599ac 100644 GIT binary patch delta 5619 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 Iv3Jz}0Y|r>82|tP From db0a9080383c2ad9ed7653b1cd521413ef1d8756 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Mon, 7 Oct 2013 18:30:28 +0100 Subject: [PATCH 2/3] Make energy weapons not get a bloody overlay and fixed alt-gr not calling AltClick() Signed-off-by: Mloc-Argent --- code/_onclick/ai.dm | 7 ++++--- code/_onclick/click.dm | 8 ++++---- code/_onclick/cyborg.dm | 8 ++++---- code/game/objects/items/weapons/melee/energy.dm | 7 ++++--- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 64ae7597982..50c1122b312 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -39,12 +39,13 @@ if(modifiers["shift"]) ShiftClickOn(A) return + if(modifiers["alt"]) // alt and alt-gr (rightalt) + AltClickOn(A) + return if(modifiers["ctrl"]) CtrlClickOn(A) return - if(modifiers["alt"]) - AltClickOn(A) - return + if(control_disabled || stat || world.time <= next_move) return next_move = world.time + 9 diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index aee0405e8cc..5ece365899c 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -49,13 +49,13 @@ if(modifiers["shift"]) ShiftClickOn(A) return + if(modifiers["alt"]) // alt and alt-gr (rightalt) + AltClickOn(A) + return if(modifiers["ctrl"]) CtrlClickOn(A) return - if(modifiers["alt"]) - AltClickOn(A) - return - + if(stat || paralysis || stunned || weakened) return diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 8e8e76e1524..a4877765634 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -22,13 +22,13 @@ if(modifiers["shift"]) ShiftClickOn(A) return + if(modifiers["alt"]) // alt and alt-gr (rightalt) + AltClickOn(A) + return if(modifiers["ctrl"]) CtrlClickOn(A) return - if(modifiers["alt"]) - AltClickOn(A) - return - + if(stat || lockcharge || weakened || stunned || paralysis) return diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 4117608a6ee..4ddee7c6932 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -1,5 +1,6 @@ /obj/item/weapon/melee/energy var/active = 0 + flags = FPRINT | TABLEPASS | NOBLOODY suicide_act(mob/user) viewers(user) << pick("\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ @@ -15,7 +16,7 @@ throw_speed = 1 throw_range = 5 w_class = 3.0 - flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS + flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS | NOBLOODY origin_tech = "combat=3" attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") @@ -33,7 +34,7 @@ throw_speed = 1 throw_range = 5 w_class = 2.0 - flags = FPRINT | TABLEPASS | NOSHIELD + flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY origin_tech = "magnets=3;syndicate=4" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") var/hacked = 0 @@ -52,6 +53,6 @@ throw_speed = 1 throw_range = 1 w_class = 4.0//So you can't hide it in your pocket or some such. - flags = FPRINT | TABLEPASS | NOSHIELD + flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") var/datum/effect/effect/system/spark_spread/spark_system \ No newline at end of file From d2e8531ee578ef8ec2666d0474f668629cfc8410 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Tue, 8 Oct 2013 20:10:12 +0100 Subject: [PATCH 3/3] Made cyborg middle-clicks cycle through the list of selected modules, and added some new helper procs for selected modules. New procs: * module_selected(module) - Checks whether the module slot specified by "module" is currently selected. * module_active(module) - Checks whether there is a module active in the slot specified by "module". * get_selected_module() - Returns the slot number of the currently selected module. Returns 0 if no modules are selected. * select_module(module) - Selects the module slot specified by "module" * deselect_module(module) - Deselects the module slot specified by "module" * toggle_module(module) - Toggles the selection of the module slot specified by "module". * cycle_modules() - Cycles through the list of selected modules. Signed-off-by: Mloc-Argent --- code/_onclick/cyborg.dm | 8 +- code/_onclick/hud/screen_objects.dm | 33 +---- .../mob/living/silicon/robot/inventory.dm | 122 +++++++++++++++++- code/modules/mob/mob_movement.dm | 68 +--------- 4 files changed, 136 insertions(+), 95 deletions(-) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index a4877765634..640a09d045f 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -28,7 +28,7 @@ if(modifiers["ctrl"]) CtrlClickOn(A) return - + if(stat || lockcharge || weakened || stunned || paralysis) return @@ -94,6 +94,12 @@ W.afterattack(A, src, 0, params) return return + +//Middle click cycles through selected modules. +/mob/living/silicon/robot/MiddleClickOn(var/atom/A) + cycle_modules() + return + /* As with AI, these are not used in click code, because the code for robots is specific, not generic. diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 6f1b8481bad..1967b48f196 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -292,37 +292,16 @@ usr:uneq_active() if("module1") - if(usr:module_state_1) - if(usr:module_active != usr:module_state_1) - usr:inv1.icon_state = "inv1 +a" - usr:inv2.icon_state = "inv2" - usr:inv3.icon_state = "inv3" - usr:module_active = usr:module_state_1 - else - usr:inv1.icon_state = "inv1" - usr:module_active = null + if(istype(usr, /mob/living/silicon/robot)) + usr:toggle_module(1) if("module2") - if(usr:module_state_2) - if(usr:module_active != usr:module_state_2) - usr:inv1.icon_state = "inv1" - usr:inv2.icon_state = "inv2 +a" - usr:inv3.icon_state = "inv3" - usr:module_active = usr:module_state_2 - else - usr:inv2.icon_state = "inv2" - usr:module_active = null + if(istype(usr, /mob/living/silicon/robot)) + usr:toggle_module(2) if("module3") - if(usr:module_state_3) - if(usr:module_active != usr:module_state_3) - usr:inv1.icon_state = "inv1" - usr:inv2.icon_state = "inv2" - usr:inv3.icon_state = "inv3 +a" - usr:module_active = usr:module_state_3 - else - usr:inv3.icon_state = "inv3" - usr:module_active = null + if(istype(usr, /mob/living/silicon/robot)) + usr:toggle_module(3) else return 0 diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index e6557ff57ed..f3ae6c7e5de 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -53,4 +53,124 @@ else if(module_state_3 == O) return 1 else - return 0 \ No newline at end of file + return 0 + +//Helper procs for cyborg modules on the UI. +//These are hackish but they help clean up code elsewhere. + +//module_selected(module) - Checks whether the module slot specified by "module" is currently selected. +/mob/living/silicon/robot/proc/module_selected(var/module) //Module is 1-3 + return module == get_selected_module() + +//module_active(module) - Checks whether there is a module active in the slot specified by "module". +/mob/living/silicon/robot/proc/module_active(var/module) //Module is 1-3 + if(module < 1 || module > 3) return 0 + + switch(module) + if(1) + if(module_state_1) + return 1 + if(2) + if(module_state_2) + return 1 + if(3) + if(module_state_3) + return 1 + return 0 + +//get_selected_module() - Returns the slot number of the currently selected module. Returns 0 if no modules are selected. +/mob/living/silicon/robot/proc/get_selected_module() + if(module_state_1 && module_active == module_state_1) + return 1 + else if(module_state_2 && module_active == module_state_2) + return 2 + else if(module_state_3 && module_active == module_state_3) + return 3 + + return 0 + +//select_module(module) - Selects the module slot specified by "module" +/mob/living/silicon/robot/proc/select_module(var/module) //Module is 1-3 + if(module < 1 || module > 3) return + + if(!module_active(module)) return + + switch(module) + if(1) + if(module_active != module_state_1) + inv1.icon_state = "inv1 +a" + inv2.icon_state = "inv2" + inv3.icon_state = "inv3" + module_active = module_state_1 + return + if(2) + if(module_active != module_state_2) + inv1.icon_state = "inv1" + inv2.icon_state = "inv2 +a" + inv3.icon_state = "inv3" + module_active = module_state_2 + return + if(3) + if(module_active != module_state_3) + inv1.icon_state = "inv1" + inv2.icon_state = "inv2" + inv3.icon_state = "inv3 +a" + module_active = module_state_3 + return + return + +//deselect_module(module) - Deselects the module slot specified by "module" +/mob/living/silicon/robot/proc/deselect_module(var/module) //Module is 1-3 + if(module < 1 || module > 3) return + + switch(module) + if(1) + if(module_active == module_state_1) + inv1.icon_state = "inv1" + module_active = null + return + if(2) + if(module_active == module_state_2) + inv2.icon_state = "inv2" + module_active = null + return + if(3) + if(module_active == module_state_3) + inv3.icon_state = "inv3" + module_active = null + return + return + +//toggle_module(module) - Toggles the selection of the module slot specified by "module". +/mob/living/silicon/robot/proc/toggle_module(var/module) //Module is 1-3 + if(module < 1 || module > 3) return + + if(module_selected(module)) + deselect_module(module) + else + if(module_active(module)) + select_module(module) + else + deselect_module(get_selected_module()) //If we can't do select anything, at least deselect the current module. + return + +//cycle_modules() - Cycles through the list of selected modules. +/mob/living/silicon/robot/proc/cycle_modules() + var/slot_start = get_selected_module() + if(slot_start) deselect_module(slot_start) //Only deselect if we have a selected slot. + + var/slot_num + if(slot_start == 0) + slot_num = 1 + slot_start = 2 + else + slot_num = slot_start + 1 + + while(slot_start != slot_num) //If we wrap around without finding any free slots, just give up. + if(module_active(slot_num)) + select_module(slot_num) + return + slot_num++ + if(slot_num > 3) slot_num = 1 //Wrap around. + + return diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index b5b037519bb..eeef9836d1f 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -54,73 +54,9 @@ set hidden = 1 if(istype(mob, /mob/living/carbon)) mob:swap_hand() - if(istype(mob,/mob/living/silicon/robot))//Oh nested logic loops, is there anything you can't do? -Sieve + if(istype(mob,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = mob - if(!R.module_active) - if(!R.module_state_1) - if(!R.module_state_2) - if(!R.module_state_3) - return - else - R:inv1.icon_state = "inv1" - R:inv2.icon_state = "inv2" - R:inv3.icon_state = "inv3 +a" - R:module_active = R:module_state_3 - else - R:inv1.icon_state = "inv1" - R:inv2.icon_state = "inv2 +a" - R:inv3.icon_state = "inv3" - R:module_active = R:module_state_2 - else - R:inv1.icon_state = "inv1 +a" - R:inv2.icon_state = "inv2" - R:inv3.icon_state = "inv3" - R:module_active = R:module_state_1 - else - if(R.module_active == R.module_state_1) - if(!R.module_state_2) - if(!R.module_state_3) - return - else - R:inv1.icon_state = "inv1" - R:inv2.icon_state = "inv2" - R:inv3.icon_state = "inv3 +a" - R:module_active = R:module_state_3 - else - R:inv1.icon_state = "inv1" - R:inv2.icon_state = "inv2 +a" - R:inv3.icon_state = "inv3" - R:module_active = R:module_state_2 - else if(R.module_active == R.module_state_2) - if(!R.module_state_3) - if(!R.module_state_1) - return - else - R:inv1.icon_state = "inv1 +a" - R:inv2.icon_state = "inv2" - R:inv3.icon_state = "inv3" - R:module_active = R:module_state_1 - else - R:inv1.icon_state = "inv1" - R:inv2.icon_state = "inv2" - R:inv3.icon_state = "inv3 +a" - R:module_active = R:module_state_3 - else if(R.module_active == R.module_state_3) - if(!R.module_state_1) - if(!R.module_state_2) - return - else - R:inv1.icon_state = "inv1" - R:inv2.icon_state = "inv2 +a" - R:inv3.icon_state = "inv3" - R:module_active = R:module_state_2 - else - R:inv1.icon_state = "inv1 +a" - R:inv2.icon_state = "inv2" - R:inv3.icon_state = "inv3" - R:module_active = R:module_state_1 - else - return + R.cycle_modules() return