Mensajepor na_th_an » Lun, 18 Nov 2013, 08:49
Bueno, arreglado el bug. No tenías la 3.99.2, o al menos no totalmente. El bug era un break mal puesto en mainloop.h.
Para corregir el bug tienes que buscar esto en mainloop.h, a partir de la linea 406 (verás que el break final lo tienes diferente a esto, ponlo como este):
$this->bbcode_second_pass_code('', '#ifdef ONLY_ONE_OBJECT
if (player.objs == 0) {
player.objs ++;
peta_el_beeper (9);
} else {
peta_el_beeper (4);
draw_coloured_tile (VIEWPORT_X + (hotspot_x >> 3), VIEWPORT_Y + (hotspot_y >> 3), 17);
gpit = 1;
}
#else
player.objs ++;
peta_el_beeper (9);
#endif
break;
#endif')
Y para lo que tú querías tienes que modificar este trozo de código, a partir de la linea 110 de printer.h:
$this->bbcode_second_pass_code('', '#ifndef DEACTIVATE_OBJECTS
void draw_objs () {
#if defined(ONLY_ONE_OBJECT) && defined(ACTIVATE_SCRIPTING)
if (player.objs) {
sp_PrintAtInv (OBJECTS_ICON_Y, OBJECTS_ICON_X, 135, 132);
sp_PrintAtInv (OBJECTS_ICON_Y, OBJECTS_ICON_X + 1, 135, 133);
sp_PrintAtInv (OBJECTS_ICON_Y + 1, OBJECTS_ICON_X, 135, 134);
sp_PrintAtInv (OBJECTS_ICON_Y + 1, OBJECTS_ICON_X + 1, 135, 135);
} else {
draw_coloured_tile (OBJECTS_ICON_X, OBJECTS_ICON_Y, 17);
}
print_number2 (OBJECTS_X, OBJECTS_Y, flags [OBJECT_COUNT]);
#else
print_number2 (OBJECTS_X, OBJECTS_Y, player.objs);
#endif
}
#endif')
Ahí verás cuatro llamadas a sp_PrintAtInv. Estas llamadas pintan cada uno de los cuatro caracteres del icono de objeto (132, 133, 134 y 135) usando el atributo 135 (que es INK 7, FLASH 1; 135 = 7 + 8*0 + 64*0 + 128*1) en la posición del objeto en el marcador (OBJECTS_ICON_X y OBJECTS_ICON_Y). Eso es lo que tendrías que cambiar. Puedes sustituir los cuatro por un draw_coloured_tile (OBJECTS_ICON_X, OBJECTS_ICON_Y, t); donde "t" es el número de tile.
Cuando el jugador coge el objeto, se "marca" en el marcador con ese código. Luego, en el scripting, habría que detectar "lo que fuera" (en Dogmole, por ejemplo, se trata de poner los objetos en un sitio, por lo que en el scripting se detecta que estemos en ese sitio) para decrementar el contador de objetos y dejarlo a cero, con lo que el marcador se restauraría. En Dogmole, además, se incrementa una flag que es la que controla cuantos objetos hemos cogido y posteriormente depositado.
No tengo muy claro qué quieres hacer, por eso no te lo he modificado yo. Descríbeme cuál sería la dinámica del juego para con los objetos y te digo.
Como diría Rorshach: "Urm..."