Compare commits

5 Commits

Author SHA1 Message Date
guzlad
b1f6024fa7 Added special scrolling to menu + fixes (#618)
* Added Special Scrolling to the visuals menu

* Added the actual functionality for special scrolling to work with menu

* Fixed PC-8801 mode if smooth transitions are enabled

* Special scrolling, not-so special translations
2025-10-18 00:27:25 +01:00
KirbyKidJ
e7ad269317 Fixed Space Title Stars and PlayerSprite Fallback Check (#619)
* Fixed Space Title Stars

Fixes the position of the title stars in the space theme

* Fixed `PlayerSprite` Fallback Check

PlayerSprites check recursively for fallbacks. However, this does mean that if one fallback links to something that was already checked, it would make an infinite loop.
Also fixes the Pipe Cutscene, and updated Mario's `Big.tres` UIDs
2025-10-18 00:26:34 +01:00
KirbyKidJ
3a8d317953 Lost Levels Asset Update for All Night Nippon (#620)
- Gave the Hills the Lost Level tree spots (inside only)
- Fixed sprite clipping with World A-C NPC
- Uses LL Platform for ANN
- Uses LL Font for ANN
2025-10-18 00:25:46 +01:00
guzlad
e48b7c2c0f [QoL] Noclip can be toggled, works w/o debug in leveltesting, some convenience functions. (#621)
* Some state machine functions to make code tidier in the future

* Added a function to Global to check if we're playtesting, for convenience

* Only allow noclip w/o debug in leveltesting, toggling added, kept jump key to exit
2025-10-18 00:24:50 +01:00
Ramona
75b293040e Recenter resized window on launch (#622)
* Flip death gravity when upside down

* Improvements to code per Joe's request

* Recenter resized window on launch
2025-10-18 00:24:11 +01:00
44 changed files with 246 additions and 18 deletions

View File

@@ -22,6 +22,10 @@
"SMBLL": {
"Day": {"source": "OverworldLL.png"},
"Night": {"source": "OverworldNightLL.png"}
},
"SMBANN": {
"Day": {"source": "OverworldANN.png"},
"Night": {"source": "OverworldNightANN.png"}
}
},
"Desert": {
@@ -84,6 +88,14 @@
"Night": {
"source": "SnowNightLL.png"
}
},
"SMBANN": {
"Day": {
"source": "SnowANN.png"
},
"Night": {
"source": "SnowNightANN.png"
}
}
},
"Jungle":

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cs28m2tkqkqpt"
path="res://.godot/imported/OverworldANN.png-a917c4a1e4c1e40208df341e8af51f42.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/Backgrounds/Hills/OverworldANN.png"
dest_files=["res://.godot/imported/OverworldANN.png-a917c4a1e4c1e40208df341e8af51f42.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bc1nkboy3fr6k"
path="res://.godot/imported/OverworldNightANN.png-98a6485e550acd4158fbc7898baf20e0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/Backgrounds/Hills/OverworldNightANN.png"
dest_files=["res://.godot/imported/OverworldNightANN.png-98a6485e550acd4158fbc7898baf20e0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://wq4msfwikcwr"
path="res://.godot/imported/SnowANN.png-547267a957ae04d1a3806374cbacb137.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/Backgrounds/Hills/SnowANN.png"
dest_files=["res://.godot/imported/SnowANN.png-547267a957ae04d1a3806374cbacb137.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cpssr0kuj5iyx"
path="res://.godot/imported/SnowNightANN.png-880d870cd2c8b88c76dda7d4cf1467bf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/Backgrounds/Hills/SnowNightANN.png"
dest_files=["res://.godot/imported/SnowNightANN.png-880d870cd2c8b88c76dda7d4cf1467bf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -6,7 +6,10 @@
},
"SMBLL": {
"source": "LLPlatform.png"
},
"SMBANN": {
"link": "SMBLL"
}
}
}
}
}

View File

@@ -1,6 +1,7 @@
{
"variations": {
"SMB1": {"source": "Font.fnt"},
"SMBLL": {"source": "FontLL.fnt"}
"SMBLL": {"source": "FontLL.fnt"},
"SMBANN": {"link": "SMBLL"}
}
}

View File

@@ -31,7 +31,7 @@
"Autumn": {"source": "TitleSMBLL.png", "rect": [352, 88, 176, 88], "properties": {"star_offset_x": 0, "star_offset_y": -4}},
"Beach": {"source": "TitleSMBLL.png", "rect": [0, 176, 176, 88], "properties": {"star_offset_x": 0, "star_offset_y": -4}},
"Mountain": {"source": "TitleSMBLL.png", "rect": [176, 176, 176, 88], "properties": {"star_offset_x": 0, "star_offset_y": -4}},
"Space": {"source": "TitleSMBLL.png", "rect": [352, 176, 176, 88], "properties": {"star_offset_x": 0, "star_offset_y": -0}}
"Space": {"source": "TitleSMBLL.png", "rect": [352, 176, 176, 88], "properties": {"star_offset_x": 0, "star_offset_y": -4}}
},
"SMBANN": {
"default": {"source": "TitleSMBANN.png", "rect": [0, 0, 176, 88], "properties": {"star_offset_x": -88, "star_offset_y": 4}},
@@ -42,7 +42,7 @@
"Autumn": {"source": "TitleSMBANN.png", "rect": [352, 88, 176, 88], "properties": {"star_offset_x": -88, "star_offset_y": 4}},
"Beach": {"source": "TitleSMBANN.png", "rect": [0, 176, 176, 88], "properties": {"star_offset_x": -88, "star_offset_y": 4}},
"Mountain": {"source": "TitleSMBANN.png", "rect": [176, 176, 176, 88], "properties": {"star_offset_x": -88, "star_offset_y": 4}},
"Space": {"source": "TitleSMBANN.png", "rect": [352, 176, 176, 88], "properties": {"star_offset_x": 0, "star_offset_y": -0}}
"Space": {"source": "TitleSMBANN.png", "rect": [352, 176, 176, 88], "properties": {"star_offset_x": -88, "star_offset_y": 4}}
}
}
}

View File

@@ -4,9 +4,13 @@
"res://Assets/Sprites/Backgrounds/Hills/Overworld.png",
"res://Assets/Sprites/Backgrounds/Hills/OverworldAlt.png",
"res://Assets/Sprites/Backgrounds/Hills/OverworldANN.png",
"res://Assets/Sprites/Backgrounds/Hills/OverworldNight.png",
"res://Assets/Sprites/Backgrounds/Hills/OverworldNightANN.png",
"res://Assets/Sprites/Backgrounds/Hills/Snow.png",
"res://Assets/Sprites/Backgrounds/Hills/SnowANN.png",
"res://Assets/Sprites/Backgrounds/Hills/SnowNight.png",
"res://Assets/Sprites/Backgrounds/Hills/SnowNightANN.png",
"res://Assets/Sprites/Backgrounds/Skies/AutumnSky.png",
"res://Assets/Sprites/Backgrounds/Skies/BeachSky.png",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -165,6 +165,10 @@ VISUAL_COLOURFUL_PIPES,"Enables multi-coloured pipes (green by default, if turne
VISUAL_TRANSFORM,"Should the transformation effect on the player, be rainbow, or a simple animation swap?",Transform Style,Style Transfo.,Styl Transformacji,ctиль tpahcфopmaции,Estilo de transformación,Stile trasformazione, ,Style ng Pagtransform,Power-Up-Animationsstil,Dönüşüm Stİlİ,Transformasi Gaya,Estilo de Transformação,へんしんスタイル
VISUAL_TEXT_SHADOWS,,Text Shadows,Ombre Textes,Cieniowany Tekstu,tehь tekcta,Sombras en textos,Ombre testo, ,Anino ng Text,Textschatten,Yazı Gölgelerİ,Bayangan Teks,Sombreamento de Texto,テキストのかげ
VISUAL_TRANSITION_EFFECT,Do we want transitions to be instant? or smooth?,Transition Style,Style de transition,Styl Tranzycji,ctиль пepexoдob,Estilo de transición,Stile transizione, ,Style ng Transition,Übergangsstil,Geçİş Stİlİ,Gaya Transisi,Estilo de Transição,フェード・スタイル
VISUAL_SMBS_SCROLL,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling,Special Scrolling
VISUAL_SMBS_SCROLL_OFF,Off,Off,Off,Off,Off,Off,Off,Off,Off,Off,Off,Off,Off,Off
VISUAL_SMBS_SCROLL_X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1,Sharp X1
VISUAL_SMBS_SCROLL_PC8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801,PC-8801
VISUAL_PARALLAX_NONE,,None,Aucun,Brak,het,Ninguno,No,,Wala,Kein,Hİç,None,Nenhum,オフ
VISUAL_PARALLAX_BASIC,,Basic,Basique,Podstawowe,ochobhoй,Básico,Basico,,Basic,Standard,Basİt,Dasar,Básico,ひょうじゅん
VISUAL_PARALLAX_DETAIL,,Detailed,Détaillé,Detalowane,Дetaлизиpobahhый,Detallado,Dettagliato,,Detalyado,Detailliert,Detaylı,Detailed,Detalhado,しょうさい
1 description en fr pl ru es it ga fil de tr id pt jp
165 LEVEL_WARPZONE CUTSCENE_CASTLE_PEACH_4 Welcome to Warp Zone! Extra content has been unlocked! Enjoy! Bienvenue dans la zone de téléportation ! Nouveaux contenus débloqués ! Profitez bien ! Witaj w Metrze Rur! Dodatkowe zasoby zostały odblokowane! Powodzenia! Дoбpo пoжaлobatь b bapп ЗohУ! Эkctpa-kohteht paзблokиpobah! beceлиcь! ¡Bienvenido a la Warp Zone! Se ha desbloqueado contenido extra. Que lo disfrutes! Benvenuto nella Warp Zone! è stato aggiunto del contenuto extra! Divertiti! WELCOME TO WARP ZONE! EXTRA CONTENT HAS BEEN UNLOCKED! ENJOY! Welcome sa Warp Zone May access ka na sa ibang content! Enjoy! Willkommen bei der Warp-Zone! Weitere Inhalte sind jetzt verfügbar! Viel Spass! Warp Bölgesİne Hoş Geldİn! Ekstra İçerİk açıldı! İyİ eğlenceler! Selamat datang di Warp Zone! Konten tambahan telah dibuka! Selamat menikmati! Bem-vindo a Warp Zone! Conteúdo extra desbloqueado! Aproveite! ワープゾーンへようこそ! ボーナスコンテンツがあいたよ!たのしんでね!
166 CHALLENGE_MISS CUTSCENE_MARATHON_PEACH_1 Miss… Great run {PLAYER}! Perdu… Belle run {PLAYER}! Zguba… Swietna próba {PLAYER}! Пpomax… xopoший зaбeг {PLAYER}! Perdió… ¡Gran carrera {PLAYER}! Peccato… Bella run {PLAYER}! MISS… GREAT RUN {PLAYER}! Ayun lang… Mahusay {PLAYER}! Verloren… Sehr gut, {PLAYER}! Kaybettİn… İyİ koşu, {PLAYER}! Gagal… Lari yang hebat {PLAYER}! Perdeu... Ótima rodada {PLAYER}! ミス... よくやった、{PLAYER}!
167 CHALLENGE_DIALOGUE_RESULTS CUTSCENE_MARATHON_PEACH_2 Dialogue is what toad says, when telling you your final results on the challenge hunt Your Results Your time was: {TIME} Résultats Finaux Tu as mis: {TIME} Twoje Rezultaty Twój czas to: {TIME} tboи peзУльtatы tboё bpemя: {TIME} Tus resultados Tu tiempo fue: {TIME} I tuoi risultati Il tuo tempo è: {TIME} YOUR RESULTS YOUR TIME WAS: {TIME} Iyong resulta Ang oras mo ay: {TIME} End- ergebnis Deine Zeit ist: {TIME} Sonuçların Senİn zamanın: {TİME} Hasil Anda Waktu Anda adalah: {TIME} Seus Resultados Seu tempo foi: {TIME} けっか タイム:{TIME}
168 CUTSCENE_MARATHON_PEACH_3 That's a new best! Great job! C'est un nouveau record ! Bien joué ! To nowy rekord! Dobra robota! hobый pekopд! Пoздpabляю! ¡Esa es una nueva mejor marca! ¡Buen trabajo! Questo è un nuovo record! Bel lavoro! THAT'S A NEW BEST! GREAT JOB! Bagong record! Yehey! Dies ist ein neuer Rekord! Glückwunsch! Bu yenİ bİr rekor! Harİka İş! Itu rekor baru! Kerja bagus! Esse foi um novo recorde! Parabéns! きろくこうしん!おめでとう!
169 LEVEL_WARPZONE Welcome to Warp Zone! Bienvenue dans la zone de téléportation ! Witaj w Metrze Rur! Дoбpo пoжaлobatь b bapп ЗohУ! ¡Bienvenido a la Warp Zone! Benvenuto nella Warp Zone! WELCOME TO WARP ZONE! Welcome sa Warp Zone Willkommen bei der Warp-Zone! Warp Bölgesİne Hoş Geldİn! Selamat datang di Warp Zone! Bem-vindo a Warp Zone! ワープゾーンへようこそ!
170 CHALLENGE_MISS Miss… Perdu… Zguba… Пpomax… Perdió… Peccato… MISS… Ayun lang… Verloren… Kaybettİn… Gagal… Perdeu... ミス...
171 CHALLENGE_DIALOGUE_RESULTS Dialogue is what toad says, when telling you your final results on the challenge hunt Your Results Résultats Finaux Twoje Rezultaty tboи peзУльtatы Tus resultados I tuoi risultati YOUR RESULTS Iyong resulta End- ergebnis Sonuçların Hasil Anda Seus Resultados けっか
172 CHALLENGE_DIALOGUE_SCORE Score Score Wynik oчkи Puntuación Punteggio SCORE Score Punkte Skor Skor Pontuação ポイント
173 CHALLENGE_DIALOGUE_COINS Coins Pièces Monety mohetы Monedas Monete COINS Coins Münzen Altınlar Koin Moedas コイン
174 CHALLENGE_DIALOGUE_EXIT Press jump to continue. Appuyez pour quitter Naciśnij aby wyjść haжmиte любУю khoпkУ. Pulse Saltar para continuar. Schiaccia il pulsante "salta" per uscire. PRESS JUMP TO CONTINUE. Pinduntin ang Jump button para umalis Zum Beenden springen. Çıkmak İçİn zıpla. Tekan lompat untuk keluar. Pressione pular para continuar. 「ジャンプ」を おして ぞっこう

View File

@@ -1,7 +1,7 @@
[gd_resource type="SpriteFrames" load_steps=25 format=3 uid="uid://cjblhx4flkqva"]
[ext_resource type="Texture2D" uid="uid://cf6up03lxcul2" path="res://Assets/Sprites/Players/Mario/Big.png" id="1_akfsq"]
[ext_resource type="Texture2D" uid="uid://ecig0d3sw5jm" path="res://Assets/Sprites/Players/Mario/Small.png" id="1_dg100"]
[ext_resource type="Texture2D" uid="uid://b45d7xacnaoxl" path="res://Assets/Sprites/Players/Mario/Big.png" id="1_akfsq"]
[ext_resource type="Texture2D" uid="uid://d8g0ff0oepgy" path="res://Assets/Sprites/Players/Mario/Small.png" id="1_dg100"]
[sub_resource type="AtlasTexture" id="AtlasTexture_a6q03"]
atlas = ExtResource("1_akfsq")

View File

@@ -447,7 +447,7 @@ size_flags_vertical = 3
theme_override_constants/separation = -4
script = ExtResource("4_avtty")
category_name = "SETTINGS_VISUALS"
options = [NodePath("ParallaxStyle"), NodePath("BGParticles"), NodePath("HUDStyle"), NodePath("RainbowEffect"), NodePath("TransformationEffect"), NodePath("TextShadows"), NodePath("BridgeDestructionAnimation"), NodePath("VisibleTimers"), NodePath("TransitionAnimation"), NodePath("ColourfulPipes"), NodePath("FirebarStyle"), NodePath("ExtraParticles")]
options = [NodePath("ParallaxStyle"), NodePath("BGParticles"), NodePath("HUDStyle"), NodePath("RainbowEffect"), NodePath("TransformationEffect"), NodePath("TextShadows"), NodePath("BridgeDestructionAnimation"), NodePath("VisibleTimers"), NodePath("TransitionAnimation"), NodePath("SpecialScrollingMode"), NodePath("ColourfulPipes"), NodePath("FirebarStyle"), NodePath("ExtraParticles")]
[node name="Control" type="Control" parent="PanelContainer/MarginContainer/VBoxContainer/Visuals"]
custom_minimum_size = Vector2(0, 4)
@@ -516,6 +516,13 @@ title = "VISUAL_TRANSITION_EFFECT"
values = ["VISUAL_TRANSITION_CLASSIC", "VISUAL_TRANSITION_SMOOTH"]
settings_category = "visuals"
[node name="SpecialScrollingMode" parent="PanelContainer/MarginContainer/VBoxContainer/Visuals" groups=["Options"] instance=ExtResource("3_dl6kk")]
layout_mode = 2
option_key = "smbs_scroll"
title = "VISUAL_SMBS_SCROLL"
values = ["VISUAL_SMBS_SCROLL_OFF", "VISUAL_SMBS_SCROLL_X1", "VISUAL_SMBS_SCROLL_PC8801"]
settings_category = "visuals"
[node name="ColourfulPipes" parent="PanelContainer/MarginContainer/VBoxContainer/Visuals" groups=["Options"] instance=ExtResource("3_dl6kk")]
layout_mode = 2
option_key = "colour_pipes"
@@ -1013,6 +1020,7 @@ script = ExtResource("19_k6yev")
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Visuals/BridgeDestructionAnimation" to="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisualsSetter" method="bridge_changed"]
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisibleTimers" to="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisualsSetter" method="visible_timers_changed"]
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Visuals/TransitionAnimation" to="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisualsSetter" method="transition_style_changed"]
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Visuals/SpecialScrollingMode" to="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisualsSetter" method="smbs_scroll_changed"]
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Visuals/ColourfulPipes" to="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisualsSetter" method="colourful_pipes_changed"]
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Visuals/FirebarStyle" to="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisualsSetter" method="firebar_style_changed"]
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Visuals/ExtraParticles" to="PanelContainer/MarginContainer/VBoxContainer/Visuals/VisualsSetter" method="extra_particles"]

View File

@@ -280,9 +280,16 @@ func editor_level_start() -> void:
func _physics_process(delta: float) -> void:
if Input.is_action_just_pressed("debug_reload"):
set_power_state_frame()
if Input.is_action_just_pressed("debug_noclip") and Global.debug_mode:
state_machine.transition_to("NoClip")
Global.log_comment("NOCLIP Enabled")
# guzlad: noclip without dev only works while playtesting.
if (Input.is_action_just_pressed("debug_noclip") or Input.is_action_just_pressed("jump_0")) and ((Global.debug_mode) or (Global.level_editor_is_playtesting())):
if state_machine.is_state("NoClip"):
state_machine.transition_to("Normal")
Global.log_comment("NOCLIP Disabled")
elif !Input.is_action_just_pressed("jump_0") and !state_machine.is_state("NoClip"):
state_machine.transition_to("NoClip")
Global.log_comment("NOCLIP Enabled")
up_direction = -gravity_vector
handle_directions()
handle_block_collision_detection()

View File

@@ -454,6 +454,12 @@ func log_comment(msg := "") -> void:
await get_tree().create_timer(2, false).timeout
error_message.queue_free()
func level_editor_is_playtesting() -> bool:
if Global.current_game_mode == Global.GameMode.LEVEL_EDITOR:
if Global.level_editor.current_state == LevelEditor.EditorState.PLAYTESTING:
return true
return false
func unlock_achievement(achievement_id := AchievementID.SMB1_CLEAR) -> void:
achievements[achievement_id] = "1"
if achievement_id != AchievementID.COMPLETIONIST:

View File

@@ -68,6 +68,7 @@ var file := {
"bridge_animation": 0,
"visible_timers": 0,
"transition_animation": 0,
"smbs_scroll": 0,
"colour_pipes": 1,
"firebar_style": 0,
"extra_particles": 0

View File

@@ -13,9 +13,6 @@ func enter(_msg := {}) -> void:
func physics_update(_delta: float) -> void:
player.velocity = Input.get_vector("move_left_0", "move_right_0", "move_up_0", "move_down_0") * (FAST_SPEED if Input.is_action_pressed("run_0") else SLOW_SPEED)
player.move_and_slide()
if Input.is_action_just_pressed("jump_0"):
state_machine.transition_to("Normal")
Global.log_comment("NOCLIP Disabled")
func exit() -> void:
player.can_hurt = false

View File

@@ -15,3 +15,11 @@ func _physics_process(delta: float) -> void:
func _process(delta: float) -> void:
state.update(delta)
func get_state() -> String:
if (state != null):
return state.name
return ""
func is_state(state_to_check := "") -> bool:
return get_state() == state_to_check

View File

@@ -26,8 +26,9 @@ const SCROLL_DIFFERENCE := 48.0
var can_diff := true
# guzlad: old Special scrolling variables kept for reference purposes
static var sp_screen_scroll := false
static var sp_scroll_style := 1
#static var sp_scroll_style := 1
var sp_scrolling := false
@@ -35,6 +36,7 @@ func _exit_tree() -> void:
cam_locked = false
func _physics_process(delta: float) -> void:
sp_screen_scroll = Settings.file.visuals.smbs_scroll > 0
handle_camera(delta)
last_position = global_position
@@ -127,11 +129,13 @@ func do_sp_scroll(direction := 1) -> void:
process_mode = Node.PROCESS_MODE_ALWAYS
get_tree().paused = true
var distance = get_viewport().get_visible_rect().size.x - 32
if sp_scroll_style == 0:
if Settings.file.visuals.smbs_scroll == 1: #Sharp X1 (smooth)
var tween = create_tween()
tween.tween_property(self, "camera_position:x", camera_position.x + (distance * direction), 1)
await tween.finished
else:
else: #PC-8801 (black screen)
if Settings.file.visuals.transition_animation:
Global.get_node("Transition").get_node("TransitionBlock").modulate.a = 1
Global.get_node("Transition").show()
await get_tree().create_timer(0.5).timeout
camera_position.x += distance * direction

View File

@@ -33,5 +33,7 @@ func update() -> void:
offset.y = -(sprite_frames.get_frame_texture(animation, frame).get_height() / 2.0)
func on_animation_changed() -> void:
if sprite_frames.has_animation(animation) == false and Player.ANIMATION_FALLBACKS.has(animation):
play(Player.ANIMATION_FALLBACKS[animation])
var fallback = animation
while not sprite_frames.has_animation(fallback) and Player.ANIMATION_FALLBACKS.has(fallback):
fallback = Player.ANIMATION_FALLBACKS[fallback]
play(fallback)

View File

@@ -41,6 +41,9 @@ func resource_pack_loaded(new_value := []) -> void:
func colourful_pipes_changed(new_value := 0) -> void:
Settings.file.visuals.colour_pipes = new_value
func smbs_scroll_changed(new_value := 0) -> void:
Settings.file.visuals.smbs_scroll = new_value
func visible_timers_changed(new_value := 0) -> void:
Settings.file.visuals.visible_timers = new_value
@@ -69,6 +72,7 @@ func set_value(value_name := "", value = null) -> void:
"resource_packs": resource_pack_loaded,
"bridge_animation": bridge_changed,
"transition_animation": transform_style_changed,
"smbs_scroll": smbs_scroll_changed,
"colour_pipes": colourful_pipes_changed,
"firebar_style": firebar_style_changed,
"extra_particles": extra_particles

View File

@@ -60,7 +60,10 @@ func frame_limit_changed(new_value := 0) -> void:
Settings.file.video.frame_limit = new_value
func set_window_size(value := []) -> void:
# nabbup: Recenter resized window on launch
var newpos = get_window().position - Vector2i((value[0]-get_window().size.x), (value[1]-get_window().size.y))/2
get_window().size = Vector2(value[0], value[1])
get_window().position = newpos
func set_value(value_name := "", value = null) -> void:
{