Hi guys, if you didn’t know I’m making a game … about robots over here I’ll be posting art, code.. but not lore … no spoilers ![]()
So the idea of my game is a Metroidvania where u have a gun and u PEW-PEW Enemies…
![]()
Idk…
Ohh yeah, I forgot to mention the main villain is a parasite…
Cool!!!
Are there swamps?
Yep, that’s what the green area on the map represents.
are you going to be adding symbols for the map?(like abilities, locks, and keys(locks and keys is just what I’m calling rooms you need something too get to))
Yeah, the map we have here is just a simple version, but it’s a great starting point!
So far I’ve made the Auto-load code which is also connected to my player code.
extends Node2D
This will store the player’s position and abilities
var player_position: Vector2 = Vector2(0, 0) # Starting position (x, y)
var has_ability: bool = false # Does the player have an ability?
Reference to the actual player node
var player_node: Node2D = null
Called when the autoload is initialized
@onready var player_scene = preload(“res://Scene Folder/player.tscn”) # Adjust to your player scene path
func _ready():
Check if we are in the gameplay scene and instantiate the player there
if get_tree().current_scene.name == “GameScene”: # Make sure it’s the gameplay scene
if player_node == null:
player_node = player_scene.instantiate()
get_tree().current_scene.add_child(player_node) # Add the player to the current scene
# Set player position from stored data (only if needed)
player_node.position = player_position
Updates the player’s position (if needed)
func set_player_position(new_position: Vector2):
player_position = new_position
if player_node:
player_node.position = new_position
Updates the player’s ability status
func set_player_ability(has_ability_status: bool):
has_ability = has_ability_status
extends CharacterBody2D
@export var walk_speed = 50
@export var run_speed = 100
@export_range(0,1) var acceleration = 0.1
@export_range(0,1) var deceleration = 0.1
@export var jump_force = -267
@export_range(0,1) var decelerate_on_jump_release = 0.5
@export var dash_speed = 300
@export var dash_max_distance = 50
@export var dash_curve : Curve
@export var dash_cooldown = 1.0
@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D
@onready var dash_player: AudioStreamPlayer = $DashPlayer
@onready var jump_sound: AudioStreamPlayer = $JumpSound
@onready var run_sound: AudioStreamPlayer = $RunSound
var is_dashing = false
var dash_start_position = 0
var dash_direction = 0
var dash_timer = 0
Renamed the method to avoid conflict with the built-in position property
func set_player_position(new_position: Vector2) → void:
position = new_position # Update the player’s position globally
func set_ability(has_ability: bool) → void:
Example ability logic: You can add ability-related code here
if has_ability:
Enable some ability (e.g., unlock a special move)
pass
else:
Disable ability
pass
func _physics_process(delta: float) → void:
Add the gravity.
if not is_on_floor():
velocity += get_gravity() * delta
# Handle jump.
if Input.is_action_just_pressed("jump") and (is_on_floor() or is_on_wall()):
velocity.y = jump_force
jump_sound.play()
if Input.is_action_just_released("jump") and velocity.y < 0:
velocity.y *= decelerate_on_jump_release
# Flip the character
# And also the directional movment.
var direction := Input.get_axis("left", "right")
# Flip the character
if direction > 0:
animated_sprite_2d.flip_h = false
elif direction < 0:
animated_sprite_2d.flip_h = true
# Player animations
if is_on_floor():
if direction == 0:
animated_sprite_2d.play("idle")
else:
animated_sprite_2d.play("run")
else:
animated_sprite_2d.play("jump")
# I Show Speed
var speed
if Input.is_action_pressed("run"):
speed = run_speed
else:
speed = walk_speed
if direction:
velocity.x = move_toward(velocity.x, direction * speed, speed * acceleration)
else:
velocity.x = move_toward(velocity.x, 0, walk_speed * deceleration)
# I Show Dash
if Input.is_action_just_pressed("dash") and direction and not is_dashing and dash_timer <= 0:
is_dashing = true
dash_start_position = position.x
dash_direction = direction
dash_timer = dash_cooldown
# I am DASH
if is_dashing:
dash_player.play()
animated_sprite_2d.play("dash")
var current_distance = abs(position.x - dash_start_position)
if current_distance >= dash_max_distance or is_on_wall():
is_dashing = false
else:
velocity.x =dash_direction * dash_speed * dash_curve.sample(current_distance / dash_max_distance)
velocity.y = 0
if dash_timer > 0:
dash_timer -= delta
move_and_slide()
The GUI I currently have sucks I know.
Strong stuff you’ve got here art-wise!
Any GDD or plans for how the game will play, or the main mechanics?
(post deleted by author)
I’m building the demo first so I can see if the idea works.
Core mechanics so far: shooting, recoil movement, platforming, and enemies that react to hits.
I don’t have a full GDD yet — I sketch ideas in my notebook and expand them as I build
Nice! I don’t use a GDD either, but I’ve found that a task tracker works well for my needs.
Those core mechanics seem pretty standard - what’s the unique mechanic that can set this game apart? It’s a metroidvania, so I’m guessing there’ll be unlockable abilities?


