📄 aquajack.c
字号:
/****************************************************************************** * * * AQUA JACK (C) 1989 TAITO CORPORATION * * * ****************************************************************************** Aqua Jack Alt set removed. Only difference was the "Taito Region" byte which is used to determine the game version: Japan, US or World*/#include "gameinc.h"#include "aquajack.h"#include "tc100scn.h"#include "tc110pcr.h"#include "tc150rod.h"#include "tc220ioc.h"#include "taitosnd.h"#include "debug.h"#include "sasound.h" // sample support routinesstatic struct DIR_INFO aqua_jack_dirs[] ={ { "aqua_jack", }, { "aquajack", }, { NULL, },};static struct ROM_INFO aqua_jack_roms[] ={ { "b77-01.rom", 0x00080000, 0xcdab000d, 0, 0, 0, }, { "b77-02.rom", 0x00080000, 0xdaea0d2e, 0, 0, 0, }, { "b77-03.rom", 0x00080000, 0x9a3030a7, 0, 0, 0, }, { "b77-04.rom", 0x00080000, 0xbed0be6c, 0, 0, 0, }, { "b77-05.rom", 0x00080000, 0x7238f0ff, 0, 0, 0, }, { "b77-06.rom", 0x00080000, 0xce2aed00, 0, 0, 0, }, { "b77-07.rom", 0x00080000, 0x7db1fc5e, 0, 0, 0, }, { "b77-08.rom", 0x00080000, 0x119b9485, 0, 0, 0, }, { "b77-09.rom", 0x00080000, 0x948e5ad9, 0, 0, 0, }, { "b77-20.rom", 0x00010000, 0x84ba54b7, 0, 0, 0, }, { "b77-21.rom", 0x00020000, 0x23436845, 0, 0, 0, }, { "b77-22.rom", 0x00020000, 0x67400dde, 0, 0, 0, }, { "b77-23.rom", 0x00020000, 0x395a7d1c, 0, 0, 0, }, { "b77-24.rom", 0x00020000, 0x95e643ed, 0, 0, 0, }, { NULL, 0, 0, 0, 0, 0, },};static struct INPUT_INFO aqua_jack_inputs[] ={ { KB_DEF_COIN1, MSG_COIN1, 0x01F104, 0x04, BIT_ACTIVE_0 }, { KB_DEF_COIN2, MSG_COIN2, 0x01F104, 0x08, BIT_ACTIVE_0 }, { KB_DEF_TILT, MSG_TILT, 0x01F104, 0x20, BIT_ACTIVE_0 }, { KB_DEF_SERVICE, MSG_SERVICE, 0x01F104, 0x10, BIT_ACTIVE_0 }, { KB_DEF_P1_UP, MSG_P1_UP, 0x01F106, 0x08, BIT_ACTIVE_0 }, { KB_DEF_P1_DOWN, MSG_P1_DOWN, 0x01F106, 0x01, BIT_ACTIVE_0 }, { KB_DEF_P1_LEFT, MSG_P1_LEFT, 0x01F106, 0x02, BIT_ACTIVE_0 }, { KB_DEF_P1_RIGHT, MSG_P1_RIGHT, 0x01F106, 0x04, BIT_ACTIVE_0 }, { KB_DEF_P1_B1, "Missile", 0x01F106, 0x10, BIT_ACTIVE_0 }, { KB_DEF_P1_B2, "Jump", 0x01F106, 0x20, BIT_ACTIVE_0 }, { KB_DEF_P1_B3, "Vulcan", 0x01F106, 0x40, BIT_ACTIVE_0 }, { KB_DEF_P1_B4, "Accelerate?", 0x01F10E, 0xFF, BIT_ACTIVE_0 }, { 0, NULL, 0, 0, 0 },};static struct DSW_DATA dsw_data_aqua_jack_0[] ={ { "Cabinet Moves", 0x01, 0x02 }, { MSG_YES, 0x01, 0x00 }, { MSG_NO, 0x00, 0x00 }, { MSG_SCREEN, 0x02, 0x02 }, { MSG_NORMAL, 0x02, 0x00 }, { MSG_INVERT, 0x00, 0x00 }, { MSG_TEST_MODE, 0x04, 0x02 }, { MSG_OFF, 0x04, 0x00 }, { MSG_ON, 0x00, 0x00 }, { MSG_DEMO_SOUND, 0x08, 0x02 }, { MSG_ON, 0x08, 0x00 }, { MSG_OFF, 0x00, 0x00 }, { MSG_COIN1, 0x30, 0x04 }, { MSG_1COIN_1PLAY, 0x30, 0x00 }, { MSG_2COIN_1PLAY, 0x20, 0x00 }, { MSG_3COIN_1PLAY, 0x10, 0x00 }, { MSG_4COIN_1PLAY, 0x00, 0x00 }, { MSG_COIN2, 0xC0, 0x04 }, { MSG_1COIN_1PLAY, 0xC0, 0x00 }, { MSG_1COIN_1PLAY, 0x80, 0x00 }, { MSG_2COIN_1PLAY, 0x40, 0x00 }, { MSG_3COIN_1PLAY, 0x00, 0x00 }, { NULL, 0, 0, },};static struct DSW_DATA dsw_data_aqua_jack_1[] ={ { MSG_DIFFICULTY, 0x03, 0x04 }, { MSG_NORMAL, 0x03, 0x00 }, { MSG_EASY, 0x02, 0x00 }, { MSG_HARD, 0x01, 0x00 }, { MSG_HARDEST, 0x00, 0x00 }, { "Bonus Life", 0x0C, 0x04 }, { "50k", 0x0C, 0x00 }, { "80k", 0x08, 0x00 }, { "100k", 0x04, 0x00 }, { "30k", 0x00, 0x00 }, { "Lives", 0x30, 0x04 }, { "3", 0x30, 0x00 }, { "2", 0x20, 0x00 }, { "1", 0x10, 0x00 }, { "5", 0x00, 0x00 }, // Bits 7 & 8 are unused according to manual { NULL, 0, 0, },};static struct DSW_INFO aqua_jack_dsw[] ={ { 0x01F100, 0xFF, dsw_data_aqua_jack_0 }, { 0x01F102, 0xFF, dsw_data_aqua_jack_1 }, { 0, 0, NULL, },};static struct ROMSW_DATA romsw_data_aqua_jack_0[] ={ { "Taito Japan (notice)", 0x01 }, { "Taito America", 0x02 }, { "Taito Japan (World)", 0x03 }, { NULL, 0 },};static struct ROMSW_INFO aqua_jack_romsw[] ={ { 0x03FFFF, 0x01, romsw_data_aqua_jack_0 }, { 0, 0, NULL },};static struct VIDEO_INFO aqua_jack_video ={ draw_aqua_jack, 320, 224, 32, VIDEO_ROTATE_NORMAL| VIDEO_ROTATABLE,};struct GAME_MAIN game_aqua_jack ={ aqua_jack_dirs, aqua_jack_roms, aqua_jack_inputs, aqua_jack_dsw, aqua_jack_romsw, load_aqua_jack, clear_aqua_jack, &aqua_jack_video, execute_aqua_jack_frame, "aquajack", "Aqua Jack", NULL, COMPANY_ID_TAITO, "B77", 1990, taito_ym2610_sound, GAME_SHOOT,};#define OBJ_A_COUNT (0x7FBF)// OBJECT TILE MAPSstatic UINT8 *OBJECT_MAP;// 16x16 OBJECT TILES BANK Astatic UINT8 *GFX_OBJ_A;static UINT8 *GFX_OBJ_A_SOLID;static UINT8 *zoom16_ofs;static UINT8 *zoom8_ofs;static UINT8 *RAM_VIDEO;static UINT8 *RAM_SCROLL;static UINT8 *RAM_INPUT;static UINT8 *GFX_BG0_SOLID;static UINT8 *GFX_LINES;void load_aqua_jack(void){ int ta,tb,tc; UINT8 *TMP; if(!(GFX=AllocateMem(0x100000))) return; if(!(GFX_LINES=AllocateMem(0x200000))) return; if(!(GFX_OBJ_A=AllocateMem(OBJ_A_COUNT*0x80))) return; if(!(OBJECT_MAP=AllocateMem(0x80000))) return; if(!(TMP=AllocateMem(0x80000))) return; if(!load_rom_index(6, TMP, 0x80000)) return; // 1024x1 ROAD LINES tb=0; for(ta=0;ta<0x80000;ta+=2){ tc=ReadWord(&TMP[ta]); GFX_LINES[tb+0] =((tc&0x8000)>>(14)); GFX_LINES[tb+1] =((tc&0x4000)>>(13)); GFX_LINES[tb+2] =((tc&0x2000)>>(12)); GFX_LINES[tb+3] =((tc&0x1000)>>(11)); GFX_LINES[tb+4] =((tc&0x0800)>>(10)); GFX_LINES[tb+5] =((tc&0x0400)>>( 9)); GFX_LINES[tb+6] =((tc&0x0200)>>( 8)); GFX_LINES[tb+7] =((tc&0x0100)>>( 7)); GFX_LINES[tb+0]|=((tc&0x0080)>>( 7)); GFX_LINES[tb+1]|=((tc&0x0040)>>( 6)); GFX_LINES[tb+2]|=((tc&0x0020)>>( 5)); GFX_LINES[tb+3]|=((tc&0x0010)>>( 4)); GFX_LINES[tb+4]|=((tc&0x0008)>>( 3)); GFX_LINES[tb+5]|=((tc&0x0004)>>( 2)); GFX_LINES[tb+6]|=((tc&0x0002)>>( 1)); GFX_LINES[tb+7]|=((tc&0x0001)>>( 0)); tb+=8; } if(!load_rom_index(0, TMP, OBJ_A_COUNT*0x10)) return; // 16x16 OBJ A tb=0; for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){ tc=ReadWord(&TMP[ta]); GFX_OBJ_A[tb+0] =((tc&0x8000)>>(15)); GFX_OBJ_A[tb+1] =((tc&0x4000)>>(14)); GFX_OBJ_A[tb+2] =((tc&0x2000)>>(13)); GFX_OBJ_A[tb+3] =((tc&0x1000)>>(12)); GFX_OBJ_A[tb+4] =((tc&0x0800)>>(11)); GFX_OBJ_A[tb+5] =((tc&0x0400)>>(10)); GFX_OBJ_A[tb+6] =((tc&0x0200)>>( 9)); GFX_OBJ_A[tb+7] =((tc&0x0100)>>( 8)); GFX_OBJ_A[tb+8] =((tc&0x0080)>>( 7)); GFX_OBJ_A[tb+9] =((tc&0x0040)>>( 6)); GFX_OBJ_A[tb+10]=((tc&0x0020)>>( 5)); GFX_OBJ_A[tb+11]=((tc&0x0010)>>( 4)); GFX_OBJ_A[tb+12]=((tc&0x0008)>>( 3)); GFX_OBJ_A[tb+13]=((tc&0x0004)>>( 2)); GFX_OBJ_A[tb+14]=((tc&0x0002)>>( 1)); GFX_OBJ_A[tb+15]=((tc&0x0001)>>( 0)); tb+=16; } if(!load_rom_index(1, TMP, OBJ_A_COUNT*0x10)) return; // 16x16 OBJ A tb=0; for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){ tc=ReadWord(&TMP[ta]); GFX_OBJ_A[tb+0] |=((tc&0x8000)>>(14)); GFX_OBJ_A[tb+1] |=((tc&0x4000)>>(13)); GFX_OBJ_A[tb+2] |=((tc&0x2000)>>(12)); GFX_OBJ_A[tb+3] |=((tc&0x1000)>>(11)); GFX_OBJ_A[tb+4] |=((tc&0x0800)>>(10)); GFX_OBJ_A[tb+5] |=((tc&0x0400)>>( 9)); GFX_OBJ_A[tb+6] |=((tc&0x0200)>>( 8)); GFX_OBJ_A[tb+7] |=((tc&0x0100)>>( 7)); GFX_OBJ_A[tb+8] |=((tc&0x0080)>>( 6)); GFX_OBJ_A[tb+9] |=((tc&0x0040)>>( 5)); GFX_OBJ_A[tb+10]|=((tc&0x0020)>>( 4)); GFX_OBJ_A[tb+11]|=((tc&0x0010)>>( 3)); GFX_OBJ_A[tb+12]|=((tc&0x0008)>>( 2)); GFX_OBJ_A[tb+13]|=((tc&0x0004)>>( 1)); GFX_OBJ_A[tb+14]|=((tc&0x0002)>>( 0)); GFX_OBJ_A[tb+15]|=((tc&0x0001)<<( 1)); tb+=16; } if(!load_rom_index(2, TMP, OBJ_A_COUNT*0x10)) return; // 16x16 OBJ A tb=0; for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){ tc=ReadWord(&TMP[ta]); GFX_OBJ_A[tb+0] |=((tc&0x8000)>>(13)); GFX_OBJ_A[tb+1] |=((tc&0x4000)>>(12)); GFX_OBJ_A[tb+2] |=((tc&0x2000)>>(11)); GFX_OBJ_A[tb+3] |=((tc&0x1000)>>(10)); GFX_OBJ_A[tb+4] |=((tc&0x0800)>>( 9)); GFX_OBJ_A[tb+5] |=((tc&0x0400)>>( 8)); GFX_OBJ_A[tb+6] |=((tc&0x0200)>>( 7)); GFX_OBJ_A[tb+7] |=((tc&0x0100)>>( 6)); GFX_OBJ_A[tb+8] |=((tc&0x0080)>>( 5)); GFX_OBJ_A[tb+9] |=((tc&0x0040)>>( 4)); GFX_OBJ_A[tb+10]|=((tc&0x0020)>>( 3)); GFX_OBJ_A[tb+11]|=((tc&0x0010)>>( 2)); GFX_OBJ_A[tb+12]|=((tc&0x0008)>>( 1)); GFX_OBJ_A[tb+13]|=((tc&0x0004)>>( 0)); GFX_OBJ_A[tb+14]|=((tc&0x0002)<<( 1)); GFX_OBJ_A[tb+15]|=((tc&0x0001)<<( 2)); tb+=16; } if(!load_rom_index(3, TMP, OBJ_A_COUNT*0x10)) return; // 16x16 OBJ A tb=0; for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){ tc=ReadWord(&TMP[ta]); GFX_OBJ_A[tb+0] |=((tc&0x8000)>>(12)); GFX_OBJ_A[tb+1] |=((tc&0x4000)>>(11)); GFX_OBJ_A[tb+2] |=((tc&0x2000)>>(10)); GFX_OBJ_A[tb+3] |=((tc&0x1000)>>( 9)); GFX_OBJ_A[tb+4] |=((tc&0x0800)>>( 8)); GFX_OBJ_A[tb+5] |=((tc&0x0400)>>( 7)); GFX_OBJ_A[tb+6] |=((tc&0x0200)>>( 6)); GFX_OBJ_A[tb+7] |=((tc&0x0100)>>( 5)); GFX_OBJ_A[tb+8] |=((tc&0x0080)>>( 4)); GFX_OBJ_A[tb+9] |=((tc&0x0040)>>( 3)); GFX_OBJ_A[tb+10]|=((tc&0x0020)>>( 2)); GFX_OBJ_A[tb+11]|=((tc&0x0010)>>( 1)); GFX_OBJ_A[tb+12]|=((tc&0x0008)>>( 0)); GFX_OBJ_A[tb+13]|=((tc&0x0004)<<( 1)); GFX_OBJ_A[tb+14]|=((tc&0x0002)<<( 2)); GFX_OBJ_A[tb+15]|=((tc&0x0001)<<( 3)); tb+=16; } if(!load_rom_index(5, OBJECT_MAP, 0x80000)) return; // TILE MAPPING if(!load_rom_index(4, TMP, 0x80000)) return; // 8x8 BG0 TILES tb=0; for(ta=0;ta<0x80000;ta+=2){ tc=ReadWord(&TMP[ta]); GFX[tb+0] = ((tc&0xF000)>>12); GFX[tb+1] = ((tc&0x0F00)>> 8); GFX[tb+2] = ((tc&0x00F0)>> 4); GFX[tb+3] = ((tc&0x000F)>> 0); tb+=4; } FreeMem(TMP); GFX_OBJ_A_SOLID = make_solid_mask_16x8(GFX_OBJ_A, OBJ_A_COUNT); GFX_BG0_SOLID = make_solid_mask_8x8 (GFX, 0x4000); RAMSize=0x44000+0x10000; if(!(RAM=AllocateMem(RAMSize))) return; if(!(ROM=AllocateMem(0x80000))) return; if(!load_rom_index(11, RAM, 0x20000)) return; // 68000 MAIN for(ta=0;ta<0x20000;ta++){ ROM[ta+ta]=RAM[ta]; } if(!load_rom_index(10, RAM, 0x20000)) return; for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+1]=RAM[ta]; } if(!load_rom_index(13, RAM, 0x20000)) return; // 68000 SUB for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x40000]=RAM[ta]; } if(!load_rom_index(12, RAM, 0x20000)) return; for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x40001]=RAM[ta];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -