#define INT_OFFSCREEN 1
#define mask_flip        0b00000001
#define mask_jump        0b00000010
#define mask_only_solids 0b00000100
#define mask_half_speed  0b00001000
#define mask_dizzy       0b10000000

#define ID_OBJECTS_ONCE 36
#define ID_DIARY   45
#define ID_OBJECTS 52
#define ID_SPECIAL_MSG 62
#define HINT_TIME_ON_SCREEN 128  //No puede ser 255

#define SECOND 32768
#define MAP_WIDTH  34
#define MAP_HEIGHT  39
#define MAX_ENTITIES 5
#define HOSE_MAX 200

//TILES
#define MAX_TILES_PLATFORMS 15
#define MAX_TILES_SOLID 31


#define LOOPS_PER_HOUR 256

typedef struct {
   u8 id;
   u8 x;
   u8 y;
   i8 movX; //0=nada; -1=izquierda;   1=derecha
   i8 movY; //0=nada; -1=arriba;      1=abajo
   u8 x0;
   u8 y0;
   u8 height;
   u8 width;
   i8 data1;
   u8 falling;
   u8 jumping;
   u8 properties;
   u8* sprite_f1; //sprite asociado frame 1
   u8* sprite_f2; //sprite asociado frame 2
   u8* sprite_f3; //sprite asociado frame 2
} TEntity;

extern const u8 paletteM0[16];
extern const u8 symphony[5];
extern u8 current_palette[16];
extern u8 current_map[MAP_WIDTH * MAP_HEIGHT];
extern TEntity entities[MAX_ENTITIES]; 
extern u8 music_counter;
extern u8 music_playing;
extern i8 last_mov;
extern u8 day;
extern u8 screen;
extern u16 clock;
extern u8 frame;
extern u8 eod; //End of Day
extern u8 energy;
extern u8 hiscore;
extern u8 reset_face;
extern u8 hour;
extern u8 activities[ID_SPECIAL_MSG];
extern u8 possibleActivity;
extern u8 object;
extern u8 textPrinted; //Para saber si se ha escrito en la consola
extern u8 using2ndbtn; //Se usa el 2º botón del joystick
extern u8 firstTime; //Primera partida
extern u8 bufferFrame1[96]; //Bufer para secundarios que giran según personaje
extern u8 bufferFrame2[96];
extern u16 telephone; // Donde situar teléfono en oficina (0: no hay)
extern u8 vehicles; // Flag para saber si el sprite de los vehículos de la carretera están girados o no
extern u8 hintText; // ID de texto-consejo
extern u8 hintTextTime; // Tiempo restante de texto-consejo
extern u8 carScreen; // Pantalla en la que está el coche
extern u8 dropsCollected; // Límite de gotas de la caverna
extern u8 baskets; // Canastas conseguidas
extern u8 spiders; // Arañas ahuyentadas
extern u8 hose; //Presión de la manguera
extern u8 idle; // ciclos sin mover personaje
extern u8 note; // para sólo reproducir una nota del piano
extern u8 symphony_idx; //índice para comprobar melodía del piano
extern u8* spriteset; //Puntero al sprite del protagonista
extern u8* faces; //Puntero a la cara del marcador
extern u8 extra_char; //Protagonista alternativo
extern u8 swiping; //Controlar si estamos realizando el barrido de pantalla para no usar modo 1
extern u8 pressed; //Tiempo pulsado Disparo
extern const char txt_intro1[39];
extern const char txt_intro2[39];
extern const char txt_intro3[39];
extern const char txt_intro4[39];
extern const char txt_intro5[39];
extern const char txt_intro6[39];
extern const char txt_intro7[39];
extern const char txt_intro8[39];
extern const char txt_highscore[11];
extern const char txt_finalscore[12];
extern const char txt_pressKey[23];
extern const char txt_credits1[23];
extern const char txt_credits2[23];
extern const char txt_credits3[23];
extern const char txt_credits4[23];
extern const char txt_pause[40];
extern const char txt_monday[13];
extern const char txt_tuesday[14];
extern const char txt_wednesday[16];
extern const char txt_thursday[15];
extern const char txt_friday[14];
extern const char txt_ende1[34];
extern const char txt_ende2[41];
extern const char txt_ende3[37];
extern const char txt_ende4[41];

void waitBorder();
void intHandler();
void setInterruptAtVSYNCStart(void *intHdl);
void playFX (u8 instrument, u8 note);
void mydrawStringM1 (void* string, void* video_memory) __z88dk_callee;