about summary refs log tree commit diff stats
path: root/Archipelago
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-03-05 18:20:48 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2025-03-05 18:20:48 -0500
commiteaabe9d0ec76a17257d44d218ee59ec82ef54ae6 (patch)
treed5030ecb50958ab7d876b7699ef25db8d7b81a13 /Archipelago
parent5add48e21643321859783e069c9266b78245ab31 (diff)
downloadlingo-archipelago-eaabe9d0ec76a17257d44d218ee59ec82ef54ae6.tar.gz
lingo-archipelago-eaabe9d0ec76a17257d44d218ee59ec82ef54ae6.tar.bz2
lingo-archipelago-eaabe9d0ec76a17257d44d218ee59ec82ef54ae6.zip
Reduced to 48 bits per panel datastorage field
This is because Godot treats numbers in JSON as floats and we lose data casting it back to an int. Insane.
Diffstat (limited to 'Archipelago')
-rw-r--r--Archipelago/client.gd15
1 files changed, 8 insertions, 7 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index a18f528..d3d5053 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd
@@ -141,7 +141,8 @@ var _held_synced_panels = []
141var _solved_panels = [] 141var _solved_panels = []
142 142
143var _panelsBySolveIndex = {} 143var _panelsBySolveIndex = {}
144const kPANEL_BITFIELDS = 13 # 802 / 64 144const kPANEL_BITFIELDS = 17 # 800 / 48
145const kPANEL_BITFIELD_LENGTH = 48
145 146
146signal could_not_connect 147signal could_not_connect
147signal connect_status 148signal connect_status
@@ -579,9 +580,9 @@ func _on_data():
579 elif message["key"].begins_with("Lingo_%d_Panels_" % _slot): 580 elif message["key"].begins_with("Lingo_%d_Panels_" % _slot):
580 var key_index = int(message["key"].substr(("Lingo_%d_Panels_" % _slot).length())) 581 var key_index = int(message["key"].substr(("Lingo_%d_Panels_" % _slot).length()))
581 var field_value = int(message["value"]) 582 var field_value = int(message["value"])
582 for k in range(0, 64): 583 for k in range(0, kPANEL_BITFIELD_LENGTH):
583 if field_value & (1 << k) != 0: 584 if field_value & (1 << k) != 0:
584 var panel_index = key_index * 64 + k 585 var panel_index = key_index * kPANEL_BITFIELD_LENGTH + k
585 syncSolvedPanel(panel_index) 586 syncSolvedPanel(panel_index)
586 587
587 elif cmd == "Retrieved": 588 elif cmd == "Retrieved":
@@ -807,8 +808,8 @@ func mapFinishedLoading():
807 panel_data.append(0) 808 panel_data.append(0)
808 809
809 for panel_index in _held_panels: 810 for panel_index in _held_panels:
810 var key_index = panel_index / 64 811 var key_index = panel_index / kPANEL_BITFIELD_LENGTH
811 var field_slot = panel_index % 64 812 var field_slot = panel_index % kPANEL_BITFIELD_LENGTH
812 panel_data[key_index] = panel_data[key_index] | (1 << field_slot) 813 panel_data[key_index] = panel_data[key_index] | (1 << field_slot)
813 814
814 for k in range(0, kPANEL_BITFIELDS): 815 for k in range(0, kPANEL_BITFIELDS):
@@ -1021,8 +1022,8 @@ func solvePanel(panel_index):
1021 _solved_panels.append(panel_index) 1022 _solved_panels.append(panel_index)
1022 1023
1023 if _map_loaded: 1024 if _map_loaded:
1024 var key_index = panel_index / 64 1025 var key_index = panel_index / kPANEL_BITFIELD_LENGTH
1025 var field_slot = panel_index % 64 1026 var field_slot = panel_index % kPANEL_BITFIELD_LENGTH
1026 setValue("Panels_%d" % key_index, 1 << field_slot, "or") 1027 setValue("Panels_%d" % key_index, 1 << field_slot, "or")
1027 else: 1028 else:
1028 _held_panels.append(panel_index) 1029 _held_panels.append(panel_index)