// MTE MK1 (la Churrera) v5.0
// Copyleft 2010-2014, 2020 by the Mojon Twins

// mk1.c
//#define DEBUG_KEYS
#include <cpcrslib.h>
// #include <cpcwyzlib.h>

// We are using some stuff from splib2 directly.
#asm
		XREF _nametable
		LIB cpc_KeysData
		LIB cpc_UpdTileTable
		LIB cpc_InvalidateRect
#endasm

// DON'T touch these
#define FIXBITS 			6	
#define MAX_ENEMS 			3			

#include "my/config.h"
#include "autodefs.h"
#include "prototypes.h"

#define BASE_ROOM_BUFFERS	0xC000 + 0x600
#define BASE_DIRTY_CELLS 	0xC800 + 0x600
#define BASE_ARRAYS 		0xD000 + 0x600
#define BASE_SPRITES 		0xE000 + 0x600
#define BASE_LUT			0xF800 + 0x600

#define BASE_SUPERBUFF  	0x9000

#ifdef SOUND_ARKOS
	// ARKOS
	#define BASE_SFX		0xE800 + 0x600
	#define BASE_ARKOS		34868 	// 0x8834
// #define BASE_MUSIC		32250	// 0x7DFA
	#define BASE_MUSIC		34117	// 0x8545

	// Arkos addresses
	#define PLY_STOP		BASE_ARKOS+0x0753
	#define PLY_INIT		BASE_ARKOS+0x06FE
	#define PLY_SFX_INIT	BASE_ARKOS+0x0762
	#define PLY_PLAY 		BASE_ARKOS+0x000A // 0x883E
	#define PLY_SFX_PLAY	BASE_ARKOS+0x0776
	#define PLY_SetFadeValue	BASE_ARKOS+0x06FE+0x0009

	// #define SIZE_ARKOS_COMPRESSED 1149	// Con apack.exe
	#define SIZE_ARKOS_COMPRESSED 1139  // Con apultra.exe
	
	#define ZONA_MUSICA 0xCE60
	#define ZONA_MUSICA2 0xD641// BASE_ARRAYS + 0x41 (54849)
	
#endif

// Cosas del juego:

#include "definitions.h"

#ifdef ACTIVATE_SCRIPTING
	#include "my/msc-config.h"
#endif

#ifdef MODE_128K
	#include "128k.h"
	#include "assets/librarian.h"
#endif

#include "assets/ay_fx_numbers.h"
#include "aplib.h"
#include "pantallas.h"
#include "assets/pal.h"

#ifdef COMPRESSED_LEVELS
	#include "assets/levels.h"
	#include "assets/extrasprites.h"
	#include "my/levelset.h"
#else
	// #include "assets/mapa.h"
	extern unsigned char mapa [150]@0x40; // entre $40 y $FF hay 192bytes libres que puedo usar para meter el mapa (150bytes al ser una pantalla solo) y los enemigos (30bytes)
		// #asm
			// ._mapa defs 150
		// #endasm
		
	#include "assets/tileset.h"
	
	// #include "assets/enems.h"
	typedef struct {
		unsigned char x, y;
		unsigned char x1, y1, x2, y2;
		char mx, my;
		unsigned char t, life;
	} MALOTE;
	typedef struct {
		unsigned char xy, tipo, act;
	} HOTSPOT;
	extern MALOTE malotes [30]@0xD6; // entre $40 y $FF hay 192bytes libres que puedo usar para meter el mapa (150bytes al ser una pantalla solo) y los enemigos (30bytes)
	// #asm
		// ._malotes defs MAP_W * MAP_H * 3 * 10
	// #endasm
	extern HOTSPOT hotspots [0];
	#asm
		._hotspots defs MAP_W * MAP_H * 3
	#endasm
	#include "assets/sprites.h"
	#include "assets/extrasprites.h"
	
	#include "my/levelset.h" // METO EL SISTEMA DE NIVELES PERO SOLO PARA MAPA Y ENEMIGOS PARA AHORRAR MEMORIA EN BUFFER Y COMPRIMIR LOS MAPAS Y ENEMIGOS.
	
#endif
#include "assets/spriteset_mappings.h"
#include "assets/trpixlut.h"

#include "my/ci/extra_vars.h"

#include "printer.h"
#include "engine/update.h"
#include "my/ci/extra_functions.h"

#ifdef ACTIVATE_SCRIPTING
	#ifdef ENABLE_EXTERN_CODE
		#include "my/extern.h"
	#endif
	#include "my/msc.h"
#endif

#include "engine/general.h"
#ifdef BREAKABLE_WALLS
	#include "engine/breakable.h"
#endif
#ifdef PLAYER_CAN_FIRE
	#include "engine/bullets.h"
#endif
#ifdef ENABLE_SIMPLE_COCOS
	#include "engine/simple_cocos.h"
#endif
#ifdef COMPRESSED_LEVELS
	#include "engine/c_levels.h"
#endif
#include "engine.h"
#include "engine/player.h"
#include "engine/enengine.h"
// #include "engine/hotspots.h"

#ifdef ENABLE_CHECKPOINTS
	#include "savegame.h"
#endif

#ifdef SOUND_WYZ
	#include "my/wyz/efectos.h"
	#include "my/wyz/instrumentos.h"
	#include "my/wyz/songs.h"
	#include "wyz_player.h"
#endif

#ifdef SOUND_ARKOS
	#include "sound/arkos_cpc.h"
#endif

#include "my/title_screen.h"
#include "mainloop.h"
