A quest far more difficult than killing Diablo, or finding all of Khalim's parts while retaining your sanity (as Hratli warns, it is in short supply in Act 3), is figuring out how to add monsters to the game. Here is another piece of the puzzle that must be solved. I would like to announce that I figured it out, but my tests are so far inconclusive.I attempted to build a new token. I took Foxbat's Black Knight plug-in apart and created a new directory structure based on token 77 (unused by characters, monsters or objects), renaming his animation files appropriately. That was easy enough. On to AnimData.D2. I carefully copied Foxbat's records based on the mosquito over to six of the records I had identified as spare. I used a clean file so nothing I had done elsewhere would interfere. Same for monstats, montype and levels. For starters I tried the unused Dark Knight entries in monstats/montype, since our goal is to put new monsters in without removing any. I stuck my new boys in Great Marsh so off to Act 3 with my Zon tester and her trusty Iron Wolf sidekick.
quote:
Assertion Failure
Location: D2Client\ENGINE\gfx.cpp, line #1303
Expression: eComponent < NUM_COMPONENTS
This error occurred as I moved out from the waypoint, and presumably when the first Black Knight would have appeared in game range. (I am not sure whether that boundary is the edge of my screen or the edge of "creature awareness" which is usually less but occasionally greater.) I played around with various settings but kept getting the same error.
Then I thought, what if it is my using the Dark Knight line that fouls things up? So I started fresh with monstats/montype and modded the Black Knight into the first Gorgon line. Off to the Marsh again. Sure enough, I hear sounds like something hissing, and if I remember correctly the gorgon lines use the viper sounds. But nothing is visible! Okay, I am in the jungles and running in windowed mode (my machine has to be reset if I crash in full-screen mode), so everything is really dark. But my hireling is pumping away with glacial spikes and I can see the splash as it hits...something. But I am not attacked, and I can never see bodies.
Back to monstats, and I see monster velocity and run are both at 1. (1 = standing still?) So I bump those values up some, and again off to the Marsh.
quote:
FileReadError
Location: D2Hell\SRC\Archive.cpp, line #59
Expression: DATA\GLOBAL\MONSTERS\77\COF\77RNhth.COF
It took a couple of iterations for me to find out I had put a 1 in the RN Mode column in monstats, so the game was looking for a running COF. It appears the program had no trouble assembling my new directory structure into its message, but I cannot tell if it actually looked in that directory, or if it merely parroted the location based on the token I had assigned. Now that I write this, I realize the test would be to make a dummy COF and DCC for running mode, and see if I get the same error message.
I removed the run mode and fired up one more time. Actually several more times. I would always get
quote:
Assertion Error:
Location: D2Client\UNIT\CUnit.cpp, line #1436
Expression: (UNIT)nAnimFrame <= tCelContext.dwCelsPerDirection
Three different conditions, three different errors. I am not surprised by the middle error, but I would think that token handling problems would have given me the same error regardless of which line I modded in monstats. Or, the token handling problem does exist, but the first two errors were precedent conditions. To be sure I wasn't running into hardcoded token issues, I took several of the more unusual tokens (e.g. XZ for flower demon) and searched all the d2 dlls for incidences. I did find such combinations in a number of places with varying cases, but never in any structure that resembled a table.
Conclusions:
First, the order of precedence in the error checking is probably archive.cpp to gfx.cpp to CUnit.cpp. I am certain the archive.cpp check occurs before the CUnit.cpp check. So, in the last error, it may choke but it seems to be finding my COF files! That would imply the token and new directory structure do work. Also, in the case where the movement numbers were both 1, the GH, NU and DD animations were not causing failures. Only when they could move did I get the last error. Without a hardcoded table and from the behavior I saw, I would have to guess new tokens could work...too bad I never saw any animations to prove it. Certainly more work in this direction is called for.
[This message has been edited by Myhrginoc (edited 16 March 2002).]