Solars fix. Needs the powernet fix to actually work properly.

- Solars now bring out a fixed value. 700W each, meaning 60 of them (one array) generates 42000W. Not enough to power the station? That's the point. Although 4 x 42000W = 168000. This might be nerfed soon.
- Sun removed. Seriously, that thing ate up processor time and was completely useless.
- Solar tracker remains on the map but is completely useless. Will remove.
- Also reverted the cable updates from r1729. The code from prior to that revision might be as laggy as it was, but it works properly. After the revision powernets didn't calculate available power properly and did not update properly when new pieces were made (They stopped updating at the first wire piece which ended in a knot (non-smooth cable piece))

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1897 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
baloh.matevz
2011-07-21 02:58:03 +00:00
parent 044ab25cf8
commit 809ba1710d
7 changed files with 129 additions and 234 deletions
+12
View File
@@ -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)
+86 -200
View File
@@ -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'
/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)
+18 -25
View File
@@ -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
*/
+9 -1
View File
@@ -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
return
*/