Oct 30, 2023
I’ve been fighting with this for just over a month now, and I finally found the solution.
The problem was that my game bar recording options were greyed out, and the capture settings in windows were empty. Every solution I found online did not fix the problem.
The missing piece was a registry edit, provided by frbnfr on reddit: https://www.reddit.com/r/techsupport/comments/u1shbx/comment/jaykpoc/?utm_source=reddit&utm_medium=web2x&context=3
New-ItemProperty -Path "HKCU:\System\GameConfigStore" -Name "GameDVR_Enabled" -Value 1 -PropertyType DWORD -Force
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\GameDVR" -Name "AppCaptureEnabled" -Value 1 -PropertyType DWORD -Force
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows" -Name "GameDVR" -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR" -Name "AllowGameDVR" -Value 1 -PropertyType DWORD -Force
The new part of this was the new entry in Policies\Microsoft\Windows\GameDVR
Nov 11, 2022
When publishing packages on Crayta, you will undoubtably run into a situation where assets from a package dependency are ending up in your own package.
Avoiding this is fairly simple, if you know what to look for.
The key to avoiding this is to ensure you haven’t modified any of the package dependencies before publishing your package. This goes for creating and updating a package.
To quickly tell if you’ve modified a package dependency:
- Go to the package publish/update screen
- Right click the top element and click “Remove”, followed by “Cancel”
- This will reveal the status icons in your asset list

Next, click on the two checkboxes at the bottom of the dialog to display all assets

Your screen should look something like this

These icons indicate files you own have changed:

These icons indicates files from a package have changed:

At this point, if I published this package, I would end up with duplicates of questScript and userQuestsScript.
Since these assets come from the Quest System package, and I’m also the author, the solution is to update the Quest System package first. This will “commit” the modifications to the Quest System package, and they will no longer be considered modified by the crayta packaging system.
If you do not own the modified package, you have 2 options:
Revert the changes to the package dependencies. It’s possible you simply opened a file by accident, and that’s enough for crayta to believe its been modified. To revert, simply right click the asset right in the package window and click on “Revert”

The other option is that you’ve intentionally modified a package dependency. Maybe you’ve extended a package with custom functionality. In that case, you do want to include the new script in your package. You will need to be very clear in your package guide that the user must use your customized version of the script, rather than the version from the dependency package.








Apr 13, 2022
Ran into a problem today where trying to edit rails credentails with rails credential:edit was bringing up an empty editor window. The credentials themselves were fine, I could read them with rails credentials:show, but the editor itself was blank.
On top of that, even though the command line was telling me that my credentials were saved, nothing seemed to be changing about the file.
Turns out that windows still supports a legacy file format called 8.3. The result is that a long file path can container a ~ character. A change was made to rails back in July 2021 to escape spaces in paths. That same code is also escaping the ~ character.
So a once innocuous path of C:\users\Josh~1\AppData\... became C:\users\Josh\~1\AppData\.... Obviously the resulting path doesn’t exist, so the editor was bringing up a new file!
A quick patch to rails to expand 8.3 filenames fixes the problem.
https://github.com/rails/rails/pull/44890
May 22, 2021
Introduction
Something we had to do for High Noon was implement a feature where the player would drop all of their collected gold when they died. We re-used the existing pickup logic for this, including some custom changes so that the dropped items wouldn’t respawn on a new round, and could only be picked up once.
Getting started
I’m assuming we’re in an empty world here, so the first step is to install the Inventory package from the community tab in your editor. If you’re creating a game from an existing template like Capture the Flag, this package will already be installed.
If you’re on a blank game, add the User Inventory template to the user template, and the Player Inventory View template to the player.
Next, add a trigger to the map, add the pickupSpawnerScript to it, any entity, and the inventoryItemSpecScript script. I used the ammo entity. Feel free to customize the properties on the pickupSpawnerScript at this point. For this example, we’re going to turn on “useOnCollision”, and “showOnInit”, and turn off “enableCollisionOnChildren” to keep things simple.

Now, create a template out of the result, and place a few instances of the template around the map. What we’re going to do is define a space to drop these off, and they’ll all fall on the ground.
Dropping items
Paint a square of the map a new color, to designate it as the dropoff zone, then add a trigger that covers the entirety. This is going to be our test zone.

Create a new script and add it to the player template, call it “dropItemsScript”, or whatever you fancy.
local DropItemsScript = {}
-- Define what template we want to drop from the inventory
DropItemsScript.Properties = {
{ name = "templateToDrop", type = "template" }
}
function DropItemsScript:DropItems()
-- The player's inventory exists on the user
local user = self:GetEntity():GetUser()
local inventory = user.inventoryScript
-- Get the item we want to drop out of the inventory, this item will contain
-- the number of items the user is carrying
local item = inventory:FindItemForTemplate(self.properties.templateToDrop)
-- If the user isn't carrying this item, we have nothing to drop
if not item then return end
-- We want to drop the items around the user, so store the user's position before starting to drop items
local pos = self:GetEntity():GetPosition()
-- We want to drop the items one at a time, so we can calculate new positions for all of them
for i=1,item.count do
-- Calculate a new position in in a circle around the user, at a max distance of 500
local maxDistance = 500
local newPosition = pos + (Vector.New(math.random(), math.random(), 0) * maxDistance) - Vector.New(maxDistance / 2, maxDistance / 2, 0)
local drop = GetWorld():Spawn(self.properties.templateToDrop, newPosition, Rotation.Zero)
-- Tell the pickup spawner script we don't went this item to respawn after being picked up
drop.pickupSpawnerScript.properties.singlePickup = true
-- show the pickup
drop.pickupSpawnerScript:ShowPickup()
end
-- Remove all the items from the inventory
inventory:RemoveFromItem(item, item.count)
end
return DropItemsScript
Notice we have a property on this script, you’ll want to set this to the ammoPickup we created earlier.
The property that we set called “singlePickup” doesn’t exist in the pickup spawner script, so we’ll have to add that. Open up the pickupSpawnerScript and add the property
{ name = "singlePickup", type = "boolean", default = false }
Now modify PickupSpawnerScript:Pickup(player) with
if self.properties.singlePickup then
self:GetEntity():Destroy()
end
At the very bottom of the method.
Finally, in the trigger you added for your dropoff zone, set the OnTriggerEnter function to the DropItems method on the player.
You can check out a working example of this here: https://launch.crayta.com/play/dfr6rten
May 20, 2021
Just testing mastodon integration!
Apr 29, 2021
Fixes
- Properly calculate movement independent of framerate (Fixes game on PC)
- You should no longer maintain velocity if respawned while falling
- If you somehow manage to get above the command center, you should now die
- Leaving the ground at all while playing will now kill you
- There is no longer a small window to re-enter the arena after the last person dies, and before the round actually ends
- Hyperdrive animation will loop
Improvements
- Add blue border to dialog text
- Client is now only responsible for their own hit detection
- Dialog box is now slightly transparent, so you can see the evoxels following you
- Evoxels will now longer look up/down
- Timer will now persist shortly after dying
- Floodlights will turn off while in outline/8-bit mode
- outline/8-bit mode will turn off after dying
Apr 24, 2021

The evoxel files: declassified has been released on Crayta.
Evoxel files was created between April 19th and April 23 2021, as part of the Alien Conspiracy: Classified game jam.
The goal of the game is to survive as long as possible on a small plateau, all the while being chased by hundreds of cheerful pink evoxels, avoiding crossing green evoxels, and dodging speeding blue evoxels.
Players are ranked by time survived on a weekly basis, as well as all-time.
You can change the post processing effect by interacting with 1 of the 2 buttons on the side of the waiting room.
Evoxels are a homage to the game Evoxel, by Mochi.
Click here to play The Evoxel Files: Declassified on Epic Games or Stadia
Apr 23, 2021
My submission for the #crayta game jam: launch.crayta.com/play/q4p2…
Apr 21, 2021
My submission to the #crayta game jam is coming along: clipia.ca/media/90
Apr 19, 2021
The ominous turn of an evoxel clipia.ca/media/85
Apr 19, 2021
Started working on my #crayta game jam game! The theme is “Classified”
Mar 24, 2021
If you wrap code in fences (```) on micro.blog, you’ll be presented with a code block with no syntax highlighting. This just won’t do.
To enable syntax highlighting on any theme, head to your Design tab, click on “Edit Custom Theme”, then “New Plugin”.
Enter whatever name floats your boat, and paste https://github.com/joshleblanc/plugin-syntax-highlighting into the Clone URL box.
Give micro.blog a few seconds to update, and you should see your code in all its highlighted glory. To specify the language, just add the language name after the fences (```ruby for example)
For example:
def hello_world
p "Hello, World!"
end
function helloWorld() {
console.log("Hello, World!");
}