Calling the game "Studio Sim" for now. art studio game? --Making Progress-- as FPS Game Jam Goes Underway!
some lads and i have agreed to do a game jam where we each work on our own game.
STUFF TO DO:
- make/hang paintings in intro scene
need nailgun - green button
- make 3 levels
made 15 - tune painting validation system
particle for sticking? maybe not
make jump animation
BUGS
- paitnings get thrown through walls
mostly fixed - scale the stamps
done - mouse gets stuck on html (probably due to pausing)
somewhat fixed - mirror
fixed
Screenshot 2025-12-08 at 11.50.47 AM.png
MAKE A FONT: https://fontstruct.com/
Screenshot 2025-12-09 at 6.44.52 PM.png
TUNE PAINTING VALIDATION SYSTEM
Screenshot 2025-12-09 at 8.14.20 PM.png
better:
Screenshot 2025-12-09 at 10.58.15 PM.png
ABILITY TO SAVE
done saves carryable paintings' position and rotation that fall off the wall in the room
Screenshot 2025-12-09 at 11.24.46 PM.png
ABILITY TO HANG PAINTINGS ON THE WALL
Make Nailgun done
Screenshot 2025-12-09 at 9.55.24 PM.png
add wood floor
done why? sidequest (more ghetto)
Screenshot 2025-12-09 at 10.02.43 PM.png
note to remove gun from studio. i dont want it to be that ghetto
Mirror Status: FIXED
Screenshot 2025-12-09 at 11.25.31 PM.png
i have to place it this far away from the wall otherwise the camera that is projecting the mirrors view onto the surface of the mirror will intercept sunlight from the other side of the wall. it causes the mirror to show 2 sunlights when it passes through the wall.
so i propped it up with some pallets
magic mirror on the wall
give me godot mirror code for all
func _process(_delta):
if player_camera:
# Get the mirror's plane (assuming the mirror faces along its local Z-axis)
var mirror_normal = global_transform.basis.y.normalized()
var mirror_position = global_transform.origin
# Calculate the reflected camera position
var player_cam_pos = player_camera.global_transform.origin
var distance_to_mirror = mirror_normal.dot(player_cam_pos - mirror_position)
var reflected_pos = player_cam_pos - 2.0 * distance_to_mirror * mirror_normal
# Clamp the mirror camera to NEVER go behind the mirror surface
# This prevents the camera from clipping through walls behind the mirror
# which causes the sun (DirectionalLight) to render from the wrong side
var distance_behind_mirror = mirror_normal.dot(mirror_position - reflected_pos)
if distance_behind_mirror > 0:
# Keep camera exactly at the mirror surface, don't go behind at all
reflected_pos = mirror_position
# Set the mirror camera's position
mirror_camera.global_transform.origin = reflected_pos
# Calculate the reflected camera orientation using quaternion-based basis reflection
# This avoids gimbal lock by reflecting all three basis vectors across the mirror plane
var player_basis = player_camera.global_transform.basis
# Reflect ALL three basis vectors across the mirror plane
var reflected_basis = Basis(
player_basis.x.reflect(mirror_normal), # Right vector
player_basis.y.reflect(mirror_normal), # Up vector
-player_basis.z.reflect(mirror_normal) # Forward vector (negated to face mirror)
)
# Normalize to prevent floating point drift
reflected_basis = reflected_basis.orthonormalized()
# Create the complete reflected transform (absolute rotation, no gimbal lock)
var reflected_transform = Transform3D(reflected_basis, reflected_pos)
mirror_camera.global_transform = reflected_transform
# Mirror camera properties for accurate reflection
mirror_camera.fov = player_camera.fov
that took a while to get right. and you might need to funk with it depending on how its rotated in your scene.
studio sim title.png
the title screen is coming along. this sitting animation was done by hand in blender, using the video as a reference
oh yeah. i also spend a night and morning adding a gun so that i could hang with my friend making a cool shooter.
this idea will evolve into the nailgun.
scaling shapes is sick
Screenshot 2025-12-09 at 1.37.59 AM.png
muzzle.png