At some point we probably should move to 64-bit address space in order to fit more images in memory. Unfortunately, this requires several fixes to systems that try to jam pointers into 32-bit integers.

In this ticket I track the changes needed:

[ ] CSymbolTable, CIDTable, and CDictionary all seem to rely on storing pointer
    in an int array. We should deprecate all three.
[ ] In DXSparseMask.h we encode pointer values into DWORD. This should be changed
    to DWORD_PTR.
[ ] In TLisp we use the DWORD ref count to store the free-chain linked-list.
    We should store it somewhere else.
[ ] In TLisp, object pointers are stored in integers. We should create a custom
    TLisp class for object pointers to solve this.
[ ] In CTileMapSection we use DWORD tiles to store pointers to tile maps. We could
    probably convert to DWORD_PTR and have it work. See if we can take advantage
    of the extra bits in a DWORD_PTR to store more.
[ ] In GameSessionInput.cpp it looks like we store a CSpaceObject pointer in
    a DWORD. I think we can change this to either a DWORD_PTR or void *
[ ] In GameSessionMenus.cpp we store a CPower pointer in a DWORD. We should be
    able to change to DWORD_PTR or void *.
[ ] COrderDesc sometimes stores integers in a pointer type. This should be OK,
    because pointer types will always be larger, but we should make sure that
    it is never the other way around.
wolfy 6 Mar 2022:

Item 1 completed in commit 5222de3 (CSymbolTable/CIDTable using CDictionary & CIntArray)
Item 2 completed in commit f45da60 (Dxsparsemask ptr encode/decode)

wolfy 6 Mar 2022:

Item 5 completed in commit f63bf94 (CTile storing pointers in DWORD)

wolfy 6 Mar 2022:

Items 6 and 7 completed in commit 7a42ee8 (Same underlying problem - CMenuData had 2 DWORDs being used to store pointers and ints. Updated them to void*)

wolfy 6 Mar 2022:

Item 3 completed in commit 81e7c8f (ICCItem when used by tlisp's linked list was having the pointers stored in m_dwRefCount. This was moved to its own variable)