From 3a59ee089937e9ce95c78d4d66edc77c5e11bfbe Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 30 May 2014 19:05:57 -0400 Subject: [PATCH] Adds ability to have airlock wires randomized Adds a secured_wires var to airlocks that may be set through mapping. If not set to 0, the airlock's wires will be randomized for that airlock, instead of using the global wiring scheme. --- code/game/machinery/doors/airlock.dm | 37 +++++++++++++++++++++++++--- code/global.dm | 8 +++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 39b5ec9a538..1517f6ffcc8 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 07eaf211e39..12de02408dd 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