I'm looking it over - the hardest part of all this really is that everything is in 2 letter variable names - but I can see you start at the starting address (AD) and allocate a specific amount of bytes to the name (24).
First poke unknown - assuming it's a sentinel value or some other control value.
Next is the quick ship profile, which is a Single character Archetype with 5 characters (uhh, a few have 6...). This is pretty slick, as it can be used for more procedural generation and representation.
After that we're jumping around a bit, but CHR$(48+X) I assume is just navigating the character Table. Otherwise everything is a record of N size, controlled by LN for the line, jumping to a new AD because you know the size of each record in terms of characters and integers.
If you don't mind, I'd like to try my hand of recombobulating this so I can store my own ship information, which currently looks like so:
41100 REM //SUBROUTINE - STARSHIP NAMES AND IFFS - ===========TODO - MOVVVEEEEEE
41101 SID$(0,0) = "ENDEAVOR" : SID$(0,1)="ALLI"
41102 SID$(1,0) = "NME-1" : SID$(1,1)="KLRG"
41103 SID$(2,0) = "NME-2" : SID$(2,1)="KLRG"
41104 SID$(3,0) = "NME-3" : SID$(3,1)="KLRG"
41105 SID$(4,0) = "NME-4" : SID$(4,1)="KLRG"
41106 SID$(5,0) = "NME-5" : SID$(5,1)="KLRG"
41107 SID$(6,0) = "NME-6" : SID$(6,1)="KLRG"
41108 SID$(7,0) = "ASTORIA" : SID$(7,1)="ALLI"
41109 SID$(8,0) = "RET-1" : SID$(8,1)="INDA"
41110 SID$(9,0) = "MERCH-1" : SID$(9,1)="DORA"
41111 RETURN
41120 REM //SUBROUTINE - SHIP DATA DEFINITION - SEE README ================
41121 DATA 3, 3, 90, 3000, 18, 0, 300, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41122 DATA 1, 1, 30, 1000, 6, 0, 100, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41123 DATA 2, 2, 60, 2000, 12, 0, 200, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41124 DATA 3, 3, 90, 3000, 18, 0, 300, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41125 DATA 1, 1, 30, 1000, 6, 0, 300, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41126 DATA 2, 2, 60, 2000, 12, 0, 200, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41127 DATA 3, 3, 90, 3000, 18, 0, 300, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41128 DATA 3, 3, 90, 3000, 18, 0, 300, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41129 DATA 2, 2, 60, 2000, 6, 0, 200, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41130 DATA 1, 1, 30, 1000, 6, 0, 100, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0
41131 RETURN
If I learn how to do this (and make it work), I definitely could just throw all the object data in the game into segments of a 512k High Ram Bank. Reading sequentially is a pain and N data lines grows, but perhaps, in known and well-defined cases, an ID can be assigned that matches a memory address for direct access, sorting, etc?
Would love to have this sort of layout with the ability to highlight and select a line by inverting the color of the currently selected line. This is why I have colors set in variables along with their inversions.