LucasForums (
-   JA Coding (
-   -   Increase MAX_WEAPONS (

XycaleTh 02-15-2009 06:38 AM

Before you say "you can't do that!", let me tell you my idea.

Now, as far as I can tell, MAX_WEAPONS is only used once in q_shared.h (and so only used this once between mod and engine), and that's for defining the size of the ammo array in playerState_s. If I instead set this to 19 (value of MAX_WEAPONS), I'm free to change MAX_WEAPONS.

To overcome the problem of the game referencing ammo[] with an index of greater than 18, I thought of using the low and high 16-bits of each index to store the amount of ammo, i.e. for a given array element, the lower 16 bits will hold the amount of ammo for one weapon, and the higher 16 bits for a second weapon.

I can replace all references to ammo[] with a function to correctly set/get the required ammo index. And then there's the problem of ps.stats[STAT_WEAPON] only being a 16-bit field (at least that's what it says in the code...). I can simply replace this with one of the userInts provided. There will still be a limited number of weapons I can have (32), but that should be more than enough.

Do these changes sound okay?

BobaFettUU 02-15-2009 08:12 AM

Well, if the ps.ammo[] fields are actually networked in a full 32 bit (which you can check by setting them to -1 and see what the client receives, then yes this is possible to do.

That is, of course, assuming that your mod has both a server and a client side.

XycaleTh 02-17-2009 03:40 AM

Well I've gone through with my idea and it seems to work fine! :) Here's how to do it:

In q_shared.h, change

int ammo[MAX_WEAPONS];

short ammo[38];
38 is MAX_WEAPONS * 2. Using a short means that only 16 bits are used per ammo slot, rather than 32, allowing for double the number of weapons.

You must also remember that ps.stats[STAT_WEAPONS] holds a bit field of the weapons a player carries. However, this is sent as a 19-bit field (contrary to what the declaration in the header says of 16 bits). I've simply replaced all instances of ps.stats[STAT_WEAPONS] with ps.userInt1, and resized this field to 32 bits in the ext_data/MP/psf_overrides.txt file.

And then now you're increase the maximum weapon limit up to 32! :D

-=*Raz0r*=- 02-19-2009 09:55 AM

Thank-you muchly for this information. =]

BobaFettUU 04-25-2009 05:14 AM

I have a not-so-good comment on this i'm afraid.

I've recently checked the JA networking system, and it appears that ammo is sent over as 16 bit, and not 32.

As such, if you change the ammo fields to shorts, only half of em will be networked.

All times are GMT -4. The time now is 11:51 PM.

Powered by vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
LFNetwork, LLC ©2002-2015 - All rights reserved.