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