Trooper Dan, on 25 April 2013 - 09:04 AM, said:
Perhaps not simple, but I have this:
/*
* CON Mutator
* Weapon range simulation
* By Dr. Kylstein
* 2013-01-27
*
* Makes accuracy decrease with range
*/
//generic variables
gamevar temp 0 0
gamevar temp2 0 0
gamevar xpos 0 0
gamevar ypos 0 0
gamevar zpos 0 0
gamevar xpos2 0 0
gamevar ypos2 0 0
gamevar zpos2 0 0
gamevar angle 0 0
gamevar angle2 0 0
gamevar sectorvar 0 0
gamevar sectorvar2 0 0
gamevar thatactor 0 0
gamevar wallvar 0 0
//distance to target
gamevar range_distance 0 1
//adjustment for scatter
gamevar range_pistol_divisor 12 0
gamevar range_shotgun_divisor 8 0
gamevar range_chaingun_divisor 12 0
gamevar range_railgun_divisor 128 0
//calculate distance between two points
state squarethreedistance // (xpos, ypos, zpos, xpos2, ypos2, zpos2) returns square of distance in temp
subvarvar xpos xpos2
subvarvar ypos ypos2
subvarvar zpos zpos2
divvar zpos 16 //16384z = 1024xy
mulvarvar xpos xpos
mulvarvar ypos ypos
mulvarvar zpos zpos
addvarvar xpos ypos
addvarvar xpos zpos
setvarvar temp xpos
ends
state threedistance
state squarethreedistance
sqrt temp temp
ends
//track distance to point aimed at
onevent EVENT_GAME
ifactor APLAYER {
getplayer[THISACTOR].posx xpos
getplayer[THISACTOR].posy ypos
getplayer[THISACTOR].posz zpos
getplayer[THISACTOR].ang angle
getplayer[THISACTOR].cursectnum sectorvar
getplayer[THISACTOR].horiz angle2
subvar angle2 100
mulvar angle2 -2048
cos temp angle
sin temp2 angle
hitscan xpos ypos zpos sectorvar temp temp2 angle2 sectorvar2 wallvar thatactor xpos2 ypos2 zpos2 0xFFFF0030
state threedistance
setvarvar range_distance temp
}
endevent
//adjust scatter
onevent EVENT_GETSHOTRANGE
setvarvar temp range_distance
//different scaling factors for different guns
getplayer[THISACTOR].curr_weapon temp2
ifvare temp2 PISTOL_WEAPON {
divvarvar temp range_pistol_divisor
} else ifvare temp2 SHOTGUN_WEAPON {
divvarvar temp range_shotgun_divisor
} else ifvare temp2 CHAINGUN_WEAPON {
divvarvar temp range_chaingun_divisor
} else {
divvarvar temp range_railgun_divisor
}
setvarvar ZRANGE temp
divvar temp 8 // 128/16 the default ratio
setvarvar ANGRANGE temp
endevent

Help
Duke4.net
DNF #1
Duke 3D #1


