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 | |
| 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.
| -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) |
