diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm index d224c0f1..4e5ca051 100644 --- a/code/__DEFINES/movespeed_modification.dm +++ b/code/__DEFINES/movespeed_modification.dm @@ -37,5 +37,7 @@ #define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG" #define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY" +#define MOVESPEED_ID_SILICON_VTEC "SILICON_VTEC" + #define MOVESPEED_ID_SHRUNK "SHRINK_SPEED_MODIFIER" #define MOVESPEED_ID_GROW "GROWTH_SPEED_MODIFIER" diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 5e7081c1..47c2934f 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -74,19 +74,24 @@ /obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) - if(R.speed < 0) + if(R.speed["enabled"]) 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) + //Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly + //Hyper change - Also makes vtec take up charge + var/obj/effect/proc_holder/silicon/cyborg/vtecControl/vtec = new + R.speed["enabled"] = TRUE + R.speed["ref"] = vtec + R.speed["timer"] = addtimer(CALLBACK(vtec, /obj/effect/proc_holder/silicon/cyborg/vtecControl/proc/useCharge, R), 50, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_LOOP) + R.AddAbility (R.speed["ref"]) /obj/item/borg/upgrade/vtec/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) - R.speed = initial(R.speed) + R.removeVTecStats() /obj/item/borg/upgrade/disablercooler name = "cyborg rapid disabler cooling module" @@ -581,14 +586,12 @@ 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() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index f9cb5102..8d8444a6 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -53,7 +53,7 @@ var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list()) - var/speed = 0 // VTEC speed boost. + var/speed = list("enabled"=FALSE, "timer"=null, "ref"=null) // VTEC stats var/magpulse = FALSE // Magboot-like effect. var/ionpulse = FALSE // Jetpack-like effect. var/ionpulse_on = FALSE // Jetpack-like effect. @@ -1042,10 +1042,6 @@ if(hud_used) hud_used.update_robot_modules_display() - if (hasExpanded) - resize = 0.5 - hasExpanded = FALSE - update_transform() module.transform_to(/obj/item/robot_module) // Remove upgrades. @@ -1055,7 +1051,7 @@ upgrades.Cut() - speed = 0 + removeVTecStats() ionpulse = FALSE revert_shell() @@ -1087,6 +1083,13 @@ magpulse = module.magpulsing updatename() +/mob/living/silicon/robot/update_transform() + . = ..() + if (hasExpanded) + var/matrix/ntransform = matrix(transform) + ntransform.Scale(2) //This seems a bit big + ntransform.Translate(0, 16) + transform = ntransform /mob/living/silicon/robot/proc/place_on_head(obj/item/new_hat) if(hat) @@ -1242,3 +1245,18 @@ connected_ai.aicamera.stored[i] = TRUE for(var/i in connected_ai.aicamera.stored) aicamera.stored[i] = TRUE + +/mob/living/silicon/robot/proc/removeVTecStats() + if (!speed["enabled"]) + return FALSE + + speed["enabled"] = FALSE + deltimer(speed["timer"]) + RemoveAbility(speed["ref"]) + remove_movespeed_modifier(MOVESPEED_ID_SILICON_VTEC) + + speed["ref"] = null + speed["timer"] = null + + update_transform() + return TRUE diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 1a0d9f8a..5898278e 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -390,6 +390,7 @@ if (aicamera) return aicamera.selectpicture(user) +/* /mob/living/silicon/update_transform() var/matrix/ntransform = matrix(transform) //aka transform.Copy() var/changed = 0 @@ -400,7 +401,7 @@ if(changed) animate(src, transform = ntransform, time = 2,easing = EASE_IN|EASE_OUT) - return ..() + return ..() */ /mob/living/silicon/is_literate() return 1 diff --git a/modular_citadel/code/game/objects/items/robot/robot_upgrades.dm b/modular_citadel/code/game/objects/items/robot/robot_upgrades.dm index 5f65b971..f3fdd837 100644 --- a/modular_citadel/code/game/objects/items/robot/robot_upgrades.dm +++ b/modular_citadel/code/game/objects/items/robot/robot_upgrades.dm @@ -6,24 +6,43 @@ action_icon_state = "Chevron_State_0" var/currentState = 0 - var/maxReduction = 2 + var/iteration = FALSE -/obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user) - var/mob/living/silicon/robot/self = usr +/obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user = usr) + if(!user) + return + if(!user.cell) + return + + if(user.cell.charge <= 0) + to_chat(user, "You cannot cycle through your VTEC upgrade without power!") + return currentState = (currentState + 1) % 3 - - if(usr) - switch(currentState) - if (0) - self.speed = maxReduction - if (1) - self.speed -= maxReduction*0.5 - if (2) - self.speed -= maxReduction*1.25 + switch(currentState) + if (0) + user.remove_movespeed_modifier(MOVESPEED_ID_SILICON_VTEC) + if (1) + user.add_movespeed_modifier(MOVESPEED_ID_SILICON_VTEC, override=TRUE, multiplicative_slowdown = -0.15) + if (2) + user.add_movespeed_modifier(MOVESPEED_ID_SILICON_VTEC, override=TRUE, multiplicative_slowdown = -0.325) action.button_icon_state = "Chevron_State_[currentState]" action.UpdateButtonIcon() - return + +/obj/effect/proc_holder/silicon/cyborg/vtecControl/proc/useCharge(mob/living/silicon/robot/user) + if (!user || !user.cell || !iscyborg(user)) //sanity check + return + + var/removed_charge = 15*currentState + + if (user.cell.charge > removed_charge) + user.cell.charge -= removed_charge + return + + user.cell.charge = 0 + user.remove_movespeed_modifier(MOVESPEED_ID_SILICON_VTEC) + action.button_icon_state = "Chevron_State_0" + action.UpdateButtonIcon()