gate info

This commit is contained in:
Nordup 2024-12-03 11:10:50 +04:00
parent 71b8d06c69
commit a425178538
10 changed files with 177 additions and 72 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=40 format=3 uid="uid://kywrsqro3d5i"]
[gd_scene load_steps=42 format=3 uid="uid://kywrsqro3d5i"]
[ext_resource type="Script" path="res://scripts/loading/gate_loader.gd" id="1_uxhy6"]
[ext_resource type="Resource" uid="uid://b1xvdym0qh6td" path="res://resources/gate_events.res" id="2_q7cvi"]
@ -10,17 +10,17 @@
[ext_resource type="Resource" uid="uid://bo6qgr210aamc" path="res://resources/sandbox_env.tres" id="8_a6dvr"]
[ext_resource type="Script" path="res://scripts/sandbox/sandbox_logger.gd" id="9_fikc8"]
[ext_resource type="Resource" uid="uid://crjhix0osmtnf" path="res://resources/ui_events.res" id="9_ir58h"]
[ext_resource type="Script" path="res://scripts/ui/world/world_canvas.gd" id="9_ncfxj"]
[ext_resource type="Shader" path="res://shaders/render_result.gdshader" id="10_2auwe"]
[ext_resource type="Script" path="res://scripts/sandbox/command_sync.gd" id="10_cqo55"]
[ext_resource type="Resource" uid="uid://cjcdum6fm4ta0" path="res://resources/api_settings.tres" id="10_vhc7k"]
[ext_resource type="Script" path="res://scripts/sandbox/process_checker.gd" id="11_72cjp"]
[ext_resource type="Script" path="res://scripts/ui/world/world_ui.gd" id="12_jdwjt"]
[ext_resource type="Script" path="res://scripts/ui/world/splash_screen.gd" id="13_3b6nd"]
[ext_resource type="Script" path="res://scripts/ui/world/foreground.gd" id="17_6e5v3"]
[ext_resource type="PackedScene" uid="uid://c7571vjq7l0jp" path="res://scenes/components/not_responding.tscn" id="17_kwbm3"]
[ext_resource type="Script" path="res://scripts/ui/world/gate_info.gd" id="18_q06xu"]
[ext_resource type="Shader" uid="uid://dd1axtdlit6no" path="res://shaders/vignette_blur.tres" id="18_sat0u"]
[ext_resource type="Script" path="res://scripts/ui/fullscreen_animation.gd" id="18_sx3kr"]
[ext_resource type="Script" path="res://scripts/ui/ui_mode_animation.gd" id="18_sx3kr"]
[ext_resource type="Script" path="res://scripts/ui/world/vignette_blur.gd" id="19_415fa"]
[ext_resource type="FontFile" uid="uid://do40418waa8w3" path="res://assets/fonts/Inter-Regular.otf" id="19_tkqw6"]
[ext_resource type="FontFile" uid="uid://bjeupg0ikc2kv" path="res://assets/fonts/Monospace.ttf" id="20_hoet7"]
[ext_resource type="LabelSettings" uid="uid://crt4elt055uhg" path="res://assets/styles/text_big.tres" id="20_v1648"]
@ -28,6 +28,7 @@
[ext_resource type="FontFile" uid="uid://tfj3o1e1wytn" path="res://assets/fonts/Inter-BoldItalic.otf" id="22_i5khx"]
[ext_resource type="FontFile" uid="uid://c14w1y1r54wgi" path="res://assets/fonts/Inter-Bold.otf" id="23_t1gqo"]
[ext_resource type="PackedScene" uid="uid://dr1hykfog1h85" path="res://scenes/components/gate_status.tscn" id="25_3436m"]
[ext_resource type="Script" path="res://scripts/ui/world/release_focus.gd" id="26_u6afs"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_be6ex"]
resource_local_to_scene = true
@ -36,7 +37,7 @@ shader_parameter/ext_texture_is_bgra = null
shader_parameter/show_render = null
[sub_resource type="Curve" id="Curve_rju31"]
_data = [Vector2(0.0702341, 1), 0.0, -0.118897, 0, 0, Vector2(0.270903, 0.720054), -3.7783, -3.7783, 0, 0, Vector2(0.444816, 0.308883), -1.03045, -1.03045, 0, 0, Vector2(1, 0.160161), 0.0, 0.0, 0, 0]
_data = [Vector2(0.090301, 0.772544), 0.0, -0.118897, 0, 0, Vector2(0.307692, 0.510094), -2.18127, -2.18127, 0, 0, Vector2(0.605578, 0.0776294), -1.01166, -1.01166, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 4
[sub_resource type="CurveTexture" id="CurveTexture_fomqh"]
@ -44,8 +45,9 @@ curve = SubResource("Curve_rju31")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_bspld"]
shader = ExtResource("18_sat0u")
shader_parameter/BlurAmount = 3.0
shader_parameter/VignetteColor = Color(0.0137093, 0.00449686, 0.0741505, 1)
shader_parameter/UVScale = Vector2(0.9, 0.9)
shader_parameter/BlurAmount = 2.5
shader_parameter/VignetteColor = Color(0.126, 0.1719, 0.18, 1)
shader_parameter/Vignette = SubResource("CurveTexture_fomqh")
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_axrau"]
@ -61,6 +63,8 @@ corner_radius_bottom_left = 25
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jiaac"]
bg_color = Color(0, 0, 0, 0.2)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_tnu6q"]
[sub_resource type="Animation" id="Animation_beyyv"]
length = 0.001
tracks/0/type = "value"
@ -77,7 +81,7 @@ tracks/0/keys = {
}
[sub_resource type="Animation" id="Animation_tper3"]
resource_name = "fullscreen"
resource_name = "focused"
length = 0.25
step = 0.05
tracks/0/type = "value"
@ -113,7 +117,7 @@ tracks/0/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_sld6k"]
_data = {
"RESET": SubResource("Animation_beyyv"),
"fullscreen": SubResource("Animation_tper3"),
"focused": SubResource("Animation_tper3"),
"initial": SubResource("Animation_77flb")
}
@ -175,9 +179,6 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 0
script = ExtResource("9_ncfxj")
ui_events = ExtResource("9_ir58h")
interpolate = 1.0
[node name="RenderResult" type="TextureRect" parent="WorldCanvas"]
texture_filter = 2
@ -204,7 +205,7 @@ grow_horizontal = 2
grow_vertical = 2
focus_mode = 0
[node name="Foreground" type="Control" parent="."]
[node name="Foreground" type="Control" parent="." node_paths=PackedStringArray("splash_screen", "vignette_blur", "click_anywhere")]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -212,8 +213,14 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("17_6e5v3")
gate_events = ExtResource("2_q7cvi")
ui_events = ExtResource("9_ir58h")
splash_screen = NodePath("SplashScreen")
vignette_blur = NodePath("VignetteBlur")
click_anywhere = NodePath("ClickAnywhere")
[node name="SplashScreen" type="TextureRect" parent="Foreground" node_paths=PackedStringArray("render_result")]
[node name="SplashScreen" type="TextureRect" parent="Foreground"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -223,11 +230,6 @@ grow_vertical = 2
mouse_filter = 2
expand_mode = 1
stretch_mode = 6
script = ExtResource("13_3b6nd")
gate_events = ExtResource("2_q7cvi")
command_events = ExtResource("6_18mgg")
ui_events = ExtResource("9_ir58h")
render_result = NodePath("../../WorldCanvas/RenderResult")
[node name="VignetteBlur" type="Panel" parent="Foreground"]
material = SubResource("ShaderMaterial_bspld")
@ -239,8 +241,24 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_axrau")
script = ExtResource("19_415fa")
blur_amount_game = 1.5
uv_scale = Vector2(0.97, 0.97)
[node name="GateInfo" type="VBoxContainer" parent="Foreground" node_paths=PackedStringArray("image", "title", "description")]
[node name="ClickAnywhere" type="Label" parent="Foreground"]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -175.5
offset_top = 50.0
offset_right = 175.5
offset_bottom = 75.0
grow_horizontal = 2
text = "Click Anywhere to Play → ESC to Exit"
label_settings = ExtResource("20_v1648")
[node name="GateInfo" type="VBoxContainer" parent="Foreground" node_paths=PackedStringArray("image", "image_darken", "title", "description", "gate_status")]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
@ -250,20 +268,20 @@ offset_top = -90.0
offset_right = 562.0
offset_bottom = -50.0
grow_vertical = 0
mouse_filter = 2
theme_override_constants/separation = 12
alignment = 2
script = ExtResource("18_q06xu")
gate_events = ExtResource("2_q7cvi")
image = NodePath("Image/TextureRect")
image_darken = NodePath("Image/Panel")
title = NodePath("Title")
description = NodePath("RichTextLabel")
gate_status = [NodePath("Space2"), NodePath("GateStatus")]
[node name="Image" type="Panel" parent="Foreground/GateInfo"]
clip_children = 1
custom_minimum_size = Vector2(0, 256)
layout_mode = 2
mouse_filter = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_vnx4g")
[node name="TextureRect" type="TextureRect" parent="Foreground/GateInfo/Image"]
@ -288,15 +306,34 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_jiaac")
[node name="Space" type="Control" parent="Foreground/GateInfo"]
custom_minimum_size = Vector2(0, 6)
layout_mode = 2
mouse_filter = 2
[node name="Title" type="Label" parent="Foreground/GateInfo"]
[node name="Title" type="RichTextLabel" parent="Foreground/GateInfo"]
layout_mode = 2
focus_mode = 2
mouse_default_cursor_shape = 1
theme_override_colors/default_color = Color(0.831373, 0.831373, 0.831373, 1)
theme_override_colors/selection_color = Color(0.419608, 0.231373, 0.929412, 0.588235)
theme_override_fonts/normal_font = ExtResource("19_tkqw6")
theme_override_fonts/mono_font = ExtResource("20_hoet7")
theme_override_fonts/italics_font = ExtResource("21_lpegk")
theme_override_fonts/bold_italics_font = ExtResource("22_i5khx")
theme_override_fonts/bold_font = ExtResource("23_t1gqo")
theme_override_font_sizes/bold_italics_font_size = 20
theme_override_font_sizes/italics_font_size = 20
theme_override_font_sizes/mono_font_size = 20
theme_override_font_sizes/normal_font_size = 20
theme_override_font_sizes/bold_font_size = 15
theme_override_styles/focus = SubResource("StyleBoxEmpty_tnu6q")
text = "Welcome"
label_settings = ExtResource("20_v1648")
fit_content = true
context_menu_enabled = true
selection_enabled = true
script = ExtResource("26_u6afs")
[node name="RichTextLabel" type="RichTextLabel" parent="Foreground/GateInfo"]
layout_mode = 2
focus_mode = 2
mouse_default_cursor_shape = 1
theme_override_colors/default_color = Color(0.831373, 0.831373, 0.831373, 1)
theme_override_colors/selection_color = Color(0.419608, 0.231373, 0.929412, 0.588235)
theme_override_fonts/normal_font = ExtResource("19_tkqw6")
@ -309,9 +346,13 @@ theme_override_font_sizes/italics_font_size = 15
theme_override_font_sizes/mono_font_size = 15
theme_override_font_sizes/normal_font_size = 15
theme_override_font_sizes/bold_font_size = 15
theme_override_styles/focus = SubResource("StyleBoxEmpty_tnu6q")
bbcode_enabled = true
text = "A slot machine battler instead of money its points that you can use to heal and attack. upgrade your build and attack enemies and become the best on the leaderboard"
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat"
fit_content = true
context_menu_enabled = true
selection_enabled = true
script = ExtResource("26_u6afs")
[node name="Space2" type="Control" parent="Foreground/GateInfo"]
custom_minimum_size = Vector2(0, 26)

View file

@ -7,7 +7,7 @@ signal ui_size_changed(size: Vector2)
enum UiMode
{
INITIAL,
FULL_SCREEN
FOCUSED
}
var current_ui_size: Vector2

View file

@ -26,7 +26,7 @@ func start_server() -> void:
func on_ui_mode_changed(mode: UiEvents.UiMode) -> void:
should_send = mode == UiEvents.UiMode.FULL_SCREEN
should_send = mode == UiEvents.UiMode.FOCUSED
func _input(_event: InputEvent) -> void:

View file

@ -5,9 +5,9 @@ extends AnimationPlayer
const RESET := "RESET"
const INITIAL := "initial"
const FULLSCREEN := "fullscreen"
const FOCUSED := "focused"
var fullscreen := false
var focused := false
func _ready() -> void:
@ -16,10 +16,10 @@ func _ready() -> void:
func on_ui_mode_changed(mode: UiEvents.UiMode) -> void:
if mode == UiEvents.UiMode.INITIAL and fullscreen:
fullscreen = false
if mode == UiEvents.UiMode.INITIAL and focused:
focused = false
play(INITIAL)
if mode == UiEvents.UiMode.FULL_SCREEN and not fullscreen:
fullscreen = true
play(FULLSCREEN)
if mode == UiEvents.UiMode.FOCUSED and not focused:
focused = true
play(FOCUSED)

View file

@ -0,0 +1,35 @@
extends Control
@export var gate_events: GateEvents
@export var ui_events: UiEvents
@export var splash_screen: TextureRect
@export var vignette_blur: VignetteBlur
@export var click_anywhere: Control
func _ready() -> void:
gate_events.gate_info_loaded.connect(show_thumbnail)
gate_events.first_frame.connect(on_first_frame)
ui_events.ui_mode_changed.connect(on_ui_mode_changed)
vignette_blur.hide()
click_anywhere.hide()
func show_thumbnail(gate: Gate, _is_cached: bool) -> void:
splash_screen.texture = FileTools.load_external_tex(gate.image)
vignette_blur.show()
func on_first_frame() -> void:
splash_screen.hide()
click_anywhere.show()
vignette_blur.gate_started_params()
func on_ui_mode_changed(mode: UiEvents.UiMode) -> void:
if mode == UiEvents.UiMode.INITIAL:
show()
if mode == UiEvents.UiMode.FOCUSED:
click_anywhere.hide()
hide()

View file

@ -3,15 +3,19 @@ extends Control
@export var gate_events: GateEvents
@export var image: TextureRect
@export var title: Label
@export var image_darken: Control
@export var title: RichTextLabel
@export var description: RichTextLabel
@export var gate_status: Array[Control]
var gate: Gate
func _ready() -> void:
gate_events.gate_info_loaded.connect(display_info)
gate_events.first_frame.connect(on_first_frame)
gate_events.gate_error.connect(on_gate_error)
clear_info()
func display_info(_gate: Gate, _is_cached: bool) -> void:
@ -19,6 +23,20 @@ func display_info(_gate: Gate, _is_cached: bool) -> void:
title.text = "Unnamed" if gate.title.is_empty() else gate.title
description.text = "No description" if gate.description.is_empty() else gate.description
image.texture = FileTools.load_external_tex(gate.image)
if is_instance_valid(image.texture): image_darken.show()
func clear_info() -> void:
gate = null
title.text = ""
description.text = ""
image.texture = null
image_darken.hide()
func on_first_frame() -> void:
for node in gate_status:
node.hide()
func on_gate_error(_code: GateEvents.GateError) -> void:

View file

@ -1,17 +0,0 @@
extends TextureRect
class_name SplashScreen
@export var gate_events: GateEvents
@export var command_events: CommandEvents
@export var ui_events: UiEvents
@export var render_result: RenderResult
func _ready():
gate_events.gate_info_loaded.connect(show_thumbnail)
#gate_events.first_frame.connect(func(): hide())
func show_thumbnail(gate: Gate, _is_cached: bool) -> void:
#if is_cached: return # Resource pack is already downloaded
texture = FileTools.load_external_tex(gate.image)

View file

@ -0,0 +1,17 @@
extends Control
class_name VignetteBlur
const BLUR_AMOUNT = "BlurAmount"
const UV_SCALE = "UVScale"
@export var blur_amount_game: float
@export var uv_scale: Vector2
func gate_started_params() -> void:
set_param(BLUR_AMOUNT, blur_amount_game)
set_param(UV_SCALE, uv_scale)
func set_param(param: StringName, value: Variant) -> void:
(material as ShaderMaterial).set_shader_parameter(param, value)

View file

@ -5,12 +5,14 @@ extends Control
@export var command_events: CommandEvents
@export var render_result: RenderResult
var gate_started: bool
var mouse_mode: int = Input.MOUSE_MODE_VISIBLE
var _visible: bool = true
func _ready() -> void:
command_events.set_mouse_mode.connect(set_mouse_mode)
gate_events.first_frame.connect(func(): gate_started = true)
gate_events.not_responding.connect(func(): set_mouse_mode(Input.MOUSE_MODE_VISIBLE))
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
@ -38,9 +40,9 @@ func show_ui() -> void:
func hide_ui() -> void:
if not _visible: return
if not _visible or not gate_started: return
_visible = false
Input.set_mouse_mode(mouse_mode)
ui_events.ui_mode_changed_emit(UiEvents.UiMode.FULL_SCREEN)
ui_events.ui_mode_changed_emit(UiEvents.UiMode.FOCUSED)
render_result.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST

View file

@ -1,4 +1,4 @@
[gd_resource type="VisualShader" load_steps=16 format=3 uid="uid://dd1axtdlit6no"]
[gd_resource type="VisualShader" load_steps=17 format=3 uid="uid://dd1axtdlit6no"]
[sub_resource type="VisualShaderNodeTexture2DParameter" id="VisualShaderNodeTexture2DParameter_t1tvu"]
parameter_name = "Vignette"
@ -35,6 +35,9 @@ operator = 2
default_input_values = [0, Vector3(1, 1, 1), 1, Vector3(-1, -1, 0)]
operator = 1
[sub_resource type="VisualShaderNodeVec2Parameter" id="VisualShaderNodeVec2Parameter_ren8n"]
parameter_name = "UVScale"
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_24i63"]
input_name = "screen_uv"
@ -55,6 +58,7 @@ max = 5.0
code = "shader_type canvas_item;
render_mode blend_disabled;
uniform vec2 UVScale;
uniform float BlurAmount : hint_range(0, 5, 0.10000000149012);
uniform sampler2D ScreenTexture : filter_linear_mipmap, hint_screen_texture;
uniform sampler2D Vignette : filter_linear_mipmap, repeat_enable;
@ -67,10 +71,13 @@ void fragment() {
vec2 n_out4p0 = SCREEN_UV;
// Vector2Parameter:27
vec2 n_out27p0 = UVScale;
// UVFunc:21
vec2 n_in21p1 = vec2(0.90000, 0.90000);
vec2 n_in21p2 = vec2(0.50000, 0.50000);
vec2 n_out21p0 = (n_out4p0 - n_in21p2) * n_in21p1 + n_in21p2;
vec2 n_out21p0 = (n_out4p0 - n_in21p2) * n_out27p0 + n_in21p2;
// FloatParameter:9
@ -136,39 +143,41 @@ void fragment() {
}
"
graph_offset = Vector2(-281.758, 131.259)
graph_offset = Vector2(-708.833, 8.55267)
mode = 1
modes/blend = 5
flags/light_only = false
nodes/fragment/0/position = Vector2(680, 160)
nodes/fragment/4/node = SubResource("VisualShaderNodeInput_24i63")
nodes/fragment/4/position = Vector2(-480, -540)
nodes/fragment/4/position = Vector2(-760, -620)
nodes/fragment/7/node = SubResource("VisualShaderNodeTexture_le3j7")
nodes/fragment/7/position = Vector2(20, 40)
nodes/fragment/7/position = Vector2(20, -320)
nodes/fragment/8/node = SubResource("VisualShaderNodeTexture2DParameter_u0lfa")
nodes/fragment/8/position = Vector2(-480, -120)
nodes/fragment/9/node = SubResource("VisualShaderNodeFloatParameter_383fa")
nodes/fragment/9/position = Vector2(-420, -440)
nodes/fragment/10/node = SubResource("VisualShaderNodeTexture2DParameter_t1tvu")
nodes/fragment/10/position = Vector2(-980, 560)
nodes/fragment/10/position = Vector2(-1140, 740)
nodes/fragment/11/node = SubResource("VisualShaderNodeTexture_qsusy")
nodes/fragment/11/position = Vector2(-500, 440)
nodes/fragment/11/position = Vector2(-660, 620)
nodes/fragment/15/node = SubResource("VisualShaderNodeMultiplyAdd_e4whf")
nodes/fragment/15/position = Vector2(-840, 320)
nodes/fragment/15/position = Vector2(-1000, 500)
nodes/fragment/16/node = SubResource("VisualShaderNodeVec2Constant_4drcy")
nodes/fragment/16/position = Vector2(-1080, 400)
nodes/fragment/16/position = Vector2(-1240, 580)
nodes/fragment/18/node = SubResource("VisualShaderNodeUVPolarCoord_0o2bh")
nodes/fragment/18/position = Vector2(-1120, 200)
nodes/fragment/18/position = Vector2(-1280, 380)
nodes/fragment/20/node = SubResource("VisualShaderNodeColorParameter_juddb")
nodes/fragment/20/position = Vector2(-400, 860)
nodes/fragment/20/position = Vector2(-560, 1040)
nodes/fragment/21/node = SubResource("VisualShaderNodeUVFunc_1ddw1")
nodes/fragment/21/position = Vector2(-20, -500)
nodes/fragment/21/position = Vector2(-380, -640)
nodes/fragment/23/node = SubResource("VisualShaderNodeVectorOp_w3k0x")
nodes/fragment/23/position = Vector2(180, 420)
nodes/fragment/23/position = Vector2(20, 600)
nodes/fragment/24/node = SubResource("VisualShaderNodeVectorOp_0a06v")
nodes/fragment/24/position = Vector2(400, 180)
nodes/fragment/25/node = SubResource("VisualShaderNodeVectorOp_g3bno")
nodes/fragment/25/position = Vector2(0, 660)
nodes/fragment/25/position = Vector2(-160, 840)
nodes/fragment/26/node = SubResource("VisualShaderNodeVectorOp_4s8mp")
nodes/fragment/26/position = Vector2(-260, 600)
nodes/fragment/connections = PackedInt32Array(8, 0, 7, 2, 9, 0, 7, 1, 10, 0, 11, 2, 15, 0, 11, 0, 16, 0, 15, 2, 18, 0, 15, 0, 4, 0, 21, 0, 11, 0, 23, 0, 7, 0, 24, 0, 25, 0, 23, 1, 20, 0, 25, 1, 26, 0, 25, 0, 11, 0, 26, 1, 23, 0, 24, 1, 24, 0, 0, 0, 21, 0, 7, 0)
nodes/fragment/26/position = Vector2(-420, 780)
nodes/fragment/27/node = SubResource("VisualShaderNodeVec2Parameter_ren8n")
nodes/fragment/27/position = Vector2(-1060, -680)
nodes/fragment/connections = PackedInt32Array(8, 0, 7, 2, 9, 0, 7, 1, 10, 0, 11, 2, 15, 0, 11, 0, 16, 0, 15, 2, 18, 0, 15, 0, 4, 0, 21, 0, 11, 0, 23, 0, 7, 0, 24, 0, 25, 0, 23, 1, 20, 0, 25, 1, 26, 0, 25, 0, 11, 0, 26, 1, 23, 0, 24, 1, 24, 0, 0, 0, 21, 0, 7, 0, 27, 0, 21, 1)