diff --git a/src/lua_skinlib.c b/src/lua_skinlib.c index 3debd3746947a252be8e27f0f2608a21739049d2..ee5be8d9e7d33da123af46ab85d8a3481a68e33f 100644 --- a/src/lua_skinlib.c +++ b/src/lua_skinlib.c @@ -54,7 +54,8 @@ enum skin { skin_contspeed, skin_contangle, skin_soundsid, - skin_sprites + skin_sprites, + skin_natkcolor }; static const char *const skin_opt[] = { @@ -94,6 +95,7 @@ static const char *const skin_opt[] = { "contangle", "soundsid", "sprites", + "natkcolor", NULL}; #define UNIMPLEMENTED luaL_error(L, LUA_QL("skin_t") " field " LUA_QS " is not implemented for Lua and cannot be accessed.", skin_opt[field]) @@ -218,6 +220,9 @@ static int skin_get(lua_State *L) case skin_sprites: LUA_PushUserdata(L, skin->sprites, META_SKINSPRITES); break; + case skin_natkcolor: + lua_pushinteger(L, skin->natkcolor); + break; } return 1; } diff --git a/src/m_menu.c b/src/m_menu.c index 9aae59445382270c6d45445dfb113425fe52eee6..78da841665b97a7f65eeb14219414a2d70b3312b 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -5896,14 +5896,14 @@ static void M_DrawNightsAttackBackground(void) } // NiGHTS Attack floating Super Sonic. -static patch_t *ntssupersonic[2]; +/*static patch_t *ntssupersonic[2]; static void M_DrawNightsAttackSuperSonic(void) { const UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_YELLOW, GTC_CACHE); INT32 timer = FixedInt(ntsatkdrawtimer/4) % 2; angle_t fa = (FixedAngle((FixedInt(ntsatkdrawtimer * 4) % 360)<<FRACBITS)>>ANGLETOFINESHIFT) & FINEMASK; V_DrawFixedPatch(235<<FRACBITS, (120<<FRACBITS) - (8*FINESINE(fa)), FRACUNIT, 0, ntssupersonic[timer], colormap); -} +}*/ static void M_DrawLevelPlatterMenu(void) { @@ -10256,7 +10256,52 @@ void M_DrawNightsAttackMenu(void) } // Super Sonic - M_DrawNightsAttackSuperSonic(); + //M_DrawNightsAttackSuperSonic(); + + //Draw selected character's NiGHTS sprite + + patch_t *NightsAttackSprite; //The patch for the sprite itself + INT32 spritetimer; //Timer for animating NiGHTS sprite + INT32 flags; //Flag var for checking if the sprite needs to be flipped + INT32 skinnumber; //Number for skin + INT32 color; //natkcolor + + const UINT8 *colormap = NULL; //Colormap var for coloring the sprite + + if (skins[cv_chooseskin.value-1].sprites[SPR2_NFLY].numframes == 0) //If we don't have NiGHTS sprites + skinnumber = 0; //Default to Sonic + else + skinnumber = (cv_chooseskin.value-1); + + spritedef_t *sprdef = &skins[skinnumber].sprites[SPR2_NFLY]; //Make our patch the selected character's NFLY sprite + spritetimer = FixedInt(ntsatkdrawtimer/2) % skins[skinnumber].sprites[SPR2_NFLY].numframes; //Make the sprite timer cycle though all the frames at 2 tics per frame + spriteframe_t *sprframe = &sprdef->spriteframes[spritetimer]; //Our animation frame is equal to the number on the timer + + NightsAttackSprite = W_CachePatchNum(sprframe->lumppat[6], PU_PATCH); //Draw the right facing angle + + if (skins[skinnumber].natkcolor) //If you set natkcolor use it + color = skins[skinnumber].natkcolor; + else if ((skins[skinnumber].flags & SF_SUPER) && !(skins[skinnumber].flags & SF_NONIGHTSSUPER)) //If you go super in NiGHTS, use supercolor + color = skins[skinnumber].supercolor+4; + else //If you don't go super in NiGHTS or at all, use prefcolor + color = skins[skinnumber].prefcolor; + + + + colormap = R_GetTranslationColormap(TC_BLINK, color, GTC_CACHE); //Make the sprite color be our prefcolor + + angle_t fa = (FixedAngle(((FixedInt(ntsatkdrawtimer * 4)) % 360)<<FRACBITS)>>ANGLETOFINESHIFT) & FINEMASK; + + if (sprframe->flip & 1<<6) //If our sprite is supposed to be flipped + flags = V_FLIP; //Flip it + else + flags = 0; + + + V_DrawFixedPatch((270<<FRACBITS), ((186<<FRACBITS) - (8*FINESINE(fa))), FixedDiv(skins[skinnumber].highresscale, skins[skinnumber].shieldscale), flags, NightsAttackSprite, colormap); //Draw the sprite + + //End of NiGHTS sprite drawing + //if (P_HasGrades(cv_nextmap.value, 0)) // V_DrawScaledPatch(235 - (((ngradeletters[bestoverall])->width)*3)/2, 135, 0, ngradeletters[bestoverall]); @@ -10348,8 +10393,8 @@ static void M_NightsAttack(INT32 choice) // This is really just to make sure Sonic is the played character, just in case M_PatchSkinNameTable(); - ntssupersonic[0] = W_CachePatchName("NTSSONC1", PU_PATCH); - ntssupersonic[1] = W_CachePatchName("NTSSONC2", PU_PATCH); + //ntssupersonic[0] = W_CachePatchName("NTSSONC1", PU_PATCH); + //ntssupersonic[1] = W_CachePatchName("NTSSONC2", PU_PATCH); G_SetGamestate(GS_TIMEATTACK); // do this before M_SetupNextMenu so that menu meta state knows that we're switching titlemapinaction = TITLEMAP_OFF; // Nope don't give us HOMs please diff --git a/src/r_skins.c b/src/r_skins.c index fbc2a30e128895c440598c747292a1b8b5312091..06da17be62c9f481a36d635c8610d04dc63703c7 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -149,6 +149,8 @@ static void Sk_SetDefaultValue(skin_t *skin) skin->contspeed = 17; skin->contangle = 0; + skin->natkcolor = SKINCOLOR_NONE; + for (i = 0; i < sfx_skinsoundslot0; i++) if (S_sfx[i].skinsound != -1) skin->soundsid[S_sfx[i].skinsound] = i; @@ -603,7 +605,6 @@ static boolean R_ProcessPatchableFields(skin_t *skin, char *stoken, char *value) UINT16 color = R_GetSuperColorByName(value); skin->supercolor = (color ? color : SKINCOLOR_SUPERGOLD1); } - #define GETFLOAT(field) else if (!stricmp(stoken, #field)) skin->field = FLOAT_TO_FIXED(atof(value)); GETFLOAT(jumpfactor) GETFLOAT(highresscale) @@ -644,6 +645,9 @@ static boolean R_ProcessPatchableFields(skin_t *skin, char *stoken, char *value) GETFLAG(NOSHIELDABILITY) #undef GETFLAG + else if (!stricmp(stoken, "natkcolor")) + skin->natkcolor = R_GetColorByName(value); // SKINCOLOR_NONE is allowed here + else // let's check if it's a sound, otherwise error out { boolean found = false; diff --git a/src/r_skins.h b/src/r_skins.h index bf2275a49a795a1a984343dc82d881b769a89592..5acb415fef23039fba8ece6c4fa59ca646f244c1 100644 --- a/src/r_skins.h +++ b/src/r_skins.h @@ -70,6 +70,7 @@ typedef struct UINT16 prefcolor; UINT16 supercolor; UINT16 prefoppositecolor; // if 0 use tables instead + UINT16 natkcolor; //Color for Nights Attack Menu fixed_t highresscale; // scale of highres, default is 0.5 UINT8 contspeed; // continue screen animation speed