Godot

6010 readers
28 users here now

Welcome to the programming.dev Godot community!

This is a place where you can discuss about anything relating to the Godot game engine. Feel free to ask questions, post tutorials, show off your godot game, etc.

Make sure to follow the Godot CoC while chatting

We have a matrix room that can be used for chatting with other members of the community here

Links

Other Communities

Rules

We have a four strike system in this community where you get warned the first time you break a rule, then given a week ban, then given a year ban, then a permanent ban. Certain actions may bypass this and go straight to permanent ban if severe enough and done with malicious intent

Wormhole

!roguelikedev@programming.dev

Credits

founded 2 years ago
MODERATORS
401
402
 
 
403
 
 

This is a spot where you can ask anything that you feel doesn't deserve its own post, no matter how small or simple it is!

404
 
 

Going into some more depth on making the new features and the troubles I faced along the way, while giving advice to future projects looking to try the same thing.

Also, I announced in the blog post that GodotOS will be open source when it releases! Look forward to it.

405
14
Godot Weekly #15 (godot-weekly.curated.co)
406
 
 

Solution: I removed the else statement from the integrated_forces process and left the two lines from the condition within the process and it fixed it :) Before:

func _integrate_forces(state):
	if Input.is_action_pressed("move_up"):
		state.apply_force(thrust.rotated(rotation))
	if Input.is_action_pressed("strafe_left"):
		state.apply_force(thrust.rotated(rotation + 4.712))
	if Input.is_action_pressed("strafe_right"):
		state.apply_force(thrust.rotated(rotation + 1.5708))
	if Input.is_action_pressed("move_down"):
		state.apply_force((thrust.rotated(rotation) * -1))
	else:
		state.apply_force(Vector2())
		Globals.player_rotation = rotation

After:

func _integrate_forces(state):
	if Input.is_action_pressed("move_up"):
		state.apply_force(thrust.rotated(rotation))
	if Input.is_action_pressed("strafe_left"):
		state.apply_force(thrust.rotated(rotation + 4.712))
	if Input.is_action_pressed("strafe_right"):
		state.apply_force(thrust.rotated(rotation + 1.5708))
	if Input.is_action_pressed("move_down"):
		state.apply_force((thrust.rotated(rotation) * -1))
	state.apply_force(Vector2())
	Globals.player_rotation = rotation

Hey guys, making some progress on this game but having a weird issue and I can't figure out what's happening. I'm instancing a ship scene into the level scene based on player selection. Weapon projectile instancing happens in the level scene. Fixed weapons shoot straight forward and this works fine as I'm moving and rotating until I hold the key to move backward, then all of the shots continue firing in the same direction I was facing when I started holding the key. Video example. This was all working fine prior to instancing the player into the scene. Here's the code I'm working with (please disregard the messy code lol).

level.gd:

extends Node2D
class_name LevelParent

var selected_ship = Globals.player_selected_ship
var format_ship_resource_path = "res://scenes/ships/ship_%s.tscn"
var ship_resource_path = format_ship_resource_path % selected_ship

var laser_scene: PackedScene = preload("res://scenes/weapons/laser.tscn")

func _ready():
	var ship_scene = load(ship_resource_path)
	var ship = ship_scene.instantiate()
	$Player.add_child(ship)
	ship.connect("shoot_fixed_weapon", _shoot_fixed_weapon)
	ship.connect("shoot_gimbal_weapon", _shoot_gimbal_weapon)
	
func _shoot_gimbal_weapon(pos,direction):
	var laser = laser_scene.instantiate() as Area2D
	laser.position = pos
	laser.rotation_degrees = rad_to_deg(direction.angle()) + 90
	laser.direction = direction
	$Projectiles.add_child(laser)
	
func _shoot_fixed_weapon(pos, direction):
	var laser = laser_scene.instantiate() as Area2D
	laser.position = pos
	laser.rotation_degrees = rad_to_deg(Globals.player_rotation)
	Globals.fixed_hardpoint_direction = Vector2(cos(Globals.player_rotation),sin(Globals.player_rotation))
	laser.direction = Globals.fixed_hardpoint_direction.rotated(-1.5708)
	$Projectiles.add_child(laser)

ship_crescent.gd:

extends ShipTemplate


var can_boost: bool = true

#Weapons variables
var can_shoot: bool = true
#hardpoint type should use 0=fixed, 1=gimbal, 2=turret
#later add ability to have mixed hardpoints
var hardpoint_type: int = 0

#Signals
signal shoot_gimbal_weapon(pos,direction)
signal shoot_fixed_weapon(pos,direction)

func _ready():
	Globals.boost_max = boost_max

func _process(delta):
	Globals.player_pos = global_position
	#Build out section to target planetary bodies/NPCs/etc for auto routing
	if Input.is_action_just_pressed("get_cords"):
		print(str(Globals.player_pos))
	#weapon aiming toggle, remove later after hardpoints developed
	if Input.is_action_just_pressed("gimbal_toggle"):
		if hardpoint_type == 0:
			hardpoint_type += 1
		else:
			hardpoint_type -= 1
		
	if can_boost == false:
		_boost_recharge(boost_regen*delta)
		print("boost max: " + str(boost_max))
		print("boost regen: " + str(boost_regen))
		print("global boost level: " + str(Globals.boost_level))
		if Globals.boost_level == boost_max:
			can_boost = true
			print("can boost: Boost recharged!")
	### WEAPONS ###
	#Remove LaserTimer when weapon modules are set up
	
	#Fixed weapon code
	var player_direction = (Globals.player_pos - $FixedHardpointDirection.position).normalized()
	if Input.is_action_just_pressed("fire_primary") and can_shoot and Globals.laser_ammo > 0 and hardpoint_type == 0:
		Globals.laser_ammo -= 1
		var hardpoint_positions = $HardpointPositions.get_children()
		can_shoot = false
		$Timers/LaserTimer.start()
		for i in hardpoint_positions:
			print("ship shot fired")
			shoot_fixed_weapon.emit(i.global_position, player_direction)
	#Gimbal weapon code
	var gimbal_direction = (get_global_mouse_position() - position).normalized()
	if Input.is_action_just_pressed("fire_primary") and can_shoot and Globals.laser_ammo > 0 and hardpoint_type == 1:
		Globals.laser_ammo -= 1
		var hardpoint_positions = $HardpointPositions.get_children()
		can_shoot = false
		$Timers/LaserTimer.start()
		for i in hardpoint_positions:
			shoot_gimbal_weapon.emit(i.global_position, gimbal_direction)
	#Add turret (auto aim system) later

#Spaceflight physics based controls
func _integrate_forces(state):
	if Input.is_action_pressed("move_up"):
		state.apply_force(thrust.rotated(rotation))
	if Input.is_action_pressed("strafe_left"):
		state.apply_force(thrust.rotated(rotation + 4.712))
	if Input.is_action_pressed("strafe_right"):
		state.apply_force(thrust.rotated(rotation + 1.5708))
	if Input.is_action_pressed("move_down"):
		state.apply_force((thrust.rotated(rotation) * -1))
	else:
		state.apply_force(Vector2())
		Globals.player_rotation = rotation
	#REWORK boost mechanic. button hold (gradual) vs press (instant), increase cooldown, adjust boost length, add fuel/special requirements for use
	if Input.is_action_just_pressed("boost") and can_boost:
		can_boost = false
		Globals.boost_level = 0
		#$Timers/BoostRecharge.start()
		state.apply_impulse((thrust.rotated(rotation) * 2))
	var rotation_direction = 0
	if Input.is_action_pressed("turn_right"):
		rotation_direction += 1
	if Input.is_action_pressed("turn_left"):
		rotation_direction -= 1
	state.apply_torque(rotation_direction * torque)

#modify later to remove globals. Base boost data on ship equipment
func _boost_recharge(recharge_rate):
	Globals.boost_level = clamp(Globals.boost_level + recharge_rate, 0, boost_max)
	print(Globals.boost_level)

#Timer timeout functions
func _on_boost_timer_timeout():
	print("boost depleted")

func _on_boost_recharge_timeout():
	print("boost timer recharged!")
	can_boost = true

func _on_laser_timer_timeout():
	can_shoot = true
407
408
 
 

Hey everybody, what’s up? In this video, I will demonstrate how to harness the high performance of a GPU for generating fractal patterns and transforming them in real-time, which can be used for creating original effects in your game with minimal effort.

Many people, when they hear the term "fractal", automatically envision the Mandelbrot set. It's not surprising because it is one of the most famous fractal shapes and has gradually become practically synonymous with chaos theory. But what is it exactly, and how do we generate it?

409
 
 

Jam link: https://itch.io/jam/godot-wild-jam-63

Theme is Cats!

410
 
 

The original video creator has been running something where people vote on their favorite of the 5 in the comments. Figure it would be fun to run something similar here within programming.dev

I put the 5 games below along with some information on each if you dont want to watch the video right now

411
 
 

Hi everyone! This is the second part of the tutorial on how to create a library of useful functions for shaders in Godot. If you haven't seen the previous part, I highly recommend watching it first. The link is provided in the description of this video. In this part, we will add functions for rendering various types of simple objects that we can use to bring our shaders to life and make them more interesting.

412
 
 

I want to make an FPS controller that feels realistic, like when you move you really feel that your character has mass. In Unity I would've done that with RigidBody, but how do I do that in Godot 4.3.1 with CharacterBody3D? I know that RigidBody3D is not suitable for character controllers. May anyone show me the direction in which I shall dig?

413
414
 
 
  • Wrought Flesh
  • Satryn Deluxe
  • Pixelover
  • Astrominer
  • Run: The world in between
415
416
 
 

Good morning! Or afternoon or evening, depending on where you are in the world. Did you know that Godot allows you to create libraries of functions for shaders that you can later link to your shading language script without the need to copy and paste their code every time? We'll demonstrate this with a few simple examples, and then we’ll apply this knowledge to create another shader effect using the polar coordinates.

417
 
 
418
 
 

Great video comparing the built-in Godot physics to the Godot-Box2D and Godot-Rapier2D extensions.

If you've ever played around with 2D physics you'd know that Godot's implementation is... Really lacking and jittery. The two extensions are still relatively new so they're not as feature complete, but they're already a huge improvement. Cheers to https://appsinacup.com/ for creating both extensions.

See also the article: https://appsinacup.com/godot-physics-vs-box2d-vs-rapier2d/

419
 
 

Hi everybody! I'm back with another video for the collection of tutorials on game development in Godot Engine. This time, we won't be dealing with shaders or 3D models. Instead, I would like to focus on a possibly simpler but definitely no less important area in game development with the Godot Engine, and that is the user interface that would work correctly on every device and screen resolution. Let's get started.

420
 
 

Tool I found over on the godot discord

Builds your game and then lets you enter scripts to be run after it does so to do things like call butler to push it to itch

421
 
 
  • Manor of Mysteries
  • MetSys
  • 3D Pinball
  • Striving for Light
  • Exosoul
422
423
 
 

cross-posted from: https://infosec.pub/post/4337087

Here's a link to download

Really impressive for a first project in 2 weeks…

424
425
 
 

Hi again, friends of visual shaders! Maybe you remember that in previous videos that dealt with this topic, we were working only with fragments, and we were setting only the final color for pixels. This time, we'll finally get to a no less important function, which is responsible for modifying vertices and subsequently deforming the entire texture that the shader is applied to. As an example, I chose the implementation of a flag that ripples in the wind.

view more: ‹ prev next ›