Announcement

Collapse
No announcement yet.

DESIGN/PROJECT: GovernmentsModified complete

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Originally posted by Maquiladora
    MrBaggins mentions some repetitious work, if I can help with that, to get it working for all databases, then tell me how.
    So you wanna become a coder? For that you need and account at our repository, you need TortoiseSVN or another SVN tool. A compiler like the Introductory Edition of VC6 or the Express Edition of VC2008, then the source code a version of Direct X maybe also the Windows SDK, depending on your Direct X version, and you have to find all those instances of DB->Get( in the code, for that the windows search is your friend or also the internal search of Visual Studio.

    -Martin
    Civ2 military advisor: "No complaints, Sir!"

    Comment


    • #17
      Originally posted by Martin Gühmann

      So you wanna become a coder?
      Yes, but I doubt I can do more than copy and paste at the moment. But I'm good at repetitious tasks, so thought I could be useful.

      For that you need and account at our repository, you need TortoiseSVN or another SVN tool. A compiler like the Introductory Edition of VC6 or the Express Edition of VC2008, then the source code a version of Direct X maybe also the Windows SDK, depending on your Direct X version, and you have to find all those instances of DB->Get( in the code, for that the windows search is your friend or also the internal search of Visual Studio.
      Thanks Martin, I'll look into it.

      BTW which is the best (least problems) VC6 or VC2008?
      Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
      CtP2 AE Wiki & Modding Reference
      One way to compile the CtP2 Source Code.

      Comment


      • #18
        Originally posted by Maquiladora
        BTW which is the best (least problems) VC6 or VC2008?
        Let's say if you want to release a playtest version then you have to use VC6, since VC2008 eats the army to goal assignment, so that the AI won't move any units. If you just want to do some coding and testing then you can use VC2008. One advantage of VC2008 or more precise of its integrated development environment Visual Studio 2008 is that it has a more user friendly interface and fewer bugs, so I really prefer VS2008 over VS6. Another advantage is that you should be able to download VS2008 Express Edition from Microsoft, directly. Whereas, I have no idea for VS6, but we can upgrade VS6 Introductory version to a full version with Microsoft's latest service pack, very easily.

        -Martin
        Civ2 military advisor: "No complaints, Sir!"

        Comment


        • #19
          I'll try VS2008 and see how I go. Expect a few questions coming though.

          I think I had an account for the old repository but I've forgotten it. I assume I have to contact Darkdust eventually for the new one.
          Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
          CtP2 AE Wiki & Modding Reference
          One way to compile the CtP2 Source Code.

          Comment


          • #20
            Originally posted by Martin Gühmann

            So here you have the problem, so far I made it working or it least it should work with the UnitDB. Maybe there are also other databases but there is no guaranty.
            I just tested a warrior that cost 500 in Tyranny instead of 150 normally and I found some bugs.

            For example the build time doesn't show correctly in the build manager before you add it to the build queue, it just shows the time expected for the original warrior. So I guess I'll start by trying to fix that.

            I also got another freeze and crash when trying to move a tyranny warrior out of the city:

            Code:
            Version 2008-06-18
              0x004e0782  [?UDUnitTypeCanSettle@@YA_NHHABVMapPoint@@_N@Z + 0x32]
              0x004e08b7  [?CanSettle@UnitData@@QBE_NABVMapPoint@@_N@Z + 0x27]
              0x004d94ed  [?CanSettle@Unit@@QBE_NABVMapPoint@@_N@Z + 0x2d]
              0x0043dab7  [?RepaintLayerSprites@TiledMap@@QAEHPAUtagRECT@@H@Z + 0x417]
              0x0043e3c5  [?RepaintSprites@TiledMap@@QAEHPAVaui_Surface@@PAUtagRECT@@_N@Z + 0x95]
              0x006e58bf  [?background_draw_handler@@YA?AW4AUI_ERRCODE@@PAX@Z + 0xaf]
              0x00687a9d  [?DrawThis@Background@@UAE?AW4AUI_ERRCODE@@PAVaui_Surface@@HH@Z + 0xd]
              0x00678c9b  [?Draw@aui_Window@@UAE?AW4AUI_ERRCODE@@PAVaui_Surface@@HH@Z + 0x2b]
              0x0040be13  [?ProcessUI@CivApp@@AAEHIAAI@Z + 0x183]
              0x0040c1cb  [?Process@CivApp@@QAEHXZ + 0x11b]
              0x00406f84  [?CivMain@@YGHPAUHINSTANCE__@@0PADH@Z + 0x394]
              0x004069e5  [WinMain@16 + 0x65]
              0x007ff0fc  [WinMainCRTStartup + 0x134]
              0x7c816fd7  [__onexitbegin + 0x7be50cdf]
            I can imagine what is wrong here but I'll see how the debugger works.
            Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
            CtP2 AE Wiki & Modding Reference
            One way to compile the CtP2 Source Code.

            Comment


            • #21
              I ran the debugger and repeated the bug and got an assertion failure at this line from CTPDatabase.cpp in ...ctp2_code\gs\newdb:

              Code:
              template  T *CTPDatabase::Access(sint32 index)
              {
              	Assert(index >= 0);
              [b]	Assert(index < m_numRecords);[/b]
              	if((index < 0) || (index >= m_numRecords))
              	{
              		DPRINTF(k_DBG_GAMESTATE, ("CTPDatabase::Access: index: %i, numRecords: %i\n", index, m_numRecords));
              		return NULL;
              	}
              
              	return m_records[index];
              }
              so the modified tyranny warrior index is not less than m_numRecords, but what do I do about it?
              Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
              CtP2 AE Wiki & Modding Reference
              One way to compile the CtP2 Source Code.

              Comment


              • #22
                Originally posted by Maquiladora
                For example the build time doesn't show correctly in the build manager before you add it to the build queue, it just shows the time expected for the original warrior. So I guess I'll start by trying to fix that.
                Looks like I only modified the game object files themselves and forgot the UI. The file you are looking for is called editqueue.cpp.

                Originally posted by Maquiladora
                so the modified tyranny warrior index is not less than m_numRecords, but what do I do about it?
                It looks rather like that that isn't even a valid index for without government modified stuff. So what was its value? And what was the function call stack. Both can be figured out with the debugger. But you can find the stuff also in the log files you find in log directory.

                -Martin
                Civ2 military advisor: "No complaints, Sir!"

                Comment


                • #23
                  Originally posted by Martin Gühmann

                  Looks like I only modified the game object files themselves and forgot the UI. The file you are looking for is called editqueue.cpp.
                  There are many instances of ->Get( in that file, but I have no idea which to change or what to change it to, because I can't read the code yet.

                  It looks rather like that that isn't even a valid index for without government modified stuff. So what was its value? And what was the function call stack. Both can be figured out with the debugger. But you can find the stuff also in the log files you find in log directory.
                  I guess this is the important part from the debugger log:

                  Code:
                     armydata.cpp@6228: Army 0xd0000005 Executing order ORDER_MOVE_TO @ (1,8), turn=6
                      wrlunit.cpp@93  : World::RemoveUnitReference: id: 0x10000007
                     armydata.cpp@6228: Army 0xd0000005 Executing order ORDER_MOVE_TO @ (0,10), turn=6
                      c3debug.cpp@315 : Assertion (index < m_numRecords) Failed in File:c:\ctp2\ctp2_code\gs\newdb\ctpdatabase.cpp, Line:356
                      c3debug.cpp@316 : Stack Trace: '  0x008c460a  [char * __cdecl c3debug_StackTrace(void) + 0x2a]
                    0x008beeed  [void __cdecl c3debug_Assert(char const *,char const *,int) + 0x5d]
                    0x00bb5618  [public: class UnitRecord * __thiscall CTPDatabase::Access(int) + 0x48]
                    0x00bb5538  [public: class UnitRecord * __thiscall CTPDatabase::Access(int,int) + 0x18]
                    0x00bb550c  [public: class UnitRecord const * __thiscall CTPDatabase::Get(int,int) + 0x1c]
                    0x00a3fcaa  [bool __cdecl UDUnitTypeCanSettle(int,int,class MapPoint const &,bool) + 0x4a]
                    0x00a3ff06  [public: bool __thiscall UnitData::CanSettle(class MapPoint const &,bool)const  + 0x36]
                    0x00a35c44  [public: bool __thiscall Unit::CanSettle(class MapPoint const &,bool)const  + 0x24]
                    0x0091ec47  [public: int __thiscall TiledMap::RepaintLayerSprites(struct tagRECT *,int) + 0x477]
                    0x0091fb4f  [public: int __thiscall TiledMap::RepaintSprites(class aui_Surface *,struct tagRECT *,bool) + 0x8f]
                    0x00e9a698  [enum AUI_ERRCODE __cdecl background_draw_handler(void *) + 0xf8]
                    0x00dfbe17  [public: virtual enum AUI_ERRCODE __thiscall Background::DrawThis(class aui_Surface *,int,int) + 0x27]
                    0x00da7058  [public: virtual enum AUI_ERRCODE __thiscall aui_Region::Draw(class aui_Surface *,int,int) + 0x38]
                    0x00dcdb58  [public: virtual enum AUI_ERRCODE __thiscall aui_Window::Draw(class aui_Surface *,int,int) + 0x28]
                    0x008a38c3  [private: int __thiscall CivApp::ProcessUI(unsigned int,unsigned int &) + 0x1f3]
                    0x008a3e9a  [public: int __thiscall CivApp::Process(void) + 0xca]
                    0x0089959d  [int __stdcall CivMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int) + 0x3ad]
                    0x00898bf7  [WinMain@16 + 0x87]
                    0x010d7968  [WinMainCRTStartup + 0x2a8]
                    0x010d76cf  [WinMainCRTStartup + 0xf]
                    0x7c816fd7  [\177zlib1_NULL_THUNK_DATA + 0x7b41952f]
                  but I don't know which is the value of the warrior. There is mention of a "stack trace", but I would have no idea what to do with that either.
                  Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
                  CtP2 AE Wiki & Modding Reference
                  One way to compile the CtP2 Source Code.

                  Comment


                  • #24
                    Originally posted by Maquiladora
                    There are many instances of ->Get( in that file, but I have no idea which to change or what to change it to, because I can't read the code yet.
                    Probably you have to change all of them in that file.

                    Originally posted by Maquiladora
                    I guess this is the important part from the debugger log:

                    Code:
                       armydata.cpp@6228: Army 0xd0000005 Executing order ORDER_MOVE_TO @ (1,8), turn=6
                        wrlunit.cpp@93  : World::RemoveUnitReference: id: 0x10000007
                       armydata.cpp@6228: Army 0xd0000005 Executing order ORDER_MOVE_TO @ (0,10), turn=6
                        c3debug.cpp@315 : Assertion (index < m_numRecords) Failed in File:c:\ctp2\ctp2_code\gs\newdb\ctpdatabase.cpp, Line:356
                        c3debug.cpp@316 : Stack Trace: '  0x008c460a  [char * __cdecl c3debug_StackTrace(void) + 0x2a]
                      0x008beeed  [void __cdecl c3debug_Assert(char const *,char const *,int) + 0x5d]
                      0x00bb5618  [public: class UnitRecord * __thiscall CTPDatabase::Access(int) + 0x48]
                      0x00bb5538  [public: class UnitRecord * __thiscall CTPDatabase::Access(int,int) + 0x18]
                      0x00bb550c  [public: class UnitRecord const * __thiscall CTPDatabase::Get(int,int) + 0x1c]
                      0x00a3fcaa  [bool __cdecl UDUnitTypeCanSettle(int,int,class MapPoint const &,bool) + 0x4a]
                      0x00a3ff06  [public: bool __thiscall UnitData::CanSettle(class MapPoint const &,bool)const  + 0x36]
                      0x00a35c44  [public: bool __thiscall Unit::CanSettle(class MapPoint const &,bool)const  + 0x24]
                      0x0091ec47  [public: int __thiscall TiledMap::RepaintLayerSprites(struct tagRECT *,int) + 0x477]
                      0x0091fb4f  [public: int __thiscall TiledMap::RepaintSprites(class aui_Surface *,struct tagRECT *,bool) + 0x8f]
                      0x00e9a698  [enum AUI_ERRCODE __cdecl background_draw_handler(void *) + 0xf8]
                      0x00dfbe17  [public: virtual enum AUI_ERRCODE __thiscall Background::DrawThis(class aui_Surface *,int,int) + 0x27]
                      0x00da7058  [public: virtual enum AUI_ERRCODE __thiscall aui_Region::Draw(class aui_Surface *,int,int) + 0x38]
                      0x00dcdb58  [public: virtual enum AUI_ERRCODE __thiscall aui_Window::Draw(class aui_Surface *,int,int) + 0x28]
                      0x008a38c3  [private: int __thiscall CivApp::ProcessUI(unsigned int,unsigned int &) + 0x1f3]
                      0x008a3e9a  [public: int __thiscall CivApp::Process(void) + 0xca]
                      0x0089959d  [int __stdcall CivMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int) + 0x3ad]
                      0x00898bf7  [WinMain@16 + 0x87]
                      0x010d7968  [WinMainCRTStartup + 0x2a8]
                      0x010d76cf  [WinMainCRTStartup + 0xf]
                      0x7c816fd7  [\177zlib1_NULL_THUNK_DATA + 0x7b41952f]
                    Not quite, one important thing is missing, namely the line that was generated by this piece of code:

                    Code:
                    DPRINTF(k_DBG_GAMESTATE, ("CTPDatabase::Access: index: %i, numRecords: %i\n", index, m_numRecords));
                    When the assertion failure message pops up you can press retry, if the debugger is running, it will place you at c3debug_Assert. You can leave this function by single step execution. You just need to press F10 and the debugger executes one line. Just press F10 until you have left c3debug_Assert. Then execute the program until it prints the actual index into the log file. Alternatively you can hover the mouse over index, then you will see its actual value.

                    You can also look into the debugging menu there you will also find some helpful command beside F10.

                    Originally posted by Maquiladora
                    but I don't know which is the value of the warrior.
                    So far I only see in the log an army and a unit. The unit belongs to that army and the army is moving along a line. Both units and armies have identifiers. Those are displayed as hexadecimal number. The first digit for armies is d and the first digit for units is 1.

                    Originally posted by Maquiladora
                    There is mention of a "stack trace", but I would have no idea what to do with that either.
                    With the call stack you can see what functions did call the function that caused the assertion failure. The problem may lie in the function argument. In that case the code you posted is ok, but the value of index is wrong, and that comes certainly from some of the functions deeper in the stack, like UDUnitTypeCanSettle or Unit::CanSettle. Since I know some of E's mistakes, I can speculate that the index parameter passed to the function is not really a unit type but a unit identifier.

                    Let's see what you find.

                    -Martin
                    Civ2 military advisor: "No complaints, Sir!"

                    Comment


                    • #25
                      Originally posted by Martin Gühmann

                      Not quite, one important thing is missing, namely the line that was generated by this piece of code:

                      Code:
                      DPRINTF(k_DBG_GAMESTATE, ("CTPDatabase::Access: index: %i, numRecords: %i\n", index, m_numRecords));
                      When the assertion failure message pops up you can press retry, if the debugger is running, it will place you at c3debug_Assert. You can leave this function by single step execution. You just need to press F10 and the debugger executes one line. Just press F10 until you have left c3debug_Assert. Then execute the program until it prints the actual index into the log file. Alternatively you can hover the mouse over index, then you will see its actual value.

                      You can also look into the debugging menu there you will also find some helpful command beside F10.
                      I have a problem then. When CivCTP_dbg.exe minimizes and I get the assertion pop-up, I choose retry but then I can't see anything, the screen is black and all I can see is the windows taskbar. I tried alt-tabbing, show desktop but nothing allows me to see VC or in-game again unless I close ctp with task manager.

                      Debugging is obviously working though because I can check task manager and see nothing is happening, except when I press F10 to move on a line. Everything is responsive, I just can't see anything unless I close ctp. I am doing something wrong?
                      Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
                      CtP2 AE Wiki & Modding Reference
                      One way to compile the CtP2 Source Code.

                      Comment


                      • #26
                        Looks like you forgot to do the following:

                        Originally posted by Martin Gühmann
                        Looks like you stumbled across the first thing you have to debug. For that you have to build a debug version. To do this go the menu bar -> Build -> Configuration Manager, there set the active configuration to Debug. Then go to the menu bar -> Project -> ctp2 properties. There go to configuration properties and then Debugging. Add to the program options or program arguments or however it is called nonexclusive. This is needed so that the debugger has any use to you.
                        For some reason I posted that in the other thread.

                        -Martin
                        Civ2 military advisor: "No complaints, Sir!"

                        Comment


                        • #27
                          Originally posted by Martin Gühmann
                          Looks like you forgot to do the following:

                          For some reason I posted that in the other thread.
                          I added it like the picture attached. I also added it like "NONEXCLUSIVE" and "-NONEXCLUSIVE" but they all do the same. So what is still wrong?
                          Attached Files
                          Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
                          CtP2 AE Wiki & Modding Reference
                          One way to compile the CtP2 Source Code.

                          Comment


                          • #28
                            Originally posted by Maquiladora
                            I added it like the picture attached. I also added it like "NONEXCLUSIVE" and "-NONEXCLUSIVE" but they all do the same. So what is still wrong?
                            The image looks right, so you should be able to alt tab to the debugger window. Otherwise I don't see that there is anything wrong.

                            Anyway, what was the unit type?

                            -Martin
                            Civ2 military advisor: "No complaints, Sir!"

                            Comment


                            • #29
                              Originally posted by Martin Gühmann

                              The image looks right, so you should be able to alt tab to the debugger window. Otherwise I don't see that there is anything wrong.
                              I can alt-tab between the game and the debugger, but the screen stays black, except for the windows taskbar, really annoying.

                              Anyway, what was the unit type?
                              A warrior, that is modified like this, in bold lines that are different to the normal warrior:

                              Code:
                              ## UNIT 70
                              [b]UNIT_WARRIOR > GOVERNMENT_TYRANNY[/b] {
                                 Description DESCRIPTION_UNIT_WARRIOR
                                 DefaultIcon ICON_UNIT_WARRIOR
                                 DefaultSprite SPRITE_WARRIOR
                                 Category UNIT_CATEGORY_ATTACK
                                 [b]Attack 20[/b]
                                 Defense 10
                                 ZBRangeAttack 0
                              ...
                              the rest of the warrior is the same.
                              Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
                              CtP2 AE Wiki & Modding Reference
                              One way to compile the CtP2 Source Code.

                              Comment


                              • #30
                                BTW when I terminate the game I can see the call stack information in the debugger, but then I have to press "continue" or "break" in the debugger, then the call stack window disappears.
                                Call to Power 2: Apolyton Edition - download the latest version (12th June 2011)
                                CtP2 AE Wiki & Modding Reference
                                One way to compile the CtP2 Source Code.

                                Comment

                                Working...
                                X