diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-03-05 18:20:48 -0500 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-03-05 18:20:48 -0500 |
commit | eaabe9d0ec76a17257d44d218ee59ec82ef54ae6 (patch) | |
tree | d5030ecb50958ab7d876b7699ef25db8d7b81a13 /Archipelago | |
parent | 5add48e21643321859783e069c9266b78245ab31 (diff) | |
download | lingo-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.gd | 15 |
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 = [] | |||
141 | var _solved_panels = [] | 141 | var _solved_panels = [] |
142 | 142 | ||
143 | var _panelsBySolveIndex = {} | 143 | var _panelsBySolveIndex = {} |
144 | const kPANEL_BITFIELDS = 13 # 802 / 64 | 144 | const kPANEL_BITFIELDS = 17 # 800 / 48 |
145 | const kPANEL_BITFIELD_LENGTH = 48 | ||
145 | 146 | ||
146 | signal could_not_connect | 147 | signal could_not_connect |
147 | signal connect_status | 148 | signal 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) |