Kaiju Mod?

AbuHab

Warlord
Joined
Feb 22, 2004
Messages
201
Does anybody know if there's a Civ IV mod that adds giant rampaging monsters similar to Godzilla, King Kong, Rodan, Mothra, etc.?
 
Not that I know off. But FFH has dragons. Does that count?
 
Not that I know off. But FFH has dragons. Does that count?

FFH?

EDIT: Oh, Fall From Heaven? That's cool. Are there any mods that give a more generic Civ4 experience but that also include giant rampaging monsters?
 
Last edited:
Not that I know of.
 
This is functionally the same as the barbarian uprising events. I just modified some a bit of "CvRandomEventInterface.py" that I already had done up, which spawns either "Godzilla" in the ocean in the modern era, or a "Dragon" on land in the medieval era:

Spoiler :

Code:
#####    Kaiju spawn    #####
def canTriggerRebels1(argsList):

    kTriggeredData = argsList[0]
    player = gc.getPlayer(kTriggeredData.ePlayer)
    
#   If Barbarians are disabled in this game, this event will not occur.
    if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_NO_BARBARIANS):
        return false
        
#    At least one civ on the board must know "Fission"
  bFoundValid = False
  iTech = GC.getInfoTypeForString("TECH_FISSION")
  for iPlayer in range(GC.getMAX_PC_PLAYERS()):
    loopPlayer = GC.getPlayer(iPlayer)
    if loopPlayer.isAlive():
      if GC.getTeam(loopPlayer.getTeam()).isHasTech(iTech):
        bFoundValid = True
        break

  if not bFoundValid:
    return False

#    Find an eligible plot
#    Plot will be unclaimed water, no units, next to border
  map = GC.getMap()
  for i in range(map.numPlots()):
    plot = map.plotByIndex(i)
    if (plot.getOwner() == -1 and plot.isWater() and not plot.isImpassable() and not plot.getNumUnits() > 0 and not plot.isLake() and plot.isAdjacentPlayer(kTriggeredData.ePlayer, True)):
      return True

  return False
 
 def getHelpKaiju1(argsList):
  iEvent = argsList[0]
  kTriggeredData = argsList[1]

  szHelp = TRNSLTR.getText("TXT_KEY_EVENT_KAIJU_HELP_1", ())

  return szHelp

def applyKaiju1(argsList):
  iEvent = argsList[0]
  kTriggeredData = argsList[1]
  pPlayer = GC.getPlayer(kTriggeredData.ePlayer)

  listPlots = []
  map = GC.getMap()
  for i in range(map.numPlots()):
    plot = map.plotByIndex(i)
    if (plot.getOwner() == -1 and plot.isWater() and not plot.isImpassable() and not plot.getNumUnits() > 0 and not plot.isLake() and plot.isAdjacentPlayer(kTriggeredData.ePlayer, True)):
      listPlots.append(i)

  if 0 == len(listPlots):
    return

  plot = map.plotByIndex(listPlots[CyGame().getSorenRandNum(len(listPlots), "Kaiju Event Location")])

  if map.getWorldSize() == GC.getInfoTypeForString("WORLDSIZE_DUEL"):
    iNumUnit1  = 1
  else:
    iNumUnit1  = 1
 
  iUnitType1 = GC.getInfoTypeForString("UNIT_GODZILLA")

  barbPlayer = GC.getPlayer(GC.getBARBARIAN_PLAYER())
  for i in range(iNumUnit1):
    barbPlayer.initUnit(iUnitType1, plot.getX(), plot.getY(), UnitAITypes.UNITAI_ATTACK_SEA, DirectionTypes.DIRECTION_SOUTH)

#####    Land DRAGON #####
    
#    DRAGON spawn
def canTriggerTerrorist1(argsList):

    kTriggeredData = argsList[0]
    player = gc.getPlayer(kTriggeredData.ePlayer)
    
#   If Barbarians are disabled in this game, this event will not occur.
    if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_NO_BARBARIANS):
        return false   
        
#    At least one civ on the board must know "Guilds"
  bFoundValid = False
  iTech = GC.getInfoTypeForString("TECH_GUILDS")
  for iPlayer in range(GC.getMAX_PC_PLAYERS()):
    loopPlayer = GC.getPlayer(iPlayer)
    if loopPlayer.isAlive():
      if GC.getTeam(loopPlayer.getTeam()).isHasTech(iTech):
        bFoundValid = True
        break

  if not bFoundValid:
    return False


#    Find an eligible plot
#    Plot will be land, not mountain, and no units or cities
    map = gc.getMap()   
    for i in range(map.numPlots()):
        plot = map.plotByIndex(i)
        if (plot.getOwner() == 0 and not plot.isWater() and not plot.isImpassable() and not plot.getNumUnits() > 0 and plot.area().getCitiesPerPlayer(kTriggeredData.ePlayer) > 0):
            return true

    return false
    
def getHelpDragon1(argsList):
    iEvent = argsList[0]
    kTriggeredData = argsList[1]
    
    szHelp = localText.getText("TXT_KEY_EVENT_DRAGON_HELP", ())   

    return szHelp


def applyDragon1(argsList):
    iEvent = argsList[0]
    kTriggeredData = argsList[1]
    player = gc.getPlayer(kTriggeredData.ePlayer)

    listPlots = []
    map = gc.getMap()   
    for i in range(map.numPlots()):
        plot = map.plotByIndex(i)
        if (plot.getOwner() == 0 and not plot.isWater() and not plot.isImpassable() and plot.area().getCitiesPerPlayer(kTriggeredData.ePlayer) > 0):
            listPlots.append(i)
    
    if 0 == len(listPlots):
        return
            
    plot = map.plotByIndex(listPlots[gc.getGame().getSorenRandNum(len(listPlots), "Dragon event location")])
    
    if map.getWorldSize() == CvUtil.findInfoTypeNum(gc.getWorldInfo, gc.getNumWorldInfos(), 'WORLDSIZE_DUEL'):
        iNumUnits  = 1
    else:
        iNumUnits  = 1
        
    iUnitType = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), 'UNIT_DRAGON')

    barbPlayer = gc.getPlayer(gc.getBARBARIAN_PLAYER())
    for i in range(iNumUnits):
        barbPlayer.initUnit(iUnitType, plot.getX(), plot.getY(), UnitAITypes.UNITAI_PILLAGE, DirectionTypes.DIRECTION_SOUTH)


This in "CvRandomEventInterface.py" plus much easier XML modding and adding unit graphics would basically get you what you want.
 
Back
Top Bottom