Mensajepor na_th_an » Mié, 15 Ene 2014, 16:47
No, si en realidad hay poco que hacer, ya está hecho. Mirad extern.h en ramiro:
$this->bbcode_second_pass_code('', '// Extern actions.
// Add code here at your wish.
// Will be run from scripting (EXTERN n)
extern unsigned char cad1[0];
extern unsigned char cad2[0];
extern unsigned char cad3[0];
unsigned char *cads [3] = {cad1, cad2, cad3};
#asm
._cad1
defm " HOLA, QUERIDO RAMIRO! "
defb 0
defm " ASI QUE TU HIJA QUERE "
defb 0
defm " EL TESORO DEL MORO... "
defb 0
defm " PUEDO ABRIR LA CAMARA "
defb 0
defm " PERO NECESITO QUE ME "
defb 0
defm " TRAIGAS LAS 4 PARTES "
defb 0
defm " DEL TALISMAN ALEMAN. "
defb 0
._cad2
defm " OH, CLARO, ES DE DIA "
defb 0
defm " Y EL SOL TE QUEMA... "
defb 0
defm " CON ESTE HECHIZO POS- "
defb 0
defm " TIZO QUE TE LANZO, "
defb 0
defm " PODRAS SALIR FUERA... "
defb 0
defm " PERO CUIDADO: SOLO TE "
defb 0
defm " PROTEJERA UN MINUTO. "
defb 0
._cad3
defm " BIEN... VEO QUE TIE- "
defb 0
defm " NES LOS CUATRO TROZOS "
defb 0
defm " DEL TALISMAN ALEMAN. "
defb 0
defm " AHORA PUEDO HACER EL "
defb 0
defm " ENCANTAMIENTO DEL PI- "
defb 0
defm " MIENTO PARA ABRIR LA "
defb 0
defm " CAMARA DEL TESORO. "
defb 0
#endasm
void draw_rectangle (unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char c) {
unsigned char i, j;
for (i = y1; i <= y2; i ++)
for (j = x1; j <= x2; j ++)
sp_PrintAtInv (i, j, c, 0);
}
void draw_texts (unsigned char x, unsigned char y, unsigned char c, char *cad, unsigned char n, unsigned char width) {
while (n > 0) {
draw_text (x, y, c, cad);
y ++;
cad += width;
n --;
sp_UpdateNow ();
peta_el_beeper (7 + ((rand () & 1) << 2));
}
}
void do_extern_action (unsigned char n) {
saca_a_todo_el_mundo_de_aqui ();
draw_rectangle (4, 6, 26, 14, 7);
draw_texts (4, 7, 7, cads [n - 1], 7, 24);
espera_activa (500);
}')
Cuando tú, en el script del juego, llamas a EXTERN 2, lo que hace el engine es llamar a la función do_extern_action pasándole ese 2. Esa función lo que hace es pintar un recuadro (draw_rectangle), pintar los textos correspondientes, y esperarse un rato.
Para usarlo vosotros, tendríais que definir vuestros textos tal y como se hace ahí, y quizá ajustar el tamaño y color del rectángulo.
Luego hay que habilitar las funciones externas al script desde config.h con esto:
$this->bbcode_second_pass_code('', '#define ENABLE_EXTERN_CODE // Enables custom code to be run from the script using EXTERN n')
Así, por ejemplo, si hay que examinar un cartel que hay en la pantalla 7 en la posición de tiles (12, 8), el script sería:
$this->bbcode_second_pass_code('', 'PRESS_FIRE AT SCREEN 7
IF PLAYER_TOUCHES 12, 8
EXTERN 1
REENTER
END
END')
O sea, si pulsamos acción en la pantalla 7 y tocamos el tile (12, 8), llamamos a nuestra función externa para mostrar el texto 1 y luego re-entramos en la pantalla para dibujarla de nuevo.
Como diría Rorshach: "Urm..."