Jump to content

GTIMES.IDS issues


Recommended Posts

The current instance of GTIMES.IDS can cause some issues with mods which use timers. Several of the new entries can override the timing used by global and local timers in scripts. Take this script block for example:

 

IF
HaveSpell(WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
!GlobalTimerNotExpired("RR#CastSpells","LOCALS")
OR(2)
	!GlobalTimerNotExpired("RR#PFMW","LOCALS")
	SpellCastOnMe([ANYONE],WIZARD_BREACH)
THEN
RESPONSE #100
	SetGlobalTimer("RR#CastSpells","LOCALS",6)
	SetGlobalTimer("RR#PFMW","LOCALS",25)
	Spell(Myself,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
END

 

It's a fairly standard script block for re-casting Protection from Magical Weapons. Now, take a look at what happens when this script is compiled using the new GTIMES.IDS from the OBC modder pack component:

 

IF
HaveSpell(WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
!GlobalTimerNotExpired("RR#CastSpells","LOCALS")
OR(2)
	!GlobalTimerNotExpired("RR#PFMW","LOCALS")
	SpellCastOnMe([ANYONE],WIZARD_BREACH)
THEN
RESPONSE #100
	SetGlobalTimer("RR#CastSpells","LOCALS",ONE_ROUND)
	SetGlobalTimer("RR#PFMW","LOCALS",FIVE_MINUTES)
	Spell(Myself,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
END

 

As you can see, the 25 seconds have turned into five minutes because that is the numerical value which corresponds to the FIVE_MINUTES entry in the new GTIMES.IDS file. This can happen to any other entry which has been assigned a commonly used numerical value, so for example, timers which were set to 60 seconds will now compile at twelve minutes. I think this is one of the reasons why Bioware used very high values (7200 and above) for describing their entries in the original GTIMES.IDS. Therefore, my suggestion would be to raise the numbers corresponding to the new entries to higher values as well (perhaps in the 10000 range or so) in order to avoid messing up the pre-compiled timers.

Link to comment

Five minutes on the in-game compressed clock, which remains just over four rounds :) All of the entries in the pre-existing gtimes.ids refer to the game clock, not real-time days.

 

You could add ~25 A_TRILLION_YEARS~ to gtimes.ids and the script would act quite the same in game.

 

Not that I use these entries myself, but they'll never change how long a script timer runs.

Link to comment
Guest Guest

Hmm, after doing some more testing, I believe that you're indeed correct. It kind of freaked me out seeing FIVE_MINUTES instead of my 25 second though. Heh, I guess I've just been away from the BG2 modding scene for too long. :)

Link to comment

And we have muddied the waters on the Tutu end - the Beta 4 coming out identifies timers using GTIMES.IDS.

 

That means if you have The BG1 NPC Project installed, one of the values will show up in NI and DLTCEP as AJROM_TIMER...

 

and we wrote up a tutorial on how to do this, so if anyone reads it they will be adding to the confusion.

Link to comment

Yeah, GTIMES is all game time. 5 seconds of real time equals one game minute.

 

It shouldn't break anything, but I'd too suggest not bothering with the GTIMES update (just delete it from the override if you want). Who wants to deal with FIVE_MINUTES instead of 25? :)

Link to comment

One problem I had was that BG2 was using GTIMES for real-time timers, which was causing some label overlap. So I created RTIMES.IDS with real-time labels and had all real-time timer actions point to that instead.

Link to comment

Is the overlap something that is problematic? We have both RT and GT materials tied up with the exact same label - for instance, froma READLN,

OUTER_SPRINT ~dynatimer~ ~placeholder_value~
OUTER_WHILE (!(IS_AN_INT ~dynatimer~) OR (~dynatimer~ > 0x5) OR (~dynatimer~ < 0x1)) BEGIN
 PRINT @1108
 ACTION_READLN ~dynatimer~
END
  ACTION_IF ("dynatimer" = 1) THEN BEGIN
  APPEND ~gtimes.ids~ ~3600 DYROM_TIMER~
  PRINT @1109
  END
  ACTION_IF ("dynatimer" = 2) THEN BEGIN
  APPEND ~gtimes.ids~ ~2700 DYROM_TIMER~
  PRINT @1110
  END
  ACTION_IF ("dynatimer" = 3) THEN BEGIN
  APPEND ~gtimes.ids~ ~1800 DYROM_TIMER~
  PRINT @1111
  END
  ACTION_IF ("dynatimer" = 4) THEN BEGIN
  APPEND ~gtimes.ids~ ~900 DYROM_TIMER~
  PRINT @1112
  END
  ACTION_IF ("dynatimer" = 5) THEN BEGIN
  APPEND ~gtimes.ids~ ~5400 DYROM_TIMER~
  PRINT @1113
  END

and mixed into D files things like

RealSetGlobalTimer("X#MyRealTimer","GLOBAL",AJROM_TIMER)

and

SetGlobalTimer("X#MyGameTimer","GLOBAL",AJROM_TIMER)

Link to comment

The game only cares about the actual numbers; labels are for our benefit. A value of 60 in game time is a turn, or 10 rounds, or 12 game minutes, but 60 seconds or one minute in real time. I wanted meaningful labels so a seperate IDS made sense.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...