sparr: (Default)
Spare Steam keys from some game bundles I purchased recently. This is just part of the list, I've split them up across Mastodon, Reddit, Dreamwidth, Twitter, Facebook. Go find me on other platforms if you want more.

TLLY5-L35RH-KRRZR Torchlight
PDF7Y-VQ97D-0FZKX Virgo Versus The Zodiac
7E0JR-FPLEM-2HDXK Warhammer 40000: Gladius - Relics of War
QCK8C-DCKW6-GXCPB We Were Here Too
9EFIM-F79MB-5FFPD Yooka-Laylee and the Impossible Lair

I have swapped the first and third part of each code, and the first and fifth character of each part. 01234-56789-ABCDE is really EBCDA-96785-41230. Please comment when you claim a key, or discover someone else has claimed it already.
sparr: (Default)
This post is my first attempt to write down my ideas for a game in a genre that has no name. Explanation of the genre with links to example games are in my previous post (https://sparr.dreamwidth.org/88186.html), and that is necessary context for most things below to make sense.
 
My primary inspirations here are Overlord (http://atrey.karlin.mff.cuni.cz/~shade/academy/), modern asynchronous board game platforms, and modern game mod systems.
 
Most previous games in this genre have existed in the form of a single instance that runs for a long duration. A few have had large enough player bases that the codebase of the game continues development and after one game has ended another begins with bigger and better rules, or some creative new twists. Only one, Atlantis, has directly spawned additional games based mostly on the same code that ran at the same time. I don't want to build a game that only gets played once (even if that "once" might last for 5-20 years if I am as successful as Atlantis or Eressea or Olympia), or that is the same every time it gets played. I want to build a game that is easy to modify, with a modern approach to scripted game mods that can alter fundamental aspects of the game without having to write detailed engine code to support the changes. Further, I want to build a platform that can run multiple instances of the game, and provide all the necessary tools for users to administer their own games with whatever settings they want.
 
The game will have a web interface and probably a mobile app. Every game in this genre has started out in a purely textual format, but then community efforts have produced GUI clients that make the game situation far easier to comprehend and interact with. Those have all been based on custom written parsers for the plain text output of the original game. There are some planned efforts underway to create a web client for Atlantis v5, but they will be pasted on. My game will be designed to produce machine readable data from the start, with transformation to pretty text or interfaces as a layer on top of that. Instructions from the player will also be in machine readable format, possibly with a parser for plain text instructions if some players want to play the old fashioned way.
 
In addition to the general grid of world map locations, my game will embrace the idea of smaller and nested locations that are fully distinct. Cities will exist separately from the surrounding terrain; it will be possible to guard a city to prevent entry without needing as many men as it would take to guard the whole region. Conversely, it will be possible to guard a region without entering the city it contains, which will enable laying siege to a guarded city. Caves and tunnels and portals will exist, leading to other locations in ways both realistic and fantastic, and the interior of at least some of those locations will be places units can exist without interacting with units outside.
 
The economy of a location and larger areas will be driven by systems that produce fluctuations over time even without player involvement. Cities will grow or decline on their own. Trade goods will become available and sell out over time, rather than being produced at entirely predictable rates.
 
Turns will be subdivided into discrete time slices, probably days. Many games in this genre simply handle whole turns/months at once, leading to silly situations where a unit that is otherwise capable of moving four regions per month can't make a two-region round trip in a single month if it needs to accomplish anything at the midpoint of the journey. I want a unit to be able to spend 5 days moving, pick something up, spend 5 days moving, buy something, spend 5 days moving, attack someone, spend 5 days moving, reach a destination, all in about 23 days.
 
Instructions given to units will have constructs to enable conditional orders so that units can behave more intelligently than just doing one specific thing or doing nothing. A scout will be able to travel until it hits an obstacle, then travel in a different direction or do something else in the obstructed location. A courier will be able to do something productive until someone hands them an item, then immediately depart in a direction that depends on the item they were given. An army will be able to decide whether to move based on the outcome of a battle, or whether to engage in a battle based on some criteria applied to the environment. Any unit performing an action with an unpredictable outcome, such as a random amount of production or a random probability of success or a random duration of effort, will be able to base their next action on the previous outcome without waiting a whole month for additional instructions.
 
Most games in this genre have a syntax checker for submitted orders, to tell you if you've submitted something that can't be parsed at all. Very few have any amount of order simulation and warnings, to tell you when you're doing something that may not or probably won't work, such as attempting to study a skill that a unit does not have the prerequisites for, or spending money they don't have. None can simulate orders to the point of knowing that the money you're trying to spend but don't have is money being earned or given/traded from another unit earlier in the turn. I want to simulate orders at least to that degree, including showing the player what the state of the world would look like if their orders were enacted without any other player giving orders. A stretch goal would be allowing a player to submit theoretical orders for another faction in order to see what the world would look like if those orders took place alongside their own.
 
Those are my thoughts for today. My next effort on this front will probably be to write a very rough draft of what a rules/intro document might look like, with a lot of placeholders for more complex content in the future, but nailing down some numbers about various game mechanics as well as perhaps describing/designing what the interfaces might look like.
sparr: (Default)
I want a particular computer game to exist and be played by enough people that finding people to play and games to join is easy. The genre of this game does not have a name, and you've probably never heard of any games like it. Some example games in the genre are Atlantis (https://en.wikipedia.org/wiki/Atlantis_PbeM), Olympia (https://www.pbm.com/oly/), Eressea (https://www.eressea.de/), Lorenai (https://sourceforge.net/projects/lorenai/), and my personal favorite Overlord (http://atrey.karlin.mff.cuni.cz/~shade/academy/). They are very niche, with a peak player base across the whole genre of perhaps 1000 people 10-20 years ago; recently a new game of Atlantis started up, the first in a few years, and players were excited to find a few dozen others across the whole community. A key term in searching for them is "PBEM", which stands for "Play By EMail", but that is a generic term that also includes a thousand other games played via email from chess to diplomacy to mafia/werewolf to thematic role playing games.
 
A rough outline of the genre is as follows.
 
There is a fictional world, often inspired by fantasy tropes. The world is laid out on some sort of grid map, with locations on the grid having properties such as terrain, weather, population, animal and plant growth, towns and cities, and perhaps less common things like magical effects. Some grid locations might contain natural or artificial additional smaller nested locations, such as towns and cities, buildings, caves, etc, which connect to each other in ways other than the typical compass directions of the main world map. Minor activity happens in the world outside of players' control, such as economic changes, city development, monster and animal migrations, and similar things, but most major events are driven by the players.
 
In this world each player of the game controls a faction or nation or other grouping of individuals sharing some loyalty or purpose. The player has full knowledge of everything the members of their faction can see, and controls the actions of those members by giving them instructions about what to do.
 
The game operates in discrete time units, often conceptualized as months, sometimes as days. On a regular real-world schedule each player finds out what happened in the world during the previous game-world time that has passed and has the opportunity to submit new instructions at their leisure. A common configuration is for 30 game days or one game month to pass for every real world week, with players experiencing the game in discrete 30-day chunks. To be specific, submitting instructions on Monday or Friday has the exact same effect on the month of game time that is about to be processed.
 
The player's faction is often divided into logical groupings of people and items, which can be treated as single recipients of new instructions and single sources of new information. There are various ways to handle this, with different restrictions on the total number of different units of people that can be controlled at once, and how they might be structured.
 
Here is an example taken from a game I am currently playing. Below is an excerpt from a game report which I receive every two days and represents one game month of time passing. This excerpt focuses on a single unit:
 
Scout (1234): Rides from swamp (15,11) in Linsstu'ist to mountain (14,12) in Wenhin.
Scout (1234): Rides from mountain (14,12) in Wenhin to mountain (13,11) in Wenhin.
Scout (1234): Claims 10 silver for maintenance.
mountain (13,11) in Wenhin, contains Tranlastan [city], 17154 peasants
  (humans), $17497.
  Wages: $15.1 (Max: $3499).
  Wanted: 116 grain [GRAI] at $27, 178 livestock [LIVE] at $23, 198
    fish [FISH] at $24, 30 leather armor [LARM] at $67, 52 wine [WINE]
    at $287, 32 perfume [PERF] at $290.
  For Sale: 38 vodka [VODK] at $76, 25 gems [GEM] at $130, 686 humans
    [MAN] at $48, 137 leaders [LEAD] at $845.
  Entertainment available: $1046.
  Products: 35 grain [GRAI], 22 iron [IRON], 10 stone [STON].
Exits:
  North : ocean (13,09) in Atlantis Ocean.
  Northeast : ocean (14,10) in Atlantis Ocean.
  Southeast : mountain (14,12) in Wenhin.
  South : ocean (13,13) in Atlantis Ocean.
  Southwest : mountain (12,12) in Wenhin.
  Northwest : mountain (12,10) in Wenhin.
- City Guard (48), on guard, The Guardsmen (1), 120 leaders [LEAD],
  120 swords [SWOR].
* Scout (1234), Sparr (11), avoiding, behind, sharing, consuming
  faction's food, won't cross water, high elf [HELF], horse [HORS].
  Weight: 60. Capacity: 0/70/85/0. Skills: stealth [STEA] 2 (90).
- Unit (678), centaur [CTAU].
 
I have focused here on unit #1234 whose name is Scout. This is a unit under my control. In the previous turn I told it to move a couple of times, which it has done, ending the previous month in the described region which contains a city. The unit is composed of a single person, of the race high elf which has some effect on what skills they can learn to advanced levels later. The unit has a single horse, and ignoring some arithmetic could travel while carrying 10 weight units of cargo at riding speed or 25 units at walking speed. The unit has previously studied (under a teacher, as it happens, but that's not evident here) the stealth skill, which makes the unit harder for other factions to see and get information about, and also gives this unit the ability to attempt to steal or perform assassinations. Also I have a small amount of money available to any unit of my faction anywhere in the world, without them needing to carry it with them and I am currently spending 10 silver per month from that fund to keep this scout alive. My next wave of scouts are better trained in earning their own keep while they travel, but this one represents the earliest wave of scouts I sent out into the world.
 
Also shown are details about the region. In this game, the city itself isn't physically represented, it just describes a very high level of economic activity throughout the described region. Every region has some amount of wages that can be earned by working units, taxes that an army could collect, entertainment value that a performer or magician could earn from the population, and a few other aspects. Most regions have some resources that can be purchased and some that can be produced with the right skill. All of this is detailed here, and some of it might change over time depending on how I and other players interact with the region, and also on some background economic changes that the game itself implements.
 
There are also a couple of other units present. The city has a force of guards which are controlled by the game engine, and whose job is to prevent fighting or pillaging in the city, among a few other things. Finally there is a lone centaur controlled by some other faction that I cannot see any other information about.
 
Now I have a few days to talk to other players and consider my options, then I will send in a new set of orders telling this unit (and all of my others) what to do for the next month of their life. This particular unit has a future as a courier, carrying items and money from place to place, for which stealth and a horse (or, later, a flying horse or airship) are key.
 
I had intended to actually write about the game I want to build, but this explanation of the genre and the example have already run longer than expected. Next time I write about this, I will start to describe what I want to do differently than the previous games, in terms of interface and features and game mechanics. Stay tuned!
sparr: (Default)
TL;DR: Valve could save the world about two petabytes of storage just by deduplicating the contents of their localization/translation files, and it gets worse from there.

I've recently become annoyed as I realize just how bloated many modern games have become. This was a moderate problem 5-10 years ago, but it has gotten completely out of control since then. As I was making a short list of games I've recently considered installing but skipped due to their size (4GB for a top-down low-poly low-texture platformer? 30GB for a RTS? 83GB for a MMORPG?) I found myself installing a 117MB update for Steam itself. In the software-bloat mindset, this prompted an immediate "wait, what?", leading to the writing of this post.

First, I headed over to `/Applications/Steam.app` (yes, I am on a Mac, but [almost?] everything below is platform-agnostic except for the paths). Here we have a total of 4.6MB, comprised of 3.3MB for the binary, 1.1MB for a crash reporting library, and 0.3MB for translations. I'm not going deeper into the binary or library; let's say those are reasonably sized and necessary/useful. That brings us to the translations. Translations are great! I'm definitely not saying they shouldn't be there, or that they should be less thorough. However, I'm going to be specific about this problem, because it becomes more important later. The English strings appear number_of_languages times; Do we really need 26 copies of every string to be translated, including:

%appname% has changed where it stores game content from '~/Documents/Steam Content' to '~/Library/Application Support/Steam/SteamApps'. You have game files in the original location, and Steam was not able to move the files because files already exist at the new location. You may need to move the files manually, or delete the old files and download your games again. Continue anyway?


The labels for the strings appear number_of_languages*2-1 times, making 51 copies of "SteamBootstrapper_InsufficientDiskSpace". Finally, "[english]" appears a whopping 900 times, once for every string in every non-english language. A simple .tar.gz of this folder cuts the size by 92%. Assuming there's some good reason the files aren't compressed, the content could still be deduplicated and the necessary duplication handled in whatever code loads them, which might be an 60% reduction in size. I am hopeful that all of this was compressed when downloading, but that doesn't solve the problem of it wasting space on disk, which gets more important later.

Next, I went to `~/Library/Application Support/Steam/`. I realized there's a lot of user-specific stuff in there, so I created a new user to launch Steam once and get a clean slate. 202MB of downloads leading to 757MB of disk space used. I will mention here that installing apps and games for just one user, and requiring the installation effort and disk space to be duplicated for a second user, is a terrible paradigm when it's not explicit and intentional, but that's a different rant for a different post. Let's dive into that 757MB, and I'll skip any parts that I have no objections to.

168MB for `Steam/Steam.AppBundle/Steam/Contents/MacOS/package/` which contains a bunch of archives that *seem* to match up to extracted content in the other directories. Does `package/tenfoot_fonts_all.zip.vz.SOMEHASH` contain a copy of `tenfoot/resource/fonts/*`? If the Steam client can use these files to repair itself in case of damaged or lost files, that's great. If it can't, then why are they still there?

147MB for Chromium Embedded Framework. I can't blame Valve here; the fault for not sharing libraries like this with other applications and keeping them in a central place falls on the shoulders of Apple and Microsoft and the environments they have developed. I am potentially giving Google or Apple a bit of side eye here for 14MB of translations, 200-500kB per language, depending on who is to blame for the contents of the *.lproj/locale.pak files, and how much space is wasted in there.

137MB for the tenfoot (Big Picture) interface:

63MB for `tenfoot/images/` on which I just deleted 500 words of detail here upon realizing I hadn't covered even 10% of it. TGAs that should be PNGs, PNGs that should be JPEGs, including some that appear to already have JPEG artifacts, PNGs that should be vector graphics, and so on.

31MB for `tenfoot/localization/` which has the same data duplication problems as from Steam.app, writ large. 177856 copies of "[english]" and 26 copies of:

Intended to be used with a dual-stage trigger setup, Hip Fire allows a quick pull of the trigger to engage the click without engaging the threshold. A slower pull or hover will engage the threshold action. This allows for actions such as iron-sights to be set on the threshold and fire on the click, while still allowing a quick pull to click to fire without entering iron-sights. Additionally, once the click has been hit, the threshold won't be engaged until the trigger has been released outside of the threshold range, allowing it to be primed for additional clicks. Relaxed Hip Fire mode is a larger window before engaging the threshold, allowing a slower pull of the trigger to avoid it. This means the Threshold action will be slightly less responsive when intentionally trying to engage.


11MB for `tenfoot/sounds/`, most of which is ambient background MP3, but also a bunch of WAV sound effects despite the evidenced support for MP3s.

That's all for Big Picture, back to top level Steam contents.

36MB for translations in `public/`, again with all the duplication in the previously mentioned translation/localization files.

20MB for 'graphics/' which is full of TGA files that should be PNGs and/or procedurally generated, most notably the 4.2MB music_details_mask.tga that is just a checkerboard on top of a radial gradient, and clienttexture*.tga which are just gradients on a flat background.

The rest of the smaller directories contain many more examples of poor image format selection, duplicated translated strings, etc, which I won't further enumerate here. If Valve ever decides to address the problems above, they will probably solve the smaller instances of the same problems as a side effect.

Having gotten this far, my original "wait, what?" actually still remains unanswered. Almost everything I've just described seems mostly static, images and sounds and text files and third party libraries. The binaries and first party libraries are actually pretty small. I can't point to 117MB worth of content that I expect to have changed in the update today, let alone the ~300MB that I would expect from the compression ratio evident in the original client download. http://store.steampowered.com/news/38412/ has the changelog, where I see a lot of what should be code/library/driver changes, none of which touches on all the pieces of the client that seem to take up tens to hundreds of MB of space each. Maybe I'll find some insight into the update size. Maybe I'll go do this same teardown on those three games, or at least two seeing as how I don't even have 83GB of free disk space right now.
sparr: (Default)
I recently learned of this game at a house party, and then later played it on a car trip for a couple of hours. The basic mechanics are guessing and trivia, with some know-your-opponents aspects as well. It's a decent game for building vocabulary, and stresses verbal creativity. It requires 3 or more players, and I think it plays best with 4-5 (road trip, anyone?). The internet has exposed me to a number of variations already, so I'll start with a description of the most basic game and then describe as many variants or additional rules as I can.

Read more... )

Profile

sparr: (Default)
Clarence "Sparr" Risher

February 2025

S M T W T F S
      1
2345678
9101112131415
16 171819202122
232425262728 

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 15th, 2025 08:02 am
Powered by Dreamwidth Studios