diff --git a/examples/textelite.p8 b/examples/textelite.p8 index f6e752b52..3aaf4805f 100644 --- a/examples/textelite.p8 +++ b/examples/textelite.p8 @@ -8,12 +8,20 @@ main { txt.print("\n--> TextElite conversion to Prog8 <--\n\n") - repeat 5 { - planet.set_seed(rndw(), rndw()) - planet.name = planet.random_name() - planet.display(false) - txt.chrout('\n') - } + galaxy.init(1) + txt.print("\nstart!!!!") + galaxy.debug_seed() + + ;lgalaxy.generate_planet(galaxy.numforLave) + galaxy.generate_planet(0) + planet.display(true) + +; repeat 5 { +; planet.set_seed(rndw(), rndw()) +; planet.name = planet.random_name() +; planet.display(false) +; txt.chrout('\n') +; } } asmsub testX() { @@ -33,6 +41,116 @@ _saveX .byte 0 } +galaxy { + const uword GALSIZE = 256 + ; seed for first galaxy: + const uword base0 = $5A4A + const uword base1 = $0248 + const uword base2 = $B753 + const ubyte numforLave = 7 ; Lave is 7th generated planet in galaxy one + const ubyte numforZaonce = 129 + const ubyte numforDiso = 147 + const ubyte numforRied = 46 + + str pairs = "..lexegezacebisousesarmaindirea.eratenberalavetiedorquanteisrion" + + ubyte number + uword[3] seed + + sub init(ubyte galaxynum) { + number = galaxynum + ; TODO make this work: seed = [base0, base1, base2] + seed[0] = base0 + seed[1] = base1 + seed[2] = base2 + + repeat galaxynum-1 { ; TODO fix repeat(0) + nextgalaxy() + } + ; planets are now created procedurally on the fly. + } + + sub nextgalaxy() { + ; Apply to base seed; once for galaxy 2 + ; twice for galaxy 3, etc. + ; Eighth application gives galaxy 1 again + seed[0] = twist(seed[0]) + seed[1] = twist(seed[1]) + seed[2] = twist(seed[2]) + } + + sub twist(uword x) -> uword { + ubyte xh = msb(x) + ubyte xl = lsb(x) + rol(xh) + rol(xl) + return mkword(xh, xl) + } + + sub debug_seed() { + txt.print("\ngalaxy #") + txt.print_ub(number) + txt.print("\ngalaxy seed0=") + txt.print_uwhex(galaxy.seed[0], true) + txt.print("\ngalaxy seed1=") + txt.print_uwhex(galaxy.seed[1], true) + txt.print("\ngalaxy seed2=") + txt.print_uwhex(galaxy.seed[2], true) + txt.chrout('\n') + } + + sub generate_planet(ubyte planetnum) { + ubyte pair1 + ubyte pair2 + ubyte pair3 + ubyte pair4 + repeat planetnum+1 { + ; Always four iterations of random number + pair1 = (msb(seed[2]) & 31) * 2 + tweakseed() + pair2 = (msb(seed[2]) & 31) * 2 + tweakseed() + pair3 = (msb(seed[2]) & 31) * 2 + tweakseed() + pair4 = (msb(seed[2]) & 31) * 2 + tweakseed() + } + + debug_seed() + + txt.print("generating planet #") + txt.print_ub(planetnum) + txt.print("\npairs:") + txt.print_ub(pair1) + txt.chrout(',') + txt.print_ub(pair2) + txt.chrout(',') + txt.print_ub(pair3) + txt.chrout(',') + txt.print_ub(pair4) + txt.chrout('\n') + + ubyte longnameflag = lsb(seed[0]) & 64 +; namechars = [self.pairs[pair1], +; self.pairs[pair1 + 1], +; self.pairs[pair2], +; self.pairs[pair2 + 1], +; self.pairs[pair3], +; self.pairs[pair3 + 1]] +; if longnameflag: # bit 6 of ORIGINAL w0 flags a four-pair name +; namechars.append(self.pairs[pair4]) +; namechars.append(self.pairs[pair4 + 1]) +; thissys.name = "".join(namechars).replace(".", "") + } + + sub tweakseed() { + uword temp = seed[0] + seed[1] + seed[2] + seed[0] = seed[1] + seed[1] = seed[2] + seed[2] = temp + } +} + planet { %option force_output @@ -85,6 +203,7 @@ planet { wordsA1, wordsA2, wordsA3, wordsA4] str pairs0 = "abouseitiletstonlonuthnoallexegezacebisousesarmaindirea.eratenbe" + ubyte[4] goatsoup_rnd = [0, 0, 0, 0] ubyte[4] goatsoup_seed = [0, 0, 0, 0]