// robot_upgrades.dm // Contains various borg upgrades. /obj/item/borg/upgrade name = "borg upgrade module." desc = "Protected by FRM." icon = 'icons/obj/module.dmi' icon_state = "cyborg_upgrade" var/locked = FALSE var/installed = 0 var/require_module = 0 var/list/module_type // if true, is not stored in the robot to be ejected // if module is reset var/one_use = FALSE /obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/R, user = usr) if(R.stat == DEAD) to_chat(user, "[src] will not function on a deceased cyborg.") return FALSE if(module_type && !is_type_in_list(R.module, module_type)) to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") to_chat(user, "There's no mounting point for the module!") return FALSE return TRUE /obj/item/borg/upgrade/proc/deactivate(mob/living/silicon/robot/R, user = usr) if (!(src in R.upgrades)) return FALSE return TRUE /obj/item/borg/upgrade/rename name = "cyborg reclassification board" desc = "Used to rename a cyborg." icon_state = "cyborg_upgrade1" var/heldname = "" one_use = TRUE /obj/item/borg/upgrade/rename/attack_self(mob/user) heldname = stripped_input(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN) /obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/R) . = ..() if(.) var/oldname = R.real_name R.custom_name = heldname R.updatename() if(oldname == R.real_name) R.notify_ai(RENAME, oldname, R.real_name) /obj/item/borg/upgrade/restart name = "cyborg emergency reboot module" desc = "Used to force a reboot of a disabled-but-repaired cyborg, bringing it back online." icon_state = "cyborg_upgrade1" one_use = TRUE /obj/item/borg/upgrade/restart/action(mob/living/silicon/robot/R, user = usr) if(R.health < 0) to_chat(user, "You have to repair the cyborg before using this module!") return FALSE if(R.mind) R.mind.grab_ghost() playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) R.revive() /obj/item/borg/upgrade/vtec name = "cyborg VTEC module" desc = "Used to kick in a cyborg's VTEC systems, increasing their speed." icon_state = "cyborg_upgrade2" require_module = 1 /obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) if(!R.cansprint) to_chat(R, "A VTEC unit is already installed!") to_chat(user, "There's no room for another VTEC unit!") return FALSE //R.speed = -2 // Gotta go fast. //Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly R.AddAbility(new/obj/effect/proc_holder/silicon/cyborg/vtecControl) R.cansprint = 0 /obj/item/borg/upgrade/vtec/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) R.speed = initial(R.speed) R.cansprint = 1 /obj/item/borg/upgrade/disablercooler name = "cyborg rapid energy blaster cooling module" desc = "Used to cool a mounted energy-based firearm, increasing the potential current in it and thus its recharge rate." icon_state = "cyborg_upgrade3" require_module = 1 /obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) var/successflag for(var/obj/item/gun/energy/T in R.module.modules) if(T.charge_delay <= 2) successflag = successflag || 2 continue T.charge_delay = max(2, T.charge_delay - 4) successflag = 1 if(!successflag) to_chat(user, "There's no energy-based firearm in this unit!") return FALSE if(successflag == 2) to_chat(R, "A cooling unit is already installed!") to_chat(user, "There's no room for another cooling unit!") return FALSE /obj/item/borg/upgrade/disablercooler/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) for(var/obj/item/gun/energy/T in R.module.modules) T.charge_delay = initial(T.charge_delay) return . return FALSE /obj/item/borg/upgrade/thrusters name = "ion thruster upgrade" desc = "An energy-operated thruster system for cyborgs." icon_state = "cyborg_upgrade3" /obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) if(R.ionpulse) to_chat(user, "This unit already has ion thrusters installed!") return FALSE R.ionpulse = TRUE /obj/item/borg/upgrade/thrusters/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) R.ionpulse = FALSE /obj/item/borg/upgrade/ddrill name = "mining cyborg diamond drill" desc = "A diamond drill replacement for the mining module's standard drill." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/miner) /obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) for(var/obj/item/pickaxe/drill/cyborg/D in R.module) R.module.remove_module(D, TRUE) for(var/obj/item/shovel/S in R.module) R.module.remove_module(S, TRUE) var/obj/item/pickaxe/drill/cyborg/diamond/DD = new /obj/item/pickaxe/drill/cyborg/diamond(R.module) R.module.basic_modules += DD R.module.add_module(DD, FALSE, TRUE) /obj/item/borg/upgrade/ddrill/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) for(var/obj/item/pickaxe/drill/cyborg/diamond/DD in R.module) R.module.remove_module(DD, TRUE) var/obj/item/pickaxe/drill/cyborg/D = new (R.module) R.module.basic_modules += D R.module.add_module(D, FALSE, TRUE) var/obj/item/shovel/S = new (R.module) R.module.basic_modules += S R.module.add_module(S, FALSE, TRUE) /obj/item/borg/upgrade/premiumka name = "mining cyborg premium KA" desc = "A premium kinetic accelerator replacement for the mining module's standard kinetic accelerator." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/miner) /obj/item/borg/upgrade/premiumka/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA in R.module) for(var/obj/item/borg/upgrade/modkit/M in KA.modkits) M.uninstall(src) R.module.remove_module(KA, TRUE) var/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/PKA = new /obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg(R.module) R.module.basic_modules += PKA R.module.add_module(PKA, FALSE, TRUE) /obj/item/borg/upgrade/premiumka/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) for(var/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/PKA in R.module) for(var/obj/item/borg/upgrade/modkit/M in PKA.modkits) M.uninstall(src) R.module.remove_module(PKA, TRUE) var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA = new (R.module) R.module.basic_modules += KA R.module.add_module(KA, FALSE, TRUE) /obj/item/borg/upgrade/advcutter name = "mining cyborg advanced plasma cutter" desc = "An upgrade for the mining cyborgs plasma cutter, bringing it to advanced operation." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/miner) /obj/item/borg/upgrade/advcutter/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) for(var/obj/item/gun/energy/plasmacutter/cyborg/C in R.module) C.name = "advanced cyborg plasma cutter" C.desc = "An improved version of the cyborg plasma cutter. Baring functionality identical to the standard hand held version." C.icon_state = "adv_plasmacutter" for(var/obj/item/ammo_casing/energy/plasma/weak/L in C.ammo_type) L.projectile_type = /obj/item/projectile/plasma/adv /obj/item/borg/upgrade/advcutter/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) for(var/obj/item/gun/energy/plasmacutter/cyborg/C in R.module) C.name = initial(name) C.desc = initial(desc) C.icon_state = initial(icon_state) for(var/obj/item/ammo_casing/energy/plasma/weak/L in C.ammo_type) L.projectile_type = initial(L.projectile_type) /obj/item/borg/upgrade/tboh name = "janitor cyborg trash bag of holding" desc = "A trash bag of holding replacement for the janiborg's standard trash bag." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/butler) /obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R) . = ..() if(.) for(var/obj/item/storage/bag/trash/cyborg/TB in R.module.modules) R.module.remove_module(TB, TRUE) var/obj/item/storage/bag/trash/bluespace/cyborg/B = new /obj/item/storage/bag/trash/bluespace/cyborg(R.module) R.module.basic_modules += B R.module.add_module(B, FALSE, TRUE) /obj/item/borg/upgrade/tboh/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if(.) for(var/obj/item/storage/bag/trash/bluespace/cyborg/B in R.module.modules) R.module.remove_module(B, TRUE) var/obj/item/storage/bag/trash/cyborg/TB = new (R.module) R.module.basic_modules += TB R.module.add_module(TB, FALSE, TRUE) /obj/item/borg/upgrade/amop name = "janitor cyborg advanced mop" desc = "An advanced mop replacement for the janiborg's standard mop." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/butler) /obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R) . = ..() if(.) for(var/obj/item/mop/cyborg/M in R.module.modules) R.module.remove_module(M, TRUE) var/obj/item/mop/advanced/cyborg/A = new /obj/item/mop/advanced/cyborg(R.module) R.module.basic_modules += A R.module.add_module(A, FALSE, TRUE) /obj/item/borg/upgrade/amop/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if(.) for(var/obj/item/mop/advanced/cyborg/A in R.module.modules) R.module.remove_module(A, TRUE) var/obj/item/mop/cyborg/M = new (R.module) R.module.basic_modules += M R.module.add_module(M, FALSE, TRUE) /obj/item/borg/upgrade/syndicate name = "illegal equipment module" desc = "Unlocks the hidden, deadlier functions of a cyborg." icon_state = "cyborg_upgrade3" require_module = 1 /obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) if(R.emagged) return FALSE R.SetEmagged(1) return TRUE /obj/item/borg/upgrade/syndicate/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) R.SetEmagged(FALSE) /obj/item/borg/upgrade/lavaproof name = "mining cyborg lavaproof tracks" desc = "An upgrade kit to apply specialized coolant systems and insulation layers to mining cyborg tracks, enabling them to withstand exposure to molten rock." icon_state = "ash_plating" resistance_flags = LAVA_PROOF | FIRE_PROOF require_module = 1 module_type = list(/obj/item/robot_module/miner) /obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) R.weather_immunities += "lava" /obj/item/borg/upgrade/lavaproof/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) R.weather_immunities -= "lava" /obj/item/borg/upgrade/selfrepair name = "self-repair module" desc = "This module will repair the cyborg over time." icon_state = "cyborg_upgrade5" require_module = 1 var/repair_amount = -1 var/repair_tick = 1 var/msg_cooldown = 0 var/on = FALSE var/powercost = 10 var/datum/action/toggle_action /obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) var/obj/item/borg/upgrade/selfrepair/U = locate() in R if(U) to_chat(user, "This unit is already equipped with a self-repair module.") return FALSE icon_state = "selfrepair_off" toggle_action = new /datum/action/item_action/toggle(src) toggle_action.Grant(R) /obj/item/borg/upgrade/selfrepair/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) toggle_action.Remove(R) QDEL_NULL(toggle_action) deactivate_sr() /obj/item/borg/upgrade/selfrepair/ui_action_click() if(on) to_chat(toggle_action.owner, "You deactivate the self-repair module.") deactivate_sr() else to_chat(toggle_action.owner, "You activate the self-repair module.") activate_sr() /obj/item/borg/upgrade/selfrepair/update_icon() if(toggle_action) icon_state = "selfrepair_[on ? "on" : "off"]" for(var/X in actions) var/datum/action/A = X A.UpdateButtonIcon() else icon_state = "cyborg_upgrade5" /obj/item/borg/upgrade/selfrepair/proc/activate_sr() START_PROCESSING(SSobj, src) on = TRUE update_icon() /obj/item/borg/upgrade/selfrepair/proc/deactivate_sr() STOP_PROCESSING(SSobj, src) on = FALSE update_icon() /obj/item/borg/upgrade/selfrepair/process() if(!repair_tick) repair_tick = 1 return var/mob/living/silicon/robot/cyborg = toggle_action.owner if(istype(cyborg) && (cyborg.stat != DEAD) && on) if(!cyborg.cell) to_chat(cyborg, "Self-repair module deactivated. Please, insert the power cell.") deactivate_sr() return if(cyborg.cell.charge < powercost * 2) to_chat(cyborg, "Self-repair module deactivated. Please recharge.") deactivate_sr() return if(cyborg.health < cyborg.maxHealth) if(cyborg.health < 0) repair_amount = -2.5 powercost = 30 else repair_amount = -1 powercost = 10 cyborg.adjustBruteLoss(repair_amount) cyborg.adjustFireLoss(repair_amount) cyborg.updatehealth() cyborg.cell.use(powercost) else cyborg.cell.use(5) repair_tick = 0 if((world.time - 2000) > msg_cooldown ) var/msgmode = "standby" if(cyborg.health < 0) msgmode = "critical" else if(cyborg.health < cyborg.maxHealth) msgmode = "normal" to_chat(cyborg, "Self-repair is active in [msgmode] mode.") msg_cooldown = world.time else deactivate_sr() /obj/item/borg/upgrade/hypospray name = "medical cyborg hypospray advanced synthesiser" desc = "An upgrade to the Medical module cyborg's hypospray, allowing it \ to produce more advanced and complex medical reagents." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/medical, /obj/item/robot_module/syndicate_medical) var/list/additional_reagents = list() /obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) if(H.accepts_reagent_upgrades) for(var/re in additional_reagents) H.add_reagent(re) /obj/item/borg/upgrade/hypospray/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) if(H.accepts_reagent_upgrades) for(var/re in additional_reagents) H.del_reagent(re) /obj/item/borg/upgrade/hypospray/expanded name = "medical cyborg expanded hypospray" desc = "An upgrade to the Medical module's hypospray, allowing it \ to treat a wider range of conditions and problems." additional_reagents = list(/datum/reagent/medicine/mannitol, /datum/reagent/medicine/oculine, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/mutadone, /datum/reagent/medicine/haloperidol) /obj/item/borg/upgrade/hypospray/high_strength name = "medical cyborg high-strength hypospray" desc = "An upgrade to the Medical module's hypospray, containing \ stronger versions of existing chemicals." additional_reagents = list(/datum/reagent/medicine/oxandrolone, /datum/reagent/medicine/sal_acid, /datum/reagent/medicine/rezadone, /datum/reagent/medicine/pen_acid) /obj/item/borg/upgrade/piercing_hypospray name = "cyborg piercing hypospray" desc = "An upgrade to a cyborg's hypospray, allowing it to \ pierce armor and thick material." icon_state = "cyborg_upgrade3" /obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) var/found_hypo = FALSE for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) H.bypass_protection = TRUE found_hypo = TRUE if(!found_hypo) return FALSE /obj/item/borg/upgrade/piercing_hypospray/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) H.bypass_protection = initial(H.bypass_protection) /obj/item/borg/upgrade/defib/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) var/obj/item/twohanded/shockpaddles/cyborg/S = locate() in R.module R.module.remove_module(S, TRUE) /obj/item/borg/upgrade/processor name = "medical cyborg surgical processor" desc = "An upgrade to the Medical module, installing a processor \ capable of scanning surgery disks and carrying \ out procedures" icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/medical, /obj/item/robot_module/syndicate_medical) /obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) var/obj/item/surgical_processor/SP = new(R.module) R.module.basic_modules += SP R.module.add_module(SP, FALSE, TRUE) /obj/item/borg/upgrade/processor/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) var/obj/item/surgical_processor/SP = locate() in R.module R.module.remove_module(SP, TRUE) /obj/item/borg/upgrade/advhealth name = "advanced cyborg health scanner" desc = "An upgrade to the Medical modules, installing a built-in \ advanced health scanner, for better readings on patients." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list( /obj/item/robot_module/medical, /obj/item/robot_module/syndicate_medical) /obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) var/obj/item/healthanalyzer/advanced/AH = new(R.module) R.module.basic_modules += AH R.module.add_module(AH, FALSE, TRUE) /obj/item/borg/upgrade/processor/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) var/obj/item/healthanalyzer/advanced/AH = locate() in R.module R.module.remove_module(AH, TRUE) /obj/item/borg/upgrade/ai name = "B.O.R.I.S. module" desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI." icon_state = "boris" /obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) if(R.shell) to_chat(user, "This unit is already an AI shell!") return FALSE if(R.key) //You cannot replace a player unless the key is completely removed. to_chat(user, "Intelligence patterns detected in this [R.braintype]. Aborting.") return FALSE R.make_shell(src) /obj/item/borg/upgrade/ai/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) if(R.shell) R.undeploy() R.notify_ai(AI_SHELL) /obj/item/borg/upgrade/expand name = "borg expander" desc = "A cyborg resizer, it makes a cyborg huge." icon_state = "cyborg_upgrade3" /obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) if(R.hasExpanded) to_chat(usr, "This unit already has an expand module installed!") return FALSE R.notransform = TRUE var/prev_lockcharge = R.lockcharge R.SetLockdown(1) R.anchored = TRUE var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(1, R.loc) smoke.start() sleep(2) for(var/i in 1 to 4) playsound(R, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, 1, -1) sleep(12) if(!prev_lockcharge) R.SetLockdown(0) R.anchored = FALSE R.notransform = FALSE R.resize = 2 R.hasExpanded = TRUE R.update_transform() /obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) R.resize = 0.5 R.hasExpanded = FALSE R.update_transform() /obj/item/borg/upgrade/rped name = "engineering cyborg BSRPED" desc = "A rapid part exchange device for the engineering cyborg." icon = 'icons/obj/storage.dmi' icon_state = "borg_BS_RPED" require_module = TRUE module_type = list(/obj/item/robot_module/engineering, /obj/item/robot_module/saboteur) /obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) var/obj/item/storage/part_replacer/bluespace/cyborg/BSRPED = locate() in R var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R if(!RPED) RPED = locate() in R.module if(!BSRPED) BSRPED = locate() in R.module //There's gotta be a smarter way to do this. if(BSRPED) to_chat(user, "This unit is already equipped with a BSRPED module.") return FALSE BSRPED = new(R.module) SEND_SIGNAL(RPED, COMSIG_TRY_STORAGE_QUICK_EMPTY) qdel(RPED) R.module.basic_modules += BSRPED R.module.add_module(BSRPED, FALSE, TRUE) /obj/item/borg/upgrade/rped/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R.module if (RPED) R.module.remove_module(RPED, TRUE) /obj/item/borg/upgrade/pinpointer name = "medical cyborg crew pinpointer" desc = "A crew pinpointer module for the medical cyborg." icon = 'icons/obj/device.dmi' icon_state = "pinpointer_crew" require_module = TRUE module_type = list(/obj/item/robot_module/medical, /obj/item/robot_module/syndicate_medical) /obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) var/obj/item/pinpointer/crew/PP = locate() in R if(PP) to_chat(user, "This unit is already equipped with a pinpointer module.") return FALSE PP = new(R.module) R.module.basic_modules += PP R.module.add_module(PP, FALSE, TRUE) /obj/item/borg/upgrade/pinpointer/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) var/obj/item/pinpointer/crew/PP = locate() in R.module if (PP) R.module.remove_module(PP, TRUE) /obj/item/borg/upgrade/transform name = "borg module picker (Standard)" desc = "Allows you to to turn a cyborg into a standard cyborg." icon_state = "cyborg_upgrade3" var/obj/item/robot_module/new_module = /obj/item/robot_module/standard /obj/item/borg/upgrade/transform/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) R.module.transform_to(new_module) /obj/item/borg/upgrade/transform/clown name = "borg module picker (Clown)" desc = "Allows you to to turn a cyborg into a clown, honk." icon_state = "cyborg_upgrade3" new_module = /obj/item/robot_module/clown // Citadel's Vtech Controller /obj/effect/proc_holder/silicon/cyborg/vtecControl name = "vTec Control" desc = "Allows finer-grained control of the vTec speed boost." action_icon = 'icons/mob/actions.dmi' action_icon_state = "Chevron_State_0" var/currentState = 0 var/maxReduction = 1 /obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user) var/mob/living/silicon/robot/self = usr currentState = (currentState + 1) % 3 if(istype(self)) switch(currentState) if (0) self.speed = initial(self.speed) if (1) self.speed = initial(self.speed) - maxReduction * 0.5 if (2) self.speed = initial(self.speed) - maxReduction * 1 action.button_icon_state = "Chevron_State_[currentState]" action.UpdateButtonIcon() return