Personally I hate populating arrays one at a time like that. Also is the id just +1 from the array index at all times? I'd make a function to initialize in a cleaner way.
Start of layout
function call "initGun" (1, 10, 400, 1)
function call "initGun" (2, 5, 400, 1)
function call "initGun" (3, 40, 300, 3)
function call "initGun" (4, 100, 200, 10)
On function "initGun"
GunArray Set value at (function.param(0)-1, GUN_ID) to function.param(0)
GunArray Set value at (function.param(0)-1, DAMAGE) to function.param(1)
GunArray Set value at (function.param(0)-1, SPEED) to function.param(2)
GunArray Set value at (function.param(0)-1, FIRE_RATE) to function.param(3)
And you can also make a comment by adding another parameter that you don't use. ex:
Start of layout
function call "initGun" (1, 10, 400, 1, "pistol")
function call "initGun" (2, 5, 400, 1, "rifle")
function call "initGun" (3, 40, 300, 3, "shotgun")
function call "initGun" (4, 100, 200, 10, "pea shooter")
If I had an immense amount of guns I'd go a step further and add a txt file to the project that I'd load and with ajax and parse the data from it with tokenat().