SeeFerns

joined 5 months ago
[–] SeeFerns@programming.dev 2 points 1 week ago (1 children)

What’s the deal with the engine? I know they used impact right?

[–] SeeFerns@programming.dev 4 points 1 week ago

This looks awesome! Cross Code was so damn good

[–] SeeFerns@programming.dev 3 points 1 week ago

Thanks friend :D

[–] SeeFerns@programming.dev 4 points 1 week ago (2 children)

Good idea, I can probably finish this prototype and spend like a few hours just porting it over to v4.4 for a quick test. I haven''t noticed a ton of differences so far for something so simple, and this prototype is going to be very very small and simple.

Oh that is good to hear! I haven't messed with the exporting process yet but I've heard its pretty darn simple. Love2D's process was pretty straightforward for most platforms but had a few quirks for sure.

Pixelorama is my jam! Lol I didn't love the UI of libresprite so I poked around a few months ago and found it and immediately fell in love haha. Unforunately, this will be the first project where I want to try and dip my toe into vector art so I'm going to test out gimp soon once I feel like I have a game idea worth pursuing. Hopefully this prototype is the one

[–] SeeFerns@programming.dev 4 points 2 weeks ago (4 children)

Totally fair point. Idk I’m conflicted because I worry that Godot 4 doesn’t have amazing performance for lower end hardware.

I mess with portmaster on some anbernic devices that I’d love to play my game on. However, using v4 to make games for them doesn’t seem feasible.

I’m sure some people could get it running well some how, maybe using some unique export templates to really strip things down too, but I don’t know if I’m savvy enough to figure it out lol

[–] SeeFerns@programming.dev 4 points 2 weeks ago

Oh, good idea. I probably won't need several differently-seeded rngs. I can't imagine in this project when I'd need that.

[–] SeeFerns@programming.dev 6 points 2 weeks ago (1 children)

Oh hey, this works lol in godot 3, its just 'onready' instead of '@onready' thanks!

[–] SeeFerns@programming.dev 6 points 2 weeks ago (6 children)

Done, thanks for letting me know about that.

[–] SeeFerns@programming.dev 8 points 2 weeks ago

Hey there, I wanted open gl 2 support.

I have and like to use some pretty old and low powered stuff so its nice to have that. Also, its a smaller export which I also like. Idk, I might be being stupid here but whatever its just a quick prototype!

 

I'm mostly concerned about if I'm understanding how Godot does things. I'm coming from Love2D and so messing a lot with the GUI has been a new workflow for me completely. Please disregard the absolute mess that my code is, I'm trying to get through things quickly and not necessarily cleanly. Also, I know I don't need to add 'pass' all the time, I just like the pink visual cue that my function is over, sorta like Lua lol.

extends Node2D

var rng:= RandomNumberGenerator.new()

onready var arrow_left: Node2D = $ArrowLeft
onready var arrow_up: Node2D = $ArrowUp
onready var arrow_right: Node2D = $ArrowRight
onready var score_label: Label = $Control/ScoreLabel
onready var health_label: Label = $Control/HealthLabel

var arrow:PackedScene = preload("res://Arrow.tscn")

var arrows: Array = []
var score: int = 0
var health: float = 100.0
var in_left: bool = false
var in_up: bool = false
var in_right: bool = false
var left_pos: float = 0.0
var up_pos: float = 0.0
var right_pos: float = 0.0
var current_left_arrow: Node2D = null
var current_up_arrow: Node2D = null
var current_right_arrow: Node2D = null


func _ready() -> void:
	rng.randomize()
	
	var window_width: float = get_viewport().size.x
	var window_height: float = get_viewport().size.y
	var left_arrow_pos: float = window_width * 0.3
	var up_arrow_pos: float = window_width * 0.5
	var right_arrow_pos: float = window_width * 0.7
	var arrows_height: float = window_height * 0.9
	
	left_pos = left_arrow_pos
	up_pos = up_arrow_pos
	right_pos = right_arrow_pos
	
	arrow_left.position.x = left_arrow_pos
	arrow_left.position.y = arrows_height
	arrow_up.position.x = up_arrow_pos
	arrow_up.position.y = arrows_height
	arrow_right.position.x = right_arrow_pos
	arrow_right.position.y = arrows_height
	pass


func _process(delta) -> void:
	score_label.text = "Score: " + str(score)
	health_label.text = "Health: " + str(health)

	if Input.is_action_just_pressed("left") and in_left and current_left_arrow:
		increase_score()
		arrows.erase(current_left_arrow)
		current_left_arrow.queue_free()
		current_left_arrow = null
		in_left = false

	if Input.is_action_just_pressed("up") and in_up and current_up_arrow:
		increase_score()
		arrows.erase(current_up_arrow)
		current_up_arrow.queue_free()
		current_up_arrow = null
		in_up = false

	if Input.is_action_just_pressed("right") and in_right and current_right_arrow:
		increase_score()
		arrows.erase(current_right_arrow)
		current_right_arrow.queue_free()
		current_right_arrow = null
		in_right = false

	for i in arrows.duplicate():  #supposedly safe iteration?
		i.position.y += 3
		if i.position.y > 540:
			health -= 10
			arrows.erase(i)
			i.queue_free()

	if health <= 0:
		get_tree().change_scene("res://GameOver.tscn")
	if score >= 5:
		get_tree().change_scene("res://ChoosePath.tscn")

	pass


func _on_CreateArrowTimer_timeout() -> void:

	var arrow_instance = arrow.instance()
	var arrow_pos = get_rand_arrow_pos()
	if arrow_pos == 1:
		arrow_instance.position.x = left_pos
	elif arrow_pos == 2:
		arrow_instance.position.x = up_pos
	elif arrow_pos == 3:
		arrow_instance.position.x = right_pos
	arrows.append(arrow_instance)
	arrow_instance.position = Vector2(arrow_instance.position.x, 0)
	add_child(arrow_instance)
	pass


func increase_score() -> void:
	score += 1
	pass


func _on_LeftArea2D_area_entered(area: Area2D) -> void:
	if area.is_in_group("arrow"):
		in_left = true
		current_left_arrow = area.get_parent()  #get the full arrow Node2D to use for deletion
	pass
func _on_LeftArea2D_area_exited(area: Area2D) -> void:
	if area.is_in_group("arrow"):
		in_left = false
		current_left_arrow = null
	pass

func _on_UpArea2D_area_entered(area: Area2D) -> void:
	if area.is_in_group("arrow"):
		in_up = true
		current_up_arrow = area.get_parent()
	pass
func _on_UpArea2D_area_exited(area: Area2D) -> void:
	if area.is_in_group("arrow"):
		in_up = false
		current_up_arrow = null
	pass
	
func _on_RightArea2D_area_entered(area: Area2D) -> void:
	if area.is_in_group("arrow"):
		in_right = true
		current_right_arrow = area.get_parent()
	pass
func _on_RightArea2D_area_exited(area: Area2D) -> void:
	if area.is_in_group("arrow"):
		in_right = false
		current_right_arrow = null
	pass


func get_rand_arrow_pos() -> int:
	return rng.randi_range(1,3)
	pass

I'm not sure if the way I'm doing number randomization is correct and if using duplicate() truly is the right way to remove things from the array. Is it truly deleting the node in the array? Lastly, why can't I seem to get the window size as a script-wide variable? It seems like I can only do so inside the ready function. Thanks!

edit: Code has been properly formatted, sorry!

edit2: From what I can tell this is the right way to remove objects by iterating over the array in reverse

	for a in arrows:
		a.position.y += 300 * delta

	for i in range(arrows.size() - 1, -1, -1):  #iterate safely by going backwards
		var a = arrows[i]
		if a.position.y > 540:
			health -= 10
			arrows.remove(i)
			a.queue_free()

I split up the movement code into its own for loop and then moved the deletion code into the reverse loop.

[–] SeeFerns@programming.dev 1 points 2 weeks ago (1 children)

I appreciate that! I’m in the states unfortunately

[–] SeeFerns@programming.dev 2 points 2 weeks ago (3 children)

Thanks for the write up! It honestly sounds like it’s be fine for me. My iPhone is already extremely bare and stripped down. I barely use the camera too, so like, idk I don’t feel like I’d be missing much?

If I could buy a super cheap used one for testing, I’d do it. I’m waiting for my iPhone SE to die on me anyways before making the switch.

[–] SeeFerns@programming.dev 25 points 2 weeks ago (8 children)

I really want to try a pinephone or something with Ubuntu touch. It’s likely not daily driver ready but I’m still curious at how far along it is.

 

Please feel free to lmk if this isn’t the right place to be asking.

I can’t seem to find any other laptops that use a similar rubberized coating to what the thinkpads have. Do any exist out there?

I think the thinkpads are great but I don’t care for the trackpoint.

Thanks!

 

Really hating all the crap being put into VS code and want a switch.

Im mostly working in C and some Python/Lua and just want to know if I can get parameter hints the same way I do in VS code. It’s a bummer to have to peek at the docs every time I forget what parameters something takes.

I like lightweight programs so Kate is my first thought but if it does t I’ll just go to Kdevelop. Currently using Geany for my really small projects or tests.

Bonus question, if I’m using raylib for game dev, how would those hints work (if at all) in Kate? If Kate is using an LSP for autocompletion, how would that work for a library like Raylib? Sorry I’ve never actually considered this all before now!

Thanks all

37
submitted 4 months ago* (last edited 4 months ago) by SeeFerns@programming.dev to c/gaming@beehaw.org
 

Is the Lemur better or Framework 13 a better fit for gaming?

I’m not triple a gaming, but playing up to like, Skyrim would be nice.

EDIT: Thanks for the replies everyone! I read them all and upvoted you all because they were truly helpful.

Looks like FW is the clear winner! I also use GIS software for work stuff/self teaching and so graphics capabilities are pretty important for me.

Thanks again everyone, y’all are the best!

 

Not associated in any way, just taking part and wanted to let other devs know about this fun weekend game jam. Check it out if you have the time

https://alakajam.com/

view more: next ›