summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-01-17 22:09:25 +0100
committerDaniel Weipert <git@mail.dweipert.de>2025-01-17 22:09:25 +0100
commitbd77c88efc9327805b6f6fd83fa0492ed59d0f9a (patch)
tree99ed473ec1c137b774bd5e2a0e2bca9e56daf691
parente8f03c4d6a94aa16b3587bdce525cf0cf7c6c6c3 (diff)
next commitHEADmain
-rw-r--r--client.gd11
-rw-r--r--constants.gd16
-rw-r--r--data_models/login_character_list.gd15
-rw-r--r--extractor/extractor_interface.gd4
-rw-r--r--extractor/grf.gd14
-rw-r--r--extractor/rsm_format.gd2
-rw-r--r--extractor/rsw_format.gd4
-rw-r--r--network/character_server.gd31
-rw-r--r--network/login_server.gd8
-rw-r--r--network/server.gd8
-rw-r--r--packets/character_server/character_server_login_success_character_list_packet.gd4
-rw-r--r--ui/login.gd34
-rw-r--r--ui/login.tscn28
-rw-r--r--ui/login/character_selection_item.tscn2
-rw-r--r--ui/login/character_server_button.tscn1
-rw-r--r--ui/login/character_server_button_style_box.tres11
-rw-r--r--ui/login/login_character_selection_list.tscn24
-rw-r--r--ui/theme.tres6
-rw-r--r--ui/theme_clear.tres79
-rw-r--r--ui/window.tscn32
20 files changed, 185 insertions, 149 deletions
diff --git a/client.gd b/client.gd
index 516ba4d..73f880c 100644
--- a/client.gd
+++ b/client.gd
@@ -30,16 +30,21 @@ func show_message_window(
if anchor == SIDE_TOP:
window.global_position.y -= window.size.y
- window.size.x = max(window.size.x, attached_to.size.x)
elif anchor == SIDE_BOTTOM:
window.global_position.y += attached_to.size.y
- window.size.x = max(window.size.x, attached_to.size.x)
elif anchor == SIDE_LEFT:
window.global_position.x -= window.size.x
- window.size.y = max(window.size.y, attached_to.size.y)
elif anchor == SIDE_RIGHT:
window.global_position.x += attached_to.size.x
+
+ if anchor == SIDE_TOP or anchor == SIDE_BOTTOM:
+ window.size.x = max(window.size.x, attached_to.size.x)
+ if window.size.x > attached_to.size.x:
+ window.global_position.x -= (window.size.x - attached_to.size.x) * 0.5
+ elif anchor == SIDE_LEFT or anchor == SIDE_RIGHT:
window.size.y = max(window.size.y, attached_to.size.y)
+ if window.size.y > attached_to.size.y:
+ window.global_position.y -= (window.size.y - attached_to.size.y) * 0.5
# else add window in center
else:
diff --git a/constants.gd b/constants.gd
index 322c85a..e495322 100644
--- a/constants.gd
+++ b/constants.gd
@@ -79,21 +79,26 @@ enum Direction {
static var PacketDB = {
- #LoginServerLoginPacket.HEADER: LoginServerLoginPacket,
+ LoginServerLoginPacket.HEADER: LoginServerLoginPacket,
+ LoginServerKeepAlivePacket.HEADER: LoginServerKeepAlivePacket,
+ CharacterServerLoginPacket.HEADER: CharacterServerLoginPacket,
+ CharacterServerKeepAlivePacket.HEADER: CharacterServerKeepAlivePacket,
+ RequestCharacterListPacket.HEADER: RequestCharacterListPacket,
+ SelectCharacterPacket.HEADER: SelectCharacterPacket,
+ MapServerLoginPacket.HEADER: MapServerLoginPacket,
+ MapLoadedPacket.HEADER: MapLoadedPacket,
+ SendChatMessagePacket.HEADER: SendChatMessagePacket,
+
LoginServerLoginSuccessPacket.HEADER: LoginServerLoginSuccessPacket,
- #CharacterServerLoginPacket.HEADER: CharacterServerLoginPacket,
CharacterServerLoginSuccessPacket.HEADER: CharacterServerLoginSuccessPacket,
CharacterServerLoginSuccessCharacterListPacket.HEADER: CharacterServerLoginSuccessCharacterListPacket,
CharacterListSizePacket.HEADER: CharacterListSizePacket,
LoginFailedPacket.HEADER: LoginFailedPacket,
BlockCharacterPacket.HEADER: BlockCharacterPacket,
PinCodeStatePacket.HEADER: PinCodeStatePacket,
- #RequestCharacterListPacket.HEADER: RequestCharacterListPacket,
RequestCharacterListSuccessPacket.HEADER: RequestCharacterListSuccessPacket,
- #SelectCharacterPacket.HEADER: SelectCharacterPacket,
CharacterSelectionSuccessPacket.HEADER: CharacterSelectionSuccessPacket,
CharacterSelectionFailedPacket.HEADER: CharacterSelectionFailedPacket,
- #MapServerLoginPacket.HEADER: MapServerLoginPacket,
MapServerLoginSuccessPacket.HEADER: MapServerLoginSuccessPacket,
FriendListPacket.HEADER: FriendListPacket,
ServerMessagePacket.HEADER: ServerMessagePacket,
@@ -106,7 +111,6 @@ static var PacketDB = {
AchievementUpdatePacket.HEADER: AchievementUpdatePacket,
AchievementListPacket.HEADER: AchievementListPacket,
UpdateCriticalWeightPacket.HEADER: UpdateCriticalWeightPacket,
- #MapLoadedPacket.HEADER: MapLoadedPacket,
SpriteChangePacket.HEADER: SpriteChangePacket,
InventoryStartPacket.HEADER: InventoryStartPacket,
RegularItemListPacket.HEADER: RegularItemListPacket,
diff --git a/data_models/login_character_list.gd b/data_models/login_character_list.gd
index e638877..8a8d7d5 100644
--- a/data_models/login_character_list.gd
+++ b/data_models/login_character_list.gd
@@ -7,7 +7,7 @@ var slot_count: int
var character_information: Array[CharacterInformation]
-static func from_character_list_packet(packet: CharacterServerLoginSuccessCharacterListPacket) -> LoginCharacterList:
+static func from_character_list_login_packet(packet: CharacterServerLoginSuccessCharacterListPacket) -> LoginCharacterList:
var resource := LoginCharacterList.new()
resource.slot_count = packet.maximum_slot_count
@@ -16,6 +16,19 @@ static func from_character_list_packet(packet: CharacterServerLoginSuccessCharac
return resource
+static func from_character_list_request_response(response: Array) -> LoginCharacterList:
+ var resource := LoginCharacterList.new()
+
+ # TODO
+ var size: CharacterListSizePacket = response[0]
+ var list: RequestCharacterListSuccessPacket = response[1]
+
+ resource.slot_count = size.character_slot_count
+ resource.character_information = list.character_information
+
+ return resource
+
+
func get_info_for_slot(slot_idx: int):
for info in character_information:
if info.character_number == slot_idx:
diff --git a/extractor/extractor_interface.gd b/extractor/extractor_interface.gd
index e987ed3..3afedfd 100644
--- a/extractor/extractor_interface.gd
+++ b/extractor/extractor_interface.gd
@@ -2,8 +2,8 @@ extends Control
func _ready() -> void:
- var grf = GRF.open("res://client_data/data.grf")
- grf.extract()#"user://client_data")
+ #var grf = GRF.open("res://client_data/data.grf")
+ #grf.extract()#"user://client_data")
#grf.convert()#"user://client_data")
#Sprite.from_bytes(FileAccess.get_file_as_bytes("res://client_data/data/sprite/cursors.spr"))
diff --git a/extractor/grf.gd b/extractor/grf.gd
index 84918de..fd0e6f7 100644
--- a/extractor/grf.gd
+++ b/extractor/grf.gd
@@ -203,13 +203,6 @@ func extract(destination: String = "user://client_data"):
base_directory.make_dir_recursive(file_path.get_base_dir())
var file = FileAccess.open("%s/%s" % [destination, file_path], FileAccess.WRITE_READ)
-
- #if file_path.ends_with(".bmp"):
- #var img := Image.create_empty(1, 1, false, Image.FORMAT_RGBA8)
- #img.load_bmp_from_buffer(file_entry.get_contents(file_access))
- #img.save_png(file.get_path())
- #return
- #else:
file.store_buffer(file_entry.get_contents(file_access))
extracted_file.emit(idx)
@@ -237,8 +230,13 @@ func convert(destination: String = "res://client_data"):
if not FileAccess.file_exists("%s/%s" % [destination, file_path]):
continue
+ # load existing bmp files, so language specific overwrites are kept
+
+ var texture: CompressedTexture2D = load("%s/%s" % [destination, file_path])
+ var texture_image := texture.get_image()
+ texture_image.decompress()
var image := BMPTexture.convert_image(
- Image.load_from_file("%s/%s" % [destination, file_path]),
+ texture_image,
[Color.MAGENTA]
)
image.save_png("%s/%s" % [destination, file_path.replace(".bmp", ".png")])
diff --git a/extractor/rsm_format.gd b/extractor/rsm_format.gd
index 7eb41f0..c01826e 100644
--- a/extractor/rsm_format.gd
+++ b/extractor/rsm_format.gd
@@ -362,7 +362,7 @@ class ModelNode:
node.translate(translation_2)
if rotation_axis != Vector3.ZERO:
- node.rotate_object_local(rotation_axis, rotation_angle)
+ node.rotation = rotation_axis * rotation_angle
node.scale = scale
diff --git a/extractor/rsw_format.gd b/extractor/rsw_format.gd
index 1066168..85d873c 100644
--- a/extractor/rsw_format.gd
+++ b/extractor/rsw_format.gd
@@ -127,9 +127,7 @@ func convert(name: String, data_path: String) -> Node3D:
var model_root := Node3D.new()
model_root.name = resource.name
model_root.position = resource.get_position() * Vector3(-1, 1, 1)
- model_root.rotate_x(deg_to_rad(resource.get_rotation().x))
- model_root.rotate_y(deg_to_rad(resource.get_rotation().y))
- model_root.rotate_z(deg_to_rad(resource.get_rotation().z))
+ model_root.rotation_degrees = resource.get_rotation()
model_root.scale = resource.get_scale()
node.add_child(model_root)
diff --git a/network/character_server.gd b/network/character_server.gd
index 4d3433b..60389e4 100644
--- a/network/character_server.gd
+++ b/network/character_server.gd
@@ -13,36 +13,44 @@ func _init(host: String, port: int = 6121) -> void:
super._init(host, port)
-func login(account_id: int, login_id1: int, login_id2: int, gender: Constants.Gender):
+func login(account_id: int, login_id1: int, login_id2: int, gender: Constants.Gender) -> Dictionary:
var character_server_login_packet = CharacterServerLoginPacket.new()
character_server_login_packet.account_id = account_id
character_server_login_packet.login_id1 = login_id1
character_server_login_packet.login_id2 = login_id2
character_server_login_packet.gender = gender
- peer.put_data(character_server_login_packet.to_bytes())
+ send(character_server_login_packet)
peer.get_data(4) # in-between packet
- var login_success_packet = await received_packet
- if login_success_packet is CharacterServerLoginSuccessPacket:
- print(inst_to_dict(login_success_packet))
- logged_in.emit(login_success_packet)
+ var login_response_packet = await received_packet
+ if login_response_packet is CharacterServerLoginSuccessPacket:
+ logged_in.emit(login_response_packet)
var character_list_packet = await received_packet
if character_list_packet is CharacterServerLoginSuccessCharacterListPacket:
- print(inst_to_dict(character_list_packet))
- print(inst_to_dict(character_list_packet.character_information[0]))
logged_in_character_list.emit(character_list_packet)
+
+ var character_list_size_packet = await received_packet
+ var block_character_packet = await received_packet
+ var pin_code_state_packet = await received_packet
+
+ return {
+ "login": login_response_packet,
+ "character_list": character_list_packet,
+ "character_list_size": character_list_size_packet,
+ "block_character": block_character_packet,
+ "pin_code_state": pin_code_state_packet,
+ }
func request_character_list():
var request_character_list_packet = RequestCharacterListPacket.new()
- peer.put_data(request_character_list_packet.to_bytes())
+ send(request_character_list_packet)
var packet = await received_packet
if packet is RequestCharacterListSuccessPacket:
- print(inst_to_dict(packet), inst_to_dict(packet.character_information[0]))
requested_character_list.emit(packet)
@@ -50,11 +58,10 @@ func select_character(slot: int):
var select_character_packet = SelectCharacterPacket.new()
select_character_packet.selected_slot = slot
- peer.put_data(select_character_packet.to_bytes())
+ send(select_character_packet)
var packet = await received_packet
if packet is CharacterSelectionSuccessPacket:
- print(inst_to_dict(packet))
selected_character.emit(packet)
diff --git a/network/login_server.gd b/network/login_server.gd
index 715c73c..902c477 100644
--- a/network/login_server.gd
+++ b/network/login_server.gd
@@ -3,6 +3,7 @@ extends Server
signal logged_in(packet: LoginServerLoginSuccessPacket)
+signal login_failed(packet: LoginFailedPacket)
@warning_ignore("shadowed_variable_base_class")
@@ -15,12 +16,15 @@ func login(username: String, password: String):
login_server_login_packet.username = username
login_server_login_packet.password = password
- peer.put_data(login_server_login_packet.to_bytes())
+ send(login_server_login_packet)
var packet = await received_packet
if packet is LoginServerLoginSuccessPacket:
- print(inst_to_dict(packet))
logged_in.emit(packet)
+ elif packet is LoginFailedPacket:
+ login_failed.emit(packet)
+
+ return packet
func get_keep_alive_timer() -> Timer:
diff --git a/network/server.gd b/network/server.gd
index efef6cb..56e9861 100644
--- a/network/server.gd
+++ b/network/server.gd
@@ -71,9 +71,13 @@ func listen() -> void:
func send(packet: Packet) -> Error:
- var display_header = packet.get_header()
+ var numerical_header := packet.get_header().decode_u16(0)
+ var display_header := packet.get_header()
display_header.reverse()
- print("Sent packet with header ", display_header.hex_encode())
+ print("Sent packet %s with header %s" % [
+ Constants.PacketDB[numerical_header].get_global_name(),
+ display_header.hex_encode(),
+ ])
return send_raw(packet.to_bytes())
diff --git a/packets/character_server/character_server_login_success_character_list_packet.gd b/packets/character_server/character_server_login_success_character_list_packet.gd
index e3a649b..8a5874c 100644
--- a/packets/character_server/character_server_login_success_character_list_packet.gd
+++ b/packets/character_server/character_server_login_success_character_list_packet.gd
@@ -34,8 +34,8 @@ static func from_bytes(bytes: PackedByteArray):
packet.packet_length = bytes.decode_u16(2)
packet.maximum_slot_count = bytes.decode_u8(4)
- packet.maximum_slot_count = bytes.decode_u8(5)
- packet.maximum_slot_count = bytes.decode_u8(6)
+ packet.available_slot_count = bytes.decode_u8(5)
+ packet.vip_slot_count = bytes.decode_u8(6)
packet.unknown = bytes.slice(7, 7 + 20)
packet.character_information = CharacterInformation.array_from_bytes(bytes.slice(27))
diff --git a/ui/login.gd b/ui/login.gd
index ab4b891..70cc52e 100644
--- a/ui/login.gd
+++ b/ui/login.gd
@@ -35,9 +35,20 @@ func _on_login_pressed() -> void:
Client.show_message_window("Couldn't connect to server at 127.0.0.1", "Connection Error", %Login/Window, SIDE_BOTTOM)
return
- Network.login_server.login(username.text, password.text)
+ var response = await Network.login_server.login(username.text, password.text)
+ if response is LoginFailedPacket:
+ var message := ""
+ if response.reason == Constants.LoginFailedReason.ServerClosed:
+ message = "Server closed connection"
+ elif response.reason == Constants.LoginFailedReason.AlreadyLoggedIn:
+ message = "Already logged in"
+ elif response.reason == Constants.LoginFailedReason.AlreadyOnline:
+ message = "Already online"
+
+ Client.show_message_window(message, "Login Error", %Login/Window, SIDE_BOTTOM)
+ return
- account_information = await Network.login_server.logged_in
+ account_information = response
character_server_information = account_information.character_server_information
Client.account.id = account_information.account_id
@@ -50,7 +61,7 @@ func _on_login_pressed() -> void:
for idx in character_server_information.size():
var info: CharacterServerInformation = character_server_information[idx]
var select_character_server: Button = preload("res://ui/login/character_server_button.tscn").instantiate()
- select_character_server.text = info.server_name
+ select_character_server.text = "%s (%d)" % [info.server_name, info.user_count]
select_character_server.pressed.connect(_on_character_server_login_pressed.bind(info, idx))
%CharacterServerList.add_child(select_character_server)
@@ -78,24 +89,27 @@ func _on_character_server_login_pressed(character_server_info: CharacterServerIn
)
Network.character_server.establish_connection()
- Network.character_server.login(
+ var response := await Network.character_server.login(
account_information.account_id,
account_information.login_id1,
account_information.login_id2,
account_information.gender
)
- var response = await Network.character_server.received_packet
- if response is CharacterSelectionFailedPacket:
- print("character server login failed")
- %ChatWindow.add_message("character server login failed", ChatMessageFormat.new())
+ if response.login is CharacterSelectionFailedPacket:
+ Client.show_message_window(
+ "Connection rejected from server \"%s\" at %s" % [
+ character_server_info.server_name, character_server_info.get_server_ip()
+ ],
+ "Connection Error", %CharacterServer/Window, SIDE_BOTTOM
+ )
return
get_tree().root.add_child(Network.character_server.get_keep_alive_timer())
- var character_list: CharacterServerLoginSuccessCharacterListPacket = await Network.character_server.logged_in_character_list
+ var character_list: CharacterServerLoginSuccessCharacterListPacket = response.character_list
- var login_character_list := LoginCharacterList.from_character_list_packet(character_list)
+ var login_character_list := LoginCharacterList.from_character_list_login_packet(character_list)
%CharacterSelectionList.login_character_list = login_character_list
%CharacterSelectionList.selected.connect(func(slot_idx: int):
current_character_slot_idx = slot_idx
diff --git a/ui/login.tscn b/ui/login.tscn
index 70b3a06..e889508 100644
--- a/ui/login.tscn
+++ b/ui/login.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=19 format=3 uid="uid://dser74lcd3a4g"]
+[gd_scene load_steps=24 format=3 uid="uid://dser74lcd3a4g"]
[ext_resource type="Script" uid="uid://dqswsdaamfhbq" path="res://ui/login.gd" id="1_1m5cv"]
[ext_resource type="Texture2D" uid="uid://cxd6dnc7s17vg" path="res://client_data/skin/login_background.jpg" id="2_elmti"]
@@ -9,7 +9,11 @@
[ext_resource type="Texture2D" uid="uid://bern5mhol3l8y" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/btn_connect.bmp" id="4_wpax4"]
[ext_resource type="Texture2D" uid="uid://c31u8nlyugk3p" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/btn_connect_b.bmp" id="5_7ogdv"]
[ext_resource type="Texture2D" uid="uid://c5kctdb8b2msx" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/btn_connect_a.bmp" id="6_l3yss"]
+[ext_resource type="Texture2D" uid="uid://l3c7ssoc4lxq" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/btn_connect.png" id="7_pfdi0"]
+[ext_resource type="Texture2D" uid="uid://p7bxfof7gd0t" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/btn_connect_b.png" id="8_38pxr"]
+[ext_resource type="Texture2D" uid="uid://ba8j1t53lqxr0" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/btn_connect_a.png" id="9_hqeko"]
[ext_resource type="Theme" uid="uid://c6y6r8kcnbb10" path="res://ui/theme_clear.tres" id="9_toei2"]
+[ext_resource type="PackedScene" uid="uid://f2urhroq21t0" path="res://ui/login/character_server_button.tscn" id="10_38pxr"]
[ext_resource type="Texture2D" uid="uid://byn26biifjkng" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/btn_cancel.bmp" id="11_tihdy"]
[ext_resource type="Texture2D" uid="uid://wvnt34j5mkvy" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/btn_cancel_b.bmp" id="12_mma3j"]
[ext_resource type="Texture2D" uid="uid://pv886kwtlrq0" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/btn_cancel_a.bmp" id="13_0vsp3"]
@@ -19,6 +23,9 @@
[ext_resource type="PackedScene" uid="uid://bxbprntny8duj" path="res://ui/login/login_character_selection_list.tscn" id="16_tihdy"]
[ext_resource type="PackedScene" uid="uid://swtqlba1wi3o" path="res://ui/window.tscn" id="17_mma3j"]
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pfdi0"]
+bg_color = Color(0.977834, 0.977834, 0.977834, 1)
+
[node name="Login" type="Control"]
layout_mode = 3
anchors_preset = 15
@@ -112,9 +119,9 @@ secret_character = "*"
layout_mode = 2
size_flags_horizontal = 8
theme = ExtResource("3_7ogdv")
-texture_normal = ExtResource("4_wpax4")
-texture_pressed = ExtResource("5_7ogdv")
-texture_hover = ExtResource("6_l3yss")
+texture_normal = ExtResource("7_pfdi0")
+texture_pressed = ExtResource("8_38pxr")
+texture_hover = ExtResource("9_hqeko")
[node name="CharacterServer" type="CenterContainer" parent="."]
unique_name_in_owner = true
@@ -139,16 +146,23 @@ text = "Character Server"
[node name="MarginContainer" type="MarginContainer" parent="CharacterServer/Window/VBoxContainer/Body" index="0"]
layout_mode = 2
-theme_override_constants/margin_left = 4
+theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 4
-theme_override_constants/margin_right = 4
+theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 4
-[node name="CharacterServerList" type="VBoxContainer" parent="CharacterServer/Window/VBoxContainer/Body/MarginContainer"]
+[node name="PanelContainer" type="PanelContainer" parent="CharacterServer/Window/VBoxContainer/Body/MarginContainer"]
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_pfdi0")
+
+[node name="CharacterServerList" type="VBoxContainer" parent="CharacterServer/Window/VBoxContainer/Body/MarginContainer/PanelContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
+[node name="CharacterServerButton" parent="CharacterServer/Window/VBoxContainer/Body/MarginContainer/PanelContainer/CharacterServerList" instance=ExtResource("10_38pxr")]
+layout_mode = 2
+
[node name="HBoxContainer" type="HBoxContainer" parent="CharacterServer/Window/VBoxContainer/ButtonBar/ButtonBarElements" index="0"]
layout_mode = 2
diff --git a/ui/login/character_selection_item.tscn b/ui/login/character_selection_item.tscn
index 4b8a249..de28392 100644
--- a/ui/login/character_selection_item.tscn
+++ b/ui/login/character_selection_item.tscn
@@ -4,7 +4,7 @@
[ext_resource type="Texture2D" uid="uid://danymuvfjf4o1" path="res://client_data/data/sprite/Àΰ£Á·/¸Ó¸®Åë/³²/16_³²/000.png" id="2_aqbfs"]
[ext_resource type="Texture2D" uid="uid://cwqgdd00sf7pu" path="res://client_data/data/sprite/Àΰ£Á·/¸öÅë/³²/Ãʺ¸ÀÚ_³²/000.png" id="3_xv3pn"]
[ext_resource type="PackedScene" uid="uid://knmmuhon34rh" path="res://ui/bmp_texture_rect.tscn" id="4_vhrt2"]
-[ext_resource type="Texture2D" uid="uid://g2cx2uuvffe" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/box_select.bmp" id="5_vhrt2"]
+[ext_resource type="Texture2D" uid="uid://1s8lrydoctbv" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/box_select.png" id="5_vhrt2"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u21ok"]
bg_color = Color(0, 0, 0, 0.0980392)
diff --git a/ui/login/character_server_button.tscn b/ui/login/character_server_button.tscn
index 2244f3c..439ddad 100644
--- a/ui/login/character_server_button.tscn
+++ b/ui/login/character_server_button.tscn
@@ -9,3 +9,4 @@ mouse_default_cursor_shape = 2
theme = ExtResource("1_antln")
theme_type_variation = &"CharacterServerButton"
text = "Name"
+alignment = 0
diff --git a/ui/login/character_server_button_style_box.tres b/ui/login/character_server_button_style_box.tres
index 92ed6f6..1da7be2 100644
--- a/ui/login/character_server_button_style_box.tres
+++ b/ui/login/character_server_button_style_box.tres
@@ -1,16 +1,7 @@
-[gd_resource type="StyleBoxTexture" load_steps=3 format=3 uid="uid://ct2l6hbb04p5o"]
-
-[sub_resource type="Gradient" id="Gradient_re72a"]
-offsets = PackedFloat32Array(0, 0.4, 0.6, 1)
-colors = PackedColorArray(1, 1, 1, 0, 0.792157, 0.87451, 0.984314, 0.392157, 0.792157, 0.87451, 0.984314, 0.392157, 1, 1, 1, 0)
-
-[sub_resource type="GradientTexture2D" id="GradientTexture2D_re72a"]
-gradient = SubResource("Gradient_re72a")
-repeat = 2
+[gd_resource type="StyleBoxTexture" format=3 uid="uid://ct2l6hbb04p5o"]
[resource]
content_margin_left = 2.0
content_margin_top = 3.0
content_margin_right = 2.0
content_margin_bottom = 2.0
-texture = SubResource("GradientTexture2D_re72a")
diff --git a/ui/login/login_character_selection_list.tscn b/ui/login/login_character_selection_list.tscn
index 391ed63..02a9dc2 100644
--- a/ui/login/login_character_selection_list.tscn
+++ b/ui/login/login_character_selection_list.tscn
@@ -4,12 +4,12 @@
[ext_resource type="Script" uid="uid://dmch4gi1khn2r" path="res://ui/login/login_character_selection_list.gd" id="1_togb6"]
[ext_resource type="PackedScene" uid="uid://rrd131rq74n5" path="res://ui/login/character_selection_item.tscn" id="2_k142l"]
[ext_resource type="PackedScene" uid="uid://cjcm2mai50thr" path="res://ui/bmp_texture_button.tscn" id="2_s7n6r"]
-[ext_resource type="Texture2D" uid="uid://s5uc6sa6y88f" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_l_out.bmp" id="3_c5a25"]
-[ext_resource type="Texture2D" uid="uid://b8n4w8a4yumax" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_l_press.bmp" id="4_ntkas"]
-[ext_resource type="Texture2D" uid="uid://e3k5tdqv2jft" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_l_over.bmp" id="5_606nc"]
-[ext_resource type="Texture2D" uid="uid://bhap22qcv1mga" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_r_out.bmp" id="7_c8nb3"]
-[ext_resource type="Texture2D" uid="uid://dvf7yx7b3dj4m" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_r_press.bmp" id="8_p8h60"]
-[ext_resource type="Texture2D" uid="uid://4ngcs00s5cnn" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_r_over.bmp" id="9_7p86f"]
+[ext_resource type="Texture2D" uid="uid://cey66pn46da80" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_l_out.png" id="3_wnv6e"]
+[ext_resource type="Texture2D" uid="uid://bbs77ppnvcm23" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_l_press.png" id="4_rdaw5"]
+[ext_resource type="Texture2D" uid="uid://c4supu7w8gabw" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_l_over.png" id="5_1vggc"]
+[ext_resource type="Texture2D" uid="uid://dqweltumn8n7t" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_r_out.png" id="7_wnv6e"]
+[ext_resource type="Texture2D" uid="uid://bsdygckmj667w" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_r_press.png" id="8_rdaw5"]
+[ext_resource type="Texture2D" uid="uid://dqdmks4uak1go" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/select_character/chr_arrow_r_over.png" id="9_1vggc"]
[node name="LoginCharacterSelectionList" type="VBoxContainer"]
theme_override_constants/separation = 32
@@ -30,9 +30,9 @@ alignment = 1
unique_name_in_owner = true
texture_filter = 0
layout_mode = 2
-texture_normal = ExtResource("3_c5a25")
-texture_pressed = ExtResource("4_ntkas")
-texture_hover = ExtResource("5_606nc")
+texture_normal = ExtResource("3_wnv6e")
+texture_pressed = ExtResource("4_rdaw5")
+texture_hover = ExtResource("5_1vggc")
stretch_mode = 5
[node name="CharacterList" type="HBoxContainer" parent="MarginContainer/HBoxContainer"]
@@ -50,9 +50,9 @@ layout_mode = 2
unique_name_in_owner = true
texture_filter = 0
layout_mode = 2
-texture_normal = ExtResource("7_c8nb3")
-texture_pressed = ExtResource("8_p8h60")
-texture_hover = ExtResource("9_7p86f")
+texture_normal = ExtResource("7_wnv6e")
+texture_pressed = ExtResource("8_rdaw5")
+texture_hover = ExtResource("9_1vggc")
stretch_mode = 5
[node name="CharacterSelectionStatus" parent="." instance=ExtResource("1_5anyi")]
diff --git a/ui/theme.tres b/ui/theme.tres
index 05fc27a..69ad428 100644
--- a/ui/theme.tres
+++ b/ui/theme.tres
@@ -1,9 +1,9 @@
[gd_resource type="Theme" load_steps=9 format=3 uid="uid://c5sm3yvuakj3b"]
-[ext_resource type="Texture2D" uid="uid://dgvtc6rkepkp0" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/bt_otp_over.bmp" id="1_iqtc0"]
+[ext_resource type="Texture2D" uid="uid://34bqfgx41tf0" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/bt_otp_over.png" id="1_iqtc0"]
[ext_resource type="Texture2D" uid="uid://cehi7txcq4p2q" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/name-edit.bmp" id="1_rqugq"]
-[ext_resource type="Texture2D" uid="uid://cgc1sfnq4pcg2" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/bt_otp_normal.bmp" id="2_7any1"]
-[ext_resource type="Texture2D" uid="uid://jk8krs3ckx25" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/bt_otp_press.bmp" id="3_3fgq6"]
+[ext_resource type="Texture2D" uid="uid://b63yrv7hceon4" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/bt_otp_normal.png" id="2_7any1"]
+[ext_resource type="Texture2D" uid="uid://yew2ev1s10pk" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/login_interface/bt_otp_press.png" id="3_3fgq6"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_y5ki2"]
texture = ExtResource("1_iqtc0")
diff --git a/ui/theme_clear.tres b/ui/theme_clear.tres
index 5805499..f5028a8 100644
--- a/ui/theme_clear.tres
+++ b/ui/theme_clear.tres
@@ -1,8 +1,7 @@
-[gd_resource type="Theme" load_steps=17 format=3 uid="uid://c6y6r8kcnbb10"]
+[gd_resource type="Theme" load_steps=11 format=3 uid="uid://c6y6r8kcnbb10"]
[ext_resource type="FontFile" uid="uid://l34toovp0ncy" path="res://client_data/System/font/SCDream4.otf" id="1_qhl1o"]
[ext_resource type="FontFile" uid="uid://dqqmqch0dgxxc" path="res://client_data/System/font/SCDream6.otf" id="2_f5aki"]
-[ext_resource type="StyleBox" uid="uid://ct2l6hbb04p5o" path="res://ui/login/character_server_button_style_box.tres" id="2_re72a"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_re72a"]
content_margin_left = 2.0
@@ -18,49 +17,33 @@ content_margin_right = 4.0
content_margin_bottom = 2.0
bg_color = Color(0.937255, 0.937255, 0.968627, 1)
-[sub_resource type="Gradient" id="Gradient_oh4jn"]
-offsets = PackedFloat32Array(0, 0.1, 0.9, 1)
-colors = PackedColorArray(1, 1, 1, 0, 0.792157, 0.87451, 0.984314, 0.784314, 0.792157, 0.87451, 0.984314, 0.784314, 1, 1, 1, 0)
-
-[sub_resource type="GradientTexture2D" id="GradientTexture2D_h4yp8"]
-gradient = SubResource("Gradient_oh4jn")
-fill_to = Vector2(1, 0.000957031)
-repeat = 2
-
-[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_je15x"]
-content_margin_left = 2.0
-content_margin_top = 3.0
-content_margin_right = 2.0
-content_margin_bottom = 2.0
-texture = SubResource("GradientTexture2D_h4yp8")
-
-[sub_resource type="Gradient" id="Gradient_re72a"]
-offsets = PackedFloat32Array(0, 0.3, 0.7, 1)
-colors = PackedColorArray(1, 1, 1, 0, 0.792157, 0.87451, 0.984314, 0.784314, 0.792157, 0.87451, 0.984314, 0.784314, 1, 1, 1, 0)
-
-[sub_resource type="GradientTexture2D" id="GradientTexture2D_oh4jn"]
-gradient = SubResource("Gradient_re72a")
-repeat = 2
-
-[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_h4yp8"]
-content_margin_left = 2.0
-content_margin_top = 3.0
-content_margin_right = 2.0
-content_margin_bottom = 2.0
-texture = SubResource("GradientTexture2D_oh4jn")
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_s68x7"]
+content_margin_left = 3.0
+content_margin_top = 2.0
+content_margin_right = 3.0
+content_margin_bottom = 0.0
+bg_color = Color(0.890196, 0.933333, 0.992157, 1)
-[sub_resource type="Gradient" id="Gradient_h4yp8"]
-colors = PackedColorArray(0.792157, 0.87451, 0.984314, 1, 0.792157, 0.87451, 0.984314, 1)
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_je15x"]
+content_margin_left = 3.0
+content_margin_top = 2.0
+content_margin_right = 3.0
+content_margin_bottom = 0.0
+bg_color = Color(0.891936, 0.934628, 0.991744, 1)
-[sub_resource type="GradientTexture2D" id="GradientTexture2D_je15x"]
-gradient = SubResource("Gradient_h4yp8")
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h4yp8"]
+content_margin_left = 3.0
+content_margin_top = 2.0
+content_margin_right = 3.0
+content_margin_bottom = 0.0
+bg_color = Color(0.792157, 0.87451, 0.984314, 1)
-[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_vgwil"]
-content_margin_left = 2.0
-content_margin_top = 3.0
-content_margin_right = 2.0
-content_margin_bottom = 2.0
-texture = SubResource("GradientTexture2D_je15x")
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vgwil"]
+content_margin_left = 3.0
+content_margin_top = 2.0
+content_margin_right = 3.0
+content_margin_bottom = 0.0
+bg_color = Color(0.620091, 0.770828, 0.97069, 1)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_f5aki"]
@@ -78,6 +61,8 @@ border_color = Color(0.752941, 0.752941, 0.752941, 1)
[resource]
BoxContainer/constants/separation = 0
+Button/font_sizes/font_size = 12
+Button/fonts/font = ExtResource("1_qhl1o")
CharacterSelectionStatusLabel/base_type = &"Label"
CharacterSelectionStatusLabel/colors/font_color = Color(0.129412, 0.223529, 0.388235, 1)
CharacterSelectionStatusLabel/fonts/font = ExtResource("2_f5aki")
@@ -89,12 +74,10 @@ CharacterServerButton/colors/font_color = Color(0.133333, 0.133333, 0.133333, 1)
CharacterServerButton/colors/font_focus_color = Color(0.133333, 0.133333, 0.133333, 1)
CharacterServerButton/colors/font_hover_color = Color(0.133333, 0.133333, 0.133333, 1)
CharacterServerButton/colors/font_pressed_color = Color(0.133333, 0.133333, 0.133333, 1)
-CharacterServerButton/font_sizes/font_size = 12
-CharacterServerButton/fonts/font = ExtResource("1_qhl1o")
-CharacterServerButton/styles/focus = SubResource("StyleBoxTexture_je15x")
-CharacterServerButton/styles/hover = SubResource("StyleBoxTexture_h4yp8")
-CharacterServerButton/styles/normal = ExtResource("2_re72a")
-CharacterServerButton/styles/pressed = SubResource("StyleBoxTexture_vgwil")
+CharacterServerButton/styles/focus = SubResource("StyleBoxFlat_s68x7")
+CharacterServerButton/styles/hover = SubResource("StyleBoxFlat_je15x")
+CharacterServerButton/styles/normal = SubResource("StyleBoxFlat_h4yp8")
+CharacterServerButton/styles/pressed = SubResource("StyleBoxFlat_vgwil")
Label/colors/font_color = Color(0.133333, 0.133333, 0.133333, 1)
Label/colors/font_shadow_color = Color(1, 1, 1, 0.392157)
Label/font_sizes/font_size = 12
diff --git a/ui/window.tscn b/ui/window.tscn
index c049477..d27d7c5 100644
--- a/ui/window.tscn
+++ b/ui/window.tscn
@@ -2,17 +2,17 @@
[ext_resource type="PackedScene" uid="uid://knmmuhon34rh" path="res://ui/bmp_texture_rect.tscn" id="1_4qpm3"]
[ext_resource type="Script" uid="uid://qdg2tjk8xmjt" path="res://ui/window.gd" id="1_hfgic"]
-[ext_resource type="Texture2D" uid="uid://ctcjqer7qdt0o" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/titlebar_left.bmp" id="2_wlfds"]
+[ext_resource type="Texture2D" uid="uid://22px3uxdg48t" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/titlebar_left.png" id="3_74c65"]
[ext_resource type="Texture2D" uid="uid://dc2f7tx5xsico" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/titlebar_mid.bmp" id="3_mngfx"]
-[ext_resource type="Texture2D" uid="uid://bpwioq1j2pqgp" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/titlebar_right.bmp" id="4_fufdc"]
-[ext_resource type="Texture2D" uid="uid://to3tb2oxenq" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/btnbar_left1.bmp" id="5_fufdc"]
-[ext_resource type="Texture2D" uid="uid://dqq3mtjcrwqnp" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/sys_base_off.bmp" id="5_mnaxm"]
+[ext_resource type="Texture2D" uid="uid://dkqx0rjvi6aba" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/titlebar_right.png" id="5_qkejn"]
[ext_resource type="Texture2D" uid="uid://clqwl83uoxeue" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/btnbar_mid1.bmp" id="6_mnaxm"]
-[ext_resource type="Texture2D" uid="uid://biapuuwa0wbea" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/btnbar_right1.bmp" id="7_hfgic"]
+[ext_resource type="Texture2D" uid="uid://dmuuq7siyfv4r" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/sys_base_off.png" id="6_uftm1"]
[ext_resource type="PackedScene" uid="uid://cjcm2mai50thr" path="res://ui/bmp_texture_button.tscn" id="7_m42e5"]
-[ext_resource type="Texture2D" uid="uid://jwnjlxw3yx4c" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/sys_close_off.bmp" id="8_74c65"]
-[ext_resource type="Texture2D" uid="uid://bedetsimppv5a" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/sys_close_on.bmp" id="9_qkejn"]
-[ext_resource type="Texture2D" uid="uid://drtdusewjtkgv" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/btn_comparison_resize.bmp" id="13_74c65"]
+[ext_resource type="Texture2D" uid="uid://dtaegqi7vx4ia" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/big_sys_close_off.png" id="8_vjbfl"]
+[ext_resource type="Texture2D" uid="uid://jwguf7fj0iyx" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/big_sys_close_on.png" id="9_kh8ey"]
+[ext_resource type="Texture2D" uid="uid://dif01o7ri7qop" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/btnbar_left1.png" id="10_ug6hj"]
+[ext_resource type="Texture2D" uid="uid://bp60ikxqixf6q" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/btnbar_right1.png" id="12_xgidv"]
+[ext_resource type="Texture2D" uid="uid://ch1t3k18kvhtk" path="res://client_data/data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/basic_interface/btn_comparison_resize.png" id="13_sy0l2"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fufdc"]
bg_color = Color(1, 1, 1, 1)
@@ -40,7 +40,7 @@ theme_override_constants/separation = 0
[node name="Left" parent="VBoxContainer/TitleBar/TitleBarBackground" instance=ExtResource("1_4qpm3")]
layout_mode = 2
-texture = ExtResource("2_wlfds")
+texture = ExtResource("3_74c65")
[node name="Middle" parent="VBoxContainer/TitleBar/TitleBarBackground" instance=ExtResource("1_4qpm3")]
layout_mode = 2
@@ -49,7 +49,7 @@ texture = ExtResource("3_mngfx")
[node name="Right" parent="VBoxContainer/TitleBar/TitleBarBackground" instance=ExtResource("1_4qpm3")]
layout_mode = 2
-texture = ExtResource("4_fufdc")
+texture = ExtResource("5_qkejn")
[node name="TitleBarElements" type="MarginContainer" parent="VBoxContainer/TitleBar"]
unique_name_in_owner = true
@@ -67,15 +67,15 @@ theme_override_constants/margin_right = 2
[node name="BMPTextureRect" parent="VBoxContainer/TitleBar/TitleBarButtons" instance=ExtResource("1_4qpm3")]
layout_mode = 2
size_flags_horizontal = 0
-texture = ExtResource("5_mnaxm")
+texture = ExtResource("6_uftm1")
stretch_mode = 3
[node name="CloseButton" parent="VBoxContainer/TitleBar/TitleBarButtons" instance=ExtResource("7_m42e5")]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 8
-texture_normal = ExtResource("8_74c65")
-texture_hover = ExtResource("9_qkejn")
+texture_normal = ExtResource("8_vjbfl")
+texture_hover = ExtResource("9_kh8ey")
stretch_mode = 5
[node name="Body" type="PanelContainer" parent="VBoxContainer"]
@@ -94,7 +94,7 @@ theme_override_constants/separation = 0
[node name="BMPTextureRect" parent="VBoxContainer/ButtonBar/ButtonBarBackground" instance=ExtResource("1_4qpm3")]
layout_mode = 2
-texture = ExtResource("5_fufdc")
+texture = ExtResource("10_ug6hj")
[node name="BMPTextureRect2" parent="VBoxContainer/ButtonBar/ButtonBarBackground" instance=ExtResource("1_4qpm3")]
layout_mode = 2
@@ -103,7 +103,7 @@ texture = ExtResource("6_mnaxm")
[node name="BMPTextureRect3" parent="VBoxContainer/ButtonBar/ButtonBarBackground" instance=ExtResource("1_4qpm3")]
layout_mode = 2
-texture = ExtResource("7_hfgic")
+texture = ExtResource("12_xgidv")
[node name="ButtonBarElements" type="MarginContainer" parent="VBoxContainer/ButtonBar"]
unique_name_in_owner = true
@@ -120,7 +120,7 @@ layout_mode = 2
size_flags_horizontal = 8
size_flags_vertical = 8
mouse_default_cursor_shape = 2
-texture = ExtResource("13_74c65")
+texture = ExtResource("13_sy0l2")
stretch_mode = 5
[connection signal="gui_input" from="VBoxContainer/TitleBar" to="." method="_on_title_bar_gui_input"]