bit mapping and finish cec corner

This commit is contained in:
Persephone Bubblegum-Holidy 2025-06-01 20:32:53 -07:00
parent 1008ce2e20
commit 09902415ed
6 changed files with 152 additions and 102 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View file

@ -0,0 +1,39 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://buqvxu4n8q6qc"
path.s3tc="res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.s3tc.ctex"
path.etc2="res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "91cacf7bfdf049e3b957402daac9df21"
}
[deps]
source_file="res://Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png"
dest_files=["res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.s3tc.ctex", "res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

View file

@ -16,6 +16,7 @@ script = ExtResource("2_8qvk7")
[node name="Warblettes" parent="." instance=ExtResource("3_t27ru")] [node name="Warblettes" parent="." instance=ExtResource("3_t27ru")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.25, 4, 0.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.25, 4, 0.5)
script = ExtResource("2_8qvk7")
[node name="Angle 1" type="Camera3D" parent="."] [node name="Angle 1" type="Camera3D" parent="."]
transform = Transform3D(-0.984612, -0.00554278, 0.174664, 0.0289131, 0.980555, 0.194105, -0.172344, 0.196168, -0.965306, -0.658302, 4.93729, -4) transform = Transform3D(-0.984612, -0.00554278, 0.174664, 0.0289131, 0.980555, 0.194105, -0.172344, 0.196168, -0.965306, -0.658302, 4.93729, -4)
@ -41,7 +42,7 @@ spot_range = 6.53799
spot_angle = 30.5982 spot_angle = 30.5982
spot_angle_attenuation = 0.1 spot_angle_attenuation = 0.1
[node name="Chuck Spotlight2" type="SpotLight3D" parent="."] [node name="Warblettes Spotlight" type="SpotLight3D" parent="."]
transform = Transform3D(-0.963761, 0.0690445, -0.257677, 1.9697e-08, 0.965926, 0.258819, 0.266767, 0.24944, -0.930922, -0.309492, 5.86862, -0.75) transform = Transform3D(-0.963761, 0.0690445, -0.257677, 1.9697e-08, 0.965926, 0.258819, 0.266767, 0.24944, -0.930922, -0.309492, 5.86862, -0.75)
light_color = Color(1, 0.9625, 0.85, 1) light_color = Color(1, 0.9625, 0.85, 1)
light_energy = 2.0 light_energy = 2.0

View file

@ -17,79 +17,57 @@ var current_stage : String
var stages_info = { var stages_info = {
"Helen House": "Helen House":
{ {
"bits": 32, "bits": 19,
"scene": "res://Scenes/Stages/HelenHouse.tscn", "scene": "res://Scenes/Stages/HelenHouse.tscn",
"scene_ref_base": "SubViewport/HelenHouse/", "scene_ref_base": "SubViewport/HelenHouse/",
"camera_count": 2, "camera_count": 2,
"ust_character": "Mitzi/Helen", "ust_type": "Rockafire Explosion/3-Stage",
"ust_stage": "Rockafire Explosion/3-Stage (Single Character)",
"bit_mapping": "bit_mapping":
{ {
"Helen": 23: { "bot": "Helen", "movement": "Mouth", "flow_in": 3.0, "flow_out": 2.0 },
{ 24: { "bot": "Helen", "movement": "Left Ear", "flow_in": 3.5, "flow_out": 1.5 },
"Mouth": [3.0, 2.0], 25: { "bot": "Helen", "movement": "Right Ear", "flow_in": 3.5, "flow_out": 1.5 },
"Left Ear": [3.5, 1.5], 26: { "bot": "Helen", "movement": "Left Eyelid", "flow_in": 1.5, "flow_out": 2.0 },
"Right Ear": [3.5, 1.5], 27: { "bot": "Helen", "movement": "Right Eyelid", "flow_in": 1.5, "flow_out": 2.0 },
"Left Eyelid": [1.5, 2.0], 28: { "bot": "Helen", "movement": "Eyes Left", "flow_in": 3.5, "flow_out": 1.5 },
"Right Eyelid": [1.5, 2.0], 29: { "bot": "Helen", "movement": "Eyes Right", "flow_in": 3.5, "flow_out": 1.5 },
"Eyes Left": [3.5, 1.5], 30: { "bot": "Helen", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
"Eyes Right": [3.5, 1.5], 31: { "bot": "Helen", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
"Head Left": [1.5, 1.5], 32: { "bot": "Helen", "movement": "Head Up", "flow_in": 1.0, "flow_out": 1.0 },
"Head Right": [1.5, 1.5], 33: { "bot": "Helen", "movement": "Left Arm Up", "flow_in": 0.8, "flow_out": 0.6 },
"Head Up": [1.0, 1.0], 34: { "bot": "Helen", "movement": "Left Arm Twist", "flow_in": 0.8, "flow_out": 0.8 },
"Left Arm Up": [0.8, 0.6], 35: { "bot": "Helen", "movement": "Left Elbow", "flow_in": 1.0, "flow_out": 1.0 },
"Left Arm Twist": [0.8, 0.8], 36: { "bot": "Helen", "movement": "Right Arm Up", "flow_in": 0.8, "flow_out": 0.6 },
"Left Elbow": [1.0, 1.0], 37: { "bot": "Helen", "movement": "Right Arm Twist", "flow_in": 0.8, "flow_out": 0.8 },
"Right Arm Up": [0.8, 0.6], 38: { "bot": "Helen", "movement": "Right Elbow", "flow_in": 1.0, "flow_out": 1.0 },
"Right Arm Twist": [0.8, 0.8], 39: { "bot": "Helen", "movement": "Body Left", "flow_in": 0.7, "flow_out": 0.7 },
"Right Elbow": [1.0, 1.0], 40: { "bot": "Helen", "movement": "Body Right", "flow_in": 0.7, "flow_out": 0.7 },
"Body Left": [0.7, 0.7], 41: { "bot": "Helen", "movement": "Body Lean", "flow_in": 1.0, "flow_out": 0.8 },
"Body Right": [0.7, 0.7],
"Body Lean": [1.0, 0.8],
},
"None":
{
"Unused 20": ["None"],
"Unused 21": ["None"],
"Unused 22": ["None"],
"Unused 23": ["None"],
"Unused 24": ["None"],
"Unused 25": ["None"],
"Unused 26": ["None"],
"Unused 27": ["None"],
"Unused 28": ["None"],
"Unused 29": ["None"],
"Unused 30": ["None"],
"Unused 31": ["None"],
"Unused 32": ["None"],
}
} }
}, },
"Chuck E's Corner": "Chuck E's Corner":
{ {
"bits": 8, "bits": 10,
"scene": "res://Scenes/Stages/ChuckEsCorner.tscn", "scene": "res://Scenes/Stages/ChuckEsCorner.tscn",
"scene_ref_base": "SubViewport/ChuckEsCorner/", "scene_ref_base": "SubViewport/ChuckEsCorner/",
"camera_count": 3, "camera_count": 3,
"ust_character": "Chuck E.", "ust_type": "Cyberamics",
"ust_stage": "Cyberamics (Single Character)",
"bit_mapping": "bit_mapping":
{ {
"Chuck": 1: { "bot": "Chuck", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
{ 2: { "bot": "Chuck", "movement": "Head Left", "flow_in": 0.8, "flow_out": 1.0 },
"Mouth": [7.5, 6.0], 3: { "bot": "Chuck", "movement": "Head Right", "flow_in": 1.0, "flow_out": 1.0 },
"Head Left": [0.8, 1.0], 4: { "bot": "Chuck", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
"Head Right": [1.0, 1.0], 5: { "bot": "Chuck", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
"Head Up": [2.0, 1.0], 6: { "bot": "Chuck", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
"Eyes Left": [4.0, 3.0], 7: { "bot": "Chuck", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
"Eyes Right": [4.0, 3.0], 8: { "bot": "Chuck", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
"Eyelids": [7.5, 5.0], 41: { "bot": "Warblettes", "movement": "Mouth", "flow_in": 4.0, "flow_out": 3.0 },
"Right Arm": [2.0, 1.0], 44: { "bot": "Warblettes", "movement": "Body Rock", "flow_in": 1.0, "flow_out": 1.0 },
}
} }
} }
} }
@ -129,41 +107,41 @@ func reload_stage(stage_previously_loaded: bool) -> void:
$FlyoutPanel/Camera.size.y = cam_offset $FlyoutPanel/Camera.size.y = cam_offset
var rows_offset = 0 var rows_offset = 0
var flows_offset = 0 var flows_offset = 0
var bit_idx = 1
var flow_count = 0 var flow_count = 0
for bot in stages_info[current_stage]["bit_mapping"]: for bit_number in stages_info[current_stage]["bit_mapping"]:
for movement in stages_info[current_stage]["bit_mapping"][bot]: var bot = stages_info[current_stage]["bit_mapping"][bit_number]["bot"]
var movement = stages_info[current_stage]["bit_mapping"][bit_number]["movement"]
var movement_flows = stages_info[current_stage]["bit_mapping"][bot][movement]
if (movement_flows[0] is not String): var in_flow = stages_info[current_stage]["bit_mapping"][bit_number]["flow_in"]
var flow_control = load("res://Scenes/GUI/Controls/FlowControl.tscn").instantiate() var out_flow = stages_info[current_stage]["bit_mapping"][bit_number]["flow_out"]
flow_control.position.y = flows_offset if (in_flow is not String):
flow_control.name = bot + " " + movement var flow_control = load("res://Scenes/GUI/Controls/FlowControl.tscn").instantiate()
flow_control.in_value = movement_flows[0] flow_control.position.y = flows_offset
flow_control.out_value = movement_flows[1] flow_control.name = bot + " " + movement
$FlyoutPanel/FlowControls/InvisibleMask/FlowHandle.add_child(flow_control) flow_control.in_value = in_flow
flows_offset += 44 flow_control.out_value = out_flow
flow_count += 1 $FlyoutPanel/FlowControls/InvisibleMask/FlowHandle.add_child(flow_control)
flows_offset += 44
flow_count += 1
var row = load("res://Scenes/GUI/Controls/MovementRow.tscn").instantiate() var row = load("res://Scenes/GUI/Controls/MovementRow.tscn").instantiate()
row.position.y = rows_offset row.name = str(bit_number) + " Bit"
row.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"] row.position.y = rows_offset
row.animatronic = bot row.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
if (movement_flows[0] is String): row.flow_path = "None" row.animatronic = bot
row.movement_bit = bit_idx if (in_flow is String): row.flow_path = "None"
row.movement_name = movement row.movement_bit = bit_number
$SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.add_child(row) row.movement_name = movement
$SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.add_child(row, true)
var movement_button = load("res://Scenes/GUI/Controls/MovementButton.tscn").instantiate() var movement_button = load("res://Scenes/GUI/Controls/MovementButton.tscn").instantiate()
movement_button.position.y = rows_offset movement_button.position.y = rows_offset
movement_button.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"] movement_button.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
movement_button.animatronic = bot movement_button.animatronic = bot
if (movement_flows[0] is String): movement_button.flow_path = "None" if (in_flow is String): movement_button.flow_path = "None"
movement_button.movement_name = movement movement_button.movement_name = movement
$FlyoutPanel/Movements/InvisibleMask/MovementHandle.add_child(movement_button) $FlyoutPanel/Movements/InvisibleMask/MovementHandle.add_child(movement_button)
rows_offset += 44
rows_offset += 44
bit_idx += 1
$SequencerPanel/TimelinePanel/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1 $SequencerPanel/TimelinePanel/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1
$FlyoutPanel/Movements/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1 $FlyoutPanel/Movements/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1
$FlyoutPanel/FlowControls/VScrollBar.max_value = flow_count - 1 $FlyoutPanel/FlowControls/VScrollBar.max_value = flow_count - 1
@ -268,8 +246,12 @@ func _on_showtape_load_open_button_pressed() -> void:
var file = FileAccess.open($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges(), FileAccess.READ) var file = FileAccess.open($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges(), FileAccess.READ)
var content = file.get_as_text() var content = file.get_as_text()
var header = content.split(";")[0].split(",") var header = content.split(";")[0].split(",")
if ((int(header[3]) != stages_info[current_stage]["bits"]) || (header[4] != stages_info[current_stage]["ust_stage"])|| (header[5] != stages_info[current_stage]["ust_character"])): if (header[1] != "2"):
$IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: %s\nShowtape character(s): %s" % [header[4], header[5]] $IncorrectShowtapeDialog.dialog_text = "This showtape is not the correct version!"
$IncorrectShowtapeDialog.show()
return
if (header[3] != stages_info[current_stage]["ust_type"]):
$IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: " + header[4]
$IncorrectShowtapeDialog.show() $IncorrectShowtapeDialog.show()
return return
show_name = header[2] show_name = header[2]
@ -290,7 +272,7 @@ func _on_showtape_save_out_browse_button_pressed() -> void:
$SaveShowtapeFileDialog.show() $SaveShowtapeFileDialog.show()
func _on_showtape_save_create_button_pressed() -> void: func _on_showtape_save_create_button_pressed() -> void:
var header = "UST,1,"+show_name.replace(",", "_").replace(";", "_")+","+str(stages_info[current_stage]["bits"])+","+stages_info[current_stage]["ust_stage"]+","+stages_info[current_stage]["ust_character"]+";" var header = "UST,2,"+show_name.replace(",", "_").replace(";", "_")+","+stages_info[current_stage]["ust_type"]+";"
var data_out_string = save_data() var data_out_string = save_data()
var file = FileAccess.open($ShowtapeSaveScreen/DialogPanel/OutFilePath.text, FileAccess.WRITE) var file = FileAccess.open($ShowtapeSaveScreen/DialogPanel/OutFilePath.text, FileAccess.WRITE)
file.store_string(header+data_out_string+";"+Marshalls.raw_to_base64($AudioStreamPlayer.stream.data)) file.store_string(header+data_out_string+";"+Marshalls.raw_to_base64($AudioStreamPlayer.stream.data))
@ -481,28 +463,56 @@ func _on_stop_button_pressed() -> void:
func save_data() -> String: func save_data() -> String:
var write_out : String = "" var write_out : String = ""
var temp_data = [] var temp_data = {}
var longest_channel = 0 var longest_channel = 0
for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children(): for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children():
temp_data.append(movement_row.movements) temp_data[int(movement_row.name.split(" ")[0])] = movement_row.movements
if (movement_row.movements.size() > longest_channel): longest_channel = movement_row.movements.size() if (movement_row.movements.size() > longest_channel): longest_channel = movement_row.movements.size()
for i in range(longest_channel+1): for i in range(longest_channel+1):
var frame_byte = 0 var frame_long_1 = 0
for j in range(stages_info[current_stage]["bits"]): var frame_long_2 = 0
if (index_get_safe(i, temp_data[j])): frame_byte += 1 << j; var frame_long_3 = 0
write_out += ("%0"+str(stages_info[current_stage]["bits"]/4)+"X,") % frame_byte var frame_long_4 = 0
for j in temp_data:
if (index_get_safe(i, temp_data[j])):
if (j <= 64):
frame_long_1 += 1 << j-1;
elif (j <= 128):
frame_long_2 += 1 << (j&64)-1;
elif (j <= 192):
frame_long_3 += 1 << (j&64)-1;
else:
frame_long_4 += 1 << (j&64)-1;
write_out += (("%016X%016X%016X%016X,") % [frame_long_4, frame_long_3, frame_long_2, frame_long_1])
return write_out return write_out
func plot_data(data: String): func plot_data(data: String):
start_recording.emit() start_recording.emit()
var evil_glass = []
for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children():
evil_glass.append(movement_row.movement_bit)
for frame_string in data.split(","): for frame_string in data.split(","):
if (frame_string == ""): continue if (frame_string == ""): continue
var frame_byte = frame_string.hex_to_int() var frame_long_4 = frame_string.substr(0, 16).hex_to_int()
for i in range(stages_info[current_stage]["bits"]): var frame_long_3 = frame_string.substr(17, 16).hex_to_int()
var frame_long_2 = frame_string.substr(33, 16).hex_to_int()
var frame_long_1 = frame_string.substr(49, 16).hex_to_int()
for i in stages_info[current_stage]["bit_mapping"]:
var er = false var er = false
if ((frame_byte & int(pow(2, i))) >> i == 1): var check_i = (i % 64) - 1
er = true if (i <= 64):
$SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_child(i).etching = er if ((frame_long_1 & int(pow(2, check_i))) >> check_i == 1):
er = true
elif (i <= 128):
if ((frame_long_2 & int(pow(2, check_i))) >> check_i == 1):
er = true
elif (i <= 192):
if ((frame_long_3 & int(pow(2, check_i))) >> check_i == 1):
er = true
else:
if ((frame_long_4 & int(pow(2, check_i))) >> check_i == 1):
er = true
$SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_child(evil_glass.find(i)).etching = er
step.emit(1) step.emit(1)
for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children(): for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children():
movement_row.etching = false movement_row.etching = false