Announcement

Collapse
No announcement yet.

PolyCast Episode 61: "Somewhere Along the Line"

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

  • PolyCast Episode 61: "Somewhere Along the Line"

    Look closely enough and you may find it. The sixty-first episode of PolyCast, an official podcast of Apolyton Civilization Site (ACS), is now netcasting. "Somewhere Along the Line" features regular co-hosts Daniel "DanQ" Quick, Makahlua, Imran Siddiqui and Annalee "Cartimandua" Barney with returning guest co-host Michael "emeseles" Lucas-Smith and first-time guest co-host Douglas "Rusty Edge" Smith.

    PolyCast is a bi-weekly audio production in an ongoing effort to give the Civ community an interactive voice on game strategy. A nominee in the "Best Produced" and "Gaming" categories of the 2008 Podcast Awards, its sibling show ModCast focuses on Civ modding.

    To date, ACS is the only known community on the Web to produce its own Civ podcasts.
    PolyCast Co-Host, Owner and Producer: entertaining | informing civ
    >> PolyCast (Civ strategy), ModCast (Civ modding), TurnCast (Civ multiplay); One More Turn Dramedy

  • #2
    Summary of Topics

    - 02m47s | Research Lab
    It's a matter of time: a proposal to radically alter a fundamental basis of Civilization gameplay.
    - 21m04s | Senate
    Redux: favourite Civilization IV Leader Traits, last discussed during Episode 20 in July 2007, and now includes worst trait considerations; then, how to deal with siege and is Cavalry overpowered in Beyond the Sword.
    Last edited by DanQ; February 2, 2009, 14:14. Reason: Reverted a link
    PolyCast Co-Host, Owner and Producer: entertaining | informing civ
    >> PolyCast (Civ strategy), ModCast (Civ modding), TurnCast (Civ multiplay); One More Turn Dramedy

    Comment


    • #3
      One way to do the emulate the communication networks that you guys discussed in episode would be the following:

      Allow players a communication radius where they had complete control of their troops. If a unit goes outside of that radius they have to select a function for it (pillage, attack any egyptians, attack egyptian cities, explore, etc).

      After that the AI controls the unit on the players behalf and the units doesnt effect the players fog of war (so he cant see what the unit is doing) until the unit returns to inside the players communication network.

      The only base control the player may have is to send out a message to halt attacks against foe, to start attacks against another foe (such as after a declaration of war), or to recall units to inside the communication network. Some units may wander back heavily promoted, some never come back.

      Players could also receive word back of major events. "Scouts report that your armies won a major battle against the Persians." "It has been weeks since your Knights have reported back, many fear they have been defeated by Roman forces."

      If the ai controlled units take a city they can extend the players communication network after the cities revolt is through.

      Its all fairly easy to do with some SDK work. The hardest is to transition the unit between human and AI control and FfH already does this. In FfH crazed units sometimes ignore the players commands and go off on their own killing spree. They are still player owned (they still belong to the players civs) but they are automated by the AI and very aggressive. A similiar process could be used for this.

      Comment


      • #4
        Generational?

        Others have also mentioned it makes sense for the king to ride out to war with his troops, which could lead to interesting problems back home. Very historically accurate indeed

        I also like the idea that if the leader dies, so be it - a new leader takes the throne, etc.. could be very fun depending on the type of government too - in democracy you could hear about the new president taking over

        If the leader doesn't die, then he'd be a bit like a great general in that respect (or exactly like that).

        As for what happens when the king dies.. yes, your army would keep on fighting and if they took it, brilliant. As with any historical battle, when the general in charge died, it was often mayhem for the troops left over to fight the war - often they'd surrender. You'd expect that unseasoned units would give up while promoted units would fight on, albiet without you telling them what to do - they'd behave a bit like barbarians at that point.

        It would be very interesting for the new leader to hear the news of what happened with his predecessors military force when the news finally filters back.

        I'm not sure about your idea of how you would achieve the time dilation effects in civ4.
        "Peace through superior firepower."

        Comment


        • #5
          That would also be pretty easy to do. FfH has mechanics to support adding and removing traits dynamically and switchign leaders wouldn't be a big deal. It also has a few leaders that are matched to units and if that unit dies the player loses all his traits. It wouldnt be hard to give the player a selection of new leaders to choose from if his king/queen unit dies (with probably some revolution time between to punish the player for losing his king).

          Comment


          • #6
            Originally posted by Murg View Post
            switchign leaders wouldn't be a big deal.
            Oh, has that been actually done before?
            One wild idea I had for the Planetfall Gaians, was that they could switch their leader from Deirdre Skye to Cha Dawn.
            Contraria sunt Complementa. -- Niels Bohr
            Mods: SMAniaC (SMAC) & Planetfall (Civ4)

            Comment


            • #7
              Yeap. In FfH you can pick a "Random Good Leader", "Random Neutral Leader" or "Random Evil Leader". Those are actually leaders (so they are displayed form the main menu) but when the game starts they are swapped out with an actual randomly generate good, neutral or evil leader. Here is the code:

              Code:
              //FfH: Added by Kael 05/28/2008
                  int iRndCiv = GC.getDefineINT("RANDOM_CIVILIZATION");
                  if (iRndCiv != -1)
                  {
                      int iAlignment = 0;
                      int iBestLeader = -1;
                      int iBestCiv = -1;
                      int iBestValue = -1;
                      int iValue = 0;
              
                      for (int iPlayer = 0; iPlayer < MAX_CIV_PLAYERS; iPlayer++)
                      {
              			if ((GC.getInitCore().getSlotStatus((PlayerTypes)iPlayer) == SS_COMPUTER) || (GC.getInitCore().getSlotStatus((PlayerTypes)iPlayer) == SS_TAKEN))
              			{
              			    iAlignment = 0;
              				if (GC.getInitCore().getCiv((PlayerTypes)iPlayer) == NO_CIVILIZATION)
              				{
                                  GC.getInitCore().setCiv((PlayerTypes)iPlayer, (CivilizationTypes)iRndCiv);
                                  iAlignment = -1;
              				}
                              if (GC.getInitCore().getCiv((PlayerTypes)iPlayer) == iRndCiv)
                              {
                                  if (iAlignment != -1)
                                  {
                                      iAlignment = GC.getLeaderHeadInfo((LeaderHeadTypes)GC.getInitCore().getLeader((PlayerTypes)iPlayer)).getAlignment();
                                  }
                                  for (int iCiv = 0; iCiv < GC.getNumCivilizationInfos(); iCiv++)
                                  {
                                      if (GC.getCivilizationInfo((CivilizationTypes)iCiv).isAIPlayable())
                                      {
                                          for (int iLeader = 0; iLeader < GC.getNumLeaderHeadInfos(); iLeader++)
                                          {
                                              if (GC.getCivilizationInfo((CivilizationTypes)iCiv).isLeaders(iLeader))
                                              {
                                                  if (iAlignment == -1 || GC.getLeaderHeadInfo((LeaderHeadTypes)iLeader).getAlignment() == iAlignment)
                                                  {
                                                      iValue = 40000 + GC.getGameINLINE().getSorenRandNum(1000, "Random Leader");
                                                      for (int iI = 0; iI < MAX_CIV_PLAYERS; iI++)
                                                      {
                                                          if (GC.getInitCore().getLeader((PlayerTypes)iI) == iLeader)
                                                          {
                                                              iValue -= 2000;
                                                          }
                                                          if (GC.getInitCore().getCiv((PlayerTypes)iI) == iCiv)
                                                          {
                                                              iValue -= 1000;
                                                          }
                                                      }
                                                      if (iValue > iBestValue)
                                                      {
                                                          iBestCiv = iCiv;
                                                          iBestLeader = iLeader;
                                                          iBestValue = iValue;
                                                      }
                                                  }
                                              }
                                          }
                                      }
                                  }
                                  GC.getInitCore().setCiv((PlayerTypes)iPlayer, (CivilizationTypes)iBestCiv);
                                  GC.getInitCore().setLeader((PlayerTypes)iPlayer, (LeaderHeadTypes)iBestLeader);
                                  iBestCiv = -1;
                                  iBestLeader = -1;
                                  iBestValue = -1;
                              }
                          }
              		}
              	}
              //FfH: End Add
              Most of that code is just the randomization. The big thing you are interested in is:

              Code:
                                  GC.getInitCore().setCiv((PlayerTypes)iPlayer, (CivilizationTypes)iBestCiv);
                                  GC.getInitCore().setLeader((PlayerTypes)iPlayer, (LeaderHeadTypes)iBestLeader);
              Which are the commands to change the civ and leader for that player slot.

              Comment


              • #8
                Thanks!

                Btw, might you still remember the answer to this question in the FfH2 modding thread?:

                16. Fixed a CtD caused by the AI upgrading to airships.

                In Planetfall sea transports can be upgraded to the dropship, which can move over both land and sea. Comparable to the airship AFAIK. Now someone has reported a CtD after upgrading to the dropship. So I'm wondering, what was the cause of and solution for this CtD in FfH?
                Contraria sunt Complementa. -- Niels Bohr
                Mods: SMAniaC (SMAC) & Planetfall (Civ4)

                Comment


                • #9
                  Originally posted by Maniac View Post
                  Thanks!

                  Btw, might you still remember the answer to this question in the FfH2 modding thread?:

                  16. Fixed a CtD caused by the AI upgrading to airships.

                  In Planetfall sea transports can be upgraded to the dropship, which can move over both land and sea. Comparable to the airship AFAIK. Now someone has reported a CtD after upgrading to the dropship. So I'm wondering, what was the cause of and solution for this CtD in FfH?
                  Not a good one. The AI was CtD'ing when it got control of an airship. The fix was to block the AI from building airships (they weren't using them anyway).

                  Did you manage to get the ai to use transports over land?

                  Comment


                  • #10
                    Originally posted by Murg View Post
                    Not a good one. The AI was CtD'ing when it got control of an airship. The fix was to block the AI from building airships (they weren't using them anyway).
                    With me the CtD also happens with the human player.
                    Anyway, I had a look at a save provided, and I pinpointed the cause: I noticed the dropship was loaded onto itself! When I moved that dropship into a city, the game instantly crashed. When I first Unloaded All Units, and then moved the dropship into the city, everything went fine.

                    My initial hypothesis as to why the dropship got loaded onto itself: there is a function called shouldLoadOnMove (or something), which automatically loads units on transports in certain cases. One of those cases is a land unit placed on the sea. So if an airship/dropship gets upgraded while it's in the ocean...

                    I see two solutions:

                    1) modify the shouldLoadOnMove function

                    2) turn the airship/dropship into a naval unit. This might also help the AI understand what it should do with that unit.

                    A collateral change would be necessary to make option 2 work: a naval unit with [bCanMoveAllTerrain]1 should be buildable in all cities, not just coastal ones.

                    Did you manage to get the ai to use transports over land?
                    I haven't tried yet. The dropship is kinda in the "put in the rough concept, refine it later" stage. But I guess it should be possible to modify the UNITAI_ASSAULT_SEA so that a CanMoveAllTerrain unit considers all cities to be valid places to pick up or drop off units, not just coastal cities or other continents.

                    If you want to keep it a land unit, some changes in the path finding algorithm (GameCoreUtils) might also be necessary.

                    This in pathDestValid is problematic for instance:

                    Spoiler:
                    Code:
                    		if (pSelectionGroup->getDomainType() == DOMAIN_LAND)
                    		{
                    			int iGroupAreaID = pSelectionGroup->getArea();
                    			if (pToPlot->getArea() != iGroupAreaID)
                    			{
                    				if (!(pToPlot->isAdjacentToArea(iGroupAreaID)))
                    				{
                    					return FALSE;
                    				}
                    			}
                    		}


                    Anyway, this approach might work for the airship, but probably not for the Trojan Horse.
                    Last edited by Maniac; February 16, 2009, 13:37.
                    Contraria sunt Complementa. -- Niels Bohr
                    Mods: SMAniaC (SMAC) & Planetfall (Civ4)

                    Comment

                    Working...
                    X