Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

For all things Churrera. ¿Estás haciendo un juego? ¿quieres proponer un cambio? ¿tienes alguna duda? ¡Cuéntanoslo!

Moderador: na_th_an

Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor Nightwolf » Vie, 27 Feb 2015, 13:36

¡Muchas gracias Metalbrain!

Da gusto ver gente tan molona coño :)

EDIT: Bueno, pues he probado ambos cambios, y lo que consigo es un bonito cuelgue :( Carga la pantalla y ahi se queda colgado. ¿Hay que hacer algo más aparte de reemplazar la función en 128.h?
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor na_th_an » Vie, 27 Feb 2015, 13:52

Déjame que revise el original. A lo mejor el valor de I no es $F0.

De todos modos, no sé qué hace tu código, así que no sé qué puede haber "chungo" que se me esté escapando. A ciegas es difícil depurar.

EDITO: Sí que es $F0, lo acabo de mirar con el debugger

¿Qué hace tu código nada más empezar? El código es sencillo, sólo pone I a 0 cuando la RAM a paginar no es 0, y a $F0 cuando la RAM a paginar es 0.
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor Nightwolf » Vie, 27 Feb 2015, 13:59

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

Código: Seleccionar todo

// 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
   }
}

Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor na_th_an » Vie, 27 Feb 2015, 14:04

El código completo ayuda porque puedo compilar y probar, sobre todo para ver exactamente en qué instrucción se cuelga. La forma más sencilla pero que ayuda un montón es colocar un

Código: Seleccionar todo

sp_Border (2);


en el código e ir moviéndolo. En el momento en el que al ejecutar se cuelgue sin poner el borde en rojo significa que la instrucción anterior es la que jode la marrana, y eso da un montón de pistas.

¿Qué hace la funcion arkos_init ()?

Otra cosa, ¿El cuelgue es que se queda parao, o que se reinicia?
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor Nightwolf » Vie, 27 Feb 2015, 14:24

Pues se queda cuajaillo un rato, y luego se reinicia.

Con el primer cógido cambiado sugerido, se reinicia en este punto:

allpurposepuntero = tileset;
for (itj = 0; itj < 256; itj++) {
sp_TileArray (itj, allpurposepuntero);
allpurposepuntero += 8;
}
Avatar de Usuario
Metalbrain
Mensajes: 9
Registrado: Mié, 21 May 2014, 21:19

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor Metalbrain » Vie, 27 Feb 2015, 17:21

Tiene pinta de que casca en las interrupciones... ¿estás accediendo a otras páginas de memoria sin deshabilitarlas? Porque en ese caso el cuelgue estaría prácticamente asegurado.
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor Nightwolf » Vie, 27 Feb 2015, 22:39

Pues er.... ciertamente no sé lo del bloqueo este de otras zonas de memoria.
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Mensajepor na_th_an » Dom, 01 Mar 2015, 00:02

Tiene toda la pinta de lo que dice meralbrain. Pero sin ver el código poco te puedo ayudar.

Probablemente la integración con arkos que habéis hecho y mi solución para los problemas de ula snow/ula crash no sean compatibles.
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor Nightwolf » Dom, 01 Mar 2015, 03:44

Na_th_an, te pasé por correo el source por si puedes echarle un ojete cuando puedas a ver si pudiera verse algo, ya que yo estoy perdido :S

De todas formas, he vuelto a revisar, y el Spectrum que tengo en casa es un +2, no un +2a Justamente el que se ve en el video, y que supuestamente es el problemático ¿verdad?

https://www.youtube.com/watch?v=l6AADCbOjlc

Que es igual al del post en el foro que indica que da problemas. En mi Spectrum como decía, carga perfectamente con el Divide (la persona que reporta el problema tiene el mismo error tanto cargando con cinta como cargando con Divide)

EDIT: Ah pues no, sí es un 2A+ (las teclas son iguales que este):

http://en.wikipedia.org/wiki/ZX_Spectru ... _128-2.png

:S
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

Mensajepor Nightwolf » Dom, 01 Mar 2015, 03:59

Bueno, probando ahora la modificación de Metalbrain, el juego se bloquea al lanzar: espera_activa (200); Se queda como una primera nota sonando contínuamente en la pantalla de carga, y no se reinicia, se queda ahí parado hasta los restos. :(

El juego sin las modificaciones, tras reiniciar, ya me cargaba el jspeccy. He puesto el modelo +2, y el juego carga sin ningún problema :S

Volver a “La Churrera”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados