Files
firestorm/Gameleap/code/mw4/Code
24ce46ab6d Cameraship Map/Armor diagnostics: -tmr ladder, draw counter, CTCL type log
Investigating a field report that the cameraship secondary armor/score/map
screen showed its background BMP but no overlay graphics "on certain video
cards". The video card was a red herring: the machine was launched with
-ctcltype 2 (game pod) instead of 3 (cameraship), and the overlay block in
hudchat.cpp is gated on CTCL_GetType()==_ECTCL_CameraShip, so it never ran.

This is hard to spot because the two gates are independent. HSH_EnterFullScreen2
and CMR_Device open the screen and paint its background based purely on whether
a spare secondary monitor exists, and never consult the CTCL role. A wrong
-ctcltype therefore yields a screen that lights up, shows the correct artwork
and renders nothing, which is visually identical to a DirectDraw failure. The
same background-only screen also appears on a game pod when an MFD mode finds no
dual-head span and falls through to the single-secondary mr_device path.

Diagnostics added:

- render.cpp: log the CTCL type in gos-displays.txt from HSH_EnterFullScreen2,
  via the existing g_pfnCTCL_GetType hook so GameOS gains no game-code
  dependency. Always logged, and states in words whether overlays will be drawn.
- render.cpp/.hpp: CHSH_Device::m_nDrawCalls, incremented in DrawQuad,
  DrawThickFrame and DrawTexture, reset in CMR_Device::BeginScene and reported
  for the first 5 frames from CMR_Device::EndScene when -tmr is active. Zero
  draws proves the overlay code never ran; non-zero with a blank screen would
  mean it ran and drew invisibly. This distinction is what settled the case.
- render.cpp: log CMR_Device surface creation plus the overlay texture's
  dimensions, depth and channel masks.
- New -tmr <0-3> switch (MW4Application.cpp, documented in -help): 0 normal,
  1 background blit with DDBLTFAST_WAIT|DDBLTFAST_NOCOLORKEY, 2 Clear instead of
  the background blit, 3 as 2 plus alpha blending off and an untextured magenta
  DrawQuad.

Mode 3 drew magenta and mode 2 was pure black, which cleared the 3D device, the
flip and the background blit in two runs; the draw counter then reported 0 and
pointed straight at the gate. Documented as STEP 11 in CLAUDE.md, including the
field triage rule: read "CTCL type =" in gos-displays.txt before suspecting
drivers.

Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com>
Co-authored-by: GitHub Copilot <copilot@github.com>
2026-07-26 11:59:56 -05:00
..

The binaries directory is where your plugins get put when you compile them.



This is not the directory to use if you want to check in a binary of your plugin.

This directory is in sourcesafe to assist in setup of 3DSMax2 development.



Standard debug levels for 3DSMax2 are :



rel - no debug - no debug memory

hybrid - debug - no debug memory

debug - debug - debug memory



The now 3 levels for Stuff Armor and there corrilation between max are :



Release - - rel max   - Fully optimized, no debug, not LAB_ONLY

Profile - - rel max   - Fully optimized, some debug, LAB_ONLY

Debug   - - debug max - Varying level of armor, full debug, LAB_ONLY, 



When you compile the 3ds project the plugin will go into either the debug or rel directory, whichever

is apporpriote to the copy of 3DSMax you must run it under.  When you compile a plugin if it has been

built in the directory it will be overwritten by the new dll.  (IE: if you compile a Release and then a Profile 

only your Profile will exist since they share directories) 



Plugins must not be mixed.  If the plugin is for the Release version of 3DSMax2 you must not run it

under the debug version of 3DSMax2.



--------------------------------

Setup For Existing Workspaces:

--------------------------------



3DSMax2 setup:



I recommend installing max *without* the sdk ( all the sdk is included in the MW4 source control ).

I also recomend installing the debug version *next* to the regular verson of max off of your root drive.

example:

	c:\3DSMax2

	c:\Maxdbg20 



Under your release copy of max:

File|Configure Paths|Plugins Tab|Add..

{driveletter}:\mw4\Code\3DSPlugins\Binaries\Rel



Under your debug copy of max:

File|Configure Paths|Plugins Tab|Add..

{driveletter}:\mw4\Code\3DSPlugins\Binaries\Debug





Setup For project:

Project|Settings|Debug Tab



Choose the version from the "settings for" combo box



for release and profile set the "Executable For Debug Session" to:

	{driveletter}:\3DSMAX2\3dsmax.exe



for debug set:

	{driveletter}:\Maxdbg20\3dsmax.exe







Once this is done everything should work as usual for compiling and debuging.



---------------------

Adding a project

---------------------

When adding a project make sure to copy the debug levels from other projects.  Make sure to *NOT* specify 

any libries by adding them to the resource tree.  Instead type the names into the : 

	Project:Settings:Link Tab:General

		Object/Library Modules



Just type the library names in with spaces seperating them and no paths.  This way it will use the appropriate 

libraries ( debug, release ).







Here is all the info needed for creating a new project.





These are 3DSMax2, MFC, Stuff Defines



Project|Settings|C/C++|General|Processor Definitions



release

WIN32,NDEBUG,_WINDOWS,_USRDLL,_WINDLL,MULTI_PLAYER,USE_PROTOTYPES,STRICT,TEST_CLASS=50



Profile

WIN32,NDEBUG,_WINDOWS,_USRDLL,_WINDLL,LAB_ONLY,MULTI_PLAYER,USE_PROTOTYPES,STRICT,TEST_CLASS=50



Debug

WIN32,_DEBUG,_WINDOWS,_USRDLL,_WINDLL,LAB_ONLY,MULTI_PLAYER,USE_PROTOTYPES,STRICT,TEST_CLASS=50





Project|Settings|Link|General|Object/Library Modules debug build must have NAFXCWD.LIB

Project|Settings|C/C++|General|Warning level is 3 for all 3dstudio compiled programs.

Project|Settings|C/C++|General|Optimizations is maximize speed for release and profile, disabled for Debug.

Project|Settings|C/C++|Code Generation is PentiumPro for all configurations.

Project|Settings|C/C++|Code Generation Runtime Lib is Multithreaded for rel & prof and multithreaded debug for debug.

Project|Settings|C/C++|C++ Language|Enable Run-Time Type Information is set for all configurations.

Project|Settings|C/C++|Optimizations|Inline Function is set to Any Suitable for rel & prof and disabled for debug.

Project|Settings|Link|General|Generate Debug information is set for profile and debug and disabled for profile

Project|Settings|Resource|PreProcessor Definitions NDEBUG for rel and profile and _DEBUG for debug