added the game

This commit is contained in:
JHDev2006
2025-09-13 16:30:32 +01:00
parent 5ef689109b
commit 3773bdaf64
3616 changed files with 263702 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
extends PowerUpItem
func collect_item(_player: Player) -> void:
AudioManager.play_sfx("clock_get", global_position)
$Label/AnimationPlayer.play("Appear")
Global.time = clamp(Global.time + 100, 0, 999)
Global.score += 1000

View File

@@ -0,0 +1 @@
uid://dryofl8epgget

View File

@@ -0,0 +1,29 @@
extends Node2D
const COIN_SPARKLE = preload("res://Scenes/Prefabs/Particles/CoinSparkle.tscn")
@export var spinning_coin_scene: PackedScene = null
signal collected
func area_entered(area: Area2D) -> void:
if area.owner is Player:
collect()
func collect() -> void:
collected.emit()
Global.coins += 1
DiscoLevel.combo_meter += 10
Global.score += 200
AudioManager.play_sfx("coin", global_position)
queue_free()
func summon_block_coin() -> void:
var node = spinning_coin_scene.instantiate()
node.global_position = global_position
add_sibling(node)
queue_free()
func summon_particle() -> void:
var node = COIN_SPARKLE.instantiate()
node.global_position = global_position
add_sibling(node)

View File

@@ -0,0 +1 @@
uid://cexcll4frt0t6

View File

@@ -0,0 +1,34 @@
class_name FireBall
extends CharacterBody2D
const CHARACTERS := ["Mario", "Luigi", "Toad", "Toadette"]
var character := "Mario"
var direction := 1
const FIREBALL_EXPLOSION = preload("res://Scenes/Prefabs/Particles/FireballExplosion.tscn")
const MOVE_SPEED := 220
func _physics_process(delta: float) -> void:
$Sprite.scale.x = direction
$Sprite/Animation.speed_scale = direction * 2
velocity.x = MOVE_SPEED * direction
velocity.y += (15 / delta) * delta
velocity.y = clamp(velocity.y, -INF, 150)
if is_on_floor():
velocity.y = -150
if is_on_wall() or is_on_ceiling():
hit()
move_and_slide()
func hit(play_sfx := true) -> void:
if play_sfx:
AudioManager.play_sfx("bump", global_position)
summon_explosion()
queue_free()
func summon_explosion() -> void:
var node = FIREBALL_EXPLOSION.instantiate()
node.global_position = global_position
add_sibling(node)

View File

@@ -0,0 +1 @@
uid://yh4pop7sm56c

View File

@@ -0,0 +1,4 @@
extends PowerUpItem
func play_sfx() -> void:
AudioManager.play_sfx("hachisuke", global_position)

View File

@@ -0,0 +1 @@
uid://bb01xttxcem1c

View File

@@ -0,0 +1,25 @@
class_name Hammer
extends Node2D
var velocity := Vector2(0, -200)
var direction := -1
func _ready() -> void:
$Sprite.flip_h = direction == 1
$Animations.speed_scale = -direction
velocity.x = 120 * direction
if Settings.file.audio.extra_sfx == 1:
AudioManager.play_sfx("hammer_throw", global_position)
func _physics_process(delta: float) -> void:
global_position += velocity * delta
velocity.y += (Global.entity_gravity / delta) * delta
velocity.y = clamp(velocity.y, -INF, Global.entity_max_fall_speed)
func flag_die() -> void:
queue_free()
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
area.owner.damage()

View File

@@ -0,0 +1 @@
uid://s1utdly4mtbi

View File

@@ -0,0 +1,8 @@
extends PowerUpItem
func _physics_process(delta: float) -> void:
pass
func on_player_entered(player: Player) -> void:
player.hammer_get()
queue_free()

View File

@@ -0,0 +1 @@
uid://vhxup1pn2v8q

View File

@@ -0,0 +1,18 @@
class_name KeyItem
extends Node2D
static var total_collected := 0
const SMOKE_PARTICLE = preload("uid://d08nv4qtfouv1")
func _ready() -> void:
$AnimationPlayer.play("Float")
func collected() -> void:
total_collected += 1
AudioManager.play_sfx("key_collect", global_position)
summon_smoke_particle()
queue_free()
func summon_smoke_particle() -> void:
var node = SMOKE_PARTICLE.instantiate()
node.global_position = global_position
add_sibling(node)

View File

@@ -0,0 +1 @@
uid://cjgbt7iof66j0

View File

@@ -0,0 +1,51 @@
class_name PowerUpItem
extends CharacterBody2D
signal collected
@export var power_up_state := "Big"
var direction := 1
signal physics_tick(delta: float)
const player_angles := [Vector2(-1, -1), Vector2(1, -1), Vector2(-0.5, -2), Vector2(0.5, -2)]
func _physics_process(delta: float) -> void:
physics_tick.emit(delta)
func collect_item(player: Player) -> void:
collected.emit()
player.get_power_up(power_up_state)
queue_free()
func player_multiplayer_launch_spawn(player: Player) -> void:
global_position.y -= 8
velocity = 100 * player_angles[player.player_id]
direction = sign(velocity.x)
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
collect_item(area.owner)
func block_bounce_up() -> void:
velocity.y = -200
func block_dispense_tween() -> void:
var old_z = z_index
z_index = -2
show()
reset_physics_interpolation()
AudioManager.play_sfx("item_appear", global_position)
set_physics_process(false)
set_process(false)
global_position.y += 8
var time := 1
var tween = create_tween().tween_property(self, "position:y", position.y - 15, time)
await tween.finished
if get_parent().get_parent() is TrackRider:
reparent(get_parent().get_parent().get_parent())
reset_physics_interpolation()
velocity.y = 0
set_physics_process(true)
set_process(true)
z_index = old_z

View File

@@ -0,0 +1 @@
uid://cjkurwybsaywm

View File

@@ -0,0 +1,33 @@
extends Node2D
@export var id := 0
var already_collected := false
const COLLECTION_SFXS := [preload("uid://drr1qqeuhmv6m"), preload("uid://de1tktivtggdv"), preload("uid://cdtlca36qsba5"), preload("uid://dd47k4c5sypwp"), preload("uid://chi2nogc2op4i")]
const SPINNING_RED_COIN = preload("res://Scenes/Prefabs/Entities/Items/SpinningRedCoin.tscn")
func _ready() -> void:
if ChallengeModeHandler.is_coin_collected(id):
already_collected = true
$Sprite.play("Collected")
set_visibility_layer_bit(0, false)
func on_player_entered(_player: Player) -> void:
collected()
func collected() -> void:
if already_collected:
AudioManager.play_sfx("coin", global_position, 2)
else:
AudioManager.play_sfx(COLLECTION_SFXS[ChallengeModeHandler.red_coins], global_position)
ChallengeModeHandler.red_coins += 1
Global.score += 200
ChallengeModeHandler.set_value(id, true)
queue_free()
func summon_bounced_coin() -> void:
var node = SPINNING_RED_COIN.instantiate()
node.id = id
node.global_position = global_position + Vector2(0, 8)
add_sibling(node)
queue_free()

View File

@@ -0,0 +1 @@
uid://xwq5ac650e76

View File

@@ -0,0 +1,11 @@
extends PowerUpItem
func _ready() -> void:
power_up_state = Global.stored_item
global_position = get_viewport().get_camera_2d().get_screen_center_position() + Vector2(4, -96)
AudioManager.play_global_sfx("item_appear")
Global.stored_item = ""
reset_physics_interpolation()
func _physics_process(delta: float) -> void:
global_position.y += 48 * delta

View File

@@ -0,0 +1 @@
uid://bbeh6dsp1hpan

View File

@@ -0,0 +1,20 @@
extends Node2D
const COIN_SPARKLE = preload("res://Scenes/Prefabs/Particles/CoinSparkle.tscn")
var velocity := Vector2(0, -300)
func _ready() -> void:
Global.coins += 1
Global.score += 200
AudioManager.play_sfx("coin", global_position)
func _physics_process(delta: float) -> void:
global_position += velocity * delta
velocity.y += (15 / delta) * delta
func vanish() -> void:
queue_free()
func summon_particle() -> void:
var node = COIN_SPARKLE.instantiate()
node.global_position = global_position
add_sibling(node)

View File

@@ -0,0 +1 @@
uid://dixhffcqfnyku

View File

@@ -0,0 +1,28 @@
extends Node2D
var velocity := Vector2(0, -300)
var id := 0
const collection_sounds := [preload("uid://drr1qqeuhmv6m"), preload("uid://de1tktivtggdv"), preload("uid://cdtlca36qsba5"), preload("uid://dd47k4c5sypwp"), preload("uid://chi2nogc2op4i")]
var already_collected := false
func _ready() -> void:
already_collected = ChallengeModeHandler.is_coin_collected(id)
if already_collected == false:
ChallengeModeHandler.red_coins += 1
AudioManager.play_sfx(collection_sounds[ChallengeModeHandler.red_coins - 1], global_position)
else:
set_visibility_layer_bit(0, false)
AudioManager.play_sfx("coin", global_position, 2)
$Sprite.play("Collected")
Global.score += 200
ChallengeModeHandler.set_value(id, true)
func _physics_process(delta: float) -> void:
global_position += velocity * delta
velocity.y += (15 / delta) * delta
func vanish() -> void:
queue_free()

View File

@@ -0,0 +1 @@
uid://bmi5fmguqbdyh

View File

@@ -0,0 +1,27 @@
extends PowerUpItem
const MOVE_SPEED := 65
func _physics_process(delta: float) -> void:
$BasicEnemyMovement.handle_movement(delta)
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
if has_meta("is_poison"):
area.owner.damage()
queue_free()
elif has_meta("is_oneup"):
give_life(area.owner)
else:
collect_item(area.owner)
func give_life(_player: Player) -> void:
DiscoLevel.combo_amount += 1
AudioManager.play_sfx("1_up", global_position)
if Global.current_game_mode == Global.GameMode.CHALLENGE or Settings.file.difficulty.inf_lives:
Global.score += 2000
$ScoreNoteSpawner.spawn_note(2000)
else:
$ScoreNoteSpawner.spawn_one_up_note()
Global.lives += 1
queue_free()

View File

@@ -0,0 +1 @@
uid://dlrdjo1ksvp7q

View File

@@ -0,0 +1,13 @@
extends PowerUpItem
@export var star_bgm: AudioStream = null
func _physics_process(delta: float) -> void:
$BasicEnemyMovement.handle_movement(delta)
func collect_item(player: Player) -> void:
collected.emit()
player.super_star()
AudioManager.play_sfx("power_up", global_position)
AudioManager.set_music_override(AudioManager.MUSIC_OVERRIDES.STAR, 1, false)
queue_free()

View File

@@ -0,0 +1 @@
uid://dbeg86pjflojw

View File

@@ -0,0 +1,78 @@
class_name Vine
extends Node2D
@export var top_point := -256
const SPEED := 32.0
@onready var collision: CollisionShape2D = $Hitbox/Collision
@onready var visuals: NinePatchRect = $Visuals
@onready var hitbox: Area2D = $Hitbox
@export var cutscene = false
@export var can_tele := true
var can_stop := true
signal stopped
func _ready() -> void:
global_position.y -= 1
if cutscene:
do_cutscene()
func do_cutscene() -> void:
for i in get_tree().get_nodes_in_group("Players"):
i.global_position = global_position + Vector2(0, 24)
i.hide()
i.state_machine.transition_to("Freeze")
await stopped
for i: Player in get_tree().get_nodes_in_group("Players"):
i.show()
for x in [1, 2]:
i.set_collision_mask_value(x, false)
i.state_machine.transition_to("Climb", {"Vine" = self, "Cutscene" = true})
var climb_state = i.get_node("States/Climb")
climb_state.climb_direction = -1
await get_tree().create_timer(1.5, false).timeout
i.direction = -1
climb_state.climb_direction = 0
await get_tree().create_timer(0.5, false).timeout
i.state_machine.transition_to("Normal")
for x in [1, 2]:
i.set_collision_mask_value(x, true)
func _physics_process(delta: float) -> void:
if global_position.y >= top_point:
global_position.y -= SPEED * delta
visuals.size.y += SPEED * delta
collision.shape.size.y += SPEED * delta
collision.position.y += (SPEED / 2) * delta
elif can_stop:
can_stop = false
stopped.emit()
handle_player_interaction(delta)
$WarpHitbox/CollisionShape2D.set_deferred("disabled", global_position.y > top_point)
func handle_player_interaction(delta: float) -> void:
for i in hitbox.get_overlapping_areas():
if i.owner is Player:
if Global.player_action_pressed("move_up", i.owner.player_id) and i.owner.state_machine.state.name == "Normal":
i.owner.state_machine.transition_to("Climb", {"Vine": self})
elif i.owner.state_machine.state.name == "Climb" and global_position.y >= top_point:
i.owner.global_position.y -= SPEED * delta
func on_player_entered(_player: Player) -> void:
if can_tele == false:
return
Level.in_vine_level = true
Level.vine_return_level = Global.current_level.scene_file_path
Global.transition_to_scene(Level.vine_warp_level)
func on_area_exited(area: Area2D) -> void:
if area.owner is Player:
if area.owner.state_machine.state.name == "Climb":
area.owner.state_machine.transition_to("Normal")

View File

@@ -0,0 +1 @@
uid://cxtvy2qolon2f

View File

@@ -0,0 +1,30 @@
extends CharacterBody2D
var gave_points := false
func _ready() -> void:
AudioManager.play_sfx("item_appear", global_position)
velocity.y = -150
$Egg.play(["Green", "Yellow", "Red", "Blue"][Global.level_num - 1])
$Yoshi.play(["Green", "Yellow", "Red", "Blue"][Global.level_num - 1])
await get_tree().create_timer(1.5, false).timeout
ChallengeModeHandler.set_value(ChallengeModeHandler.CoinValues.YOSHI_EGG, true)
func _physics_process(delta: float) -> void:
velocity.y += (Global.entity_gravity / delta) * delta
velocity.y = clamp(velocity.y, -INF, Global.entity_max_fall_speed)
move_and_slide()
func show_smoke() -> void:
gave_points = true
var smoke = preload("res://Scenes/Prefabs/Particles/SmokeParticle.tscn").instantiate()
smoke.scale = Vector2(2, 2)
smoke.global_position =global_position
add_sibling(smoke)
$ScoreNoteSpawner.spawn_note(5000)
queue_free()
func _exit_tree() -> void:
if gave_points == false:
ChallengeModeHandler.set_value(ChallengeModeHandler.CoinValues.YOSHI_EGG, true)
Global.score += 5000

View File

@@ -0,0 +1 @@
uid://c0c5ctrmxhpk7