He probado el juego (sin estas modificaciones) en el SpecEmu, y funciona en modelo +2 y 128K con el Eula Snow ese (aunque se ven algunos artifacts en el juego) pero no hay cuelgue.
El JSpeccy no me tira
, no me abre el java (encima por la razón que sea no estaba instalado... puñetero java, parece que "se va solo")
Te paso el mainloop, o si lo prefeires te paso todo el código completo
$this->bbcode_second_pass_code('', '// mainloop.h
// Churrera copyleft 2011 by The Mojon Twins.
void saca_a_todo_el_mundo_de_aqui (void) {
sp_MoveSprAbs (sp_player, spritesClip, 0, VIEWPORT_Y + 30, VIEWPORT_X + 20, 0, 0);
for (gpit = 0; gpit < 3; gpit ++)
sp_MoveSprAbs (sp_moviles [gpit], spritesClip, 0, VIEWPORT_Y + 30, VIEWPORT_X + 20, 0, 0);
#ifdef PLAYER_CAN_FIRE
for (gpit = 0; gpit < MAX_BULLETS; gpit ++)
sp_MoveSprAbs (sp_bullets [gpit], spritesClip, 0, -2, -2, 0, 0);
#endif
}
#ifdef SCRIPTING_KEY_M
int key_m;
#endif
#ifdef PAUSE_ABORT
int key_h, key_y;
#endif
#ifdef MSC_MAXITEMS
int key_z;
unsigned char key_z_pressed = 0;
#endif
int itj;
unsigned char objs_old, keys_old, life_old, killed_old;
#ifdef MAX_AMMO
unsigned char ammo_old;
#endif
#if defined(TIMER_ENABLE) && defined(PLAYER_SHOW_TIMER)
unsigned char timer_old;
#endif
#ifdef COMPRESSED_LEVELS
unsigned char *level_str = "LEVEL 0X";
#endif
#ifdef GET_X_MORE
unsigned char *getxmore = " GET X MORE ";
#endif
void do_game (void) {
unsigned char *allpurposepuntero;
unsigned char playing;
#ifdef COMPRESSED_LEVELS
unsigned char mlplaying;
#endif
#ifdef RANDOM_RESPAWN
int x, y;
#else
unsigned char x, y;
#endif
unsigned char success;
#ifdef PLAYER_CHECK_MAP_BOUNDARIES
unsigned char x_pant, y_pant;
#endif
// Install ISR
#asm
di
#endasm
#ifdef MODE_128K
sp_InitIM2(0xf1f1);
sp_CreateGenericISR(0xf1f1);
sp_RegisterHook(255, ISR);
arkos_init ();
#asm
ei
#endasm
#endif
//cortina ();
// splib2 initialization
sp_Initialize (7, 0);
sp_Border (BLACK);
sp_AddMemory(0, 56, 14, AD_FREE);
// Define keys and default controls
#ifdef USE_TWO_BUTTONS
keys.up = sp_LookupKey('w');
keys.down = sp_LookupKey('s');
keys.left = sp_LookupKey('a');
keys.right = sp_LookupKey('d');
keys.fire = sp_LookupKey('m');
key_jump = sp_LookupKey('n');
key_fire = keys.fire;
#else
keys.up = sp_LookupKey('q');
keys.down = sp_LookupKey('a');
keys.left = sp_LookupKey('o');
keys.right = sp_LookupKey('p');
keys.fire = sp_LookupKey(' ');
#endif
#ifdef SCRIPTING_KEY_M
key_m = sp_LookupKey ('m');
#endif
#ifdef PAUSE_ABORT
key_h = sp_LookupKey ('h');
key_y = sp_LookupKey ('y');
#endif
#ifdef MSC_MAXITEMS
key_z = sp_LookupKey ('z');
#endif
joyfunc = sp_JoyKeyboard;
// Load tileset
allpurposepuntero = tileset;
for (itj = 0; itj < 256; itj++) {
sp_TileArray (itj, allpurposepuntero);
allpurposepuntero += 8;
}
// Clipping rectangle
spritesClipValues.row_coord = VIEWPORT_Y;
spritesClipValues.col_coord = VIEWPORT_X;
spritesClipValues.height = 20;
spritesClipValues.width = 30;
spritesClip = &spritesClipValues;
// Sprite creation
#ifdef NO_MASKS
sp_player = sp_CreateSpr (sp_OR_SPRITE, 3, sprite_2_a, 1, TRANSPARENT);
sp_AddColSpr (sp_player, sprite_2_b, TRANSPARENT);
sp_AddColSpr (sp_player, sprite_2_c, TRANSPARENT);
player.current_frame = player.next_frame = sprite_2_a;
for (gpit = 0; gpit < 3; gpit ++) {
sp_moviles [gpit] = sp_CreateSpr(sp_OR_SPRITE, 3, sprite_9_a, 1, TRANSPARENT);
sp_AddColSpr (sp_moviles [gpit], sprite_9_b, TRANSPARENT);
sp_AddColSpr (sp_moviles [gpit], sprite_9_c, TRANSPARENT);
en_an [gpit].current_frame = sprite_9_a;
}
#else
sp_player = sp_CreateSpr (sp_MASK_SPRITE, 3, sprite_2_a, 1, TRANSPARENT);
sp_AddColSpr (sp_player, sprite_2_b, TRANSPARENT);
sp_AddColSpr (sp_player, sprite_2_c, TRANSPARENT);
player.current_frame = player.next_frame = sprite_2_a;
for (gpit = 0; gpit < 3; gpit ++) {
sp_moviles [gpit] = sp_CreateSpr(sp_MASK_SPRITE, 3, sprite_9_a, 2, TRANSPARENT);
sp_AddColSpr (sp_moviles [gpit], sprite_9_b, TRANSPARENT);
sp_AddColSpr (sp_moviles [gpit], sprite_9_c, TRANSPARENT);
en_an [gpit].current_frame = en_an [gpit].next_frame = sprite_9_a;
}
#endif
#ifdef PLAYER_CAN_FIRE
for (gpit = 0; gpit < MAX_BULLETS; gpit ++) {
#ifdef MASKED_BULLETS
sp_bullets [gpit] = sp_CreateSpr (sp_MASK_SPRITE, 2, sprite_19_a, 1, TRANSPARENT);
#else
sp_bullets [gpit] = sp_CreateSpr (sp_OR_SPRITE, 2, sprite_19_a, 1, TRANSPARENT);
#endif
sp_AddColSpr (sp_bullets [gpit], sprite_19_b, TRANSPARENT);
}
#endif
//sp_UpdateNow ();
//get_resource (5, 16384);
// sp_UpdateNow ();
arkos_play_music (6);
espera_activa (200);
arkos_play_music (0);
do {
gpjt = sp_GetKey ();
} while (!gpjt);
//gpjt=255;
/*
keys.up = sp_LookupKey('q');
keys.down = sp_LookupKey('a');
keys.left = sp_LookupKey('o');
keys.right = sp_LookupKey('p');
keys.fire = sp_LookupKey(' ');
*/
/*
print_str (1, 15, 7, "UP");
sp_UpdateNow ();
do {
gpjt = sp_GetKey ();
} while (!gpjt);
sp_WaitForNoKey ();
keys.up = sp_LookupKey(gpjt);
print_str (1, 15, 7, "DOWN");
sp_UpdateNow ();
do {
gpjt = sp_GetKey ();
} while (!gpjt);
sp_WaitForNoKey ();
keys.down = sp_LookupKey(gpjt);
print_str (1, 15, 7, "LEFT");
sp_UpdateNow ();
do {
gpjt = sp_GetKey ();
} while (!gpjt);
sp_WaitForNoKey ();
keys.left = sp_LookupKey(gpjt);
print_str (1, 15, 7, "RIGHT");
sp_UpdateNow ();
do {
gpjt = sp_GetKey ();
} while (!gpjt);
sp_WaitForNoKey ();
keys.right = sp_LookupKey(gpjt);
print_str (1, 15, 7, "JUMP");
sp_UpdateNow ();
do {
gpjt = sp_GetKey ();
} while (!gpjt);
sp_WaitForNoKey ();
keys.fire = sp_LookupKey(gpjt);
*/
//password [esjt] = '.';
//}
//arkos_play_music (0);
key_y = sp_LookupKey ('y');
while (1) {
/*
if(gpjt==255)
{
gpjt==0;
}
else
{
get_resource (9, 16384);
}
}
*/
arkos_stop_sound ();
arkos_play_music (0);
//}
// Here the title screen
sp_UpdateNow();
blackout ();
#ifdef MODE_128K
// Resource 0 = title.bin
get_resource (0, 16384);
#else
unpack ((unsigned int) (s_title), 16384);
#endif
#ifdef MODE_128K
//arkos_play_music (0);
#endif
//blackout_area ();
select_joyfunc ();
#ifdef MODE_128K
arkos_stop_sound ();
#endif
//get_resource (0, 16384);
#ifdef COMPRESSED_LEVELS
mlplaying = 1;
level = 0;
#ifndef REFILL_ME
player.life = PLAYER_LIFE;
#endif
//get_resource (0, 16384);
while (mlplaying) {
prepare_level (level);
blackout_area ();
level_str [7] = 49 + level;
print_str (12, 12, 71, level_str);
sp_UpdateNow ();
#ifdef MODE_128K
//arkos_play_sound (0);
#else
peta_el_beeper (1);
#endif
espera_activa (100);
#endif
#ifndef DIRECT_TO_PLAY
// Clear screen and show game frame
cortina ();
sp_UpdateNow();
#ifdef MODE_128K
// Resource 1 = marco.bin
get_resource (1, 16384);
#else
unpack ((unsigned int) (s_marco), 16384);
#endif
#endif
//arkos_play_music (6);
//sp_WaitForNoKey ();
//espera_activa (200);
// Let's do it.
playing = 1;
init_player ();
#ifndef COMPRESSED_LEVELS
init_hotspots ();
#endif
#ifndef COMPRESSED_LEVELS
#ifndef DEACTIVATE_KEYS
init_cerrojos ();
#endif
#endif
#if defined(PLAYER_KILLS_ENEMIES) || defined (PLAYER_CAN_FIRE)
#ifndef COMPRESSED_LEVELS
init_malotes ();
#endif
#endif
#ifdef PLAYER_CAN_FIRE
init_bullets ();
#endif
#ifndef COMPRESSED_LEVELS
n_pant = SCR_INICIO;
#endif
maincounter = 0;
#ifdef ACTIVATE_SCRIPTING
script_result = 0;
msc_init_all ();
#endif
#ifdef ACTIVATE_SCRIPTING
// Entering game
script = e_scripts [MAP_W * MAP_H];
run_script ();
#endif
draw_scr ();
#ifdef PLAYER_KILLS_ENEMIES
#ifdef SHOW_TOTAL
// Show total of enemies next to the killed amount.
sp_PrintAtInv (KILLED_Y, 2 + KILLED_X, 71, 15);
sp_PrintAtInv (KILLED_Y, 3 + KILLED_X, 71, 16 + BADDIES_COUNT / 10);
sp_PrintAtInv (KILLED_Y, 4 + KILLED_X, 71, 16 + BADDIES_COUNT % 10);
#endif
#endif
half_life = 0;
objs_old = keys_old = life_old = killed_old = 0xff;
#ifdef MAX_AMMO
ammo_old = 0xff;
#endif
#if defined(TIMER_ENABLE) && defined(PLAYER_SHOW_TIMER)
timer_old = 0;
#endif
success = 0;
#ifdef PLAYER_CHECK_MAP_BOUNDARIES
#ifdef MODE_128K
x_pant = n_pant % level_data->map_w;
y_pant = n_pant / level_data->map_w;
#else
x_pant = n_pant % MAP_W; y_pant = n_pant / MAP_W;
#endif
#endif
#ifdef MODE_128K
// Play music
#ifdef COMPRESSED_LEVELS
arkos_play_music (levels [level].music_id);
#else
arkos_play_music (1); // 1
#endif
#endif
#ifdef MSC_MAXITEMS
display_items ();
/*
print_str (1, 20, 7, " ");
if (items [flags [FLAG_SLOT_SELECTED]] == 0) {
print_str (1, 20, 7, " ");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 20) {
print_str (1, 20, 7, "PICO");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 21) {
print_str (1, 20, 7, "DINAMITA DE AGUA");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 23) {
print_str (1, 20, 7, "BELLOTA NORMAL");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 24) {
print_str (1, 20, 7, "MONEDA DE ORO");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 27) {
print_str (1, 20, 7, "ABONO SPECIAL M");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 28) {
print_str (1, 20, 7, "TRIDENTE");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 31) {
print_str (1, 20, 7, "BATERIA");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 33) {
print_str (1, 20, 7, "48K DE RAM");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 34) {
print_str (1, 20, 7, "LLAVE");
}
*/
#endif
while (playing) {
#ifdef TIMER_ENABLE
// Timer
if (ctimer.on) {
ctimer.count ++;
if (ctimer.count == ctimer.frames) {
ctimer.count = 0;
ctimer.t --;
if (ctimer.t == 0) ctimer.zero = 1;
}
}
#if defined(TIMER_SCRIPT_0) && defined(ACTIVATE_SCRIPTING)
if (ctimer.zero) {
ctimer.zero = 0;
#ifdef SHOW_TIMER_OVER
saca_a_todo_el_mundo_de_aqui ();
time_over ();
#endif
script = e_scripts [MAP_W * MAP_H + 2];
run_script ();
}
#endif
#ifdef TIMER_KILL_0
if (ctimer.zero) {
#ifdef SHOW_TIMER_OVER
#ifndef TIMER_SCRIPT_0
saca_a_todo_el_mundo_de_aqui ();
time_over ();
#endif
#endif
ctimer.zero = 0;
#ifdef TIMER_AUTO_RESET
ctimer.t = TIMER_INITIAL;
#endif
player.life --;
#ifdef MODE_128K
// arkos_play_sound (7);
#else
peta_el_beeper (4);
#endif
#ifdef PLAYER_FLICKERS
player.estado = EST_PARP;
player.ct_estado = 50;
#endif
#if defined(TIMER_WARP_TO_X) && defined(TIMER_WARP_TO_Y)
player.x = TIMER_WARP_TO_X << 10;
player.y = TIMER_WARP_TO_Y << 10;
#endif
#ifdef TIMER_WARP_TO
n_pant = TIMER_WARP_TO;
draw_scr ();
#endif
}
#endif
#endif
#ifndef DEACTIVATE_OBJECTS
if (player.objs != objs_old) {
draw_objs ();
objs_old = player.objs;
}
#endif
if (player.life != life_old) {
print_number2 (LIFE_X, LIFE_Y, player.life);
life_old = player.life;
}
#ifndef DEACTIVATE_KEYS
if (player.keys != keys_old) {
print_number2 (KEYS_X, KEYS_Y, player.keys);
keys_old = player.keys;
}
#endif
#if defined(PLAYER_KILLS_ENEMIES) || defined(PLAYER_CAN_FIRE)
#ifdef PLAYER_SHOW_KILLS
if (player.killed != killed_old) {
print_number2 (KILLED_X, KILLED_Y, player.killed);
killed_old = player.killed;
}
#endif
#endif
#ifdef MAX_AMMO
if (player.ammo != ammo_old) {
print_number2 (AMMO_X, AMMO_Y, player.ammo);
ammo_old = player.ammo;
}
#endif
#if defined(TIMER_ENABLE) && defined(PLAYER_SHOW_TIMER)
if (ctimer.t != timer_old) {
print_number2 (TIMER_X, TIMER_Y, ctimer.t);
timer_old = ctimer.t;
}
#endif
maincounter ++;
half_life = !half_life;
// Move player
move ();
// Move enemies
mueve_bicharracos ();
#ifdef PLAYER_CAN_FIRE
// Move bullets
mueve_bullets ();
#endif
#ifdef ENABLE_TILANIMS
do_tilanims ();
#endif
// Render
for (gpit = 0; gpit < 3; gpit ++) {
#if defined (RANDOM_RESPAWN) || defined (ENABLE_CUSTOM_TYPE_6)
if (en_an [gpit].fanty_activo || malotes [enoffs + gpit].t == 6) {
x = en_an [gpit].x >> 6;
y = en_an [gpit].y >> 6;
} else {
#endif
x = malotes [enoffs + gpit].x;
y = malotes [enoffs + gpit].y;
#if defined (RANDOM_RESPAWN) || defined (ENABLE_CUSTOM_TYPE_6)
}
#endif
sp_MoveSprAbs (sp_moviles [gpit], spritesClip, en_an [gpit].next_frame - en_an [gpit].current_frame, VIEWPORT_Y + (y >> 3), VIEWPORT_X + (x >> 3),x & 7, y & 7);
en_an [gpit].current_frame = en_an [gpit].next_frame;
}
// Precalc this, comes handy:
x = player.x >> 6;
y = player.y >> 6;
#ifdef ACTIVATE_SCRIPTING
#ifdef ENABLE_FIRE_ZONE
if (f_zone_ac == 1) {
if (x >= fzx1 && x <= fzx2 && y >= fzy1 && y <= fzy2) {
run_fire_script ();
}
}
#endif
#endif
if ( !(player.estado & EST_PARP) || !(half_life) )
sp_MoveSprAbs (sp_player, spritesClip, player.next_frame - player.current_frame, VIEWPORT_Y + (y >> 3), VIEWPORT_X + (x >> 3), x & 7, y & 7);
else
sp_MoveSprAbs (sp_player, spritesClip, player.next_frame - player.current_frame, -2, -2, 0, 0);
player.current_frame = player.next_frame;
#ifdef PLAYER_CAN_FIRE
for (gpit = 0; gpit < MAX_BULLETS; gpit ++) {
if (bullets [gpit].estado == 1) {
sp_MoveSprAbs (sp_bullets [gpit], spritesClip, 0, VIEWPORT_Y + (bullets [gpit].y >> 3), VIEWPORT_X + (bullets [gpit].x >> 3), bullets [gpit].x & 7, bullets [gpit].y & 7);
} else {
sp_MoveSprAbs (sp_bullets [gpit], spritesClip, 0, -2, -2, 0, 0);
}
}
#endif
// Update to screen
sp_UpdateNow();
#ifdef PLAYER_CAN_FIRE
for (gpit = 0; gpit < 3; gpit ++)
if (en_an [gpit].morido == 1) {
#ifdef MODE_128K
arkos_play_sound (7);
#else
peta_el_beeper (1);
#endif
en_an [gpit].morido = 0;
}
#endif
#ifdef PLAYER_FLICKERS
// Flickering
if (player.estado == EST_PARP) {
player.ct_estado --;
if (player.ct_estado == 0)
player.estado = EST_NORMAL;
}
#endif
// Hotspot interaction.
//if (x >= hotspot_x - 15 && x <= hotspot_x + 15 && y >= hotspot_y - 15 && y <= hotspot_y + 15) {
if (collide (x, y, hotspot_x, hotspot_y)) {
//RECUPERAMOS LA ENERGIA CON CADA BELLOTA
player.life = PLAYER_LIFE;
// Deactivate hotspot
draw_coloured_tile (VIEWPORT_X + (hotspot_x >> 3), VIEWPORT_Y + (hotspot_y >> 3), orig_tile);
gpit = 0;
#ifndef USE_HOTSPOTS_TYPE_3
// Was it an object, key or life boost?
if (hotspots [n_pant].act == 0) {
player.life += PLAYER_REFILL;
if (player.life > PLAYER_LIFE)
player.life = PLAYER_LIFE;
hotspots [n_pant].act = 2;
#ifdef MODE_128K
arkos_play_sound (5);
#else
peta_el_beeper (8);
#endif
} else {
switch (hotspots [n_pant].tipo) {
#ifndef DEACTIVATE_OBJECTS
case 1:
#ifdef ONLY_ONE_OBJECT
if (player.objs == 0) {
player.objs ++;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (9);
#endif
} else {
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (4);
#endif
draw_coloured_tile (VIEWPORT_X + (hotspot_x >> 3), VIEWPORT_Y + (hotspot_y >> 3), 17);
gpit = 1;
}
#else
player.objs ++;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (9);
#endif
#endif
break;
#endif
#ifndef DEACTIVATE_KEYS
case 2:
player.keys ++;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (7);
#endif
break;
#endif
#ifdef MAX_AMMO
case 4:
if (MAX_AMMO - player.ammo > AMMO_REFILL)
player.ammo += AMMO_REFILL;
else
player.ammo = MAX_AMMO;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (9);
#endif
break;
#endif
#ifdef TIMER_ENABLE
case 5:
if (99 - ctimer.t > TIMER_REFILL)
ctimer.t += TIMER_REFILL;
else
ctimer.t = 99;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (7);
#endif
break;
#endif
}
hotspots [n_pant].act = gpit;
}
hotspot_x = hotspot_y = 240;
}
#else
// Modificación para que los hotspots de tipo 3 sean recargas directas
// Was it an object, key or life boost?
if (hotspots [n_pant].act) {
hotspots [n_pant].act = 0;
switch (hotspots [n_pant].tipo) {
#ifndef DEACTIVATE_OBJECTS
case 1:
#ifdef ONLY_ONE_OBJECT
if (player.objs == 0) {
player.objs ++;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (9);
#endif
} else {
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (4);
#endif
draw_coloured_tile (VIEWPORT_X + (hotspot_x >> 3), VIEWPORT_Y + (hotspot_y >> 3), 17);
hotspots [n_pant].act = 1;
}
#else
player.objs ++;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (9);
#endif
#ifdef GET_X_MORE
if (level_data.max_objs > player.objs) {
print_str (10, 11, 79, spacer);
getxmore [5] = '0' + level_data.max_objs - player.objs;
print_str (10, 12, 79, getxmore);
print_str (10, 13, 79, spacer);
sp_UpdateNow ();
sp_WaitForNoKey ();
espera_activa (100);
draw_scr_background ();
}
#endif
#endif
break;
#endif
#ifndef DEACTIVATE_KEYS
case 2:
player.keys ++;
#ifdef MODE_128K
arkos_play_sound (3);
#else
peta_el_beeper (7);
#endif
break;
#endif
case 3:
player.life += PLAYER_REFILL;
if (player.life > PLAYER_LIFE)
player.life = PLAYER_LIFE;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (8);
#endif
break;
#ifdef MAX_AMMO
case 4:
if (MAX_AMMO - player.ammo > AMMO_REFILL)
player.ammo += AMMO_REFILL;
else
player.ammo = MAX_AMMO;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (9);
#endif
break;
#endif
#ifdef TIMER_ENABLE
case 5:
if (99 - ctimer.t > TIMER_REFILL)
ctimer.t += TIMER_REFILL;
else
ctimer.t = 99;
#ifdef MODE_128K
arkos_play_sound (4);
#else
peta_el_beeper (7);
#endif
break;
#endif
}
}
hotspot_x = hotspot_y = 240;
}
#endif
// Flick screen checks and scripting related stuff
gpit = (joyfunc) (&keys);
if (sp_KeyPressed (key_y)) {
playing = 0;
}
#ifdef ACTIVATE_SCRIPTING
// Select object
#ifdef MSC_MAXITEMS
if ((gpit & sp_UP) == 0) {
//if (sp_KeyPressed (keys.up) || sp_KeyPressed (gpit & sp_UP)) {
//if (gpit & sp_UP) {
if (!key_z_pressed) {
#ifdef MODE_128K
arkos_play_sound (2);
#else
peta_el_beeper (2);
#endif
flags [FLAG_SLOT_SELECTED] = (flags [FLAG_SLOT_SELECTED] + 1) % MSC_MAXITEMS;
display_items ();
//print_str (10, 10, 7, " "&flags [ITEM_SLOT_SELECTED-1]);
/*
print_str (1, 20, 7, " ");
if (items [flags [FLAG_SLOT_SELECTED]] == 0) {
print_str (1, 20, 7, " ");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 20) {
print_str (1, 20, 7, "PICO");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 21) {
print_str (1, 20, 7, "DINAMITA DE AGUA");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 23) {
print_str (1, 20, 7, "BELLOTA NORMAL");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 24) {
print_str (1, 20, 7, "MONEDA DE ORO");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 27) {
print_str (1, 20, 7, "ABONO SPECIAL M");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 28) {
print_str (1, 20, 7, "TRIDENTE");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 31) {
print_str (1, 20, 7, "BATERIA");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 33) {
print_str (1, 20, 7, "48K DE RAM");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 34) {
print_str (1, 20, 7, "LLAVE");
}
*/
}
key_z_pressed = 1;
} else {
key_z_pressed = 0;
}
#endif
#ifdef SCRIPTING_KEY_M
if (sp_KeyPressed (key_m)) {
#endif
#ifdef SCRIPTING_DOWN
if ((gpit & sp_DOWN) == 0 && player.vy==0) {
#endif
#ifdef SCRIPTING_KEY_FIRE
if ((gpit & sp_FIRE) == 0) {
#endif
// Any scripts to run in this screen?
run_fire_script ();
}
#endif
#ifdef PAUSE_ABORT
// Pause/Abort handling
if (sp_KeyPressed (key_h)) {
sp_WaitForNoKey ();
#ifdef MODE_128K
arkos_stop_sound ();
arkos_play_sound (1);
#endif
saca_a_todo_el_mundo_de_aqui ();
pause_screen ();
while (!sp_KeyPressed (key_h));
sp_WaitForNoKey ();
draw_scr ();
#ifdef MODE_128K
#ifdef COMPRESSED_LEVELS
arkos_play_music (levels [level].music_id);
#else
arkos_play_music (1);
#endif
#endif
// }
if (sp_KeyPressed (key_y)) {
playing = 0;
}
#endif
// Change screen
#ifdef PLAYER_CHECK_MAP_BOUNDARIES
if (player.x == 0 && player.vx < 0 && x_pant > 0) {
n_pant --;
x_pant --;
draw_scr ();
player.x = 14336;
}
#if defined (MODE_128K) && defined (COMPRESSED_LEVELS)
if (player.x == 14336 && player.vx > 0 && x_pant < (level_data->map_w - 1)) {
#else
if (player.x == 14336 && player.vx > 0 && x_pant < (MAP_W - 1)) {
#endif
n_pant ++;
x_pant ++;
draw_scr ();
player.x = 0;
}
if (player.y == 0 && player.vy < 0 && y_pant > 0) {
#if defined (MODE_128K) && defined (COMPRESSED_LEVELS)
n_pant -= level_data->map_w;
#else
n_pant -= MAP_W;
#endif
y_pant --;
draw_scr ();
player.y = 9216;
}
#if defined (MODE_128K) && defined (COMPRESSED_LEVELS)
if (player.y == 9216 && player.vy > 0 && y_pant < (level_data->map_h - 1)) {
n_pant += level_data->map_w;
#else
if (player.y == 9216 && player.vy > 0 && y_pant < (MAP_H - 1)) {
n_pant += MAP_W;
#endif
y_pant ++;
draw_scr ();
player.y = 0;
if (player.vy > 256) player.vy = 256;
}
#else
#ifdef PLAYER_AUTO_CHANGE_SCREEN
if (player.x == 0 && player.vx < 0) {
n_pant --;
draw_scr ();
player.x = 14336;
}
if (player.x == 14336 && player.vx > 0) {
n_pant ++;
draw_scr ();
player.x = 0;
}
#else
if (player.x == 0 && ((gpit & sp_LEFT) == 0)) {
n_pant --;
draw_scr ();
player.x = 14336;
}
if (player.x == 14336 && ((gpit & sp_RIGHT) == 0)) { // 14336 = 224 * 64
n_pant ++;
draw_scr ();
player.x = 0;
}
#endif
#if defined (MODE_128K) && defined (COMPRESSED_LEVELS)
if (player.y == 0 && player.vy < 0 && n_pant >= level_data->map_w) {
n_pant -= level_data->map_w;
#else
if (player.y == 0 && player.vy < 0 && n_pant >= MAP_W) {
n_pant -= MAP_W;
#endif
draw_scr ();
player.y = 9216;
}
if (player.y == 9216 && player.vy > 0) { // 9216 = 144 * 64
#if defined (MODE_128K) && defined (COMPRESSED_LEVELS)
if (n_pant < level_data->map_w * (level_data->map_h - 1)) {
n_pant += level_data->map_w;
#else
if (n_pant < MAP_W * MAP_H - MAP_W) {
n_pant += MAP_W;
#endif
draw_scr ();
player.y = 0;
if (player.vy > 256) player.vy = 256;
#ifdef MAP_BOTTOM_KILLS
} else {
player.vy = -PLAYER_MAX_VY_CAYENDO;
if (player.life > 0) {
#ifdef MODE_128K
arkos_play_sound (1);
#else
peta_el_beeper (4);
#endif
player.life --;
}
#endif
}
}
#endif
// Win game condition
#ifdef ACTIVATE_SCRIPTING
if (player.objs == PLAYER_NUM_OBJETOS || script_result == 1) {
#else
if (player.objs == PLAYER_NUM_OBJETOS) {
#endif
if (
(n_pant == pant_final && ((player.x >> 10) == PLAYER_FIN_X && (player.y >> 10) == PLAYER_FIN_Y)) ||
pant_final == 99
) {
success = 1;
playing = 0;
}
}
// Game over condition
if (player.life == 0
#ifdef ACTIVATE_SCRIPTING
|| script_result == 2
#endif
#if defined(TIMER_ENABLE) && defined(TIMER_GAMEOVER_0)
|| ctimer.zero
#endif
) {
playing = 0;
}
}
sp_WaitForNoKey ();
#ifdef MODE_128K
arkos_stop_sound ();
#endif
saca_a_todo_el_mundo_de_aqui ();
sp_UpdateNow ();
#ifdef COMPRESSED_LEVELS
if (success) {
arkos_play_music (4);
sp_UpdateNow ();
sp_WaitForNoKey ();
espera_activa (1500);
print_str (10, 11, 79, spacer);
print_str (10, 12, 79, " CONGRATULATIONS !!! ");
print_str (10, 13, 79, spacer);
/*
arkos_play_music (6);
print_str (10, 11, 79, spacer);
print_str (10, 12, 79, " ZONE CLEAR ");
print_str (10, 13, 79, spacer);
sp_UpdateNow ();
sp_WaitForNoKey ();
espera_activa (250);
*/
level ++;
if (level == MAX_LEVELS) {
game_ending ();
mlplaying = 0;
}
} else {
#ifdef MODE_128K
arkos_play_music (3);
#endif
#if defined(TIMER_ENABLE) && defined(TIMER_GAMEOVER_0) && defined(SHOW_TIMER_OVER)
if (ctimer.zero) time_over (); else game_over ();
#else
game_over ();
#endif
mlplaying = 0;
#ifdef MODE_128K
arkos_stop_sound ();
#endif
}
}
cortina ();
#else
if (success) {
arkos_play_music (4);
game_ending ();
} else {
arkos_play_music (3);
game_over ();
}
cortina ();
#endif
}
}
')