NPC Loader

Reads NPC definitions out of the cache as they are needed, works out what the ones that change form are shown as, and builds the NPC database WaspLib looks NPCs up in by name.


TNPCLoader.Load

procedure TNPCLoader.Load();

Caches the NPC archive of the config index and makes room in TNPCLoader.Definitions for every NPC id. No NPC is decoded until TNPCLoader.Get asks for it. Does nothing once loaded.

The archive is compressed as a whole, so it is unpacked in full even when only a few NPCs are needed; decoding them is what’s left for later.


TNPCLoader.Get

function TNPCLoader.Get(id: Integer): TNPCDefinition;

The definition of NPC id, decoded the first time it is asked for and kept in TNPCLoader.Definitions from then on. Loads the archive first with TNPCLoader.Load if it isn’t yet.


TNPCLoader.Resolve

function TNPCLoader.Resolve(id: Integer): TNPCDefinition;

The definition NPC id is shown as.

Some NPCs change with the player’s progress and spawn as a stand-in whose definition only lists what it can turn into. Those are shown as the first of their forms that has a name, or as themselves if none of them has one. A name of null, or an empty one, doesn’t count as a name. Only the forms looked at are decoded.


TNPCLoader.WriteDatabase

function TNPCLoader.WriteDatabase(path: String): Integer;

Writes the NPC database into path as two column files, name.txt and id.txt, where line N of each belongs to row N. There is a row for every NPC id that has a name as shown by TNPCLoader.Resolve, in id order, so a name with several ids has a row for each. Names keep the case the game shows them in. Creates path if it doesn’t exist and returns how many rows were written.

This decodes every NPC.

Example:

CacheReader := TCacheReader.Create();
NPCLoader.WriteDatabase('C:/npcs-db/');