![]() |
Weird issue. Almost too efficient. Using the method I've implemented, I'm performing a lot of the calculations on the GPU. However, with standard formats, only 8 bits of resolution are available for x, or y, or z, because its just like a color where you only have 0-255.
So if the framerate is too fast, then the amount a unit moves can easily be smaller than 1/255th. Even on emulator, regularly getting >20 fps with 400k, so the amount a unit moves is well below 1/255th / frame quite often. Faster it gets, the worse it gets. If the calculated move is < 1/255th of the vector from x0 to x1, the unit simply does not move. May have to hardware limit the movement calculations, just to ensure that the units fall within allowable moves. Also considering trying to use wider color space (10 bit, 16 bit color). Most evident in this video (notably does not actually affect the framerate, you can still scroll). Just unit movement stutters. https://youtube.com/shorts/iVkPBlvb_u8?feature=share |
Another update, this time on planet development. Been working on shaders and then rendering a planet for interaction. The goal is eventually to be able to move armies around the map, choose a conflict location, and then have the game generate terrain representative of the conflict location.
The first step was generating textures. Currently still using a tiling method. Found a freeware program Texturelab that seemed acceptable. Minimalistic node interface and relatively large selection of modules. (https://www.texturelab.io/) Originally started off with something complicated like this (was trying to do edge matching for a bunch of different orientations. https://i.imgur.com/qiD0dMtm.png Eventually found a texture splatting approach that was quite a bit simpler. Now only requires a small texture sheet of the basic terrains. https://i.imgur.com/qLW9o6G.png From there, a lot of work on developing what's known as a spherical roam algorithm so that a spherical object can be viewed at different levels of detail and update correctly. Now have a planet generation system that blends between various terrain and works nicely down to about 80,000 triangles for the planet. Far Away https://i.imgur.com/5JSjrsG.png Near By https://i.imgur.com/nvsujNkl.png Floating Near the Surface https://i.imgur.com/4r2sZ0p.png Next up is to try and develop heat, precipitation, and biomes for some diversity in the the actual surface tilings. And make a couple improvements to reduce the "squareness" of the tilings. |
Finished up temperature, precipitation, and biomes.
Working example shown below: https://i.imgur.com/wQw3ZRPl.png Biomes are based on this general idea of biomes with dividing lines for biome regions sketched in red. https://i.imgur.com/s77Kj9al.png Next up is trying to get erosion to work on a spherical planet. Currently have a functional erosion shader working, except only for a single region. Example can be found over at Shadertoy at: https://www.shadertoy.com/view/mssXRB Getting the shader to operate well with multiple interconnected regions is proving...challenging. |
Finished up erosion on a spherical planet, and now have a time lapse erosion effect that creates rivers on the surface calculating once a frame.
https://i.imgur.com/0ju49lkl.png A visual movie timelapse of the effect can be seen at: https://twitter.com/gabriel_putnam/s...g5S0pC44NWHA9g |
Spent quite a while trying to figure out how to fix some of the spherical rendering issues relative to how flat normals are calculated on a round object. Eventually (partially) solved the issue by using a localized normal rotation method. Each patch figures out how it is oriented relative to the poles of the planet, and then the textures all rotate their normals so that they have a similar global alignment.
https://i.imgur.com/ry7s6JY.gif The tile rotations can be visualized by looking them as clockwise (red) or counterclockwise (green) rotations on the surface over the various patch regions. An example is shown below. https://i.imgur.com/NfKMor8m.png Also took a bit of a break from this project (was getting burned out) and did a conversion of the NIST JAMA (NIST.gov link) linear algebra library to javascript. For those with a math bent. Also, added a bunch of least squares support routines so you can do curve fitting in up to 4D with almost arbitrary equations. The library with a bunch of starter examples you can try (in the JAMA_Test.html file) can be found at: JAMA4js (Github Link) An example of the curve fitting in 4D. https://i.imgur.com/ZO4UUhA.gif |
Finally got the lighting to work correctly. Turns out it was even easier than all the complicated tile rotation and orientation ideas I calculated. Simply was dealing with normal maps in a way that mapping to a sphere did not work with. Fixed the issue, and now have nicely lit sphere with weather eroded terrain.
https://i.imgur.com/szjmFic.gif Now I have to actually figure out how to have a game to go with it. Still working on that part. |
Test of movement with 400,000 units given individual orders. Uses opengl shader to bulk calculate locations per frame.
Thinking about a Total War++ style game, although 400k might be a bit much. So many units on screen its difficult to really keep track of what's happening on the field. Could see how many players would simply find that scale of game overwhelming rather than enjoyable. Next need formations and better terrain. Eventually, probably going to need layered type of AI decision making for choosing actions at various layers of military units. Something like US Army Unit Divisions Soldier (1) Team (4) Squad (10) Platoon (40) Company (200) Battalion (1000) Brigade (5000) Division (15000) Corps (45000) Field Army (90000) Would also eventually need to deal with vehicles and unit - vehicle interactions. Example of unit movement shown below. https://i.imgur.com/EraIeTh.gif |
Another update on admittedly slow game progress. More work on large scale unit rendering. 250,000 with 3D pos, vel, acc, looping animation targets, and conditional removal. In attached video, units have no lifetime limit. Could probably support 1,000,000 as there is no appreciable slowdown. Just can't see anything with that many particles.
Second video shows the same, except with an 8 second lifetime limit and particle removal. Next up, use as a full particle system with particle-particle interaction. https://i.imgur.com/XyjPqqs.gifhttps://i.imgur.com/FSdWXHl.gif |
Further work on game particle systems. This one shows three separate systems with ~250,000. Moving the equivalent of a flamethrower within a 3D cloud of star particles. Has per particle animation, animated size & alpha profiles. Also does lighting and particle reflectivity. Shown at 2x speed. Next particles as light sources and HDR style camera bloom with deferred lighting. Then probably physically based rendering.
https://i.imgur.com/YHfnbJY.gif |
Another devlog for a game I made for the Library of Congress Friends' Choice Civics Video Game Challenge. Free to play, no ads, FOSS, per LOC requirements. Feel free to try, and if you find any issues leave me a comment and I'll try to fix them.
Game can be found at: http://forsako.rf.gd/AmericanCities/...gressGame.html The challenge itself can be found at Challenge.gov: https://www.challenge.gov/?challenge...game-challenge The game is meant to be a combination of a match-3 game, and a society simulation, such as the Civilization series. The basic match-3 portion features an 8x15 grid, with 8 block subtypes over a range of city attributes (Food, Industry, Health, Coins, Culture, Science, Religion, Civics). The intent is to simulate the development of a city such as Philadelphia (founded ~300 years ago) using match-3 mechanics to qualify for building purchases. The buildings are then intended to provide extra abilities (ex: Tetris style block swaps) or benefits for your town (ex: extra Culture or Civics points with each match). Below is an example of the game layout during play. https://i.imgur.com/AYkPu0V.jpeg This image shows how Tetramino swaps work, using a Z-shape tetramino to shift blocks around in a Z-pattern (the purple "culture" note blocks). Tromino and Tetramino swaps can be moved, rotated, and flipped. https://i.imgur.com/Mehey9m.jpeg This image shows an example of the building info display, summarizing the historical American building it's supposed to represent, the criteria to build, and the effect on being constructed. https://i.imgur.com/yuEaRET.jpeg Buildings can be selected for construction in the lower-right, similar to the way Starcraft, C&C, and similar games implement build choices. "Info" displays for each building can be accessed using the (i) icons. Game has been tested and appears to function in: Firefox Developer (119.0b1), Edge (117.0.2045.43), Chrome (117.0.5938.92), Opera (102.0.4880.56), and Android Samsung Browser. - Known issue: Map won't rotate with touch screen interface. Event buildings currently provide no benefit (hit the time-limit for entry). - Things I think are neat: Tetris style (Tromino and Tetromino) swaps (rotate blocks through a pattern), rotations / mirrors of all these, direct block replacement (specific or random), long distance exchanges, automated match shape identification (up to pentominos), building criteria based on specific shapes / rotations / mirrorings, wild-block matches, scalable SVG piece highlighting, a 3D webgl map of the town as its constructed, 80 buildings in 8 categories that all do something to the game state (with multiples of some and 40 hidden events, working on houses that build as you play). - If you want to play with all the abilities (as if every building is completed), check the box about the SVG scaling shapes demo near the bottom. |
Next project is working on retro software development. Got interested in old hardware, and what was actually used back in the 80's and 90's, and what those systems were capable of a while ago.
First step was figuring out what might be worthwhile to develop for. Eventually settled on systems that had at least a 1/4 million in sales, with computers and consoles as possibilities. Final list ended up encompassing 16 systems from the "1977 Trinity" (Apple II, Commodore Pet 2001, and Tandy TRS80) through the SNES and Sega Genesis. Six computers in total before the entire market got taken over by IBM clones, starting the three mentioned, adding the VIC-20, and ending with the Commodore 64 and ZX Spectrum. Ten consoles in total from 2nd generation (Channel F and Atari 2600), 3rd generation (Atari 7800, Sega Master System, and NES) up to 4th generation (SNES, Genesis, Game Gear, Game Boy, and Turbografx-16) Unfortunately, making anything work for all these systems requires a pretty huge range of compilers. A lot of really diligent people have made a bunch of compilers that will actually create functional software for these systems, yet there's still a huge range, with several varieties of assembly code to deal with and C code. Ended up needing cc65 (handles a lot, VIC-20, Commodore 64, Commodore PET 2001, Apple II, Atari 2600, Atari 7800, Nintendo Entertainment System, and PC Engine / TurboGrafx-16), Z88dk (TRS80, ZX Spectrum, and Game Boy (possibly)), GBDK with sdcc (better alternative for Game Boy, along with Sega Master System and Game Gear), psneslib with 816-tcc (SNES, takes its own special setup), sgdk with gcc (Sega Genesis, ALSO takes its own special setup and nonsensically crazy to actually get to do anything on Windows), and the VESWiki DevPack with dasm (only thing that will handle a Channel F). Honestly, just kind ended up being a science project in compilers, and whether I could get "anything" to compile on each platform. The full list that got decided on worked out to: Code:
System Sales WxH Color Depth cc65 Z88dk GBDK pvsnes sgdk VESNext up, all the various emulators necessary to get anything to actually run, since there are unfortunately not 16 different systems available for testing, and some go for rather large sums on the collectibles markets. |
Retro Emulators, need a bunch for 16 different retro systems. Took a while. They all work though. May take a bit to write out fully.
Heard RetroArch is cool, lots of recommendations (may work for your case), yet wanted something with limited layers in between where I had some idea of what was going on. (way too many issues of mysterious failures and not being sure if its the emulator or some other problem) Like last time, current situation is: Six retro computers: Apple II, Commodore Pet 2001, Tandy TRS80, VIC-20, Commodore 64, and ZX Spectrum Ten retro consoles: Fairchild Channel F, Atari 2600, Atari 7800, Sega Master System, NES, SNES, Genesis, Game Gear, Game Boy, and Turbografx-16. So, 16 emulation needs. --------------------------- COMPUTERS --------------------------- TRS-80: Best is George Phillips' trs80gp. Really pretty amazing. Best way to run stuff is to just make a .cmd file with z88dk and then drag and drop it into the emulator. May have to switch models to Model I, Model III, ect... --------------------------- PET 2001: Still working on getting a desktop emulator working. The best that's been found in the interim is an online emulator Mag. Norbert Landsteiner wrote at www.masswerk.at/pet/ Click "Mount File", choose a [yourfilename].prg file, and then at the prompt type: Code:
load"yourfilename",8--------------------------- Apple II: Ugly. Barely remember all the stupid stuff that's necessary. Doesn't work almost any way that's specified. Lots of searching wrong stuff. Need AppleWin ver 1.29.16 so that you can actually get an appropriate MASTER.DSK file for loading, and then you need AppleCommander (which will also require a functioning version of the Java runtime, ugg...) so that you can manage and create DSK files with your software actually loaded like its supposed to be. You have to move/copy the MASTER.DSK file to a folder, open AppleCommander, "Import" a file to use, click on a file you want, after it loads, select it, and make sure it's set as "B" for binary, and starts at Address 0803. After that part is done, then you can open AppleWin, click the Apple button (make sure a disk is selected before you start), use the CATALOG command to view the files on the disk, and BRUN [filename] to actually run something. Like "BRUN HELLO" or similar. --------------------------- VIC-20: Best appears to be GTK3VICE, the Versatile Commodore Emulator. Most recent (as of March 2026) is 3.10. Open "xvic.exe" in the "bin" folder. Then "drag and drop" a .prg file into the emulator screen (this is a common theme). Trying to do almost any other load method is complicated and fails. To get some large stuff to run, you may have to go to "Settings"->"Machine"->"Model" and then select a RAM Block Expansion. --------------------------- Commodore 64: Very similar to VIC-20. Best appears to be GTK3VICE, the Versatile Commodore Emulator. Open "x64sc.exe" in the "bin" folder. Then "drag and drop" a .c64 file into the emulator screen. Should work. Most stuff has worked first try. Much less finicky than the VIC-20. --------------------------- ZX Spectrum: Best appears to be Speccy, Portable Sinclair ZX Spectrum and Sam Coupe Emulator by Marat Fayzullin. Latest Version (as of March 2026) is 5.9. Compared to getting anything to actually compile... with the ZX Spectrum, running stuff is actually really easy. "File"->"Open", navigate to file, select a .tap file. Should work if the file is valid. Good UI. Consistent. Easy. May need to select a ZX Spectrum model in "Hardware"->"Computer Model". --------------------------- CONSOLES --------------------------- Channel F: Most painful is one of the earliest. The VESWiki Devpack comes with the MESS emulator (one of the only ones that will work. Yet if not done exactly correctly, it fails all the time. No way to start it without a game already, and the command line stuff is the only way that will work. Also, lots of silent fails with "your cart is not valid". Eventually figured out that something like: Code:
%messPath%\messd channelf -cartridge %cartPath%\game.bin -w -effect sharp -r 640x480 -kaCode:
messd channelf -cartridge %cartPath%\game.bin -w -effect sharp -r 640x480 -kaCode:
set cartPath=%cd%Is what will work. Some demos had it set up nice, and work right away. Some did not. Getting the MESS emulator to function by actually finding it online seperately and downloading stuff is super challenging otherwise. Do not do this. Waste of time. Super finicky. Also crazy trying with Mame. Spend longer wrestling Mame than doing anything. --------------------------- Atari 2600: Best appears to be Stella, A Multi-Platform Atari 2600 VCS Emulator, by Bradford W. Mott, and maintained by Stephen Anthony. Like Speccy, good UI, consistent, easy. Latest version (as of March 2026) appears to be 7.0. Starts in File Browser. Navigate to file of choice, select a .a26 file, such as "hello.a26" and double-click. Should run. --------------------------- Atari 7800: Best that could be found was BupSystem, by Osman D. Celimli. Most recent version appears to be BupSystem 0.9.6.4. Mostly works. Not difficult. "Game"->"Open", navigate to file, select a .a78 file such as "hello.a78", double-click or "Open". Should run. --------------------------- Sega Master System: Best found was GearSystem. Most recent version appears to be Gearsystem-3.8.6. Pretty easy to use. "Gearsystem"->"Open ROM", navigate to file, select a .sms file such as "hello.sms", double-click or "Open". Ditto for GameGear below. --------------------------- NES: Best appears to be MESEN. Has a combined version (NES, SNES, Game Boy (Color), Game Boy Advance, PC Engine, SMS/Game Gear, WonderSwan (Color)) (Latest version: 2.1.1) or separate NES version (best 0.9.9) and SNES version (best 0.4.0) only. "File"->"Open", navigate to file, select a .nes file, such as "hello.nes", double-click or "Open". Ditto for SNES below. --------------------------- SNES: Same as above, best appears to be MESEN. Personally used MESEN-S for SNES only. "File"->"Open", navigate to file, select a .sfc file, such as "hello.sfc", double-click or "Open". Ditto for NES above. --------------------------- Sega Genesis: Best seems to be Gens (however, there may be others as it has not had significant updates since 2021). Latest version seems to be 2.14. "File"->"Open ROM", navigate to file, select a .gen file such as "hello.gen", double-click or "Open". --------------------------- PC Engine / Turbografx-16: Eventually went with Ootake. (website is Japanese) This one, not sure if its the best. Kind of crazy since it's Japanese, menu system does not fit very cleanly. However, recent updates as of 2026.01.03. Most current version is 3.05. On open, after disclaimer, click "CD ROM Game", click "Ok" on system cart dialog, navigate to file, select a .pce file such as "hello.pce", double-click or "Open". --------------------------- Game Boy: Really like BGB Gameboy Emulator. Great emulator. Very minimalistic. Fast, tiny, great debugger. Only (minimal) issue is menu is all right-clicking. Latest version appears to be 1.6.6. Right-click on screen, select "Load ROM", navigate to file, select a .gb file such as "hello.gb", double-click or "Open". Excellent emulator that's worked for decades. GB retro scene's always been amazing. --------------------------- Game Gear: Like above for SMS, best found was GearSystem. Most recent version appears to be Gearsystem-3.8.6. Easy. "Gearsystem"->"Open ROM", navigate to file, select a .gg file such as "hello.gg", double-click or "Open". Ditto for SMS above. --------------------------- That took several days of searching and messing about before a lot of this stuff would even work. Partially just writing to document what actually works for my own memory and where the links are at. AppleII, Channel F, VIC-20, and a few others were pains. Genesis wasn't bad to find an emulator, yet getting anything that "works". Pfttt. Anyhow, maybe this will help somebody else get this stuff functional in their own setup, or me if this current setup crashes. |
| All times are GMT -5. The time now is 09:26 PM. |
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc.