diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 39b5ec9a53..1517f6ffcc 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -32,11 +32,19 @@ //This generates the randomized airlock wire assignments for the game. /proc/RandomAirlockWires() + var/list/wire_assignments = CreateRandomAirlockWires() + + globalAirlockIndexToFlag = wire_assignments[2] + globalAirlockIndexToWireColor = wire_assignments[3] + globalAirlockWireColorToIndex = wire_assignments[4] + return wire_assignments[1] + +/proc/CreateRandomAirlockWires() //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). var/list/wires = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + var/airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + var/airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + var/airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) var/flagIndex = 1 for (var/flag=1, flag<4096, flag+=flag) var/valid = 0 @@ -54,7 +62,7 @@ airlockWireColorToIndex[colorIndex] = flagIndex colorList -= colorIndex flagIndex+=1 - return wires + return list(wires, airlockIndexToFlag, airlockIndexToWireColor, airlockWireColorToIndex) /* Example: Airlock wires color -> flag are { 64, 128, 256, 2, 16, 4, 8, 32, 1 }. @@ -93,6 +101,11 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. normalspeed = 1 var/obj/item/weapon/airlock_electronics/electronics = null var/hasShocked = 0 //Prevents multiple shocks from happening + var/secured_wires = 0 //for mapping use + var/list/airlockIndexToFlag + var/list/airlockWireColorToFlag + var/list/airlockIndexToWireColor + var/list/airlockWireColorToIndex /obj/machinery/door/airlock/command name = "Airlock" @@ -1319,6 +1332,22 @@ About the new airlock wires panel: /obj/machinery/door/airlock/New() ..() + + //wires + if (!secured_wires) + airlockWireColorToFlag = globalAirlockWireColorToFlag + airlockIndexToFlag = globalAirlockIndexToFlag + airlockIndexToWireColor = globalAirlockIndexToWireColor + airlockWireColorToIndex = globalAirlockWireColorToIndex + else + var/wire_assignments = CreateRandomAirlockWires() + airlockWireColorToFlag = wire_assignments[1] + airlockIndexToFlag = wire_assignments[2] + airlockIndexToWireColor = wire_assignments[3] + airlockWireColorToIndex = wire_assignments[4] + +/proc/CreateRandomAirlockWires() + if(src.closeOtherId != null) spawn (5) for (var/obj/machinery/door/airlock/A in world) diff --git a/code/global.dm b/code/global.dm index 07eaf211e3..12de02408d 100644 --- a/code/global.dm +++ b/code/global.dm @@ -176,10 +176,10 @@ var/datum/nanomanager/nanomanager = new() //airlockWireColorToIndex takes a number representing the wire color, e.g. the orange wire is always 1, the dark red wire is always 2, etc. It returns the index for whatever that wire does. //airlockIndexToWireColor does the opposite thing - it takes the index for what the wire does, for example AIRLOCK_WIRE_IDSCAN is 1, AIRLOCK_WIRE_POWER1 is 2, etc. It returns the wire color number. //airlockWireColorToFlag takes the wire color number and returns the flag for it (1, 2, 4, 8, 16, etc) -var/list/airlockWireColorToFlag = RandomAirlockWires() -var/list/airlockIndexToFlag -var/list/airlockIndexToWireColor -var/list/airlockWireColorToIndex +var/list/globalAirlockWireColorToFlag = RandomAirlockWires() +var/list/globalAirlockIndexToFlag +var/list/globalAirlockIndexToWireColor +var/list/globalAirlockWireColorToIndex var/list/APCWireColorToFlag = RandomAPCWires() var/list/APCIndexToFlag var/list/APCIndexToWireColor