PDA

View Full Version : Cod4 - a few ideas i need confirming



Uk_ViiPeR
2nd December 2014, 16:04
Hello, i'm new here but i've had a minor scripting background with call of duty 4, I was wondering if you would help me with a few things i get stuck on?

I've been creating a mod for cod4 for awhile now and I want to expand on my scripting knowledge, i was wondering if the following are possible and how I would tackle them. I don't need spoon feeding; just help pointing in the right direction, as I do want to learn how these work correctly.

1. Is it possible to write to a file (with or without developer) a series of scripts and read them from another script? for example, write from in-game to a gsc in the mod.ff (or iwd etc..)

Ive tried openfile() but as far as i'm aware it can only print text, not write a script. is there an alternative method?

2. how would you create a similar function which uses a dvar like ui_promotion to open a popup menu once the game has ended? i'm trying to do the same but having no luck using level.hasEnded and such.

If you could help me with those i'm greatly appreciated! :)

Mitch
2nd December 2014, 16:31
1. Is it possible to write to a file (with or without developer) a series of scripts and read them from another script? for example, write from in-game to a gsc in the mod.ff (or iwd etc..)

Ive tried openfile() but as far as i'm aware it can only print text, not write a script. is there an alternative method?


With libcod you can call the OS version of openfile (fopen, fwrite). Or depending on what you wanna use it for. You could use mysql to store your player's stats.

To execute a command under your system. You can use this (libcod):


status = system( "ls" );


https://github.com/kungfooman/libcod
Function documentation: http://killtube.org/showthread.php?1869-Script-documentation
Support forum: http://killtube.org/forumdisplay.php?44-libcod

Uk_ViiPeR
2nd December 2014, 16:49
With libcod you can call the OS version of openfile (fopen, fwrite). Or depending on what you wanna use it for. You could use mysql to store your player's stats.

To execute a command under your system. You can use this (libcod):


status = system( "ls" );


https://github.com/kungfooman/libcod
Function documentation: http://killtube.org/showthread.php?1869-Script-documentation
Support forum: http://killtube.org/forumdisplay.php?44-libcod

Okay thank you very much! i'll give it a shot :)

Tally
2nd December 2014, 17:11
With libcod you can call the OS version of openfile (fopen, fwrite). Or depending on what you wanna use it for. You could use mysql to store your player's stats.

To execute a command under your system. You can use this (libcod):


status = system( "ls" );


https://github.com/kungfooman/libcod
Function documentation: http://killtube.org/showthread.php?1869-Script-documentation
Support forum: http://killtube.org/forumdisplay.php?44-libcod

You don't need libcod to store a player's stats in COD4 as it already has a built-in method. That is why there is ranking in COD4.

Tally
2nd December 2014, 17:18
Hello, i'm new here but i've had a minor scripting background with call of duty 4, I was wondering if you would help me with a few things i get stuck on?

I've been creating a mod for cod4 for awhile now and I want to expand on my scripting knowledge, i was wondering if the following are possible and how I would tackle them. I don't need spoon feeding; just help pointing in the right direction, as I do want to learn how these work correctly.

1. Is it possible to write to a file (with or without developer) a series of scripts and read them from another script? for example, write from in-game to a gsc in the mod.ff (or iwd etc..)

Ive tried openfile() but as far as i'm aware it can only print text, not write a script. is there an alternative method?

2. how would you create a similar function which uses a dvar like ui_promotion to open a popup menu once the game has ended? i'm trying to do the same but having no luck using level.hasEnded and such.

If you could help me with those i'm greatly appreciated! :)

1. All the file functions work in COD4, only you have to run your server in developer mode, and as such you can't run a dedicated server in that mode. However, I would suggest you tell us what it is you are trying to write to files, as COD4 has a built-in function that writes numerical data to client-side files (named "mpdata"). Modders throughout the COD4 community have been using numbers and then converting those numbers to other functions/data sets. You simply have to use your imagination to do it.

2. To open a menu at the end of the game, just use the endGame() function (maps\mp\gametypes\_globallogic.gsc). Just set the client dvar "g_scriptMainMenu" to the name of the popup you want to open, and that menu will open automatically (just as it does in stock COD4 when it opens the end-of-game menu).

3. Custom string tables - these work like ordinary string tables:

1. you must run your server in online/rankedmatch mode:


level.rankedMatch = ( level.onlineGame && getDvarInt( "sv_pure" ) );
/#
if ( getdvarint( "scr_forcerankedmatch" ) == 1 )
level.rankedMatch = true;
#/


If your mod is based on modwarfare, you need to change that line of code in modwarfare's version of _globallogic.gsc as it turns off the read/write status of the setStat/getStat functions.

2. Create your custom string table and compile it into fastfile - NB: COD4 will not read string tables in RAW format. They must be compiled into fastfile. So, add it to your mod.CSV file:


stringtable,mp/nameoftable.csv

3. The way the string table function works is like this:


TableLookup( <filename>, <search column num>, <search value>, <return value column num> )

1. <filename> - the first argument is the name of the file to search through
2. <search column num> - next is the column to search through (the column numbering starts at 0 )
3. <search value> - then is the thing that it is trying to find (in this case it is passed to the method as a parameter)
4. <return value column num> - finally is the column number of the thing to return on the same row as the thing you want to find is located

It is a very powerful and flexible system. You can read practically any data set as long as you are imaginative to do it. I have created string tables to spawn models and even weapons.

If you want to give me any concrete examples of what it is you want to write/read I'm pretty sure I can help you solve any problems for you.

Uk_ViiPeR
2nd December 2014, 17:46
1. All the file functions work in COD4, only you have to run your server in developer mode, and as such you can't run a dedicated server in that mode. However, I would suggest you tell us what it is you are trying to write to files, as COD4 has a built-in function that writes numerical data to client-side files (named "mpdata"). Modders throughout the COD4 community have been using numbers and then converting those numbers to other functions/data sets. You simply have to use your imagination to do it.

2. To open a menu at the end of the game, just use the endGame() function (maps\mp\gametypes\_globallogic.gsc). Just set the client dvar "g_scriptMainMenu" to the name of the popup you want to open, and that menu will open automatically (just as it does in stock COD4 when it opens the end-of-game menu).

3. Custom string tables - these work like ordinary string tables:

1. you must run your server in online/rankedmatch mode:


level.rankedMatch = ( level.onlineGame && getDvarInt( "sv_pure" ) );
/#
if ( getdvarint( "scr_forcerankedmatch" ) == 1 )
level.rankedMatch = true;
#/


If your mod is based on modwarfare, you need to change that line of code in modwarfare's version of _globallogic.gsc as it turns off the read/write status of the setStat/getStat functions.

2. Create your custom string table and compile it into fastfile - NB: COD4 will not read string tables in RAW format. They must be compiled into fastfile. So, add it to your mod.CSV file:


stringtable,mp/nameoftable.csv

3. The way the string table function works is like this:


TableLookup( <filename>, <search column num>, <search value>, <return value column num> )

1. <filename> - the first argument is the name of the file to search through
2. <search column num> - next is the column to search through (the column numbering starts at 0 )
3. <search value> - then is the thing that it is trying to find (in this case it is passed to the method as a parameter)
4. <return value column num> - finally is the column number of the thing to return on the same row as the thing you want to find is located

It is a very powerful and flexible system. You can read practically any data set as long as you are imaginative to do it. I have created string tables to spawn models and even weapons.

If you want to give me any concrete examples of what it is you want to write/read I'm pretty sure I can help you solve any problems for you.

You sir are amazing! thank you so much! this is exactly what I was looking for!

For the string tables though, once I create the file it should look like this if i'm correct?


5256,string_here

and to read the string i would use tableLookUp like the following:


TableLookup( "mp/custom.csv", 1, string_here, 0 ) //or is string_here meant to be 5256?

Thank you once again for pointing me in the right direction :)

Tally
2nd December 2014, 17:58
You sir are amazing! thank you so much! this is exactly what I was looking for!

For the string tables though, once I create the file it should look like this if i'm correct?


5256,string_here

and to read the string i would use tableLookUp like the following:


TableLookup( "mp/custom.csv", 1, string_here, 0 ) //or is string_here meant to be 5256?

Thank you once again for pointing me in the right direction :)

Yes, that looks correct. The use of "string_here" is simply so you can remember it. Personally, most of the time I never use it. I simply remember the stat number I want to use and use the number instead. Example:


self setStat( 3152, level.configedit + 1 );

I know what stat 3152 does, and so I don't need a string name to remember it. So, if you can remember which numbers are which, you don't really need a custom string table. It is just for mods which use a hell of a lot of different numbers and can get confusing.

However, let's assume you really need to use a custom string table, you also need a custom function to read/write it, since otherwise, the stock ones wont work, as they specify certain string tables. In that case, create custom functions to read or write your data:


statGetCustom( dataName )
{
return self getStat( int(tableLookup( "mp/customStatsTable.csv", 1, dataName, 0 )) );
}

statSetCustom( dataName, value )
{
self setStat( int(tableLookup( "mp/customStatsTable.csv", 1, dataName, 0 )), value );
}


You can place those functions anywhere in your mod, and simply call them when needed. They work exactly like the stock versions in maps\mp\gametypes\_persistence.gsc but now you have named your custom table instead of the stock playerStatsTable.csv.

Uk_ViiPeR
2nd December 2014, 18:19
Yes, that looks correct. The use of "string_here" is simply so you can remember it. Personally, most of the time I never use it. I simply remember the stat number I want to use and use the number instead. Example:


self setStat( 3152, level.configedit + 1 );

I know what stat 3152 does, and so I don't need a string name to remember it. So, if you can remember which numbers are which, you don't really need a custom string table. It is just for mods which use a hell of a lot of different numbers and can get confusing.

However, let's assume you really need to use a custom string table, you also need a custom function to read/write it, since otherwise, the stock ones wont work, as they specify certain string tables. In that case, create custom functions to read or write your data:


statGetCustom( dataName )
{
return self getStat( int(tableLookup( "mp/customStatsTable.csv", 1, dataName, 0 )) );
}

statSetCustom( dataName, value )
{
self setStat( int(tableLookup( "mp/customStatsTable.csv", 1, dataName, 0 )), value );
}


You can place those functions anywhere in your mod, and simply call them when needed. They work exactly like the stock versions in maps\mp\gametypes\_persistence.gsc but now you have named your custom table instead of the stock playerStatsTable.csv.

Okay i understand that perfectly thank you! one more thing if you don't mind, how would you use the getGUID() function properly? or even easier use "level.name" to log their name. i want to add a script where it logs a "cheater", stores the data in a string table and read it from the string table to detect them if they reconnect. a bit like the tempBan commands.

Tally
2nd December 2014, 18:38
1. The getGUID() function only works on a dedicated server, so you can't test it on a local/listen server. It is a script function, run from a .GSC file, and the syntax is:


player getGUID();

2. level.name would return the same name for any player. It is a SP function which denotes the human being playing as opposed to the AI entities. In MP, always use "self.name" or "player.name" once you've identified who the player is.

3. To ban cheaters from your server, you don't need anything other than the setStat()/getStat() functions in COD4 - simply appoint a stat number to cheaters. For example, let's use one of the available ones: 3175. This is now your cheater identifier. So, when you spot a cheater, and you have an admin menu (this may be something else you need) which allows you to set a player flag on a cheater, you simply get his entity number and set the stat on them:


{
mycheaterID = some method to determine the cheater - probably run from an admin menu/panel
for( i=0; i < level.players.size; i++ )
{
player = level.players[i];

cheaterID = player getEntityNumber();
if( cheaterID == mycheaterID )
player setStat( 3175, 1 );
}
}


onPlayerConnect()
{
for( ;; )
{
level waittill( "connected", player );

cheater = player getStat( 3175 );
if( cheater > 0 )
{
kick( player getEntityNumber() );
}

}

}


That puts a value in the cheater stat and checks for it whenever a player connects. If it finds a value higher than 0, it boots them.

Uk_ViiPeR
2nd December 2014, 18:44
1. The getGUID() function only works on a dedicated server, so you can't test it on a local/listen server. It is a script function, run from a .GSC file, and the syntax is:


player getGUID();

2. level.name would return the same name for any player. It is a SP function which denotes the human being playing as opposed to the AI entities. In MP, always use "self.name" or "player.name" once you've identified who the player is.

3. To ban cheaters from your server, you don't need anything other than the setStat()/getStat() functions in COD4 - simply appoint a stat number to cheaters. For example, let's use one of the available ones: 3175. This is now your cheater identifier. So, when you spot a cheater, and you have an admin menu (this may be something else you need) which allows you to set a player flag on a cheater, you simply get his entity number and set the stat on them:


{
mycheaterID = some method to determine the cheater - probably run from an admin menu/panel
for( i=0; i < level.players.size; i++ )
{
player = level.players[i];

cheaterID = player getEntityNumber();
if( cheaterID == mycheaterID )
player setStat( 3175, 1 );
}
}


onPlayerConnect()
{
for( ;; )
{
level waittill( "connected", player );

cheater = player getStat( 3175 );
if( cheater > 0 )
{
kick( player getEntityNumber() );
}

}

}


That puts a value in the cheater stat and checks for it whenever a player connects. If it finds a value higher than 0, it boots them.

Thank you so much! it was easier than i thought it would be when i kept trial and erroring different stuff but at least you can confirm this all works. Thank you for everything! :)

ps. do you know any available stat numbers for world at war? or are they the same as cod4?

Tally
2nd December 2014, 21:14
The free stat numbers for WaW are the same as for COD4. These are all of them:


3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497

Uk_ViiPeR
6th February 2015, 02:12
The free stat numbers for WaW are the same as for COD4. These are all of them:


3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497


Hello again, I was wondering if there was a way to grab a stat value and assign it to a dvars value through the UI (.menu files). ive tried doing all of the following but no luck :/


stat( dvarInt( mc_tokens ) + 3175 )

statSetOnDvarStringValue( mc_tokens, 3175 )

Theres also a few statget functions that i tried also. (this is for waw zombies just in-case the functions may be different compared to multiplayer)


Any help would be greatly appreciated :)

Tally
6th February 2015, 09:41
Those values don't match: you are getting a stat for dvarInt( mc_tokens) + 3175; but you are trying to set the stat number 3175 when a dvar (mc_tokens) has a string value. In other words - mc_tokens is both a stat number and a string. Hence why it wont work. So, it looks to me like you are confused about what mc_tokens is - an integer or a string. So, here are 2 possible solutions:

1. If you are trying to set a stat when a certain dvarstring matches a certain string value, you need only put in the string value for mc_tokens:


#define stringvalue (dvarstring( mc_tokens ) == <return_certain_string_value>)
statSetOnDvarStringValue( mc_tokens, stringvalue, 3175, 1 );


statSetOnDvarStringValue is in 4 parts; 1 = the dvarstring; 2 = the string value when to set the stat number; 3 = the stat number to set; 4 = the amount to set the stat number to.

2. If you are trying to set a stat when the dvar is an integer value:


#define dvarvalue (dvarbool( mc_tokens ) == <return_certain_int_value>)
statsetusingtable( 3175, dvarvalue );


statsetusingtable is in 2 parts: 1 = the stat number to set; 2 = the stat value to set. It is the UI engine's version of setStat(). The reason it has "table" in its name is because you can get the stat value to set to from a table by using tableLookup().

Uk_ViiPeR
6th February 2015, 12:41
Those values don't match: you are getting a stat for dvarInt( mc_tokens) + 3175; but you are trying to set the stat number 3175 when a dvar (mc_tokens) has a string value. In other words - mc_tokens is both a stat number and a string. Hence why it wont work. So, it looks to me like you are confused about what mc_tokens is - an integer or a string. So, here are 2 possible solutions:

1. If you are trying to set a stat when a certain dvarstring matches a certain string value, you need only put in the string value for mc_tokens:


#define stringvalue (dvarstring( mc_tokens ) == <return_certain_string_value>)
statSetOnDvarStringValue( mc_tokens, stringvalue, 3175, 1 );


statSetOnDvarStringValue is in 4 parts; 1 = the dvarstring; 2 = the string value when to set the stat number; 3 = the stat number to set; 4 = the amount to set the stat number to.

2. If you are trying to set a stat when the dvar is an integer value:


#define dvarvalue (dvarbool( mc_tokens ) == <return_certain_int_value>)
statsetusingtable( 3175, dvarvalue );


statsetusingtable is in 2 parts: 1 = the stat number to set; 2 = the stat value to set. It is the UI engine's version of setStat(). The reason it has "table" in its name is because you can get the stat value to set to from a table by using tableLookup().

Okay thank you very much, ill try this to see if it works and ill get back to you on the results shortly :)

Uk_ViiPeR
7th February 2015, 13:16
Those values don't match: you are getting a stat for dvarInt( mc_tokens) + 3175; but you are trying to set the stat number 3175 when a dvar (mc_tokens) has a string value. In other words - mc_tokens is both a stat number and a string. Hence why it wont work. So, it looks to me like you are confused about what mc_tokens is - an integer or a string. So, here are 2 possible solutions:

1. If you are trying to set a stat when a certain dvarstring matches a certain string value, you need only put in the string value for mc_tokens:


#define stringvalue (dvarstring( mc_tokens ) == <return_certain_string_value>)
statSetOnDvarStringValue( mc_tokens, stringvalue, 3175, 1 );


statSetOnDvarStringValue is in 4 parts; 1 = the dvarstring; 2 = the string value when to set the stat number; 3 = the stat number to set; 4 = the amount to set the stat number to.

2. If you are trying to set a stat when the dvar is an integer value:


#define dvarvalue (dvarbool( mc_tokens ) == <return_certain_int_value>)
statsetusingtable( 3175, dvarvalue );


statsetusingtable is in 2 parts: 1 = the stat number to set; 2 = the stat value to set. It is the UI engine's version of setStat(). The reason it has "table" in its name is because you can get the stat value to set to from a table by using tableLookup().

Thank you i got it to work in the end :) i was also wondering if it was possible to save custom dvars to either the savegame.svg or add them to your profile (gamerprofile_updategamerprofileFromDvars, updategamerprofile for short) so that they can load the dvars once and retrieve the correct values?

also is it somehow possible (for coop zombies) to have some sort of way to update a dvar from a external hosted server? (e.g. a hosting website) just like the server.cfg files for cod4, but for zombies? :)

Thank you for everything btw, it means a lot :)

Tally
8th February 2015, 10:27
Thank you i got it to work in the end :) i was also wondering if it was possible to save custom dvars to either the savegame.svg or add them to your profile (gamerprofile_updategamerprofileFromDvars, updategamerprofile for short) so that they can load the dvars once and retrieve the correct values?

also is it somehow possible (for coop zombies) to have some sort of way to update a dvar from a external hosted server? (e.g. a hosting website) just like the server.cfg files for cod4, but for zombies? :)

Thank you for everything btw, it means a lot :)

1. your game profile file will only load/save stock dvars. You cannot use it to store custom dvars. The only way to do that is to use the mpdata file and store your dvar settings there by using the setStat() function, then retrieve them when the player comes back to the map.

2. I have no idea if you can link a zombie map with an external server. Tom BMX is probably the best person to ask about that one. I have little experience with the whole zombie thing as it isn't my bag.

Uk_ViiPeR
17th June 2015, 21:02
1. your game profile file will only load/save stock dvars. You cannot use it to store custom dvars. The only way to do that is to use the mpdata file and store your dvar settings there by using the setStat() function, then retrieve them when the player comes back to the map.

2. I have no idea if you can link a zombie map with an external server. Tom BMX is probably the best person to ask about that one. I have little experience with the whole zombie thing as it isn't my bag.

Hey man, I was wondering if it was possible to compile a fast file with a different prefix and allow it to work with the rest of the fast files (e.g. mod.ff and map.ff _load.ff). I tried messing around with the linker_pc.exe to see what i can come up with but all it seems to do is compile with the exact filename it was saved as in the assetlist folder (custom.csv) i know it works like that and there's more too it but I cant seem to get my head around it. i've tried the following so far...


linker_pc.exe -nopause -language english custom_update //moddir or not

//thats the prefix i wanted, but the file name was custom. so it compiles has custom even though I put the prefix.
even if i named it custom_update how would i be able to allow the fast file to load with the game? I want to be able to do what the mod.ff exactly does, but for different rawfiles.


if that's however not possible then is it possible to load rawfile's through a _load fast file and work without the updated map.ff fast file?

It would be greatly appreciated if you could help point me in the right direction :)