Wow, this is extremely exciting. I think I've been too long out-of-the-loop to be much help. Truth be told, @DevSin contributed most of the changes that made it into the last version I had anything to do with. I actually thought I'd given up the SourceForge site (http://sourceforge.net/projects/nearinfinity), but it looks like I never did (oops).
Sam's work looks very promising. It looks like he's done some work to try and reconcile the various versions and has some of the version history on his site. I'll try to turn ownership of the sourceforge site and PocketPlane forum moderation to Sam if he'll take it
Yeah, @FredSRichardson, Taimon set up a repository on github that has all the latest changes (Taimon made some changes on top of my sources, and then a lot of my later revisions were merged back in). There should be a link to it at the PPG forum.
To my knowledge, that's the version that is being built from over at SHS. It should contain the latest work that any of us ever did (I'm not sure if the SourceForge repository ever got all my changes, since you opened it with Jon's b19 sources).
@DevSin: maybe the SF site should just point to the GitHub repo. I sent Sam an e-mail about turning things over to him.
Either it could point to the github repository, or you could just push all the changes on SourceForge. It's not like either are being maintained, so I'm not sure it matters where the latest source ends up.
It's not like it's too late to start maintaining either one again, what with the advent of BG:EE and all the juicy information that devs have been dropping in this thread ;-)
@DevSin - I took a quick look at the GitHub repo. Can one get an executable jar directly from there, or are there build steps? I didn't look too closely. If there are build steps, then hosting the pre-built jar files on SF might make sense...
I think Taimon has included an ant script for building that takes care of most of the work? You just need ant (I don't think there were any arguments beyond 'ant file').
You can also set it up in an IDE if you choose, though you'll have to configure the project yourself.
@devSin - Well, I've recently learned to use Eclipse and like it quite a lot. My eyes have also been opened to Ant which looks quite flexible. I'll try to carve out some time to look into this.
I take it there are several branches of NI as well?
@FredSRichardson If you mean my fork and this Jurgen00 fellow's fork, then yeah, I guess. I'm not quite sure if there are any differences today between Taimon's branches. Personally, I am quite comfortable with being treated as downstream (though I have a commit or two that probably should make it upstream).
If I can request, PRO, VVC, and WED are the formats where we really have to guess at some of the flags and fields (I also don't think we have all the WFX format nailed down, not that it was ever used for anything). Nobody really cares about the internal VEF (?) format.
I just wanted to bump devSin's request for the PRO, VVC and WED formats before this thread gets completely lost.
Even if "nobody cares", why would we give up on knowing about WFX and VEF, anyway? I mean, while we're at it, it's well worth to request all the information
Even if "nobody cares", why would we give up on knowing about WFX and VEF, anyway? I mean, while we're at it, it's well worth to request all the information
Sure, it wouldn't hurt. Especially if they are planned to be used.
Some questions to @ScottBrooks or another dev. In the item structure we see 'attributes' (after the description picture resref). Is this a simple magic level field, or something more complicated. 0x25/0x27/0x33 could be used for something more exciting than just letting them play structure alignment or faking as high byte of a word which will never be bigger than a byte. All this without breaking any modder tool or mods
CPROJECTILEFILEFORMAT_FLAGS_SPARKLETRAIL 0x00000001 // default OFF CPROJECTILEFILEFORMAT_FLAGS_HASHEIGHT 0x00000002 // default ON CPROJECTILEFILEFORMAT_FLAGS_LOOPFIRESOUND 0x00000004 // default OFF CPROJECTILEFILEFORMAT_FLAGS_LOOPARRIVALSOUND 0x00000008 // default OFF CPROJECTILEFILEFORMAT_FLAGS_IGNORETARGET 0x00000010 // default OFF CPROJECTILEFILEFORMAT_FLAGS_BACKLIST 0x00000020 // default OFF
CPROJECTILEBAMFILEFORMAT_FLAGS_FALSECOLORED 0x00000001 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_SMOKE 0x00000002 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_SMOKEFALSECOLORED 0x00000004 // default ON CPROJECTILEBAMFILEFORMAT_FLAGS_TINT 0x00000008 // default ON CPROJECTILEBAMFILEFORMAT_FLAGS_HEIGHT 0x00000010 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_SHADOW 0x00000020 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_GLOW 0x00000040 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_BRIGHTEST 0x00000080 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_BRIGHTESTIFFAST 0x00000100 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_BRIGHTEST3DONLYOFF 0x00000200 // default OFF
CPROJECTILEBAMFILEFORMAT_FLAGS_PUFF_ATTARGET 0x00000001 // default OFF CPROJECTILEBAMFILEFORMAT_FLAGS_PUFF_ATSOURCE 0x00000002 // default OFF
// 504 bytes in size CProjectileBAMFileFormat DWORD m_dwBAMFlags; CResRef m_vidCell; // string, default empty CResRef m_shadowVidCell; // string, default empty BYTE m_seqVidCell; // number, default 0 BYTE m_seqShadowVidCell; // number, default 0 SHORT m_glowIntensity; // number, default 0 SHORT m_glowSizeX; // number, default 0 SHORT m_glowSizeY; // number, default 0 CResRef m_paletteResRef; // string, default empty BYTE m_colors[CPROJECTILEBAMFILEFORMAT_NUMCOLORS]; // list of color ranges, default CVIDPALETTE_HAIR_BLACK BYTE m_smokePeriod; // number, default 1 BYTE m_smokeColors[CPROJECTILEBAMFILEFORMAT_NUMCOLORS]; // list of color ranges, default CVIDPALETTE_CLOTH_DK_GREY BYTE m_numDirections; // list of {1, 5, 9}, default of 1 WORD m_smokeAnimationCode; // list of animation codes, default of CGAMEANIMATIONTYPE_SMOKE_PUFF_LARGE
CResRef m_cPuffEffect1; CResRef m_cPuffEffect2; CResRef m_cPuffEffect3; WORD m_nPuff1Spacing; WORD m_nPuff2Spacing; WORD m_nPuff3Spacing; DWORD m_dwPuffFlags;
DWORD reservedSpace[42];
CPROJECTILEAREAFILEFORMAT_FLAGS_CENTERBAM 0x00000001 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_CHECKFORNONSPRITES 0x00000002 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_DETONATEONLYIFTARGETS 0x00000004 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_DELAYEDTRIGGER 0x00000008 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_SPARKLEEXPLOSION 0x00000010 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_CHUNKSEXPLOSION 0x00000020 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_LIMITTARGETS 0x00000040 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_PARTYONLY 0x00000080 // default ON CPROJECTILEAREAFILEFORMAT_FLAGS_DURATIONEQUALWIZLEVEL 0x00000100 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_DURATIONEQUALPRSLEVEL 0x00000200 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_VVCATCENTER 0x00000400 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_CONEFROMCASTER 0x00000800 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_IGNORELOS 0x00001000 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_CENTERBAMWAIT 0x00002000 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_FORCEINITIALDELAY 0x00004000 // default OFF CPROJECTILEAREAFILEFORMAT_FLAGS_ONETARGETONLY 0x00008000 // default OFF
// 760 bytes in size CProjectileAreaFileFormat DWORD m_dwAreaFlags; WORD m_triggerRange; // number, default 256 WORD m_explosionRange; // number, default 256 CResRef m_explodeSound; // string, default empty WORD m_nDelay; // number, default 100 WORD m_explodeId; // list of animation codes, default CGAMEANIMATIONTYPE_CHUNKS WORD m_sparkleExplosionProjectile; // list of projectile types, default ITEM_MISSILETYPE_HIT_NECROMANCY_AREA BYTE m_nRepetitionCount; // number, default 1 BYTE m_fireBallType; // list of fireball types, default CGAMEFIREBALL_TYPE_FIRE BYTE m_ringColor; // list of color ranges, default CVIDPALETTE_FIRE_NORMAL BYTE padding1; WORD m_secondaryProjectile; // list of projectile types, default ITEM_MISSILETYPE_INVISIBLE_TRAVELLING CResRef m_centerVVC; WORD m_coneSize; // cone arc in degrees (1-359), default 45 WORD padding2;
CVEFVIDCELL_SEQUENCE_PLAY_ALL 0x00000001 //Change sequence until run out.
CVEFVidCellBase CResRef m_cVidCellRef; CResRef m_cShadowVidCellRef; DWORD m_bltFlags; DWORD m_bltInfo; //tranpartency amount etc.. DWORD m_bltFlagsExtra; //Including whether to loop at end or not DWORD m_bltInfoExtra; CPoint m_offset; //From parent DWORD m_offsetFlags; // maybe we could rotate offset based on direction LONG m_animationSpeed; //Max 30 LONG m_numDirections; LONG m_direction; DWORD m_directionFlags; CResRef m_cNewPaletteRef; LONG m_height; //Height CPoint m_glowSize; DWORD m_glowIntensity; LONG m_nDuration; //-1 for infinite CResRef m_cVVCResRes; //That's me LONG m_nStartSequence; //1 indexed LONG m_nLoopSequence; //1 indexed. 0 or less for none LONG m_nCurrentSequence; //1 indexed DWORD m_sequenceFlags; CResRef m_cStartSoundRef; CResRef m_cLoopSoundRef; CResRef m_cAlphaBamRef; LONG m_nEndSequence; CResRef m_cEndSoundRef;
WED_WedHeader_st DWORD nFileType; DWORD nFileVersion; DWORD nLayers; DWORD nTiledObjects; DWORD nOffsetToLayerHeaders; DWORD nOffsetToPolyHeader; DWORD nOffsetToTiledObjects; DWORD nOffsetToObjectTileList; WORD nVisiblityRange; WORD nChanceOfRain; WORD nChanceOfFog; WORD nChanceOfSnow; DWORD dwFlags;
WED_LayerHeader_st WORD nTilesAcross; WORD nTilesDown; RESREF rrTileSet; WORD nNumUniqueTiles; WORD nMovementType; DWORD nOffsetToTileData; DWORD nOffsetToTileList;
WED_TiledObject_st RESREF resID; WORD bType; WORD nStartingTile; WORD nNumTiles; WORD nNumPrimaryPolys; WORD nNumSecondaryPolys; DWORD nOffsetToPrimaryPolys; DWORD nOffsetToSecondaryPolys;
WED_TileData_st WORD nStartingTile; WORD nNumTiles; short nSecondary; BYTE bFlags; BYTE bAnimSpeed; WORD wFlags;
WED_ScreenSectionList WORD nStartingPoly; WORD nNumPolys;
WED_PolyList_st DWORD nStartingPoint; DWORD nNumPoints; BYTE nType; BYTE nHeight; WORD nLeft; WORD nRight; WORD nTop; WORD nBottom; // BYTE wFlags;
NUM_ALIGNMENTS 9 FAMILIAR_MAX_LEVEL 9 // do not use CAIOBJECTTYPE_NONE in editor // use index = (alignment/16-1)*3 + alignment%16-1; CAIOBJECTTYPE_NONE 0x00 CAIOBJECTTYPE_LAWFUL_GOOD 0x11 CAIOBJECTTYPE_LAWFUL_NEUTRAL 0x12 CAIOBJECTTYPE_LAWFUL_EVIL 0x13 CAIOBJECTTYPE_NEUTRAL_GOOD 0x21 CAIOBJECTTYPE_NEUTRAL 0x22 CAIOBJECTTYPE_NEUTRAL_EVIL 0x23 CAIOBJECTTYPE_CHAOTIC_GOOD 0x31 CAIOBJECTTYPE_CHAOTIC_NEUTRAL 0x32 CAIOBJECTTYPE_CHAOTIC_EVIL 0x33
CSavedGameFamiliars RESREF m_resrefDefault[NUM_ALIGNMENTS]; DWORD m_resrefOffset; // at which is a list of RESREF's DWORD m_resrefCount[NUM_ALIGNMENTS][FAMILIAR_MAX_LEVEL];
CSavedGameJournalEntry STRREF m_strEntry; DWORD m_time; BYTE m_chapter; BYTE m_read; // which characters have not read this entry BYTE m_type; BYTE m_character; // which character this entry is associated with (multiplayer)
GAME_PARTYCREATURE_SELECTED 0x0001 GAME_PARTYCREATURE_NO_AREA 0x8000 // editor: always set to zero.
CSavedGamePartyCreature WORD m_wFlags; // editor: These two members have been separated WORD m_portraitId; // editor: These two members have been separated DWORD m_creatureOffset; DWORD m_creatureSize; RESREF m_creatureResRef; DWORD m_creatureFacing; RESREF m_areaName; WORD m_posX; WORD m_posY; WORD m_posViewX; WORD m_posViewY; WORD m_nModalState; SHORT m_nHappiness; LONG m_nNumberOfTimesInteractedWith[MAX_NUM_POENTIAL_PLAYER_CHARACTERS]; SHORT m_quickWeaponsItemNum[CGAMESAVECHARACTER_NUM_QUICK_WEAPONS]; SHORT m_quickWeaponsAbilityNum[CGAMESAVECHARACTER_NUM_QUICK_WEAPONS]; RESREF m_quickSpellsSpellId[CGAMESAVECHARACTER_NUM_QUICK_SPELLS]; SHORT m_quickItemsItemNum[CGAMESAVECHARACTER_NUM_QUICK_ITEMS]; SHORT m_quickItemsAbilityNum[CGAMESAVECHARACTER_NUM_QUICK_ITEMS]; SCRIPTNAME m_name; DWORD m_numberTimesTalkedTo;
RESREF m_lSpellStatsName[CGAMESAVECHARACTER_NUM_STATS_SPELLS]; SHORT m_lSpellStatsCount[CGAMESAVECHARACTER_NUM_STATS_SPELLS]; RESREF m_lWeaponStatsName[CGAMESAVECHARACTER_NUM_STATS_WEAPONS]; SHORT m_lWeaponStatsCount[CGAMESAVECHARACTER_NUM_STATS_WEAPONS];
RESREF m_secondarySounds;
CSavedGameStoredLocation // for storing my location from a dream RESREF m_areaName; WORD m_xPos; WORD m_yPos;
Comments
Sam's work looks very promising. It looks like he's done some work to try and reconcile the various versions and has some of the version history on his site. I'll try to turn ownership of the sourceforge site and PocketPlane forum moderation to Sam if he'll take it
Greetings all!
To my knowledge, that's the version that is being built from over at SHS. It should contain the latest work that any of us ever did (I'm not sure if the SourceForge repository ever got all my changes, since you opened it with Jon's b19 sources).
The source hosted at GitHub needs to be downloaded and built. You can upload prebuilt jar files alongside the source.
You can also set it up in an IDE if you choose, though you'll have to configure the project yourself.
I take it there are several branches of NI as well?
If you mean my fork and this Jurgen00 fellow's fork, then yeah, I guess. I'm not quite sure if there are any differences today between Taimon's branches. Personally, I am quite comfortable with being treated as downstream (though I have a commit or two that probably should make it upstream).
In the item structure we see 'attributes' (after the description picture resref). Is this a simple magic level field, or something more complicated.
0x25/0x27/0x33 could be used for something more exciting than just letting them play structure alignment or faking as high byte of a word which will never be bigger than a byte.
All this without breaking any modder tool or mods
Also, no one asked for the save game format?
PS who'd think that 'quote' tag doesn't work here...