Assuming you have a game were there is a large amount of repeated text, but you want to display it in a series of different arrangements. Like for example in elite. You have the planet descriptions. That is probably the best example I can think of.
Key for the tables:
Code: Select all
A Animal to see (zoo or hunting)
B Boring/Tedious
C frequent/deadly/dreadful Civil war
D killer/evil/lethal Disease
E occasional/unprEdictable civil war
F great/vast Forests
G plaGue of killer/deadly animals
H Hoopy casinos (see 1)
I Unusual/Weird Forests (Indigo coloured leaves)
J Juice (from animal/tree)
K sports (Karate) that need gravity (Championships, see Z)
L Loathing for casinos
M Mountains
N Nightlife
O Oceans (see ; and < too)
P Plantations (see = and 4 too)
Q freQuent/unpredictable/deadly earthQuakes (see 5)
R Rock formations
S ravaged by (also unpredictable) Solar activity (see >)
T Trees
U revolting/Unremarkable dump
V great Volcanoes (see ?)
W evil Water/gargle blasters (both drink and spa)
X eXotic food, also edible poets/moths
Y shYness
Z Zero-G sports (big canyons)
[ loathing of discos
\ produce exciting sit coms (see 2)
] loathing of sit coms
^ silliness
_ mating traditions
1 unusual Casinos
2 produce unusual sit coms
3 brew
4 brandy (fields of agriculture)
5 occasional Quakes
6 love for tourists (Recreation)
7 love for poetry
8 love for food blenders
9 loathing of food blenders
: parking meters (for space craft too)
; pink Oceans
< unusual Oceans
= pink Plantations
> occasional Solar activity
? weird Volcanoes
@ Anything is ok (insert into tables for other purposes)
Each planet has one entry in the table, descriptions can be up to three items.
Code: Select all
char allkey[][8*4] = {
"4S GT U B 6D C B B ",
"FC S X> D B ^D ^S I3 ",
"=Q O Z L> B JI Z B ",
"XA B B GX 3A OX B F ",
"?MA ^ U Y^ B D K5 Q ",
"U XC G H GX C B C ",
"]C <9 U FD XS D Z X> ",
"FA IW XO A Z3 S B XT? ",
"AG B XE U Y ]D AT B ",
"6GX B F S B LQ 6 NGM ",
"3 D XO\ XT ^X KAM TXQ AQ ",
"FA MAC U IC B B MD Q ",
"F AT MAG WH XD AX E S ",
"8 P F Q LE B [G B ",
"4GM _N WAT PG FGX XAC KM AC ",
"^C M B Z4 GM E MD U ",
"4 D > HO =C B TA1 J4 ",
"X^ B A ATX VD D KM B ",
"Q W> A M U B H D ",
";Z MD Q ZY B XE MA5 GX ",
"> ] 7Y Q MAC F: JS =AX ",
"XD TAX XO Q D B AT B ",
"AT <6 U XS W> > U AW ",
"AS B C MAQ XE XTD < B ",
"JS U ^ XAD Z D Y D ",
"F ;1 D B J B XQ ? ",
"NQ NQ C A3 6Q 1O ZC Y7 ",
"GX 4GT PC B TAX KAM W GX ",
"\] IS N GXT Q U Y^ XA ",
"GX C XP A U GT <6 U ",
"B B ZW Q MQ GT B 1D ",
"B < 7AT F GX AX B 4 ", /* sys #31 */
"U Z5 B B FN AX P B ",
"OX XE :5 AT U > XE Q ",
"TAQ H XMA _ U HO L B ",
"1D YK Y C B XA? AM5 X4 ",
"A ZS 6AT HF Q U WXT PQ ",
"XA WD NQ B GX NJ U AXD ",
"B FG Q B U W NX C ",
"6Q XO B ATY K E Q FK ",
"X MS GM XTC C 9 6 1Q ",
"S AT C =? H <A U X ",
"N U 9 C Z4 H XT< I ",
"C X^ < XOC Q ^C ATQ > ",
"Z U B D GM D ^C <A ",
"X B X B XGT B D U ",
"XE GM X? MAS \ TA I WQ ",
"AT 9\ Z4 B N D 3L _S ",
"TA] B ]T 2E GX K 8S GX ",
"X A U Q C B XG 4AX ",
"C Q IX 8 GX [A D B ",
"D JG TAX XL F B TAQ B ",
"B B XAM PQ H AXK C 4 ",
"? U D \M B X^ > 3 ",
"_S AX WE C A PQ _: W ",
"ZJ B TAL B PZ U B ^W ",
"<MA B AX4 A5 B D Y E ",
"E M Q _F B \ WC AT ",
"B U <8 \M Y XTD Q < ",
"Y YD ;\ U 4W W Y^ ^C ",
"3E ^C U U AT XS D ;S ",
"FGX \ LS ^ < AX OY XD ",
"[A AQ MA> AX ; D U C ",
"YAX 3M B NC B C U _E ", /* sys #63 */
"P FA I7 MQ C B U IY ",
"GM B XAJ C ;K C XA FV ",
"D XD XO B B 4N XA 2C ",
"Q _S D GM S XTG B B ",
"< 1D H B U 2A L Z4 ",
"D B D U Y XT< Q B ",
"FC XTA NS M N B B A ",
"=M ? IC 3X ;5 B S 6V ",
"Q B TA> U Q OG 8X B ",
"AH 2AT L A IC Y B > ",
"<9 XTC B 2> 7Y P Y C ",
"U U N4 VG K GT U B ",
"J U X A _ ]C I MY ",
"X AW TA E ^ =Y D E ",
"Q K 4 YX PS TAS TA] Q ",
"TMA YX B D 3O U C B ",
"E _C 2 G B GM > B ",
"B Z ^ C VG > YAX GX ",
"B XC _ 1S 6 N B AX ",
"H C B P2 L ^X 2 GX ",
"S \ 7Q D YJ AXJ S AX ",
"XTA B GT XA GXT B M B ",
"U XAD C B D XT ? C ",
"D GM A B U \L J O ",
"U 9 Q TAX IJ 2G ATS 4GX ",
"B ^S U D F GX B 2S ",
"D XM AME KD U ; D U ",
"> NGT _ B > A VG 9 ",
"TAX B B U D C \9 I\ ",
"GM Q C XA ;D F C PX ",
"C B AS D U 1S 6V ;2 ",
"YZ I C Y XTP B W Q ", /* sys #95 */
"GM X U MQ ^R U U XAC ",
"TAQ B IZ L Z3 \G I XA ",
"U Q B =MA Y ]D 4 6XA ",
"U U 1Q D B \ 6F _C ",
"4: I AZ U B U C 6 ",
"]D _> > 4GT A S AXV _G ",
"6< E B AD AT B U Q ",
"B RAT GM Q NJ ^ U [E ",
"YZ Q B ^GT IY Q U XA ",
"X A= XAT U ^5 K 2AT GM ",
"B B 3 Q XE H C WA ",
"U 6? C 4C E G GX D ",
"\8 Q WS XAI \X Y Y AQ ",
"] NQ _G W U 2E X A ",
"F Y :5 Y^ M Q B B ",
"B FV GX AT ATE AXF U XK ",
"L U =Q U KM P 3S JD ",
"MD ? U S 6AX 6I \8 E ",
"AZ N YS B 9 : MAQ XO ",
"K X ;Q N X B B TA_ ",
"WAT 4C Q B XAI Q A MAQ ",
"TG MAS B Q U ATC ATX <E ",
"TAC C U B AT XOQ A= WE ",
"4 AH B 3 Q 3G TAM 6 ",
"U U U TA] Q A C IX ",
"W D YD U U MA E 3 ",
"XA I X A U B B W ",
"XA C U B YMA Z S B ",
"Y C _ ZY GM E Q Y4 ",
"C U ;Q Y M> 3 N4 A5 ",
"KV XD 2> FA WD U P _GT ",
"=E Q U B GX XTK MAS > ", /* sys #127 */
"3XT > ^C V7 B ^ HN Q ",
"B B B XS Q P XAT XP ",
"B AMQ _F O6 ATS I\ < C ",
"8S B B C S B ^3 _G ",
"8S B Q GM G U 4 W ",
"LQ GT ^X > > U MAS Z ",
"Q B AG C AW ^ FX S ",
"AGT KM ATX D YS B E XAT ",
"JY D Q U B GM B B ",
"MAQ ;\ B FC M ZX F: C ",
"X FI 3; MQ ZY C XO N ",
"XT? Q U GXT B B ;Q OX ",
"MQ TA2 ID B AT FS XA WTA ",
"B B 9\ XD N D B A= ",
"AM D U U > A4 LQ AT1 ",
"FS A B ^GX B B XAT A ",
"B N3 ATC U P B NX Q ",
"_L \ X 6D A ^ XOS AT[ ",
"XA I B D X H U 2> ",
"PS GXT > XA U B U GX ",
"R; C A OG VD U B YZ ",
"GXT F XE _C Q 4D ATS O ",
"TX PT Z A4 B =W FC TAC ",
"F MQ NGX _ B GT D ZY ",
"B _ _C AT Z^ WD XTG 1 ",
"4V GX N XA ] OD D XTA ",
"< 6< N N B U MAD _3 ",
"6AT TA1 C U L_ D XG B ",
"P D C _: X B B G ",
"A^ ? Q =< WAT Q Z^ VE ",
"B 1D F WS B C XA [G ",
"W> KQ Q C 7> W ^C B ", /* sys #159 */
"X ;Z MAS Q F GXT 4 25 ",
"F XAT B 6? 9J 1S B Q ",
"8C Y^ C 2G WA B > 1Q ",
"B U A 8R VT XTQ =G B ",
"OX B MA > U B A= FA ",
"B KA XZ ]XT D Y OX C ",
"S B \L =D NX GM B IY ",
"B N^ N XTQ H XS YS Z ",
"C JQ Q LE U OG 3 XTD ",
"D W W C B XTC D B ",
"XA LAT 3 D B B A W5 ",
"4 4> A Q 8R XO\ 4 7^ ",
";Z Q AE 4 XD ^C W A ",
"YS : FZ AN B XT< Y ^W ",
"Y AT B U MAD E 8 XY ",
"VD FS C A Z B U B ",
"U XAZ U \ 6G B YJ MAQ ",
"U AGT B NQ 6Q AT^ D B ",
"U 4N B <E Q D D \ ",
"C B OX < U B GT B ",
"C U D B B GXT Y F ",
"4D B TX A E B Q Y3 ",
"MQ 4I ] VY 6Q ;\ YS C ",
"C X D NX 4X XAT B ^D ",
"F GM M> MAD B C FZ B ",
"XAT 6 M GX PGT N> U XMA ",
"B B 7E [G XA U U A ",
"U B W: JS < L AH B ",
"AF B ZX 6Q GT ^W 1Q U ",
"4 Z _G YX Y B FG 1D ",
"B J ^GX > J ^J FS MAE ",
"U B L \ U XT XA AT_ ", /* sys #191 */
"^ RA F O B X XA B ",
"3 WAT A; B GX K2 U Q ",
"?MA F D C 6< B =N D ",
"ZS OT AT\ XK A B TA; D ",
"B Q WM K B 8 Y5 U ",
"B 4D AT P FS _ Y7 D ",
"H H 4S 6AT FA B \ U ",
"HD X U MAE > =C XA O6 ",
"U O6 GX U B I B B ",
"X NGX B WXT ^? A B ^ ",
"WD Q VD YD B ^C D B ",
"Q OT NX GX XTD U XOC WE ",
"_ A XA B B XG X = ",
"Q ^ U AD Y ZX B B ",
"WD 6AT ;S M X B M> 4 ",
"A^ Y A B XI B D P ",
"B Q XY X U X XGT \ ",
"C MA IZ ZD NC 2E ^GX ^ ",
"MA B XD ^R U B GX _H ",
"B NJ B _ OG U MAT GX ",
"MAS GX B XD B AT; Y5 J7 ",
"MD GXT L KP A I4 ;Q H ",
"Q A3 B =C B Q U B ",
"JP NJ AT; Z4 1D Q Q GX ",
"> N4 U A; B D L H: ",
"J^ YQ Q B :5 U IC ^ ",
"F4 B ^X MD JD A Q K5 ",
"B 9\ 4 MAQ B B XA\ > ",
"VG ^C H MAS 1Q U B WD ",
"U F Q GM D > > HO ",
"B M5 B U E HF D X^ ",
"MAC ^GT PGX MAD Y TA U N ", /* sys #223 */
"\8 FGM Q O M U 6D C ",
"I B GXT Y AX =[ 6XA < ",
"C C W U H: U D B ",
"MQ S JGX AXV AM W A= H ",
"B Z4 U ? [E C D D ",
"U Y H B Q Y 7Q XT< ",
"WAT 4GT M> C JS KS D AF ",
":Q PD JS B B B ^ :5 ",
"NX > B YS KAX XT TA P ",
"E Y B _ B B B =4 ",
"A ^J \ E B Q XAT B ",
"Y AG Q G B 8C B WAT ",
"X X ^C X B U D D ",
"Z B B XT WS G JC C ",
"B 4C TAH S XD _] B Q ",
"N W> FQ > Y \ C Q ",
"TA^ A U C B GM NW U ",
"4 U B [G B AN ]XT 4 ",
"AT B AT_ N4 M XTS B XI ",
"X> VY ATS 9 KAM ;X GM AT ",
"=I L> E AX C 6I PT WS ",
"D B C _E A VE \[ B ",
"9Z S ATX 2C ZX [E D 6 ",
"TAS E _ ;K 2 ;S S D ",
"4 Q D AH B ATQ GT ^C ",
"FA ? XY ] AT N XOQ > ",
"D =X GM X S 1Q GT Z ",
"XAV XG _C MAS TA> TAC NGT P ",
"MA9 B Q ? C XS > VG ",
"C U U D C S XD > ",
"S B AQ ^GX 4Y AK XS FC ",
"B 2G I XAF O Q 3 AX "}; /* sys #255 */
char *key = allkey[isys]+igalaxy*4; /* base pointer to isys in igalaxy */
int key0 = key[0]-0x20; /* zero is no key */
To reduce space further could the definition be tokenized? Or would that result in a unexceptionable slowdown. Kind of combining how the hobbit rendered text & elites tables. I think with large table structures it might be a good way to prevent excessive size.
Think about this, you got a big list of real life locations and you want to use a method similar to elite to have just the trading/travel element. You walk around using the linked list of a map to all these diffrent locations and trade accordingly.
But this is Avon there are hundreds of places. Ordinary its to much for the spectrum's memory to handle so the data would need to be encoded.
I pick Avon because many of the names of the places are similar so it prevents using methods like ID by the first X characters as you get situations like... Winterbourne & Winterbourne Down. And there are to many similar cases in the data to be able just to do a series of special csae statements.
each location gets its own inventory for trade and a price. That in itself represents a fair amount of data for this many locations. if you have 10 commodities for trade, even if the location has 0 your still looking at 365 x 36500 data points. assuming each could have a maximum amount of 255 thats 8 x 10 bytes per location if its just sitting in memory. 3650 bytes already. Plus the id field for each location. - I am thinking the first 16 chars would be enough for a unique id. so that is 5840 bytes.
What I would like is each time you went to a different location you got a screen with data about the place, it could be done in the same way as elite. But the question is - assuming that the descriptions are fairly limited just assembled in different ways is this the optimum way of doing this?
Assuming there are 365 locations, that would mean the description table would fit quite nicely into the elite method. You wouldn't even need such a large table... Assuming you have a worse case of 3 description strings for each location gives 1095 bytes for the description data table (you don't need an ID field because you assume each location has a static location in the table eg offset 17 from the start of table is Barrow Gurney description.
Code: Select all
Abbots Leigh
Abson
Acton Turville
Aldwick
Almondsbury
Alveston
Arnos Vale
Ashley Down
Ashton Gate
Aust
Avonmouth
Backwell
Bdminton
Bannerdown
Banwell
Baptist Mills
Barrow Gurney
Barrs Court
Barton
Barton Hill
Bath
Bathampton
Batheaston
Bathford
Bathwick
Beach
Bedminster
Bedminster Down
Benter
Binegar
Bishop Sutton
Bishopston
Bishopsworth
Bitton
Blagdon
Bleadon
Bourton
Bradley Stoke
Brentry
Bridgeyate
Brislington
Bristol
Brockley
Burrington
Butcombe
Cameley
Camerton
Chapel Allerton
Carlingcott
Charlcombe
Charmy Down
Charterhouse
Chelvey
Chelwood
Chew Magna
Chew Stoke
Chewton Keynsham
Chewton Mendip
Chilcompton
Chipping Sodbury
Chittening
Churchill
Clandown
Clapton
Clapton in Gordano
Claverham
Claverton
Claverton Down
Clay Hill
Cleeve
Clevedon
Clifton
Clifton Wood
Clutton
Coalpit Heath
Codrington
Coleford
Combe Down
Combe Hay
Compton Dando
Compton Martin
Congresbury
Conham
Coombe Dingle
Corston
Cotham
Cowhill
Dodington
Downend
Doynton
Dundry
Dunkerton
Dunkirk
Durdham Park
Earthcott Green
East Clevedon
East Harptree
East Hewish
East Rolstone
Easter Compton
Eastertown
Easton
Easton in Gordano
Eastville
Edford
Edingworth
Elberton
Elborough
Emborough
Emersons Green
Englishcombe
Failand
Farleigh
Farleigh Hungerford
Farmborough
Farrington Gurney
Faulkland
Felton
Filton
Fishponds
Flax Bourton
Foxcote
Frampton Cotterell
Frenchay
Freshford
Gaunts Earthcott
Greenbank
Grovesend
Gurney Slade
Hallatrow
Hallen
Hambrook
Hamswell
Hanham
Hawkesbury
Hawkesbury Common
Hawkesbury Upton
Haydon
Hemington
Henbury
Henfield
Hengrove
Henleaze
Hewish
High Littleton
Hillesley
Hinton Blewett
Hinton Charterhouse
Holcombe
Horfield
Horton
Hotwells
Hunstrete
Hutton
Inglesbatch
Inglestone Common
Ingst
Iron Acton
Itchington
Iwood
Kelston
Kelston Mills
Kendleshire
Kenn
Kewstoke
Keynsham
Kilmersdon
Kingsdown
Kingston Bridge
Kingston Seymour
Kingswood
Kington
Knap
Knowle
Langford
Langridge
Lansdown
Larkhall
Laverton
Lawrence Hill
Lawrence Weston
Leigh upon Mendip
Leigh Woods
Limpley Stoke
Little Badminton
Little Sodbury
Little Stoke
Littleton
Littleton-upon-Severn
Litton
Locking
Long Ashton
Longwell Green
Lower Claverham
Lower Failand
Lower Hamswell
Lower Hazel
Lower Hounsley
Lower Morton
Lower Shockerwick
Lower Vobster
Lower Weston
Lulsgate
Mangotsfield
Marksbury
Midford
Midsomer Norton
Milton
Monkton Combe
Montpelier
Nailsea
Nailwell
Nempnett Thrubwell
New Cheltenham
Newton
Newton St Loe
North End
North Stoke
North Widcombe
Northend
Northville
Northwick
Norton Hawkfield
Norton Malreward
Norton St Philip
Nye
Oakhill
Old Down
Old Sodbury
Oldbury Naite
Oldbury-on-Severn
Oldland
Oldland Common
Olveston
Over
Patchway
Paulton
Peasedown St John
Pensford
Petty France
Pill
Pilning
Portbury
Portishead
Priston
Publow
Pucklechurch
Pylle Hill
Queen Charlton
Radstock
Rangeworthy
Redcliffe
Redfield
Redhill
Redland
Regil
Rickford
Rowberrow
Rudgeway
Saltford
Sandford
Sea Mills
Severn Beach
Severn Bridge
Shipham
Shirehampton
Shortwood
Shoscombe
Sneyd Park
Snowhill
Soundwell
Southdown
Southmead
Southstoke
Southville
Speedwell
St Agnes
St Andrews
St Annes
St Annes Park
St Augustines
St Catherine
St George
St. Georges, North Somerset
St James, Bristol
St Judes, Bristol
St Pauls
St Philips
St Philips Marsh
St Werburghs
Stanton Drew
Stanton Prior
Stanton Wick
Staple Hill
Stapleton
Star
Stockwood
Stoke Bishop
Stoke Gifford
Stoke St Michael
Ston Easton
Stoney Littleton
Stratton-on-the-Fosse
Swainswick
Swineford
Tadwick
Tellisford
Temple Cloud
Temple Meads
Thornbury
Tickenham
Timsbury
Tockington
Tormarton
Totterdown
Tunley
Twerton
Tyndalls Park
Tyntesfield
Upper Shockerwick
Upper Stanton
Upper Strode
Upper Swainswick
Upper Vobster
Upton Cheyney
Walton Bay
Walton in Gordano
Warleigh
Warmley
Way Wick
Wellow
West Harptree
West Hewish
West Hill
West Town
West Wick
Westbury Park
Westbury-on-Trym
Westerleigh
Weston
Weston in Gordano
Weston-super-Mare
Whitchurch
Whitehall
Whiteway
Wick, Somerset
Wick St Lawrence
Widcombe
Willsbridge
Wilmington
Winford
Winscombe
Winterbourne
Winterbourne Down
Withyditch
Woollard
Woolley
Woolverton
Worle
Worlebury
Wraxall
Wrington
Writhlington
Yate
Yatton
[\code]
Now elite did all this via procedural generation of the names, commodity amounts, positional data. So that required next to no memory. But assuming you were not going to have 2^48 locations.. what's the next best way assuming the limitation of a fixed name list.