How do you systematically get better?

Like others have said, I think all this time it was my own nerves holding me back from improving my game. I think I always had it in my head that I don't have the mind for strategy and I'd forever stay in my comfort zone. However, I used to be like that with another game series that I play and I ended up beating each game several times over on the hardest settings and it feels super easy to me now. I think that is probably the case with Civ too. I just needed to make that first step. Reading all of the advice and tips on this forum has helped tremendously and as I mentioned before, watching it applied/in action during the MP I joined in really gave me that incentive to try.
 
Yeah it seems hard to take that first step and go out of your comfort zone. And I admit I don't like to go too high a difficulty level because I like to build lots of wonders. Even on emperor I'm finding I can't get most of the wonders I like. Though I did manage to get Forbidden Palace last game, but I lost out on Big Ben and most of the others.

I forgot to mention above watching Youtubers has helped improve my game. I don't watch too much anymore, but for a while I was.
 
Are we all talking about the same game? Some of the comments seem to be about CIV V.

Anything above Emperor in CIV V was not much fun for me because I had to seek optimal strategies. Just the idea of having to rush the Great Library made me nauseous (well, not really). That and "don't pick Honor!". So like some have already said, being better to me meant turning the game into a boring experience.

But in CIV VI I'm playing as casually as I can and I still end up winning very frequently on Deity. And that's not even including the handicaps (e.g. no chops). It's possible I've gotten better, but I'm more inclined to believe the AI just isn't up to par in this last iteration.

I'm sure I'd get wrecked in multiplayer though. So far only have played against family and friends who also only play casually.
---

One thing in regards to CIV VI on Deity. It's normal to be behind the AI until the Renaissance. Around that time the AI loses steam. So if you're looking at the score in the Medieval Era thinking 'man, I'm doing poorly', you probably aren't.
 
Are we all talking about the same game? Some of the comments seem to be about CIV V.

Anything above Emperor in CIV V was not much fun for me because I had to seek optimal strategies. Just the idea of having to rush the Great Library made me nauseous (well, not really). That and "don't pick Honor!". So like some have already said, being better to me meant turning the game into a boring experience.

But in CIV VI I'm playing as casually as I can and I still end up winning very frequently on Deity. And that's not even including the handicaps (e.g. no chops). It's possible I've gotten better, but I'm more inclined to believe the AI just isn't up to par in this last iteration.

I'm sure I'd get wrecked in multiplayer though. So far only have played against family and friends who also only play casually.
---

One thing in regards to CIV VI on Deity. It's normal to be behind the AI until the Renaissance. Around that time the AI loses steam. So if you're looking at the score in the Medieval Era thinking 'man, I'm doing poorly', you probably aren't.
6 is more of an allowing game - you can play tall and win, you can play wide and win, you can go peaceful and win, you can go to war...you get the idea. I haven’t played 5, but as far as I know, there was only one way to play it. That’s the difference. On the other hand, it is fully possible to overtake the AI in science or culture by the medieval era, if you play well, but even if you don’t, you can still win.
 
Planning. After exploring a bit, what are you gonna do? Try to fix short, mid and long term objectives.

Watch other good players on videos. Read strategies. Try them and add a personnal grain of salt. Some new ideas will emerge over time.
 
Thing is, I'm less interested in "winning" the game (though it's nice when it happens) then I am watching the game unfold and kind of creating a narrative in my head as I play it out (and each game is like a different story). Not just in regards to my own civ, but also to the other civs around me... it's interesting wondering which ones will thrive and which ones will fall by the wayside, which ones will be loyal allies and which ones will be a perpetual thorn in my side.
 
I think the it's most simply a matter of how much you want to be better.
You must want it bad enough to read and process every single bit of information about the game you can find and think about how to implement it all while you are taking a shower or a horsehockey.

The next step is to not just play trough the game, but seriously plan ahead. Every 10 turns or so, take a moment (like half an hour+) to judge where your game is going. Update your plans regarding your win condition on the long term, governors, eurekas, politics etc on the medium term, and keep a list of things that need to happen in the near future for the short term. Every turn, before you hit the next turn button, check if you have taken care of everything on your notes. You may want a checklist to tell you what you all need to check before hitting end turn. (with a different checklist for each turn, each 5 turn, or each 10 turns). This time you take every 10 turns is also where you learn the most because you will be running into questions, and of course instead of disregarding them, or making an assumption, you google every thing.

I think the SGOTMs i played in the past were a good trainer for this. In the SGOTMs we would each play a set of 10 turns. Before anyone would start those 10 turns, there was a long discussion by the team what would have to happen in those 10 turns. Everyone would chime in with their idea's, excell sheets etc. The discussion would last days every 10 turns. That way we reached a level of play i could never achieve alone. Not just because there were 6 bright minds in the team, but also because alone it is so hard to take it slow and take a serious break for contemplation every 10 turns.
 
Last edited:
Every 10 turns or so, take a moment (like half an hour+) to judge where your game is going.

In multiplayer games, unless you play pbem, there is no way to have such time to think! That's why i developped easy ways to get goals without the whole micro stuff. Not optimal of course but it does make you better if you plan to play a lot of different games in a short time.
 
Every 10 turns or so, take a moment (like half an hour+) to judge where your game is going. Update your plans regarding your win condition on the long term, governors, eurekas, politics etc on the medium term, and keep a list of things that need to happen in the near future for the short term. Every turn, before you hit the next turn button, check if you have taken care of everything on your notes. You may want a checklist to tell you what you all need to check before hitting end turn. (with a different checklist for each turn, each 5 turn, or each 10 turns).
Yeah, and then, when your method with index cards begins to break down, implement with Python/Lua a system of ingame reminders for every turn (which are saved within the game via pickle/unpickle and remind you precisely regardless whether you reload 2 or 12 turns before or have a break in playing for several days) ...
This time you take every 10 turns is also where you learn the most because you will be running into questions
:thumbsup:
 
Trying to become more anticipatory rather than reactionary.

Also, and I need to take my own medicine here, work through tougher starts. I'm bad at this. Part of it is limited gaming time and part of it is aesthetic (srsly!?!? Another no desert start for Mali?)

Fighting back from tough starts is Civ at its finest, imo. Recent immortal game had me chasing a Germany that was consistently a solid half dozen techs ahead of me. But concentrated on offensive spying and using alliances to pump up tech really seemed to help. Got that space victory without having to engage in a bloody, drawn out war.
 
One thing that happens to me more often than I'd like is thinking "I need to do X in 5 turns." "I need to do X in 4 turns." I need to do X in 3 turns."
In this example implementation a simple (one time) reminder is created with 'Shift + R ': enter number of turns from now for the reminder to be activated & an arbitrary text you want.
If the text begins with "C" the reminder is cyclic & will be reloaded with the same turn number.
'Ctrl + Shift + R' shows all pending reminders.
'Alt + Shift + R' shows one reminder (each separate).
'Ctrl + Alt + Shift + R' deletes the last shown reminder.
How do you do this?
CAUTION! This example shows how I modified the civ4 CvEventManager.py - a working reminder system with all mentioned elements.
I'll start with civ6 modding when Firaxis has finished its job.
Spoiler :

[[see below the Same code without colour & a lot scroll-duty,
but display error-free & with the correct insertions]]

class CvEventManager:
def __init__(self):
# reminder addition 1/8 ### ###
#------------------------
self.reminders = []
self.iRemInd = 0
#------------------------

[...]
################## Events List ###############################
self.Events={

[...]
# reminder addition 2/8 ### ###
#------------------------
CvUtil.EventReminder : ('Reminder', self.__eventReminderApply, self.__eventReminderBegin),
#------------------------

}




#################### ON EVENTS ######################
def onKbdEvent(self, argsList):

[...]
if ( eventType == self.EventKeyDown ):

[...]
# reminder addition 3/8 ### ###
#------------------------
if (theKey == int(InputTypes.KB_R) and self.bShift):
if ( self.bCtrl and self.bAlt ): # Ctrl + Alt + Shift + R deletes the last shown reminder
if self.reminders[self.iRemInd]:
popup = PyPopup.PyPopup()
popup.setHeaderString("Reminder %s deleted:" % self.iRemInd)
popup.setBodyString(self.reminders[self.iRemInd][1])
popup.launch()
del self.reminders[self.iRemInd]
self.iRemInd -= 1
elif ( self.bAlt ): # Alt + Shift + R shows one reminder
iLen = len(self.reminders)
if iLen:
self.iRemInd += 1
if self.iRemInd >= iLen:
self.iRemInd = 0
iTurn = game.getGameTurn()
iPlayer = game.getActivePlayer()
message = "Reminder " + str(self.iRemInd) + ": "
message = message + "(" + str(self.reminders[self.iRemInd][0]-iTurn) + ")"
message = message + self.reminders[self.iRemInd][1]
CyInterface().addMessage(iPlayer, True, 30, message, '', 0, None, ColorTypes(11), 0, 0, False, False)
elif ( self.bCtrl ): # Ctrl + Shift + R shows all pending reminders
iLen = len(self.reminders)
iTurn = gc.getGame().getGameTurn()
popup = PyPopup.PyPopup()
popup.setHeaderString("%s Reminders:" % iLen)
sPR = "--- "
for i in range(iLen):
sPR = sPR + "(" + str(self.reminders[0]-iTurn) + ")" + self.reminders[1] + " --- "
popup.setBodyString(sPR)
popup.launch()
else: # Shift + R creates a reminder
self.beginEvent(CvUtil.EventReminder)
return 1
#------------------------





def onPreSave(self, argsList):

[...]
# reminder addition 4/8 ### ###
#-------------------------
cyPlayer = gc.getPlayer(cyGame.getActivePlayer())
reminderData = pickle.dumps(self.reminders)
cyPlayer.setScriptData(reminderData)
#-------------------------




def onLoadGame(self, argsList):

[...]
# reminder addition 5/8 ### ###
#-------------------------
cyPlayer = gc.getPlayer(cyGame.getActivePlayer())
reminderData = cyPlayer.getScriptData()
self.reminders = pickle.loads(reminderData)
self.iRemInd = -1
#-------------------------
return 0




def onGameStart(self, argsList):

[...]
# reminder addition 6/8 ### ###
#-------------------------
ireminders = len(self.reminders)
while ireminders:
ireminders -= 1
del self.reminders[ireminders]
self.iRemInd = -1
#-------------------------




def onEndPlayerTurn(self, argsList):

[...]
# reminder addition 7/8 ### ###
#-------------------------
if (gc.getPlayer(iPlayer).isHuman()):
thisTurn = gc.getGame().getGameTurn() + 1
ireminders = len(self.reminders)
while ireminders:
ireminders -= 1
if (self.reminders[ireminders][0] == thisTurn):
message = self.reminders[ireminders][1]
CyInterface().addMessage(iPlayer, True, 30, message, 'AS2D_ALARM', 0, None, ColorTypes(11), 0, 0, False, False)
if self.reminders[ireminders][2]: # cyclic?
self.reminders[ireminders][0] += self.reminders[ireminders][2] # reminderTurn
iStartPosition = message.find(" ") + 1 # find delimiter
self.reminders[ireminders][1] = "#" + str(self.reminders[ireminders][0]) + " " + message[iStartPosition:]
else:
del self.reminders[ireminders]
#-------------------------




#################### TRIGGERED EVENTS ##################

[...]
# reminder addition 8/8 ### ###
#------------------------
def __eventReminderBegin(self, argsList):
popup = PyPopup.PyPopup(CvUtil.EventReminder, EventContextTypes.EVENTCONTEXT_ALL)
popup.setHeaderString("Enter number of turns until reminder goes off and reminder text")
popup.createSpinBox(0, "", 0, 1, 100, 0)
popup.createEditBox("", 1)
popup.launch()
def __eventReminderApply(self, playerID, userData, popupReturn):
deltaTurn = popupReturn.getSpinnerWidgetValue(0)
reminderTurn = gc.getGame().getGameTurn() + deltaTurn
reminderText = popupReturn.getEditBoxString(1)
reminderCycle = 0
prefix = ""
if reminderText[0] == 'C':
reminderCycle = deltaTurn
prefix = "C" + str(deltaTurn)
newEntry = [ reminderTurn, "#" + str(reminderTurn) + " " + prefix + reminderText, reminderCycle ]
self.reminders.append(newEntry)
#------------------------


Code:
[/B]
[B]
class CvEventManager:
   def __init__(self):
# reminder addition 1/8   ###   ###
#------------------------
       self.reminders = []
       self.iRemInd = 0
#------------------------

[...]
       ################## Events List ###############################
       self.Events={

[...]
# reminder addition 2/8   ###   ###
#------------------------
           CvUtil.EventReminder : ('Reminder', self.__eventReminderApply, self.__eventReminderBegin),
#------------------------
       } 




#################### ON EVENTS ######################
   def onKbdEvent(self, argsList):

[...]
       if ( eventType == self.EventKeyDown ):

[...]
# reminder addition 3/8   ###   ###
#------------------------
               if (theKey == int(InputTypes.KB_R) and self.bShift):
                   if ( self.bCtrl and self.bAlt ):       # Ctrl + Alt + Shift + R deletes the last shown reminder
                       if self.reminders[self.iRemInd]:
                           popup = PyPopup.PyPopup()
                           popup.setHeaderString("Reminder %s deleted:" % self.iRemInd)
                           popup.setBodyString(self.reminders[self.iRemInd][1])
                           popup.launch()
                           del self.reminders[self.iRemInd]
                           self.iRemInd -= 1
                   elif ( self.bAlt ):               # Alt + Shift + R shows one reminder
                       iLen = len(self.reminders)
                       if iLen:
                           self.iRemInd += 1
                           if self.iRemInd >= iLen:
                               self.iRemInd = 0
                           iTurn = game.getGameTurn()
                           iPlayer = game.getActivePlayer()
                           message = "Reminder " + str(self.iRemInd) + ": "
                           message = message + "(" + str(self.reminders[self.iRemInd][0]-iTurn) + ")"
                           message = message + self.reminders[self.iRemInd][1]
                           CyInterface().addMessage(iPlayer, True, 30, message, '', 0, None, ColorTypes(11), 0, 0, False, False)
                   elif ( self.bCtrl ):               # Ctrl + Shift + R shows all pending reminders
                       iLen = len(self.reminders)
                       iTurn = gc.getGame().getGameTurn()
                       popup = PyPopup.PyPopup()
                       popup.setHeaderString("%s Reminders:" % iLen)
                       sPR = "--- "
                       for i in range(iLen):
                           sPR = sPR + "(" + str(self.reminders[i][0]-iTurn) + ")" + self.reminders[i][1] + " --- "
                       popup.setBodyString(sPR)
                       popup.launch()
                   else:                       # Shift + R creates a reminder
                       self.beginEvent(CvUtil.EventReminder)
                   return 1
#------------------------




   def onPreSave(self, argsList):

[...]
# reminder addition 4/8   ###   ###
#-------------------------
       cyPlayer = gc.getPlayer(cyGame.getActivePlayer())
       reminderData = pickle.dumps(self.reminders)
       cyPlayer.setScriptData(reminderData)
#-------------------------




   def onLoadGame(self, argsList):

[...]
# reminder addition 5/8   ###   ###
#-------------------------
       cyPlayer = gc.getPlayer(cyGame.getActivePlayer())
       reminderData = cyPlayer.getScriptData()
       self.reminders = pickle.loads(reminderData)
       self.iRemInd = -1
#-------------------------
       return 0




   def onGameStart(self, argsList):

[...]
# reminder addition 6/8   ###   ###
#-------------------------
       ireminders = len(self.reminders)
       while ireminders:
           ireminders -= 1
           del self.reminders[ireminders]
       self.iRemInd = -1
#-------------------------




   def onEndPlayerTurn(self, argsList):

[...]
# reminder addition 7/8   ###   ###
#-------------------------
       if (gc.getPlayer(iPlayer).isHuman()):
           thisTurn = gc.getGame().getGameTurn() + 1
           ireminders = len(self.reminders)
           while ireminders:
               ireminders -= 1
               if (self.reminders[ireminders][0] == thisTurn):
                   message = self.reminders[ireminders][1]
                   CyInterface().addMessage(iPlayer, True, 30, message, 'AS2D_ALARM', 0, None, ColorTypes(11), 0, 0, False, False)
                   if self.reminders[ireminders][2]:   # cyclic?
                       self.reminders[ireminders][0] += self.reminders[ireminders][2]   # reminderTurn
                       iStartPosition = message.find(" ") + 1                           # find delimiter
                       self.reminders[ireminders][1] = "#" + str(self.reminders[ireminders][0]) + " " + message[iStartPosition:]
                   else:
                       del self.reminders[ireminders]
#-------------------------




#################### TRIGGERED EVENTS ##################

[...]
# reminder addition 8/8   ###   ###
#------------------------
   def __eventReminderBegin(self, argsList):
       popup = PyPopup.PyPopup(CvUtil.EventReminder, EventContextTypes.EVENTCONTEXT_ALL)
       popup.setHeaderString("Enter number of turns until reminder goes off and reminder text")
       popup.createSpinBox(0, "", 0, 1, 100, 0)
       popup.createEditBox("", 1)
       popup.launch()
   def __eventReminderApply(self, playerID, userData, popupReturn):
       deltaTurn = popupReturn.getSpinnerWidgetValue(0)
       reminderTurn = gc.getGame().getGameTurn() + deltaTurn
       reminderText = popupReturn.getEditBoxString(1)
       reminderCycle = 0
       prefix = ""
       if reminderText[0] == 'C':
           reminderCycle = deltaTurn
           prefix = "C" + str(deltaTurn)
       newEntry = [ reminderTurn, "#" + str(reminderTurn) + " " + prefix + reminderText, reminderCycle ]
       self.reminders.append(newEntry)
#------------------------
 
Thank you. I had a look but there don't seem to be any .py files in the civ6 folder. Is this only for civ4 or also possible in civ6? And do you have an idea by any chance if such a thing can work for Crusader Kings 2, it also uses lua. For civ6 a reminder system would be great, but for CK2 it'd be an absolute godsend.
 
On the base of copying some text in one file and paste it into another this works only for civ4. As you found out, civ6 uses Lua. So the whole thing has to be ported (or written new). The idea was to showcase structures & elements. It is a bit like cooking: if you can cook chicken & rabbit, you can try cooking fish - it is similar ... but if you struggle with the concept of cooking at all, hmmh. You would need a lot of time & willingness to learn. For a start you could search in the forum for civ6 Lua objects and what those have to do with events & methods or look into the details of a mod as small as possible & containing a *.lua file.

With respect to Crusader Kings 2 I have no idea at all, but want to suggest you look and/or ask in the appropriate forums whether you can define own events and which methods are available via the CK2 Lua API (application programming interface).

.
 
How do you do this? One thing that happens to me more often than I'd like is thinking "I need to do X in 5 turns." "I need to do X in 4 turns." I need to do X in 3 turns." and then "Why haven't I still done X when I was supposed to do it 10 turns ago??!?"

The Concise UI Mod in Steam has a note taking module you can leave reminders. It won’t remind you automatically though. If you just need that, you can erase everything other module in the mod and use that. Go to the Workshop File where Mods are downloaded from Steam, find the mod 1671978687, select the Modules File.
 
  • Like
Reactions: cvb
Please make us something like that for civ6 soon :)
You know, I would dislike it, if every incoming patch & expansion would innocently, but still inexorable smash my modifications to pieces. So I surely won't start modding anytime like "soon".
I also play CIV since a really long time. If I had started playing civ6 3 years ago, I might be even be burned out before the development cycle ends ... whenever this will be ... :D ... "Que será, será Whatever will be, will be The future's not ours to see".

To keep the desire fresh (or the powder dry) I haven't even started PLAYING. Just like to read the fora, watch some gameplay videos & look into code fragments which are available in mods - here, not STEAM
The Concise UI Mod in Steam has a note taking module you can leave reminders. It won’t remind you automatically though.
That is great.
尤's Workshop: Concise UI: In-Game Notes: Adds a notebook. Left-Click Edit, Right-Click Delete.
already contains very probably half the work. Its purpose is now a bit different (I often just inserted a one digit turn number & the first 3 letters of a city's name), but a very good base:
Additionally the turn number delta must be entered when creating the note / reminder and administered. On civ6 Events.LocalPlayerTurnBegin or Events.LocalPlayerTurnEnd the current turnnumber has to be compared with the stored and if appropriate the reminder pop up.

.
 
Firstly, to say there's one way to win is ridiclous. There are many possible approaches that is what makes the game so rich.
Secondly, play at a level above where you are at the moment but not so high you're getting a hiding. You won't get better by winning on an easier level or getting thrashed at too high a level.
Thirdly, don't give up at the slightest setback nor carry on despite obviously unsurmountable odds.
Fourthly, and this is true in life in general, learn from your mistakes.
Fifthly, get inside the intricacies of the game by using the civliopedia, forums like this and other online guides to the game that explain how it works.
Sixthly, don't make silly errors (eg. forgetting to review policies whenever you can free of charge).

That's just a few general tips. I suppose one specific one for the early game is chase down barbarian scouts before they get back to their camp.

I play and win regularly on immortal and have won numerous times on deity but that is much trickier. My son is just as good a player as me but plays the game completely differently which just shows there's no one strategy to win!
 
I'm still learning to get better myself, but one discrete jump in my play came from learning Barb scout behavior, and how best to anticipate / wall off their movements
 
Top Bottom