diff --git a/code/datums/sun.dm b/code/datums/sun.dm index c69369912c6..81e6a720600 100644 --- a/code/datums/sun.dm +++ b/code/datums/sun.dm @@ -1,3 +1,5 @@ +/* + /datum/sun var/angle var/dx @@ -71,6 +73,7 @@ S.obscured = 0 // if hit the edge or stepped 20 times, not obscured S.update_solar_exposure() +*/ //returns the north-zero clockwise angle in degrees, given a direction diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm index 4fa0a665a04..cc08bced985 100644 --- a/code/defines/obj/machinery.dm +++ b/code/defines/obj/machinery.dm @@ -515,13 +515,6 @@ density = 1 directwired = 1 var/health = 10.0 - var/id = 1 - var/obscured = 0 - var/sunfrac = 0 - var/adir = SOUTH - var/ndir = SOUTH - var/turn_angle = 0 - var/obj/machinery/power/solar_control/control use_power = 0 idle_power_usage = 0 active_power_usage = 0 diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index 884a1de5dca..78632e4a624 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -79,7 +79,7 @@ datum/controller/game_controller sleep(1) - sun.calc_position() + //sun.calc_position() sleep(-1) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e18fc9d0f21..45f23b5e26f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -358,6 +358,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that //log_admin("[key_name(src)] has alienized [M.key].") var/list/dresspacks = list( "strip", + "standard space gear", "tournament standard red", "tournament standard green", "tournament gangster", @@ -387,6 +388,17 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that switch(dresscode) if ("strip") //do nothing + if ("standard space gear") + M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes) + + M.equip_if_possible(new /obj/item/clothing/under/color/grey(M), M.slot_w_uniform) + M.equip_if_possible(new /obj/item/clothing/suit/space(M), M.slot_wear_suit) + M.equip_if_possible(new /obj/item/clothing/head/helmet/space(M), M.slot_head) + var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack(M) + M.equip_if_possible(J, M.slot_back) + J.toggle() + M.equip_if_possible(new /obj/item/clothing/mask/breath(M), M.slot_wear_mask) + J.Topic(null, list("stat" = 1)) if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0 if (dresscode=="tournament standard red") M.equip_if_possible(new /obj/item/clothing/under/color/red(M), M.slot_w_uniform) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b8cd243ae78..ccb92baf469 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -26,37 +26,26 @@ var/obj/cable/NC = new(T) - NC.cableColor(coil.color) + var/color = "red" + if(coil.color) + color = coil.color + NC.color = coil.color + switch(color) + if("red") + NC.icon = 'power_cond_red.dmi' + if("yellow") + NC.icon = 'power_cond_yellow.dmi' + if("green") + NC.icon = 'power_cond_green.dmi' + if("blue") + NC.icon = 'power_cond_blue.dmi' NC.d1 = 0 NC.d2 = dirn NC.add_fingerprint() NC.updateicon() - - NC.mergeConnectedNetworks(NC.d2) - NC.mergeConnectedNetworksOnTurf() - if(netnum == 0 && NC.netnum == 0) - var/datum/powernet/PN = new() - - PN.number = powernets.len + 1 - powernets += PN - NC.netnum = PN.number - netnum = PN.number - PN.cables += NC - PN.nodes += src - powernet = PN - else if(netnum == 0) - netnum = NC.netnum - var/datum/powernet/PN = powernets[netnum] - powernet = PN - PN.nodes += src - NC.mergeConnectedNetworksOnTurf() - + NC.update_network() coil.use(1) - if (NC.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color) - del(NC) return else ..() @@ -145,6 +134,8 @@ else if(istype(W, /obj/item/weapon/cable_coil)) + if (shock(user, 50)) + return var/obj/item/weapon/cable_coil/coil = W coil.cable_join(src, user) @@ -306,27 +297,29 @@ var/obj/cable/C = new(F) - C.cableColor(color) + var/color_n = "red" + if(color) + color_n = color + C.color = color_n + switch(color) + if("red") + C.icon = 'power_cond_red.dmi' + if("yellow") + C.icon = 'power_cond_yellow.dmi' + if("green") + C.icon = 'power_cond_green.dmi' + if("blue") + C.icon = 'power_cond_blue.dmi' C.d1 = 0 C.d2 = dirn C.add_fingerprint(user) C.updateicon() - - var/datum/powernet/PN = new() - PN.number = powernets.len + 1 - powernets += PN - C.netnum = PN.number - PN.cables += C - - C.mergeConnectedNetworks(C.d2) - C.mergeConnectedNetworksOnTurf() - - + C.update_network() use(1) if (C.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/weapon/cable_coil(C.loc, 1, C.color) + if (prob(50)) + new/obj/item/weapon/cable_coil(C.loc, C.d1 ? 2 : 1, C.color) del(C) //src.laying = 1 //last = C @@ -336,6 +329,7 @@ /obj/item/weapon/cable_coil/proc/cable_join(obj/cable/C, mob/user) + var/turf/U = user.loc if(!isturf(U)) return @@ -371,30 +365,39 @@ return var/obj/cable/NC = new(U) - NC.cableColor(color) + + var/color_n = "red" + if(color) + color_n = color + NC.color = color_n + switch(color) + if("red") + NC.icon = 'power_cond_red.dmi' + if("yellow") + NC.icon = 'power_cond_yellow.dmi' + if("green") + NC.icon = 'power_cond_green.dmi' + if("blue") + NC.icon = 'power_cond_blue.dmi' NC.d1 = 0 NC.d2 = fdirn NC.add_fingerprint() NC.updateicon() - - NC.netnum = C.netnum - var/datum/powernet/PN = powernets[C.netnum] - PN.cables += NC - NC.mergeConnectedNetworksOnTurf() + NC.update_network() use(1) if (NC.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color) + if (prob(50)) + new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 1, NC.color) del(NC) return else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub // if so, make it a full cable pointing from it's old direction to our dirn + var/nd1 = C.d2 // these will be the new directions var/nd2 = dirn - if(nd1 > nd2) // swap directions to match icons/states nd1 = dirn nd2 = C.d2 @@ -406,166 +409,49 @@ if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction user << "There's already a cable at that position." return + C.shock(user, 25) + del(C) + var/obj/cable/NC = new(T) + var/color_n = "red" + if(color) + color_n = color + NC.color = color_n + switch(color) + if("red") + NC.icon = 'power_cond_red.dmi' + if("yellow") + NC.icon = 'power_cond_yellow.dmi' + if("green") + NC.icon = 'power_cond_green.dmi' + if("blue") + NC.icon = 'power_cond_blue.dmi' - C.cableColor(color) - - C.d1 = nd1 - C.d2 = nd2 - - C.add_fingerprint() - C.updateicon() - - - C.mergeConnectedNetworks(C.d1) - C.mergeConnectedNetworks(C.d2) + NC.d1 = nd1 + NC.d2 = nd2 + NC.add_fingerprint() + NC.updateicon() + NC.update_network() use(1) - if (C.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/weapon/cable_coil(C.loc, 2, C.color) - del(C) + if (NC.shock(user, 50)) + if (prob(50)) + new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 1, NC.color) + del(NC) return -/obj/cable/proc/mergeConnectedNetworks(var/direction) - var/turf/TB - if((d1 == direction || d2 == direction) != 1) - return - TB = get_step(src, direction) - for(var/obj/cable/TC in TB) - if(src == TC) - continue +// called when a new cable is created +// can be 1 of 3 outcomes: +// 1. Isolated cable (or only connects to isolated machine) -> create new powernet +// 2. Joins to end or bridges loop of a single network (may also connect isolated machine) -> add to old network +// 3. Bridges gap between 2 networks -> merge the networks (must rebuild lists also) - var/fdir = (!direction)? 0 : turn(direction, 180) - if(TC.d1 == fdir || TC.d2 == fdir) - if(!netnum) - var/datum/powernet/PN = powernets[TC.netnum] - netnum = TC.netnum - PN = powernets[netnum] - PN.cables += src - continue - - if(TC.netnum != netnum) - var/datum/powernet/PN = powernets[netnum] - var/datum/powernet/TPN = powernets[TC.netnum] - var/kingNetnum = netnum - if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len) - kingNetnum = TC.netnum - var/datum/powernet/temp = PN - PN = TPN - TPN = temp - for(var/obj/cable/C in TPN.cables) - TPN.cables -= C - PN.cables += C - C.netnum = kingNetnum - for(var/obj/machinery/power/M in TPN.nodes) - if(M.netnum < 0) // APCs have netnum=-1 so they don't count as network nodes directly - continue - TPN.nodes -= M - PN.nodes += M - M.netnum = kingNetnum - M.powernet = powernets[M.netnum] - TC.netnum = kingNetnum - TPN.cables -= TC - PN.cables += TC - for(var/obj/machinery/power/M in TB) - if(!netnum) - if(!M.netnum) - continue - else - netnum = M.netnum - var/datum/powernet/PN = powernets[netnum] - PN.nodes += src - -/obj/cable/proc/mergeConnectedNetworksOnTurf() - var/turf/TB - TB = loc - - for(var/obj/cable/C in TB) - if(C == src) - continue - if(netnum == 0) - var/datum/powernet/PN = powernets[C.netnum] - netnum = C.netnum - PN.cables += src - continue - var/datum/powernet/PN = powernets[netnum] - var/datum/powernet/TPN = powernets[C.netnum] - var/kingNetnum = netnum - if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len) - kingNetnum = C.netnum - var/datum/powernet/temp = PN - PN = TPN - TPN = temp - - TPN.cables -= C - PN.cables += C - C.netnum = kingNetnum - for(var/obj/machinery/power/M in TB) - - if(M.netnum < 0) - continue - if(M.netnum == 0) - var/datum/powernet/PN = powernets[netnum] - PN.nodes += M - M.netnum = netnum - M.powernet = powernets[M.netnum] - - var/datum/powernet/PN = powernets[netnum] - var/datum/powernet/TPN = powernets[M.netnum] - var/kingNetnum = netnum - if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len) - kingNetnum = M.netnum - var/datum/powernet/temp = PN - PN = TPN - TPN = temp - - TPN.nodes -= M - PN.nodes += M - M.netnum = kingNetnum - M.powernet = powernets[M.netnum] - for(var/obj/machinery/power/apc/N in TB) - var/obj/machinery/power/M - M = N.terminal - - if(M.netnum == 0) - if(netnum == 0) - continue - var/datum/powernet/PN = powernets[netnum] - PN.nodes += M - M.netnum = netnum - M.powernet = powernets[M.netnum] - continue - - var/datum/powernet/PN = powernets[netnum] - var/datum/powernet/TPN = powernets[M.netnum] - var/kingNetnum = netnum - if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len) - kingNetnum = M.netnum - var/datum/powernet/temp = PN - PN = TPN - TPN = temp - - TPN.nodes -= M - PN.nodes += M - M.netnum = kingNetnum - M.powernet = powernets[M.netnum] - -obj/cable/proc/cableColor(var/colorC) - var/color_n = "red" - if(colorC) - color_n = colorC - color = color_n - switch(colorC) - if("red") - icon = 'power_cond_red.dmi' - if("yellow") - icon = 'power_cond_yellow.dmi' - if("green") - icon = 'power_cond_green.dmi' - if("blue") - icon = 'power_cond_blue.dmi' \ No newline at end of file +/obj/cable/proc/update_network() + // easy way: do /makepowernets again + makepowernets() + // do things more logically if this turns out to be too slow + // may just do this for case 3 anyway (simpler than refreshing list) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 0a121e65281..38058a2b70c 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -1,13 +1,19 @@ +/obj/machinery/power/solar + var/id + var/net_set = 0 + /obj/machinery/power/solar/New() ..() spawn(10) updateicon() - update_solar_exposure() if(powernet) - for(var/obj/machinery/power/solar_control/SC in powernet.nodes) - if(SC.id == id) - control = SC + add_avail(700) + net_set = 1 + else + net_set = 0 + + /obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user) ..() @@ -39,9 +45,9 @@ overlays += image('power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER) else overlays += image('power.dmi', icon_state = "solar_panel", layer = FLY_LAYER) - src.dir = angle2dir(adir) return +/* /obj/machinery/power/solar/proc/update_solar_exposure() if(!sun) return @@ -58,31 +64,22 @@ #define SOLARGENRATE 1500 +*/ + /obj/machinery/power/solar/process() if(stat & BROKEN) return - //return //TODO: FIX + add_avail(700) - if(!obscured) - var/sgen = SOLARGENRATE * sunfrac - add_avail(sgen) - if(powernet && control) - if(control in powernet.nodes) //this line right here... - control.gen += sgen - - if(adir != ndir) - spawn(10+rand(0,15)) - adir = (360+adir+dd_range(-10,10,ndir-adir))%360 - updateicon() - update_solar_exposure() /obj/machinery/power/solar/proc/broken() stat |= BROKEN updateicon() return + /obj/machinery/power/solar/meteorhit() if(stat & !BROKEN) broken() @@ -93,19 +90,14 @@ switch(severity) if(1.0) del(src) - if(prob(15)) - new /obj/item/weapon/shard( src.loc ) return if(2.0) if (prob(25)) new /obj/item/weapon/shard( src.loc ) del(src) return - if (prob(50)) - broken() if(3.0) - if (prob(25)) - broken() + return return /obj/machinery/power/solar/blob_act() @@ -118,7 +110,7 @@ - +/* /obj/machinery/power/solar_control/New() ..() spawn(15) @@ -331,3 +323,4 @@ if (prob(75)) broken() src.density = 0 +*/ \ No newline at end of file diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 9fc73c98b35..d452fe0cdd5 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -3,6 +3,8 @@ //Machine that tracks the sun and reports it's direction to the solar controllers //As long as this is working, solar panels on same powernet will track automatically + + /obj/machinery/power/tracker name = "solar tracker" desc = "A solar directional tracker." @@ -15,6 +17,8 @@ var/sun_angle = 0 // sun angle as set by sun datum +/* + // called by datum/sun/calc_position() as sun's angle changes proc/set_angle(var/angle) sun_angle = angle @@ -34,6 +38,8 @@ C.tracker_update(angle) + + // timed process // make sure we can draw power from the powernet process() @@ -47,4 +53,6 @@ // override power change to do nothing since we don't care about area power power_change() - return \ No newline at end of file + return + +*/ \ No newline at end of file