Elite - Galaxy Creator Pokes.
So 8 meagre galaxies are not enough for you? Tired of visiting the same old 2048 planets over and over? Say no more, these "Galaxy Creator" pokes will have you sorted in no time. Simply pop a number between 0-255 behind one or all of these bad boys and you'll have a new set of 8 Galaxies to explore. To infinity (almost) and beyond!
53870,x
53871,x
53872,x
53873,x
53874,x
53875,x
Since the initial seed is encountered twice in the game's code, it might be wise to enter the same number(s) in the following addresses as well. (don't know if these are used at all in game, but better safe than sorry I suppose).
53392,x
53393,x
53394,x
53395,x
53396,x
53397,x
Just a bit of fun!
53870,x
53871,x
53872,x
53873,x
53874,x
53875,x
Since the initial seed is encountered twice in the game's code, it might be wise to enter the same number(s) in the following addresses as well. (don't know if these are used at all in game, but better safe than sorry I suppose).
53392,x
53393,x
53394,x
53395,x
53396,x
53397,x
Just a bit of fun!
Thanked by 1Morkin
Comments
D.
I noticed that when you generate a new galaxy the Lave coordinates are hard coded so you always start at the system closest to Lave's original coordinates. No problem, right? Well your fuel range isn't updated to the new planet's coordinates, it's stuck at Lave. All you really have to do, though, is jump to a system close-by, the fuel range gets updated and your good to go. You can also manually set Lave's fixed coordinates by changing these addresses: $D277 (53879) for X and $D275 (53877) for Y if you really need to.
However, the use of procedural generation created a few problems. There are a number of poorly located systems that can be reached only by galactic hyperspace— these are more than 7 light years from their nearest neighbour, thus trapping the traveller. Braben and Bell also checked that none of the system names were profane - removing an entire galaxy after finding a planet named "Arse".
I have a planet 'Tities' in one of my galaxies, which I thought was cute. :)
Since there's a lot of information to be generated, 6 bytes were probably chosen to get higher entropy while still being a relatively small seed. Fewer would probably repeat itself sooner and a larger seed meant less RAM. I remember David talking fondly about saving 1-3 bytes on the original BBC version, so it was always a tight fit.
Hm, the seed isn't stored in my saves, since it's a constant why would it be stored there? Or am I missing something?
I guess you could modify the syllables as well, though they might be part of the token system so you may end up with gibberish in the menus. If you're talking about modifications besides the procedural generation, like missions and the sort, you'd have to start disassemble the code. :)
This is from 48k version of Elite, not sure if 128k version changed address of this as you didn't specify for what version your info relates.
So, look at this Ersh: (save picture as from browser to see full res)
http://prekladytextu.eu/elitesave.jpg
I believe game changes this seed for each galaxy in save game but this needs to be checked with save in galaxy > 1.
This is from textelite.c and look at that void nextgalaxy(seedtype *s) function.
/**+Generate galaxy **/
/* Functions for galactic hyperspace */
uint16 rotatel(uint16 x) /* rotate 8 bit number leftwards */
/* (tried to use chars but too much effort persuading this braindead
language to do bit operations on bytes!) */
{ uint16 temp = x&128;
return (2*(x&127))+(temp>>7);
}
uint16 twist(uint16 x)
{ return (uint16)((256*rotatel(x>>8))+rotatel(x&255));
}
void nextgalaxy(seedtype *s) /* Apply to base seed; once for galaxy 2 */
{ (*s).w0 = twist((*s).w0); /* twice for galaxy 3, etc. */
(*s).w1 = twist((*s).w1); /* Eighth application gives galaxy 1 again*/
(*s).w2 = twist((*s).w2);
}
/* Original game generated from scratch each time info needed */
void buildgalaxy(uint galaxynum)
{ uint syscount,galcount;
seed.w0=base0; seed.w1=base1; seed.w2=base2; /* Initialise seed for galaxy 1 */
for(galcount=1;galcount<galaxynum;++galcount) nextgalaxy(&seed);
/* Put galaxy data into array of structures */
for(syscount=0;syscount<galsize;++syscount) galaxy[syscount]=makesystem(&seed);
}
BTW I think its you from this thread http://www.worldofspectrum.org/forums/discussion/50165/elite-missions-triggers/p1 where I was interested to make complete map of ZX Elite save file and WOS forum crash made that disappear. Good I found you again as I am still interested to make complete and new ZX Elite save editor and you seems have big knowledge of ZX Elite.
http://aegidian.org/bb/viewtopic.php?p=175451#p175451
and here
http://wiki.alioth.net/index.php/Random_number_generator
Didn't think that the twist was saved, thought it was rotated in real time.
I think game will then shift seed from save game when you hyperspace to next galaxy. Editor with all galaxy previews from new seed will be very cool. We have sources for that. Only stars positions, we don't need generate planetary soup to not spoil new adventures.
Also I believe its feature of ZX and probably CPC Elites written by Torus. C64 do not have that info by quick look to c64 save data format. Do not know about BBC Elites.
I never thought they'd store the shifted seed as there's plenty of empty buffers to use when the generation is needed. All you need is the current galaxy number and the original seed. Not complaining though, the ability to generate new galaxies by just modifying the save is just sweet. :) Torus really did a good job!
Just checked the save file from the NES version (by Braben & Bell), curiously the galaxy seed is present there.
The Spectrum version has got it's own merits though!
Pretty sure the original BBC version is faster, it certainly looks smoother than the NES, although it does flicker. And even if you want to dispute that, the tube version is way faster than every other 8 bit version!
Okay, maybe that is a little cheating but it's still 8 bit! :) I really tried to like the Speccy version (we had a Speccy and a BBC at home) but coming from the BBC one it just didn't feel as fast and for some reason I found with the BBC one the dots become dots at a much further distance so you could actually eventually get an idea as to what type of ship was in the distance when it was just a few pixels in size, probably due to the flickering.
There are things I like more on the Speccy port, like the hyperspace circles, witch space happens more often (actually do I really like this? it usually meant I died), but like most things the original is often better.
However I really do like the Spectrum game; there's no docking sequence just like in the BBC Tape version, the sequence let's face it, is neat the first time and pretty much a chore every following time. It's got a danger indicator (NES Elite later copied this). The opponents seems tougher both in behaviour (also do evasive manoeuvres) and stamina compared to the other versions I've played. I really liked the 3 Spectrum missions better than the original 2. Then there's the sleek, stylish UI which I found very aesthetically pleasing. As you mentioned it also has a great circle routine (I think the original just used lines and vectors).
I've read that Torus didn't have any sourcecode besides the procedural generation, they just sat down and played the original for hours on end and then wrote the code. I think this is the reason why it feels so different from the Braben & Bell developed versions. I found it refreshing. :)
I see, thanks.