Ahí lo llevas. Son dos archivos que tienes que poner en /dev, sustituyendo a definitions.h y engine.h. Además, hay que añadir nuevas directivas en config.h. Prefiero que las añadas tú, es mejor así que coger un config.h pelao y ponerte a mezclarlo con el tuyo. Añádelas al final del bloque de PLAYER_CAN_FIRE y listo.
Lo mejor es que creo que no he añadido más de 8 lineas de código.
Esta es la explicación que añadiré al archivo
whatsnew.txt:
$this->bbcode_second_pass_code('', 'Disparos con rango
------------------
Se trata de que los disparos duren "N" frames. Se puede establecer este número de
frames de forma prefijada o configurar para que se tome del valor de una FLAG, y
así pueda modificarse desde el script.
Debe utilizarse con PLAYER_CAN_FIRE, por supuesto.
#define LIMITED_BULLETS
Esta directiva activa la nueva funcionalidad. Para configurarla, utilizamos una de
estas otras dos directivas:
#define LB_FRAMES 4
Si activamos LB_FRAMES, la duración es FIJA y se establece al valor especificado.
En el ejemplo, se establece que tras 4 frames, las balas "morirán".
#define LB_FRAMES_FLAG 2
Si, en cambio, activamos LB_FRAMES_FLAG, la duración se toma del flag especificado
en la directiva. En el ejemplo, el valor del flag 2 establecerá el número de frames
que durarán las balas.
Esto puede funcionar bien si definimos PLAYER_BULLET_SPEED a un valor bajo, de 1 o 2
píxels por frame, aunque lo suyo es encontrar la combinación ganadora.
Si usamos LB_FRAMES_FLAG, podremos implementar "power ups", por ejemplo, simplemente
modificado el valor del flag definido desde el script cuando se cumplan determinadas
condiciones (por ejemplo, al coger un objeto). Es importante recordar dar un valor
al flag en cuestión al principio del script, en la sección ENTERING_GAME, o de lo
contrario valdrá 0 y el jugador no podrá disparar (aunque puede sernos util).')
Por si no queda claro, hay que definir LIMITED_BULLETS y LB_FRAMES ó LB_FRAMES_FLAG, una de las dos. Si defines LB_FRAMES, el motor pasará de las flags y la duración de los disparos será fija. Si no defines ninguna de las dos, no funcionará.
Atención al tema: sin probar, *creo* que esto funcionará mejor si se define PLAYER_BULLET_SPEED bajito. Originalmente está a 8 pixels/frame de velocidad. Total, la cosa es ir probando
Para saber lo lejos que te llegarán, simplemente multiplica la velocidad por el número de frames y tendrás el alcance en pixels.
Si usas scripting, con definir qué frame gobernará el comportamiento de las balas en config.h, sólo tienes que darle valor a ese flag desde el script para modificar el rango. Esto puede molar para hacer powerups.
Espero que funcione