From 896c84c2053b1507060f3dc7f3a581632a4fe8fe Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 14 Mar 2025 04:35:13 -0500 Subject: [PATCH] Combat Vehicle changes - new "speed" mod - small stages --- res/tile.gif | Bin 21059 -> 21251 bytes src/gui/tileData.h | 212 +++++++++++++++++++----------------- src/gui/tutorial.cpp | 254 +++++++++++++++++++++++++++++++++++-------- 3 files changed, 325 insertions(+), 141 deletions(-) diff --git a/res/tile.gif b/res/tile.gif index 9dc56b2140ebf1ae53d0563a5890832b3730c97f..96ad8aaf5c2cb958d15217f023f136f047057cfd 100644 GIT binary patch delta 1372 zcmV-i1*7`IqydAb0kE=5e_p(J23GHL-S|Ug+wRv2#{`=nSMlPJZq~1!_V?xe)5p^s z`)fV)bDqNKcV2MZ&wu#G|3c)?OC}D1SdWO1kARd${Q!_K%wtCwuqeQ<_y{nD0BD8I z4|`l_O?rZf3gZFcqdX+=_9*c1`0bhho+tw~u!H>XJ=TK-v*ZOMe^3DbCq zi}nx>tx#%WFb<2Se`&g{4)x^@6>tLyF$6h;|2S|j9I+5XXAXx(#DAPyF5-?)G7)oks?0v6#=j|NU;>XWzcp{6Y*?Ua&ZAcu>XL`5r?A^ z{iOsshHqYM^)Q7Ne=!t&@&AC)8UKedmHwnq_{2|Cr~9&Te;TC`*a#=#l5QOeKpe-h z0m{)F*I^;TaU8|b9NV!0(qtXi(H$EA9pjN4=kXoWL>=YP9nld0_VFI)5gzTa0OqkC z2@)UQaUB+tAsezG)6pR#k|F=m9t|=bD-s_iQX~ISBPEg`3$h;p;3E@~BRg^;OVT74 zk|N{LB3F_he+@DvCo(1*awJ2tCIu28*)b$tG9cZNCv~zN{V^v&avpE;97Pf#@zE&D z@gOl0C!O*rf08JDawuD}DwQ%RgAysBvK^O_9=DPu@lh(Rk}J(|EO+uMi!v*Z(ksi+ zE1NPbpE53^GA*gHEQPWx-EuAenG!5t(jDKjFMF~bf6r1Y3DYj;k}nOjEBEp%+p+-w z(=iqEDQx`Go#Zv zeRDaBf73Fb^EGkvHFYyNSyMW(^Ea6@JBRZ)9g{e3Qz6xI9fguT*>Gam61EA25p>$5%6Q9j4C-@=^F9F}Kkair8MHs)a~%d0LBUf(DO5lK zR6Q58L5q_^BXk`L)I#SoL;n+$Kqpi~NmN9+e{(lSv;g>XKwFeMVKhZg6hl{(Iztpi zO|(K;^gCx1LSyttbM!@nv_{1dM;A0n335pTv`IJgK|2&m15`?N^hS5oMUfOsf%Hig zG)h5qJBgG=O;k&-R7ktDNYPYA#ned2bVxt+Ot+Lx)wBT6v`2|_P2u!N-}Fo4)J*r( ze@;s@OZk*a!8A|%6j0?rkYngZh0suQMw_Kb6 delta 1179 zcmV;M1Z4YzrUApG0kE=5f8O-Dzx0$_AMpf4eiFCeeezkXt-XTUHPWMNkQsa94;B&#DktqRd+745D@t=e@*W25BIPR0RRyR5fJ-u5DNeh1u+r}kq_4a6Ejg0HPH??(GxR~ z5eIP+?NAg8@e@yx5l`_GBT*6+5dc`x5>rtXK~WZG5fekv4@VIf6LAu45fpt<6JgO6 zh4B#^F%MmF7aegAlkph!a1o8M75@Q|80qj8E3pu#Q4T4we-w*x8>x{Qqj4FbQ5VJW z8m-Y8tFasP5E}y#9doe|zi}MXaSq`T8Oc!^&5;_{Q4ZHp8{Lr`{m~okF&yRb8Rc;w z@i80Qkr(%n9~Dv=^^hLVF(L;NAQN&T)e#}tQ6C$iAvf|O+3_Rg@FNSdBImFpGx8t_ z(jl9XA{Wvke+3dEVG<-|G9^p0A6?QUGx8=Mavo)pBymzCeUcPQvLQt4Ife5L zixV@ge=`!X(=oLZH91o?yVEhh^EinUId`)<%d&fiXr^aYlg=M{5*E zZBa*Uv_o(6M~BlyA9Oia6hw>EMUS*V1yl{eBuGzGLm6~Gjg&+q^h2w(NwZW-x0Fk} z)Jwke76<2drS9g_Hd(~He6#L diff --git a/src/gui/tileData.h b/src/gui/tileData.h index 08b2c05d8..b5503c8e4 100644 --- a/src/gui/tileData.h +++ b/src/gui/tileData.h @@ -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; diff --git a/src/gui/tutorial.cpp b/src/gui/tutorial.cpp index 3b3fde90a..3384bdb82 100644 --- a/src/gui/tutorial.cpp +++ b/src/gui/tutorial.cpp @@ -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 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]; - stageWidth=80; - stageHeight=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)stageWidthPx && (y+(spriteHeight<<3))>=0 && (y)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(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(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(x+(enemyType>=2?8:0),y+(enemyType>=2?8:0)); break; + case 10: case 11: // special + break; + case 12: // mod + cv->createObject(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) {