Sign in

Squidgy

@jenh.uk
44 followers 49 following 21 posts

💕 Lv.33 Squishy Trans Lady // Code Witch, Artist, GameDev 😎 Positivity! Cute stuff! Voices! Dev logs! 🦊 May be dreaming, probably screaming, always memeing. 🚫 Generative 🅰️ℹ️🖕

PostsRepliesMedia
Squidgy @jenh.uk · 12/08/2026
Justicedickinyamouth lmao
010
Squidgy @jenh.uk · 12/08/2026
Ecips :)
130
Squidgy @jenh.uk · 16/06/2026
Okay, I'm pretty hyped about this one, getting that conditional reload working was a bit of a pain but SO worth it 😎
010
Squidgy @jenh.uk · 15/06/2026
Bit of an earlier attempt where I took photos of a pistol toy I had and edited them in much the same vein as the classic Dooms did, but that takes a lot of effort to rotoscope and edit after the fact compared to rendering out hand-animated 3D models if you want them to look good, weirdly enough… 🤔
000
Squidgy @jenh.uk · 15/06/2026
Once those are ready, making the weapons work is just a matter of tweaking numbers and timing different events for the state machine - I've written a base class that inherits default weapon logic and adds vars/actions for reloading, so to add new guns I can just set values, add sprites and states. 😗
The definitions of Weapon States for the Mac-10, not my prettiest work but it does the job!

Wall of programming code, reads as follows:

states {
		Spawn:
			57W2 A -1;
			loop;
		Ready:
			57W2 C 1 A_WeaponReady(WRF_ALLOWRELOAD);
			loop;
		Deselect:
			57W2 C 1 A_Lower(10);
			loop;
		Select:
			57W2 C 1 A_Raise(10);
			loop;
		Fire:
			57W2 C 1 A_ConsumeAmmoOrJump;
			57W2 B 1 bright {
				A_FireBullets(2.0, 0.8, 1, 8);
				A_Light1();
			}
			57W2 B 1 bright A_Light2;
			57W2 D 1 A_Light0;
			57W2 C 1 A_Refire;
			goto Ready;
		Dryfire:
			57W2 C 1 A_PlaySound("m57/weapon/mac10/dry",CHAN_BODY,0.5);
			57W2 C 5;
			57W2 D 0 A_JumpIfNeedsReload;
			goto Ready;
		Reload:
			57W2 D 0 A_JumpIfCannotReload;
			57W2 D 0 A_Refire;
			57W2 E 1 A_PlaySound("m57/weapon/mac10/magout",CHAN_BODY,0.5);
			57W2 F 1;
			57W2 F 0 A_JumpIfNeedsReload("ReloadWasEmpty");
			57W2 GH 2;
			goto ReloadFinish;
		ReloadWasEmpty:
			57W2 IJ 3;
			goto ReloadFinish;
		ReloadFinish:
			57W2 KKL 3;
			57W2 M 1 A_PlaySound("m57/weapon/mac10/magin",CHAN_BODY,0.5);
			57W2 MN 2;
			57W2 O 1 A_ReloadCycle;
			57W2 OPP 2;
			57W2 Q 1 A_PlaySound("m57/weapon/mac10/bolt",CHAN_BODY,0.5);
			57W2 Q 1;
			goto Ready;
		ReloadFailed:
			57W2 E 1 A_JumpIfCanReload;
			57W2 E 4;
			57W2 E 1 A_TryAutoSwitch;
			goto Ready;
	}Base class script variable definitions for custom weapons I'm making.

Wall of programming code, reads as follows:

class M57Weapon : Weapon abstract {
	int mag1;
	int mag1max;
	int mag1rt;
	int mag1rg;
	int mag1rpc;
	int mag2;
	int mag2max;
	int mag2rt;
	int mag2rg;
	int mag2rpc;
	
	property Magazine: mag1;
	property MaxMagazine: mag1max;
	property ReloadTake: mag1rt;
	property ReloadGive: mag1rg;
	property ReloadPerCycle: mag1rpc;
	property Magazine1: mag1;
	property MaxMagazine1: mag1max;
	property ReloadTake1: mag1rt;
	property ReloadGive1: mag1rg;
	property ReloadPerCycle1: mag1rpc;
	property Magazine2: mag2;
	property MaxMagazine2: mag2max;
	property ReloadTake2: mag2rt;
	property ReloadGive2: mag2rg;
	property ReloadPerCycle2: mag2rpc;
	
	default {
		self.Magazine 0;
		self.MaxMagazine 1;
		self.ReloadTake 1;
		self.ReloadGive 1;
		self.ReloadPerCycle 1;
		Weapon.AmmoUse 1;
		self.Magazine2 0;
		self.MaxMagazine2 0;
		self.ReloadTake2 1;
		self.ReloadGive2 1;
		self.ReloadPerCycle2 1;
		Weapon.AmmoUse2 1;
		Weapon.BobStyle "Inverse";
	}
020
Squidgy @jenh.uk · 15/06/2026
From there, I import the sprites into a WAD editor - SLADE3 is great - and give each sprite offsets for display; stopping there is fine, but to reuse and optimise where possible you can use each graphic as a patch to layer them or use the same one for multiple frames at different offsets.
200
Squidgy @jenh.uk · 15/06/2026
Video demonstrating how a rough estimate of the final look (plus an alt camera for the pickup sprites) shows in a split viewport; a preview result of the pose/animation helps to position everything correctly. It's a bit different making minimal keyframes for in-engine timing, but it's interesting! 😁
100
Squidgy @jenh.uk · 15/06/2026
The raw render is only 320x320 for the crunch-aliased Doom sprite look, then compositing nodes are used to modify and further resize the for output - additional steps are added to get a preview that makes the "transparent" pixels more obvious, only for the viewport to help spot unintended artefacts.
A view of the Blender Compositor node graph that turns the 3D models' animation frames into sprites, ready to export for use in a Doom WAD.
110
Squidgy @jenh.uk · 15/06/2026
Been working on weapons for my RAMP2026 entry - the models for the Winchester and Mac10 are courtesy of @anfuny.bsky.social - keyframes hand-animated in Blender by myself, exported with custom compositing to make the sprites fit Doom's aesthetic; those and weapon code were all made this past week 😄
351