Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

NEON STRUCT: Desperation Column

A minimalist roguelite FPS. Created for the 7dfps 2021 game jam. · By David Lindsey Pittman

Source code and content are now public domain Sticky

A topic by David Lindsey Pittman created Jan 22, 2022 Views: 424 Replies: 6
Viewing posts 1 to 4
Developer(+3)

I've released the source code and raw assets for NEON STRUCT: Desperation Column into the public domain. This includes the entirety of my Rosa engine in its current incarnation.

Due to licensing issues, this won't compile or run as-is. I've simply removed the Steamworks SDK without fixing any of the dependencies on it. You can either change BUILD_STEAM in versions.h to 0, or download the SDK yourself and put it in Code/Projects/Rosa/src/steam.

I've also had to remove some audio files that were not licensed for redistribution. Those can be unpacked from the shipping .cpk package files with the FilePacker tool if you're trying to build this from scratch.

I don't really anticipate anyone would try to build this from scratch, it's more released for archival purposes. But it's public domain now, so do what you want with it!

https://github.com/dphrygian/zeta

Hi David. 

This message is probably a long shot, but I am taking my chances here. 

I've managed compiling the engine and all the tools (I've unpacked the .cpk files, using FilePacker - to see how to use it). I can run the game from VS2022, so that is all fine. 

However I am curious, what is the pipeline for adding new content to the game? Like new models, animations, (sounds) etc. 

What I've found out so far, that is somehow I should export the assets from Blender into XML format , and then I could convert it into cms, using the MeshCompiler.  I found an xmlmeshexport.py file for Blender (243) in Zeta, so I took that version  of Blender (quite old) and managed to export the basic cube into .mesh format. However I have no clue how should I convert .mesh to cms. The MeshConverter expects an .XML file as an input, but I haven't found any XML exporter for Blender 243 (or any Blender actually), besides of yours. Or maybe I am completely misunderstanding the process? I didn't find any related info in the Editor documentation for Neon Struct on the Steam page (btw, thank you for that doc. it is amazingly helpful.)

P.S. Sorry for my English. 


A fan of Eldritch and NS,

Phariax


 

Developer (1 edit)

Hi Phariax,

Most of the pipeline is automated through the Projects/Main/Tools/bake.py script. You'll need to edit that to point at your paths (see BLENDER_DIR, PYTHON_DIR, etc.) and there might be some other headaches—looking at it again, I see this was written for Python 2 and there's a few things to change if you use Python 3 (print 'foo' becomes print('foo'), mainly). It also expects Cygwin to be installed, for the cp and mv commands.

If you can get that script working, then you should be able to drop new .blend files into Projects/Main/Raw/Meshes, and then bake.py will invoke Blender on the command line and export the mesh to /Intermediate/Meshes (using that xmlmeshexport.py exporter). Then it will run MeshCompiler to convert that into the custom .cms format.

None of this is documented, because the engine was never really meant for anyone but me. But I'm happy to help if you've got any other questions!

David

Edit: To answer the question directly, the .mesh file is the XML file that MeshCompiler expects.

Hi David,


Thank you for replying (so comprehensively), I appreciate it a lot! 

Yes, I've already bumped into the python2/3 problem, when I wanted to use loom. 

 After I've sent the first message, I managed to compile a mesh to cms (haven't tried to implement it into a map yet, tho) but your explanation about the pipeline helps a lot. I'll try to make it work. 

Also thank you very much for offering some additional help - I am sure I'll ask more. 

Have a great day,

Kristof

(1 edit)

Hi David,

Following your guidelines I managed to make the script work. Thank you for your help. It throws lots of things into the console, but I will look into that issue later.

 I could export a custom mesh from Blender and implement it into the game, by changing an original entity's cms in the config file. (for testing purposes)  However the collision mesh is still the original one, and I couldn't find out where or how should I change that.  Could you help me with that, please?

Also, when I am loading the map (with my custom model), the game throws an assert from the ApplyMaterial function from the renderercommon.cpp. It wasn't doing it with the original assets, so I am sure the issue is caused by my model. The assert looks like this: ExpectedVD == (VDSignature & ExpectedVD)". I can ignore it and can play the game, but I assume I should've created a uvw map, or a material with a custom parameter in Blender? Or should I set something up in the config files? 

Thank you,

//Kristof

Developer

Hi Kristof, glad you got it working!

It's a simple engine, and entities can only use AABBs for collision. Their bounds are defined in a RosaCollision component; look for the variables HalfExtentsX/Y/Z in the config files.

Static geo can use more complex collision, by exporting one or more convex meshes along with a renderable mesh (in the other export script, xmlbrushexport.py). In this game, I think I only used the simple box and wedge primitives in Raw/Brushes/Core.

The ExpectedVD assert is probably because the mesh doesn't have a UV vertex stream, as you guessed. Doing an auto unwrap in Blender should fix it.

David

Thank you David for your help. Yes, the unwrap has fixed the assert and I could change the collision too.

Have a great day!


//Kristof