Combat Vehicle changes

- new "speed" mod
- small stages
This commit is contained in:
tildearrow 2025-03-14 04:35:13 -05:00
parent b52699d370
commit 896c84c205
3 changed files with 325 additions and 141 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View file

@ -1613,101 +1613,101 @@ static const unsigned char tileDataC[]={
0xd3,0xb4,0xab,0x22,0x43,0xe8,0x4c,0x84,0x8b,0xba,0x73,0xec,
0xde,0xbb,0xf0,0x6f,0x5f,0xfc,0xf8,0xb4,0xea,0xb7,0x1c,0x0a,
0x32,0xb4,0xb6,0x8c,0xba,0x41,0x45,0x1a,0xe7,0xc6,0x97,0xfe,
0xd7,0x21,0x29,0x76,0x72,0x77,0x2c,0x9e,0xd8,0xaf,0xde,0xf4,
0xb9,0xbf,0xf4,0x94,0x5b,0x1f,0xf1,0x04,0x44,0x7e,0x12,0xb7,
0xdf,0x7d,0xf3,0xa3,0x69,0xa8,0x6c,0xdb,0xfd,0x5a,0xc9,0x9f,
0x60,0xf1,0xab,0xf5,0xfc,0xf1,0xb7,0x23,0x99,0x11,0xc8,0x7a,
0x22,0x8e,0x5f,0x7b,0x32,0x95,0xff,0xfe,0xe7,0x6f,0x62,0xba,
0x03,0xd1,0xfd,0xb0,0xc7,0x85,0xf8,0x8f,0x00,0x8f,0x8c,0xfe,
0x62,0x08,0x80,0x9e,0xe9,0x89,0x04,0x70,0x00,0x0b,0xd0,0x01,
0x75,0x07,0xfc,0xf8,0xed,0x99,0x28,0x08,0x5f,0xa4,0x6b,0xdf,
0x1e,0x10,0x03,0x91,0x65,0x77,0xfe,0x8f,0x88,0x00,0xc3,0x76,
0xb6,0x88,0x6b,0x32,0x50,0x04,0xd9,0xe8,0xee,0x38,0xf0,0xb7,
0xff,0x94,0xcc,0x90,0x4e,0x0b,0xfe,0x46,0x90,0x05,0x93,0x66,
0xfd,0xd8,0x6f,0xe7,0xbe,0x4a,0x6e,0x6a,0x8a,0xeb,0x5a,0xb0,
0xf8,0x60,0xa8,0xdb,0x62,0x50,0x5f,0x66,0x50,0x69,0x6c,0xd0,
0x07,0x5d,0xf0,0xf0,0xc2,0xcf,0xe9,0x86,0x8a,0x22,0x30,0x87,
0xbf,0x7e,0x10,0x09,0xbd,0xab,0xa2,0x86,0x90,0x5b,0x3c,0x4e,
0x5b,0x56,0x10,0x09,0x45,0x50,0x09,0x97,0x70,0x57,0x88,0x10,
0xcf,0xaa,0x10,0x57,0xa2,0xd0,0x06,0xa7,0x70,0xc4,0x42,0xe7,
0xdd,0x4e,0x26,0xda,0xb4,0xd0,0x07,0x13,0x2e,0x4b,0x0a,0x85,
0x4f,0xfc,0x44,0x0c,0xd3,0x50,0x88,0xdc,0x84,0xfb,0xd6,0xa1,
0x00,0xde,0x10,0x0e,0x1b,0x40,0x0e,0xe7,0x70,0x1d,0x16,0xc2,
0x0d,0xe1,0xf0,0x0d,0xe7,0x50,0x0f,0x1b,0x20,0x4d,0xf0,0x10,
0x0f,0xf7,0xb0,0x01,0xea,0xd0,0x0f,0xe3,0x10,0x10,0xf9,0x30,
0x4d,0xee,0xf0,0x0f,0xf7,0xb0,0x0e,0x01,0x00,0x11,0x09,0x11,
0x10,0xfb,0x70,0x10,0x0b,0x00,0x10,0x05,0x31,0x12,0x0b,0x91,
0x0f,0xd7,0x01,0x13,0x33,0x51,0x13,0x35,0xd1,0x0e,0x37,0xd1,
0x13,0x33,0x91,0x11,0x07,0x71,0x12,0xed,0x50,0x14,0x0b,0xf1,
0x13,0x4f,0x91,0x11,0x4f,0xf1,0x13,0x23,0x51,0x12,0x15,0x11,
0x00,0x58,0xd1,0x12,0x53,0x51,0x15,0x41,0x51,0x16,0x67,0x11,
0x13,0x43,0xd1,0x0f,0x47,0x11,0x17,0x13,0x71,0x12,0x6d,0x11,
0x14,0x7d,0x51,0x13,0x61,0xd1,0x15,0x85,0xf1,0x11,0x1b,0x31,
0x0f,0x5d,0x71,0x17,0x1d,0x71,0x0f,0x93,0xf1,0x18,0xf5,0x70,
0x11,0x8d,0xb1,0x15,0xff,0x01,0x91,0x18,0xe9,0xf0,0x15,0x2b,
0xb1,0x10,0xa7,0x51,0x0e,0x29,0xb1,0x14,0x8b,0x71,0x1b,0xa9,
0x91,0x19,0xa3,0x71,0x19,0xa1,0x51,0x17,0xc5,0xf1,0x1a,0xad,
0xd1,0x19,0xab,0xb1,0x1b,0xf5,0x10,0x1b,0x03,0x11,0x1d,0x73,
0xb1,0x10,0xbf,0x71,0x1c,0xd3,0x71,0x0e,0xe1,0x11,0x19,0xc9,
0x51,0x1a,0xcd,0x91,0x1a,0xd7,0x51,0x0e,0xd7,0x51,0x1b,0xdd,
0x91,0x1b,0xfd,0xd1,0x1b,0xed,0x31,0x1c,0xe5,0xf1,0x19,0xe5,
0x71,0x1f,0xf1,0x31,0x1b,0xdb,0x91,0x17,0xf7,0x90,0x1f,0x15,
0x52,0x19,0xf5,0x90,0x1e,0xcf,0x31,0x22,0x07,0x12,0x20,0x13,
0x72,0x22,0xd5,0x11,0x21,0xd9,0x51,0x1f,0x1b,0xa0,0x21,0x37,
0xf2,0x22,0xd9,0xf1,0x23,0xe5,0xf0,0x23,0x0b,0xb2,0x22,0xe7,
0xb0,0x23,0x33,0xf2,0x20,0x09,0xd2,0x21,0x9b,0x91,0x22,0x17,
0xd2,0x22,0x05,0x12,0x22,0x61,0x12,0x24,0x65,0x32,0x25,0x4b,
0xb2,0x1f,0x5d,0xd2,0x24,0x33,0xf2,0x26,0x1f,0x72,0x1e,0x65,
0x92,0x24,0x71,0x52,0x24,0x7d,0x92,0x14,0x4b,0xb2,0x26,0x71,
0x72,0x27,0x59,0x12,0x23,0x55,0xd2,0x23,0x85,0x32,0x24,0x2f,
0x51,0x25,0x9b,0xf2,0x24,0x0d,0x92,0x23,0x75,0x72,0x25,0xc1,
0x31,0x26,0x9f,0x92,0x26,0x9d,0xd2,0x26,0x87,0x12,0x28,0xa7,
0x52,0x29,0x51,0xd2,0x2b,0xb7,0x72,0x29,0xb1,0x52,0x2a,0x47,
0x92,0x2b,0x79,0xb2,0x28,0x79,0xf2,0x28,0xad,0x32,0x27,0xbf,
0xb2,0x2c,0x99,0x32,0x2b,0xcd,0x12,0x2a,0xa9,0x72,0x23,0xa3,
0x92,0x28,0x2f,0xf1,0x1e,0xf1,0xf0,0x19,0xff,0xf3,0xd2,0x0f,
0x19,0x91,0x2f,0xdf,0x70,0x2f,0x19,0x12,0x2c,0x07,0xb1,0x0e,
0x2d,0xb1,0x2e,0xfd,0xb0,0x30,0xcb,0x71,0x10,0xfd,0x52,0x30,
0xf5,0xd2,0x0e,0xff,0x12,0x0e,0x19,0x33,0x29,0xe1,0x30,0x30,
0x27,0xb3,0x2b,0x09,0x13,0x00,0x0c,0x73,0x30,0x11,0x33,0x33,
0x15,0xb3,0x2f,0xd7,0x01,0x32,0x2b,0xb3,0x2d,0x3f,0x33,0x34,
0x1f,0xb3,0x31,0xef,0x12,0x33,0x35,0x53,0x2a,0x53,0xd3,0x33,
0xf1,0x50,0x32,0x47,0x13,0x30,0x4d,0xd3,0x32,0x23,0x13,0x34,
0x4f,0x33,0x36,0x5f,0x33,0x2d,0x91,0x12,0x36,0x0b,0x20,0x31,
0x21,0x53,0x37,0xd3,0xb2,0x37,0x6d,0x93,0x36,0x4b,0x13,0x37,
0xc3,0xd2,0x35,0x6b,0x73,0x36,0x45,0x33,0x37,0xd9,0x12,0x38,
0x3b,0xd3,0x37,0x99,0xd3,0x38,0x79,0xd3,0x39,0x85,0xf3,0x0d,
0x8b,0x13,0x33,0xad,0x33,0x12,0xb1,0xd3,0x31,0xb5,0x13,0x35,
0x39,0x53,0x35,0xbb,0xd3,0x31,0xbf,0xf3,0x38,0x89,0x13,0x39,
0x77,0xb3,0x3a,0xcb,0xb3,0x39,0xb9,0xf3,0x32,0xbd,0xb3,0x35,
0xd1,0x32,0x3a,0x83,0x73,0x36,0xcf,0x93,0x3c,0x9f,0x53,0x3d,
0xa5,0xb3,0x3e,0x7f,0xf3,0x3d,0xa7,0x33,0x3e,0xa1,0x93,0x35,
0xe9,0x13,0x3d,0xf3,0xf3,0x3e,0x0b,0xa0,0x3e,0x95,0x33,0x3a,
0xf1,0xb3,0x3f,0xa9,0x93,0x3f,0xd9,0xd3,0x3f,0xe7,0x13,0x41,
0x07,0x54,0x36,0xcd,0x33,0x41,0xc3,0xb3,0x3d,0x0d,0x54,0x41,
0x1b,0xf4,0x3f,0xaf,0xf3,0x42,0xb3,0x33,0x43,0xb7,0x73,0x43,
0xc1,0x93,0x32,0xf5,0x13,0x42,0xc5,0x53,0x3a,0x45,0x54,0x3e,
0xff,0x85,0x93,0x40,0x59,0xd1,0x41,0x03,0x54,0x44,0xe1,0x33,
0x44,0xdb,0x93,0x45,0x97,0xb3,0x16,0x67,0xb1,0x13,0x81,0x31,
0x46,0x55,0x71,0x46,0x81,0x11,0x47,0x6b,0x14,0x47,0x6d,0x51,
0x47,0x6d,0xb4,0x43,0x6f,0xf3,0x47,0x87,0xd3,0x44,0x1f,0x74,
0x39,0x57,0x14,0x44,0x8b,0xd4,0x45,0x8f,0xb4,0x40,0x05,0x54,
0x0d,0xc1,0x24,0x48,0x4f,0x54,0x43,0x19,0x74,0x3f,0x8d,0x94,
0x44,0x23,0xf4,0x43,0xab,0xb4,0x49,0xb3,0x54,0x4b,0xb7,0x94,
0x4b,0xbb,0xd4,0x4b,0xbf,0x14,0x4c,0xc3,0x54,0x4c,0xc7,0x94,
0x4c,0xcb,0xd4,0x4c,0xcf,0x14,0x4d,0xd3,0x54,0x4d,0xd7,0x94,
0x4d,0xdb,0xd4,0x4d,0xdf,0x14,0x4e,0xe3,0x54,0x4e,0xe7,0x94,
0x4e,0xeb,0xd4,0x4e,0xef,0x14,0x4f,0xf3,0x54,0x4f,0xf7,0x94,
0x4f,0xfb,0xd4,0x4f,0xff,0x14,0x50,0x03,0x55,0x50,0x07,0x95,
0x50,0x0b,0xd5,0x50,0x0f,0x15,0x51,0x13,0x55,0x51,0x17,0x95,
0x51,0x1b,0xd5,0x51,0x1f,0x15,0x52,0x23,0x55,0x52,0x27,0x95,
0x52,0x2b,0xd5,0x52,0x2f,0x15,0x53,0x33,0x55,0x53,0x37,0x95,
0x53,0x3b,0xd5,0x53,0x3f,0x15,0x54,0x43,0x55,0x54,0x47,0x95,
0x54,0x4b,0xd5,0x54,0x4f,0x15,0x55,0x53,0x55,0x55,0x57,0x95,
0x55,0x5b,0xd5,0x55,0x5f,0x15,0x56,0x63,0x55,0x56,0x67,0x95,
0x56,0x6b,0xd5,0x56,0x6f,0x15,0x57,0x73,0x55,0x57,0x77,0x95,
0x57,0x7b,0xd5,0x57,0x7f,0x15,0x58,0x83,0x55,0x58,0x87,0x95,
0x58,0x8b,0xd5,0x58,0x8f,0x15,0x59,0x93,0x55,0x59,0x97,0x95,
0xd7,0x21,0x29,0x76,0x72,0x77,0x2c,0x9e,0xd8,0xaf,0x5e,0xbc,
0x78,0x06,0x56,0xef,0x73,0xdd,0xf8,0x43,0x65,0xdb,0xee,0xd7,
0x0a,0xc7,0x04,0x9b,0x1f,0x57,0xf1,0xe2,0x91,0x6e,0xd6,0xaf,
0x9e,0xf6,0xf7,0xe5,0xfd,0xd3,0xc7,0xd3,0x1c,0xfb,0x6b,0x3d,
0xf4,0x73,0x9e,0xc2,0xe9,0x77,0x5e,0x70,0xdc,0xcf,0x7f,0xf8,
0xc7,0xff,0x42,0xe4,0xcf,0x4b,0x26,0x0e,0x81,0x58,0x8f,0x88,
0x90,0x8f,0x80,0x94,0x46,0xfd,0x00,0x90,0x30,0xcc,0x63,0x47,
0x18,0xb0,0x28,0xc0,0xaf,0xf8,0x08,0x30,0x86,0x00,0x68,0x85,
0xce,0x0f,0x7b,0x5c,0x68,0x4d,0x7a,0x82,0x89,0x0a,0xe3,0x01,
0xe1,0xa3,0x3c,0x24,0xf0,0xf6,0x28,0xf0,0xf0,0xf8,0xed,0x99,
0xff,0x9e,0x28,0x03,0x35,0xb0,0x83,0xfc,0xef,0x3d,0xd6,0x83,
0x05,0xb3,0xe4,0x05,0x23,0x50,0x00,0xff,0xe4,0xee,0xe8,0xae,
0xcc,0x2e,0xe7,0x76,0xb6,0x67,0x05,0xa5,0x46,0x4e,0xb6,0xe8,
0x26,0xd6,0x83,0x03,0xfd,0x4b,0x4e,0x7e,0xe2,0x47,0xd6,0xe3,
0x30,0x66,0x70,0xfe,0xde,0xc8,0x06,0x89,0x08,0x30,0x6c,0x67,
0x8b,0xb8,0x46,0x4d,0x6a,0xa3,0x30,0x82,0xd0,0x08,0x39,0x50,
0x0a,0xf5,0xa2,0x43,0x64,0x50,0x0b,0x91,0x70,0xae,0xac,0x0f,
0xf1,0x98,0xb0,0x76,0x06,0xec,0x52,0x5c,0x4b,0x04,0x1b,0x50,
0x30,0x70,0x63,0x3e,0x8c,0x30,0x02,0xaf,0xd0,0x28,0xa8,0x30,
0x31,0x82,0x90,0x0b,0x1f,0x89,0xfc,0xca,0x6f,0xe7,0xbe,0x4a,
0x6e,0x6a,0xaa,0x0c,0xcd,0xb0,0x07,0x73,0xa3,0x08,0x79,0x64,
0x8b,0xf6,0x10,0x0e,0xad,0x50,0x6a,0x62,0x30,0x0e,0x8b,0xa7,
0x69,0xba,0xad,0x0e,0xf5,0xe5,0x0e,0x15,0x70,0x03,0x09,0x31,
0x04,0x39,0x84,0xff,0x38,0x70,0x2f,0x1c,0xb1,0x10,0x43,0x67,
0x0e,0x87,0x46,0xc4,0x86,0x8a,0x22,0x30,0x87,0xbf,0xf6,0x0f,
0x02,0x03,0x90,0x8d,0x58,0xf0,0x0a,0xf3,0xd0,0xf4,0xbc,0xab,
0xa2,0x9c,0x2e,0xbb,0x3c,0x4e,0x5b,0xd4,0x2a,0x0a,0x29,0x91,
0x22,0x3e,0xf1,0x15,0x01,0xb0,0x36,0x48,0xb1,0x14,0xbd,0x65,
0xd0,0x76,0x4f,0x13,0xf1,0x6c,0x57,0x72,0x71,0x01,0x41,0xb0,
0xff,0x80,0xc9,0x11,0x87,0xa3,0x12,0xfd,0xa5,0x04,0x39,0x86,
0x6f,0x5e,0x6c,0xf5,0x30,0x85,0x16,0x7f,0x31,0x14,0x7d,0xf1,
0xff,0x80,0xd1,0x19,0xff,0x87,0x31,0x95,0xfe,0xa4,0x50,0xf8,
0xc4,0x4f,0x54,0xa7,0xfb,0xb2,0x71,0x1a,0xa5,0x11,0xd8,0x08,
0x27,0xe1,0x92,0x6e,0x1d,0x0a,0x40,0x1c,0xc7,0xb1,0x01,0xca,
0xd1,0x1c,0xd7,0x61,0x21,0xc2,0x71,0x1c,0xc5,0xd1,0x1c,0xdb,
0xb1,0x01,0xd2,0x64,0x1d,0xd7,0xd1,0x1d,0x1b,0x00,0x1d,0xe3,
0x91,0x1c,0xe7,0xf1,0x1d,0xd3,0x44,0x1d,0xe5,0xd1,0x1d,0xd1,
0x11,0x00,0xf6,0xf1,0x1e,0xe7,0x11,0x1e,0xed,0xb1,0x00,0xe6,
0xb1,0x1e,0x09,0x12,0x1f,0xdf,0x71,0x1d,0x16,0x92,0x21,0x1b,
0xb2,0x21,0xd3,0xd1,0x21,0x23,0x92,0x21,0xff,0xd1,0x1e,0x0d,
0x32,0x1d,0x2b,0x12,0x1f,0x25,0x52,0x23,0xff,0x51,0x23,0x25,
0x92,0x20,0x0b,0xb2,0x1f,0x01,0xe0,0x23,0x13,0x92,0x23,0x3b,
0x72,0x22,0x4b,0xd2,0x24,0x17,0x92,0x22,0xe3,0xd1,0x22,0x57,
0x92,0x1f,0x0d,0x32,0x25,0x27,0x32,0x26,0x1b,0x72,0x24,0x43,
0xb2,0x26,0x05,0x12,0x20,0xd9,0x31,0x24,0x5d,0x32,0x20,0xdd,
0x91,0x27,0x75,0xb2,0x1d,0xfd,0x31,0x27,0x41,0x72,0x1e,0x6f,
0xf2,0x1c,0x45,0x12,0x21,0xf1,0xd1,0x28,0xcb,0xf1,0x20,0x31,
0x12,0x27,0x9d,0xf2,0x28,0x7f,0x92,0x28,0x7d,0x72,0x28,0x5b,
0xb2,0x2a,0x95,0x32,0x29,0x83,0x12,0x29,0xa1,0xb2,0x1d,0x97,
0x92,0x1e,0xb7,0x92,0x25,0xf1,0x51,0x2a,0xad,0x92,0x2b,0xcd,
0x71,0x2c,0x77,0xf2,0x2a,0x8b,0x32,0x2b,0x8f,0xd2,0x2b,0xcb,
0xd1,0x2b,0x9b,0x32,0x2c,0x9f,0x32,0x2e,0xa3,0x32,0x2d,0xa9,
0xb2,0x2c,0x85,0xb2,0x2c,0xdd,0x72,0x2d,0xff,0x99,0x12,0x2c,
0x5f,0xd2,0x1d,0xdf,0xb2,0x2f,0x7b,0xb2,0x1d,0xcf,0x52,0x2b,
0x09,0xd3,0x2e,0xe7,0x92,0x2f,0x0d,0xb3,0x2b,0xf7,0xf2,0x2b,
0xdb,0xb2,0x01,0x00,0xd3,0x31,0x15,0xf3,0x2b,0x25,0xb3,0x1c,
0x25,0x13,0x2f,0x11,0xd3,0x1c,0x21,0x93,0x31,0xf5,0xf2,0x2e,
0x03,0x13,0x28,0x0f,0xd3,0x2f,0x13,0xb3,0x2e,0x07,0x73,0x34,
0x27,0xb3,0x34,0x39,0x13,0x33,0xe1,0x32,0x34,0x33,0x93,0x31,
0x55,0x53,0x30,0xcd,0xb2,0x34,0x2f,0x73,0x35,0x2b,0x33,0x36,
0x2f,0x12,0x33,0x51,0x73,0x35,0x5d,0xf3,0x33,0x17,0xb3,0x33,
0x23,0xb3,0x36,0x29,0x53,0x21,0x3b,0x13,0x38,0x35,0x33,0x2f,
0x1f,0xb3,0x35,0x3d,0x73,0x2a,0x49,0x53,0x38,0x4f,0x33,0x38,
0x53,0xd3,0x36,0x67,0xd3,0x38,0x7b,0x73,0x33,0xa3,0xd3,0x39,
0x7d,0x73,0x39,0x8b,0xd3,0x32,0x9f,0xf3,0x35,0x71,0xf3,0x35,
0x75,0x33,0x39,0x59,0x53,0x3a,0xb1,0xf3,0x37,0x99,0x33,0x3b,
0x87,0xf3,0x38,0x1d,0x93,0x38,0x6f,0x53,0x21,0xd5,0x72,0x1d,
0x85,0x92,0x3d,0xe3,0xf1,0x1f,0xdf,0x53,0x1c,0xdd,0xf3,0x2f,
0xa7,0xd3,0x1e,0xd1,0x31,0x21,0xd1,0x33,0x1e,0xf1,0x13,0x2b,
0xed,0x31,0x3e,0xeb,0xb3,0x3d,0xd3,0x51,0x3e,0xc7,0xf1,0x3f,
0x79,0x73,0x1c,0xe9,0xd3,0x40,0xa1,0xf3,0x3e,0x01,0x20,0x3f,
0xed,0x73,0x3f,0x19,0xb4,0x3f,0xe1,0x73,0x1d,0x06,0x14,0x41,
0xc1,0x53,0x42,0x29,0x54,0x40,0x01,0x54,0x3d,0x17,0xb4,0x41,
0x8b,0x93,0x43,0x23,0x74,0x1d,0x0b,0xd4,0x42,0xe7,0x33,0x43,
0xff,0x13,0x94,0x40,0x27,0x54,0x43,0x49,0x54,0x44,0xb9,0x73,
0x37,0x47,0xb4,0x00,0xf8,0x73,0x40,0x5b,0x94,0x3b,0x61,0x34,
0x45,0x4f,0x14,0x43,0x57,0x94,0x3a,0x43,0x14,0x45,0x4d,0xb4,
0x42,0x59,0xf4,0x3b,0x67,0x14,0x42,0x63,0xf4,0x47,0x73,0xf4,
0x45,0x83,0xb4,0x46,0xc5,0x11,0x47,0x17,0x34,0x49,0x09,0x72,
0x49,0x03,0xb4,0x49,0x37,0xf4,0x41,0x3b,0x14,0x4a,0x03,0x54,
0x4a,0x75,0xf4,0x46,0x77,0xd4,0x45,0x91,0x14,0x4b,0x81,0xf4,
0x49,0x15,0x34,0x4a,0x41,0x74,0x3b,0x89,0x94,0x46,0x4d,0x54,
0x4b,0xaf,0x54,0x48,0xbb,0xb4,0x48,0xd1,0x54,0x46,0xc5,0xd4,
0x48,0xc9,0x74,0x48,0x3f,0xf4,0x4c,0xb7,0x94,0x4d,0xd5,0xb4,
0x00,0xd0,0xb4,0x47,0x89,0x74,0x4d,0xe1,0xf4,0x48,0xdf,0xf4,
0x4b,0xe3,0xd4,0x4c,0xf7,0xd4,0x4e,0x4b,0x34,0x4b,0xf9,0x94,
0x4a,0xc1,0x34,0x4f,0xfb,0x14,0x50,0xe5,0x54,0x49,0x15,0x95,
0x49,0x19,0xd5,0x49,0x1d,0x75,0x4a,0x0f,0xb4,0x4d,0x07,0xb5,
0x4a,0x8b,0xb4,0x52,0xcb,0xb4,0x46,0xef,0xf4,0x23,0x03,0x95,
0x4e,0x2b,0x75,0x4c,0x29,0x15,0x4c,0x3f,0xd5,0x47,0x51,0xd2,
0x24,0x21,0x72,0x26,0x49,0xb5,0x23,0x4d,0x75,0x26,0x57,0x15,
0x55,0x57,0x35,0x25,0x5b,0x35,0x55,0x21,0x55,0x45,0x65,0xd5,
0x46,0x33,0x55,0x50,0x7d,0xd4,0x53,0x27,0x15,0x57,0x43,0x55,
0x57,0xf1,0xb4,0x4e,0xb9,0x71,0x51,0x68,0x55,0x53,0x1b,0xf5,
0x4f,0xdd,0x34,0x57,0x2f,0x95,0x50,0x25,0x15,0x59,0x81,0x95,
0x59,0x9b,0xd5,0x59,0xff,0x9f,0x15,0x5a,0xa3,0x55,0x5a,0xa7,
0x95,0x5a,0xab,0xd5,0x5a,0xaf,0x15,0x5b,0xb3,0x55,0x5b,0xb7,
0x95,0x5b,0xbb,0xd5,0x5b,0xbf,0x15,0x5c,0xc3,0x55,0x5c,0xc7,
@ -1751,8 +1751,24 @@ static const unsigned char tileDataC[]={
0x17,0x98,0x81,0x1b,0xd8,0x81,0x1f,0x18,0x82,0x23,0x58,0x82,
0x27,0x98,0x82,0x2b,0xd8,0x82,0x2f,0x18,0x83,0x33,0x58,0x83,
0x37,0x98,0x83,0x3b,0xd8,0x83,0x3f,0x18,0x84,0x43,0x58,0x84,
0x20,0x47,0x98,0x84,0x4b,0xd8,0x84,0x4f,0x18,0x85,0x53,0x58,
0xe0,0x47,0x98,0x84,0x4b,0xd8,0x84,0x4f,0x18,0x85,0x53,0x58,
0x85,0x57,0x98,0x85,0x5b,0xd8,0x85,0x5f,0x18,0x86,0x63,0x58,
0x86,0x67,0x98,0x86,0x6b,0xb8,0x4d,0x03,0x02,0x00,0x3b
0x86,0x67,0x98,0x86,0x6b,0xd8,0x86,0x6f,0x18,0x87,0x73,0x58,
0x87,0x77,0x98,0x87,0x7b,0xd8,0x87,0x7f,0x18,0x88,0x83,0x58,
0x88,0x87,0x98,0x88,0x8b,0xd8,0x88,0x8f,0x18,0x89,0x93,0x58,
0x89,0x97,0x98,0x89,0x9b,0xd8,0x89,0x9f,0x18,0x8a,0xa3,0x58,
0x8a,0xa7,0x98,0x8a,0xab,0xd8,0x8a,0xaf,0x18,0x8b,0xb3,0x58,
0x8b,0xb7,0x98,0x8b,0xbb,0xd8,0x8b,0xbf,0x18,0x8c,0xc3,0x58,
0x8c,0xc7,0x98,0x8c,0xcb,0xd8,0x8c,0xcf,0x18,0x8d,0xd3,0x58,
0x8d,0xd7,0x98,0x8d,0xdb,0xd8,0x8d,0xdf,0x18,0x8e,0xe3,0x58,
0x8e,0xe7,0x98,0x8e,0xeb,0xd8,0x8e,0xef,0x18,0x8f,0xf3,0x58,
0x8f,0xf7,0x98,0x8f,0xfb,0xd8,0x8f,0xff,0x18,0x90,0x03,0x59,
0x90,0x07,0x99,0x90,0x0b,0xd9,0x90,0x0f,0x19,0x91,0x13,0x59,
0x91,0x17,0x99,0x91,0x1b,0xd9,0x91,0x1f,0x19,0x92,0x23,0x59,
0x92,0x27,0x99,0x92,0x2b,0xd9,0x92,0x2f,0x19,0x93,0x33,0x59,
0x93,0x37,0x99,0x93,0x3b,0xd9,0x93,0x3f,0x19,0x94,0x43,0x59,
0x94,0x47,0x99,0x94,0x4b,0xd9,0x94,0x4f,0x19,0x95,0x53,0x59,
0x95,0x57,0x99,0x95,0x5b,0xd9,0x95,0x5f,0x19,0x96,0x63,0x59,
0x96,0x67,0x99,0x96,0x6b,0x99,0x78,0x03,0x02,0x00,0x3b
};
static const unsigned int tileDataC_len=21059;
static const unsigned int tileDataC_len=21251;

View file

@ -64,6 +64,7 @@ enum FurnaceCVObjectTypes {
CV_MINE,
CV_POWERUP_P,
CV_POWERUP_S,
CV_MOD_S,
CV_EXTRA_LIFE
};
@ -375,6 +376,17 @@ struct FurnaceCVPowerupS: FurnaceCVObject {
}
};
struct FurnaceCVModS: FurnaceCVObject {
unsigned char life;
void collision(FurnaceCVObject* other);
void tick();
FurnaceCVModS(FurnaceCV* p):
FurnaceCVObject(p),
life(255) {
type=CV_MOD_S;
}
};
struct FurnaceCVExtraLife: FurnaceCVObject {
unsigned char life;
void collision(FurnaceCVObject* other);
@ -391,10 +403,12 @@ struct FurnaceCV {
unsigned char* prioBuf;
DivEngine* e;
unsigned char* tileData;
unsigned int tick;
// state
unsigned short* curStage;
int stageWidth, stageHeight;
int stageWidthPx, stageHeightPx;
const char* typeAddr;
unsigned char typeDelay;
@ -411,6 +425,8 @@ struct FurnaceCV {
int hiScore;
short lastPlayerX, lastPlayerY;
short fxChanBase, fxInsBase;
short speedTicks;
float origSongRate;
FixedQueue<unsigned char,16> weaponStack;
@ -455,9 +471,12 @@ struct FurnaceCV {
surface(NULL),
e(NULL),
tileData(NULL),
tick(0),
curStage(NULL),
stageWidth(0),
stageHeight(0),
stageWidth(40),
stageHeight(28),
stageWidthPx(320),
stageHeightPx(224),
typeAddr(NULL),
typeDelay(0),
typeX(0),
@ -485,6 +504,8 @@ struct FurnaceCV {
lastPlayerY(0),
fxChanBase(-1),
fxInsBase(-1),
speedTicks(0),
origSongRate(60.0f),
bgColor(0),
viewX(0),
viewY(0),
@ -854,6 +875,7 @@ void FurnaceGUI::drawTutorial() {
cv->loadInstruments();
}
}
cv->origSongRate=cv->e->getHz();
}
WAKE_UP;
@ -866,10 +888,15 @@ void FurnaceGUI::drawTutorial() {
e->changeSongP(0);
e->setOrder(0);
e->play();
cv->origSongRate=cv->e->getHz();
}
}
}
if (cv->speedTicks>0) {
cv->e->setSongRate(cv->origSongRate*1.5);
}
cv->render(touchControls);
if (cv->hiScore>cvHiScore) {
@ -1074,9 +1101,18 @@ void FurnaceCV::buildStage(int which) {
curStage=NULL;
}
curStage=new unsigned short[80*56];
if (which>19 || which==4 || which==7 || which==9 || which==11 || which==13 || which==16 || which==17) {
stageWidth=80;
stageHeight=56;
} else {
stageWidth=40;
stageHeight=28;
}
stageWidthPx=stageWidth<<3;
stageHeightPx=stageHeight<<3;
curStage=new unsigned short[stageWidth*stageHeight];
int floorBase=floorBases[rand()&3];
@ -1103,8 +1139,8 @@ void FurnaceCV::buildStage(int which) {
for (int i=0; i<20+(which>>2); i++) {
int tries=0;
while (tries<20) {
int x=rand()%40;
int y=rand()%28;
int x=rand()%(stageWidth>>1);
int y=rand()%(stageHeight>>1);
int finalX=x<<4;
int finalY=y<<4;
if (busy[y][x]) {
@ -1121,8 +1157,8 @@ void FurnaceCV::buildStage(int which) {
for (int i=0; i<20+(which>>2); i++) {
int tries=0;
while (tries<20) {
int x=(rand()%40)&(~1);
int y=(rand()%28)&(~1);
int x=(rand()%(stageWidth>>1))&(~1);
int y=(rand()%(stageHeight>>1))&(~1);
int finalX=x<<4;
int finalY=y<<4;
if (busy[y][x]) {
@ -1144,8 +1180,8 @@ void FurnaceCV::buildStage(int which) {
if (which>=2) for (int i=0; i<(rand()%3)+which-2; i++) {
int tries=0;
while (tries<20) {
int x=(rand()%40)&(~1);
int y=(rand()%28)&(~1);
int x=(rand()%(stageWidth>>1))&(~1);
int y=(rand()%(stageHeight>>1))&(~1);
int finalX=x<<4;
int finalY=y<<4;
if (busy[y][x]) {
@ -1170,8 +1206,8 @@ void FurnaceCV::buildStage(int which) {
if (which>=4) for (int i=0; i<(rand()%(1+which))+(which>>1); i++) {
int tries=0;
while (tries<20) {
int x=rand()%40;
int y=rand()%28;
int x=rand()%(stageWidth>>1);
int y=rand()%(stageHeight>>1);
int finalX=x<<4;
int finalY=y<<4;
if (busy[y][x]) {
@ -1189,8 +1225,8 @@ void FurnaceCV::buildStage(int which) {
for (int i=0; i<7+(rand()%4)+((which&3)<<2)+(which>>1); i++) {
int tries=0;
while (tries<20) {
int x=rand()%40;
int y=rand()%28;
int x=rand()%(stageWidth>>1);
int y=rand()%(stageHeight>>1);
int finalX=x<<4;
int finalY=y<<4;
if (busy[y][x]) {
@ -1211,8 +1247,8 @@ void FurnaceCV::buildStage(int which) {
for (int i=0; i<7+(rand()%18); i++) {
int tries=0;
while (tries<20) {
int x=rand()%40;
int y=rand()%28;
int x=rand()%(stageWidth>>1);
int y=rand()%(stageHeight>>1);
int finalX=x<<4;
int finalY=y<<4;
if (busy[y][x]) {
@ -1416,6 +1452,96 @@ void FurnaceCV::render(unsigned char joyIn) {
tile1[0][36]=0x27f;
putText(CV_FONTBASE_8x8,false,fmt::sprintf("*%2d",lives),37,0);
// arrow overlay
bool arrowLeft=false;
bool arrowRight=false;
bool arrowUp=false;
bool arrowDown=false;
if (stageWidthPx>320 || stageHeightPx>224) {
for (FurnaceCVObject* i: sprite) {
if (i->type!=CV_ENEMY) continue;
if ((i->x-viewX+(i->spriteWidth<<3))<0) {
arrowLeft=true;
}
if ((i->x-viewX)>=320) {
arrowRight=true;
}
if ((i->y-viewY+(i->spriteHeight<<3))<0) {
arrowUp=true;
}
if ((i->y-viewY)>=224) {
arrowDown=true;
}
}
}
if (arrowLeft && !(tick&8)) {
tile1[13][1]=0x580;
tile1[13][2]=0x581;
tile1[14][1]=0x5a0;
tile1[14][2]=0x5a1;
} else {
tile1[13][1]=0;
tile1[13][2]=0;
tile1[14][1]=0;
tile1[14][2]=0;
}
if (arrowRight && !(tick&8)) {
tile1[13][37]=0x584;
tile1[13][38]=0x585;
tile1[14][37]=0x5a4;
tile1[14][38]=0x5a5;
} else {
tile1[13][37]=0;
tile1[13][38]=0;
tile1[14][37]=0;
tile1[14][38]=0;
}
if (arrowUp && !(tick&8)) {
tile1[1][19]=0x582;
tile1[1][20]=0x583;
tile1[2][19]=0x5a2;
tile1[2][20]=0x5a3;
} else {
tile1[1][19]=0;
tile1[1][20]=0;
tile1[2][19]=0;
tile1[2][20]=0;
}
if (arrowDown && !(tick&8)) {
tile1[25][19]=0x586;
tile1[25][20]=0x587;
tile1[26][19]=0x5a6;
tile1[26][20]=0x5a7;
} else {
tile1[25][19]=0;
tile1[25][20]=0;
tile1[26][19]=0;
tile1[26][20]=0;
}
// S mod stat
if (speedTicks>0) {
speedTicks--;
if ((speedTicks<120 && speedTicks&2) || speedTicks&16) {
tile1[24][36]=0x41e;
tile1[24][37]=0x41f;
tile1[25][36]=0x43e;
tile1[25][37]=0x43f;
} else {
tile1[24][36]=0;
tile1[24][37]=0;
tile1[25][36]=0;
tile1[25][37]=0;
}
if (speedTicks==0) {
e->setSongRate(origSongRate);
}
} else {
tile1[24][36]=0;
tile1[24][37]=0;
tile1[25][36]=0;
tile1[25][37]=0;
}
} else {
if (inTransition) {
if (--transWait<0) {
@ -1472,6 +1598,8 @@ void FurnaceCV::render(unsigned char joyIn) {
}
}
tick++;
// render
if (surface==NULL) return;
@ -1487,11 +1615,11 @@ void FurnaceCV::render(unsigned char joyIn) {
for (int i=0; i<224; i++) {
rasterH(i);
unsigned short x0=scrollX[0]%448;
unsigned short x1=scrollX[1]%448;
unsigned short x0=scrollX[0]%stageWidthPx;
unsigned short x1=scrollX[1]%stageWidthPx;
y0%=448;
y1%=448;
y0%=stageHeightPx;
y1%=stageHeightPx;
for (int j=0; j<320; j++) {
unsigned short t0=tile0[y0>>3][x0>>3]&0xfff;
@ -1511,8 +1639,8 @@ void FurnaceCV::render(unsigned char joyIn) {
*pb++=0;
}
if (++x0>=640) x0=0;
if (++x1>=640) x1=0;
if (++x0>=stageWidthPx) x0=0;
if (++x1>=stageWidthPx) x1=0;
}
y0++;
@ -1610,6 +1738,7 @@ void FurnaceCV::unload() {
if (fxChanBase>=0) {
e->removeSystem(e->song.systemLen-1);
}
e->setSongRate(origSongRate);
if (curStage!=NULL) {
delete[] curStage;
@ -1618,13 +1747,13 @@ void FurnaceCV::unload() {
}
#define IS_VISIBLE ((x-cv->viewX+(spriteWidth<<3))>=0 && (x-cv->viewX)<320 && (y-cv->viewY+(spriteHeight<<3))>=0 && (y-cv->viewY)<224)
#define IS_IN_AREA ((x+(spriteWidth<<3))>=0 && (x)<640 && (y+(spriteHeight<<3))>=0 && (y)<448)
#define HITS_BORDER (x<0 || y<0 || (x+(spriteWidth<<3))>=640 || (y+(spriteHeight<<3))>=448)
#define IS_IN_AREA ((x+(spriteWidth<<3))>=0 && (x)<cv->stageWidthPx && (y+(spriteHeight<<3))>=0 && (y)<cv->stageHeightPx)
#define HITS_BORDER (x<0 || y<0 || (x+(spriteWidth<<3))>=cv->stageWidthPx || (y+(spriteHeight<<3))>=cv->stageHeightPx)
#define CONFINE_TO_BORDER \
if (x<0) x=0; \
if (y<0) y=0; \
if ((x+(spriteWidth<<3))>=640) x=639-(spriteWidth<<3); \
if ((y+(spriteHeight<<3))>=448) y=447-(spriteHeight<<3);
if ((x+(spriteWidth<<3))>=cv->stageWidthPx) x=(cv->stageWidthPx-1)-(spriteWidth<<3); \
if ((y+(spriteHeight<<3))>=cv->stageHeightPx) y=(cv->stageHeightPx-1)-(spriteHeight<<3);
// FurnaceCVPlayer IMPLEMENTATION
@ -1634,6 +1763,8 @@ void FurnaceCVPlayer::collision(FurnaceCVObject* other) {
other->type==CV_ENEMY) {
if (!invincible) {
dead=true;
cv->speedTicks=0;
cv->e->setSongRate(cv->origSongRate);
cv->respawnTime=48;
if (cv->weaponStack.empty()) {
cv->shotType=0;
@ -1669,14 +1800,18 @@ static const int shootDirOrient[8]={
void FurnaceCVPlayer::tick() {
signed char sdX=0;
signed char sdY=0;
int maxSpeed=(cv->speedTicks>0)?128:64;
int maxSpeedDiagonal=(cv->speedTicks>0)?90:45;
if (cv->joyInput&16) {
speedY-=12;
sdY=-1;
if (speedY<-64) speedY=-64;
if (speedY<-maxSpeed) speedY=-maxSpeed;
} else if (cv->joyInput&32) {
speedY+=12;
sdY=1;
if (speedY>64) speedY=64;
if (speedY>maxSpeed) speedY=maxSpeed;
} else {
if (speedY>0) {
speedY-=12;
@ -1689,11 +1824,11 @@ void FurnaceCVPlayer::tick() {
if (cv->joyInput&64) {
speedX-=12;
sdX=-1;
if (speedX<-64) speedX=-64;
if (speedX<-maxSpeed) speedX=-maxSpeed;
} else if (cv->joyInput&128) {
speedX+=12;
sdX=1;
if (speedX>64) speedX=64;
if (speedX>maxSpeed) speedX=maxSpeed;
} else {
if (speedX>0) {
speedX-=12;
@ -1706,10 +1841,10 @@ void FurnaceCVPlayer::tick() {
// sqrt(2)
if (speedX && speedY) {
if (speedX>45) speedX=45;
if (speedX<-45) speedX=-45;
if (speedY>45) speedY=45;
if (speedY<-45) speedY=-45;
if (speedX>maxSpeedDiagonal) speedX=maxSpeedDiagonal;
if (speedX<-maxSpeedDiagonal) speedX=-maxSpeedDiagonal;
if (speedY>maxSpeedDiagonal) speedY=maxSpeedDiagonal;
if (speedY<-maxSpeedDiagonal) speedY=-maxSpeedDiagonal;
}
subX+=speedX;
@ -1863,9 +1998,9 @@ void FurnaceCVPlayer::tick() {
cv->viewX=x-160+12;
cv->viewY=y-112+12;
if (cv->viewX<0) cv->viewX=0;
if (cv->viewX>320) cv->viewX=320;
if (cv->viewX>cv->stageWidthPx-320) cv->viewX=cv->stageWidthPx-320;
if (cv->viewY<0) cv->viewY=0;
if (cv->viewY>224) cv->viewY=224;
if (cv->viewY>cv->stageHeightPx-224) cv->viewY=cv->stageHeightPx-224;
cv->scrollX[0]=cv->viewX;
cv->scrollY[0]=cv->viewY;
}
@ -2104,16 +2239,21 @@ void FurnaceCVEnemy1::collision(FurnaceCVObject* other) {
if (--health<=0) {
dead=true;
if ((rand()%7)==0 || (enemyType>1 && (rand()%7)==3)) {
switch (rand()%10) {
case 0:
switch (rand()%13) {
case 0: // extra life
cv->createObject<FurnaceCVExtraLife>(x+(enemyType>=2?8:0),y+(enemyType>=2?8:0));
break;
case 1: case 2: case 3: case 4:
case 1: case 2: case 3: case 4: // powerup
cv->createObject<FurnaceCVPowerupP>(x+(enemyType>=2?8:0),y+(enemyType>=2?8:0));
break;
case 5: case 6: case 7: case 8: case 9:
case 5: case 6: case 7: case 8: case 9: // powerup
cv->createObject<FurnaceCVPowerupS>(x+(enemyType>=2?8:0),y+(enemyType>=2?8:0));
break;
case 10: case 11: // special
break;
case 12: // mod
cv->createObject<FurnaceCVModS>(x+(enemyType>=2?8:0),y+(enemyType>=2?8:0));
break;
}
}
cv->soundEffect(SE_EXPL1);
@ -2229,9 +2369,9 @@ void FurnaceCVEnemy1::tick() {
if (HITS_BORDER) {
if (x<0) orient=0;
if (x>=640-16) orient=2;
if (x>=cv->stageWidthPx-16) orient=2;
if (y<0) orient=3;
if (y>=224-16) orient=1;
if (y>=cv->stageHeightPx-16) orient=1;
cv->soundEffect(SE_TANKMOVE);
CONFINE_TO_BORDER;
}
@ -2873,6 +3013,34 @@ void FurnaceCVExtraLife::tick() {
}
}
// FurnaceCVModS IMPLEMENTATION
void FurnaceCVModS::collision(FurnaceCVObject* other) {
if (other->type==CV_PLAYER) {
dead=true;
cv->soundEffect(SE_PICKUP1);
cv->addScore(200);
cv->speedTicks=900;
cv->e->setSongRate(cv->origSongRate*1.5);
}
}
void FurnaceCVModS::tick() {
if (--life==0) dead=true;
if (life>64 || (life&1)) {
spriteDef[0]=0x41e;
spriteDef[1]=0x41f;
spriteDef[2]=0x43e;
spriteDef[3]=0x43f;
} else {
spriteDef[0]=0;
spriteDef[1]=0;
spriteDef[2]=0;
spriteDef[3]=0;
}
}
// FurnaceCVEnemyVortex IMPLEMENTATION
void FurnaceCVEnemyVortex::collision(FurnaceCVObject* other) {