RSSysL - SysL RSS Feed https://sysl.ca Asset, Game, Mod and Other Projects https://sysl.ca/favicon.png RSSysL - SysL RSS Feed https://sysl.ca Sat, 21 Mar 2026 01:11:27 -0600 False Earthdream (16px Font) https://sysl.ca/index.php?code=asset_fontfe https://sysl.ca/index.php?code=asset_fontfe
A tall thin font with a strong vertical stroke. Whether it's an illusion or enigma, it will always have a soul. ]]>
Sun, 18 Jan 2026 00:00:00 -0700
Pastel Retro Handheld Palette https://sysl.ca/index.php?code=asset_pastel_retro_handheld https://sysl.ca/index.php?code=asset_pastel_retro_handheld
A soft pastel palette inspired by the colors on the Gameboy Color. ]]>
Wed, 01 Jan 2025 00:00:00 -0700
Role Playing Fonts IV https://sysl.ca/index.php?code=asset_font4 https://sysl.ca/index.php?code=asset_font4
Two stylized pixel fonts for use in tight spaces. ]]>
Wed, 18 Oct 2023 00:00:00 -0600
Role Playing Fonts III https://sysl.ca/index.php?code=asset_font3 https://sysl.ca/index.php?code=asset_font3
Two clean 8 pixel fonts. ]]>
Sun, 28 May 2023 00:00:00 -0600
Role Playing Fonts II https://sysl.ca/index.php?code=asset_font2 https://sysl.ca/index.php?code=asset_font2
Two large pixel art fonts inspired by amazing Role Playing Games. ]]>
Wed, 12 Apr 2023 00:00:00 -0600
MIT Licensed Icons https://sysl.ca/index.php?code=asset_miticon https://sysl.ca/index.php?code=asset_miticon
Emoji icons in a grid sheet, under a MIT License. ]]>
Tue, 08 Nov 2022 00:00:00 -0700
ACK Recall https://sysl.ca/index.php?code=asset_fontack https://sysl.ca/index.php?code=asset_fontack
A tall pixel font, easy to read and great for a role playing game. ]]>
Fri, 15 Jul 2022 00:00:00 -0600
Role Playing Fonts I https://sysl.ca/index.php?code=asset_font1 https://sysl.ca/index.php?code=asset_font1
Two pixel art fonts inspired by amazing Role Playing Games. ]]>
Tue, 14 Jul 2020 00:00:00 -0600
BlenderBS - A Basic Blender Guide https://sysl.ca/index.php?code=other_blender https://sysl.ca/index.php?code=other_blender
A quick reference for Blender when you don't want to review a video. ]]>
Wed, 10 Jan 2024 00:00:00 -0700
Godot Notes https://sysl.ca/index.php?code=moon_godot https://sysl.ca/index.php?code=moon_godot
Findings documented as Godot is explored. ]]>
Wed, 01 May 2024 00:00:00 -0600
Lua/Love2D Notes https://sysl.ca/index.php?code=moon_lua_power https://sysl.ca/index.php?code=moon_lua_power
Thoughts and guides for Lua and Löve. ]]>
Wed, 01 May 2024 00:00:00 -0600
FFFF-Snow https://sysl.ca/index.php?code=game_fsnow https://sysl.ca/index.php?code=game_fsnow
A venting about snow, click to explore the book. ]]>
Mon, 15 Dec 2025 00:00:00 -0700
13 Unlucky Days https://sysl.ca/index.php?code=game_13ud https://sysl.ca/index.php?code=game_13ud
Play a small dungeon crawler over 13 days to save Earth! ]]>
Sun, 21 Sep 2025 00:00:00 -0600
Deckerspace https://sysl.ca/index.php?code=game_deckerspace https://sysl.ca/index.php?code=game_deckerspace
Solve the mystery of a dead internet platform. ]]>
Wed, 30 Jul 2025 00:00:00 -0600
The Witch and the Automatic Potion Device https://sysl.ca/index.php?code=game_autowitch https://sysl.ca/index.php?code=game_autowitch
The witch uses AI to make potions, what could go wrong? ]]>
Sun, 23 Feb 2025 00:00:00 -0700
Seasonal Witch https://sysl.ca/index.php?code=game_seasonalwitch https://sysl.ca/index.php?code=game_seasonalwitch
It's the Seasonal Witch's day off and she's been called into save Santa once again. ]]>
Thu, 19 Dec 2024 00:00:00 -0700
Eggbug Party Games https://sysl.ca/index.php?code=game_eggbugparty https://sysl.ca/index.php?code=game_eggbugparty
Come play with Eggbug and friends! ]]>
Tue, 30 Jul 2024 00:00:00 -0600
Grandma's Computer https://sysl.ca/index.php?code=game_grandmacpu https://sysl.ca/index.php?code=game_grandmacpu
You're stuck at Grandma's but it's not all bad! You get to play with her old computer! ]]>
Mon, 26 Feb 2024 00:00:00 -0700
Low Odds https://sysl.ca/index.php?code=game_lowodds https://sysl.ca/index.php?code=game_lowodds
Play a pretend game and see if you can get three in a row. ]]>
Sun, 31 Dec 2023 00:00:00 -0700
BrokenGate https://sysl.ca/index.php?code=game_brokengate https://sysl.ca/index.php?code=game_brokengate
A short adventure and a template for Decker to make a Point and Click game. ]]>
Sun, 31 Dec 2023 00:00:00 -0700
A Garden Walk https://sysl.ca/index.php?code=game_agarden https://sysl.ca/index.php?code=game_agarden
Enjoy some limited color nature photos ]]>
Tue, 01 Aug 2023 00:00:00 -0600
Are the Odds Good? https://sysl.ca/index.php?code=game_oddsgood https://sysl.ca/index.php?code=game_oddsgood
People are playing a twisted game for their lives. ]]>
Sat, 18 Mar 2023 00:00:00 -0600
Lizards and Felidaes https://sysl.ca/index.php?code=game_lizandfel https://sysl.ca/index.php?code=game_lizandfel
A Tabletop Game and Interactive Character Sheet based on Lasers and Feelings. ]]>
Wed, 15 Feb 2023 00:00:00 -0700
The Seasons of Newfoundland https://sysl.ca/index.php?code=game_seasonsof https://sysl.ca/index.php?code=game_seasonsof
A short tour of seasons in Decker. ]]>
Sun, 01 Jan 2023 00:00:00 -0700
ProfitroniX https://sysl.ca/index.php?code=game_profitx https://sysl.ca/index.php?code=game_profitx
A Tabletop Game and Interactive Character Sheet. ]]>
Sun, 01 Jan 2023 00:00:00 -0700
BIM Logo Animation https://sysl.ca/index.php?code=game_bimlogo https://sysl.ca/index.php?code=game_bimlogo
A BIM Fantasy PDA Animation. ]]>
Mon, 31 Oct 2022 00:00:00 -0600
Clawtivation https://sysl.ca/index.php?code=game_clawtivation https://sysl.ca/index.php?code=game_clawtivation
Get household goods through a claw machine. ]]>
Sun, 26 Jun 2022 00:00:00 -0600
Two Shakes https://sysl.ca/index.php?code=game_twoshakes https://sysl.ca/index.php?code=game_twoshakes
A two level game about shaking the world. ]]>
Fri, 04 Mar 2022 00:00:00 -0700
Potion Pals: Watch them Spoil! https://sysl.ca/index.php?code=game_potionpals https://sysl.ca/index.php?code=game_potionpals
Generate a Potion Pet from an image dragged on top of the game! ]]>
Sun, 23 Jan 2022 00:00:00 -0700
A Quiet Winter Walk Home https://sysl.ca/index.php?code=game_aquietwinter https://sysl.ca/index.php?code=game_aquietwinter
Enjoy a quiet walk home from the train station. ]]>
Fri, 31 Dec 2021 00:00:00 -0700
Elm8tal https://sysl.ca/index.php?code=game_elm8tal https://sysl.ca/index.php?code=game_elm8tal
Short world building puzzle game. ]]>
Mon, 11 Oct 2021 00:00:00 -0600
Cool 3D Spinning Octo https://sysl.ca/index.php?code=game_cool3docto https://sysl.ca/index.php?code=game_cool3docto
It spins! ]]>
Mon, 11 Oct 2021 00:00:00 -0600
Octoamp https://sysl.ca/index.php?code=game_octoamp https://sysl.ca/index.php?code=game_octoamp
A horrible Jingle Bells player in Chip8. ]]>
Mon, 11 Oct 2021 00:00:00 -0600
Tragedy Will Not Stop The Happy End https://sysl.ca/index.php?code=game_tragedywill https://sysl.ca/index.php?code=game_tragedywill
A very short roguelite game about defeating an evil mall. ]]>
Wed, 09 Jun 2021 00:00:00 -0600
A Bridge of the Chocolate Factory https://sysl.ca/index.php?code=game_bridgechoco https://sysl.ca/index.php?code=game_bridgechoco
Play microgames to defeat the chocolate factory boss. ]]>
Mon, 22 Feb 2021 00:00:00 -0700
The Infinite Library https://sysl.ca/index.php?code=game_infinitelib https://sysl.ca/index.php?code=game_infinitelib
An Infinite Book Generator. ]]>
Sun, 01 Nov 2020 00:00:00 -0600
D8GN https://sysl.ca/index.php?code=game_d8gn https://sysl.ca/index.php?code=game_d8gn
A demake of Dicey Dungeon for the elderly Chip8 Computer with XO-CHIP extension. ]]>
Mon, 26 Oct 2020 00:00:00 -0600
Solar Sim-Tem https://sysl.ca/index.php?code=game_solarsim https://sysl.ca/index.php?code=game_solarsim
Solar Sim-Tem is a news simulator that pulls headlines from the planets you create. ]]>
Sat, 16 May 2020 00:00:00 -0600
Dink or Die https://sysl.ca/index.php?code=game_dinkordie https://sysl.ca/index.php?code=game_dinkordie
Drop brains down a peg game, use their mental powers to get to victory. ]]>
Sun, 03 May 2020 00:00:00 -0600
Paperless Office https://sysl.ca/index.php?code=game_paperlesso https://sysl.ca/index.php?code=game_paperlesso
A game about smashing printers ]]>
Mon, 24 Feb 2020 00:00:00 -0700
The Rude Street https://sysl.ca/index.php?code=game_rudestreet https://sysl.ca/index.php?code=game_rudestreet
A simple, small jam game made for Superchip Chip8 in Octo. ]]>
Thu, 31 Oct 2019 00:00:00 -0600
Chip8/Octo Collection https://sysl.ca/index.php?code=game_chip8col https://sysl.ca/index.php?code=game_chip8col
A Collection of Games Developed for the Chip8 with Octo. ]]>
Fri, 25 Oct 2019 00:00:00 -0600
Dial, AAH Monster https://sysl.ca/index.php?code=game_dialaah https://sysl.ca/index.php?code=game_dialaah
LCD Pet with Code Trade Battle Features. ]]>
Mon, 14 Oct 2019 00:00:00 -0600
Seconds to Scan https://sysl.ca/index.php?code=game_seconds https://sysl.ca/index.php?code=game_seconds
Use your mouse to solve challenges while under a 60 second timer. ]]>
Mon, 29 Jul 2019 00:00:00 -0600
Little Teabot https://sysl.ca/index.php?code=game_littlet https://sysl.ca/index.php?code=game_littlet
An Input Optional Game, where you watch 4 office employees learn to like tea. ]]>
Mon, 27 May 2019 00:00:00 -0600
HankBound https://sysl.ca/index.php?code=game_hankbound https://sysl.ca/index.php?code=game_hankbound
Please an AI who is obsessed with TOM HANKS! ]]>
Mon, 01 Apr 2019 00:00:00 -0600
Festive Feast https://sysl.ca/index.php?code=game_festive https://sysl.ca/index.php?code=game_festive
Cook a holiday meal for your mother. ]]>
Tue, 01 Jan 2019 00:00:00 -0700
TRIMONO https://sysl.ca/index.php?code=game_trimono https://sysl.ca/index.php?code=game_trimono
Short Rock Paper Scissors Visual Novel. ]]>
Sat, 25 Aug 2018 00:00:00 -0600
Sequel Studios https://sysl.ca/index.php?code=game_sequels https://sysl.ca/index.php?code=game_sequels
Keep on climbing that corporate ladder and make it to the top! Show your boss that you don't get frustrated easily. ]]>
Tue, 31 Jul 2018 00:00:00 -0600
Magical Item Workshop https://sysl.ca/index.php?code=game_magicalitem https://sysl.ca/index.php?code=game_magicalitem
To become a Master Magical Item Maker you will have to create items to make the grade. ]]>
Mon, 30 Apr 2018 00:00:00 -0600
Y2Kthulhu https://sysl.ca/index.php?code=game_y2kthu https://sysl.ca/index.php?code=game_y2kthu
Lone overnight IT Support saves her part of the world from a monster created from doomsday belief. ]]>
Mon, 22 Jan 2018 00:00:00 -0700
sHexEx Classic Edition https://sysl.ca/index.php?code=game_shexex https://sysl.ca/index.php?code=game_shexex
Your well meaning grandmother bought you a knockoff Super Console, might as well play it. ]]>
Sat, 01 Jul 2017 00:00:00 -0600
Life is Simply Unfair https://sysl.ca/index.php?code=game_lifeunfair https://sysl.ca/index.php?code=game_lifeunfair
Welcome to the board game of life, where everything is bad and it only gets worse. ]]>
Tue, 31 Jan 2017 00:00:00 -0700
Grandpa's Video Games for Knuckleheads https://sysl.ca/index.php?code=game_grandpavg https://sysl.ca/index.php?code=game_grandpavg
Grandpa learns the true value of family and video games. ]]>
Fri, 01 Jul 2016 00:00:00 -0600
Forget: Chill https://sysl.ca/index.php?code=game_forgetchill https://sysl.ca/index.php?code=game_forgetchill
Forget your stress and try to relax as the world keeps trying to invade your mind with noise and negative vibes. ]]>
Sun, 31 Jan 2016 00:00:00 -0700
PZZL https://sysl.ca/index.php?code=game_pzzl https://sysl.ca/index.php?code=game_pzzl
A puzzle game missing something very important. ]]>
Fri, 31 Jul 2015 00:00:00 -0600
Public Access TV: Superstar! https://sysl.ca/index.php?code=game_publicaccess https://sysl.ca/index.php?code=game_publicaccess
A simulation game about hitting it big on public access TV. ]]>
Mon, 30 Jun 2014 00:00:00 -0600
Half Hearted Hero https://sysl.ca/index.php?code=game_halfheart https://sysl.ca/index.php?code=game_halfheart
A terrible RPG maker game (with great music) where you are a demon eating souls, very 'edgy'. ]]>
Sun, 30 Jun 2013 00:00:00 -0600
Pixel Chaos https://sysl.ca/index.php?code=other_pixel_chaos https://sysl.ca/index.php?code=other_pixel_chaos
Generate a random 16x16 pixel tile using generation levels. ]]>
Thu, 30 Jan 2025 00:00:00 -0700
WebGBCamera https://sysl.ca/index.php?code=other_webgbcamera https://sysl.ca/index.php?code=other_webgbcamera
Use a retro four color camera anywhere you want! No emulation required! ]]>
Tue, 24 Dec 2024 00:00:00 -0700
The Post Office https://sysl.ca/index.php?code=other_post_office https://sysl.ca/index.php?code=other_post_office
Write your own video game postcards though the screenshot post office. ]]>
Sat, 01 Jun 2024 00:00:00 -0600
Twitch VOD Viewer https://sysl.ca/index.php?code=twitch https://sysl.ca/index.php?code=twitch
View a list of VODs for select Twitch users. ]]>
Sun, 28 Apr 2024 00:00:00 -0600
RSS - The Morphin Grid Archive Feed https://sysl.ca/index.php?code=other_rssmg https://sysl.ca/index.php?code=other_rssmg
An archive feed of episodes that have fallen off The Morphin Grid main feed. ]]>
Thu, 02 Feb 2023 00:00:00 -0700
RSS - Kingdom Smarts Archive Feed https://sysl.ca/index.php?code=other_rssks https://sysl.ca/index.php?code=other_rssks
An archive feed of episodes that have fallen off Kingdom Smarts main feed. ]]>
Thu, 02 Feb 2023 00:00:00 -0700
Sims 4 Mods https://sysl.ca/index.php?code=other_sims4 https://sysl.ca/index.php?code=other_sims4
A collection of Sims 4 Mods created over the lifespan of the game. ]]>
Sun, 01 Jan 2017 00:00:00 -0700
Super Royal Pals. https://sysl.ca/index.php?code=mod_srp1 https://sysl.ca/index.php?code=mod_srp1
Takes place in a world where the Princess Rescues the Plumber. ]]>
Sat, 10 Oct 2020 00:00:00 -0600
Super Royal Pals. 2 https://sysl.ca/index.php?code=mod_srp2 https://sysl.ca/index.php?code=mod_srp2
Takes place in a world where four Princesses save the land of dreams. ]]>
Thu, 06 Aug 2020 00:00:00 -0600
Super Royal Pals. 3 https://sysl.ca/index.php?code=mod_srp3 https://sysl.ca/index.php?code=mod_srp3
Takes place in a world where a pair of Princesses save eight kingdoms. ]]>
Thu, 05 Nov 2020 00:00:00 -0700
Royal Flush - Princess Sidestory https://sysl.ca/index.php?code=mod_royalflush https://sysl.ca/index.php?code=mod_royalflush
A cursed board game has warped the world, it's up to the Princesses to save the day. ]]>
Mon, 28 Oct 2013 00:00:00 -0600
Present Panic - A Princess Adventure https://sysl.ca/index.php?code=mod_presentpanic https://sysl.ca/index.php?code=mod_presentpanic
A Winter vacation gone wrong! Now the Princesses have to save the stolen presents. ]]>
Fri, 09 Dec 2011 00:00:00 -0700
Toadette's Christmas Adventure https://sysl.ca/index.php?code=mod_toad2 https://sysl.ca/index.php?code=mod_toad2
A brave young Toad has to save her brother from the monster fungus! ]]>
Mon, 13 Dec 2010 00:00:00 -0700
Toad's Christmas Adventure https://sysl.ca/index.php?code=mod_toad https://sysl.ca/index.php?code=mod_toad
A Toad has to save his sister during the holidays! ]]>
Tue, 23 Dec 2008 00:00:00 -0700
Lady Opera: Swf Panic https://sysl.ca/index.php?code=mod_opera https://sysl.ca/index.php?code=mod_opera
Lady Opera has to escape a glitched flash game that has trapped her inside! ]]>
Sat, 25 Oct 2008 00:00:00 -0600
Hello Kitty World 'Translation' https://sysl.ca/index.php?code=mod_hello https://sysl.ca/index.php?code=mod_hello
A translation in the style of Pizza Cats. ]]>
Tue, 21 Oct 2008 00:00:00 -0600
Byte's Adventure https://sysl.ca/index.php?code=mod_byte https://sysl.ca/index.php?code=mod_byte
A boy has to run though video game levels to defeat a wizard in a building block mech. ]]>
Mon, 01 Sep 2008 00:00:00 -0600
Kirby's Adventure 2 https://sysl.ca/index.php?code=mod_adv2 https://sysl.ca/index.php?code=mod_adv2
A pink puffball needs to save the day in the land of dreams. ]]>
Sat, 09 Jun 2007 00:00:00 -0600
Peach & Daisy - The Royal Games https://sysl.ca/index.php?code=mod_royalgames https://sysl.ca/index.php?code=mod_royalgames
A bog standard platformer with nothing really interesting going on. ]]>
Sun, 24 Dec 2006 00:00:00 -0700
Hello Hyrule NPC Contest! https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202510270018002-Hello%20Hyrule%20NPC%20Contest%21 This is a collection of the fun 3D shitposts humorous images I've made for the Hello Hyrule best NPC contest.


You can click each one to see it larger.



View on the Website to see Images! ]]>
Mon, 27 Oct 2025 00:00:00 -0600
Oops! Site Updated https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202509220010011-Oops%21%20Site%20Updated I've updated the website for my latest three Jam Projects.


  1. https://sysl.ca/index.php?code=game_13ud
  2. https://sysl.ca/index.php?code=game_deckerspace
  3. https://sysl.ca/index.php?code=game_autowitch


Two of these are in Godot, one in Decker. I've grown a bit more comfortable using Godot, which has been the goal since I've started using it.


I've also uploaded more games to Newgrounds and found a weird Godot bug where if you constantly set the parent 2D node position/global position (even if there's no change), it causes weird physics issues. That was fun to debug!


Thank you to anyone reading and have a lovely day.


View on the Website to see Images! ]]>
Mon, 22 Sep 2025 00:00:00 -0600
Zelda Podcast - Pixel Art Collection https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202505100014102-Zelda%20Podcast%20-%20Pixel%20Art%20Collection All of these lovely pictures were inspired by the Riley Hopkins & Their Amazing Friends Zelda Podcast season.


I would 100% take a listen before looking though the spoilers below.



View on the Website to see Images! ]]>
Sat, 10 May 2025 00:00:00 -0600
Pixel Art of a Crow Nest with Chicks https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202502160010002-Pixel%20Art%20of%20a%20Crow%20Nest%20with%20Chicks A cute picture of some crow chicks in their nest.



View on the Website to see Images! ]]>
Sun, 16 Feb 2025 00:00:00 -0700
Tool:Making Tiles with Chaos https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501310011800-Tool%EF%BC%9AMaking%20Tiles%20with%20Chaos


I've made a new tool!


Using the POWER OF CHAOS (rolling a random number between 1-4, then applying the rules set) it will generate a 16x16 tile and show it in the background.


You can then save the preview out at the bottom of the page as an image.


It's held together by string, so don't expect the sliders to work fully.


You can play with the tool here: 16x16 Pixel Chaos Generator.


View on the Website to see Images! ]]>
Fri, 31 Jan 2025 00:00:00 -0700
Godot Tip 「Tile Collision With Tilemap and a Physics Body」 https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501240010420-Godot%20Tip%20%EF%BD%A2Tile%20Collision%20With%20Tilemap%20and%20a%20Physics%20Body%EF%BD%A3 This is how you can detect what tiles you are colliding with when using a Physics Body.



extends Node2D
@export var area: Area2D@export var map: TileMap
func _ready(): area.body_shape_entered.connect(area_entered)
func area_entered(_body_rid: RID, _body: Node2D, _body_shape_index: int, _local_shape_index: int): map.erase_cell(0,map.get_coords_for_body_rid(_body_rid))


Information from BipBop (Godot Engine Forms, December 13 , 2023)
View on the Website to see Images! ]]>
Fri, 24 Jan 2025 00:00:00 -0700
Godot Weird Problem:Viewport Texture Error with Model https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501230010420-Godot%20Weird%20Problem%EF%BC%9AViewport%20Texture%20Error%20with%20Model In Godot, if you set a ViewPort Texture directly on a Material Albedo you will receive a warning when running your game from the editor. This error appears to be harmless in game but it is annoying.



To work around it, you can set it in code:

  1. Grab a reference to the mesh
  2. Grab a reference to the viewport/subviewport
  3. In the _ready() callback, set the texture.


@onready var mesh_instance_3d: MeshInstance3D = $MeshInstance3D@onready var sub_viewport: SubViewport = $SubViewport
func _ready() -> void: mesh_instance_3d.get_surface_override_material(0).albedo_texture = sub_viewport.get_texture()


This is not likely to be fixed anytime soon, it's been open since 2022...

Information from MamaDespik (Reddit, April 29, 2024)
View on the Website to see Images! ]]>
Thu, 23 Jan 2025 00:00:00 -0700
Godot Tip 「Game-Isometric Camera」 https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501230010420-Godot%20Tip%20%EF%BD%A2Game-Isometric%20Camera%EF%BD%A3 Using Node: Camera3D

  1. Projection: Orthogonal
  2. Rotation: -30, 45, 0 (XYZ)
  3. Size: 8M-10M (Based on Pixel Size)
  4. Far: 200M (Fixes issues with Orthogonal Shadows) [Calinou, Godot Issue 58332, Feb 19, 2022]


Quick Code Note for Camera (You may have to rotate input):

var direction := (Vector3(input_dir.x, 0, input_dir.y)).rotated(Vector3.UP, main_camera.rotation.y).normalized()
View on the Website to see Images! ]]>
Thu, 23 Jan 2025 00:00:00 -0700
Godot Weird Problem:Audio Bus Names Not Working https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501230010020-Godot%20Weird%20Problem%EF%BC%9AAudio%20Bus%20Names%20Not%20Working I've had this issue where the Audio Busses defined would not load on project start up OR they would load but the names would not work. To fix it, I had to do the following:

  1. Save out your Bus Configuration
  2. Open the General Settings
  3. Open Audio -> Buses
  4. Set the Default Bus Layout

View on the Website to see Images! ]]>
Thu, 23 Jan 2025 00:00:00 -0700
LuaJIT Quick Tip 「Table Clear」 https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501220010440-LuaJIT%20Quick%20Tip%20%EF%BD%A2Table%20Clear%EF%BD%A3 Ever wanted to empty a table without going though a loop or creating a new table and leaving it to the garbage collector?


Just table.clear(that_table)!


If you're writing a library and you're being nice to non-LuaJIT users, then you can just take a bit of extra time to check if it exists.


if table.clear then table.clear(that_table) else -- deal with it another way end
View on the Website to see Images! ]]>
Wed, 22 Jan 2025 00:00:00 -0700
Godot Effort Post: 3D Pixel Art Rendering https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501220010000-Godot%20Effort%20Post%EF%BC%9A%203D%20Pixel%20Art%20Rendering Godot Project Settings

  1. Go to Project > Project Settings > Display > Window > Stretch > Mode and set it to "viewport".
  2. Go to Project > Project Settings > Display > Window > Stretch > Aspect and set it to "keep" *
  3. Go to Project > Project Settings > Rendering > Quality > 2D > Use Pixel Snap and turn this On.
  4. Make sure Pixel Snap is enabled for 2D View
  5. Whenever you add a Sprite or AnimatedSprite node, make sure to disable the "Centered" property. For the AnimatedSprite node you will find that property under "AnimatedSprite" and for the Sprite node you find it under "Offset". 
  6. Change the default Rendering Texture in Project Settings rendering/textures/canvas_textures/default_texture_filter (you need to activate Advanced Settings), to Nearest instead of Linear.


Viewport Settings

Snap2D and Filter do not inherit, make sure they are set in the viewport.


3D Pixel Art Rendering

Based on the work of Denovodavid, there is a way to have 3D look like real pixel art.


3D Pixel Art Rendering - Camera

  1. Node3D (Parent)
  2. SubViewport (Camera Viewport) (322x182)
  3. Node3D (Camera Control)
  4. Camera3D
#Camera Controlextends Node3D

@export var circular_radius: float = 0.0@export var circular_speed: float = 0.2
@export var cam: Camera3D @export var follow: Node3D @export var followlerp: bool
var selfx := 0.0var selfz := 0.0
func _ready() -> void: selfx = position.x selfz = position.z

func _process(_delta: float) -> void: if follow: position.x = selfx + follow.position.x position.z = selfz + follow.position.z if followlerp: position.x = selfx + lerp(follow.position.x, position.x, 0.02) position.z = selfz + lerp(follow.position.z, position.z, 0.02) if Input.is_action_pressed("ui_copy"): cam.size = lerp(cam.size, 20.0, 0.2) if Input.is_action_pressed("ui_cut"): cam.size = lerp(cam.size, 10.0, 0.2)
#Camera3Dclass_name Camera3DTexelSnapped3extends Camera3D
@export var snap := true@export var snap_objects := true
var texel_error := Vector2.ZERO
@onready var _prev_rotation := global_rotation@onready var _snap_space := global_transformvar _texel_size: float = 0.0
var _snap_nodes: Array[Node]var _pre_snapped_positions: Array[Vector3]

func _ready() -> void: RenderingServer.frame_post_draw.connect(_snap_objects_revert) self.rotation.y = 0.8853982

func _process(_delta: float) -> void: self.rotation.y = 0.7853982 # rotation changes the snap space if global_rotation != _prev_rotation: _prev_rotation = global_rotation _snap_space = global_transform _texel_size = size / float((get_viewport() as SubViewport).size.y) # camera position in snap space var snap_space_position := global_position * _snap_space # snap! var snapped_snap_space_position := snap_space_position.snapped(Vector3.ONE * _texel_size) # how much we snapped (in snap space) var snap_error := snapped_snap_space_position - snap_space_position if snap: # apply camera offset as to not affect the actual transform h_offset = snap_error.x v_offset = snap_error.y # error in screen texels (will be used later) texel_error = Vector2(snap_error.x, -snap_error.y) / _texel_size if snap_objects: _snap_objects.call_deferred() else: texel_error = Vector2.ZERO

func _snap_objects() -> void: _snap_nodes = get_tree().get_nodes_in_group("snap") _pre_snapped_positions.resize(_snap_nodes.size()) for i in _snap_nodes.size(): var node := _snap_nodes[i] as Node3D var pos := node.global_position _pre_snapped_positions[i] = pos var snap_space_pos := pos * _snap_space var snapped_snap_space_pos := snap_space_pos.snapped(Vector3(_texel_size, _texel_size, 0.0)) node.global_position = _snap_space * snapped_snap_space_pos

func _snap_objects_revert() -> void: for i in _snap_nodes.size(): (_snap_nodes[i] as Node3D).global_position = _pre_snapped_positions[i] _snap_nodes.clear()


3D Pixel Art Rendering - Rendering To Screen

  1. Control Node
  2. Sprite2D
#Control Nodeextends Control
@export var viewport: SubViewport@export var pixel_movement := true@export var sub_pixel_movement_at_integer_scale := true@export var _sprite: Sprite2D

func _process(_delta: float) -> void: var screen_size := Vector2(get_window().size) # viewport size minus padding var game_size := Vector2(viewport.size - Vector2i(2, 2)) var display_scale := screen_size / game_size # maintain aspect ratio var display_scale_min: float = minf(display_scale.x, display_scale.y) _sprite.scale = Vector2(display_scale_min, display_scale_min) # scale and center control node size = (_sprite.scale * game_size).round() position = ((screen_size - size) / 2).round() # smooth! if pixel_movement: var cam := viewport.get_camera_3d() as Camera3DTexelSnapped3 var pixel_error: Vector2 = cam.texel_error * _sprite.scale _sprite.position = -_sprite.scale + pixel_error var is_integer_scale := display_scale == display_scale.floor() if is_integer_scale and not sub_pixel_movement_at_integer_scale: _sprite.position = _sprite.position.round()
// Sprite2D Shader Material// based on code by t3ssel8r: https://youtu.be/d6tp43wZqps// adapted to Godot by denovodavid
shader_type canvas_item;render_mode unshaded;
void fragment() { // box filter size in texel units vec2 box_size = clamp(fwidth(UV) / TEXTURE_PIXEL_SIZE, 1e-5, 1); // scale uv by texture size to get texel coordinate vec2 tx = UV / TEXTURE_PIXEL_SIZE - 0.5 * box_size; // compute offset for pixel-sized box filter vec2 tx_offset = smoothstep(vec2(1) - box_size, vec2(1), fract(tx)); // compute bilinear sample uv coordinates vec2 uv = (floor(tx) + 0.5 + tx_offset) * TEXTURE_PIXEL_SIZE; // sample the texture COLOR = textureGrad(TEXTURE, uv, dFdx(UV), dFdy(UV));}


Based on work from Denovodavid (SourceHut, 2024, Sep 29)
View on the Website to see Images! ]]>
Wed, 22 Jan 2025 00:00:00 -0700
Love, Transparency and OBS https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501210011440-Love%2C%20Transparency%20and%20OBS

First of all, thank you @xkeeper for this, who found this worked even after being told "It can't be done". The code is below:

function love.draw() -- This is all you need to do in your Love2D Code, set the background to transparent. -- Note, this will still appear as black in the Love2D Game Window. love.graphics.setBackgroundColor(0,0,0,0) -- Draw things after here! endSetting up the OBS Capture
  1. Game Capture
  2. Mode: Capture Window
  3. Allow Transparency: True/Checked
That's It?

That's it. As long as you don't change the background, anything drawn in the love2D window will be drawn as if on top of a transparent background. Great for fun effects without having to use a chroma key.


View on the Website to see Images! ]]>
Tue, 21 Jan 2025 00:00:00 -0700
Blog Launched! https://sysl.ca/index.php?code=blog https://sysl.ca/index.php%3Fcode%3Dblog%26get_post%3D202501200000001-Blog%20Launched%21 This is just a post to note that the SysL Log is now active. I will be moving Lua and Godot Posts under here.


Should be done over the next few weeks. 👏



View on the Website to see Images! ]]>
Mon, 20 Jan 2025 00:00:00 -0700