Jump to content
The Dark Mod Forums

Recommended Posts

Posted

Dear all,

Is there anyway we can maintain backwards compatibility in the scripting system?

In example, the below function was introduced in tdm_events.script in TDM 2.11:

scriptEvent void removeFrobPeer(entity peer);

Is there something such us the below or can you think of any other way?

if (funcExists("removeFrobPeer"))
{

}

Many thanks in advance.

TDM_Modpack_Thumb.png

Posted

Hum personally I don't think that exists, at lest for all functions, I could be wrong thou. 

But TDM, coming from Doom 3 should support

https://modwiki.dhewm3.org/HasFunction_(script_event)

but this is particular to script objects/entities and not to ask if some generic global script function exists anywhere and I don't really know how that would be implemented.

But couldn't script macros be used for that? Something like SDL does.

// based verbatin from SDL version define

#define TDM_VERSIONNUM(X, Y, Z)                     \
    ((X)*1000 + (Y)*100 + (Z))

#define TDM_COMPILEDVERSION \
    TDM_VERSIONNUM(TDM_MAJOR_VERSION, TDM_MINOR_VERSION, TDM_PATCHLEVEL)

#define TDM_VERSION_ATLEAST(X, Y, Z) \
    (TDM_COMPILEDVERSION >= TDM_VERSIONNUM(X, Y, Z))

#if TDM_VERSION_ATLEAST(2, 11, 0)
	// run this func only in TDM 2.11 or above
	func(){
		do stuff;
	}
#endif

Not totally sure if script language macro support is robust enough for this but it should be.

Posted

I can tell tell your idea would work, but I am unable to get the current version.

#define TDM_COMPILEDVERSION getTDMVersion()

returns zero and:

#define TDM_COMPILEDVERSION sys.getTDMVersion()

doesn't work: can't evaluate undefined macro 'sys', substituted with zero

TDM_Modpack_Thumb.png

Posted (edited)

Sorry my reply was a bit confusing, those macros aren't defined anywhere (thou you can define them yourself...), it was only a idea for the TDM team to implement if they wanted. Sorry for making you waste your time chacing nothing. 

TDM_MAJOR_VERSION, TDM_MINOR_VERSION and TDM_PATCHLEVEL (and the rest)  need to be defined/created by the TDM team, and made part of the standard game defines, you can define them yourself, but that would be useless to anyone else, because only you would have those defines in your copy of the game, so right now afaik there's no way to do what you want, unless the TDM team creates those or something like those macros. I hope this is more understandable. 

Edited by HMart
Posted

Hmm Licensee.h appears to have these defined ( from svn ) :

 
#define GAME_NAME "The Dark Mod" // appears on window titles and errors
 
// greebo: Defines the darkmod release version
#define TDM_VERSION_MAJOR 2
#define TDM_VERSION_MINOR 12
#define GAME_API_VERSION TDM_VERSION_MAJOR * 100 + TDM_VERSION_MINOR // e.g. 210

#define ENGINE_VERSION "TDM 2.12" // printed in console

https://github.com/stgatilov/darkmod_src/blob/40db9596fcbf4fa3da42b3d89be0bd785620d154/framework/Licensee.h

Does calling sys.getTDMVersion()  without any define return the correct value?

I am guessing if you wanna use this in a script you just:

float tdm_version_val = sys.getTDMVersion();

if ( tdm_version_val < 2.11 ) { something } ;

Please visit TDM's IndieDB site and help promote the mod:

 

http://www.indiedb.com/mods/the-dark-mod

 

(Yeah, shameless promotion... but traffic is traffic folks...)

Posted
32 minutes ago, nbohr1more said:

Does calling sys.getTDMVersion()  without any define return the correct value?

Yes, it returns the correct value: 210, 211...

33 minutes ago, nbohr1more said:

I am guessing if you wanna use this in a script you just:

float tdm_version_val = sys.getTDMVersion();

if ( tdm_version_val < 2.11 ) { something } ;

The problem is that something contains a function that didn't exist in previous versions, and TDM refuses to launch:

Error during initialization. Error: file script\X.script, line Y: Unknown value "removeFrobPeers"

HMart's method however, seems to be more indulgent and anything in between #if #endif gets a pass, according to my tests.

46 minutes ago, nbohr1more said:

Hmm Licensee.h appears to have these defined ( from svn ) :

#define GAME_NAME "The Dark Mod" // appears on window titles and errors
 
// greebo: Defines the darkmod release version
#define TDM_VERSION_MAJOR 2
#define TDM_VERSION_MINOR 12
#define GAME_API_VERSION TDM_VERSION_MAJOR * 100 + TDM_VERSION_MINOR // e.g. 210

#define ENGINE_VERSION "TDM 2.12" // printed in console

https://github.com/stgatilov/darkmod_src/blob/40db9596fcbf4fa3da42b3d89be0bd785620d154/framework/Licensee.h

I cannot retrieve the values of these identifiers in a script:

...

#define TDM_VERSION_ATLEAST(X) \
	(X >= TDM_VERSION_MINOR)

...

#if TDM_VERSION_ATLEAST(11)

...

#endif

...

 

TDM_Modpack_Thumb.png

Posted

Hmm...

Pretty hacky, but I wonder if you could use something like this?

 

float tdm_version_val = sys.getTDMVersion();

if ( tdm_version_val > 2.11 ) { 

string tempvalue = removeFrobPeers ;

tempvalue(entity peer) ;

} ;

 

Please visit TDM's IndieDB site and help promote the mod:

 

http://www.indiedb.com/mods/the-dark-mod

 

(Yeah, shameless promotion... but traffic is traffic folks...)

Posted

Hacky indeed!

if ( tdm_version_val > 211 ) { // no dot

string tempvalue = "removeFrobPeers" ; // quotes

tempvalue(entity peer) ;

} ; 

No joy, though:

Error during initialization. Error: file script\X.script, line Y: idTypeDef::FieldType: tried to get field type on non-field type

 

It is ok, I guess... Nobody apparently ever had a need for such backwards compatibility anyway, short or long term. Let's forget it. Forward it is!

Many thanks for the support.

TDM_Modpack_Thumb.png

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent Status Updates

    • The Black Arrow

      Well, this is just sad...I was not able to play any Thief or TDM whatsoever, why? Too busy the past 2 months, this month I'm not as busy BUT it's also very heaty in my place.
      I can't play Thief when it's not at least 15c or lower, the game demands to be played when it's cold for...Well, may sound stupid but I'll just say it, for that "immersion".
      It's kinda like playing Quake during Summer, which unless it's the Summer Jam mod, I don't think it's as fun.
      · 0 replies
    • STiFU

      Oh my gosh, I just realized, I will have my 20 year Dark Mod anniversary this year. 😮 I've literally spent half my life with The Dark Mod. That's crazy!!
      · 6 replies
    • Arcturus

      I need money. Anyone wanna hire a 3d artist?
      · 4 replies
    • Petike the Taffer

      The preliminary working titles for the missions in my now-in-development Partners in Crime series: 
      - Partners in Crime 1: A Mere Trinket
      - Partners in Crime 2: Beacon Burglary
      - Partners in Crime 3: In the Bleak Midwinter
      - Partners in Crime 4 (5 ?): Fishy Dealings
      - Partners in Crime 5 (4 ?): A Thief in the Night

      No title stealing, please.  In return, I promise to finish these. I do stress the preliminary part. Beyond the broad strokes storyline, plot, objectives, briefings and the (currently built) layouts of these FMs, I haven't fully decided about every single detail yet, including the exact order of the missions (4 and 5 might switch places, with the story adjusted accordingly). I want the overall plot to be plotted out a bit in advance and not suffer too much from inserting prequels later. I also prefer to let my FM building fill out part of the details naturally.

      Currently working on the second FM, and once I do enough work on the current prototype, I'll work on the first one, until I get that one released. Then complete the second one, get that one ready for release (hopefully) a few months later, and so on. I want most of the early missions to be fairly small and confined, and get a bit bigger as I grow more confident in my FM making skills.

      Though there is an overarching storyline to this series, the missions themselves are mostly episodic in nature. They factor into the character development of the two main characters I'll have in the series, but it's the kind of continuity where the mission's own plot and story wouldn't depend on it. 
      · 2 replies
    • SeriousToni

      Nice to see that ai_undressed_old_man_01 will be finally available in TDM ! 
      · 0 replies
×
×
  • Create New...