about summary refs log tree commit diff stats
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
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.
-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)