diff --git a/Menu.tscn b/Menu.tscn
new file mode 100644
index 0000000..9a63771
--- /dev/null
+++ b/Menu.tscn
@@ -0,0 +1,35 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://scripts/Menu.gd" type="Script" id=1]
+[ext_resource path="res://scripts/ScoreText.gd" type="Script" id=2]
+[ext_resource path="res://shaders/scoretext.tres" type="Material" id=3]
+
+[node name="Menu" type="Control"]
+margin_left = -540.0
+margin_top = -540.0
+margin_right = 540.0
+margin_bottom = 540.0
+rect_pivot_offset = Vector2( 540, 540 )
+rect_clip_content = true
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="SongSelector" type="Control" parent="."]
+margin_right = 40.0
+margin_bottom = 40.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="ChartSelector" type="Control" parent="."]
+margin_right = 40.0
+margin_bottom = 40.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="ScoreText" type="Node2D" parent="."]
+material = ExtResource( 3 )
+script = ExtResource( 2 )
diff --git a/NoteHandler.tscn b/NoteHandler.tscn
new file mode 100644
index 0000000..6221637
--- /dev/null
+++ b/NoteHandler.tscn
@@ -0,0 +1,64 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://scripts/NoteViewport.gd" type="Script" id=1]
+[ext_resource path="res://shaders/notemesh.shader" type="Shader" id=2]
+[ext_resource path="res://scripts/NoteHandler.gd" type="Script" id=3]
+[ext_resource path="res://shaders/notelines.shader" type="Shader" id=4]
+[ext_resource path="res://assets/text-4k.png" type="Texture" id=5]
+[ext_resource path="res://scripts/NotePainter.gd" type="Script" id=6]
+
+[sub_resource type="ShaderMaterial" id=3]
+shader = ExtResource( 2 )
+shader_param/bps = null
+shader_param/star_color = null
+shader_param/held_color = null
+shader_param/screen_size = null
+
+[sub_resource type="ShaderMaterial" id=4]
+shader = ExtResource( 4 )
+shader_param/line_color = Color( 0.8, 0.8, 1, 0.8 )
+shader_param/line_color_double = Color( 1, 1, 0.6, 0.9 )
+shader_param/dot_color = Color( 1, 1, 1, 0.8 )
+shader_param/bps = 1.0
+shader_param/line_thickness = 0.012
+shader_param/line_thickness_min = 0.0
+shader_param/dot_thickness = 0.033
+shader_param/dot_fullbright_thickness = 0.013
+shader_param/max_angle = 1.0708
+shader_param/max_dist = 1.25
+shader_param/array_postmul = Vector3( 1, 1, 1 )
+shader_param/cols_div2 = 3.999
+shader_param/array_sidelen = 16
+shader_param/array_size = 256
+
+[sub_resource type="CanvasItemMaterial" id=5]
+blend_mode = 4
+
+[node name="NoteHandler" type="Node2D"]
+script = ExtResource( 3 )
+
+[node name="Viewport" type="Viewport" parent="."]
+size = Vector2( 540, 540 )
+transparent_bg = true
+usage = 1
+render_target_v_flip = true
+script = ExtResource( 1 )
+
+[node name="Center" type="Node2D" parent="Viewport"]
+position = Vector2( 270, 270 )
+scale = Vector2( 0.5, 0.5 )
+
+[node name="SlideTrailHandler" type="Node2D" parent="Viewport/Center"]
+
+[node name="JudgeText" type="MeshInstance2D" parent="Viewport/Center"]
+texture = ExtResource( 5 )
+
+[node name="meshinstance" type="MeshInstance2D" parent="Viewport/Center"]
+material = SubResource( 3 )
+
+[node name="notelines" type="MeshInstance2D" parent="Viewport/Center"]
+material = SubResource( 4 )
+
+[node name="Painter" type="Node2D" parent="."]
+material = SubResource( 5 )
+script = ExtResource( 6 )
diff --git a/assets/spritesheet-1024.png b/assets/spritesheet-1024.png
new file mode 100644
index 0000000..501ca30
Binary files /dev/null and b/assets/spritesheet-1024.png differ
diff --git a/assets/spritesheet-1024.png.import b/assets/spritesheet-1024.png.import
new file mode 100644
index 0000000..5ea26cf
--- /dev/null
+++ b/assets/spritesheet-1024.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/spritesheet-1024.png-b98defd5d8caae46c768f7bc615ffa47.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/spritesheet-1024.png"
+dest_files=[ "res://.import/spritesheet-1024.png-b98defd5d8caae46c768f7bc615ffa47.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/assets/spritesheet-2048.png b/assets/spritesheet-2048.png
new file mode 100644
index 0000000..846a9c4
Binary files /dev/null and b/assets/spritesheet-2048.png differ
diff --git a/assets/spritesheet-2048.png.import b/assets/spritesheet-2048.png.import
new file mode 100644
index 0000000..0db804d
--- /dev/null
+++ b/assets/spritesheet-2048.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/spritesheet-2048.png-6d095a381aa1366de927fa579d371269.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/spritesheet-2048.png"
+dest_files=[ "res://.import/spritesheet-2048.png-6d095a381aa1366de927fa579d371269.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/assets/spritesheet.svg b/assets/spritesheet.svg
index 116cbad..477635f 100644
--- a/assets/spritesheet.svg
+++ b/assets/spritesheet.svg
@@ -15,7 +15,7 @@
id="svg8"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="spritesheet.svg"
- inkscape:export-filename="/home/luke/godot/rhythm/spritesheet-512.png"
+ inkscape:export-filename="/home/luke/godot/rhythm/assets/spritesheet-1024.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
+
+
+
+
+
+
+
diff --git a/main.tscn b/main.tscn
index 34d0c74..cdef563 100644
--- a/main.tscn
+++ b/main.tscn
@@ -64,7 +64,6 @@ shader_param/dot_fullbright_thickness = 0.013
shader_param/max_angle = 1.0708
shader_param/max_dist = 1.25
shader_param/array_postmul = Vector3( 1, 1, 1 )
-shader_param/cols_div2 = 3.999
shader_param/array_sidelen = 16
shader_param/array_size = 256
diff --git a/project.godot b/project.godot
index c6d2620..19099f0 100644
--- a/project.godot
+++ b/project.godot
@@ -8,11 +8,6 @@
config_version=4
-_global_script_classes=[ ]
-_global_script_class_icons={
-
-}
-
[application]
config/name="Rhythm"
@@ -62,7 +57,6 @@ singletons_disabled=[ ]
[rendering]
-quality/driver/driver_name="GLES2"
vram_compression/import_etc=true
environment/default_clear_color=Color( 0.16, 0.16, 0.16, 1 )
quality/filters/msaa=1
diff --git a/scripts/FileLoader.gd b/scripts/FileLoader.gd
index 452eb8e..72b25bf 100644
--- a/scripts/FileLoader.gd
+++ b/scripts/FileLoader.gd
@@ -14,13 +14,22 @@ const ERROR_CODES := [
]
var userroot := OS.get_user_data_dir().rstrip('/')+'/' if OS.get_name() != 'Android' else '/storage/emulated/0/RhythmGame/'
-var PATHS := [userroot, '/media/fridge-q/Games/Other/maimai Finale/decoded/RhythmGameCharts/slow_userdir/'] # Temporary hardcoded testing
+var PATHS := PoolStringArray([userroot, '/media/fridge-q/Games/Other/maimai Finale/decoded/RhythmGameCharts/slow_userdir/']) # Temporary hardcoded testing
# The following would probably work. One huge caveat is that permission needs to be manually granted by the user in app settings as we can't use OS.request_permission('WRITE_EXTERNAL_STORAGE')
# '/storage/emulated/0/Android/data/au.ufeff.rhythmgame/'
# '/sdcard/Android/data/au.ufeff.rhythmgame/'
func _ready() -> void:
print('Library paths: ', PATHS)
+func find_file(name: String) -> String:
+ # Searches through all of the paths to find the file
+ var file := File.new()
+ for root in PATHS:
+ var filename: String = root + name
+ if file.file_exists(filename):
+ return filename
+ return ''
+
func directory_list(directory: String, hidden: bool, sort:=true) -> Dictionary:
# Sadly there's no filelist sugar so we make our own
var output = {folders=[], files=[], err=OK}
@@ -567,36 +576,32 @@ func load_folder(folder, filename='song'):
func load_filelist(filelist: Array, directory=''):
var charts = {}
var key := 1
- for filename in filelist:
- var extension: String = filename.rsplit('.', true, 1)[-1]
- filename = directory.rstrip('/') + '/' + filename
- var file = File.new()
- for root in PATHS:
- var filename1 = root + filename
- if file.file_exists(filename1):
- filename = filename1
- break
- match extension:
- 'rgtm': # multiple charts
- var res = RGT.load_file(filename)
- for k in res:
- charts[k] = res[k]
- 'rgts', 'rgtx': # single chart
- charts[key] = RGT.load_file(filename)
- key += 1
- 'srt': # maimai, single chart
- charts[key] = SRT.load_file(filename)
- key += 1
- 'sm': # Stepmania, multiple charts
- var res = SM.load_file(filename)
- for k in res:
- charts[k] = res[k]
- _:
- pass
+ for name in filelist:
+ var extension: String = name.rsplit('.', true, 1)[-1]
+ name = directory.rstrip('/') + '/' + name
+ var filename = find_file(name)
+ if filename != '':
+ match extension:
+ 'rgtm': # multiple charts
+ var res = RGT.load_file(filename)
+ for k in res:
+ charts[k] = res[k]
+ 'rgts', 'rgtx': # single chart
+ charts[key] = RGT.load_file(filename)
+ key += 1
+ 'srt': # maimai, single chart
+ charts[key] = SRT.load_file(filename)
+ key += 1
+ 'sm': # Stepmania, multiple charts
+ var res = SM.load_file(filename)
+ for k in res:
+ charts[k] = res[k]
+ _:
+ pass
return charts
-
-func direct_load_ogg(filename) -> AudioStreamOGGVorbis:
+func direct_load_ogg(filename: String) -> AudioStreamOGGVorbis:
+ # Loads the ogg file with that exact filename
var audiostream = AudioStreamOGGVorbis.new()
var oggfile = File.new()
oggfile.open(filename, File.READ)
@@ -605,27 +610,23 @@ func direct_load_ogg(filename) -> AudioStreamOGGVorbis:
return audiostream
var fallback_audiostream = AudioStreamOGGVorbis.new()
-func load_ogg(filename) -> AudioStreamOGGVorbis:
- var file = File.new()
- for root in PATHS:
- var filename1 = root + filename
- if file.file_exists(filename1):
- return direct_load_ogg(filename1)
- return fallback_audiostream
+func load_ogg(name: String) -> AudioStreamOGGVorbis:
+ # Searches through all of the paths to find the file
+ match find_file(name):
+ '': return fallback_audiostream
+ var filename: return direct_load_ogg(filename)
var fallback_videostream = VideoStreamWebm.new()
-func load_video(filename):
- var file = File.new()
- for root in PATHS:
- var filename1 = root + filename
- if file.file_exists(filename1):
- return load(filename1)
-# var videostream = VideoStreamGDNative.new()
-# videostream.set_file(filename1)
-# return videostream
- return fallback_videostream
+func load_video(name: String):
+ match find_file(name):
+ '': return fallback_videostream
+ var filename:
+ return load(filename)
+ # var videostream = VideoStreamGDNative.new()
+ # videostream.set_file(filename1)
+ # return videostream
-func direct_load_image(filename) -> ImageTexture:
+func direct_load_image(filename: String) -> ImageTexture:
var tex := ImageTexture.new()
var img := Image.new()
img.load(filename)
@@ -633,13 +634,11 @@ func direct_load_image(filename) -> ImageTexture:
return tex
var fallback_texture := ImageTexture.new()
-func load_image(filename) -> ImageTexture:
- var file = File.new()
- for root in PATHS:
- var filename1 = root + filename
- if file.file_exists(filename1):
- return direct_load_image(filename1)
- print('File not found: ', filename)
+func load_image(name: String) -> ImageTexture:
+ var filename = find_file(name)
+ if filename != '':
+ return direct_load_image(filename)
+ print('File not found: ', name)
return fallback_texture
diff --git a/scripts/GameTheme.gd b/scripts/GameTheme.gd
index a492d9a..7c10e88 100644
--- a/scripts/GameTheme.gd
+++ b/scripts/GameTheme.gd
@@ -1,6 +1,45 @@
tool
extends Node
+var tex_notes := preload('res://assets/spritesheet-2048.png')
+var tex_judgement_text := preload('res://assets/text-4k.png')
+var tex_slide_arrow := tex_notes
+var slide_trail_shadermaterial := preload('res://shaders/slidetrail.tres')
+
+var snd_miss := preload('res://assets/miss.wav')
+var snd_clap := preload('res://assets/softclap.wav')
+var snd_count_in := snd_clap
+var snd_judgement := {
+ 0: snd_clap,
+ 1: snd_clap,
+ -1: snd_clap,
+ 2: snd_clap,
+ -2: snd_clap,
+ 3: snd_miss,
+ -3: snd_miss,
+ 'MISS': snd_miss
+}
+var db_judgement := {
+ 0: 0.0,
+ 1: -1.5,
+ -1: -1.5,
+ 2: -3.0,
+ -2: -3.0,
+ 3: -6.0,
+ -3: -6.0,
+ 'MISS': 0.0
+}
+var pitch_judgement := {
+ 0: 1.0,
+ -1: 1.0/0.75,
+ 1: 0.75,
+ -2: 1.0/0.60,
+ 2: 0.60,
+ -3: 1.5,
+ 3: 1.5,
+ 'MISS': 1.0
+}
+
var receptor_ring_radius := 460.0
var note_forecast_beats := 2.0 # Notes start to appear this many beats before you need to tap them
const INNER_NOTE_CIRCLE_RATIO := 0.3 # Notes under this far from the center will zoom into existence
@@ -23,16 +62,29 @@ var judge_text_duration := 2.0
# UV vertex arrays for our sprites
# tap/star/arrow are 4-vertex 2-triangle simple squares
# hold is 8-vertex 6-triangle to enable stretching in the middle
-const UV_ARRAY_TAP := PoolVector2Array([Vector2(0, 0.5), Vector2(0.5, 0.5), Vector2(0, 1), Vector2(0.5, 1)])
+const TNSZ := 4;
+const UV_ARRAY_TAP := PoolVector2Array([Vector2(0, 0)/TNSZ, Vector2(1, 0)/TNSZ, Vector2(0, 1)/TNSZ, Vector2(1, 1)/TNSZ])
const UV_ARRAY_HOLD := PoolVector2Array([
- Vector2(0.5, 0.5), Vector2(1, 0.5), Vector2(0.5, 0.75), Vector2(1, 0.75),
- Vector2(0.5, 0.75), Vector2(1, 0.75), Vector2(0.5, 1), Vector2(1, 1)
+ Vector2(1, 0)/TNSZ, Vector2(2, 0)/TNSZ, Vector2(1, 0.5)/TNSZ, Vector2(2, 0.5)/TNSZ,
+ Vector2(1, 0.5)/TNSZ, Vector2(2, 0.5)/TNSZ, Vector2(1, 1)/TNSZ, Vector2(2, 1)/TNSZ
])
-const UV_ARRAY_STAR := PoolVector2Array([Vector2(0.5, 0), Vector2(1, 0), Vector2(0.5, 0.5), Vector2(1, 0.5)])
-const UV_ARRAY_ARROW := PoolVector2Array([Vector2(0, 0), Vector2(0.5, 0), Vector2(0, 0.5), Vector2(0.5, 0.5)])
+const UV_ARRAY_STAR := PoolVector2Array([Vector2(2, 0)/TNSZ, Vector2(3, 0)/TNSZ, Vector2(2, 1)/TNSZ, Vector2(3, 1)/TNSZ])
+const UV_ARRAY_ARROW := PoolVector2Array([Vector2(0, 1)/TNSZ, Vector2(1, 1)/TNSZ, Vector2(0, 2)/TNSZ, Vector2(1, 2)/TNSZ])
# Slide trail arrow. Single tri.
-const UV_ARRAY_SLIDE_ARROW := PoolVector2Array([Vector2(0, 0), Vector2(1, 0), Vector2(0, 1)])
-const UV_ARRAY_SLIDE_ARROW2 := PoolVector2Array([Vector2(1, 1), Vector2(0, 1), Vector2(1, 0)])
+const UV_ARRAY_SLIDE_ARROW := PoolVector2Array([Vector2(3, 0)/TNSZ, Vector2(4, 0)/TNSZ, Vector2(3, 1)/TNSZ])
+const UV_ARRAY_SLIDE_ARROW2 := PoolVector2Array([Vector2(4, 1)/TNSZ, Vector2(3, 1)/TNSZ, Vector2(4, 0)/TNSZ])
+
+# Dance mode
+const UV_ARRAY_D_ARROW := PoolVector2Array([Vector2(0, 2)/TNSZ, Vector2(1, 2)/TNSZ, Vector2(0, 3)/TNSZ, Vector2(1, 3)/TNSZ])
+const UV_ARRAY_D_RECEPTOR := PoolVector2Array([Vector2(0, 3)/TNSZ, Vector2(1, 3)/TNSZ, Vector2(0, 4)/TNSZ, Vector2(1, 4)/TNSZ])
+const UV_ARRAY_D_HOLD := PoolVector2Array([
+ Vector2(1, 1)/TNSZ, Vector2(2, 1)/TNSZ, Vector2(1, 1.5)/TNSZ, Vector2(2, 1.5)/TNSZ,
+ Vector2(1, 1.5)/TNSZ, Vector2(2, 1.5)/TNSZ, Vector2(1, 2)/TNSZ, Vector2(2, 2)/TNSZ
+ ])
+const UV_ARRAY_D_ROLL := PoolVector2Array([
+ Vector2(2, 1)/TNSZ, Vector2(3, 1)/TNSZ, Vector2(2, 1.5)/TNSZ, Vector2(3, 1.5)/TNSZ,
+ Vector2(2, 1.5)/TNSZ, Vector2(3, 1.5)/TNSZ, Vector2(2, 2)/TNSZ, Vector2(3, 2)/TNSZ
+ ])
# Color definitions
const COLOR_TAP := Color(1, 0.15, 0.15, 1)
@@ -54,28 +106,28 @@ const COLOR_DIFFICULTY := PoolColorArray([ # Background, foreground for each
Color(1.0, 1.0, 1.0), Color(0.737, 0.188, 0.894),
])
-var COLOR_ARRAY_TAP := PoolColorArray([COLOR_TAP, COLOR_TAP, COLOR_TAP, COLOR_TAP])
-var COLOR_ARRAY_TAP2 := PoolColorArray([COLOR_TAP2, COLOR_TAP2, COLOR_TAP2, COLOR_TAP2])
-var COLOR_ARRAY_HOLD := PoolColorArray([
+const COLOR_ARRAY_TAP := PoolColorArray([COLOR_TAP, COLOR_TAP, COLOR_TAP, COLOR_TAP])
+const COLOR_ARRAY_TAP2 := PoolColorArray([COLOR_TAP2, COLOR_TAP2, COLOR_TAP2, COLOR_TAP2])
+const COLOR_ARRAY_HOLD := PoolColorArray([
COLOR_HOLD, COLOR_HOLD, COLOR_HOLD, COLOR_HOLD,
COLOR_HOLD, COLOR_HOLD, COLOR_HOLD, COLOR_HOLD
])
-var COLOR_ARRAY_HOLD_HELD := PoolColorArray([
+const COLOR_ARRAY_HOLD_HELD := PoolColorArray([
COLOR_HOLD_HELD, COLOR_HOLD_HELD, COLOR_HOLD_HELD, COLOR_HOLD_HELD,
COLOR_HOLD_HELD, COLOR_HOLD_HELD, COLOR_HOLD_HELD, COLOR_HOLD_HELD
])
-var COLOR_ARRAY_HOLD_MISS := PoolColorArray([
+const COLOR_ARRAY_HOLD_MISS := PoolColorArray([
COLOR_HOLD_MISS, COLOR_HOLD_MISS, COLOR_HOLD_MISS, COLOR_HOLD_MISS,
COLOR_HOLD_MISS, COLOR_HOLD_MISS, COLOR_HOLD_MISS, COLOR_HOLD_MISS
])
-var COLOR_ARRAY_STAR := PoolColorArray([COLOR_STAR, COLOR_STAR, COLOR_STAR, COLOR_STAR])
-var COLOR_ARRAY_DOUBLE_4 := PoolColorArray([COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE])
-var COLOR_ARRAY_DOUBLE_8 := PoolColorArray([
+const COLOR_ARRAY_STAR := PoolColorArray([COLOR_STAR, COLOR_STAR, COLOR_STAR, COLOR_STAR])
+const COLOR_ARRAY_DOUBLE_4 := PoolColorArray([COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE])
+const COLOR_ARRAY_DOUBLE_8 := PoolColorArray([
COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE,
COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE, COLOR_DOUBLE
])
-var COLOR_ARRAY_DOUBLE_MISS_4 := PoolColorArray([COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS])
-var COLOR_ARRAY_DOUBLE_MISS_8 := PoolColorArray([
+const COLOR_ARRAY_DOUBLE_MISS_4 := PoolColorArray([COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS])
+const COLOR_ARRAY_DOUBLE_MISS_8 := PoolColorArray([
COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS,
COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS, COLOR_DOUBLE_MISS
])
diff --git a/scripts/Menu.gd b/scripts/Menu.gd
index 3520fde..6a037be 100644
--- a/scripts/Menu.gd
+++ b/scripts/Menu.gd
@@ -213,7 +213,7 @@ func _draw_score_screen(center: Vector2) -> Array:
var y1 = y
var y2 = y + size + y_spacing*1.5
- var tex_judgement_text = NoteHandler.tex_judgement_text
+ var tex_judgement_text = GameTheme.tex_judgement_text
var judgement_text_scale = 0.667
var judgement_text_width = 256 * judgement_text_scale
var judgement_text_height = 64 * judgement_text_scale
diff --git a/scripts/NoteHandler.gd b/scripts/NoteHandler.gd
index 8f364ec..8c2ffc7 100644
--- a/scripts/NoteHandler.gd
+++ b/scripts/NoteHandler.gd
@@ -7,11 +7,6 @@ signal finished_song(song_key, score_data)
var running := false
var song_key = ''
-var tex := preload('res://assets/spritesheet-4k.png')
-var tex_judgement_text := preload('res://assets/text-4k.png')
-var tex_slide_arrow := preload('res://assets/slide-arrow-4k.png')
-var slide_trail_shadermaterial := preload('res://shaders/slidetrail.tres')
-
export var MusicPlayerPath := @'/root/main/music'
export var VideoPlayerPath := @'/root/main/video'
export var InputHandlerPath := @'/root/main/InputHandler'
@@ -25,40 +20,6 @@ onready var JudgeText = $'Viewport/Center/JudgeText'
onready var notelines = $'Viewport/Center/notelines'
onready var meshinstance = $'Viewport/Center/meshinstance'
-var snd_miss := preload('res://assets/miss.wav')
-var snd_clap := preload('res://assets/softclap.wav')
-var snd_count_in := snd_clap
-var snd_judgement := {
- 0: snd_clap,
- 1: snd_clap,
- -1: snd_clap,
- 2: snd_clap,
- -2: snd_clap,
- 3: snd_miss,
- -3: snd_miss,
- 'MISS': snd_miss
-}
-var db_judgement := {
- 0: 0.0,
- 1: -1.5,
- -1: -1.5,
- 2: -3.0,
- -2: -3.0,
- 3: -6.0,
- -3: -6.0,
- 'MISS': 0.0
-}
-var pitch_judgement := {
- 0: 1.0,
- -1: 1.0/0.75,
- 1: 0.75,
- -2: 1.0/0.60,
- 2: 0.60,
- -3: 1.5,
- 3: 1.5,
- 'MISS': 1.0
-}
-
const SQRT2 := sqrt(2)
const DEG45 := deg2rad(45.0)
const DEG90 := deg2rad(90.0)
@@ -280,12 +241,12 @@ func make_slide_trail_mesh(note) -> ArrayMesh:
#----------------------------------------------------------------------------------------------------------------------------------------------
func make_judgement_column(judgement, column: int):
active_judgement_texts.append({col=column, judgement=judgement, time=t})
- SFXPlayer.play(SFXPlayer.Type.NON_POSITIONAL, self, snd_judgement[judgement], db_judgement[judgement], pitch_judgement[judgement])
+ SFXPlayer.play(SFXPlayer.Type.NON_POSITIONAL, self, GameTheme.snd_judgement[judgement], GameTheme.db_judgement[judgement], GameTheme.pitch_judgement[judgement])
func make_judgement_pos(judgement, pos: Vector2):
# Positional judgement text not yet implemented, will do if touches are ever added
#active_judgement_texts.append({judgement=judgement, time=t})
- SFXPlayer.play(SFXPlayer.Type.NON_POSITIONAL, self, snd_judgement[judgement], db_judgement[judgement], pitch_judgement[judgement])
+ SFXPlayer.play(SFXPlayer.Type.NON_POSITIONAL, self, GameTheme.snd_judgement[judgement], GameTheme.db_judgement[judgement], GameTheme.pitch_judgement[judgement])
func activate_note(note, judgement):
@@ -464,7 +425,7 @@ func _draw():
slide_trail_mesh_instances[note.slide_id].material.set_shader_param('base_alpha', trail_alpha*GameTheme.slide_trail_alpha)
noteline_data.unlock()
- var noteline_data_tex = ImageTexture.new()
+ var noteline_data_tex := ImageTexture.new()
noteline_data_tex.create_from_image(noteline_data, 0)
notelines.set_texture(noteline_data_tex)
@@ -592,7 +553,7 @@ func load_track(song_key: String, difficulty_idx: int):
meshinstance.material.set_shader_param('held_color', GameTheme.COLOR_HOLD_HELD)
meshinstance.material.set_shader_param('bps', bpm/60.0)
meshinstance.material.set_shader_param('screen_size', get_viewport().get_size())
- meshinstance.set_texture(tex)
+ meshinstance.set_texture(GameTheme.tex_notes)
initialise_scores() # Remove old score
func stop():
@@ -602,7 +563,7 @@ func stop():
next_note_to_load = 1000000 # Hacky but whatever
func intro_click():
- SFXPlayer.play(SFXPlayer.Type.NON_POSITIONAL, self, snd_count_in)
+ SFXPlayer.play(SFXPlayer.Type.NON_POSITIONAL, self, GameTheme.snd_count_in)
func get_realtime_precise() -> float:
# Usually we only update the gametime once per process loop, but for input callbacks it's good to have msec precision
@@ -710,9 +671,9 @@ func _process(delta):
if note.type == Note.NOTE_SLIDE:
var meshi = MeshInstance2D.new()
meshi.set_mesh(slide_trail_meshes[note.slide_id])
- meshi.set_material(slide_trail_shadermaterial.duplicate())
+ meshi.set_material(GameTheme.slide_trail_shadermaterial.duplicate())
meshi.material.set_shader_param('trail_progress', 0.0)
- meshi.set_texture(tex_slide_arrow)
+ meshi.set_texture(GameTheme.tex_slide_arrow)
slide_trail_mesh_instances[note.slide_id] = meshi
SlideTrailHandler.add_child(meshi)