diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index d62f723fed..af03a0d96d 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -126,6 +126,11 @@
if(!buckled && shoes) // Shoes can make you go faster.
. += shoes.slowdown
+ //VOREStation Addition Start
+ if(buckled && istype(buckled, /obj/machinery/power/rtg/d_type_reg))
+ . += shoes.slowdown
+ //VOREStation Addition End
+
// Loop through some slots, and add up their slowdowns.
// Includes slots which can provide armor, the back slot, and suit storage.
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store))
diff --git a/code/modules/power/port_gen_vr.dm b/code/modules/power/port_gen_vr.dm
index 263a19639d..10697ea264 100644
--- a/code/modules/power/port_gen_vr.dm
+++ b/code/modules/power/port_gen_vr.dm
@@ -281,3 +281,120 @@
if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) && Proj.damage >= 20)
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered a kugelblitz core explosion at [x],[y],[z] via projectile.")
asplod()
+
+/obj/machinery/power/rtg/d_type_reg
+ name = "d-type rotary electric generator"
+ desc = "It looks kind of like a large hamster wheel."
+ icon = 'icons/obj/power_vrx96.dmi'
+ icon_state = "reg"
+ circuit = /obj/item/weapon/circuitboard/machine/reg
+ irradiate = FALSE
+ power_gen = 0 //It's big but it gets adjusted based on what you put into it!!!
+ var/default_power_gen = 1000000
+ var/part_mult = 0
+ pixel_x = -32
+ plane = ABOVE_MOB_PLANE
+ layer = ABOVE_MOB_LAYER
+ buckle_dir = EAST
+ interact_offline = TRUE
+ density = FALSE
+
+/obj/machinery/power/rtg/d_type_reg/Initialize()
+ . = ..()
+ pixel_x = -32
+
+/obj/machinery/power/rtg/d_type_reg/Destroy()
+ . = ..()
+
+/obj/machinery/power/rtg/d_type_reg/user_buckle_mob(mob/living/M, mob/user, var/forced = FALSE, var/silent = TRUE)
+ . = ..()
+ M.pixel_y = 8
+ M.visible_message("\The [M], hops up onto \the [src] and begins running!")
+
+/obj/machinery/power/rtg/d_type_reg/unbuckle_mob(mob/living/buckled_mob, force = FALSE)
+ . = ..()
+ buckled_mob.pixel_y = initial(buckled_mob.pixel_y)
+
+/obj/machinery/power/rtg/d_type_reg/RefreshParts()
+ var/n = 0
+ for(var/obj/item/weapon/stock_parts/SP in component_parts)
+ n += SP.rating
+ part_mult = n
+
+/obj/machinery/power/rtg/d_type_reg/attackby(obj/item/I, mob/user, params)
+ if(default_deconstruction_screwdriver(user, I))
+ return
+ else if(default_deconstruction_crowbar(user, I))
+ return
+ return ..()
+
+/obj/machinery/power/rtg/d_type_reg/update_icon()
+ if(panel_open)
+ icon_state = "reg-o"
+ else if(buckled_mobs && buckled_mobs.len > 0)
+ icon_state = "reg-a"
+ else
+ icon_state = "reg"
+
+/obj/machinery/power/rtg/d_type_reg/process()
+ ..()
+ if(buckled_mobs && buckled_mobs.len > 0)
+ for(var/mob/living/L in buckled_mobs)
+ runner_process(L)
+ else
+ power_gen = 0
+ update_icon()
+
+/obj/machinery/power/rtg/d_type_reg/proc/runner_process(var/mob/living/runner)
+ if(runner.stat != CONSCIOUS)
+ unbuckle_mob(runner)
+ runner.visible_message("\The [runner], topples off of \the [src]!")
+ return
+ var/cool_rotations
+ if(ishuman(runner))
+ var/mob/living/carbon/human/R = runner
+ cool_rotations = R.movement_delay()
+ else if (isanimal(runner))
+ var/mob/living/simple_mob/R = runner
+ cool_rotations = R.movement_delay()
+ log_and_message_admins("I got [cool_rotations] from [runner]")
+ if(cool_rotations <= 0)
+ cool_rotations = 0.5
+ log_and_message_admins("That's less than 1 so let's make it [cool_rotations]")
+ cool_rotations = default_power_gen / cool_rotations
+ log_and_message_admins("I am dividing [default_power_gen] by that much.")
+ switch(runner.nutrition)
+ if(1000 to INFINITY) //VERY WELL FED, ZOOM!!!!
+ cool_rotations *= (runner.nutrition * 0.001)
+ log_and_message_admins("[runner] is over fed so we are producing over 100%")
+ if(500 to 1000) //Well fed!
+ cool_rotations = cool_rotations
+ if(400 to 500)
+ cool_rotations *= 0.9
+ if(300 to 400)
+ cool_rotations *= 0.75
+ if(200 to 300)
+ cool_rotations *= 0.5
+ if(100 to 200)
+ cool_rotations *= 0.25
+ else //TOO HUNGY IT TIME TO STOP!!!
+ unbuckle_mob(runner)
+ runner.visible_message("\The [runner], panting and exhausted hops off of \the [src]!")
+ if(part_mult > 1)
+ cool_rotations += (cool_rotations * (part_mult - 1)) / 4
+ log_and_message_admins("The part multiplier is [part_mult].")
+ power_gen = cool_rotations
+ log_and_message_admins("We are outputting [cool_rotations].")
+ runner.nutrition --
+
+/obj/machinery/power/rtg/d_type_reg/emp_act(severity)
+ return
+
+/obj/item/weapon/circuitboard/machine/reg
+ name = T_BOARD("REG")
+ build_path = /obj/machinery/power/rtg/d_type_reg
+ board_type = new /datum/frame/frame_types/machine
+ origin_tech = list(TECH_DATA = 2, TECH_POWER = 4, TECH_ENGINEERING = 4)
+ req_components = list(
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/weapon/stock_parts/capacitor = 1)
\ No newline at end of file
diff --git a/icons/obj/power_vrx96.dmi b/icons/obj/power_vrx96.dmi
new file mode 100644
index 0000000000..ce0baf9459
Binary files /dev/null and b/icons/obj/power_vrx96.dmi differ