💾 Archived View for ythraverse.xyz › gemlog › entries › 240611.gmi captured on 2024-06-16 at 12:00:51. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
Continued good progress on VVO, my multiplayer roguelite. One major development: The client is no longer written in Electron. I wanted to use something that would let me bundle web tech into a desktop application because being able to build the UI with HTML and CSS would have been easy and convenient, but the complexity and aggravation of getting Electron to allow the simplest things due to incredibly cumbersome security features became too annoying.
So, I've switched to writing the client in Pygame. I don't even particulary like Python as a language, building the UI elements will be more cumbersome this way, and it's slower than molasses so generally not very well-suited to performance-intensive applications (any "Python" packages that need to be high-performance like math and AI are just Python wrappers build around code written in much faster languages)... but I made this decision because (a) my simple client won't need to be high-performance anyway and (b) if there's one thing Python is usually good at, it's being simple, and I was very ready for "simple" after the boggling over-complexity of Electron.
So far, it's turning out to be a good decision. Written in Pygame, getting the client to communicate with the server, request a randomly-generated map, and display it, was the work of an hour or less. And now I get the satisfaction of seeing my random maps displayed not just as ASCII, but as actual tile graphics:
Screenshot of VVO client displaying a map
Granted, it's not the most beautiful thing, but this is just the first version of the map tiles -- I'll make them look better as I go. And having reached this point so quickly, even while not on vacation so I've only got a few hours in the evening each day to work on it, is pretty exciting.
I could go in various directions from here, but I think the next major step will be to mock up the minimum attributes needed for a player character, allow it to move on the map (respecting terrain restrictions), make sure the client and server remain in agreement about the player's location, and then maybe add fog of war and vision/line-of-sight.
After that... maybe see about running two clients at once and making sure both the server and the clients can handle having multiple players logged in and doing stuff. Better to make sure that works sooner rather than later.
Well, that sounds like at least another week of work, easily. If I wanted a more substantial project for teaching myself Golang (at least on the server side), I certainly got that with this project. (: