Press "Enter" to skip to content

Forum

Please or Register to create posts and topics.

Chaos - Dominions meets Battle Royale and then you Disbelieve it all!

PreviousPage 6 of 6

Video of the match is here:

 

I did play with a good amount of observation aforehand on spell effects and success rates, but I didn't expect to win this - sooo many ways you can get instakilled with no chance to prevent it, number one being the old summon-an-illusion-and-smack-your-neighbor-the-turn, hence my episodes of disbelieve paranoia. If you think getting killed by an imaginary dragon of the player going before you is bad, try getting killed by one going after you. There's no defense except to kill him first, or summon magic wings and fly out of the way.

Incidentally, as Dayyalu alluded to, fliers can attack at range without moving by selecting their target on the "move" command. If the attack fails, the flyer stays put. The only thing worse than a pigeon you can't swat is a pigeon you can't swat with a sniper rifle.

Here's a real cheesy tactic that I've used against the AI. Kill your own horse, then raise it. Presto - now you have a ride that can't die, and neither can you!

 

Now that the game's over, I found some reverse-engineered source code, and can delve into some of the mechanics.

Spoiler

Player stat generation:

  • CPULVL is 1-8 for bots and 0 for humans.
  • Combat: d10/2 + 1 + CPULVL/2
  • Defence: d10/2 + 1 + CPULVL/2
  • Manoeuvre: d10/2 + 3 + CPULVL/4
  • Magic resistance: d10/2 + 6
  • Spell count: d10/2 + 11 + CPULVL, maximum 20
  • Ability: Roll a d10. If greater than or equal to (5 - CPULVL/2), then d10/4. Otherwise 0.

Casting: Each spell has a base success rate, from 1 to 10. Add the player's spellcasting ability to that. If the arena is aligned with the spell, add 1 for every 4 points (each blip on the spell menu represents 4 points). If a d10 roll is higher than the calculated success rate, the spell fails.

Manoeuvre: If you select a unit adjacent to an enemy, roll d10+1. If it beats your unit's manoeuvre, you're engaged and must fight or stay put. Does not apply to mounted wizards!

Attack: Roll d10 and add to base attack (or ranged) value. Add modifiers - e.g. magic knife. Roll another d10 and add to target's defense. Add  modifiers (e.g. armour). If attack is higher, target dies.

Subversion: Roll d10. If it's less (yes, less!) than the target's magic resistance, it's yours.

Magic missile: Roll d10+3. Add another 3 if casting lightning. Roll another d10 and add to target's defense (not magic resistance). If attack is higher or equal, the target dies.

Justice: Roll d10. If greater than or equal to the target's magic resistance, kill it. If the target is a wizard, kill all his creatures! A bug causes creatures standing over corpses to transform into that instead of die.

Turmoil: Very complicated logic, but basically we loop over the whole arena and each tile swaps its contents with another random tile. There are some rules that override the randomness.

Magic castle: Each turn, roll d10. If it's less than 8, destroy the magic castle.

Magic wood: Each turn under a tree, roll d10. If greater than 7, get a new spell picked at random and destroy the tree.

The Wargaming Scribe, Argyraspide and 2 other users have reacted to this post.
The Wargaming ScribeArgyraspideBaron RastignakOperative Lynx
Quote from DDG Ahab on 13 March 2024, 12h18

Magic wood: Each turn under a tree, roll d10. If greater than 7, get a new spell picked at random and destroy the tree.

Chaos, the game where spells grow on trees!

 

Hey, hey.

After a long introspection, I won't organize a round #2 of Chaos...
... next game is going to be Apocalypse, which sadly is 5 players only, so I will have to bench some players. Karbonkitty was benched on Chaos so he has a privilege slot. For the rest, I will have to rank you according to how good your meme game is and take the top ones.

Porkbelly has reacted to this post.
Porkbelly
Quote from The Wargaming Scribe on 21 March 2024, 14h21

Hey, hey.

After a long introspection, I won't organize a round #2 of Chaos...
... next game is going to be Apocalypse, which sadly is 5 players only, so I will have to bench some players. Karbonkitty was benched on Chaos so he has a privilege slot. For the rest, I will have to rank you according to how good your meme game is and take the top ones.

Whelp, that's me out then, see you guys on the next one.

Quote from The Wargaming Scribe on 21 March 2024, 14h21

Hey, hey.... next game is going to be Apocalypse,

Great! I'm curious to see if this bears any relation to the forgotten Mike Hayes' boardgame Warlord.

I have no idea what a mee-maw game is, but here's a Mad Porcus take on the Apocalypse.

DDG Ahab has reacted to this post.
DDG Ahab

Porkbelly has reacted to this post.
Porkbelly

Had finally time to watch our Chaos battle, and at least it cleared some confusion about how the Magic Wood worked. The name Chaos is really appropriate for the game with all those ways to get instakilled and with the big role of luck. Your position in the arena affects the possible strategies available to you (I don't think Ahab's paranoia-strategy would have worked so well in any other position) and since the spell selection is random (I wonder whether the d10 also governs the selection somehow), it would need quite some experience playing the game before you could figure out how to approach any given situation with some sense of having control.

Even with this little experience I would say this is the most balanced and thus the best game so far in Gollop's chronology, and I can easily see why it would have been popular on Speccy. But because how quickly the death can come or how drawn-out the end game can be between the last two, I think the Chaos works better as hot-seat game than as a PBEM game. In order to even out the luck factor this would need several matches in a row to be played. Maybe best-of-seven or some similar format would give the best experience.

 

The Wargaming Scribe, Dayyalu and 2 other users have reacted to this post.
The Wargaming ScribeDayyaluPorkbellyDDG Ahab
Quote from Operative Lynx on 31 March 2024, 15h25

(I wonder whether the d10 also governs the selection somehow)

It doesn't. The code selects a random number from 1 to 255, performs a bitwise AND with 63, and if the result isn't allowed (possible ranges are 1-63, legal ranges are 2-60) then it rolls again. Once a legal number is chosen, the spell at that index is added to the spellbook.

 

I don't know why it doesn't just roll d59+1. Maybe the former approach is faster, or gives a fairer distribution, but I wouldn't really understand how.

The Wargaming Scribe, Dayyalu and 4 other users have reacted to this post.
The Wargaming ScribeDayyaluPorkbellyMorpheus KitamiBaron RastignakOperative Lynx

It's a pretty standard approach to generating random numbers in assembly language down at the bare metal.  Most machines will have a byte or two somewhere that is rapidly ticking away. With the Spectrum, the Refresh Register is pretty much in a constantly changing state during machine operation, makes it a good seed for RNG.

Grab a byte from the Register (0-255), mask the two high bits you don't need (0-63) then do upper and lower bound tests. It would be about 8 instructions.

I wonder if Gollop wrote in assembler as a matter of course. I do stand in awe of those 8-bit coders that could write large programs in assembler, rather than compiling into it. Anything over about 1K of code and my head explodes.

The Wargaming Scribe, Argyraspide and 3 other users have reacted to this post.
The Wargaming ScribeArgyraspideDDG AhabBaron RastignakOperative Lynx

It still seems odd, because the part where it gets the random number is calling a function GetRand(int i), passing in 255, which is also the function called by all the d10 rolls passing in 10.

GetRand does some voodoo involving frame count, bit shifting in both directions, reseeding, bitwise operators, and multiplying the result by i before doing another bit shift and returning the result. It's beyond my understanding, but I assume it works. Maybe the original assembly code gets the random byte in a more... Spectrummy way than this, and the decompile code just references the GetRand function in its place since the function is already there?

Dayyalu, Porkbelly and Baron Rastignak have reacted to this post.
DayyaluPorkbellyBaron Rastignak

That's interesting... yeah pervasive use of a bare metal approach is not good for commercial gaming, not if you want portable code, so it makes sense to break out the RNG as a separate routine. All the shucking and jiving sounds like a typical algorithmic approach to RNG that you might find in the Knuth tomes. You're just trying to create white noise from a seed, which might be a static value.

I don't really know, but I suspect Gollop wanted the unpredictably of a variable hardware register. Reloading from a save file a lot of games will give you the same sequence of RNG results every time just by pulling the next number out of the seed-based algorithm. Chaos doesn't work like that since it appears to be using a Spectrummy (frame rate) timer in there. A simple register approach alone may not give you enough randomness, especially if your code needs to generate a stream of RN's without pausing for user input. A decent algorithm certainly helps to muddy any patterns.

But you're right RND(59)+1 would be a better approach here. Maybe it's simply because the RNG routine was added later.

Dayyalu, DDG Ahab and Baron Rastignak have reacted to this post.
DayyaluDDG AhabBaron Rastignak
PreviousPage 6 of 6