From 55d79622fac13534e7e368b729dd9cbda5daafee Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sat, 29 Dec 2018 10:59:34 +0100 Subject: [PATCH 01/86] Clean up splitscreen huds to allow minimap --- src/k_kart.c | 296 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 262 insertions(+), 34 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 2a152162a..fa0244979 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6166,6 +6166,12 @@ INT32 CHEK_Y; // CHECK graphic INT32 MINI_X, MINI_Y; // Minimap INT32 WANT_X, WANT_Y; // Battle WANTED poster +// This is messy AND looks horrible, but I really couldn't find any other magic trick for 4 player splitscreen garbage. Sorry. +INT32 ITEM2_X, ITEM2_Y, ITEM3_X, ITEM3_Y, ITEM4_X, ITEM4_Y; +INT32 LAPS2_X, LAPS2_Y, LAPS3_X, LAPS3_Y, LAPS4_X, LAPS4_Y; +INT32 POSI2_X, POSI2_Y, POSI3_X, POSI3_Y, POSI4_X, POSI4_Y; + + static void K_initKartHUD(void) { /* @@ -6251,13 +6257,47 @@ static void K_initKartHUD(void) if (splitscreen > 1) // 3P/4P Small Splitscreen { + // 1P (top left) ITEM_X = -9; ITEM_Y = -8; LAPS_X = 3; LAPS_Y = (BASEVIDHEIGHT/2)-13; - POSI_X = (BASEVIDWIDTH/2)-3; + POSI_X = 32; + POSI_Y = (BASEVIDHEIGHT/2)- 16; + + // 2P (top right) + ITEM2_X = BASEVIDWIDTH-40; + ITEM2_Y = -8; + + LAPS2_X = BASEVIDWIDTH-45; + LAPS2_Y = (BASEVIDHEIGHT/2)-13; + + POSI2_X = BASEVIDWIDTH -9; + POSI2_Y = (BASEVIDHEIGHT/2)- 16; + + // 3P (bottom left) + ITEM3_X = -9; + ITEM3_Y = (BASEVIDHEIGHT/2) -9; + + LAPS3_X = 3; + LAPS3_Y = (BASEVIDHEIGHT)-13; + + POSI3_X = 32; + POSI3_Y = (BASEVIDHEIGHT)- 16; + + // 4P (bottom right) + ITEM4_X = BASEVIDWIDTH-40; + ITEM4_Y = (BASEVIDHEIGHT/2) -9; + + LAPS4_X = BASEVIDWIDTH-45; + LAPS4_Y = (BASEVIDHEIGHT)-13; + + POSI4_X = BASEVIDWIDTH-9; + POSI4_Y = (BASEVIDHEIGHT)- 16; + + STCD_X = BASEVIDWIDTH/4; @@ -6331,7 +6371,8 @@ static void K_drawKartItem(void) patch_t *localpatch = kp_nodraw; patch_t *localbg = ((offset) ? kp_itembg[2] : kp_itembg[0]); patch_t *localinv = ((offset) ? kp_invincibility[((leveltime % (6*3)) / 3) + 7] : kp_invincibility[(leveltime % (7*3)) / 3]); - INT32 splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTOLEFT); + INT32 fx = 0, fy = 0, fflags = 0; // final coords for hud and flags... + //INT32 splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTOLEFT); const INT32 numberdisplaymin = ((!offset && stplyr->kartstuff[k_itemtype] == KITEM_ORBINAUT) ? 5 : 2); INT32 itembar = 0; UINT8 localcolor = SKINCOLOR_NONE; @@ -6548,26 +6589,61 @@ static void K_drawKartItem(void) } } + // pain and suffering defined below + if (splitscreen < 2) // don't change shit for THIS splitscreen. + { + fx = ITEM_X; + fy = ITEM_Y; + fflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTOLEFT); + } + else // now we're having a fun game. + { + if (stplyr == &players[displayplayer]) + { + fx = ITEM_X; + fy = ITEM_Y; + fflags = V_SNAPTOTOP|V_SNAPTOLEFT; + } + else if (stplyr == &players[secondarydisplayplayer]) + { + fx = ITEM2_X; + fy = ITEM2_Y; + fflags = V_SNAPTOTOP|V_SNAPTORIGHT; + } + else if (stplyr == &players[thirddisplayplayer]) + { + fx = ITEM3_X; + fy = ITEM3_Y; + fflags = V_SNAPTOLEFT; + } + else if (stplyr == &players[fourthdisplayplayer]) + { + fx = ITEM4_X; + fy = ITEM4_Y; + fflags = V_SNAPTORIGHT; + } + } + if (localcolor != SKINCOLOR_NONE) colmap = R_GetTranslationColormap(colormode, localcolor, 0); - V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, localbg); + V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, localbg); // Then, the numbers: if (stplyr->kartstuff[k_itemamount] >= numberdisplaymin && !stplyr->kartstuff[k_itemroulette]) { - V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, kp_itemmulsticker[offset]); - V_DrawFixedPatch(ITEM_X<kartstuff[k_itemamount])); + V_DrawString(fx+24, fy+31, V_ALLOWLOWERCASE|V_HUDTRANS|fflags, va("x%d", stplyr->kartstuff[k_itemamount])); else { - V_DrawScaledPatch(ITEM_X+28, ITEM_Y+41, V_HUDTRANS|splitflags, kp_itemx); - V_DrawKartString(ITEM_X+38, ITEM_Y+36, V_HUDTRANS|splitflags, va("%d", stplyr->kartstuff[k_itemamount])); + V_DrawScaledPatch(fy+28, fy+41, V_HUDTRANS|fflags, kp_itemx); + V_DrawKartString(fx+38, fy+36, V_HUDTRANS|fflags, va("%d", stplyr->kartstuff[k_itemamount])); } } else - V_DrawFixedPatch(ITEM_X< 2) { - V_DrawFill(ITEM_X+x+length, ITEM_Y+y+1, 1, height, 12|splitflags); // the right one + V_DrawFill(fx+x+length, fy+y+1, 1, height, 12|fflags); // the right one if (height == 2) - V_DrawFill(ITEM_X+x+2, ITEM_Y+y+2, length-2, 1, 8|splitflags); // the dulled underside - V_DrawFill(ITEM_X+x+2, ITEM_Y+y+1, length-2, 1, 120|splitflags); // the shine + V_DrawFill(fx+x+2, fy+y+2, length-2, 1, 8|fflags); // the dulled underside + V_DrawFill(fx+x+2, fy+y+1, length-2, 1, 120|fflags); // the shine } } // Quick Eggman numbers if (stplyr->kartstuff[k_eggmanexplode] > 1 /*&& stplyr->kartstuff[k_eggmanexplode] <= 3*TICRATE*/) - V_DrawScaledPatch(ITEM_X+17, ITEM_Y+13-offset, V_HUDTRANS|splitflags, kp_eggnum[min(3, G_TicsToSeconds(stplyr->kartstuff[k_eggmanexplode]))]); + V_DrawScaledPatch(fx+17, fy+13-offset, V_HUDTRANS|fflags, kp_eggnum[min(3, G_TicsToSeconds(stplyr->kartstuff[k_eggmanexplode]))]); + } void K_drawKartTimestamp(tic_t drawtime, INT32 TX, INT32 TY, INT16 emblemmap, UINT8 mode) @@ -6754,11 +6831,12 @@ static void K_DrawKartPositionNum(INT32 num) // POSI_Y = BASEVIDHEIGHT- 64; // 136 boolean win = (stplyr->exiting && num == 1); - INT32 X = POSI_X; + //INT32 X = POSI_X; INT32 W = SHORT(kp_positionnum[0][0]->width); fixed_t scale = FRACUNIT; patch_t *localpatch = kp_positionnum[0][0]; - INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT); + //INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT); + INT32 fx = 0, fy = 0, fflags = 0; if (stplyr->kartstuff[k_positiondelay] || stplyr->exiting) scale *= 2; @@ -6767,10 +6845,53 @@ static void K_DrawKartPositionNum(INT32 num) W = FixedMul(W<>FRACBITS; + // pain and suffering defined below + if (splitscreen < 2) // for this splitscreen, we'll be using more unique coordinates so we don't overlap the minimap :D + { + fx = POSI_X; + if (stplyr == &players[displayplayer]) // for player 1: display this at the top right, above the minimap. + { + fy = 32; + fflags = V_SNAPTOTOP|V_SNAPTOLEFT; + } + else // if we're not p1, that means we're p2. display this at the bottom right, below the minimap. + { + fy = BASEVIDHEIGHT - 8; + fflags = V_SNAPTOBOTTOM|V_SNAPTOLEFT; + } + } + else // now we're having a fun game. + { + if (stplyr == &players[displayplayer]) + { + fx = POSI_X; + fy = POSI_Y; + fflags = V_SNAPTOLEFT; + } + else if (stplyr == &players[secondarydisplayplayer]) + { + fx = POSI2_X; + fy = POSI2_Y; + fflags = V_SNAPTORIGHT; + } + else if (stplyr == &players[thirddisplayplayer]) + { + fx = POSI3_X; + fy = POSI3_Y; + fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; + } + else if (stplyr == &players[fourthdisplayplayer]) + { + fx = POSI4_X; + fy = POSI4_Y; + fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + } + } + // Special case for 0 if (!num) { - V_DrawFixedPatch(X< 1) { - V_DrawScaledPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_splitlapflag); + + // pain and suffering defined below + if (splitscreen < 2) // don't change shit for THIS splitscreen. + { + fx = LAPS_X; + fy = LAPS_Y; + fflags = splitflags; + } + else // now we're having a fun game. + { + if (stplyr == &players[displayplayer]) + { + fx = LAPS_X; + fy = LAPS_Y; + fflags = V_SNAPTOLEFT; + } + else if (stplyr == &players[secondarydisplayplayer]) + { + fx = LAPS2_X; + fy = LAPS2_Y; + fflags = V_SNAPTORIGHT; + } + else if (stplyr == &players[thirddisplayplayer]) + { + fx = LAPS3_X; + fy = LAPS3_Y; + fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; + } + else if (stplyr == &players[fourthdisplayplayer]) + { + fx = LAPS4_X; + fy = LAPS4_Y; + fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + } + } + + V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, kp_splitlapflag); if (stplyr->exiting) - V_DrawString(LAPS_X+13, LAPS_Y+1, V_HUDTRANS|splitflags, "FIN"); + V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, "FIN"); else - V_DrawString(LAPS_X+13, LAPS_Y+1, V_HUDTRANS|splitflags, va("%d/%d", stplyr->laps+1, cv_numlaps.value)); + V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->laps+1, cv_numlaps.value)); } else { @@ -7102,18 +7260,46 @@ static void K_drawKartBumpersOrKarma(void) { UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, stplyr->skincolor, 0); INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTOLEFT); + INT32 fx = 0, fy = 0, fflags = 0; if (splitscreen > 1) { + + // we will reuse lap coords here since it's essentially the same shit. + if (stplyr == &players[displayplayer]) + { + fx = LAPS_X; + fy = LAPS_Y; + fflags = V_SNAPTOLEFT; + } + else if (stplyr == &players[secondarydisplayplayer]) + { + fx = LAPS2_X; + fy = LAPS2_Y; + fflags = V_SNAPTORIGHT; + } + else if (stplyr == &players[thirddisplayplayer]) + { + fx = LAPS3_X; + fy = LAPS3_Y; + fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; + } + else if (stplyr == &players[fourthdisplayplayer]) + { + fx = LAPS4_X; + fy = LAPS4_Y; + fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + } + if (stplyr->kartstuff[k_bumper] <= 0) { - V_DrawMappedPatch(LAPS_X, LAPS_Y-1, V_HUDTRANS|splitflags, kp_splitkarmabomb, colormap); - V_DrawString(LAPS_X+13, LAPS_Y+1, V_HUDTRANS|splitflags, va("%d/2", stplyr->kartstuff[k_comebackpoints])); + V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|fflags, kp_splitkarmabomb, colormap); + V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/2", stplyr->kartstuff[k_comebackpoints])); } else { - V_DrawMappedPatch(LAPS_X, LAPS_Y-1, V_HUDTRANS|splitflags, kp_rankbumper, colormap); - V_DrawString(LAPS_X+13, LAPS_Y+1, V_HUDTRANS|splitflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); + V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|fflags, kp_rankbumper, colormap); + V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); } } else @@ -7166,11 +7352,53 @@ static void K_drawKartWanted(void) { UINT8 i, numwanted = 0; UINT8 *colormap = NULL; + INT32 fx = 0, fy = 0, fflags = 0; // splitscreen stuff if (splitscreen) // Can't fit the poster on screen, sadly { + + // wanted is a bit of a mess but don't worry. + if (splitscreen < 2) // don't change shit for THIS splitscreen. + { + fx = WANT_X; + fy = WANT_Y; + fflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT); + } + else // now we're having a fun game. + { + if (stplyr == &players[displayplayer]) + { + fx = LAPS_X; + fy = POSI_Y - 8; + fflags = V_SNAPTOLEFT; + } + else if (stplyr == &players[secondarydisplayplayer]) + { + fx = LAPS2_X - 10; + fy = POSI2_Y - 8; + fflags = V_SNAPTORIGHT; + } + else if (stplyr == &players[thirddisplayplayer]) + { + fx = LAPS3_X; + fy = POSI3_Y - 8; + fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; + } + else if (stplyr == &players[fourthdisplayplayer]) + { + fx = LAPS4_X - 10; + fy = POSI4_Y - 8; + fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + } + } + if (K_IsPlayerWanted(stplyr) && leveltime % 10 > 3) - V_DrawRightAlignedString(WANT_X, WANT_Y, K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_HUDTRANS|V_ORANGEMAP), "WANTED"); + { + if (splitscreen > 1) + V_DrawString(fx, fy-4, fflags|V_HUDTRANS|V_ORANGEMAP, "WANTED"); + else + V_DrawRightAlignedString(fx, fy, fflags|V_HUDTRANS|V_ORANGEMAP, "WANTED"); + } return; } @@ -7360,7 +7588,7 @@ static void K_drawKartMinimap(void) patch_t *AutomapPic; INT32 i = 0; INT32 x, y; - INT32 minimaptrans, splitflags = (splitscreen ? 0 : V_SNAPTORIGHT); + INT32 minimaptrans, splitflags = (splitscreen < 2 ? 0 : V_SNAPTORIGHT); boolean dop1later = false; // Draw the HUD only when playing in a level. @@ -7383,7 +7611,7 @@ static void K_drawKartMinimap(void) if (timeinmap > 105) { - minimaptrans = (splitscreen ? 10 : cv_kartminimap.value); + minimaptrans = (splitscreen == 2 ? 10 : cv_kartminimap.value); if (timeinmap <= 113) minimaptrans = ((((INT32)timeinmap) - 105)*minimaptrans)/(113-105); if (!minimaptrans) @@ -7400,7 +7628,7 @@ static void K_drawKartMinimap(void) else V_DrawScaledPatch(x, y, splitflags, AutomapPic); - if (!splitscreen) + if (!(splitscreen == 2)) { splitflags &= ~minimaptrans; splitflags |= V_HUDTRANSHALF; @@ -8092,13 +8320,13 @@ void K_drawKartHUD(void) || ((splitscreen > 2 && stplyr == &players[fourthdisplayplayer]) && !camera4.chase)) K_drawKartFirstPerson(); - if (splitscreen == 2) // Player 4 in 3P is the minimap :p +/* if (splitscreen == 2) // Player 4 in 3P is the minimap :p { #ifdef HAVE_BLUA if (LUA_HudEnabled(hud_minimap)) #endif K_drawKartMinimap(); - } + }*/ // Draw full screen stuff that turns off the rest of the HUD if (mapreset && stplyr == &players[displayplayer]) @@ -8122,7 +8350,7 @@ void K_drawKartHUD(void) if (cv_kartcheck.value && !splitscreen && !players[displayplayer].exiting) K_drawKartPlayerCheck(); - if (splitscreen == 0 && cv_kartminimap.value && !titledemo) + if (cv_kartminimap.value && !titledemo) { #ifdef HAVE_BLUA if (LUA_HudEnabled(hud_minimap)) From 9a9b13bf514f8ab7a0af7fe3335fa6740481d75e Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sat, 29 Dec 2018 11:17:51 +0100 Subject: [PATCH 02/86] Alignment mistakes for nongreen --- src/k_kart.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index fa0244979..896dcc84e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6852,12 +6852,12 @@ static void K_DrawKartPositionNum(INT32 num) if (stplyr == &players[displayplayer]) // for player 1: display this at the top right, above the minimap. { fy = 32; - fflags = V_SNAPTOTOP|V_SNAPTOLEFT; + fflags = V_SNAPTOTOP|V_SNAPTORIGHT; } else // if we're not p1, that means we're p2. display this at the bottom right, below the minimap. { fy = BASEVIDHEIGHT - 8; - fflags = V_SNAPTOBOTTOM|V_SNAPTOLEFT; + fflags = V_SNAPTOBOTTOM|V_SNAPTORIGHT; } } else // now we're having a fun game. @@ -7588,7 +7588,7 @@ static void K_drawKartMinimap(void) patch_t *AutomapPic; INT32 i = 0; INT32 x, y; - INT32 minimaptrans, splitflags = (splitscreen < 2 ? 0 : V_SNAPTORIGHT); + INT32 minimaptrans, splitflags = (splitscreen == 3 ? 0 : V_SNAPTORIGHT); // flags should only be 0 when it's centered (4p split) boolean dop1later = false; // Draw the HUD only when playing in a level. From 473b4ff5a485dafbc1b8d0190e41e8dae0ced32b Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sat, 29 Dec 2018 21:46:40 +0100 Subject: [PATCH 03/86] Cleaner code because I was a huge idiot --- src/k_kart.c | 140 ++++++++++++--------------------------------------- 1 file changed, 31 insertions(+), 109 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 896dcc84e..2b0ae3187 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6166,10 +6166,10 @@ INT32 CHEK_Y; // CHECK graphic INT32 MINI_X, MINI_Y; // Minimap INT32 WANT_X, WANT_Y; // Battle WANTED poster -// This is messy AND looks horrible, but I really couldn't find any other magic trick for 4 player splitscreen garbage. Sorry. -INT32 ITEM2_X, ITEM2_Y, ITEM3_X, ITEM3_Y, ITEM4_X, ITEM4_Y; -INT32 LAPS2_X, LAPS2_Y, LAPS3_X, LAPS3_Y, LAPS4_X, LAPS4_Y; -INT32 POSI2_X, POSI2_Y, POSI3_X, POSI3_Y, POSI4_X, POSI4_Y; +// This is for the P2 and P4 side of splitscreen. Then we'll flip P1's and P2's to the bottom with V_SPLITSCREEN. +INT32 ITEM2_X, ITEM2_Y; +INT32 LAPS2_X, LAPS2_Y; +INT32 POSI2_X, POSI2_Y; static void K_initKartHUD(void) @@ -6277,27 +6277,7 @@ static void K_initKartHUD(void) POSI2_X = BASEVIDWIDTH -9; POSI2_Y = (BASEVIDHEIGHT/2)- 16; - // 3P (bottom left) - ITEM3_X = -9; - ITEM3_Y = (BASEVIDHEIGHT/2) -9; - - LAPS3_X = 3; - LAPS3_Y = (BASEVIDHEIGHT)-13; - - POSI3_X = 32; - POSI3_Y = (BASEVIDHEIGHT)- 16; - - // 4P (bottom right) - ITEM4_X = BASEVIDWIDTH-40; - ITEM4_Y = (BASEVIDHEIGHT/2) -9; - - LAPS4_X = BASEVIDWIDTH-45; - LAPS4_Y = (BASEVIDHEIGHT)-13; - - POSI4_X = BASEVIDWIDTH-9; - POSI4_Y = (BASEVIDHEIGHT)- 16; - - + // Reminder that 3P and 4P are just 1P and 2P splitscreen'd to the bottom. STCD_X = BASEVIDWIDTH/4; @@ -6598,29 +6578,17 @@ static void K_drawKartItem(void) } else // now we're having a fun game. { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayer] || stplyr == &players[thirddisplayplayer]) // If we are P1 or P3... { fx = ITEM_X; fy = ITEM_Y; - fflags = V_SNAPTOTOP|V_SNAPTOLEFT; + fflags = V_SNAPTOLEFT|((stplyr == &players[thirddisplayplayer]) ? V_SPLITSCREEN : V_SNAPTOTOP); // flip P3 to the bottom. } - else if (stplyr == &players[secondarydisplayplayer]) + else // else, that means we're P2 or P4. { fx = ITEM2_X; fy = ITEM2_Y; - fflags = V_SNAPTOTOP|V_SNAPTORIGHT; - } - else if (stplyr == &players[thirddisplayplayer]) - { - fx = ITEM3_X; - fy = ITEM3_Y; - fflags = V_SNAPTOLEFT; - } - else if (stplyr == &players[fourthdisplayplayer]) - { - fx = ITEM4_X; - fy = ITEM4_Y; - fflags = V_SNAPTORIGHT; + fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN : V_SNAPTOTOP); // flip P4 to the bottom } } @@ -6846,7 +6814,7 @@ static void K_DrawKartPositionNum(INT32 num) W = FixedMul(W<>FRACBITS; // pain and suffering defined below - if (splitscreen < 2) // for this splitscreen, we'll be using more unique coordinates so we don't overlap the minimap :D + if (splitscreen < 2) // for this splitscreen, we'll use case by case because it's a bit different. { fx = POSI_X; if (stplyr == &players[displayplayer]) // for player 1: display this at the top right, above the minimap. @@ -6860,31 +6828,19 @@ static void K_DrawKartPositionNum(INT32 num) fflags = V_SNAPTOBOTTOM|V_SNAPTORIGHT; } } - else // now we're having a fun game. + else { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayer] || stplyr == &players[thirddisplayplayer]) // If we are P1 or P3... { fx = POSI_X; fy = POSI_Y; - fflags = V_SNAPTOLEFT; + fflags = V_SNAPTOLEFT|((stplyr == &players[thirddisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P3 to the bottom. } - else if (stplyr == &players[secondarydisplayplayer]) + else // else, that means we're P2 or P4. { fx = POSI2_X; fy = POSI2_Y; - fflags = V_SNAPTORIGHT; - } - else if (stplyr == &players[thirddisplayplayer]) - { - fx = POSI3_X; - fy = POSI3_Y; - fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; - } - else if (stplyr == &players[fourthdisplayplayer]) - { - fx = POSI4_X; - fy = POSI4_Y; - fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P4 to the bottom } } @@ -7188,31 +7144,19 @@ static void K_drawKartLaps(void) fy = LAPS_Y; fflags = splitflags; } - else // now we're having a fun game. + else { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayer] || stplyr == &players[thirddisplayplayer]) // If we are P1 or P3... { fx = LAPS_X; fy = LAPS_Y; - fflags = V_SNAPTOLEFT; + fflags = V_SNAPTOLEFT|((stplyr == &players[thirddisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P3 to the bottom. } - else if (stplyr == &players[secondarydisplayplayer]) + else // else, that means we're P2 or P4. { fx = LAPS2_X; fy = LAPS2_Y; - fflags = V_SNAPTORIGHT; - } - else if (stplyr == &players[thirddisplayplayer]) - { - fx = LAPS3_X; - fy = LAPS3_Y; - fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; - } - else if (stplyr == &players[fourthdisplayplayer]) - { - fx = LAPS4_X; - fy = LAPS4_Y; - fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P4 to the bottom } } @@ -7266,29 +7210,18 @@ static void K_drawKartBumpersOrKarma(void) { // we will reuse lap coords here since it's essentially the same shit. - if (stplyr == &players[displayplayer]) + + if (stplyr == &players[displayplayer] || stplyr == &players[thirddisplayplayer]) // If we are P1 or P3... { fx = LAPS_X; fy = LAPS_Y; - fflags = V_SNAPTOLEFT; + fflags = V_SNAPTOLEFT|((stplyr == &players[thirddisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P3 to the bottom. } - else if (stplyr == &players[secondarydisplayplayer]) + else // else, that means we're P2 or P4. { fx = LAPS2_X; fy = LAPS2_Y; - fflags = V_SNAPTORIGHT; - } - else if (stplyr == &players[thirddisplayplayer]) - { - fx = LAPS3_X; - fy = LAPS3_Y; - fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; - } - else if (stplyr == &players[fourthdisplayplayer]) - { - fx = LAPS4_X; - fy = LAPS4_Y; - fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P4 to the bottom } if (stplyr->kartstuff[k_bumper] <= 0) @@ -7364,31 +7297,20 @@ static void K_drawKartWanted(void) fy = WANT_Y; fflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT); } - else // now we're having a fun game. + else { - if (stplyr == &players[displayplayer]) + + if (stplyr == &players[displayplayer] || stplyr == &players[thirddisplayplayer]) // If we are P1 or P3... { fx = LAPS_X; fy = POSI_Y - 8; - fflags = V_SNAPTOLEFT; + fflags = V_SNAPTOLEFT|((stplyr == &players[thirddisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P3 to the bottom. } - else if (stplyr == &players[secondarydisplayplayer]) + else // else, that means we're P2 or P4. { fx = LAPS2_X - 10; fy = POSI2_Y - 8; - fflags = V_SNAPTORIGHT; - } - else if (stplyr == &players[thirddisplayplayer]) - { - fx = LAPS3_X; - fy = POSI3_Y - 8; - fflags = V_SNAPTOLEFT|V_SNAPTOBOTTOM; - } - else if (stplyr == &players[fourthdisplayplayer]) - { - fx = LAPS4_X - 10; - fy = POSI4_Y - 8; - fflags = V_SNAPTORIGHT|V_SNAPTOBOTTOM; + fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P4 to the bottom } } From 337e0da8e409c14b25b79bdf2fe03c4d19c059b9 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 15:41:58 -0500 Subject: [PATCH 04/86] Implement deployer scripts for Travis -- OSX and Linux package building [Kart merge] --- .gitignore | 2 + .travis.yml | 448 +++++++++++++++++- CMakeLists.txt | 10 +- assets/.gitignore | 11 +- assets/CMakeLists.txt | 84 +++- .../{debian => debian-template}/README.Debian | 52 +- .../{debian => debian-template}/README.source | 0 assets/debian-template/changelog | 5 + assets/{debian => debian-template}/compat | 0 assets/{debian => debian-template}/control | 8 +- {debian => assets/debian-template}/copyright | 10 +- assets/{debian => debian-template}/rules | 54 ++- .../{debian => debian-template}/source/format | 0 .../source/options | 0 assets/debian/changelog | 19 - {debian => debian-template}/README.Debian | 50 +- {debian => debian-template}/README.source | 0 debian-template/changelog | 5 + {debian => debian-template}/compat | 0 {debian => debian-template}/control | 24 +- {assets/debian => debian-template}/copyright | 10 +- {debian => debian-template}/docs | 0 {debian => debian-template}/rules | 25 +- {debian => debian-template}/source/format | 0 {debian => debian-template}/source/options | 2 +- debian-template/srb2.desktop | 10 + debian/changelog | 12 - debian/srb2.desktop | 10 - debian_template.sh | 166 +++++++ deployer/travis/deployer.sh | 157 ++++++ deployer/travis/deployer_build.sh | 190 ++++++++ deployer/travis/deployer_defaults.sh | 107 +++++ deployer/travis/deployer_dput.sh | 133 ++++++ deployer/travis/deployer_ftp.sh | 137 ++++++ src/sdl/CMakeLists.txt | 13 +- 35 files changed, 1598 insertions(+), 156 deletions(-) rename assets/{debian => debian-template}/README.Debian (59%) rename assets/{debian => debian-template}/README.source (100%) create mode 100644 assets/debian-template/changelog rename assets/{debian => debian-template}/compat (100%) rename assets/{debian => debian-template}/control (84%) rename {debian => assets/debian-template}/copyright (57%) rename assets/{debian => debian-template}/rules (58%) mode change 100755 => 100644 rename assets/{debian => debian-template}/source/format (100%) rename assets/{debian => debian-template}/source/options (100%) delete mode 100644 assets/debian/changelog rename {debian => debian-template}/README.Debian (62%) rename {debian => debian-template}/README.source (100%) create mode 100644 debian-template/changelog rename {debian => debian-template}/compat (100%) rename {debian => debian-template}/control (65%) rename {assets/debian => debian-template}/copyright (57%) rename {debian => debian-template}/docs (100%) rename {debian => debian-template}/rules (87%) rename {debian => debian-template}/source/format (100%) rename {debian => debian-template}/source/options (81%) create mode 100644 debian-template/srb2.desktop delete mode 100644 debian/changelog delete mode 100644 debian/srb2.desktop create mode 100644 debian_template.sh create mode 100644 deployer/travis/deployer.sh create mode 100644 deployer/travis/deployer_build.sh create mode 100644 deployer/travis/deployer_defaults.sh create mode 100644 deployer/travis/deployer_dput.sh create mode 100644 deployer/travis/deployer_ftp.sh diff --git a/.gitignore b/.gitignore index 922fac4aa..3090417dd 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ Win32_LIB_ASM_Release *.db *.opendb /.vs +/debian +/assets/debian diff --git a/.travis.yml b/.travis.yml index 3166ed783..e546f2f98 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,20 @@ +# Travis-CI Config +# +# You may use the Deployer to upload packages and builds to external servers. +# See deployer/travis/deployer_defaults.sh for environment variables to configure. + language: c sudo: required dist: trusty matrix: include: +################################ +# Test Buildbots +# Deployer does not operate on these. See Deployer Buildbots, below. +# These bots are disabled when a deployment is triggered by 'deployer' branch name AND DPL_TERMINATE_TESTS=1. +# These bots remain enabled when a deployment is triggered by release tag. +################################ - os: linux addons: apt: @@ -15,6 +26,7 @@ matrix: - p7zip-full - gcc-4.4 compiler: gcc-4.4 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #gcc-4.4 (Ubuntu/Linaro 4.4.7-8ubuntu1) 4.4.7 - os: linux addons: @@ -27,6 +39,7 @@ matrix: - p7zip-full - gcc-4.6 compiler: gcc-4.6 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #gcc-4.6 (Ubuntu/Linaro 4.6.4-6ubuntu2) 4.6.4 - os: linux addons: @@ -39,9 +52,11 @@ matrix: - p7zip-full - gcc-4.7 compiler: gcc-4.7 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #gcc-4.7 - os: linux compiler: gcc + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 - os: linux addons: @@ -56,6 +71,7 @@ matrix: - p7zip-full - gcc-4.8 compiler: gcc-4.8 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 - os: linux addons: @@ -71,6 +87,7 @@ matrix: - gcc-7 compiler: gcc-7 env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough" + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #gcc-7 (Ubuntu 7.2.0-1ubuntu1~14.04) 7.2.0 20170802 - os: linux addons: @@ -86,9 +103,11 @@ matrix: - gcc-8 compiler: gcc-8 env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough -Wno-error=format-overflow" + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #gcc-8 (Ubuntu 7.2.0-1ubuntu1~14.04) 8.1.0 - os: linux compiler: clang + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #clang version 3.5.0 (tags/RELEASE_350/final) - os: linux addons: @@ -103,6 +122,7 @@ matrix: - p7zip-full - clang-3.5 compiler: clang-3.5 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #Ubuntu clang version 3.5.0-4ubuntu2~trusty2 (tags/RELEASE_350/final) (based on LLVM 3.5.0) - os: linux addons: @@ -118,6 +138,7 @@ matrix: - p7zip-full - clang-3.6 compiler: clang-3.6 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #Ubuntu clang version 3.6.2-svn240577-1~exp1 (branches/release_36) (based on LLVM 3.6.2) - os: linux addons: @@ -133,6 +154,7 @@ matrix: - p7zip-full - clang-3.7 compiler: clang-3.7 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #Ubuntu clang version 3.7.1-svn253571-1~exp1 (branches/release_37) (based on LLVM 3.7.1) - os: linux addons: @@ -148,6 +170,7 @@ matrix: - p7zip-full - clang-3.8 compiler: clang-3.8 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #clang version 3.8.1-svn271127-1~exp1 (branches/release_38) - os: linux addons: @@ -163,6 +186,7 @@ matrix: - p7zip-full - clang-3.9 compiler: clang-3.9 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #clang version 3.9.X # - os: linux # addons: @@ -178,6 +202,7 @@ matrix: # - p7zip-full # - clang-4.0 # compiler: clang-4.0 +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #clang version 4.0.X # - os: linux # addons: @@ -193,32 +218,321 @@ matrix: # - p7zip-full # - clang-5.0 # compiler: clang-5.0 +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #clang version 5.0.X # - os: osx # osx_image: beta-xcode6.1 +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn) # - os: osx # osx_image: beta-xcode6.2 # compiler: gcc +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn) ## - os: osx ## osx_image: beta-xcode6.3 +## if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ ## #I think xcode.6.3 VM is broken, it does not boot # - os: osx # osx_image: xcode6.4 +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) # - os: osx # osx_image: xcode7 +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #Apple LLVM version 7.0.0 (clang-700.0.72) # - os: osx # osx_image: xcode7.1 +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #Apple LLVM version 7.0.0 (clang-700.1.76) # - os: osx # osx_image: xcode7.2 +# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ # #Apple LLVM version 7.0.2 (clang-700.1.81) - os: osx osx_image: xcode7.3 + if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/ #Apple LLVM version 7.3.0 (clang-703.0.31) + + +################################ +# Deployer Buildbots - OSX +################################ + - os: osx + osx_image: xcode7.3 + if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + AND env(DPL_TERMINATE_MAIN) != "1" + env: + - _DPL_JOB_ENABLED=1 + - _DPL_JOB_NAME=osx + - _DPL_FTP_TARGET=1 + - _DPL_PACKAGE_BINARY=1 + #Apple LLVM version 7.3.0 (clang-703.0.31) + + +################################ +# Deployer Buildbots - Linux assets +# Set DPL_TERMINATE_ASSETS to disable all of these +# List Ubuntu LTS next, newest to oldest +# Then list non-LTS, newest to oldest +################################ + - os: linux + addons: + apt: + packages: + - libsdl2-mixer-dev + - libpng-dev + - libgl1-mesa-dev + - libgme-dev + - p7zip-full + - gcc-4.8 + compiler: gcc-4.8 + dist: xenial + if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + AND env(DPL_TERMINATE_ASSETS) != "1" + env: + - _DPL_JOB_ENABLED=1 + - _DPL_JOB_NAME=bionic-asset + - _DPL_DPUT_TARGET=1 + - _DPL_PACKAGE_SOURCE=1 + - _DPL_PACKAGE_MAIN=0 + - _DPL_PACKAGE_ASSET=1 + - PACKAGE_DISTRO=bionic + #- PACKAGE_SUBVERSION=~18.04bionic + #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + + ################################ + # The below asset bots produce packages that occupy too much space. + # It would be nice if the asset files were not included in the source package itself, + # so these can deploy to each Ubuntu target without manual intervention. + # + # Currently, to get around Launchpad's space limitation, + # copy the packages from *one* bot and the space usage is not increased. + ################################ + # - os: linux + # addons: + # apt: + # packages: + # - libsdl2-mixer-dev + # - libpng-dev + # - libgl1-mesa-dev + # - libgme-dev + # - p7zip-full + # - gcc-4.8 + # compiler: gcc-4.8 + # dist: trusty + # if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + # AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + # AND env(DPL_TERMINATE_ASSETS) != "1" + # env: + # - _DPL_JOB_ENABLED=1 + # - _DPL_JOB_NAME=trusty-asset + # - _DPL_DPUT_TARGET=1 + # - _DPL_PACKAGE_SOURCE=1 + # - _DPL_PACKAGE_MAIN=0 + # - _DPL_PACKAGE_ASSET=1 + # - PACKAGE_DISTRO=trusty + # #- PACKAGE_SUBVERSION=~14.04trusty + # #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + # - os: linux + # addons: + # apt: + # packages: + # - libsdl2-mixer-dev + # - libpng-dev + # - libgl1-mesa-dev + # - libgme-dev + # - p7zip-full + # - gcc-4.8 + # compiler: gcc-4.8 + # dist: xenial + # if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + # AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + # AND env(DPL_TERMINATE_ASSETS) != "1" + # env: + # - _DPL_JOB_ENABLED=1 + # - _DPL_JOB_NAME=disco-asset + # - _DPL_DPUT_TARGET=1 + # - _DPL_PACKAGE_SOURCE=1 + # - _DPL_PACKAGE_MAIN=0 + # - _DPL_PACKAGE_ASSET=1 + # - PACKAGE_DISTRO=disco + # #- PACKAGE_SUBVERSION=~19.04disco + # #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + # - os: linux + # addons: + # apt: + # packages: + # - libsdl2-mixer-dev + # - libpng-dev + # - libgl1-mesa-dev + # - libgme-dev + # - p7zip-full + # - gcc-4.8 + # compiler: gcc-4.8 + # dist: xenial + # if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + # AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + # AND env(DPL_TERMINATE_ASSETS) != "1" + # env: + # - _DPL_JOB_ENABLED=1 + # - _DPL_JOB_NAME=cosmic-asset + # - _DPL_DPUT_TARGET=1 + # - _DPL_PACKAGE_SOURCE=1 + # - _DPL_PACKAGE_MAIN=0 + # - _DPL_PACKAGE_ASSET=1 + # - PACKAGE_DISTRO=cosmic + # #- PACKAGE_SUBVERSION=~18.10cosmic + # #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + # - os: linux + # addons: + # apt: + # packages: + # - libsdl2-mixer-dev + # - libpng-dev + # - libgl1-mesa-dev + # - libgme-dev + # - p7zip-full + # - gcc-4.8 + # compiler: gcc-4.8 + # dist: xenial + # if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + # AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + # AND env(DPL_TERMINATE_ASSETS) != "1" + # env: + # - _DPL_JOB_ENABLED=1 + # - _DPL_JOB_NAME=xenial-asset + # - _DPL_DPUT_TARGET=1 + # - _DPL_PACKAGE_SOURCE=1 + # - _DPL_PACKAGE_MAIN=0 + # - _DPL_PACKAGE_ASSET=1 + # - PACKAGE_DISTRO=xenial + # #- PACKAGE_SUBVERSION=~16.04xenial + # #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + + +################################ +# Deployer Buildbots - Linux binaries +# List Ubuntu LTS, newest to oldest +# Then list non-LTS, newest to oldest +################################ + - os: linux + addons: + apt: + packages: + - libsdl2-mixer-dev + - libpng-dev + - libgl1-mesa-dev + - libgme-dev + - p7zip-full + - gcc-4.8 + compiler: gcc-4.8 + dist: xenial + if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + AND env(DPL_TERMINATE_MAIN) != "1" + env: + - _DPL_JOB_ENABLED=1 + - _DPL_JOB_NAME=bionic + - _DPL_DPUT_TARGET=1 + - _DPL_PACKAGE_SOURCE=1 + - PACKAGE_DISTRO=bionic + - PACKAGE_SUBVERSION=~18.04bionic + #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + - os: linux + addons: + apt: + packages: + - libsdl2-mixer-dev + - libpng-dev + - libgl1-mesa-dev + - libgme-dev + - p7zip-full + - gcc-4.8 + compiler: gcc-4.8 + dist: trusty + if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + AND env(DPL_TERMINATE_MAIN) != "1" + env: + - _DPL_JOB_ENABLED=1 + - _DPL_JOB_NAME=trusty + - _DPL_DPUT_TARGET=1 + - _DPL_PACKAGE_SOURCE=1 + - PACKAGE_DISTRO=trusty + - PACKAGE_SUBVERSION=~14.04trusty + #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + - os: linux + addons: + apt: + packages: + - libsdl2-mixer-dev + - libpng-dev + - libgl1-mesa-dev + - libgme-dev + - p7zip-full + - gcc-4.8 + compiler: gcc-4.8 + dist: xenial + if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + AND env(DPL_TERMINATE_MAIN) != "1" + env: + - _DPL_JOB_ENABLED=1 + - _DPL_JOB_NAME=disco + - _DPL_DPUT_TARGET=1 + - _DPL_PACKAGE_SOURCE=1 + - PACKAGE_DISTRO=disco + - PACKAGE_SUBVERSION=~19.04disco + #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + - os: linux + addons: + apt: + packages: + - libsdl2-mixer-dev + - libpng-dev + - libgl1-mesa-dev + - libgme-dev + - p7zip-full + - gcc-4.8 + compiler: gcc-4.8 + dist: xenial + if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + AND env(DPL_TERMINATE_MAIN) != "1" + env: + - _DPL_JOB_ENABLED=1 + - _DPL_JOB_NAME=cosmic + - _DPL_DPUT_TARGET=1 + - _DPL_PACKAGE_SOURCE=1 + - PACKAGE_DISTRO=cosmic + - PACKAGE_SUBVERSION=~18.10cosmic + #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 + - os: linux + addons: + apt: + packages: + - libsdl2-mixer-dev + - libpng-dev + - libgl1-mesa-dev + - libgme-dev + - p7zip-full + - gcc-4.8 + compiler: gcc-4.8 + dist: xenial + if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") + AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1")) + AND env(DPL_TERMINATE_MAIN) != "1" + env: + - _DPL_JOB_ENABLED=1 + - _DPL_JOB_NAME=xenial + - _DPL_DPUT_TARGET=1 + - _DPL_PACKAGE_SOURCE=1 + - PACKAGE_DISTRO=xenial + - PACKAGE_SUBVERSION=~16.04xenial + #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 allow_failures: - compiler: clang-3.5 - compiler: clang-3.6 @@ -229,12 +543,14 @@ matrix: - compiler: clang-5.0 - compiler: gcc-8 + cache: apt: true ccache: true directories: - $HOME/srb2_cache + addons: apt: packages: @@ -242,23 +558,127 @@ addons: - libpng-dev - libgl1-mesa-dev - libgme-dev + - zlib1g-dev - p7zip-full -before_script: - - wget --verbose --server-response -c http://rosenthalcastle.org/srb2/SRB2-v2115-assets-2.7z -O $HOME/srb2_cache/SRB2-v2115-assets-2.7z - - 7z x $HOME/srb2_cache/SRB2-v2115-assets-2.7z -oassets - - mkdir build - - cd build - - export CFLAGS="-Wall -W -Werror $WFLAGS" - - export CCACHE_COMPRESS=true - - cmake .. -DCMAKE_BUILD_TYPE=Release before_install: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install sdl2 sdl2_mixer game-music-emu p7zip; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install cmake||true; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/release/SDL2-2.0.6.dmg; hdiutil attach SDL2-2.0.6.dmg; sudo cp -a /Volumes/SDL2/SDL2.framework /Library/Frameworks/; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.dmg; hdiutil attach SDL2_mixer-2.0.1.dmg; sudo cp -a /Volumes/SDL2_mixer/SDL2_mixer.framework /Library/Frameworks/; fi + # Initialize Deployer defaults + - . ./deployer/travis/deployer_defaults.sh + # Initialize Deployer; check if Deployer is enabled + # This needs to be run in the current shell so that $__DPL_ACTIVE is set for this session + - . ./deployer/travis/deployer.sh + # Also check if we should now terminate + - if [[ "$__DPL_TRY_TERMINATE_EARLY" == "1" ]]; then + if [[ "$__DPL_ACTIVE" != "1" ]]; then + echo "Exiting early because this job is not deploying."; + exit; + fi; + fi + # If we're triggered by release tag, force ASSET_FILES_OPTIONAL_GET=1 + - if [[ "$__DPL_TAG_ELIGIBLE" = "1" ]]; then + ASSET_FILES_OPTIONAL_GET=1; + fi; + + +install: + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + brew update; + brew install sdl2 game-music-emu zlib p7zip; + brew install sdl2_mixer --with-flac --with-mpg123; + brew install cmake||true; + fi - mkdir -p $HOME/srb2_cache -script: make -k + +before_script: + # OLDPWD is root repo folder + - OLDPWD=$PWD + - cd "$HOME/srb2_cache" + + # stat is different for OSX + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + STATCMD="stat -f %m"; + else + STATCMD="stat -c %y"; + fi + + # Get asset files (required for MD5) + - if [[ "$ASSET_ARCHIVE_PATH" != "" ]]; then + if [ -f "$(basename $ASSET_ARCHIVE_PATH)" ]; then + echo "$(basename $ASSET_ARCHIVE_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_PATH))"; + fi; + wget --verbose --server-response -N "$ASSET_ARCHIVE_PATH"; + 7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$HOME/srb2_cache" -aos; + for f in $ASSET_FILES_REQUIRED; do + cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; + done; + fi; + + # Get individual required files + - for f in $ASSET_FILES_REQUIRED; do + if [ -f "$f" ]; then + echo "$f cache date -- $($STATCMD $f)"; + fi; + wget --verbose --server-response -N "$ASSET_BASE_PATH/$f"; + if [ ! -f "$HOME/srb2_cache/$f" ]; then + echo "Could not download \"$ASSET_BASE_PATH/$f\""; + return 1; + fi; + cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; + done; + + # Get the docs + - for f in $ASSET_FILES_DOCS; do + if [ -f "$f" ]; then + echo "$f cache date -- $($STATCMD $f)"; + fi; + wget --verbose --server-response -N "$ASSET_BASE_PATH/$f"; + cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; + done; + + # Get optional files too + - if [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]]; then + for f in $ASSET_FILES_OPTIONAL; do + if [ -f "$f" ]; then + echo "$f cache date -- $($STATCMD $f)"; + fi; + wget --verbose --server-response -N "$ASSET_BASE_PATH/$f"; + cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; + done; + fi; + + # Go back to root repo folder + - cd "$OLDPWD" + + # Prepare CMake asset lists + - SRB2_ASSET_REQUIRED=$(echo ${ASSET_FILES_REQUIRED// /\;}) + - SRB2_ASSET_OPTIONAL=$(echo ${ASSET_FILES_OPTIONAL// /\;}) + - SRB2_ASSET_DOCS=$(echo ${ASSET_FILES_DOCS// /\;}) + + # Prepare CMake + - mkdir build + - cd build + - mkdir package + - export CFLAGS="-Wall -W -Werror $WFLAGS" + - export CCACHE_COMPRESS=true + - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/bin -DCPACK_PACKAGE_DIRECTORY=$PWD/package + -DSRB2_ASSET_REQUIRED="${SRB2_ASSET_REQUIRED}" -DSRB2_ASSET_OPTIONAL="${SRB2_ASSET_OPTIONAL}" + -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}" + -DCPACK_PACKAGE_DESCRIPTION_SUMMARY="${PROGRAM_NAME}" + -DCPACK_PACKAGE_VENDOR="${PROGRAM_VENDOR}" + -DSRB2_SDL2_EXE_NAME="${PROGRAM_FILENAME}" + + +script: + # Build our Makefile from Cmake! + - if [[ "$__DPL_ACTIVE" == "1" ]]; then + . ../deployer/travis/deployer_build.sh; + else + make -k; + fi; + +after_success: + # Run the Deployer scripts + - . ../deployer/travis/deployer_ftp.sh + - . ../deployer/travis/deployer_dput.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index eb91866f0..e7dda8366 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,6 @@ cmake_minimum_required(VERSION 3.0) +# DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string. +# Version change is fine. project(SRB2 VERSION 2.1.20 LANGUAGES C) @@ -86,8 +88,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") # Set EXE names so the assets CMakeLists can refer to its target -set(SRB2_SDL2_EXE_NAME srb2) -set(SRB2_WIN_EXE_NAME srb2dd) +set(SRB2_SDL2_EXE_NAME srb2 CACHE STRING "Executable binary output name") +set(SRB2_WIN_EXE_NAME srb2dd CACHE STRING "Executable binary output name for DirectDraw build") include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) @@ -116,8 +118,8 @@ if(${CMAKE_SYSTEM} MATCHES "Darwin") set(CPACK_GENERATOR "DragNDrop") endif() -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Sonic Robo Blast 2") -set(CPACK_PACKAGE_VENDOR "Sonic Team Jr.") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Sonic Robo Blast 2" CACHE STRING "Program name for display purposes") +set(CPACK_PACKAGE_VENDOR "Sonic Team Jr." CACHE STRING "Vendor name for display purposes") #set(CPACK_PACKAGE_DESCRIPTION_FILE ) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set(CPACK_PACKAGE_VERSION_MAJOR ${SRB2_VERSION_MAJOR}) diff --git a/assets/.gitignore b/assets/.gitignore index 9ed61ca1a..d6e46a75b 100644 --- a/assets/.gitignore +++ b/assets/.gitignore @@ -1,5 +1,10 @@ -* -*.* +*.srb +*.pk3 +*.dta +*.wad +*.txt !README.txt !LICENSE.txt -!LICENSE-3RD-PARTY.txt \ No newline at end of file +!LICENSE-3RD-PARTY.txt +!CMakeLists.txt +!debian-template/* diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index 2cf93c84a..5f6db6dd5 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -1,32 +1,48 @@ ## Assets Target Configuration ## -# MD5 generation -set(SRB2_ASSET_ALL - ${CMAKE_CURRENT_SOURCE_DIR}/srb2.srb - #${CMAKE_CURRENT_SOURCE_DIR}/patch.dta - ${CMAKE_CURRENT_SOURCE_DIR}/patch.kart - ${CMAKE_CURRENT_SOURCE_DIR}/gfx.kart - ${CMAKE_CURRENT_SOURCE_DIR}/textures.kart - ${CMAKE_CURRENT_SOURCE_DIR}/chars.kart - ${CMAKE_CURRENT_SOURCE_DIR}/maps.kart - ${CMAKE_CURRENT_SOURCE_DIR}/sounds.kart - #${CMAKE_CURRENT_SOURCE_DIR}/music.dta - ${CMAKE_CURRENT_SOURCE_DIR}/music.kart - ${CMAKE_CURRENT_SOURCE_DIR}/README.txt - ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt - ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE-3RD-PARTY.txt +# For prepending the current source path, later +FUNCTION(PREPEND var prefix) + SET(listVar "") + FOREACH(f ${ARGN}) + LIST(APPEND listVar "${prefix}/${f}") + ENDFOREACH(f) + SET(${var} "${listVar}" PARENT_SCOPE) +ENDFUNCTION(PREPEND) + +set(SRB2_ASSET_REQUIRED +"srb2.srb;\ +patch.kart;\ +gfx.kart;\ +textures.kart;\ +chars.kart;\ +bonuschars.kart;\ +maps.kart;\ +sounds.kart" + CACHE STRING "Required asset files for packaging. No spaces between entries!" ) -set(SRB2_ASSET_HASHED - srb2.srb - #patch.dta - patch.kart - gfx.kart - textures.kart - chars.kart - maps.kart +set(SRB2_ASSET_DOCS +"README.txt;\ +history.txt;\ +LICENSE.txt;\ +LICENSE-3RD-PARTY.txt" + CACHE STRING "Documentation files; will not fail if they do not exist. Packaged differently from optional assets. No spaces between entries!" ) +set(SRB2_ASSET_OPTIONAL +"music.kart" + CACHE STRING "Optional asset files. No spaces between entries!" +) + +# MD5 generation - Filename only, we don't append path to this +set(SRB2_ASSET_HASHED + ${SRB2_ASSET_REQUIRED} +) + +PREPEND(SRB2_ASSET_REQUIRED ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_REQUIRED}) +PREPEND(SRB2_ASSET_DOCS ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_DOCS}) +PREPEND(SRB2_ASSET_OPTIONAL ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_OPTIONAL}) + foreach(SRB2_ASSET ${SRB2_ASSET_HASHED}) file(MD5 ${CMAKE_CURRENT_SOURCE_DIR}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH") set(SRB2_ASSET_${SRB2_ASSET}_HASH ${SRB2_ASSET_${SRB2_ASSET}_HASH} PARENT_SCOPE) @@ -34,13 +50,29 @@ endforeach() # Installation -if(CLANG) +if(${CMAKE_SYSTEM} MATCHES Darwin) get_target_property(outname SRB2SDL2 OUTPUT_NAME) - install(FILES ${SRB2_ASSET_ALL} + install(FILES ${SRB2_ASSET_REQUIRED} DESTINATION "${outname}.app/Contents/Resources" ) + install(FILES ${SRB2_ASSET_OPTIONAL} + DESTINATION "${outname}.app/Contents/Resources" + OPTIONAL + ) + install(FILES ${SRB2_ASSET_DOCS} + DESTINATION . + OPTIONAL + ) else() - install(FILES ${SRB2_ASSET_ALL} + install(FILES ${SRB2_ASSET_REQUIRED} DESTINATION . ) + install(FILES ${SRB2_ASSET_OPTIONAL} + DESTINATION . + OPTIONAL + ) + install(FILES ${SRB2_ASSET_DOCS} + DESTINATION . + OPTIONAL + ) endif() diff --git a/assets/debian/README.Debian b/assets/debian-template/README.Debian similarity index 59% rename from assets/debian/README.Debian rename to assets/debian-template/README.Debian index 68c952a4e..f3fe90030 100644 --- a/assets/debian/README.Debian +++ b/assets/debian-template/README.Debian @@ -12,9 +12,39 @@ with apt-key add. Thanks! -- Callum Dickinson Fri, 26 Nov 2010 18:25:31 +1300 +--------------- + + +Templating + +Note that you MUST run [repo-root]/debian_template.sh before running debuild +on these scripts! debian_template.sh fills these template files with working values. + +You should also set PACKAGE_NAME_EMAIL="John Doe " to match +the identity of the key you will use to sign the package. + + +Building for Launchpad PPA + +Run this step first: + + 1. source [repo-root]/debian_template.sh + * Initializes defaults for the package variables and fills in templates. + +Use these steps to prepare building a source package for Launchpad: + + 1. cd [repo-root]/assets/ + 2. debuild -T clean-all (optional; if you already have asset files, this clears them) + +Build the source package: + + 1. debuild -T build (this downloads the asset files from srb2.org if necessary) + 2. debuild -S (builds the source package for Launchpad, including the asset files) + + Signing for Launchpad PPA -First, follow the above instructions to generate a GnuPG key with your identity. You will need +First, follow Callum's instructions to generate a GnuPG key with your identity. You will need to publish the fingerprint of that key to Ubuntu's key server. https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver @@ -26,22 +56,18 @@ upload signed source packages and publish them onto your PPA. IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that means your key is not set up correctly with your Launchpad account. +Finally, if your packages have not already been signed, follow these steps: -Building for Launchpad PPA + 1. cd .. + * Packages are located in the parent folder of where debuild was called + 2. debsign "srb2-data_[version]_source.changes" + * You may need to specify -k [key-fingerprint] -Use these steps to prepare building a source package for Launchpad: - 1. Highly recommend copying the assets/ folder to outside your repo folder, or else the asset - files may be included in the main source package, when you build that. - 2. cd [wherever-your-assets-folder-is]/assets/ - 3. debuild -T clean (optional, if you already have asset files) +Uploading for Launchpad PPA -Building the source package is a two-step process: - - 1. debuild -T build (this downloads the asset files from srb2.org if necessary) - 2. debuild -S (builds the source package for Launchpad, including the asset files) - -Then follow the instructions at to upload +Follow the instructions at to upload to your PPA and have Launchpad build your binary deb packages. + -- Marco Zafra Mon, 26 Nov 2018 21:13:00 -0500 diff --git a/assets/debian/README.source b/assets/debian-template/README.source similarity index 100% rename from assets/debian/README.source rename to assets/debian-template/README.source diff --git a/assets/debian-template/changelog b/assets/debian-template/changelog new file mode 100644 index 000000000..64562e2a3 --- /dev/null +++ b/assets/debian-template/changelog @@ -0,0 +1,5 @@ +${PACKAGE_NAME}-data (${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}) ${PACKAGE_DISTRO}; urgency=${PACKAGE_URGENCY} + + * ${PROGRAM_NAME} v${PROGRAM_VERSION} asset data + + -- ${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME} diff --git a/assets/debian/compat b/assets/debian-template/compat similarity index 100% rename from assets/debian/compat rename to assets/debian-template/compat diff --git a/assets/debian/control b/assets/debian-template/control similarity index 84% rename from assets/debian/control rename to assets/debian-template/control index 22d9643ee..ae5c0ce67 100644 --- a/assets/debian/control +++ b/assets/debian-template/control @@ -1,15 +1,15 @@ # SRB2-data Debian package control file. -Source: srb2-data +Source: ${PACKAGE_NAME}-data Section: games Priority: extra -Maintainer: Sonic Team Junior +Maintainer: ${PACKAGE_GROUP_NAME_EMAIL} Build-Depends: debhelper (>= 7.0.50~), wget Standards-Version: 3.8.4 -Homepage: http://www.srb2.org +Homepage: ${PACKAGE_WEBSITE} -Package: srb2-data +Package: ${PACKAGE_NAME}-data Architecture: all Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog diff --git a/debian/copyright b/assets/debian-template/copyright similarity index 57% rename from debian/copyright rename to assets/debian-template/copyright index 97d606b0f..cc47c453b 100644 --- a/debian/copyright +++ b/assets/debian-template/copyright @@ -1,18 +1,18 @@ This work was packaged for Debian by: - Marco Zafra Mon, 26 Nov 2018 14:31:00 -0500 + ${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME} It was downloaded from: - + ${PACKAGE_WEBSITE} Upstream Author(s): - Sonic Team Junior + ${PACKAGE_GROUP_NAME_EMAIL} Copyright: - Copyright (C) 1998-2018 Sonic Team Junior + Copyright (C) 1998-2018 by Sonic Team Junior License: @@ -21,7 +21,7 @@ License: The Debian packaging is: Copyright (C) 2010 Callum Dickinson - Copyright (C) 2010-2018 Sonic Team Junior + Copyright (C) 2010-2018 by Sonic Team Junior and is licensed under the GPL version 2, see "/usr/share/common-licenses/GPL-2". diff --git a/assets/debian/rules b/assets/debian-template/rules old mode 100755 new mode 100644 similarity index 58% rename from assets/debian/rules rename to assets/debian-template/rules index a34a3393f..99a4eaf3c --- a/assets/debian/rules +++ b/assets/debian-template/rules @@ -23,6 +23,16 @@ # ############################################################################# +############################################################################# +# +# !!!!!!!!!! DEPLOYER NOTE !!!!!!!!!! +# +# Variables to be templated are curly-braced ${PACKAGE_INSTALL_PATH} +# Variables used by the rules script are parenthese'd $(DATADIR) +# See [repo-root]/debian_template.sh +# +############################################################################# + # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 @@ -37,9 +47,12 @@ RM := rm -rf DIR := $(shell pwd) PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g') -DATAFILES := srb2.srb zones.dta player.dta rings.dta music.dta patch.dta README.txt LICENSE.txt LICENSE-3RD-PARTY.txt +DATAFILES := ${ASSET_FILES_REQUIRED} +DOCFILES := ${ASSET_FILES_DOCS} +OPTIONALFILES := ${ASSET_FILES_OPTIONAL} +GETOPTIONALFILES := ${ASSET_FILES_OPTIONAL_GET} -DATADIR := usr/games/SRB2 +DATADIR := $(shell echo "${PACKAGE_INSTALL_PATH}" | sed -e 's/^\///') RESOURCEDIR := . WGET := wget -P $(RESOURCEDIR) -c -nc @@ -49,18 +62,41 @@ build: # This will need to be updated every time SRB2 official version is # Copy data files to their install locations, and add data files to include-binaries for file in $(DATAFILES); do \ - if [ ! -f $(RESOURCEDIR)/$$file ]; then \ - $(WGET) http://alam.srb2.org/SRB2/2.1.21-Final/Resources/$$file; \ + if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ + $(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \ fi; \ - if [ -f $(RESOURCEDIR)/$$file ]; then \ - $(INSTALL) $(RESOURCEDIR)/$$file $(DIR)/debian/tmp/$(DATADIR)/$$file; \ - echo $(RESOURCEDIR)/$$file >> $(DIR)/debian/source/include-binaries; \ + if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ + $(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \ + echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \ fi; \ - if [ ! -f $(DIR)/debian/tmp/$(DATADIR)/$$file ]; then \ - echo $(DIR)/debian/tmp/$(DATADIR)/$$file not found and could not be downloaded!; \ + if [ ! -f $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR} ]; then \ + echo $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR} not found and could not be downloaded!; \ return 1; \ fi; \ done + # Do the same for DOCFILES, but don't error out if not found + for file in $(DOCFILES); do \ + if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ + $(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \ + fi; \ + if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ + $(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \ + echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \ + fi; \ + done + # Do the same for OPTIONALFILES if GETOPTIONALFILES == 1 + if [ "$(GETOPTIONALFILES)" = "1" ]; then \ + for file in $(OPTIONALFILES); do \ + if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ + $(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \ + fi; \ + if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ + $(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \ + echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \ + fi; \ + done; \ + fi; + binary-indep: # Generate install folder file diff --git a/assets/debian/source/format b/assets/debian-template/source/format similarity index 100% rename from assets/debian/source/format rename to assets/debian-template/source/format diff --git a/assets/debian/source/options b/assets/debian-template/source/options similarity index 100% rename from assets/debian/source/options rename to assets/debian-template/source/options diff --git a/assets/debian/changelog b/assets/debian/changelog deleted file mode 100644 index f3a92e1cd..000000000 --- a/assets/debian/changelog +++ /dev/null @@ -1,19 +0,0 @@ -srb2-data (2.1.21~7) trusty; urgency=high - - * Updated for SRB2 v2.1.21 - - -- Marco Zafra Mon, 26 Nov 2018 14:31:00 -0500 - - -srb2-data (2.1.14~1) unstable; urgency=low - - * Updated for SRB2 v2.1.14 - - -- Alam Arias Sat, 6 Jan 2016 11:00:00 -0500 - - -srb2-data (2.0.6-2) maverick; urgency=high - - * Initial proper release.. - - -- Callum Dickinson Sat, 29 Jan 2011 01:18:42 +1300 diff --git a/debian/README.Debian b/debian-template/README.Debian similarity index 62% rename from debian/README.Debian rename to debian-template/README.Debian index 4b724816e..3aa52787e 100644 --- a/debian/README.Debian +++ b/debian-template/README.Debian @@ -10,10 +10,38 @@ and give them to your users to install with apt-key add. Thanks! -- Callum Dickinson Fri, 26 Nov 2010 18:25:31 +1300 +--------------- + + +Templating + +Note that you MUST run [repo-root]/debian_template.sh before running debuild +on these scripts! debian_template.sh fills these template files with working values. + +You should also set PACKAGE_NAME_EMAIL="John Doe " to match +the identity of the key you will use to sign the package. + + +Building for Launchpad PPA + +Use these steps to prepare building a source package for Launchpad: + + 1. cd [repo-root] + 2. git reset --hard; git clean -fd; git clean -fx; + * Resets your repo folder to a committed state and removes untracked files + * If you built srb2-data in the assets/ folder, MAKE SURE THAT FOLDER DOES NOT HAVE ASSETS, + OR THEY MAY BE INCLUDED IN THE MAIN SOURCE PACKAGE! + +Build the source package: + + 1. source [repo-root]/debian_template.sh + * Initializes defaults for the package variables and fills in templates. + 2. debuild -S (builds the source package for Launchpad) + Signing for Launchpad PPA -First, follow the above instructions to generate a GnuPG key with your identity. You will need +First, follow Callum's instructions to generate a GnuPG key with your identity. You will need to publish the fingerprint of that key to Ubuntu's key server. https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver @@ -25,22 +53,18 @@ upload signed source packages and publish them onto your PPA. IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that means your key is not set up correctly with your Launchpad account. +Finally, if your packages have not already been signed, follow these steps: -Building for Launchpad PPA + 1. cd .. + * Packages are located in the parent folder of where debuild was called + 2. debsign "srb2_[version]_source.changes" + * You may need to specify -k [key-fingerprint] -Use these steps to prepare building a source package for Launchpad: - 1. cd [srb2repo] - 2. git reset --hard; git clean -fd; git clean -fx; - * Resets your repo folder to a committed state and removes untracked files - * If you built srb2-data in the assets/ folder, MAKE SURE THAT FOLDER DOES NOT HAVE ASSETS, - OR THEY MAY BE INCLUDED IN THE MAIN SOURCE PACKAGE! +Uploading for Launchpad PPA -Building the source package takes just one step: - - 1. debuild -S (builds the source package for Launchpad) - -Then follow the instructions at to upload +Follow the instructions at to upload to your PPA and have Launchpad build your binary deb packages. + -- Marco Zafra Mon, 26 Nov 2018 21:13:00 -0500 diff --git a/debian/README.source b/debian-template/README.source similarity index 100% rename from debian/README.source rename to debian-template/README.source diff --git a/debian-template/changelog b/debian-template/changelog new file mode 100644 index 000000000..fb08908cd --- /dev/null +++ b/debian-template/changelog @@ -0,0 +1,5 @@ +${PACKAGE_NAME} (${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}) ${PACKAGE_DISTRO}; urgency=${PACKAGE_URGENCY} + + * ${PROGRAM_NAME} v${PROGRAM_VERSION} program build + + -- ${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME} diff --git a/debian/compat b/debian-template/compat similarity index 100% rename from debian/compat rename to debian-template/compat diff --git a/debian/control b/debian-template/control similarity index 65% rename from debian/control rename to debian-template/control index ce3b33fbd..e1348d704 100644 --- a/debian/control +++ b/debian-template/control @@ -1,24 +1,30 @@ # SRB2 Debian package control file. -Source: srb2 +Source: ${PACKAGE_NAME} Section: games Priority: extra -Maintainer: Sonic Team Junior +Maintainer: ${PACKAGE_GROUP_NAME_EMAIL} Build-Depends: debhelper (>= 7.0.50~), libsdl2-dev, libsdl2-mixer-dev, - libpng12-dev (>= 1.2.7) | libpng-dev, + libpng-dev | libpng16-dev | libpng12-dev (>= 1.2.7), zlib1g-dev, libgme-dev, libglu1-dev | libglu-dev, libosmesa6-dev | libgl-dev, nasm [i386] Standards-Version: 3.8.4 -Homepage: http://www.srb2.org +Homepage: ${PACKAGE_WEBSITE} -Package: srb2 +Package: ${PACKAGE_NAME} Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (>= 2.1.15), srb2-data (<= 2.1.21) +Depends: ${SHLIBS_DEPENDS}, ${MISC_DEPENDS}, + ${PACKAGE_NAME}-data (>> ${PACKAGE_ASSET_MINVERSION}), ${PACKAGE_NAME}-data (<< ${PACKAGE_ASSET_MAXVERSION}), + libsdl2-2.0-0, + libsdl2-mixer-2.0-0, + zlib1g, + libgme0, + libpng | libpng16-16 | libpng12-0 Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy @@ -28,10 +34,10 @@ Description: A cross-platform 3D Sonic fangame and quite a lot of the fun that the original Sonic games provided. -Package: srb2-dbg +Package: ${PACKAGE_NAME}-dbg Architecture: any -# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat -Depends: libc6, ${misc:Depends}, srb2-data (>= 2.1.15), srb2-data (<= 2.1.21), srb2 +# FIXME: should be Depends: ${SHLIBS_DEPENDS}, ${MISC_DEPENDS}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat +Depends: libc6, ${MISC_DEPENDS}, ${PACKAGE_NAME}-data (>> ${PACKAGE_ASSET_MINVERSION}), ${PACKAGE_NAME}-data (<< ${PACKAGE_ASSET_MAXVERSION}), ${PACKAGE_NAME} Description: A cross-platform 3D Sonic fangame Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog fangame built using a modified version of the Doom Legacy diff --git a/assets/debian/copyright b/debian-template/copyright similarity index 57% rename from assets/debian/copyright rename to debian-template/copyright index 97d606b0f..cc47c453b 100644 --- a/assets/debian/copyright +++ b/debian-template/copyright @@ -1,18 +1,18 @@ This work was packaged for Debian by: - Marco Zafra Mon, 26 Nov 2018 14:31:00 -0500 + ${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME} It was downloaded from: - + ${PACKAGE_WEBSITE} Upstream Author(s): - Sonic Team Junior + ${PACKAGE_GROUP_NAME_EMAIL} Copyright: - Copyright (C) 1998-2018 Sonic Team Junior + Copyright (C) 1998-2018 by Sonic Team Junior License: @@ -21,7 +21,7 @@ License: The Debian packaging is: Copyright (C) 2010 Callum Dickinson - Copyright (C) 2010-2018 Sonic Team Junior + Copyright (C) 2010-2018 by Sonic Team Junior and is licensed under the GPL version 2, see "/usr/share/common-licenses/GPL-2". diff --git a/debian/docs b/debian-template/docs similarity index 100% rename from debian/docs rename to debian-template/docs diff --git a/debian/rules b/debian-template/rules similarity index 87% rename from debian/rules rename to debian-template/rules index 02e3dc78e..2cc001229 100755 --- a/debian/rules +++ b/debian-template/rules @@ -23,6 +23,16 @@ # ############################################################################# +############################################################################# +# +# !!!!!!!!!! DEPLOYER NOTE !!!!!!!!!! +# +# Variables to be templated are curly-braced ${PACKAGE_INSTALL_PATH} +# Variables used by the rules script are parenthese'd $(PKGDIR) +# See [repo-root]/debian_template.sh +# +############################################################################# + # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 @@ -50,15 +60,16 @@ DIR := $(shell pwd) # FIXME: hate hate hate head/tail hack :( CONTROLF = $(DIR)/debian/control -PACKAGE = srb2 -DBGPKG = $(PACKAGE)-dbg -TITLE = Sonic Robo Blast 2 +PACKAGE = ${PACKAGE_NAME} +DBGPKG = ${PACKAGE}-dbg +TITLE = ${PROGRAM_NAME} SECTION = Games/Action -EXENAME = srb2 +EXENAME = ${PROGRAM_FILENAME} DBGNAME = debug/$(EXENAME) -PKGDIR = usr/games/SRB2 +PKGDIR = $(shell echo "${PACKAGE_INSTALL_PATH}" | sed -e 's/^\///') DBGDIR = usr/lib/debug/$(PKGDIR) +LINKDIR = $(shell echo "${PACKAGE_LINK_PATH}" | sed -e 's/^\///') PIXMAPS_DIR = usr/share/pixmaps DESKTOP_DIR = usr/share/applications PREFIX = $(shell test "$(CROSS_COMPILE_BUILD)" != "$(CROSS_COMPILE_HOST)" && echo "PREFIX=$(CROSS_COMPILE_HOST)") @@ -101,8 +112,8 @@ binary-arch: $(INSTALL) $(BINDIR)/$(EXENAME) $(DIR)/debian/tmp/$(PKGDIR)/$(PACKAGE) $(INSTALL) $(BINDIR)/$(DBGNAME) $(DIR)/debian/tmp/$(DBGDIR)/$(PACKAGE) # Install desktop file and banner image - $(INSTALL) $(DIR)/srb2.png $(DIR)/debian/tmp/usr/share/pixmaps - $(INSTALL) $(DIR)/debian/srb2.desktop $(DIR)/debian/tmp/usr/share/applications + $(INSTALL) $(DIR)/srb2.png $(DIR)/debian/tmp/usr/share/pixmaps/${PROGRAM_FILENAME}.png + $(INSTALL) $(DIR)/debian/srb2.desktop $(DIR)/debian/tmp/usr/share/applications/${PROGRAM_FILENAME}.desktop # add compiled binaries to include-binaries echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries diff --git a/debian/source/format b/debian-template/source/format similarity index 100% rename from debian/source/format rename to debian-template/source/format diff --git a/debian/source/options b/debian-template/source/options similarity index 81% rename from debian/source/options rename to debian-template/source/options index 841c65a6f..1ef771ddf 100644 --- a/debian/source/options +++ b/debian-template/source/options @@ -2,7 +2,7 @@ tar-ignore = "assets/*.srb" tar-ignore = "assets/*.pk3" tar-ignore = "assets/*.dta" tar-ignore = "assets/*.wad" -tar-ignore = "assets/debian/srb2-data/*" +tar-ignore = "assets/debian/${PACKAGE_NAME}-data/*" tar-ignore = "assets/debian/tmp/*" tar-ignore = "*.obj" tar-ignore = "*.dep" diff --git a/debian-template/srb2.desktop b/debian-template/srb2.desktop new file mode 100644 index 000000000..07c7906e0 --- /dev/null +++ b/debian-template/srb2.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=${PROGRAM_NAME} +Comment=${PROGRAM_DESCRIPTION} +Encoding=UTF-8 +Exec=${PACKAGE_INSTALL_PATH}/${PROGRAM_FILENAME} +Icon=/usr/share/pixmaps/${PROGRAM_FILENAME}.png +Terminal=false +Type=Application +StartupNotify=false +Categories=Application;Game; diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 855c1c1b3..000000000 --- a/debian/changelog +++ /dev/null @@ -1,12 +0,0 @@ -srb2 (2.1.21~9) trusty; urgency=high - - * SRB2 v2.1.21 release - - -- Marco Zafra Mon, 27 Nov 2018 16:45:00 -0500 - - -srb2 (2.0.6-5) maverick; urgency=high - - * Initial proper release.. - - -- Callum Dickinson Sat, 29 Jan 2011 01:18:42 +1300 diff --git a/debian/srb2.desktop b/debian/srb2.desktop deleted file mode 100644 index 3a1cac9f6..000000000 --- a/debian/srb2.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Sonic Robo Blast 2 -Comment=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis. -Encoding=UTF-8 -Exec=/usr/games/SRB2/srb2 -Icon=/usr/share/pixmaps/srb2.png -Terminal=false -Type=Application -StartupNotify=false -Categories=Application;Game; diff --git a/debian_template.sh b/debian_template.sh new file mode 100644 index 000000000..c1af3c19f --- /dev/null +++ b/debian_template.sh @@ -0,0 +1,166 @@ +#!/bin/bash + +# Deployer for Travis-CI +# Debian package templating +# +# Call this script BEFORE running debuild! +# source ./debian_template.sh [clean] [main/asset] +# +# Before running this script, +# you should also set PACKAGE_NAME_EMAIL="John Doe " to match +# the identity of the key you will use to sign the package. +# + +# Get script's actual path +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Recursive function for directory crawling +# $1 = Directory root to crawl +# $2 = Code to eval on file +# $3 = Code to eval on directory +# Exposes $dirtails, $dirlevel, and $dirtailname +dirlevel=0 # initialize +dirtails=() + +# Utility function to make dira/dirb/dirc string +makedirtailname () { + dirtailname="" + for tail in $dirtails; do + if [[ "$dirtailname" == "" ]]; then + dirtailname="/$tail"; + else + dirtailname="$dirtailname/$tail"; + fi; + done; +} + +evaldirectory () { + if [ -d "$1" ]; then + # Set contextual variables + # dirtails is an array of directory basenames after the crawl root + if (( $dirlevel > 0 )); then + dirtails+=( "$(basename $1)" ); + else + dirtails=(); + fi; + dirlevel=$((dirlevel+1)); + + # Generate directory path after the crawl root + makedirtailname; + + # Eval our directory with the latest contextual info + # Don't eval on root + if (( $dirlevel > 1 )) && [[ "$3" != "" ]]; then + eval "$3"; + fi; + + # Iterate entries + for name in $1/*; do + if [ -d "$name" ]; then + # Name is a directory, but don't eval yet + # Recurse so our vars are updated + evaldirectory "$name" "$2" "$3"; + + # Decrement our directory level and remove a dirtail + unset 'dirtails[ ${#dirtails[@]}-1 ]'; + dirlevel=$((dirlevel-1)); + makedirtailname; + else + # Name is a file + if [ -f "$name" ] && [[ "$2" != "" ]]; then + eval "$2"; + fi; + fi; + done; + + # Reset our variables; we're done iterating + if (( $dirlevel == 1 )); then + dirlevel=0; + fi; + fi; +} + +# +# Initialize package parameter defaults +# +if [[ "$__DEBIAN_PARAMETERS_INITIALIZED" != "1" ]]; then + . ${DIR}/deployer/travis/deployer_defaults.sh; +fi; + +# Clean up after ourselves; we only expect to run this script once +# during buildboting +__DEBIAN_PARAMETERS_INITIALIZED=0 + +# for envsubst +export __PACKAGE_DATETIME="$(date '+%a, %d %b %Y %H:%M:%S %z')" +export __PACKAGE_DATETIME_DIGIT="$(date -u '+%Y%m%d%H%M%S')" + +if [[ "$PACKAGE_REVISION" == "" ]]; then + PACKAGE_REVISION="-$__PACKAGE_DATETIME_DIGIT"; + __PACKAGE_REVISION_BY_DATE=1; + export PACKAGE_REVISION=${PACKAGE_REVISION}; # for envsubst +fi; + +# +# Clean the old debian/ directories +# +if [[ "$1" == "clean" ]]; then + toclean=$2; +else + toclean=$1; +fi; + +if [[ "$toclean" == "" ]] || [[ "$toclean" == "main" ]]; then + echo "Cleaning main package scripts"; + if [[ ! -f ${DIR}/debian ]]; then + rm -rf ${DIR}/debian; + fi; +fi; +if [[ "$toclean" == "" ]] || [[ "$toclean" == "asset" ]]; then + echo "Cleaning asset package scripts"; + if [[ ! -f ${DIR}/assets/debian ]]; then + rm -rf ${DIR}/assets/debian; + fi; +fi; + +# +# Make new templates +# +if [[ "$1" != "clean" ]]; then + totemplate=$1; + + # HACK: ${shlibs:Depends} in the templates make the templating fail + # So just define replacemment variables + export SHLIBS_DEPENDS=${SHLIBS_DEPENDS}; + export MISC_DEPENDS=${MISC_DEPENDS}; + export DEBFILEVAR='$$file'; # used in assets/debian/rules + + # Package parameters are exported for envsubst in deployer_defaults.sh + + if [[ "$totemplate" == "" ]] || [[ "$totemplate" == "main" ]]; then + echo "Generating main package scripts"; + fromroot=${DIR}/debian-template; + toroot=${DIR}/debian; + mkdir ${toroot}; + + evaldirectory ${fromroot} \ + "cat \$name | envsubst > ${toroot}\${dirtailname}/\$( basename \$name )" \ + "mkdir \"${toroot}\${dirtailname}\""; + fi; + + if [[ "$totemplate" == "" ]] || [[ "$totemplate" == "asset" ]]; then + echo "Generating asset package scripts"; + fromroot=${DIR}/assets/debian-template; + toroot=${DIR}/assets/debian; + mkdir ${toroot}; + + # Root dir to crawl; file eval; directory eval + evaldirectory ${fromroot} \ + "cat \$name | envsubst > ${toroot}\${dirtailname}/\$( basename \$name )" \ + "mkdir \"${toroot}\${dirtailname}\""; + fi; +fi; + +if [[ "$__DPL_ACTIVE" != "1" ]] && [[ "$__PACKAGE_REVISION_BY_DATE" == "1" ]]; then + unset PACKAGE_REVISION; # so we can reset the date on subsequent runs +fi; diff --git a/deployer/travis/deployer.sh b/deployer/travis/deployer.sh new file mode 100644 index 000000000..c88155d21 --- /dev/null +++ b/deployer/travis/deployer.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# Deployer for Travis-CI +# Initialization +# +# Performs validity checks to ensure that Deployer is allowed to run +# e.g., is an FTP hostname specified? Are we whitelisted by OSNAMES and BRANCHES? +# +# Set these environment variables in your Travis-CI settings, where they are stored securely. +# See other shell scripts for more options. +# +# DPL_ENABLED = 1 (leave blank to disable) +# DPL_TAG_ENABLED = 1 (run Deployer on all tags) +# DPL_JOB_ENABLE_ALL = 1 (run Deployer on all jobs; leave blank to act on specific jobs, see below) +# DPL_JOBNAMES = name1,name2 (whitelist of job names to allow uploading; leave blank to upload from all jobs) +# DPL_OSNAMES = osx (whitelist of OS names to allow uploading; leave blank to upload from all OSes) +# DPL_BRANCHES = master,branch1,branch2 (whitelist of branches to upload; leave blank to upload all branches) +# +# To enable Deployer on specific jobs, set _DPL_JOB_ENABLED=1 for that job. Example: +# - matrix: +# - os: osx +# env: +# - _DPL_JOB_ENABLED=1 +# +# DO NOT set __DPL_ACTIVE, because that would bypass these validity checks. + +# Validate Deployer state +if [[ "$DPL_ENABLED" == "1" ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]]; then + # Test for base eligibility: + # Are we in a deployer branch? Or + # Are we in a release tag AND DPL_TAG_ENABLED=1? + if [[ $TRAVIS_BRANCH == *"deployer"* ]]; then + __DPL_BASE_ELIGIBLE=1; + __DPL_TERMINATE_EARLY_ELIGIBLE=1; + fi; + + if [[ "$TRAVIS_TAG" != "" ]] && [[ "$DPL_TAG_ENABLED" == "1" ]]; then + __DPL_BASE_ELIGIBLE=1; + __DPL_TAG_ELIGIBLE=1; + __DPL_TERMINATE_EARLY_ELIGIBLE=1; + fi; + + # Logging message for trigger word + if [[ "$__DPL_TAG_ELIGIBLE" != "1" ]] && [[ "$DPL_TRIGGER" != "" ]]; then + echo "Testing for trigger $DPL_TRIGGER, commit message: $TRAVIS_COMMIT_MESSAGE"; + echo "[${DPL_TRIGGER}]"; + echo "[${DPL_TRIGGER}-${_DPL_JOB_NAME}]"; + echo "[${DPL_TRIGGER}-${TRAVIS_OS_NAME}]"; + fi; + + # + # Search for the trigger word + # Force enable if release tags are eligible + # + if [[ "$__DPL_TAG_ELIGIBLE" == "1" ]] || [[ "$DPL_TRIGGER" == "" ]] \ + || [[ $TRAVIS_COMMIT_MESSAGE == *"[$DPL_TRIGGER]"* ]] \ + || [[ $TRAVIS_COMMIT_MESSAGE == *"[${DPL_TRIGGER}-${_DPL_JOB_NAME}]"* ]] \ + || [[ $TRAVIS_COMMIT_MESSAGE == *"[${DPL_TRIGGER}-${TRAVIS_OS_NAME}]"* ]]; then + # + # Whitelist by branch name + # Force enable if release tags are eligible + # + if [[ "$__DPL_TAG_ELIGIBLE" == "1" ]] || [[ "$DPL_BRANCHES" == "" ]] || [[ $DPL_BRANCHES == *"$TRAVIS_BRANCH"* ]]; then + # Set this so we only early-terminate builds when we are specifically deploying + # Trigger string and branch are encompassing conditions; the rest are job-specific + # This check only matters for deployer branches and when DPL_TERMINATE_TESTS=1, + # because we're filtering non-deployer jobs. + # + # __DPL_TRY_TERMINATE_EARLY is invalidated in .travis.yml if __DPL_ACTIVE=1 + if [[ "$__DPL_TERMINATE_EARLY_ELIGIBLE" == "1" ]] && [[ "$DPL_TERMINATE_TESTS" == "1" ]]; then + __DPL_TRY_TERMINATE_EARLY=1; + fi; + + # + # Is the job enabled for deployment? + # + if [[ "$DPL_JOB_ENABLE_ALL" == "1" ]] || [[ "$_DPL_JOB_ENABLED" == "1" ]]; then + # + # Whitelist by job names + # + if [[ "$DPL_JOBNAMES" == "" ]] || [[ "$_DPL_JOB_NAME" == "" ]] || [[ $DPL_JOBNAMES == *"$_DPL_JOB_NAME"* ]]; then + # + # Whitelist by OS names + # + if [[ "$DPL_OSNAMES" == "" ]] || [[ $DPL_OSNAMES == *"$TRAVIS_OS_NAME"* ]]; then + # Base Deployer is eligible for becoming active + + # Are we building for Linux? + if [[ "$_DPL_PACKAGE_BINARY" == "1" ]] || [[ "$_DPL_PACKAGE_SOURCE" == "1" ]]; then + if [[ "$_DPL_PACKAGE_MAIN" == "1" ]] || [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + __DPL_DEBIAN_ACTIVE=1; + fi; + fi; + fi; + + # Now check for deployment targets + if [[ "$_DPL_FTP_TARGET" == "1" ]] && [[ "$DPL_FTP_HOSTNAME" != "" ]]; then + if [[ "$TRAVIS_OS_HOST" == "linux" ]] && [[ "$DPL_FTP_PROTOCOL" == "ftp" ]]; then + echo "Non-secure FTP will not work on Linux Travis-CI jobs!"; + echo "Try SFTP or another target. Details:"; + echo "https://blog.travis-ci.com/2018-07-23-the-tale-of-ftp-at-travis-ci"; + else + if [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]] || [[ "$_DPL_PACKAGE_BINARY" == "1" ]] || [[ "$_DPL_BINARY" == "1" ]]; then + echo "Deployer FTP target is enabled"; + __DPL_FTP_ACTIVE=1; + else + echo "Deployer FTP target cannot be enabled: You must specify _DPL_PACKAGE_BINARY=1,"; + echo "and/or _DPL_BINARY=1 in your job's environment variables."; + fi; + fi; + fi; + + if [[ "$_DPL_DPUT_TARGET" == "1" ]] && [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]] \ + && [[ "$DPL_DPUT_INCOMING" != "" ]]; then + if [[ "$DPL_DPUT_METHOD" == "ftp" ]]; then + echo "DPUT will not work with non-secure FTP on Linux Travis-CI jobs!"; + echo "Try SFTP or another method for DPUT. Details:"; + echo "https://blog.travis-ci.com/2018-07-23-the-tale-of-ftp-at-travis-ci"; + else + echo "Deployer DPUT target is enabled"; + __DPL_DPUT_ACTIVE=1; + fi; + fi; + + # If any deployment targets are active, then so is the Deployer at large + if [[ "$__DPL_FTP_ACTIVE" == "1" ]] || [[ "$__DPL_DPUT_ACTIVE" == "1" ]]; then + __DPL_ACTIVE=1; + fi; + fi; + fi; + fi; + fi; + else + if [[ "$DPL_TRIGGER" != "" ]]; then + echo "Testing for global trigger [$DPL_TRIGGER, commit message: $TRAVIS_COMMIT_MESSAGE"; + fi; + if [[ "$DPL_TRIGGER" != "" ]] && [[ $TRAVIS_COMMIT_MESSAGE == *"[$DPL_TRIGGER"* ]]; then + if [[ "$__DPL_TAG_ELIGIBLE" == "1" ]] || [[ "$DPL_BRANCHES" == "" ]] || [[ $DPL_BRANCHES == *"$TRAVIS_BRANCH"* ]]; then + # This check only matters for deployer branches and when DPL_TERMINATE_TESTS=1, + # because we're filtering non-deployer jobs. + if [[ "$__DPL_TERMINATE_EARLY_ELIGIBLE" == "1" ]] && [[ "$DPL_TERMINATE_TESTS" == "1" ]]; then + # Assume that some job received the trigger, so mark this for early termination + __DPL_TRY_TERMINATE_EARLY=1; + fi; + fi; + fi; + fi; +fi; + +if [[ "$__DPL_TRY_TERMINATE_EARLY" == "1" ]] && [[ "$__DPL_ACTIVE" != "1" ]]; then + echo "Deployer is active in another job"; +fi; + +if [[ "$__DPL_TRY_TERMINATE_EARLY" != "1" ]] && [[ "$__DPL_ACTIVE" != "1" ]]; then + echo "Deployer is not active"; +fi; diff --git a/deployer/travis/deployer_build.sh b/deployer/travis/deployer_build.sh new file mode 100644 index 000000000..3817f025d --- /dev/null +++ b/deployer/travis/deployer_build.sh @@ -0,0 +1,190 @@ +#!/bin/bash + +# Deployer for Travis-CI +# Build Script +# +# Builds the required targets depending on which sub-modules are enabled + +if [[ "$__DPL_FTP_ACTIVE" == "1" ]] || [[ "$__DPL_DPUT_ACTIVE" == "1" ]]; then + if [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]]; then + echo "Building Debian package(s)" + + sudo apt-get install devscripts debhelper fakeroot secure-delete expect; + + # Build source packages first, since they zip up the entire source folder, + # binaries and all + if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then + . ../debian_template.sh main; + OLDPWD=$PWD; # [repo]/build + cd ..; # repo root + + if [[ "$_DPL_PACKAGE_SOURCE" == "1" ]]; then + echo "Building main source Debian package"; + expect <(cat < key.asc; + echo "$DPL_PGP_KEY_PASSPHRASE" > phrase.txt; + gpg --import key.asc; + + if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then + echo "Signing main package(s)"; + + PACKAGEFILENAME=${PACKAGE_NAME}_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + PACKAGEDBGFILENAME=${PACKAGE_NAME}-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYDBGFILENAME=${PACKAGE_NAME}-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHDBGFILENAME=${PACKAGE_NAME}-patch-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYDBGFILENAME=${PACKAGE_NAME}-patch-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + + PACKAGEFILENAMES=( + $PACKAGEFILENAME + $PACKAGEDBGFILENAME + #$PACKAGENIGHTLYFILENAME + #$PACKAGENIGHTLYDBGFILENAME + #$PACKAGEPATCHFILENAME + #$PACKAGEPATCHDBGFILENAME + #$PACKAGEPATCHNIGHTLYFILENAME + #$PACKAGEPATCHNIGHTLYDBGFILENAME + ); + + # Main packages are in parent of root repo folder + OLDPWD=$PWD; # [repo]/build + cd ../..; # parent of repo root + + for n in ${PACKAGEFILENAMES}; do + for f in ./$n*.changes; do + debsign --no-re-sign -p"gpg --passphrase-file $OLDPWD/phrase.txt --batch" "$f"; + done; + done; + + cd $OLDPWD; + fi; + + if [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then + echo "Signing asset package(s)"; + + PACKAGEFILENAME=${PACKAGE_NAME}-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + + PACKAGEFILENAMES=( + $PACKAGEFILENAME + #$PACKAGENIGHTLYFILENAME + #$PACKAGEPATCHFILENAME + #$PACKAGEPATCHNIGHTLYFILENAME + ) + + # Asset packages are in root repo folder + OLDPWD=$PWD; # [repo]/build + cd ..; # repo root + + for n in ${PACKAGEFILENAMES}; do + for f in ./$n*.changes; do + debsign --no-re-sign -p"gpg --passphrase-file $OLDPWD/phrase.txt --batch" "$f"; + done; + done; + + cd $OLDPWD; + fi; + + # Delete the keys :eyes: + srm key.asc; + srm phrase.txt; + fi; + fi; + + # all other OSes + if [[ "$TRAVIS_OS_NAME" != "linux" ]]; then + # + # Check for binary building + # + if [[ "$_DPL_BINARY" == "1" ]]; then + echo "Building a Binary"; + make -k; + fi; + + # + # Check for package building + # + if [[ "$_DPL_PACKAGE_BINARY" == "1" ]]; then + echo "Building a Package"; + + # Make an OSX package; superuser is required for library bundling + # + # HACK: OSX packaging can't write libraries to .app package unless we're superuser + # because the original library files don't have WRITE permission + # Bug may be sidestepped by using CHMOD_BUNDLE_ITEMS=TRUE + # But I don't know where this is set. Not `cmake -D...` because this var is ignored. + # https://cmake.org/Bug/view.php?id=9284 + if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + sudo make -k package; + else + # Some day, when Windows is supported, we'll just make a standard package + make -k package; + fi; + fi; + fi; +fi; diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh new file mode 100644 index 000000000..9716c31cb --- /dev/null +++ b/deployer/travis/deployer_defaults.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +# Deployer for Travis-CI +# Default Variables +# +# Here are all of the user-set variables used by Deployer. +# See the "Cross-platform deployment" page on SRB2 Wiki for documentation. + +# Core Parameters +: ${DPL_ENABLED} # Enable Deployer behavior; must be set for any deployment activity +: ${DPL_TAG_ENABLED} # Trigger Deployer for all tag releases +: ${DPL_JOB_ENABLE_ALL} # Enable all jobs for deployment +: ${DPL_TERMINATE_TESTS} # Terminate all build test jobs (used in .travis.yml) +: ${DPL_TRIGGER} # Use a [word] in the commit message to trigger Deployer +: ${DPL_JOBNAMES} # Trigger Deployer by job name +: ${DPL_OSNAMES} # Trigger Deployer by OS name (osx,linux) +: ${DPL_BRANCHES} # Trigger Deployer by git branch name + +# Job Parameters +: ${_DPL_JOB_ENABLED} # Enable Deployer for this specific job. DPL_ENABLED must be set too. +: ${_DPL_JOB_NAME} # Identifier for the job, used for logging and trigger word matching +: ${_DPL_FTP_TARGET} # Deploy to FTP +: ${_DPL_DPUT_TARGET} # Deploy to DPUT +: ${_DPL_PACKAGE_SOURCE} # Build packages into a Source distribution. Linux only. +: ${_DPL_PACKAGE_BINARY} # Build packages into a Binary distribution. +: ${_DPL_PACKAGE_MAIN:=1} # Build main installation package. Linux only; OS X assumes this. +: ${_DPL_PACKAGE_ASSET} # Build asset installation package. Linux only. + +# Asset File Parameters +: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-assets.7z} +: ${ASSET_BASE_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets} +: ${ASSET_FILES_REQUIRED:=srb2.srb zones.dta player.dta rings.dta patch.dta} +: ${ASSET_FILES_DOCS:=README.txt LICENSE.txt LICENSE-3RD-PARTY.txt} +: ${ASSET_FILES_OPTIONAL:=music.dta} +: ${ASSET_FILES_OPTIONAL_GET:=0} + +# FTP Parameters +: ${DPL_FTP_PROTOCOL} +: ${DPL_FTP_USER} +: ${DPL_FTP_PASS} +: ${DPL_FTP_HOSTNAME} +: ${DPL_FTP_PORT} +: ${DPL_FTP_PATH} + +# DPUT Parameters +: ${DPL_DPUT_DOMAIN:=ppa.launchpad.net} +: ${DPL_DPUT_METHOD:=sftp} +: ${DPL_DPUT_INCOMING} +: ${DPL_DPUT_LOGIN:=anonymous} +: ${DPL_SSH_KEY_PRIVATE} # Base64-encoded private key file. Used to sign repository uploads +: ${DPL_SSH_KEY_PASSPHRASE} # Decodes the private key file. + +# Package Parameters +: ${PACKAGE_NAME:=srb2} +: ${PACKAGE_VERSION:=2.1.23} +: ${PACKAGE_SUBVERSION} # Highly recommended to set this to reflect the distro series target (e.g., ~18.04bionic) +: ${PACKAGE_REVISION} # Defaults to UTC timestamp +: ${PACKAGE_INSTALL_PATH:=/usr/games/SRB2} +: ${PACKAGE_LINK_PATH:=/usr/games} +: ${PACKAGE_DISTRO:=trusty} +: ${PACKAGE_URGENCY:=high} +: ${PACKAGE_NAME_EMAIL:=Sonic Team Junior } +: ${PACKAGE_GROUP_NAME_EMAIL:=Sonic Team Junior } +: ${PACKAGE_WEBSITE:=} + +: ${PACKAGE_ASSET_MINVERSION:=2.1.21} # Number this the version BEFORE the actual required version, because we do a > check +: ${PACKAGE_ASSET_MAXVERSION:=2.1.24} # Number this the version AFTER the actual required version, because we do a < check + +: ${PROGRAM_NAME:=Sonic Robo Blast 2} +: ${PROGRAM_VENDOR:=Sonic Team Junior} +: ${PROGRAM_VERSION:=2.1.23} +: ${PROGRAM_DESCRIPTION:=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.} +: ${PROGRAM_FILENAME:=srb2} + +: ${DPL_PGP_KEY_PRIVATE} # Base64-encoded private key file. Used to sign Debian packages +: ${DPL_PGP_KEY_PASSPHRASE} # Decodes the private key file. + +# Export Asset and Package Parameters for envsubst templating + +export ASSET_ARCHIVE_PATH="${ASSET_ARCHIVE_PATH}" +export ASSET_BASE_PATH="${ASSET_BASE_PATH}" +export ASSET_FILES_REQUIRED="${ASSET_FILES_REQUIRED}" +export ASSET_FILES_DOCS="${ASSET_FILES_DOCS}" +export ASSET_FILES_OPTIONAL="${ASSET_FILES_OPTIONAL}" +export ASSET_FILES_OPTIONAL_GET="${ASSET_FILES_OPTIONAL_GET}" + +export PACKAGE_NAME="${PACKAGE_NAME}" +export PACKAGE_VERSION="${PACKAGE_VERSION}" +export PACKAGE_SUBVERSION="${PACKAGE_SUBVERSION}" # in case we have this +export PACKAGE_REVISION="${PACKAGE_REVISION}" +export PACKAGE_ASSET_MINVERSION="${PACKAGE_ASSET_MINVERSION}" +export PACKAGE_ASSET_MAXVERSION="${PACKAGE_ASSET_MAXVERSION}" +export PACKAGE_INSTALL_PATH="${PACKAGE_INSTALL_PATH}" +export PACKAGE_LINK_PATH="${PACKAGE_LINK_PATH}" +export PACKAGE_DISTRO="${PACKAGE_DISTRO}" +export PACKAGE_URGENCY="${PACKAGE_URGENCY}" +export PACKAGE_NAME_EMAIL="${PACKAGE_NAME_EMAIL}" +export PACKAGE_GROUP_NAME_EMAIL="${PACKAGE_GROUP_NAME_EMAIL}" +export PACKAGE_WEBSITE="${PACKAGE_WEBSITE}" + +export PROGRAM_NAME="${PROGRAM_NAME}" +export PROGRAM_VERSION="${PROGRAM_VERSION}" +export PROGRAM_DESCRIPTION="${PROGRAM_DESCRIPTION}" +export PROGRAM_FILENAME="${PROGRAM_FILENAME}" + +# This file is called in debian_template.sh, so mark our completion so we don't run it again +__DEBIAN_PARAMETERS_INITIALIZED=1 diff --git a/deployer/travis/deployer_dput.sh b/deployer/travis/deployer_dput.sh new file mode 100644 index 000000000..863a928cd --- /dev/null +++ b/deployer/travis/deployer_dput.sh @@ -0,0 +1,133 @@ +#!/bin/bash + +# Deployer for Travis-CI +# DPUT uploader (e.g., Launchpad PPA) +# + +if [[ "$__DPL_DPUT_ACTIVE" == "1" ]]; then + # Install APT dependencies + # paramiko required for ssh + sudo apt-get install python-paramiko expect dput; # python-pip + #pip install paramiko; + + # Output the DPUT config + # Dput only works if you're using secure FTP, so that's what we default to. + cat > "./dput.cf" << EOM +[deployer] +fqdn = ${DPL_DPUT_DOMAIN} +method = ${DPL_DPUT_METHOD} +incoming = ${DPL_DPUT_INCOMING} +login = ${DPL_DPUT_LOGIN} +allow_unsigned_uploads = 0 +EOM + + # Output SSH config + # Don't let SSH prompt us for untrusted hosts + cat >> "./ssh_config" << EOM + +Host * + StrictHostKeyChecking no + UserKnownHostsFile=/dev/null + PubKeyAuthentication yes + IdentityFile ${PWD}/key.private + IdentitiesOnly yes +EOM + sudo sh -c "cat < ${PWD}/ssh_config >> /etc/ssh/ssh_config"; + + # Get the private key + echo "$DPL_SSH_KEY_PRIVATE" | base64 --decode > key.private; + chmod 700 ./key.private; + + if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then + PACKAGEFILENAME=${PACKAGE_NAME}_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + PACKAGEDBGFILENAME=${PACKAGE_NAME}-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYDBGFILENAME=${PACKAGE_NAME}-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHDBGFILENAME=${PACKAGE_NAME}-patch-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYDBGFILENAME=${PACKAGE_NAME}-patch-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + + PACKAGEFILENAMES=( + $PACKAGEFILENAME + $PACKAGEDBGFILENAME + #$PACKAGENIGHTLYFILENAME + #$PACKAGENIGHTLYDBGFILENAME + #$PACKAGEPATCHFILENAME + #$PACKAGEPATCHDBGFILENAME + #$PACKAGEPATCHNIGHTLYFILENAME + #$PACKAGEPATCHNIGHTLYDBGFILENAME + ); + + # Main packages are in parent of root repo folder + OLDPWD=$PWD; # [repo]/build + cd ../..; + + # Enter passphrase if required + for n in ${PACKAGEFILENAMES}; do + for f in $n*.changes; do + # Binary builds also generate source builds, so exclude the source + # builds if desired + if [[ "$_DPL_PACKAGE_SOURCE" != "1" ]]; then + if [[ "$f" == *"_source"* ]] || [[ "$f" == *".tar.xz"* ]]; then + continue; + fi; + fi; + + expect <(cat < "commit.txt"; + echo "Job ID $TRAVIS_JOB_ID" >> "commit.txt"; + echo "" >> "commit.txt"; + echo "Commit $TRAVIS_COMMIT" >> "commit.txt"; + echo "$TRAVIS_COMMIT_MESSAGE" >> "commit.txt"; + echo "" >> "commit.txt"; + + # Initialize FTP parameters + if [[ "$DPL_FTP_PORT" == "" ]]; then + DPL_FTP_PORT=21; + fi; + if [[ "$DPL_FTP_PROTOCOL" == "" ]]; then + DPL_FTP_PROTOCOL=ftp; + fi; + __DPL_FTP_LOCATION=$DPL_FTP_PROTOCOL://$DPL_FTP_HOSTNAME:$DPL_FTP_PORT/$DPL_FTP_PATH/$TRAVIS_REPO_SLUG/$TRAVIS_BRANCH/$TRAVIS_JOB_ID-$TRAVIS_JOB_NUMBER-$JOBNAME; + + # Upload to FTP! + echo "Uploading to FTP..."; + curl --ftp-create-dirs -T "commit.txt" -u $DPL_FTP_USER:$DPL_FTP_PASS "$__DPL_FTP_LOCATION/commit.txt"; + + if [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]]; then + if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then + PACKAGEFILENAME=${PACKAGE_NAME}_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + PACKAGEDBGFILENAME=${PACKAGE_NAME}-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYDBGFILENAME=${PACKAGE_NAME}-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHDBGFILENAME=${PACKAGE_NAME}-patch-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYDBGFILENAME=${PACKAGE_NAME}-patch-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + + PACKAGEFILENAMES=( + $PACKAGEFILENAME + $PACKAGEDBGFILENAME + #$PACKAGENIGHTLYFILENAME + #$PACKAGENIGHTLYDBGFILENAME + #$PACKAGEPATCHFILENAME + #$PACKAGEPATCHDBGFILENAME + #$PACKAGEPATCHNIGHTLYFILENAME + #$PACKAGEPATCHNIGHTLYDBGFILENAME + ); + + # Main packages are in parent of root repo folder + OLDPWD=$PWD; # [repo]/build + cd ../..; + + for n in ${PACKAGEFILENAMES}; do + for f in ./$n*; do + # Binary builds also generate source builds, so exclude the source + # builds if desired + if [[ "$_DPL_PACKAGE_SOURCE" != "1" ]]; then + if [[ "$f" == *"_source"* ]] || [[ "$f" == *".tar.xz"* ]]; then + continue; + fi; + fi; + curl --ftp-create-dirs -T "$f" -u $DPL_FTP_USER:$DPL_FTP_PASS "$__DPL_FTP_LOCATION/package/main/$f"; + done; + done; + + # Go back to [repo]/build folder + cd $OLDPWD; + fi; + + if [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then + PACKAGEFILENAME=${PACKAGE_NAME}-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + #PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}; + + PACKAGEFILENAMES=( + $PACKAGEFILENAME + #$PACKAGENIGHTLYFILENAME + #$PACKAGEPATCHFILENAME + #$PACKAGEPATCHNIGHTLYFILENAME + ) + + # Asset packages are in root repo folder + OLDPWD=$PWD; # [repo]/build + cd ..; + + for n in ${PACKAGEFILENAMES}; do + for f in ./$n*; do + # Binary builds also generate source builds, so exclude the source + # builds if desired + if [[ "$_DPL_PACKAGE_SOURCE" != "1" ]]; then + if [[ "$f" == *"_source"* ]] || [[ "$f" == *".tar.xz"* ]]; then + continue; + fi; + fi; + curl --ftp-create-dirs -T "$f" -u $DPL_FTP_USER:$DPL_FTP_PASS "$__DPL_FTP_LOCATION/package/asset/$f"; + done; + done; + + # Go back to [repo]/build folder + cd $OLDPWD; + fi; + else + if [[ "$_DPL_BINARY" == "1" ]]; then + find bin -type f -exec curl -u $DPL_FTP_USER:$DPL_FTP_PASS --ftp-create-dirs -T {} $__DPL_FTP_LOCATION/{} \;; + fi; + + if [[ "$_DPL_PACKAGE_BINARY" == "1" ]]; then + sudo rm -r package/_CPack_Packages + find package -type f -exec curl -u $DPL_FTP_USER:$DPL_FTP_PASS --ftp-create-dirs -T {} $__DPL_FTP_LOCATION/{} \;; + fi; + fi; +fi diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index a3626970e..441203ddb 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -150,7 +150,7 @@ if(${SDL2_FOUND}) ${ZLIB_LIBRARIES} ${OPENGL_LIBRARIES} ) - set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME "Sonic Robo Blast 2") + set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") else() target_link_libraries(SRB2SDL2 PRIVATE ${SDL2_LIBRARIES} @@ -334,10 +334,19 @@ if(${SDL2_FOUND}) # Mac bundle fixup + # HACK: THIS IS IMPORTANT! See the escaped \${CMAKE_INSTALL_PREFIX}? This + # makes it so that var is evaluated LATER during cpack, not right now! + # This fixes the quirk where the bundled libraries don't land in the final package + # https://cmake.org/pipermail/cmake/2011-March/043532.html + # + # HOWEVER: ${CPACK_PACKAGE_DESCRIPTION_SUMMARY} is NOT escaped, because that var + # is only available to us at this step. Read the link: ${CMAKE_INSTALL_PREFIX} at + # this current step points to the CMAKE build folder, NOT the folder that CPACK uses. + # Therefore, it makes sense to escape that var, but not the other. if(${CMAKE_SYSTEM} MATCHES Darwin) install(CODE " include(BundleUtilities) - fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/Sonic Robo Blast 2.app\" + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_DESCRIPTION_SUMMARY}.app\" \"\" /Library/Frameworks )" From 85ae6f9b74b1543323da045f16c1019853486f9b Mon Sep 17 00:00:00 2001 From: mazmazz Date: Tue, 18 Dec 2018 03:23:13 -0500 Subject: [PATCH 05/86] Add kart to tar-ignore --- debian-template/source/options | 1 + 1 file changed, 1 insertion(+) diff --git a/debian-template/source/options b/debian-template/source/options index 1ef771ddf..9532ff202 100644 --- a/debian-template/source/options +++ b/debian-template/source/options @@ -2,6 +2,7 @@ tar-ignore = "assets/*.srb" tar-ignore = "assets/*.pk3" tar-ignore = "assets/*.dta" tar-ignore = "assets/*.wad" +tar-ignore = "assets/*.kart" tar-ignore = "assets/debian/${PACKAGE_NAME}-data/*" tar-ignore = "assets/debian/tmp/*" tar-ignore = "*.obj" From 1c1050fa9d9df9d81a9ef13427cebc3368cf7476 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Tue, 18 Dec 2018 14:14:14 -0500 Subject: [PATCH 06/86] Update Linux and Mac icons to Kart --- srb2.png | Bin 6208 -> 3778 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/srb2.png b/srb2.png index 72a08f6648b8c8849d5804889977a412b35e6deb..1bcccce229334a45b427f5230524814de10f52bf 100644 GIT binary patch literal 3778 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 From 41517ee57b9db2b0b6920c4d41e3c9d38aeb4f31 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 15:54:15 -0500 Subject: [PATCH 07/86] Update deployer defaults to Kart v1.0.1 --- CMakeLists.txt | 10 ++++---- deployer/travis/deployer_defaults.sh | 36 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e7dda8366..5128589f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0) # DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string. # Version change is fine. project(SRB2 - VERSION 2.1.20 + VERSION 1.0.1 LANGUAGES C) if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR}) @@ -88,8 +88,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") # Set EXE names so the assets CMakeLists can refer to its target -set(SRB2_SDL2_EXE_NAME srb2 CACHE STRING "Executable binary output name") -set(SRB2_WIN_EXE_NAME srb2dd CACHE STRING "Executable binary output name for DirectDraw build") +set(SRB2_SDL2_EXE_NAME srb2kart CACHE STRING "Executable binary output name") +set(SRB2_WIN_EXE_NAME srb2kartdd CACHE STRING "Executable binary output name for DirectDraw build") include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) @@ -118,8 +118,8 @@ if(${CMAKE_SYSTEM} MATCHES "Darwin") set(CPACK_GENERATOR "DragNDrop") endif() -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Sonic Robo Blast 2" CACHE STRING "Program name for display purposes") -set(CPACK_PACKAGE_VENDOR "Sonic Team Jr." CACHE STRING "Vendor name for display purposes") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Sonic Robo Blast 2 Kart" CACHE STRING "Program name for display purposes") +set(CPACK_PACKAGE_VENDOR "Kart Krew" CACHE STRING "Vendor name for display purposes") #set(CPACK_PACKAGE_DESCRIPTION_FILE ) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set(CPACK_PACKAGE_VERSION_MAJOR ${SRB2_VERSION_MAJOR}) diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh index 9716c31cb..6df8f45e2 100644 --- a/deployer/travis/deployer_defaults.sh +++ b/deployer/travis/deployer_defaults.sh @@ -27,11 +27,11 @@ : ${_DPL_PACKAGE_ASSET} # Build asset installation package. Linux only. # Asset File Parameters -: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-assets.7z} -: ${ASSET_BASE_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets} -: ${ASSET_FILES_REQUIRED:=srb2.srb zones.dta player.dta rings.dta patch.dta} -: ${ASSET_FILES_DOCS:=README.txt LICENSE.txt LICENSE-3RD-PARTY.txt} -: ${ASSET_FILES_OPTIONAL:=music.dta} +: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v101-assets.7z} +: ${ASSET_BASE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets} +: ${ASSET_FILES_REQUIRED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart bonuschars.kart maps.kart sounds.kart} +: ${ASSET_FILES_DOCS:=README.txt history.txt LICENSE.txt LICENSE-3RD-PARTY.txt} +: ${ASSET_FILES_OPTIONAL:=music.kart} : ${ASSET_FILES_OPTIONAL_GET:=0} # FTP Parameters @@ -51,26 +51,26 @@ : ${DPL_SSH_KEY_PASSPHRASE} # Decodes the private key file. # Package Parameters -: ${PACKAGE_NAME:=srb2} -: ${PACKAGE_VERSION:=2.1.23} +: ${PACKAGE_NAME:=srb2kart} +: ${PACKAGE_VERSION:=1.0.1} : ${PACKAGE_SUBVERSION} # Highly recommended to set this to reflect the distro series target (e.g., ~18.04bionic) : ${PACKAGE_REVISION} # Defaults to UTC timestamp -: ${PACKAGE_INSTALL_PATH:=/usr/games/SRB2} +: ${PACKAGE_INSTALL_PATH:=/usr/games/SRB2Kart} : ${PACKAGE_LINK_PATH:=/usr/games} : ${PACKAGE_DISTRO:=trusty} : ${PACKAGE_URGENCY:=high} -: ${PACKAGE_NAME_EMAIL:=Sonic Team Junior } -: ${PACKAGE_GROUP_NAME_EMAIL:=Sonic Team Junior } -: ${PACKAGE_WEBSITE:=} +: ${PACKAGE_NAME_EMAIL:=Kart Krew } +: ${PACKAGE_GROUP_NAME_EMAIL:=Kart Krew } +: ${PACKAGE_WEBSITE:=} -: ${PACKAGE_ASSET_MINVERSION:=2.1.21} # Number this the version BEFORE the actual required version, because we do a > check -: ${PACKAGE_ASSET_MAXVERSION:=2.1.24} # Number this the version AFTER the actual required version, because we do a < check +: ${PACKAGE_ASSET_MINVERSION:=1.0.0} # Number this the version BEFORE the actual required version, because we do a > check +: ${PACKAGE_ASSET_MAXVERSION:=1.0.2} # Number this the version AFTER the actual required version, because we do a < check -: ${PROGRAM_NAME:=Sonic Robo Blast 2} -: ${PROGRAM_VENDOR:=Sonic Team Junior} -: ${PROGRAM_VERSION:=2.1.23} -: ${PROGRAM_DESCRIPTION:=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.} -: ${PROGRAM_FILENAME:=srb2} +: ${PROGRAM_NAME:=Sonic Robo Blast 2 Kart} +: ${PROGRAM_VENDOR:=Kart Krew} +: ${PROGRAM_VERSION:=1.0.1} +: ${PROGRAM_DESCRIPTION:=A kart racing mod based on the 3D Sonic the Hedgehog fangame Sonic Robo Blast 2.} +: ${PROGRAM_FILENAME:=srb2kart} : ${DPL_PGP_KEY_PRIVATE} # Base64-encoded private key file. Used to sign Debian packages : ${DPL_PGP_KEY_PASSPHRASE} # Decodes the private key file. From c698eed16cb4a759d4f566aa671b39506597bece Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 15:59:19 -0500 Subject: [PATCH 08/86] Update SDL mac icon to Kart --- src/sdl/macosx/Srb2mac.icns | Bin 79787 -> 103434 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/sdl/macosx/Srb2mac.icns b/src/sdl/macosx/Srb2mac.icns index 4baedc1c5a091a3917d2a33bc3780da5b1b5e996..1188d7c15bbf81bcd613dd191ec2345942ed5a6f 100644 GIT binary patch literal 103434 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 From 50e65ffce7a48371bd575e602552109ed116a577 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 16:01:32 -0500 Subject: [PATCH 09/86] Update deployer defaults to Kart v1.0.2 --- CMakeLists.txt | 2 +- deployer/travis/deployer_defaults.sh | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5128589f6..bc132c4da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0) # DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string. # Version change is fine. project(SRB2 - VERSION 1.0.1 + VERSION 1.0.2 LANGUAGES C) if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR}) diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh index 6df8f45e2..c0122d6c4 100644 --- a/deployer/travis/deployer_defaults.sh +++ b/deployer/travis/deployer_defaults.sh @@ -27,7 +27,7 @@ : ${_DPL_PACKAGE_ASSET} # Build asset installation package. Linux only. # Asset File Parameters -: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v101-assets.7z} +: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-assets.7z} : ${ASSET_BASE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets} : ${ASSET_FILES_REQUIRED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart bonuschars.kart maps.kart sounds.kart} : ${ASSET_FILES_DOCS:=README.txt history.txt LICENSE.txt LICENSE-3RD-PARTY.txt} @@ -52,7 +52,7 @@ # Package Parameters : ${PACKAGE_NAME:=srb2kart} -: ${PACKAGE_VERSION:=1.0.1} +: ${PACKAGE_VERSION:=1.0.2} : ${PACKAGE_SUBVERSION} # Highly recommended to set this to reflect the distro series target (e.g., ~18.04bionic) : ${PACKAGE_REVISION} # Defaults to UTC timestamp : ${PACKAGE_INSTALL_PATH:=/usr/games/SRB2Kart} @@ -63,12 +63,12 @@ : ${PACKAGE_GROUP_NAME_EMAIL:=Kart Krew } : ${PACKAGE_WEBSITE:=} -: ${PACKAGE_ASSET_MINVERSION:=1.0.0} # Number this the version BEFORE the actual required version, because we do a > check -: ${PACKAGE_ASSET_MAXVERSION:=1.0.2} # Number this the version AFTER the actual required version, because we do a < check +: ${PACKAGE_ASSET_MINVERSION:=1.0.2} # Number this the version BEFORE the actual required version, because we do a > check +: ${PACKAGE_ASSET_MAXVERSION:=1.0.3} # Number this the version AFTER the actual required version, because we do a < check : ${PROGRAM_NAME:=Sonic Robo Blast 2 Kart} : ${PROGRAM_VENDOR:=Kart Krew} -: ${PROGRAM_VERSION:=1.0.1} +: ${PROGRAM_VERSION:=1.0.2} : ${PROGRAM_DESCRIPTION:=A kart racing mod based on the 3D Sonic the Hedgehog fangame Sonic Robo Blast 2.} : ${PROGRAM_FILENAME:=srb2kart} From bcbcc48adac2e2aecfdfb7dfd5b64e723a88460f Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 18:54:04 -0500 Subject: [PATCH 10/86] Dummy out -Werror from travis config --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e546f2f98..3fe218846 100644 --- a/.travis.yml +++ b/.travis.yml @@ -660,7 +660,7 @@ before_script: - mkdir build - cd build - mkdir package - - export CFLAGS="-Wall -W -Werror $WFLAGS" + - export CFLAGS="-Wall -W $WFLAGS" # -Werror - export CCACHE_COMPRESS=true - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/bin -DCPACK_PACKAGE_DIRECTORY=$PWD/package -DSRB2_ASSET_REQUIRED="${SRB2_ASSET_REQUIRED}" -DSRB2_ASSET_OPTIONAL="${SRB2_ASSET_OPTIONAL}" From c31ef0c82163b33d6d2577d05430c8ae0864a2c4 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 18:57:33 -0500 Subject: [PATCH 11/86] Set srb2home name to srb2kart --- src/doomdef.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index a35f3291d..0f96c22c5 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -346,9 +346,9 @@ enum { // Name of local directory for config files and savegames #if !defined(_arch_dreamcast) && !defined(_WIN32_WCE) && !defined(GP2X) && !defined(_WII) && !defined(_PS3) #if (((defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON)) && !defined (__CYGWIN__)) && !defined (__APPLE__) -#define DEFAULTDIR ".srb2" +#define DEFAULTDIR ".srb2kart" #else -#define DEFAULTDIR "srb2" +#define DEFAULTDIR "srb2kart" #endif #endif From 7d2d3dda7a493a082df2c3308d939135249c4e42 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 19:00:09 -0500 Subject: [PATCH 12/86] Kart v1.0.2 deployer default fix --- deployer/travis/deployer_defaults.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh index c0122d6c4..9f81733dc 100644 --- a/deployer/travis/deployer_defaults.sh +++ b/deployer/travis/deployer_defaults.sh @@ -63,7 +63,7 @@ : ${PACKAGE_GROUP_NAME_EMAIL:=Kart Krew } : ${PACKAGE_WEBSITE:=} -: ${PACKAGE_ASSET_MINVERSION:=1.0.2} # Number this the version BEFORE the actual required version, because we do a > check +: ${PACKAGE_ASSET_MINVERSION:=1.0.1} # Number this the version BEFORE the actual required version, because we do a > check : ${PACKAGE_ASSET_MAXVERSION:=1.0.3} # Number this the version AFTER the actual required version, because we do a < check : ${PROGRAM_NAME:=Sonic Robo Blast 2 Kart} From 08176eda1874c45c92e819fc3fc61bf38e8b235c Mon Sep 17 00:00:00 2001 From: mazmazz Date: Thu, 13 Dec 2018 12:01:07 -0500 Subject: [PATCH 13/86] Fix savegamename being improperly built due to missing null char after copying timeattackfolder --- src/dehacked.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dehacked.c b/src/dehacked.c index 8cb704125..ccb258106 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -3134,7 +3134,7 @@ static void readmaincfg(MYFILE *f) strncpy(timeattackfolder, gamedatafilename, filenamelen); timeattackfolder[min(filenamelen, sizeof (timeattackfolder) - 1)] = '\0'; - strncpy(savegamename, timeattackfolder, strlen(timeattackfolder)); + strcpy(savegamename, timeattackfolder); strlcat(savegamename, "%u.ssg", sizeof(savegamename)); // can't use sprintf since there is %u in savegamename strcatbf(savegamename, srb2home, PATHSEP); From 9be802f3046cdbb8fb7a1a17762d2f3b1cb26a4e Mon Sep 17 00:00:00 2001 From: mazmazz Date: Thu, 13 Dec 2018 13:11:25 -0500 Subject: [PATCH 14/86] EXEC: Search for CFG by file path --- src/command.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/command.c b/src/command.c index 4f824aa3e..18b51ae7a 100644 --- a/src/command.c +++ b/src/command.c @@ -33,6 +33,7 @@ #include "hu_stuff.h" #include "p_setup.h" #include "lua_script.h" +#include "d_netfil.h" // findfile //======== // protos. @@ -635,6 +636,7 @@ static void COM_CEchoDuration_f(void) static void COM_Exec_f(void) { UINT8 *buf = NULL; + char filename[256]; if (COM_Argc() < 2 || COM_Argc() > 3) { @@ -643,13 +645,23 @@ static void COM_Exec_f(void) } // load file + // Try with Argv passed verbatim first, for back compat FIL_ReadFile(COM_Argv(1), &buf); if (!buf) { - if (!COM_CheckParm("-noerror")) - CONS_Printf(M_GetText("couldn't execute file %s\n"), COM_Argv(1)); - return; + // Now try by searching the file path + // filename is modified with the full found path + strcpy(filename, COM_Argv(1)); + if (findfile(filename, NULL, true) != FS_NOTFOUND) + FIL_ReadFile(filename, &buf); + + if (!buf) + { + if (!COM_CheckParm("-noerror")) + CONS_Printf(M_GetText("couldn't execute file %s\n"), COM_Argv(1)); + return; + } } if (!COM_CheckParm("-silent")) From b42c2657073ff8325fd9cf427369a9e64530fb75 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Thu, 13 Dec 2018 13:17:56 -0500 Subject: [PATCH 15/86] Apply srb2home to SAVECONFIG --- src/m_misc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/m_misc.c b/src/m_misc.c index 603e3de07..6dff4dbe9 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -493,6 +493,7 @@ void M_FirstLoadConfig(void) void M_SaveConfig(const char *filename) { FILE *f; + char *filepath; // make sure not to write back the config until it's been correctly loaded if (!gameconfig_loaded) @@ -507,10 +508,14 @@ void M_SaveConfig(const char *filename) return; } - f = fopen(filename, "w"); + // append srb2home to beginning of filename + // configfile already has this applied + filepath = va(pandf,srb2home, filename); + + f = fopen(filepath, "w"); // change it only if valid if (f) - strcpy(configfile, filename); + strcpy(configfile, filepath); else { CONS_Alert(CONS_ERROR, M_GetText("Couldn't save game config file %s\n"), filename); From b77f290e027822df7b2f43946ef363fac4afa8a9 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Thu, 13 Dec 2018 13:23:09 -0500 Subject: [PATCH 16/86] Apply srb2home to debugfile --- src/d_net.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/d_net.c b/src/d_net.c index eae921faf..62301dc11 100644 --- a/src/d_net.c +++ b/src/d_net.c @@ -27,6 +27,7 @@ #include "d_clisrv.h" #include "z_zone.h" #include "i_tcp.h" +#include "d_main.h" // srb2home // // NETWORKING @@ -1386,12 +1387,12 @@ boolean D_CheckNetGame(void) { k++; sprintf(filename, "debug%d.txt", k); - debugfile = fopen(filename, "w"); + debugfile = fopen(va("%s" PATHSEP "%s", srb2home, filename), "w"); } if (debugfile) - CONS_Printf(M_GetText("debug output to: %s\n"), filename); + CONS_Printf(M_GetText("debug output to: %s\n"), va("%s" PATHSEP "%s", srb2home, filename)); else - CONS_Alert(CONS_WARNING, M_GetText("cannot debug output to file %s!\n"), filename); + CONS_Alert(CONS_WARNING, M_GetText("cannot debug output to file %s!\n"), va("%s" PATHSEP "%s", srb2home, filename)); } #endif #endif From e510804b4bf9e8b31929f1e36ede2361308a708f Mon Sep 17 00:00:00 2001 From: mazmazz Date: Thu, 13 Dec 2018 13:32:38 -0500 Subject: [PATCH 17/86] Apply srb2home to saveconfig ONLY if srb2home isn't already there --- src/m_misc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/m_misc.c b/src/m_misc.c index 6dff4dbe9..474fb46c3 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -509,8 +509,11 @@ void M_SaveConfig(const char *filename) } // append srb2home to beginning of filename - // configfile already has this applied - filepath = va(pandf,srb2home, filename); + // but check if srb2home isn't already there, first + if (!strstr(filename, srb2home)) + filepath = va(pandf,srb2home, filename); + else + filepath = Z_StrDup(filename); f = fopen(filepath, "w"); // change it only if valid @@ -518,7 +521,7 @@ void M_SaveConfig(const char *filename) strcpy(configfile, filepath); else { - CONS_Alert(CONS_ERROR, M_GetText("Couldn't save game config file %s\n"), filename); + CONS_Alert(CONS_ERROR, M_GetText("Couldn't save game config file %s\n"), filepath); return; } } From 937ac47650ca5c48cd21adfac30e0eae683f20e2 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 21:13:02 -0500 Subject: [PATCH 18/86] Change DEFAULTWADLOCATION to SRB2Kart --- src/sdl12/i_system.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/sdl12/i_system.c b/src/sdl12/i_system.c index 8299f6eb6..5ea6449c0 100644 --- a/src/sdl12/i_system.c +++ b/src/sdl12/i_system.c @@ -184,10 +184,10 @@ void __set_fpscr(long); // in libgcc / kernel's startup.s? #define DEFAULTSEARCHPATH1 "host0:/" #define DEFAULTSEARCHPATH2 "ms0:/PSP/GAME/SRB2PSP" #elif defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON) -#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2" -#define DEFAULTWADLOCATION2 "/usr/local/games/SRB2" -#define DEFAULTWADLOCATION3 "/usr/share/games/SRB2" -#define DEFAULTWADLOCATION4 "/usr/games/SRB2" +#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2Kart" +#define DEFAULTWADLOCATION2 "/usr/local/games/SRB2Kart" +#define DEFAULTWADLOCATION3 "/usr/share/games/SRB2Kart" +#define DEFAULTWADLOCATION4 "/usr/games/SRB2Kart" #define DEFAULTSEARCHPATH1 "/usr/local/games" #define DEFAULTSEARCHPATH2 "/usr/games" #define DEFAULTSEARCHPATH3 "/usr/local" @@ -196,21 +196,21 @@ void __set_fpscr(long); // in libgcc / kernel's startup.s? #ifdef __GNUC__ #include #endif -#define DEFAULTWADLOCATION1 "c:\\srb2" -#define DEFAULTWADLOCATION2 "d:\\srb2" -#define DEFAULTWADLOCATION3 "e:\\srb2" -#define DEFAULTWADLOCATION4 "f:\\srb2" -#define DEFAULTWADLOCATION5 "g:\\srb2" -#define DEFAULTWADLOCATION6 "h:\\srb2" -#define DEFAULTWADLOCATION7 "i:\\srb2" +#define DEFAULTWADLOCATION1 "c:\\srb2kart" +#define DEFAULTWADLOCATION2 "d:\\srb2kart" +#define DEFAULTWADLOCATION3 "e:\\srb2kart" +#define DEFAULTWADLOCATION4 "f:\\srb2kart" +#define DEFAULTWADLOCATION5 "g:\\srb2kart" +#define DEFAULTWADLOCATION6 "h:\\srb2kart" +#define DEFAULTWADLOCATION7 "i:\\srb2kart" #elif defined (_WIN32_WCE) #define NOCWD #define NOHOME #define DEFAULTWADLOCATION1 "\\Storage Card\\SRB2DEMO" #define DEFAULTSEARCHPATH1 "\\Storage Card" #elif defined (_WIN32) -#define DEFAULTWADLOCATION1 "c:\\games\\srb2" -#define DEFAULTWADLOCATION2 "\\games\\srb2" +#define DEFAULTWADLOCATION1 "c:\\games\\srb2kart" +#define DEFAULTWADLOCATION2 "\\games\\srb2kart" #define DEFAULTSEARCHPATH1 "c:\\games" #define DEFAULTSEARCHPATH2 "\\games" #endif From 7024d89e942f5efceb52912ac58fe3a78d1a51e9 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 30 Dec 2018 21:14:41 -0500 Subject: [PATCH 19/86] Fix dh_link for srb2kart debian symlink --- debian-template/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian-template/rules b/debian-template/rules index 2cc001229..0a77624cb 100755 --- a/debian-template/rules +++ b/debian-template/rules @@ -144,7 +144,7 @@ binary-arch: # dh_installcron # dh_installinfo # dh_installman - # dh_link + dh_link $(PKGDIR)/$(EXENAME) $(LINKDIR)/$(EXENAME) dh_compress dh_fixperms # dh_perl From af519d3c074541951e2a6fd80ef4bb05f8e4b2cf Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 31 Dec 2018 00:21:19 -0500 Subject: [PATCH 20/86] Also change DEFAULTWADLOCATION to SRB2Kart in SDL2 --- src/sdl/i_system.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index a1a9df905..95d144cdd 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -133,16 +133,16 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T); // Locations for searching the srb2.srb #if defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON) -#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2" -#define DEFAULTWADLOCATION2 "/usr/local/games/SRB2" -#define DEFAULTWADLOCATION3 "/usr/share/games/SRB2" -#define DEFAULTWADLOCATION4 "/usr/games/SRB2" +#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2Kart" +#define DEFAULTWADLOCATION2 "/usr/local/games/SRB2Kart" +#define DEFAULTWADLOCATION3 "/usr/share/games/SRB2Kart" +#define DEFAULTWADLOCATION4 "/usr/games/SRB2Kart" #define DEFAULTSEARCHPATH1 "/usr/local/games" #define DEFAULTSEARCHPATH2 "/usr/games" #define DEFAULTSEARCHPATH3 "/usr/local" #elif defined (_WIN32) -#define DEFAULTWADLOCATION1 "c:\\games\\srb2" -#define DEFAULTWADLOCATION2 "\\games\\srb2" +#define DEFAULTWADLOCATION1 "c:\\games\\srb2kart" +#define DEFAULTWADLOCATION2 "\\games\\srb2kart" #define DEFAULTSEARCHPATH1 "c:\\games" #define DEFAULTSEARCHPATH2 "\\games" #endif From f395aeda965dfd31a36d55ad105a6c43e5f365e2 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 31 Dec 2018 01:26:25 -0500 Subject: [PATCH 21/86] Increase ChangeControl text buffer to resolve buffer overflow with System Menu/GIF control config --- src/m_menu.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 907a6d742..61daaea5a 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -8871,7 +8871,7 @@ static void M_DrawControl(void) #undef controlheight static INT32 controltochange; -static char controltochangetext[55]; +static char controltochangetext[33]; static void M_ChangecontrolResponse(event_t *ev) { @@ -8949,7 +8949,8 @@ static void M_ChangecontrolResponse(event_t *ev) } else if (ch == KEY_PAUSE) { - static char tmp[155]; + // This buffer assumes a 100-character message plus a 32-character control name (per controltochangetext buffer size) + static char tmp[133]; menu_t *prev = currentMenu->prevMenu; if (controltochange == gc_pause) @@ -8973,12 +8974,14 @@ static void M_ChangecontrolResponse(event_t *ev) static void M_ChangeControl(INT32 choice) { - static char tmp[55]; + // This buffer assumes a 35-character message (per below) plus a max control name limit of 32 chars (per controltochangetext) + // If you change the below message, then change the size of this buffer! + static char tmp[68]; controltochange = currentMenu->menuitems[choice].alphaKey; sprintf(tmp, M_GetText("Hit the new key for\n%s\nESC for Cancel"), currentMenu->menuitems[choice].text); - strncpy(controltochangetext, currentMenu->menuitems[choice].text, 55); + strlcpy(controltochangetext, currentMenu->menuitems[choice].text, 33); M_StartMessage(tmp, M_ChangecontrolResponse, MM_EVENTHANDLER); } From a22e5d9a4ff85ec2e70257b550b6049135301406 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 31 Dec 2018 17:09:59 -0500 Subject: [PATCH 22/86] Don't download individual asset files; support only archives --- .travis.yml | 53 ++++++++-------------------- assets/CMakeLists.txt | 46 ++++++++---------------- assets/debian-template/rules | 52 ++++++++------------------- deployer/travis/deployer_defaults.sh | 10 +++--- 4 files changed, 47 insertions(+), 114 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3fe218846..12d3c59aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -594,8 +594,10 @@ install: before_script: # OLDPWD is root repo folder - OLDPWD=$PWD + - mkdir -p "$OLDPWD/assets/installer" - cd "$HOME/srb2_cache" + # Get stat command so we know what the cached archive date is. # stat is different for OSX - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then STATCMD="stat -f %m"; @@ -609,52 +611,25 @@ before_script: echo "$(basename $ASSET_ARCHIVE_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_PATH))"; fi; wget --verbose --server-response -N "$ASSET_ARCHIVE_PATH"; - 7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$HOME/srb2_cache" -aos; - for f in $ASSET_FILES_REQUIRED; do - cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; - done; + 7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$OLDPWD/assets/installer" -aos; fi; - # Get individual required files - - for f in $ASSET_FILES_REQUIRED; do - if [ -f "$f" ]; then - echo "$f cache date -- $($STATCMD $f)"; - fi; - wget --verbose --server-response -N "$ASSET_BASE_PATH/$f"; - if [ ! -f "$HOME/srb2_cache/$f" ]; then - echo "Could not download \"$ASSET_BASE_PATH/$f\""; - return 1; - fi; - cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; - done; - - # Get the docs - - for f in $ASSET_FILES_DOCS; do - if [ -f "$f" ]; then - echo "$f cache date -- $($STATCMD $f)"; - fi; - wget --verbose --server-response -N "$ASSET_BASE_PATH/$f"; - cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; - done; - # Get optional files too - - if [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]]; then - for f in $ASSET_FILES_OPTIONAL; do - if [ -f "$f" ]; then - echo "$f cache date -- $($STATCMD $f)"; - fi; - wget --verbose --server-response -N "$ASSET_BASE_PATH/$f"; - cp "$HOME/srb2_cache/$f" "$OLDPWD/assets/$f"; - done; + - if [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]] && [[ "$ASSET_ARCHIVE_OPTIONAL_PATH" != "" ]]; then + if [ -f "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" ]; then + echo "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_OPTIONAL_PATH))"; + fi; + wget --verbose --server-response -N "$ASSET_ARCHIVE_OPTIONAL_PATH"; + 7z x "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" -o"$OLDPWD/assets/installer" -aos; fi; - # Go back to root repo folder + # Copy assets to repo staging folder, then go back to root repo folder - cd "$OLDPWD" # Prepare CMake asset lists - - SRB2_ASSET_REQUIRED=$(echo ${ASSET_FILES_REQUIRED// /\;}) - - SRB2_ASSET_OPTIONAL=$(echo ${ASSET_FILES_OPTIONAL// /\;}) + - SRB2_ASSET_HASHED=$(echo ${ASSET_FILES_HASHED// /\;}) - SRB2_ASSET_DOCS=$(echo ${ASSET_FILES_DOCS// /\;}) + - SRB2_ASSET_DIRECTORY="$OLDPWD/assets/installer" # Prepare CMake - mkdir build @@ -663,8 +638,8 @@ before_script: - export CFLAGS="-Wall -W $WFLAGS" # -Werror - export CCACHE_COMPRESS=true - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/bin -DCPACK_PACKAGE_DIRECTORY=$PWD/package - -DSRB2_ASSET_REQUIRED="${SRB2_ASSET_REQUIRED}" -DSRB2_ASSET_OPTIONAL="${SRB2_ASSET_OPTIONAL}" - -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}" + -DSRB2_ASSET_HASHED="${SRB2_ASSET_HASHED}" -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}" + -DSRB2_ASSET_DIRECTORY="${SRB2_ASSET_DIRECTORY}" -DCPACK_PACKAGE_DESCRIPTION_SUMMARY="${PROGRAM_NAME}" -DCPACK_PACKAGE_VENDOR="${PROGRAM_VENDOR}" -DSRB2_SDL2_EXE_NAME="${PROGRAM_FILENAME}" diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index 5f6db6dd5..b957f48aa 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -9,7 +9,10 @@ FUNCTION(PREPEND var prefix) SET(${var} "${listVar}" PARENT_SCOPE) ENDFUNCTION(PREPEND) -set(SRB2_ASSET_REQUIRED +set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer" + CACHE STRING "Path to directory that contains all asset files for the installer.") + +set(SRB2_ASSET_HASHED "srb2.srb;\ patch.kart;\ gfx.kart;\ @@ -18,7 +21,7 @@ chars.kart;\ bonuschars.kart;\ maps.kart;\ sounds.kart" - CACHE STRING "Required asset files for packaging. No spaces between entries!" + CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!" ) set(SRB2_ASSET_DOCS @@ -26,25 +29,13 @@ set(SRB2_ASSET_DOCS history.txt;\ LICENSE.txt;\ LICENSE-3RD-PARTY.txt" - CACHE STRING "Documentation files; will not fail if they do not exist. Packaged differently from optional assets. No spaces between entries!" + CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!" ) -set(SRB2_ASSET_OPTIONAL -"music.kart" - CACHE STRING "Optional asset files. No spaces between entries!" -) - -# MD5 generation - Filename only, we don't append path to this -set(SRB2_ASSET_HASHED - ${SRB2_ASSET_REQUIRED} -) - -PREPEND(SRB2_ASSET_REQUIRED ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_REQUIRED}) -PREPEND(SRB2_ASSET_DOCS ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_DOCS}) -PREPEND(SRB2_ASSET_OPTIONAL ${CMAKE_CURRENT_SOURCE_DIR} ${SRB2_ASSET_OPTIONAL}) +PREPEND(SRB2_ASSET_DOCS ${SRB2_ASSET_DIRECTORY} ${SRB2_ASSET_DOCS}) foreach(SRB2_ASSET ${SRB2_ASSET_HASHED}) - file(MD5 ${CMAKE_CURRENT_SOURCE_DIR}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH") + file(MD5 ${SRB2_ASSET_DIRECTORY}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH") set(SRB2_ASSET_${SRB2_ASSET}_HASH ${SRB2_ASSET_${SRB2_ASSET}_HASH} PARENT_SCOPE) endforeach() @@ -52,27 +43,20 @@ endforeach() if(${CMAKE_SYSTEM} MATCHES Darwin) get_target_property(outname SRB2SDL2 OUTPUT_NAME) - install(FILES ${SRB2_ASSET_REQUIRED} + install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/" DESTINATION "${outname}.app/Contents/Resources" ) - install(FILES ${SRB2_ASSET_OPTIONAL} - DESTINATION "${outname}.app/Contents/Resources" - OPTIONAL - ) install(FILES ${SRB2_ASSET_DOCS} DESTINATION . OPTIONAL ) else() - install(FILES ${SRB2_ASSET_REQUIRED} + install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/" DESTINATION . ) - install(FILES ${SRB2_ASSET_OPTIONAL} - DESTINATION . - OPTIONAL - ) - install(FILES ${SRB2_ASSET_DOCS} - DESTINATION . - OPTIONAL - ) + # Docs are assumed to be located in SRB2_ASSET_DIRECTORY, so don't install again + #install(FILES ${SRB2_ASSET_DOCS} + # DESTINATION . + # OPTIONAL + #) endif() diff --git a/assets/debian-template/rules b/assets/debian-template/rules index 99a4eaf3c..c2d19922d 100644 --- a/assets/debian-template/rules +++ b/assets/debian-template/rules @@ -47,55 +47,31 @@ RM := rm -rf DIR := $(shell pwd) PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g') -DATAFILES := ${ASSET_FILES_REQUIRED} -DOCFILES := ${ASSET_FILES_DOCS} -OPTIONALFILES := ${ASSET_FILES_OPTIONAL} +ARCHIVEPATH := ${ASSET_ARCHIVE_PATH} +ARCHIVEOPTIONALPATH := ${ASSET_ARCHIVE_OPTIONAL_PATH} GETOPTIONALFILES := ${ASSET_FILES_OPTIONAL_GET} DATADIR := $(shell echo "${PACKAGE_INSTALL_PATH}" | sed -e 's/^\///') RESOURCEDIR := . +STAGINGDIR := $(RESOURCEDIR)/installer WGET := wget -P $(RESOURCEDIR) -c -nc build: $(MKDIR) $(DIR)/debian/tmp/$(DATADIR) > $(DIR)/debian/source/include-binaries - # This will need to be updated every time SRB2 official version is # Copy data files to their install locations, and add data files to include-binaries - for file in $(DATAFILES); do \ - if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ - $(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \ + if [ ! -d $(STAGINGDIR) ]; then \ + mkdir -p "$(STAGINGDIR)"; \ + $(WGET) $(ARCHIVEPATH); \ + 7z x "$(RESOURCEDIR)/$(shell basename $(ARCHIVEPATH))" -aos; \ + if [ "$(GETOPTIONALFILES)" = "1" ]; then \ + $(WGET) $(ARCHIVEOPTIONALPATH); \ + 7z x "$(RESOURCEDIR)/$(shell basename $(ARCHIVEOPTIONALPATH))" -aos; \ fi; \ - if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ - $(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \ - echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \ - fi; \ - if [ ! -f $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR} ]; then \ - echo $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR} not found and could not be downloaded!; \ - return 1; \ - fi; \ - done - # Do the same for DOCFILES, but don't error out if not found - for file in $(DOCFILES); do \ - if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ - $(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \ - fi; \ - if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ - $(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \ - echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \ - fi; \ - done - # Do the same for OPTIONALFILES if GETOPTIONALFILES == 1 - if [ "$(GETOPTIONALFILES)" = "1" ]; then \ - for file in $(OPTIONALFILES); do \ - if [ ! -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ - $(WGET) ${ASSET_BASE_PATH}/${DEBFILEVAR}; \ - fi; \ - if [ -f $(RESOURCEDIR)/${DEBFILEVAR} ]; then \ - $(INSTALL) $(RESOURCEDIR)/${DEBFILEVAR} $(DIR)/debian/tmp/$(DATADIR)/${DEBFILEVAR}; \ - echo $(RESOURCEDIR)/${DEBFILEVAR} >> $(DIR)/debian/source/include-binaries; \ - fi; \ - done; \ - fi; + fi + # Install asset directory and add asset file to include-binaries + cp -vr "$(STAGINGDIR)/." "$(DIR)/debian/tmp/$(DATADIR)" + find "$(STAGINGDIR)" >> $(DIR)/debian/source/include-binaries binary-indep: diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh index 9f81733dc..96ce1142f 100644 --- a/deployer/travis/deployer_defaults.sh +++ b/deployer/travis/deployer_defaults.sh @@ -28,10 +28,9 @@ # Asset File Parameters : ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-assets.7z} -: ${ASSET_BASE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets} -: ${ASSET_FILES_REQUIRED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart bonuschars.kart maps.kart sounds.kart} +: ${ASSET_ARCHIVE_OPTIONAL_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-optional-assets.7z} +: ${ASSET_FILES_HASHED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart bonuschars.kart maps.kart sounds.kart} : ${ASSET_FILES_DOCS:=README.txt history.txt LICENSE.txt LICENSE-3RD-PARTY.txt} -: ${ASSET_FILES_OPTIONAL:=music.kart} : ${ASSET_FILES_OPTIONAL_GET:=0} # FTP Parameters @@ -78,10 +77,9 @@ # Export Asset and Package Parameters for envsubst templating export ASSET_ARCHIVE_PATH="${ASSET_ARCHIVE_PATH}" -export ASSET_BASE_PATH="${ASSET_BASE_PATH}" -export ASSET_FILES_REQUIRED="${ASSET_FILES_REQUIRED}" +export ASSET_ARCHIVE_OPTIONAL_PATH="${ASSET_ARCHIVE_OPTIONAL_PATH}" +export ASSET_FILES_HASHED="${ASSET_FILES_HASHED}" export ASSET_FILES_DOCS="${ASSET_FILES_DOCS}" -export ASSET_FILES_OPTIONAL="${ASSET_FILES_OPTIONAL}" export ASSET_FILES_OPTIONAL_GET="${ASSET_FILES_OPTIONAL_GET}" export PACKAGE_NAME="${PACKAGE_NAME}" From 120e5d9a63e007f7cf1f169776118a54b6ada55a Mon Sep 17 00:00:00 2001 From: mazmazz Date: Tue, 1 Jan 2019 10:49:10 -0500 Subject: [PATCH 23/86] Correct ASSET_FILES_HASHED for kart assets --- deployer/travis/deployer_defaults.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh index 96ce1142f..c97cee453 100644 --- a/deployer/travis/deployer_defaults.sh +++ b/deployer/travis/deployer_defaults.sh @@ -29,7 +29,7 @@ # Asset File Parameters : ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-assets.7z} : ${ASSET_ARCHIVE_OPTIONAL_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-optional-assets.7z} -: ${ASSET_FILES_HASHED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart bonuschars.kart maps.kart sounds.kart} +: ${ASSET_FILES_HASHED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart maps.kart} : ${ASSET_FILES_DOCS:=README.txt history.txt LICENSE.txt LICENSE-3RD-PARTY.txt} : ${ASSET_FILES_OPTIONAL_GET:=0} From 40140d4372271eab232474e7e43fad96e002b0cb Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Wed, 2 Jan 2019 20:36:13 +0100 Subject: [PATCH 24/86] More cleanups and WANTED stuff --- src/k_kart.c | 180 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 116 insertions(+), 64 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 2b0ae3187..02c7e835c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5816,6 +5816,8 @@ static patch_t *kp_battlelose; static patch_t *kp_battlewait; static patch_t *kp_battleinfo; static patch_t *kp_wanted; +static patch_t *kp_wantedsplit; +static patch_t *kp_wantedreticle; static patch_t *kp_itembg[4]; static patch_t *kp_itemtimer[2]; @@ -5955,6 +5957,8 @@ void K_LoadKartHUDGraphics(void) kp_battlewait = W_CachePatchName("K_BWAIT", PU_HUDGFX); kp_battleinfo = W_CachePatchName("K_BINFO", PU_HUDGFX); kp_wanted = W_CachePatchName("K_WANTED", PU_HUDGFX); + kp_wantedsplit = W_CachePatchName("4PWANTED", PU_HUDGFX); + kp_wantedreticle = W_CachePatchName("MMAPWANT", PU_HUDGFX); // Kart Item Windows kp_itembg[0] = W_CachePatchName("K_ITBG", PU_HUDGFX); @@ -6252,9 +6256,6 @@ static void K_initKartHUD(void) MINI_Y = (BASEVIDHEIGHT/2); - WANT_X = BASEVIDWIDTH-8; - WANT_Y = (BASEVIDHEIGHT/2)-12; - if (splitscreen > 1) // 3P/4P Small Splitscreen { // 1P (top left) @@ -6264,17 +6265,17 @@ static void K_initKartHUD(void) LAPS_X = 3; LAPS_Y = (BASEVIDHEIGHT/2)-13; - POSI_X = 32; + POSI_X = 24; POSI_Y = (BASEVIDHEIGHT/2)- 16; // 2P (top right) - ITEM2_X = BASEVIDWIDTH-40; + ITEM2_X = BASEVIDWIDTH-39; ITEM2_Y = -8; - LAPS2_X = BASEVIDWIDTH-45; + LAPS2_X = BASEVIDWIDTH-40; LAPS2_Y = (BASEVIDHEIGHT/2)-13; - POSI2_X = BASEVIDWIDTH -9; + POSI2_X = BASEVIDWIDTH -8; POSI2_Y = (BASEVIDHEIGHT/2)- 16; // Reminder that 3P and 4P are just 1P and 2P splitscreen'd to the bottom. @@ -6284,8 +6285,6 @@ static void K_initKartHUD(void) MINI_X = (3*BASEVIDWIDTH/4); MINI_Y = (3*BASEVIDHEIGHT/4); - WANT_X = (BASEVIDWIDTH/2)-8; - if (splitscreen > 2) // 4P-only { MINI_X = (BASEVIDWIDTH/2); @@ -6358,6 +6357,7 @@ static void K_drawKartItem(void) UINT8 localcolor = SKINCOLOR_NONE; SINT8 colormode = TC_RAINBOW; UINT8 *colmap = NULL; + boolean flipamount = false; // Used for 3P/4P splitscreen to flip item amount stuff if (stplyr->kartstuff[k_itemroulette]) { @@ -6589,6 +6589,7 @@ static void K_drawKartItem(void) fx = ITEM2_X; fy = ITEM2_Y; fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN : V_SNAPTOTOP); // flip P4 to the bottom + flipamount = true; } } @@ -6600,10 +6601,13 @@ static void K_drawKartItem(void) // Then, the numbers: if (stplyr->kartstuff[k_itemamount] >= numberdisplaymin && !stplyr->kartstuff[k_itemroulette]) { - V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, kp_itemmulsticker[offset]); + V_DrawScaledPatch(fx + (flipamount ? 48 : 0), fy, V_HUDTRANS|fflags|(flipamount ? V_FLIP : 0), kp_itemmulsticker[offset]); // flip this graphic for p2 and p4 in split and shift it. V_DrawFixedPatch(fx<kartstuff[k_itemamount])); + if (flipamount) // reminder that this is for 3/4p's right end of the screen. + V_DrawString(fx+2, fy+31, V_ALLOWLOWERCASE|V_HUDTRANS|fflags, va("x%d", stplyr->kartstuff[k_itemamount])); + else + V_DrawString(fx+24, fy+31, V_ALLOWLOWERCASE|V_HUDTRANS|fflags, va("x%d", stplyr->kartstuff[k_itemamount])); else { V_DrawScaledPatch(fy+28, fy+41, V_HUDTRANS|fflags, kp_itemx); @@ -6805,9 +6809,14 @@ static void K_DrawKartPositionNum(INT32 num) patch_t *localpatch = kp_positionnum[0][0]; //INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT); INT32 fx = 0, fy = 0, fflags = 0; + boolean flipdraw = false; // flip the order we draw it in for MORE splitscreen bs. fun. + boolean overtake = false; if (stplyr->kartstuff[k_positiondelay] || stplyr->exiting) + { scale *= 2; + overtake = true; // this is used for splitscreen stuff in conjunction with flipdraw. + } if (splitscreen) scale /= 2; @@ -6819,7 +6828,7 @@ static void K_DrawKartPositionNum(INT32 num) fx = POSI_X; if (stplyr == &players[displayplayer]) // for player 1: display this at the top right, above the minimap. { - fy = 32; + fy = 30; fflags = V_SNAPTOTOP|V_SNAPTORIGHT; } else // if we're not p1, that means we're p2. display this at the bottom right, below the minimap. @@ -6835,6 +6844,9 @@ static void K_DrawKartPositionNum(INT32 num) fx = POSI_X; fy = POSI_Y; fflags = V_SNAPTOLEFT|((stplyr == &players[thirddisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P3 to the bottom. + flipdraw = true; + if (num && num >= 10) + fx += W; // this seems dumb, but we need to do this in order for positions above 10 going off screen. } else // else, that means we're P2 or P4. { @@ -6889,7 +6901,8 @@ static void K_DrawKartPositionNum(INT32 num) else localpatch = kp_positionnum[num % 10][0]; - V_DrawFixedPatch(fx<width*scale/2) : 0), fy< 1) { @@ -7157,15 +7172,30 @@ static void K_drawKartLaps(void) fx = LAPS2_X; fy = LAPS2_Y; fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P4 to the bottom + flipstring = true; // make the string right aligned and other shit } } - V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, kp_splitlapflag); - if (stplyr->exiting) + + if (stplyr->exiting) // draw stuff as god intended. + { + V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, kp_splitlapflag); V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, "FIN"); - else - V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->laps+1, cv_numlaps.value)); + } + else // take flipstring into account here since we may have more laps than just 10 + if (flipstring) + { + stringw = V_StringWidth(va("%d/%d", stplyr->laps+1, cv_numlaps.value), 0); + + V_DrawScaledPatch(BASEVIDWIDTH-stringw-16, fy, V_HUDTRANS|fflags, kp_splitlapflag); + V_DrawRightAlignedString(BASEVIDWIDTH-3, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->laps+1, cv_numlaps.value)); + } + else // draw stuff NORMALLY. + { + V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, kp_splitlapflag); + V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->laps+1, cv_numlaps.value)); + } } else { @@ -7205,6 +7235,8 @@ static void K_drawKartBumpersOrKarma(void) UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, stplyr->skincolor, 0); INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTOLEFT); INT32 fx = 0, fy = 0, fflags = 0; + boolean flipstring = false; // same as laps, used for splitscreen + INT32 stringw = 0; // used with the above if (splitscreen > 1) { @@ -7222,6 +7254,7 @@ static void K_drawKartBumpersOrKarma(void) fx = LAPS2_X; fy = LAPS2_Y; fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P4 to the bottom + flipstring = true; } if (stplyr->kartstuff[k_bumper] <= 0) @@ -7229,10 +7262,20 @@ static void K_drawKartBumpersOrKarma(void) V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|fflags, kp_splitkarmabomb, colormap); V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/2", stplyr->kartstuff[k_comebackpoints])); } - else + else // the above doesn't need to account for weird stuff since the max amount of karma necessary is always 2 ^^^^ { - V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|fflags, kp_rankbumper, colormap); - V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); + if (flipstring) // for p2 and p4, assume we can have more than 10 bumpers. It's retarded but who knows. + { + stringw = V_StringWidth(va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value), 0); + + V_DrawMappedPatch(BASEVIDWIDTH-stringw-16, fy-1, V_HUDTRANS|fflags, kp_rankbumper, colormap); + V_DrawRightAlignedString(BASEVIDWIDTH-3, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); + } + else // draw bumpers normally. + { + V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|fflags, kp_rankbumper, colormap); + V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); + } } } else @@ -7285,44 +7328,7 @@ static void K_drawKartWanted(void) { UINT8 i, numwanted = 0; UINT8 *colormap = NULL; - INT32 fx = 0, fy = 0, fflags = 0; // splitscreen stuff - - if (splitscreen) // Can't fit the poster on screen, sadly - { - - // wanted is a bit of a mess but don't worry. - if (splitscreen < 2) // don't change shit for THIS splitscreen. - { - fx = WANT_X; - fy = WANT_Y; - fflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT); - } - else - { - - if (stplyr == &players[displayplayer] || stplyr == &players[thirddisplayplayer]) // If we are P1 or P3... - { - fx = LAPS_X; - fy = POSI_Y - 8; - fflags = V_SNAPTOLEFT|((stplyr == &players[thirddisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P3 to the bottom. - } - else // else, that means we're P2 or P4. - { - fx = LAPS2_X - 10; - fy = POSI2_Y - 8; - fflags = V_SNAPTORIGHT|((stplyr == &players[fourthdisplayplayer]) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P4 to the bottom - } - } - - if (K_IsPlayerWanted(stplyr) && leveltime % 10 > 3) - { - if (splitscreen > 1) - V_DrawString(fx, fy-4, fflags|V_HUDTRANS|V_ORANGEMAP, "WANTED"); - else - V_DrawRightAlignedString(fx, fy, fflags|V_HUDTRANS|V_ORANGEMAP, "WANTED"); - } - return; - } + INT32 basex = 0, basey = 0; for (i = 0; i < 4; i++) { @@ -7334,13 +7340,33 @@ static void K_drawKartWanted(void) if (numwanted <= 0) return; + // set X/Y coords depending on splitscreen. + if (splitscreen < 3) // 1P and 2P use the same code. + { + basex = WANT_X; + basey = WANT_Y; + if (splitscreen == 2) + { + basey += 16; // slight adjust for 3P + basex -= 6; + } + } + else if (splitscreen == 3) // 4P splitscreen... + { + basex = BASEVIDWIDTH/2 - (SHORT)(kp_wantedsplit->width/2); // center on screen + basey = BASEVIDHEIGHT - 55; + //basey2 = 4; + } + if (battlewanted[0] != -1) colormap = R_GetTranslationColormap(0, players[battlewanted[0]].skincolor, GTC_CACHE); - V_DrawFixedPatch(WANT_X< 1 ? kp_wantedsplit : kp_wanted), colormap); + /*if (basey2) + V_DrawFixedPatch(basex< 1 ? 13 : 8), y = basey+(splitscreen > 1 ? 16 : 21); fixed_t scale = FRACUNIT/2; player_t *p = &players[battlewanted[i]]; @@ -7360,7 +7386,9 @@ static void K_drawKartWanted(void) if (players[battlewanted[i]].skincolor) { colormap = R_GetTranslationColormap(TC_RAINBOW, p->skincolor, GTC_CACHE); - V_DrawFixedPatch(x<skin] : facerankprefix[p->skin]), colormap); + V_DrawFixedPatch(x<skin] : facerankprefix[p->skin]), colormap); + /*if (basey2) // again with 4p stuff + V_DrawFixedPatch(x<skin] : facerankprefix[p->skin]), colormap);*/ } } } @@ -7501,6 +7529,8 @@ static void K_drawKartMinimapHead(mobj_t *mo, INT32 x, INT32 y, INT32 flags, pat else colormap = R_GetTranslationColormap(skin, mo->color, GTC_CACHE); V_DrawFixedPatch(amxpos, amypos, FRACUNIT, flags, facemmapprefix[skin], colormap); + if (mo->player && K_IsPlayerWanted(mo->player)) + V_DrawFixedPatch(amxpos - (4< 105) { - minimaptrans = (splitscreen == 2 ? 10 : cv_kartminimap.value); + minimaptrans = cv_kartminimap.value; if (timeinmap <= 113) minimaptrans = ((((INT32)timeinmap) - 105)*minimaptrans)/(113-105); if (!minimaptrans) @@ -7585,7 +7615,7 @@ static void K_drawKartMinimap(void) if (!players[i].mo || players[i].spectator) continue; - if (!splitscreen && i == displayplayer) + if (i == displayplayer || i == secondarydisplayplayer || i == thirddisplayplayer || i == fourthdisplayplayer) // don't draw our local players. { dop1later = true; // Do displayplayer later continue; @@ -7608,9 +7638,31 @@ static void K_drawKartMinimap(void) if (!dop1later) return; // Don't need this + // draw our local players here, opaque. splitflags &= ~V_HUDTRANSHALF; splitflags |= V_HUDTRANS; - K_drawKartMinimapHead(stplyr->mo, x, y, splitflags, AutomapPic); + for (i = MAXPLAYERS-1; i >= 0; i--) + { + if (!(i == displayplayer || i == secondarydisplayplayer || i == thirddisplayplayer || i == fourthdisplayplayer)) + continue; // this doesn't interrest us + + if (splitscreen > 1) // this only applies to splitscreen. When we play alone, we should always get drawn reguardless of what we're doing. + { + if (G_BattleGametype() && players[i].kartstuff[k_bumper] <= 0) + continue; + if (players[i].kartstuff[k_hyudorotimer] > 0) + { + if (!((players[i].kartstuff[k_hyudorotimer] < 1*TICRATE/2 + || players[i].kartstuff[k_hyudorotimer] > hyudorotime-(1*TICRATE/2)) + && !(leveltime & 1))) + continue; + } + + K_drawKartMinimapHead(players[i].mo, x, y, splitflags, AutomapPic); + } + else + K_drawKartMinimapHead(players[i].mo, x, y, splitflags, AutomapPic); + } } static void K_drawKartStartCountdown(void) From a213898fdf374addf10bb37f3b6742103ffec1d4 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 17:27:15 -0500 Subject: [PATCH 25/86] Corrected CMake hashed assets; add kart to assets/gitignore --- assets/.gitignore | 1 + assets/CMakeLists.txt | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/assets/.gitignore b/assets/.gitignore index d6e46a75b..6b881b98d 100644 --- a/assets/.gitignore +++ b/assets/.gitignore @@ -3,6 +3,7 @@ *.dta *.wad *.txt +*.kart !README.txt !LICENSE.txt !LICENSE-3RD-PARTY.txt diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index b957f48aa..fd34939cf 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -18,9 +18,7 @@ patch.kart;\ gfx.kart;\ textures.kart;\ chars.kart;\ -bonuschars.kart;\ -maps.kart;\ -sounds.kart" +maps.kart" CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!" ) From 1f0c7425f9586fad0a8105468cbd5cc364e577b5 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 17:31:04 -0500 Subject: [PATCH 26/86] Add HISTORY.txt to assets; correct default lists for capitalization --- assets/.gitignore | 1 + assets/CMakeLists.txt | 2 +- assets/HISTORY.txt | 202 +++++++++++++++++++++++++++ deployer/travis/deployer_defaults.sh | 2 +- 4 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 assets/HISTORY.txt diff --git a/assets/.gitignore b/assets/.gitignore index 6b881b98d..b9dc7c70d 100644 --- a/assets/.gitignore +++ b/assets/.gitignore @@ -5,6 +5,7 @@ *.txt *.kart !README.txt +!HISTORY.txt !LICENSE.txt !LICENSE-3RD-PARTY.txt !CMakeLists.txt diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index fd34939cf..1eab62cc9 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -24,7 +24,7 @@ maps.kart" set(SRB2_ASSET_DOCS "README.txt;\ -history.txt;\ +HISTORY.txt;\ LICENSE.txt;\ LICENSE-3RD-PARTY.txt" CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!" diff --git a/assets/HISTORY.txt b/assets/HISTORY.txt new file mode 100644 index 000000000..dfa06f2c7 --- /dev/null +++ b/assets/HISTORY.txt @@ -0,0 +1,202 @@ +KartKrew: Chapter 1.0 - Who Would Actually Read All This???? [LIVE DOC] + + +-beep- + + +[Chromatian dual-wields onto the interview set, stage left, and takes a seat next to VelocitOni. Oni stands up to look at the confused camera-men before opening a binder to stoically show both of his redone Tails sprites for Kart 1.0 and Vanilla 2.2. He closes it and sits back down, the three sofa cushions being Sryder, toaster, and Lat’s limp timezone’d bodies respectively; throwing arm over the side of the Fooruman pillow] + +Chrome: Uh…......anyway Chaos Zero 64, a Vanilla SRB2 Developer at the time, during the “heyday” of Sonic Riders started working on his own side project of recreating that game in SRB2 v1.09.4. After programming a functional recreation, he went a step further and threw together a new race mode for all of the characters in the playable exe. After THAT, he took it another step further and made a Mario Kart game type as well. A bunch of young mappers (Including current KartKrew™ dev members Blade & I) tossed him a few maps and he called it a complete exe. + + While fully functional, it was as barebones as you could get. Character stats were altered Vanilla stats (lowered jump, speed, no spindash, and no drifting!) weapon rings reskinned into mario items, and a bunch of checkpoints that you had to hit to count as a lap around the course. It was pretty jank, but seeing all of those dents in the core gameplay is what gave way to the inspiration to push it further than what it initially was. + +Oni: There’s only one way to describe how I found it in 1.09.4, and the phrasing kinda caught on (to my pleasure), “ghetto footrace”. It was definitely an absolute MIRACLE at the time to even have SRB2 do anything different from it’s main gameplay scheme, bare ass open maps with collapsing FOFs; and the entire community as a whole was younger… so we all ate it up anyways. Standards were lower, times were simpler, we still really appreciate CZ for trying something ‘new’. When you pulled the wool off though, it was just ghetto footrace with reskinned buttons and totally unique…but also totally random weapon panels. + + + +[FlareBlade pops out of loose pipe in the room for some reason and hits his head on a kitchen sink.] + + + +Blade: While most of the maps back then harkened back to the simpler style of the 1.09.4 era; and were scrapped as SRB2 as a whole improved, Pipe Speedway has survived all the way to the present, although with a heavy style change, including a new name! (Now Daytona Speedway) + +Oni: [laughs] You really like that map, don’t you? + +Random Audience Member:[shouting] PICK, PICK STARDUST!! + +[The audience member is immediately shot through the heart with striking accuracy... the vote-screen SFX of a map being picked and Palmtree Panic Zone kids screaming "Yeah!" sounds. Cut to SeventhSentinel who just logged into the middle of the room with a shocked expression, smoking quality-controlling Desert Eagle in hand. The audience member's mask falls off, turning out to be Stardust Speedway Battle himself, now dead from the rotation.] + +Sev: Why would Blade do this…? + + +Chrome: Pipe Speedway opened the PIPES for Kart’s 2.0 development, you could say. [laughs] + +Blade: Well, it WAS the first one to be slope-ified! Mostly as a proof-of-concept to show what could be done. (the rest of you lot were too busy with that “TD” thing…) And then you all went and upstaged it anyway with some of the other maps. [chuckles] //shade + +Oni: Yeah, while we finished ANOTHER full fledged mod, you actually got about 54% done with Pipe Speedway after 4 years! I was impressed. ////clapback + +Chrome: Still, Blade kept the campfire lit while we went in search of food, that takes some dedication. + +Oni: No. That was Blitz-T who continued making entire maps the whole time-- + +Blade --Thank you. Overall though, the original kart was more-or-less a side feature of Riders. Never really the main focus of the mod, but without a doubt the most popular part of it. The other two modes never really caught on. (Though we did have that ill-fated “Rivals” mod…) =P + + + +Oni: [Holding a knife up to the two] The “what” mod?? Anywho, I was a frequent player of 1.09.4 but never really in the community much until 2.0. It wasn’t until CZ ported his mod to be up to date, that I jumped in with the idea that I actually had enough of a brain to contribute to things… the problem was that my standards from the get-go were way way too high, and my skill as a spriter and general design experience were a lot lower. Nevertheless, when SRB2Riders hype died down, I approached him in DMs with all my expectations and ideas for his mod...and… surprisingly he didn’t laugh me out! I guess he’d never had anyone directly tell him they’d help outright before (besides Ground The Fox), but he was a bit noticeably bummed that I only cared for what he’d considered the minor Mario mod within the mod. + + This is what kickstarted the chain of events. All my plans that I bugged CZ for every other day in PMs never came to fruition, he actually lost interest and began to slowly fade out of the SRB2 community as a whole. Instead out of LITERALLY nowhere, D00D64 decided to revive the SRB2Riders mod himself by releasing a pretty expansive mod...of a mod within a mod OF a mod himself. Naturally, everyone jumped onto this, it exploded in popularity pretty much right away, because there were finally more than just a few mediocre maps to play “kart mode” on. There were PORTS, glorious glorious ports. Of course, I flocked to D00D to help out. + + + +Blade: Flat, boring, ports. Though the crazy item spam helped. Also we FINALLY got DRIFTING! Separating the characters from the bloat of the other 2 modes also made making custom racers easier to make. + + + +Oni: ...yeah, the truth is, once the “D00DKart” era started, it didn’t help that there were so many more por-- er, maps to play kart-mode on that people realized the formula for a kart racer was just inherently more exciting than what CZ’d pulled off with the Riders half of it. I remember a LOT of content for kart, and then like 2 maps for the more fleshed out and polished main focus of the thing. Everyone just sorta... forgot about Riders mode, sadly. It didn’t help that someone else also exploded onto the scene in a siamese feedback loop once D00D churned out enough maps a day to actually make a full game out of; ZarroTsu, who also saw opportunity too. + + D00DKart and “Super SRB2Kart Z”, a continuation of ChaosZero’s mod, combined into one super project. A ‘team’ just kinda assembled naturally out of this, and more original content started to, slowly but surely, get made by a wider variety of people. The train continued to accelerate, lots of familiar faces coming into play. All the basics you’d expect out of a Mario Kart clone were coded by Zarro, basically updates every single day, stuff just kept getting done by this specific group of people. + + + +Chrome: That’s about when things for kart started to die down. D00DKart kept the entire game afloat, but Kart was always a sideline to Vanilla. Once D00DKart finally got comfortable, people moved back to Vanilla to see what else they could do with that. Servers stopped popping up as quickly as they used to, and eventually Super SRB2 Kart Z fell into obscurity. It was at this point that the small group still excited for the game tried to push for an even better project. + + + +Oni: Yep. When steam on this makeshift game finally died, Zarro lost interest too, and outright just vanished for a year or two(?) and when then, when he returned, he had very little momentum to continue. So in the meanwhile we kinda came closer together under the team “Kart Krew”, and in his place Sryder took the helm. Zarro’s vision was always to be a Mario clone, so when he was absent I wanted to push my idea of getting rid of most if not all references to Mario pronto, going for a Sonic aesthetic instead. The idea was that we’ll never be as good as a Nintendo game, and comparisons will always be drawn, so why not do something more unique? + + Progress boomed again, but in private this time. 2013 ended up being the “2.0 indev” period. Standards kept increasing and increasing internally, because no one was satisfied with “ghetto footrace” anymore, we grew out of it and wanted an actual game this time… not play-pretend with all the instathrust hacks and poor game design decisions we were left with. Like shields. + +NOBODY liked those shields. We just couldn’t force Zarro to do what he didn’t want with his mod of a mod in a mod of a mod. + + + +Chrome: [laughs] Whirlwind was just a bit too broken for everyone. + + + +Oni: Using a Whirlwind Shield felt like playing a game of fucking Twister with my fingers just to reach the convoluted buttons, and you’re rewarded with the equivalent of bomb-jumping into the sky, except your kart is a runaway shower tub on pig grease. Awful. But good going, you ruined the entire race! Your slap on the wrist is now an unavoidable Armageddon Shield to the entire server by that Brazilian player who accidentally somehow made it to Lap 2 by RNG. + + Mechanics were being edited, handling changed a bit, sprites were getting updated (notably the karts themselves), videos were being released from each of our channels, maps were bloating, notorious bug fixes at light speed. Unfortunately, literally at the same time, the new “Kart Krew” decided to sink their teeth into the Top Down experiment (we were on a high of too much confidence from all the progress) WHILE the release of Vanilla 2.1 invalidated all thre-- BOTH of our projects in one fell swoop. These were the dark ages, and it only got worse when I decided to disappear TOO before TD even got done. The story behind that development cycle (Top Down took all our Kart focus away when it was in progress) is known by now, but the real unexpected meat happened when we finally pushed that abortion out the door. + + + +Chrome: You probably should have listened to Blade and stuck with our guns on Kart, and not take a “break” for a new experiment. [laughs] + + + +[A silhouette outside the window in the rain can be seen with glowing cones, waving. Before anyone can process it, American Airlines smashes through the studio. For some reason Charybdizs walks out of the left-frontmost hatch] + + +Charyb: For the record, Top Down wasn't bad by any means! People are just jumping on it because its dev cycle was complicated and a big learning experience for everyone. There were numerous members who poured their hearts into it! I’m proud of them! But yeah… the dev cycle… + +[wolfs can be seen frantically searching for a point in this interview to be relevant, unscheduled anime forcing him to miss most of it] + + +wolfs: Oh man, TD’s dev cycle. What a shitshow. You’d either get a response in 3 seconds or 3 days depending on who was around. Motivation was at an all-time low back then. I felt like I was talking into a vacuum sometime-- + +Oni: Why the fuck would you interrupt THIS moment, talking about 3 day responses when you’ll be “online” and won’t say anything until Kony’s live fucking body is found. Get outta here. + +wolfs: says the guy who disappeared for two years + +Oni: 'ey fuk you mane + +[Oni can be seen across the room from the plane, his TD_PTSD.td filled breathing into a brown paper bag] + +Oni: No, if Top Down were bad it wouldn’t have made half the hype of what Kart is doing now by ITSELF and manage to make it on Retro’s front page. But the dev cycle was purgatory, a big explosion at the start that dwindled to a candlefire, put out by the rain of inactivity...and then reignited by the power of Discord Chat. The actual product itself was pretty decent, and another fresh multiplayer experience not ever done in SRB2. It had hype. + + +Blade: ...When you say the karts were updated, you mean “Oni nit-picked them to death and redid them like 10 times”. + +Oni: I wish he were joking about that number. + + + +Chrome: It all worked out for the better though. That (rather lengthy!) experiment taught us a lot about time management and what not to do for the far more important modification. Discord got popular around this time, and Top Down hopped into that plane, and quickly parachuted out into the community. This gathered a few new, very important members into KartKrew™. TehRealSalt, host of the Sugoi series, Seventh Sentinel, a new mapper with a fresh take on level design, and toaster, a Vanilla dev programmer with a fire for Kart so hot keeping up with her pace is a job in itself. Seriously, without these three members, Kart wouldn’t have the polish it does now. + + It’s around this time that the pioneer in Kart level design returned, Blitz-T. Every map he made for 2.0 indev kart was a jawdropper to everyone on the team, and his attention to the small details were more than impressive. On top of all of this, SRB2 version 2.1 supported sloped planes, something that was as unbelievable for this game as cell phones were back in the 50s. + This is where 2.1 Kart really started to shine, Zarro ported the entire game in the span of a few weeks, Blitz-T took his old maps and revamped them with slopes to nearly unrecognizable new iterations, TehRealSalt made the entire Battle mode in the span of a *single* night, and Seventh Sentinel finally gave us looped music and consistent sound quality. + + + +Blade: Yeah, they really picked up the slack of some of the older members that lost steam, such as myself. + + + +Oni: Sev, Sal, and toast were the most unexpected things to ever happen to this thing. This shit was literally overnight. It’s really crazy how new blood can help bring a new perspective and vision to the game, along with skills you didn’t know the team was lacking. SO much pressure was taken off of Sryder as Sal and toaster literally slapped the exe until it cried, like frame-perfect Ice Climber handoffs into a 300% wobble. EVERYONE was overwhelmed. I saw the chance and took it, so we decided to go with my vision while Zarro took a backseat. Most, if not all the remaining broken code was just thrown out the window at this point, the game was rapidly feeling cleaner in just nights. + + If you took your eyes off of it for a few hours, something changed massively. The physics went from instathrust to momentum based, Zarro coded new acceleration code, toaster put in 2.2 friction physics as a test that turned out overwhelmingly positive...and also divisive with the previous vision of the mod. These changes were all happening so fast, despite being in kinda stored with me idea-wise for years, that it caused a bit of a rift in what this game was supposed to be. Zarro decided to take a step back and dip because it’d changed so much in just the span of 4 months, he took one good look at 4-Player Splitscreen… a never seen before feat, and just breathed. It didn’t feel like his mod anymore, his personal connection with it felt lost… + +[Oni wiping sweat off his brow] Things only got more drastically revamped… very very rapidly. + + The Mario aesthetic was entirely tossed out, as Sal was willing to work with me night and day on redoing most of everything about items… and then sounds. My power level for sprites massively jumped during TD development, so I decided to take it upon myself to do almost everything. They’re such friendly and cooperative coders that I can’t help but push a little harder than I used to (I was WAY lazier before they got here) to keep up. + + + + +Chrome: Those kart sprites took a good 6 months longer than they needed to for sure! [laughs] + + + + +Oni: [laughs in Latin] It’s not as easy as sloping a single sector in Misty Maze, that’s for sure! + + The mappers went bonkers, especially Blitz-T and TyrannoChao aka “Ezo” (previously ChaoticChao) who’s content probably makes up half the game combined. The creative freedom and supportive style/mentality of how the team is led pretty much went to an unstoppable feedback loop of content AND polish, surprisingly. We got to a point where we could not only lay any remaining ChaosZero64 code that might’ve seeped to rest, but also throw out almost every direct Mario port or reference right down to the sounds. It became a Sonic game, in one year. + + +Blade: Stuff was added so rapidly, even right up to release it always felt like there was something new being added. Bonuschars alone got 2 extra characters added in the week before release! + +Oni: Really, if you asked me, I’d say that most of kart just happened since TD released til now, and the rest was just a confused fever dream of passing torches until it all just got thrown out and re-done anyway. That’s why a changelog is pretty pointless, it’s like going to a shop...sitting down…and getting a recommendation for your vehicle; but the paper’s blank and just reads “get new car”. Honestly, playing this and playing the old 2.0 public builds that people like Super Chris still host for some reason is like aging backwards, except you’re really just amputating your skeleton to appear small and young again, it’s HORRIBLE. So if they all liked that… hopefully they’ll like an actually good game...even more?? + +[Sounds of an angry midnight release crowd erupting outside, muffled. D00D64 can be seen at the forefront...slapping yet another unnaturally high quality gif meme onto the glass window. The camera pans out, there’s hundreds of gif memes all over the outer walls] + +Oni: Is it midnight?? I told them to fuck off, there’s no midnight release! @Chromatian FIND SOMETHING TO SAY AFTER ME TO CLOSE THIS UP ALREADY + +Chrome: [this shitty Iwata Asks atmosphere cracking at the seams of its own immersion, reality warping his professional and calm demeanor, but he laughs regardless...shakily] You just don’t know when to stop!! + +[TehRealSalt struggles trying to get into the room through the tiny doggy door for 5 awkward minutes, before giving up and just opening the door] … [she doesn’t know what to say.] + +Oni: EZO + +[The towering dinosaur just nonchalantly sits in his chair on-stage, legs crossed, resting his head on his hand] + +Ezo: Sticky Kart was a shitshow. [referring to the old controls/physics] + +Oni: holy shit YOU CAN’T SAY THAT ZARRO MIGHT BE READING + +Ezo: I have no regretties. Except for maybe Arid S--wait, that’s a secret, isn’t it? Hm. Anyway, yeah, working on this was fun. Usually. Learning to sprite was annoying but it paid off since I got to cram Wonder Boy in everyone’s faces like the scaly fucko I am. Though Gamma’s pretty cool too. I hope you all enjoy my Sonic Adventure references and that you all suffer an appropriately huge amount in Egg Quarters and Spotlight Syndicate. + +Oni: THIS IS A NON FURRY DOCUMENT :boi: + +Ezo: Speciesism UwU + + + +Boinciel: [screaming from a speaker contained offstage] HI MY NAME IS BOINCIEL I DESIGNED KART MAPS TO DESTROY YOUR EYES AND/OR YOUR SOUL OKAY BYE I HAVE TO DO MY JOB NOW + + +Oni: With a map like Kodachrome…..clearly... + +[Off in the corner, a lone wooden coat rack stands, although upon further inspection... It turns out to be, well, CoatRack in a disguise!] + +[The entire server pauses for Coat to come up with something] + +Coat: You know, these guys all did an awesome job. The controls, the graphics, music too! I just, uh… Had an engine stall on my map, sad how many times I ran out of fuel at a petroleum refinery when making it. Huh. But as one of the more outside members of the krew, just ask anyone, I could be placed under the decorative ornament members with how rarely I dropped in. But each time I did I was blown away by the leaps and bounds, filling me with joy to see this racer come to life. Even if I am a living example of why inanimate objects shouldn’t drive! + +[The entire Krew stares at the literal coat rack, smiling wholesomely until Blade opens his mouth] + +Blade: Whatever. Enough talking, LET’S GO AWAY!!!!!!!! DAYTONNNAAAAAAAAAAAAAAAA + + +[...the .txt file itself cringes to a halt.] + + + + + + + + + + +doot diff --git a/deployer/travis/deployer_defaults.sh b/deployer/travis/deployer_defaults.sh index c97cee453..9b853a80a 100644 --- a/deployer/travis/deployer_defaults.sh +++ b/deployer/travis/deployer_defaults.sh @@ -30,7 +30,7 @@ : ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-assets.7z} : ${ASSET_ARCHIVE_OPTIONAL_PATH:=https://github.com/mazmazz/Kart-Public/releases/download/kart_assets/srb2kart-v102-optional-assets.7z} : ${ASSET_FILES_HASHED:=srb2.srb patch.kart gfx.kart textures.kart chars.kart maps.kart} -: ${ASSET_FILES_DOCS:=README.txt history.txt LICENSE.txt LICENSE-3RD-PARTY.txt} +: ${ASSET_FILES_DOCS:=README.txt HISTORY.txt LICENSE.txt LICENSE-3RD-PARTY.txt} : ${ASSET_FILES_OPTIONAL_GET:=0} # FTP Parameters From 99baa585c8e11434d4e805e4b2222cbd74013a7a Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 17:33:57 -0500 Subject: [PATCH 27/86] Re-enable Werror CFLAG in travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 12d3c59aa..058b0f6b2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -635,7 +635,7 @@ before_script: - mkdir build - cd build - mkdir package - - export CFLAGS="-Wall -W $WFLAGS" # -Werror + - export CFLAGS="-Wall -W -Werror $WFLAGS" - export CCACHE_COMPRESS=true - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/bin -DCPACK_PACKAGE_DIRECTORY=$PWD/package -DSRB2_ASSET_HASHED="${SRB2_ASSET_HASHED}" -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}" From 3d79264d9ecd52068d8773553ddc0d8adda9f4d0 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 18:19:44 -0500 Subject: [PATCH 28/86] Correct asset directory for travis --- .travis.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 058b0f6b2..245bbe9d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -594,7 +594,8 @@ install: before_script: # OLDPWD is root repo folder - OLDPWD=$PWD - - mkdir -p "$OLDPWD/assets/installer" + - __ASSET_DIRECTORY="$OLDPWD/assets/installer" + - mkdir -p "$__ASSET_DIRECTORY" - cd "$HOME/srb2_cache" # Get stat command so we know what the cached archive date is. @@ -611,7 +612,7 @@ before_script: echo "$(basename $ASSET_ARCHIVE_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_PATH))"; fi; wget --verbose --server-response -N "$ASSET_ARCHIVE_PATH"; - 7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$OLDPWD/assets/installer" -aos; + 7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$__ASSET_DIRECTORY" -aos; fi; # Get optional files too @@ -620,16 +621,16 @@ before_script: echo "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_OPTIONAL_PATH))"; fi; wget --verbose --server-response -N "$ASSET_ARCHIVE_OPTIONAL_PATH"; - 7z x "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" -o"$OLDPWD/assets/installer" -aos; + 7z x "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" -o"$__ASSET_DIRECTORY" -aos; fi; - # Copy assets to repo staging folder, then go back to root repo folder + # Go back to root repo folder - cd "$OLDPWD" # Prepare CMake asset lists - SRB2_ASSET_HASHED=$(echo ${ASSET_FILES_HASHED// /\;}) - SRB2_ASSET_DOCS=$(echo ${ASSET_FILES_DOCS// /\;}) - - SRB2_ASSET_DIRECTORY="$OLDPWD/assets/installer" + - SRB2_ASSET_DIRECTORY="$__ASSET_DIRECTORY" # Prepare CMake - mkdir build From 238be26915529cf33051d3f0bf3c2e862c1cb025 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 17 Dec 2018 21:31:00 -0500 Subject: [PATCH 29/86] Fix strncpy nodenum length overflow --- src/hu_stuff.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 9bdf9bd7d..52dc4a7a0 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -469,7 +469,7 @@ static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags) const char *newmsg; int spc = 1; // used if nodenum[1] is a space. char *nodenum = (char*) malloc(3); - strncpy(nodenum, msg+3, 5); + strncpy(nodenum, msg+3, 3); // check for undesirable characters in our "number" if (((nodenum[0] < '0') || (nodenum[0] > '9')) || ((nodenum[1] < '0') || (nodenum[1] > '9'))) { @@ -977,7 +977,7 @@ static void HU_queueChatChar(INT32 c) spc = 1; // used if nodenum[1] is a space. nodenum = (char*) malloc(3); - strncpy(nodenum, msg+3, 5); + strncpy(nodenum, msg+3, 3); // check for undesirable characters in our "number" if (((nodenum[0] < '0') || (nodenum[0] > '9')) || ((nodenum[1] < '0') || (nodenum[1] > '9'))) { @@ -1679,7 +1679,7 @@ static void HU_DrawChat(void) nodenum = (char*) malloc(3); - strncpy(nodenum, w_chat+3, 4); + strncpy(nodenum, w_chat+3, 3); n = atoi((const char*) nodenum); // turn that into a number // special cases: From 08a788af746ac0064558f60cb0b40754044f7db7 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 19:11:51 -0500 Subject: [PATCH 30/86] Initialize skinnum for MD2 star colors (fix CLANG error) --- src/hardware/hw_md2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 2856cada3..0267770e4 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1286,7 +1286,7 @@ void HWR_DrawMD2(gr_vissprite_t *spr) md2->blendgrpatch && ((GLPatch_t *)md2->blendgrpatch)->mipmap.grInfo.format && gpatch->width == ((GLPatch_t *)md2->blendgrpatch)->width && gpatch->height == ((GLPatch_t *)md2->blendgrpatch)->height) { - INT32 skinnum; + INT32 skinnum = TC_DEFAULT; if ((spr->mobj->flags & MF_BOSS) && (spr->mobj->flags2 & MF2_FRET) && (leveltime & 1)) // Bosses "flash" { if (spr->mobj->type == MT_CYBRAKDEMON) From 2fe8317103038caae42a8c77905b71d9234cb30e Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 24 Dec 2018 18:37:54 -0500 Subject: [PATCH 31/86] Fix gcc 8 compile by using strcpy instead of memcpy for PM --- src/hu_stuff.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 52dc4a7a0..01a19ff32 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -506,7 +506,7 @@ static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags) } buf[0] = target; newmsg = msg+5+spc; - memcpy(msg, newmsg, 252); + strlcpy(msg, newmsg, 252); } SendNetXCmd(XD_SAY, buf, strlen(msg) + 1 + msg-buf); @@ -1014,7 +1014,7 @@ static void HU_queueChatChar(INT32 c) } // we need to get rid of the /pm newmsg = msg+5+spc; - memcpy(msg, newmsg, 255); + strlcpy(msg, newmsg, 255); } if (ci > 3) // don't send target+flags+empty message. { From 5b663bfd2818b04295cb4c41c0cf9905739c16d6 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 16 Dec 2018 19:39:16 -0500 Subject: [PATCH 32/86] Remove FIXUPO0 GCC pragma --- src/m_menu.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index bf60f3be6..a37ff7098 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -73,10 +73,6 @@ int snprintf(char *str, size_t n, const char *fmt, ...); //int vsnprintf(char *str, size_t n, const char *fmt, va_list ap); #endif -#if defined (__GNUC__) && (__GNUC__ >= 4) -#define FIXUPO0 -#endif - #define SKULLXOFF -32 #define LINEHEIGHT 16 #define STRINGHEIGHT 8 @@ -4584,10 +4580,6 @@ static boolean M_AddonsRefresh(void) return false; } -#ifdef FIXUPO0 -#pragma GCC optimize ("0") -#endif - static void M_DrawAddons(void) { INT32 x, y; @@ -4732,10 +4724,6 @@ static void M_DrawAddons(void) V_DrawSmallScaledPatch(x, y + 4, 0, addonsp[NUM_EXT+2]); } -#ifdef FIXUPO0 -#pragma GCC reset_options -#endif - static void M_AddonExec(INT32 ch) { if (ch != 'y' && ch != KEY_ENTER) From 93e8751938f80dc44b8756fbfa5b6c9b0d90d5e6 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 19:58:21 -0500 Subject: [PATCH 33/86] Better rewrite for addons draw adjustment [Kart] --- src/m_menu.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index a37ff7098..3a425a97f 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -4650,16 +4650,14 @@ static void M_DrawAddons(void) if (m > (ssize_t)sizedirmenu) m = sizedirmenu; - // then top... - i = m - (2*numaddonsshown + 1); - - // then adjust! - if (i < 0) + // then compute top and adjust bottom if needed! + if (m < (2*numaddonsshown + 1)) { - if ((m -= i) > (ssize_t)sizedirmenu) - m = sizedirmenu; + m = min(sizedirmenu, 2*numaddonsshown + 1); i = 0; } + else + i = m - (2*numaddonsshown + 1); if (i != 0) V_DrawString(19, y+4 - (skullAnimCounter/5), highlightflags, "\x1A"); From 72ff758b07fbc2da26a74a805969f41c8e370380 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 20:02:03 -0500 Subject: [PATCH 34/86] Dummy out unused functions (OSX xcode errors) --- src/p_inter.c | 13 +++++++------ src/r_data.c | 4 +++- src/st_stuff.c | 20 +++++++++++++++++--- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index fce8ccd56..5481b1314 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2951,7 +2951,8 @@ static void P_KillPlayer(player_t *player, mobj_t *source, INT32 damage) } } -static inline void P_SuperDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage) +/* +static inline void P_SuperDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage) // SRB2kart - unused. { fixed_t fallbackspeed; angle_t ang; @@ -2997,11 +2998,10 @@ static inline void P_SuperDamage(player_t *player, mobj_t *inflictor, mobj_t *so P_InstaThrust(player->mo, ang, fallbackspeed); - /* // SRB2kart - This shouldn't be reachable, but this frame is invalid. - if (player->charflags & SF_SUPERANIMS) - P_SetPlayerMobjState(player->mo, S_PLAY_SUPERHIT); - else - */ + // SRB2kart - This shouldn't be reachable, but this frame is invalid. + //if (player->charflags & SF_SUPERANIMS) + // P_SetPlayerMobjState(player->mo, S_PLAY_SUPERHIT); + //else P_SetPlayerMobjState(player->mo, player->mo->info->painstate); P_ResetPlayer(player); @@ -3009,6 +3009,7 @@ static inline void P_SuperDamage(player_t *player, mobj_t *inflictor, mobj_t *so if (player->timeshit != UINT8_MAX) ++player->timeshit; } +*/ void P_RemoveShield(player_t *player) { diff --git a/src/r_data.c b/src/r_data.c index b2c10a657..2d63317af 100644 --- a/src/r_data.c +++ b/src/r_data.c @@ -924,7 +924,8 @@ void R_ParseTEXTURESLump(UINT16 wadNum, UINT16 lumpNum, INT32 *texindex) Z_Free((void *)texturesText); } -static inline lumpnum_t R_CheckNumForNameList(const char *name, lumplist_t *list, size_t listsize) +/* +static inline lumpnum_t R_CheckNumForNameList(const char *name, lumplist_t *list, size_t listsize) // SRB2kart - unused. { size_t i; UINT16 lump; @@ -939,6 +940,7 @@ static inline lumpnum_t R_CheckNumForNameList(const char *name, lumplist_t *list } return LUMPERROR; } +*/ /*static lumplist_t *colormaplumps = NULL; ///\todo free leak static size_t numcolormaplumps = 0; diff --git a/src/st_stuff.c b/src/st_stuff.c index a34296900..747d4b068 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -439,11 +439,14 @@ void ST_changeDemoView(void) boolean st_overlay; +/* static INT32 SCZ(INT32 z) { return FixedInt(FixedMul(z<health-1, 0); @@ -701,6 +710,7 @@ static inline void ST_drawRings(void) ST_DrawNumFromHudWS(HUD_RINGSNUM, ringnum); } +*/ /* static void ST_drawLives(void) // SRB2kart - unused. @@ -1501,7 +1511,8 @@ static void ST_drawMatchHUD(void) // SRB2kart - unused. } */ -static inline void ST_drawRaceHUD(void) +/* +static inline void ST_drawRaceHUD(void) // SRB2kart - unused. { if (leveltime > starttime-(3*TICRATE) && leveltime <= starttime-(2*TICRATE)) V_DrawScaledPatch(SCX((BASEVIDWIDTH - SHORT(race3->width))/2), (INT32)(SCY(BASEVIDHEIGHT/2)), V_NOSCALESTART, race3); @@ -1520,6 +1531,7 @@ static inline void ST_drawRaceHUD(void) V_DrawString(hudinfo[HUD_LAP].x, STRINGY(hudinfo[HUD_LAP].y), 0, va("Lap: %u/%d", stplyr->laps+1, cv_numlaps.value)); } } +*/ /* static void ST_drawTagHUD(void) // SRB2kart - unused. @@ -1632,7 +1644,8 @@ static void ST_drawCTFHUD(void) // SRB2kart - unused. */ // Draws "Red Team", "Blue Team", or "Spectator" for team gametypes. -static inline void ST_drawTeamName(void) +/* +static inline void ST_drawTeamName(void) // SRB2kart - unused. { if (stplyr->ctfteam == 1) V_DrawString(256, splitscreen ? STRINGY(184) : STRINGY(192), V_HUDTRANSHALF, "RED TEAM"); @@ -1641,6 +1654,7 @@ static inline void ST_drawTeamName(void) else V_DrawString(244, splitscreen ? STRINGY(184) : STRINGY(192), V_HUDTRANSHALF, "SPECTATOR"); } +*/ /* static void ST_drawSpecialStageHUD(void) // SRB2kart - unused. From 1de758fcffe3f06ca040bd4d360687006a9569e5 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 20:48:00 -0500 Subject: [PATCH 35/86] Add __DPL_ACTIVE condition to optional asset download --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 245bbe9d5..1ae42e9cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -616,7 +616,7 @@ before_script: fi; # Get optional files too - - if [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]] && [[ "$ASSET_ARCHIVE_OPTIONAL_PATH" != "" ]]; then + - if [[ "$__DPL_ACTIVE" == "1" ]] && [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]] && [[ "$ASSET_ARCHIVE_OPTIONAL_PATH" != "" ]]; then if [ -f "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" ]; then echo "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_OPTIONAL_PATH))"; fi; From 5347d5390f671b62b195e080e7e646d5fc01626b Mon Sep 17 00:00:00 2001 From: mazmazz Date: Wed, 2 Jan 2019 20:57:57 -0500 Subject: [PATCH 36/86] Fixx GCC 4.4 array-bounds compile errors --- src/d_netcmd.c | 2 +- src/dehacked.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index f29798382..0a691d283 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -2098,7 +2098,7 @@ void D_SetupVote(void) else m = G_RandMap(G_TOLFlag(gametype), prevmap, false, 0, true, votebuffer); if (i < 3) - votebuffer[i] = m; + votebuffer[min(i, 2)] = m; // min() is a dumb workaround for gcc 4.4 array-bounds error WRITEUINT16(p, m); } diff --git a/src/dehacked.c b/src/dehacked.c index ccb258106..3aba7aef7 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -3234,9 +3234,9 @@ static void readwipes(MYFILE *f) else if (fastcmp(pword, "FINAL")) wipeoffset = wipe_specinter_final; } - else if (fastncmp(word, "VOTING_", 10)) + else if (fastncmp(word, "VOTING_", 7)) { - pword = word + 10; + pword = word + 7; if (fastcmp(pword, "TOBLACK")) wipeoffset = wipe_specinter_toblack; else if (fastcmp(pword, "FINAL")) @@ -6934,7 +6934,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_GARU1", "S_GARU2", "S_GARU3", - "S_TGARU", + "S_TGARU", "S_TGARU1", "S_TGARU2", "S_TGARU3", // Wind attack used by Roaming Shadows on Players. From f0715d7af3d766a9e627c5496fba8d4b64238e51 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Thu, 3 Jan 2019 12:26:25 -0500 Subject: [PATCH 37/86] Updated Kart icons to higher res --- srb2.png | Bin 3778 -> 262991 bytes src/sdl/Srb2SDL.ico | Bin 82992 -> 125191 bytes src/sdl/macosx/Srb2mac.icns | Bin 103434 -> 120190 bytes src/sdl12/Srb2SDL.ico | Bin 82992 -> 125191 bytes src/sdl12/macosx/Srb2mac.icns | Bin 79787 -> 120190 bytes src/win32/Srb2win.ico | Bin 82992 -> 125191 bytes src/win32ce/Srb2win.ico | Bin 82992 -> 125191 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/srb2.png b/srb2.png index 1bcccce229334a45b427f5230524814de10f52bf..fccde9c3fadfdbff655cec6e128125a269533798 100644 GIT binary patch literal 262991 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 literal 3778 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 FV1h@XzeNB5 literal 82992 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 literal 103434 zcmeFa2V4|M(>Of9=DbUioO2LFB`X;um{17G*xTi8e_@87=fVil|T?;=VCcg*E~>1UVc7@bywk3e}m@1cLbnvy7Ay9h4)t2m~ySKu}=hWvSq|bPS^q zf;u`*-ffs_`)_pXkI#K99J25k_09uy1+SaRSVl7MCiK7Ae-80Zsh zhZ~4PM+Kh*gMz^UK`R*&6N4n%1Owm^T!L|sxCAs2egxOxXMqDGApto6XoG@=zQIod zdq@HSEfIVI&#j*Y!uJS>F6f8B^>n}aWDB>S1KxiUYygPFBw+ORp#Ntd9A zG#osFS!Cixulk@xt*nq+>v=H z6dH|6Su2+y5U|0^R>8nA+7yvDC}4q?b%KwvvZLh9DQ3#% zTQe`ws5D9Rbbp`s?;fW?^1N4lZ!@iZJZAW~nM9u0$(m$3e*EZJsc}8s&p_A8`!BsD zwZkGcmF3)u4!7CJC@YULOJC95^9=4PfEwmn7|ig}b1`f6i!B#C5A9a(9*4004Mtn8n|HhJhfCdN3Kjx`^rYnWzOCyv|2n3u}klg(i?h;ddk0hfp)}~`l2s&Z8?jCse}N0Xb2qaXy>zphp@E*^>Codt zF98u7C{$daAD$+KGr4I&mZ2JySv(qg$rbdn=eqm5O&dSO+T7ysIvqQMy}Lp?*mnWg zQM~JHUJzc#$w6O>B!#lRWDKd^v;=e6oC)Dt`@37*jK|N-vNESz;+9`Jcs0tt8OWrt zA6o!*E+#9>ji<<}Q>iG62utM3c1Xa1g}hIX{qDGp=i;F0j+WLoX2vR;2Osrz4at8e zBxqixChKerECJB{@m22yT>>Eg6dtcTO3>Hx?CO~v>k9K%S90hAv2b1vm_J_gXQ<;% z@5eXXmS%SEhrTvCV3$b!MCvC}Kau*0RzK0|_y6AN7b$ec5wJ5Zyu`$z$!oH5;45p* zWZ?7ue2GEm1Hhw&oowI>4;=W`?@Kc=%yGe|@0Z}n&)p&Dh@c;M+(Z3=pFTL{M-*bv zRPfOk@InLvz6|VH4_#sqnFIUN!rsCW0RKJpi>D2mh(m7R?f2IJ!hnEF`367&$^s7l zx8C3eydU!9VFUm?`%3`vtqo}H_H~3}(5Nop`u}{v1Nh?HBcRx?;NhS|NabL^Ao=_I zR50FOuAlmYcw}gJAO`9i;?hs=zx5vw)D?kH2wXqBhoI9Sun}H^f{q(QL;e0<45D^^ z8$K8vh^vI5Rmzv~i9wY1ukXR@z99nsWB-BIo$%EvSoviF#2^y)d;gE=vQ!#;Nq!R% znEhYq|B>xOa|?bVpl|d6+%qsz!v556(~p2szVZj~=6we|fR3I95D5-}5cdDdKQOcK z?T?6ncz_xI%Ag_oKMUBTul@gQ{`&=4-{ngJ$`%HYLm^}5qb*aX?slj+wnN5FDH~mtqwwdV|!wEN1)gv1_1YFQillQ5G zx4|nc#yud+Ej4nE7lXf!er1ZA`=m)8b_JI_oo@9AT0x>gng`N)*R>%?SzBG*LIL2n zd#o3^I1R#yL7ElP(C&AFM$l{&uT9YT%GYp=!OEgV9(pEbhB@4bV$)pMd+rq{Z-SFc!cs=Ei=(rX>(SkN-!#l~aAUY)9DOeY>}cz} z54Ypyl)W&6FcP%c3nV4b5*R2yplIN}4g~O`DP@`~I(x1N!3o|nv!+h+aAm}}c(~7= zGHZYMEy0@=)(&)gtiwe2%ZV4>0ye|&x;tN5X_;$aZARlX&2&Z)@yY@5F;*(-3^k0Z z<`k3cwvOwdoea14%|j`&mWz(5s-}Y~jzA(4Bp@+tCJ}`}B=dQdpbd%F+1jzl#npQy zBYNd57f-qe!qdy$)iJ{X?dUY|^c&$s$Z+4iu2IHOh;jv4awIC5LZOl*jqSWLJkXx* z^B#5xH~^9qz;;_hnubG6@kXMs(o_tJRP-SGG3p`f4Y#!o9yd_QcV|Kt&!6tM$k{vC z-^tEqTHD)Bkbg)Mpa%sl_qk1V!ePH}WzR=SO_*Y4X6$F6qNc8*bLRECmW?1mm9nl@ z4@<@v2F`SoMH6s%9Bz9LNYOAcE!-9sm&b?GShBoJEZ%xMR}bf<$HH7aCr$BkpHlrg z^AUFgcy+3dyG+qU79%sANTlj0k;s_Y?2flR^tafax1F4hZa$L<1X-4Mjl(O{)1Kl; zvl>gZ9wRL&gK=af`^}*TVS{HC@k*A}f*eH-7*MOA^I7=x;3ZkfOJi30`1<+Hif`QR z#_+&;Ib^qHMuY4+Xh!6<3qG8OwMt=*gE^i7(IlXRWRLy z$$DKq)8Ef;=K8_1pv(PWLUKTgh{sm{yg>}7Wob&2gVf~c5Je2~-;0KGkHN1L`zT$L*+3DJ3H_iX>~OPLQ&#Y;Ee|f-zBf$6gP-ZDp1ON2h1g z{lj8r`q6#y{=VKmKDk{TY+ie70i0jqzi#Y0rUhY4yeI3*K@#G0F`PI;0t)DDZt7+N z3s2_}Ijn})50W(T@}52fB8g7MQ%FQ|Xf3z;ItRA!N&pDI?(yrkx~ALZTUVzf#4e9n z7F%+U_xctO(7gso0*~Fq7lI$w8zT+UhmUyRG8w@_IuX3N_T zeFFo6J{I#Wv!fGmU$nA`RyNVfCR*7KBB=LH8doF-Z10oCE%n0{)r^{w#R?y-x8{ zFWgmlkI~QV0kQ$XM)6;ZGoYUsWc%)Wg82s|AXB~ad#3s;264!m_iM>R*l7?{60Xbs zfrOzH{V#(V>Hu~*{hEvhSR{7BqyMuDq_>&hQuklRGqmIC&su}e1_ZBZzYItm^88QW zg{l8vSPByStUskzh;dNRYx^^NP!W0kgWUW&u1|u>pM^pUQhf8D+XDt&__@6}bnHJ5 zUjT{&zrYuVDu;?bzm8<+`A^zk{92G2Y5`_-s4OCU{FC;>g@5Vi@c;^+erLen!|xX? z-~S!LukC?mJ^5PD`buFj(1xM=Kl0~?`q9@WKmGm{{*U#fp@yLB_JgYZvHiFD)EBs* z@s~0hY%BT&7k`@HKaK~$2ldCV`tV2i$v;mQT&)^-)A{<#)!u*fZ{UO7dWV#VRLYl& zO8Bbh!r$VM6;SpcS@ONO_fx~K4}Xw1xIGT}{rbhii9wgX&kl^|lc4NRY}8lqfS6z8 z4Oq3Eag5ZVD}@pJi{1ZY`yb~E*oR;AT^zdbvwi`a^Qr&q)hB5EL;GLG^CPbS=YEAR z2HAjA`Pb?Esj;y3$NE-U93uHI?FldsozmDVE??3Se1kVfM z4Z{E7`qkg~EU1$CBP)OC{EI*1?4j{%^N8hebvDov?j(SALFpjR&7*V0T3Q&)%;t0^ zqeTLgTDYrtcR>mq;->Km`3&$rmvg=KpV9DVba$1UPr1@Lg7Ak1la5I#L`(B;+E|2qcPDaT?TBxI?s50_<1-vZYo-3Xet8QAi|; zNF)&%sB|O_g+k)o{p$fr&>GF>x3=;@%?VJ;0~wABL*r&}k(}m73PfT$9z&3llBD5r zczimMjz>`a!kb$eTs()vWHvQ5H@C2V=nG?~^UT|L53Wbdi;oNNpFKNdUUbxqX^xJ* z0kH`=ISH}e(*ox|XL0~`KCkZSn%s~%G4ZD_zxxP~gRW=3vQ2~C(pY!pYM#-rPVZ2S+FSNe9lfzk%7%-jcjLeEz(-!NDOR zp$n2Sp4Nj8c|s^=@OyUixr3I*it>s|rsHOK>*+bWj2X8wDJLt?$HvOa+S1|Bd3gLB zcH`3}VSb=~#_-4a`bRFWuHk?pJs8djP(6d`#22905&^qBrxwPJ)MHwa9crI-X8Iku}X4+CYH@z(@mA%H_8l*+CRXqZnu+5P!x@pUa(G%_27MWSW3U%(Uy0f5=&a=W;pGjND>Bwhj+ zx@1k^^hsnK8l8?LN?_gnUbb+#ZH;!OI8+`Ik3vv(9tDC2bK(e?7CiXP<-Xy}oleCQ z83Y^=Pg}fl!@8NCWE`D9BND)WBq{$0W*e8od0}NpCS(%R2v{Ocdh31`421!p0Ih*X zQ~#{AI4M3o0TY*W{6v0EYI0&m0x3TEz=^ikT(HYv->$6mM0x@vJ~IIwpR{R5M>i}Q zaBo;oxNO$LJ6ks-Wh9`JQV$(UONj^VWaE<$pN1!)rLlNj8a*)~F)2AEB{>lQMkKCU z&-^OhhakexOt3GXoZ?6&(!mJ9$jKA!)Rf6|A_JdB&?f7eH?;CtW$R^u#^4FE3bqp` z+DK9ec$h>2ktjJmq^T9==pis7JeU&pi3+=MI1~oMK%x*BYa1CFijEY+;TRYNplcXS zv-(yZb7K}k9Erpclr@}OTpbl;@z``EMgr?Fy?%%}2cYqwj>qMFY`4@S5UeIR*@M|b zqi{}6cr*%yz%P!T?BU|5tBJ(Tjc($%)|;qeQ3#x0cmtQ-jB0AC^>fD|($H88TI$k$ zHV-J}0WfD{0l>a?Q&kMsYJ!U+3A{z)9Ubv#JOM{t5;FvlB)KHHncr5gCy&DtBp1Z; z-Y}S`)~0Yj8Xn8QV6Z633wPK&4xsk{pm#Et+rzQY#URmGOt1(QBaM|tZO{Hd%CB$|ACW@uU1B=$SEo)D49E)1zX>RlC=+- z3Qq_uS*!`hWCEV3XXN2dqiE|I8>wi_30*W_jz$8eiy)n~zP66Td&hUN&@;|n$7Jo> z;pH}Y=ANT1&6#mVI@(%VI(8nXu5$SB%xAIBkpM=55?|4u{V^cCcjood>Mu)5pt78QWw^%Z{IJYOcOkvZc6q>$bgzd*1W7 zz&`E+J5Asrb6RR{7i0tRB+%2#_ntg`>GH*kmn*l>H$j^L%uU<49iUBfY02i2XLYQm zy=9v=GB)EjZYtZ`-16i>$>uHe&6tv1-Ctn>yTIYG?_aevq!5V&0-cB>Nrf)ixG8pt z44Irsk|GnN)7P>%H_yruak91b`6)6aGMPb=B$G+91;w@ZWN~B?*b$-705%rUc@<#F zF<|m8zmk>w=#Sd>%!~qO61}ppUdD0Rx9gRYg3rYYC2Cw`J*ZItK89;yN2%usT*cmg( zIG|z~2pSTYEq`V^jDsZoq9HO6kH|&R5X8jX2e%BB(MWO9wu3EvaAXi33j^L>Gp%LaB0FS#=P*&|B>GO%PN z2U_@Sz~^$fqz+W;!`qVw^YeD@TvM13pO6rrv};!qJwZM$VdIvaJ4<)0En;LndBx$i zvey-zIQP1JRYqcdf@I?A4J_{MYbo&wNt?E_01&|Iaxgd|m)Fy|zbrp*$IcCFQqqyWNxaW;rE~|c3US$=Zos|N>Q4%v(HMTswlNz4@%p3qG936(oWAcRt zj82lK+B>`?wFbTA|wTlA|O_H2C6_2LKhK1XXM@!HV6r=&u z9Pl#I&=eqSnd{k&j^l}=>Kbf}ai{_`4TX1^$!VsFV=xHXjaqnF1>=Ini`m*Z%|QqY ziM4Yw8|&bpr)y!eYzYlm&2%&wNzUEGZnPguQ)*&b8him|>)FN~g~ecyl2wm^WrIQC zgu2adPLIJ$q$3F^QsnaJr4wvs`;xJ!Oe6(t1v++x+Y~U}ZCZ2lY)>p8j)p)i)2 zf^kSyqZ^OE4G9QYD>FMz5)alEV7PG9=!BF6SLfgWGLD!|kR%dFlB#EKaGOJXW(G2u z^L>DrOPEv6B5#@z(w^XsT!DeK<0J}EvU0h?5?p36J3mywc~l|YS8ET))HN*4|5vFHE4sGg|mJE&wUAKASp8elbBh+uO4TTxtXCNx`ha!X}FIw0ac0>O+7kB#|IRr%N-y ztr#9Gm{gLy-qXe-yCkI!UEnk?52N9U1q3QkoXoEgXCSOv@AwHH{shgT>P z7_g?L18KsoSb-B~AR#mZBLzM}q9`g)8~1I+6OLTsG%uZllPE+|B=CuuJ2w+0B#7&F z2@Ojb*zv^!Aopz1QW`r}TLX<`pfyl9S63VgSQ(7v1P{*%);gM4v;?i5y_$iiHoxIF zXDlZo3(*u5-plXmMJf_SN?pz5gCm1w@aZQ2tbCKU^0;w&+C)4CLr1IOot(gmj>VI$ z?L0h$&@k9h02&=nYw6)L^OGn=FfbSI8&`e;W&zG0@>OW>ELFxh46v7|cSE;ZB`sh|-BND2b2px;nW76X))eW6rU2(R*p zrks?Fg>7(MaiE+NC4Mz=99V@3xIYuu`*_EjzaYSP#C)IQreY0uVA_lVxw+o90ZGUbEv1zW|uJ z)<#cTtkA{9hJro1v;5)pJVL^;QY(PNZ?BFe1GZ{gQ07jr}(40BogOGzK zTk2h$F5Pb7*1zC4Ee&-joJg>{0rktsAuu)iKeD>#_e!aD>3EY@SH1d(ho z+TFu)91(}Y+Dy>V#GtT*v6db{JabWE2t=BMI0A`WhhiXs!y5~v66{45b_de@>MjKY zXlM+EU^UU*6^*jCRaHb{COVj#;V~#wE{Mz4A?ZM}aMG)QBmqaM6l~Il@z&oTg(ZMM z8%wlxm_CIFPuc4V|E{{DPFk&_G>HjUuo;w^$XcW@vG9Xvu?zg5q*} zTWv=xXDH$oRAvSi6s4sE%v4b*R1{ZIQl+aEYhbm^Cf*uawM$|30v7Vp5lK`Q28+c? z?K!%4n-msXgh3;)E*_ISSH^FQ!^Ed#+xcAd0y|L$Uv z1Ud}`VkBTu(HSTVnk41z=QBG!YhxxpD}T+?hTb73yL4#T;k>w`M3I(6A~JwCVrlE) zibXI`bR+_$phzO7qp%X>vg38lot@0)Ele>EXDE|V3a>Qq%+wetD=Cn{dd|ROaKv$z zZq6heo{p2jgP>4NjYh>`ao`_X>iAV|+sBWs#eA`ESrM2+z`5&v`@AMDrl=?_HNcPV zuN4rpG9xX}&(q!7#&>o^#LVfoHa6DQHrBRwo-Cln04ukpp?Q51y15xF#2`@xGeS!^ zk?(t1FXLm@tj%D|4Gswo42oWnnLcOs)X9#{fx(L-eP-CDPej-`P33f@4W)FdzyQ>M z?d9A&XQ-y7r9XO6)Y3(Ux|TMTOCaTI1pqM8mDcvBxsLLxc6wyk`Dq7lx2H+O2q@WfN+Xw`t>G8|eFDTDn zFj-tKv-!n~hDMy?$U)Kilfl1->+uB-NVOcAOw1qI@7ip?FI@wxls1OMl3<~Gwt~3e*yetgf z$i&EiLWG@cq&Vf`-4+hL9;z#-r_|NAfa5JJR(*X_^OxZOIb!izj+B|{0*j2db6FZG zM@1r)HKtC%A`oa3vvI&;XCu+#*~Ke%xrQQzqNeTdOC=B~R<_m_Bs?(_q;v42ZalhsS(!>(O{I|JU^pAI zWu*clnpzuRI6_kkGJ1#hB!ieOIXRWFV^>9a5*)iFWasWGO-ag0z$LEU*xudSeeq;! z!m31SQapqAn#aC+J|*RJC0Kfg0yZVEE^>yT0N*EJd+EXb^i%*Pv7l(j_Qd!hC{5h= zZ!e!tjxR`{#L-*Ycy3iclInYW$|Ju1_(ZJ zL?T6NY%|kqB85;uq~Il&B(*gAxRIp3#I)Z5m;nC~&f#I4J!Z`GpNYeVFThIVBe4jS zj8;Rln-v!JE+z2uS1=nrY*56VM_Ry)0A>hncU!$W4V#H3U~nWSuQf#``VJFus8v97 z5t2{q76#xX3P8+HSd#dxMjCwd9F}jmFOXMo*IK6|i_Jpgk=TiDYu8whv$25tVlgP` zXZ0(>rHGh(Gzo*Du1I@)hl)T-)wK^rfp9R+YHf-N2APR8IH*UH<}N-|LCrvd#WfR& zM__HdIzI53>oW=BAfT5(n>jpsacBn#ft3X=E&RwBLSb7p4Y(Xec!<@%mzUiB|drg z!PZW0OV!2X#NBXmfC0t@v=5%u-upKSa<^<*m6w{5oScvlmw4z~-jKx((MVP`Y3Y8;RwNQ6qf(psP4K{ko)Q<>Wm7a# zUP;e5DA>i0ghgXbO{pX#@=N9ta36<2VkEcie|SR@g~|efE?U8$rK{}~MGQfRW&l`2 zBU6TB@0l)mU|V1luWb|+Wui}|nvKDtiIfSp_R z9W9B$l6@Djm~*`eXpHpb2SPym;Jg>?A{^0IMgeJ}pwL*dPk^6az$^^P)s;qq^Vt$u zufXQk7mrq@;6cPG1&h>E*2fMbMHJ>s5*E&xf`l9ZdGoxrF_i=)g-)R0$N_Uh=7t4J zQm0Rsh4b9m1OgFH^`85R&1%?MAPe$GRI;R#cT?Lt9&q}pU$espU;zc9%4T=)%C{xO zrvd3np|4tV_1cc@$B!l#Bq%0k=Iq-4?jyUgw3wcf!YJL>`nrvCY=2fdJ-hj9!Wz!G zf=UjL-`~3j07*~4$0cOtS6<$~@5E8qtSHgb))jNxxvV4m3JVH~j-Gw{zVStAaXN#Z z)7}GH@09Y>i+T`IB1cQjB7>wV4&~J(`^*|@0$&^u==c`#9I*Zc6VL!WLZA2pz zNf=oc$p54P07Czf+t(_C1mb{2pjGsDl}`u$Q#z6kJ^;lhjMV;f_00?xxv9STyaAX3 zpwGhIF#0s$s&dAqf$^NN zA~tThvn^Tz_6_k;OH)8i1U4CP1%V8FD=zEVG)Eblf`W!R2%ixo6mINTKn3sxY0`!U z=zOFMSQqgG0v?z#Bm#-0E=_p_4ralY>lgq*w11)KXWs2x~aUfSd}8f(lKI^)F8xD#%~6u43QO!)sS3 zCKeVZ#>Xe^*pZUBA%PH|w5`06{iX{ZwXl9f=P7Y{t>6UO*<-76i`IfpM>efz(ATd| zPE1JJRhk$-)M?M_cOO9ck$P!bOG=jpiGQC_i)udz`96*X- z0|7zA%C&wRDjLGIH+gPr)8Zfs7N(mjJ2N09*~3Xwl|r?$L?bqWnh;8+wNL1s!qu^K z&>S%H<od9>?k+X!c_(-Nl6-+s%M&!E>9yB5drxW+9d%_ zWDcjfsjiO2s(W$f_?8W+Ntv;^aoE_nWX7>GFYB2sP%no0e-!|S3!7AaYg=1)cRT;) z)rwtN8ChAGnT+(TG&(37rLS6Zc-f9qd0B+oeRttN8Kqj3f#smd#1aK1J zhHxodR1O!F!$swApwnPs5|zVYAB86>hl|SLqH?&X94;z{i^}1k1STqni^}1ma=54* z&J&fxMdff&IUJ;I0MCEW%Ib2i@7nQ?B<#16sTvQGhmBU5l za8Ws2R1O!N4i}vc7o83loeqb$iiu8#i%y4&PKS$5hl@^!i%y3NPY}Upu|=oDMW@3> zr^7|3!$qgVMW@3>r^7|3!$C=1bUIvgI$U%*Ty#2IbUIvgI$U%*Ty#2IbUIvgI$U%* zTy#48f9rJka^V-q*!}WF0zdri_5X{vV&D(G{F96D%l9vg6fFc!Z+Fk%UfsQ%pTA#X zM9_;7NLcxvU;h684_{31{dQ2$BabDGG!F>u-mad3AHK`yFK!2Vx_a3o$^-F#Nc&eV z2zl@yzUbh0rUOv_c@R+l&-f3%#bNOC2y$S!)WcjDNe&39|3|cc=l|e{ao~5T|Hgq4 zumr=WehB->aNu{T9~wh9>35|4$3DMD{TB`hx`;o*8vec5F!dhB`~CX&I`I3{!=nIS z&+;#=0IB<*Se)+^|9U6nz`xJ|Vi&;w^LNhtisCPxLDzp}1^$ife;wAK;P-U^%>JK# z3D8&AfBze1-tX$bzmxs1WBYvx_;<4Z9slp@0P$bS{`V35o&@|m+5e9HcO~H8>i+i; z0Dtf|Y{1Cz|92!{WTbzH2fzjldmZ}sy8oU3zas%7#eH}bzeE4XNdNEif25@Ux9J}t z>+^f~M^gHQ^FK^KaO9-__vjx<>HiW74a)+Kr1bxeA2_n~58nceEdJqpK_jXCzaxPo zOaE~BKeF0CeELUL`-hKzq`5y_{*SEo{}<9ff@>d4{jm8j!vEVb_Yl8-{W&}j@PA$Z zhB5zej^Xd~vj4xPzq=b=VE^*^pQ9h-7i47qwl48MiXV&p-^Gu^jWGV(2=9HW?oML$r_NZkyryAOBpl|5^Qgxc(QYt_>@<`uC$4&I}C4 zvj08ip%%mQzek$?5Hw8shnd^|doBzU|FCOoe>Z~R;Rm*71b2GDV;dg+->Gi?H3x=+ zAI`0fr1c#>{b2nW!PRHD`2W=1`{l#o+KA!u|F1j`_}y^4kN-aUe_{5YJpRw}|4$J9 z^3i`C{(rUW>KEd{<9{3d!}EatNbk>|01tT>-ao8=!}EZC#`b4V!{z_*R-iw__~U24 zvkP%J9?*}t{_I}3J`K}D99|6YXIQ^~Hhk`nH2;Uc|7;{R;CJXBNe%cN{3AC5!`FV; z0zlBnX~1vNKSFE3?`S_v|L}aE@7nh3-S22WjDMsw;P<#ca%%v<|C{mINZ7#Nm40{z zMn(gEm;XWu`26>k-CyPH$7eV<_WS2>M#2XEuJptF|MwjDUELqT4nhBR|Gkj8Q1rbBSeQ4B&N5RjN40Ftz`b90;e<3B+lBqjEzpNjwKrxJhs zvJA}DAqNlsmiFXP8*!?*yo+S-m%9Ow1n-^HHpTOB#9_R-j?|x*RHFI-5CAK z{m9xg6V;D~o9S-0uPmdTudGK)Jxbi&(YSPi(N2E<|1~fc6#gg#{yy_ai3Nk27m=P^ zb+AFNNRgANKyJiTB?i8@k|Y=VM1R5gf>o2ou1L5Ud#K3pM)K`PeOgv6rxt78Y=3rl zxq-rVjhd_SpKEyBJh|&fQ@WZFG=CpF_HJB3X_dYEw*Cf>(B9*gy&;3yO1Ef1TglUF zx1HM>7#hRu5<~eL`d-efpnaJCan#$xM!vN%JbG)Y;i`joRN7TyrmVxxD0uDNcI8 zZKQ-&=6`(a-+((Ta5*8O=)Yi&uJos%mwi;E%iX)FlYfhPy{y*0b&-YQK{hdNInk`F zz_Rw~U9LW1QFh|l-Ae+s4u{9?HJj&8o}Zd*Xu4o`?SS&^QPq8^>VZ$TEJ4Y88lH%e zQ(}ml@8vd6<49KHcAYyN`q1axc&FN>4|X5!oZWoH?m}9i3}?xvGa2RS`&;kHry6df zcJc4p?kdcY%6=pH`m$vZ#=vlb*xcE@=H)Z*%IPl9u~@k0G~r;EjVIA4k1a3eut4m@ zj6;{8nrja(TTf3}N!Of{dc(TxV|$#x^y1@(=9IsSS#(u-H0IVQg4 zm-J2Y@TP5gx9h?DJu-)OZp=jKNG-0-yY*?|fv1-?nc*lMJgN8=?){A&rbiFOSd?VGH;Hoz9~Wx3(>r~M$Dt&naKf9b+UWR( z(P3I?FNwWpZKMU6^~Y;VLL2)`4$@4;Je<<9r)re$y1j02ew|m~Icmh7jQ2ss3&Lhb z_FF_FL)pg9%4F8K?p+?(v!#ET#@fdZI-ERJ9`}AcD*yc4YquUKu#1X_Ce`ZmG!{QU zu;9klBzwasX_NWcyKmf5kEx8259Zu8y&Bk>xGx27+qn?8lc^K6%KcWx#0wE!yXY0` zKGcS7*~U2K|6<~W`d6s_gcUM(!zQ_0%qZmE{4{0X>bc8_bIk<7G=$sEaw92b`Q)H| zA1)i=JD-?c%5u4Ln7&&3cKu}c$n;PpIVb(flBJS|4A2?w+ov)Zd+$M$63P7wPWukKeED(yw_QW4z_~L!IjP$tAUAffl2Ui+6_l zggt0BTtXNVb zMplYh+tOkqpKi*@GHa;X-FAPS_15gkiu+RcrW&y}qh#y*6zrcZ-Bh^ct!;>Ks~^}khFeWFJoawJaovxx@O-8=<}@S=Vqou7M)4fN7Gzb z^cnb-IBM&OMNaGa3y&tv(?&;~e^PcT-ZSH~v%_eK&lH_1u`6;uM_2EwT#{qZzg)f} zn%G_@_N;;0SoK!Q`N;*#M#o2|_8OjhUe}bn|GBb@+40A>E0a}}nR17oDrw zxk}ju(LuL%Wn7P#m0s(ol?&~xM_G4VDJoC!aHO#)YrbuvmK&>(FahSLUv{ zJlpf*S@Nvc-Ztwl#M{^GL%%3(F>B1(*d8S=yRv-6taaSla6O%_+fSTHa_M`nRTG>Q zu7`-1iz&qEEqk$}_gMYC+KLp{j4{^-Y^g6yPF}oq3_&{Sd-;I)x!niGC1@Vqbl;78 z&@;9@EZd_lhWYSZT!zLcRC9P~0r}x9zT?WOlm}sYhsO(2Qs`|n9^RZNLt2QR-Ch=P z@#V}Ay47<8W&et|hvOb?E0oJCNWYNVKTDdlZ%@y0J^fAn@&V^GH@Tjvyf!UJ5p(LW z+_}KIFsk8>z;W(Jnjh?>&rIL1VzR}5+QW|5^Q;~$(sg+@Zn=hcdJUExw|ne1uS`3o zF}^3QI=8*PG!S}Jv5I^>_zJ_s=`FKr?oQM5sz*oWpi?fgZ!lA6lA({FEmG5%&|Irz+k*e{&E|;IW8X*6qe_msn7iEA@&~9RNuH_ z|Khf&!d|YP*S$0}PCZUNxI@~X@FqsTWbfr?@nug2ybt)_T_B@;q%~D$ z)q9toXGfwc-+A1H_!W;zT^3}!ChWIQZ*5+%6quX_42Ve7nonW3||6Y3_Eek{n! zEl#WcaC`ablD#W5_GKi!yoGbF5liyL?5uq{u)@mk-JvYP(e87L>gPTmT{U^H#id5G z8l!;eGz*k&+ezas=W91leZO7Oe07yToj?t1-yZ5T&x0Eln9sh}eVIhKbW8m0eOH|4 z=DrR4H*8^}Ca*fK#b0iGDKfZ{d`VW%*y`2QS*bJ5*9R!f@GHmHq%XNu?4@$(&W!}G zlgE#i){sx4$!R`#9H-+tiy^mR(+zSm_G7Tr*lU=}`c8D&LJX>f_ushAa! z@g5WTJnO7du?1!@G2`g2jt%WmFK(RN`X<}trh&EUvc31u$#q}w+26&v9dqQKH#=^s zK@F+1wqlI^1>g3FGvn*lKV~Bi$QqCRO0nML1KWOhB8voi9{?)dz0*^CV9tS$!%T9fE zduIN^RkN>@u11y}DJ1f1T+LBY14ncxma}y{Z|dK#_da|%s%LBJ-A3bzYkb9R(~cGe z&f*#EyKyAIX6t5Vr-F2Ak*}?prb>U0z=L@EIzo96K{jdU$;jrYpLZ5Lc_Bvh<8wP!KvT6X8HEXk{mMGta63~-jNmSx`J z?zrq!Ic+T3z)^1Rs^`a|wf9V3y)F7(Rza|wXT$pwYVK!bWDgH6TstPy#|%xFEIq-% z=gp(eBUu?^JAL*`_ZnKBG%w1UfG{+^k%LYD@Wh&Rc${y^sohT{-u2wf-kW<(@fuya z6#L*_JXe`XmzZcWZ$r4j-gHivRdD)T%x-cUzB(ms`Gf_s=bIncPkkHem6&@oFV!i} zzHMXFBAj=o(}TCIIK&5wh3gi#=ML_FsluH$VbY1a(-zzqxMCbpeLwJDMYSN_T24d9ZNr8fOU-$t(>BjQ?zo5R!-5%DOx#2E2n7X6vdpP zm{SyUiegSt%qfaF|Hop^Yp-`?rByTM)6=Pok7|D$Uw-xYRa#Kb^PmiAhTil2+}7G- z(1c6TOO8b!39*}$8^=G>(q`qa6+C(2$!A+06z}&?THJAZ+j0eH;)|{Wtp~$s&WkG| zEp_{M8)jTsC0>p1aNmtuc;N){p1`p&9bXrBz!>vFm-IQ=B_;R3%U)FImH8GloY)TI zqf+BCk6BH)n!Bofg~rp<2o?QQ+ts5nQrc-Afz8bg@)5pz`h29)NLwp9L|*Ad=2gmu3v1%iq(*U- zm5V+OD*CGqZkgl0qfjUGoW=2Nhi+dwdFZ6}x$F(x=4dE>K!f1(!E4jOs)5jxrw7(m zUkZ;RZjyeTSRhNH9n;a#`%LyJI;4} zGMa)kE-C2s46t8UOTRPFy4}`a(rkaO-$MVVHH>PUV@GxPvT3#1&0Noi50MsEWQg*J zsEm#sel7{K?BZ53*W^a~-+b1vg!dr0ukpsKzz-)hu~V_>=97w;N<~k`T)tqi%lb_B z%*gHf7gxSTn;v^QUN>!W-wYL-(|Lor`u!&4m^lf7Cqjyt-ce7Uo8P%j^VDEV*T0@L z`AE5f8(~b~`B%D+9nT(~wZ}&wO^=y(bLNBzI$OlevXi4vjZ0R%oV%%J+1?zjle%4m zYk4Q4=3Y-l>wj1<&?rNky*-m9U3oJx6Sqpy_~^>xeh=Q=pWAibgE;nnmONW`R07ZK zL|1r&uEVTd7v7fkO-FCM_~f0M%Q|s4{Z0HrcZu3M_M;8z0^CZ;+jQ^iDwL%34k zp6t{;AP z(E5|~&D)R1=)Rbj^914KGuM8#woCX!wx&rXdBZF$byv2Al)Zh?K62IO*DD*2dL$=E zPu_i1CM;Kex`yl4p0{!G)m}Tavle7ZX`gj_x5~D{cf+d_@VFL}1!*+05P{)GVgh8(Z5fXDOMDIkd-e@jitU^5`1FMza}lb3WFp(JoHDInE}> zpq)^Jrmd)rIN3YrT;!ATEo0ZcbJm^U@cLld@k=v1Zq&H~vpT>KJs)pqr(N$S0KWMUd?WTOO* z+izr`B2PWJ+TrCDy>8=%Et%c|GzzVp={7lr{#0MZJmVRpQvP~R)zb&3-kQp5Z}nQD z)m$o_bU)x_;2l-gsok2yDw)ZuO#^kGq%%lqjt2UnuOF=tsuw1nFviI*%zRRv}J2KfNut z!YLe`zm_oQdF|APYln-*mA-mke5P&`hj;Sk1BIONW#=quo63*(-%UIre~>o%@$%3N z=ZyZ)3-wFxY`lE3@gB9%(M3FXcF^66xXju>mm8ku)j@iOvJXcsQIqXYJgyp*cNQ&2 zH4NMBAMO+tLQKi(QM>k5ux!@JoYz*m9@XY=p@)=nlcm!4*^EgUr@eAEN&lkKxTyvw zb_6&}o)()#TIXkCpH~%oU#gLy{3aGE)HuE(caQ%~*B$kXwtw!`kI+xscq8?O)VPL~ zHy9^{Km82D!5W_is4wyWvvm)!q%$Lvk*8KHqbGt9*&hnpKYT z_u9AgFQw$M@^|FRJJNcM?~QBui#9f42j5&JVu=eAltv*h; z;u|0EW%C&8BB8PCqsDHtw0SiJc|mze-S+3FWeKV-4g%W8o*5k%qlkN#TTeqTysZ~; zK3QBtxqL-k&Y~4>XKdQI)hM>lAZ=qzWl7Pl&&$hq*lK;4Q7|sw^2r#}sS);W(c4{v zy&sObS2t| zTRHGzgO9Py)5iQOlk`fK%sXdc@`-ZIbLo+j!6uJyp*xmW?)Q@*EePXgyw6Cq@RD2h za_rzQXncOtyJ^FYyra@f=XIVXB$Tht3p{No(FTC*3dE(Yugg_i5Y7@Iwc7#hw?Xmi7X-X1;mf9C zoi(dXJ@$L-mggc+SdCh3iAk1ORnupjMjl0R9n9DVw|cP8XJNEqI@~V2QKqwbSM{5~wN4XFX%=?vm$OR*~zjm`b=|Sh1gJtw+S3{6P>^3YgXPzT3ymA` zF=FqQoHjR@DliI2Y6#Ep-J2Li8J_0Z{+N1!U-ku(cblC=y!CYxsxliCKH;E1J6v8F zbT}M>+kR^@`g{`C=P?mdlSs~9*E60f3QV`gW!HzBd(CWGoE218b!2=Q#}b-~$MK;Gjjc(B8H%aP$^S-Z%6e>&0h`nKU1 z*{y|q${yPP%%_3%CXZPj*f6d{K5L7HFXNHrUAtM3xlj(aRI(+o>b<(OOGsfFs0jOU zntzqhgYvH7_zigXgz;SIX*OeG@M|-Yj*n6GaH!KbQX0!^?hb(9cgrJ1dHkxWFG4ug zNVNX$8^;mLJRn+~LJbLcTl@Y&Uhr=mnaA=bn%g&m-rZUzho%=b zUFsds3f<2fTE@pZ8_2iz4`xR#HGcD~C>0DNQ!aKSoV8MR|4$(=+LSTbD{dqevc8(} z&T0bn1S=X02O~wY`T1rN^>bcp0A;q9U$x!eHqm@@ed=hWuYu>qlUwNLh2)TR&DLMf<+`+|zPB^8m4n(Mp>K zv@d27CgH=s9rP9BTtJw^=-)k+cV0E^N!l@OKFL8c_;zc8ribkFyIa;^tzpq?C9d1nE+r^}*FG)WJX zU3ct8!pLy9xy;7TF}5oOOHXKJ#0s*5^+*rJKj|5irac1FS|n~95LaM?Rim| zd|dsd`S=HZ%o9`{XuoviomUvHT%)B<@T zfcaEA4{~yZ0%z}j@$@;Rq7=#@vC!=K&xDKGnem3PhjgqL9r5fSPmM>l8 zGLTRrw~Hf)A{nES@IO!R}Nxgm7L?4uXeC`i#|&8F=`gg4kZ6X-ac3TO(}2=Mfo1BlK% zgLm?3@0s85U_YI4jqaYPv<@i3O)BaKT{OSlZrX#oVuNG(F zV)yB+7Wh?5Oo!7~AFsuuUdbBw92tGtXWNTa$8sX+Sez(Cg4TZ|iC4HEuTuzy4-akZ z6wh9RO_>L#nSB9{)hsX|n8|YaOVCHEfosN!%l)`bzY80`Cgs`Omwl zYdC{CIMo<<^$7=CEqU|+ang3hU0;d9f6Z(l`vk(Ye0zAsdpX%ccfK zR8R1)drD^H^ErVoI^eS)YZUPmsnmSHk7{{dR?AMcK-3!hgX$Pr5) zS2BYc<)Ya8TjOH|qtQ2>$b#Z^Ud{%8n~wGrfV%{34d2nq+`S|ltYc-Jq=2R{%~dn` zTy(6~s<({1wJQGbNJy4ukEg>?lpcx1`D~VQJU@r%ihBCiqh4p|=eb^kD_$48`YU#d zrQKs@4NfiIeILCVVk*YBr-c9^NZ=rwhCMoBr`5aVg=DDHgA8Yegr?v(-eyIy_$v|q z6F`F4$k^y_UEv@x5G(cjE6_(`e@|IY*Mg12Nnmh zk3GqlQCG-CeafT6jX1X86JoLjpyNP``pJt+05GYkMP7FNqg|I)b5dc5hU>(nxSh%r zKI$9UCdQk+$4-w>0DaaYCm6yQD2YXS#VR{Psop~oz_4avE!gu85>7*TOqrFrXE z%?24*kI4N{R?09UAjF-ywKq=ZNIZy0`ngDtf65=$QxlPMPvG!Me%6)O<&{=Ml8>0l%M+P%@WZLmauW0P z&0Dg?9GS(|;M&9}7tH=k{DqHudU`H*2_XwIS2(zOyD0G^7&ndczh65;&TMj&c>Y-N z9*j%yw$CSb`~mk&w9g1X$sg@Sa9(Z67ETpBKD-$M&;;qaD1u#SD@4i4 zu~V#ZcEkN&JcrN}z>&CyQSfX%9E>(Nmt+M{pZlIxBPo%L8sH}UH;XD;IW=+L-Pc4w zDsN) z8Q7kECan#?7krOsyA+~GXTms(#9+WTj$F`%Q^h>0(_SQQOLMMBOCA$hYX2QD`yHj* zqN(uQKY#A~*G54L1=+)Sxv{9v&A8nS8cW3#KET#Mt$1dA{s%wq4&V67J!(%EEGubH z0F6bDr*5G3#a4^JU#=#D+6WnY63_}flDv{%RC`UyIgLa-ZEa$A=Rmiuy)p2Q_ z#I)7Pkv5vH&Uwz^(TO|$ZE1*q7+G0e;r&e2^_l5P5ToP#cYQyHq7=K0eVfvU z2b*OWD^;BAP_&i6eg>M?v=G@7H@&VRc=|qTpiR0Unf-mfqvA`_F%Zh4V5KKw%)xHqL~gEXMmmA5$f&vzEm2BRx}> z{*$bR!1Zcj6|Z+t77c@5*lz`nrug*!>%!ra^f7x6{g;dQt5Dk?rGH-!lf&W*x0P@! zbz5U2el6)q0`{Un8#5G3iOe5Y zq;3d?%i{WN2zeU9)Y%8W*-6bf%6TgdRccccPJ;i(QSS1gxg3X^g9~eoa?Jg;+wVRmK(N!y!WKkqZ3#~tLd6kX$f zb4W_Rwsw{?@^-L!4xydOzpClHBC9jYszCAD*S`)=Gd#%$>J4%IEi$tA(97uyVg7E>7xgTpG>{{w`#zK^x~Sk zEFz#40nQ73C?N}hVVE!g(#ohe$3?6GN)#^mEH)7Or}jE=b|Q-d${th)4R@UVz^`~C zfZYw65hm*oYYbytO5Nil%Q}Lae>+|E3~?#BX6*9|;KGUO zfi*Sqe4PZH(?#1n@R?;7cF%d`9xF4=P!3HWfSN=p9_qfj`i0kP?KX=Hf||j72_C? zGPzfrzPvRF%q+0xCqxgY2BHjCF%RF>|yQt zy;O3Oqia1rDYb?QL{Sxr#MfE&mJ%fgs=YV-xs)kfw|f_j?6tEu+haP)V){t1Fvm_J zh;pGun7HN_(uJ@JL8#K!DGiqYt_0u?hBHM&@TJoQu`?V{YvGYsjN~h;%j5ryyeZFK zjJJapf?zzrh;c8H(OmzO}p)RyNAhkcrx6la_MV@n^&C6lJ)D!cvP0>S4Xxf0p% zci?y6TY?O}6e6-48UH^IeRQOhMqjb?`vaphwM#C(9n_m4-H)MZW zlrv!6CHP9{==nME-KX-i*XL{J+v53o#lJUV&&kSYxblOz#-m@e_p7e?Q&&1WIna<> zb4NP{GE%3J?Z5TLzh%VD{GOk8bqP)5I+^_yW@{4WSN+%@Q84F1u)IB;YeNU?)w24| z6BEnxr7fEQ#E*nZY~zxVt^e}XYrUQ&^2*E57_vmH;srFmuBDk_3$RK;Xvk?hSmB z71Qk!yRlWFOHU(RF#KnfE6zY# zfAvi$c(flATb)9gNi`L0^U|@aN4I2(JRV}A8m>J~FOTZ#S{xYEQpsdj<1gfH0_+e4NN#w&g7j~& zJQqUQmK{EcawpNFUP`OEZ-=3LOR6LPq3o{XQ+Azlun+~tDa_Yh`t+B}HHv!D;xWsF z`x~{dKi6-&=UPp=h*gkc!y8?d3EzI0E1$}jL2^E$Y{QT1uFHI|^BY-|JOYfDW(n!8 zLgKHfsrZEadtlH9G`wIXGylrRx2xiv7F2mnpUa1HJO%}yC&bbu4js*e!N3*Ls zYe|8DEjF0+1^8NSJfeNav0qtNr6z?6BW@XHNQb_?=adA=%aDGhb)=XDb${a@5#AcH zlE_$P_)R&lr$;i;y^_uX-p+@|1Luk4sA+4GGT+^&EeQQP?EZX|N-&6n)8=ygjSsB8 ztgRrlf}^^Z2{CNUwoyKBily6*rO6L15qO4=R+M!T`6J~jM$>}6m)`s4#LZvwvnYmV z9^pj3`EG^l%b*eJ0N#x1hREHyo_r*zL{5jmsX0+bf?Cxii9~7abkGtwEAP@=PmTa8PJvi7K( z$y$x3@V)(r)`B$nv)DR(#&);H8lW+ksRp_aRc(}}Uv^1cWR+znw3+*-y^oXq&~EH# zup0cB%@7*a<(;a?3y5Ow1Eg4oV280`boKn<##`7!Jy?e(p9In99ilC(AH|2I(^Hcj zN?xHQhm1CDDWIYbEB34)Kzbcl!z2+wJwRWp*r9Vk&`^=0F;h;u&ZuK3pnURi>cx%x zCwc*0e?_;<4QbYgqY8UcfZ#}+sXTyBy_Y%Qn;tMelI&rn7M4U@thhGr_ddQ$&X@tm zXf)OIq*WVBR_L!=PFl3uce@-aMcYY9u=C+DXI;;93o^z9y4~v2k#m)3%<*+g!g&_U z>99GvQ!s-rl)eS2b|b_NlVcNdHuG_!&PrAp^-gBt$;KqQY@B99ks$ApL@i_3ls@I* z*O({FiZyvcub&1g;h_qV+La^%^3~N+63ki~T(?xN!}?r81Wy&~)E;52!q}@l%av*8 z(L-{xB0S&H93S60$@xq%cpS&<@kR=3L{%|lt&mp47Sqa-S0XB|Ne6M_lf(5Z3v+BA z%=&Yg1DRVVLn27v6Y-gu9i`Icq{6hj;ld1JdMqcFQr^AJ-`)my)xiR1Btq1`2m?JS zZEZd~_sRSMnqU{oe;83hw%XL)Wahb$;4_FG zkZk8AL~0d_>2P25h{EhcAJe?lZ1b9TqtGidoFbF%^tTP`z1pV)8{mk!$wyUSuOR$f zlVHco`sojhK)2-N6*42&8?n^SdS2yOPZ+!Sh08?(i-=+yCZCgoEx9uj|A^$l;V$Z_ zPDd{%b&K{2N3h?QT_gG23Ibt~In^w_`9idKCeMy9m)$0#zlKu~)(U9+{<2H9))wyn zwBdR3IpG6v9DZlh`Fz#5WlG1|0WqKB$z^$+ z)aWJ43je76Kp2i^FwINuT2^+6SbfGnO5Hrl`S-;)A_#>t28+DC!DO0v=ESs1@d#U^vNrOC{X83V2^I5(d4jCTWN-D# zb?EU8Lt(BuDWVw0=Y%7%9?I$O7G<3eE452DuJDECei$+m zMmfIjHOtLk&h3(;jOg!fWyZJ9xP zWED+`-$Fdd8wCa)qDZ592NdpbFzO zoYFW)r)_3h{%MW9dQIc-9VIaDK^RA6O7ro=1SJZ*tb;boWPMWZmIpOX)9PD6U>5tiRx880%kE z?phUva7e-9fM$U90;dNo!h0UPCaXUjr3P z7LmGEwk7&v#K10Zk9%#FQYJ@ZxJ|%7#n8Nz-IOyNcO=XAGo$hF#a~2`CO=HY`)*Y9 z1oDM~8!y1O6d4jCE0l1`f(a-30+IF{>(DaHcfiJfLIhmY9Vep`CG-h% zIOBGVPu*d9CSJ}?38#Qu{|eWt4-HycO#|T1L3VOhtp0CoL|=! z@k`MB-d!B5>W*i}K>w{)={G?Ok47Zp5*fXlzVN4kleO3fvR#&D4*oU?gkntL1J~^+ z-gFH9PrnPk(n17tRuKsOI@UE8^tu?(M58QvB~A8Qkqy7FJG-D^qVxSd_1Ah|$6qz2 zdR88~N6UOei9#KZ{6E^YgTb;en)kNpJZK8*NsLrzDO!&Qe}A^ssAe9j^iwdp!dz~@ z%~Ge*SI6-d#4YCNt<$iNDNM|X@z&~N;lAm6D2c^Ll!=9z?cvTu%)pUTq25V${LxQ` zx^^?WQXl{Agm2Du8pf5;+#w}~I&BQfueF5eS1J1?GFe~vEk->Xi!{Vbas@#+w^*5 zaqFz4D+!W$OAZhD3iyc@2j6*lTu@o$8DURI&8TZv#lk5qz{l!GS*u3Ast;x6+Hafy zb+kTmt9?yZAA~n7r31k=>!7Q9;rRfM-iFpWXf*)_(yKY>m}wxmCTZO5k|HexHC-rV z-a=&WyNosU$=8RIBdLAS>7Bk|BRoQnV0BDVvb!fF3uw|tC>=1rmQS8Mh^L6^6~xBo zjx;)kJ!*`}Kfu$nRiQhu=pczOnVd3Dq6Qe(NE^9|EP_@ivWapZ2STs5UI4He4n*)WSKP(;rj6|}y`irvR&{FQly(wuBZmi6x->(6 zU7R*~W4&ifOnMRK!m8=~Y7ICuLTbivb~l0@g0g|iH^4U~(0S<*xcIpt#|sGk=C^)P zViTD#X_jn3{NN&_JpzqpT_O8lM&2g$Giq(9Su%eBSZ$aOMCE7t&p0b*{CQh(opcf4*{er5pIroUWOmNnZ z&yOu{V;c&ccT@>iU8ym}BDLQDvHh1Xj=#z3=|R|x{?hHu(46qjIHcltWF3PD+JVV1 z`;>YyZxsZtP3Yeog;clkl(Xsu1qxw*%uVPgmWQ0pw$%E4jhTE&cV=iYij)GLM$;9{mD02kMJ3+*wM@aQvjD|5)!~PfZHs@9@i8ea;gjnHj`aI|X z6?%Q)1lIlpwSCUE*j%Qgm^0c*h7nj7w-%f3U?j09KXBtc^z2ceA<;hD$0jg&Sf9sX zj55}F`3HOU$%?P|Q%@-H%{6=i2F+NsI2A`GItxTPp!8sfHhg{5;SOjjv7_I{Q*|N{ zg#IZ++)}JNlZHYi3%7XZj_9yo!GSx(tw(#C?74~S+gSddIK|jm2j#R{U@v=X9d=+T z4iL4!5sSJOXJf*aw@}DITz*06Hh0|DcpgdsnQNl##0j!f=YPz$ZOQ ze4EL~#YxJN`z=;8&>x;F2H!ZExX~RH9u8_*UaTM!kzc!AJfCyhosWG(Az`4-JGxqF z&+ZAej@Db9+r-kV9kx4p=OCcye@nDte4Ge-9K2%TV4CBF@r_S_S~6S){Xw7^qja)5 z`}7|E{_n$gPyN$;g@@&b&rN>q=UPI+5R$)wAEDzC1cCY%^!g7)=$rg2qhZc|TFxbL zN)@STrm-hV2+JX?#e{)s`7F3%b{Opb940plmXhUF>^h!AZggnI9rP9Iz}BY(=rFjo zPpcnvRjw-p)rJf`tt$yb3v%PJ-M)h40bb~Bvh0JqVj1Zgz5*k1GgK9+8HYR$e~nCh zco_nRID~ujZn%EyosPA&!XvWMsjjMmR0i1@wp+vlAo{xDgawmHbI-{(3Um1FWLe&2 z38LM1ri;3d#h?2*`RGyxi!x1YuuU}Gi#sus2D_>$jt7beFSaj<4w_9(Ggc1VLjlQ* z^=pr{8F(BhcCDcQh-%`){H+IDgCsJKPDi^;h#Oaiag@G|;hJ9u)D{e@8@u9?mC~wX z3*kb0e)2~96OF9|RJZu}Fp5+;qOCIcY;u9-8|10o5k$SLG;@WQ)=~LLxMVc)_2yA1 zH%D-KuI#PHl}TkE8_yG<M$jv!V z%x0jo0(s5YO;xlA0;@MN7FT^Ql!8wSACN3O_buPwQ*6E$S04WK)CjO0{B=0NbqnFQci1l{grBEd)mpW%v=HLRVyh&ljd@ ziL5~dAX8zSl@uP^AuCc_xwMTd&H|pZZ~(6k11=@Fex&YnPv{Vy;x((O1u3D55*F|%K6cL0NgGig z`rBZXB~{OfRfOYfyXLiLbJWt!>WmsCTn26KR2)5o+#dcw>#8`sl#L)Q{_7z6l9UGG z3k1FhBdJk;f|u6XuNBou!g*NrC}~+nhgAdR=@uV<7UtogkEfD^Pi%uUGjNGF#nGHj zknm|FNtbuQ_IbW^3(#naHJzoiC=?5Sb&#=yv*d#LfF!X4Y4er1qgU^~mMZO&e!Xi> z4{G)?`4SUNN_SfR|7~0^ObJb57eI2ltJ5WqazzTgtI9Rfer6EN2`kMqh(oV6 zcC$_wm(l0J`qoPF_}3c%{1B;ei|3@3nAKWfJKjqn7OP%Ijo2o z?(e?uFZluNwhm@XM|H!JzZ$2m^|7oMX<>fRa@0)*DMPw z9(T903Rc~<*2ZP88d*p6qyc(OW!aJG8VjMz>TT{vKWBl37%8KUJ4PN~gzsPRLJflO z!h8@@Q}G4!c$OzI;fXe^k=C6^0v)m>)pHAi_W-3>z_Q&}bol_eU-e>$1fdT;*li3Z z24|_b#N%E&MtD}x2~&u$AeZPwiV=P4Ef4P)_^7fk3XzEu>pxWIs%E~iBnR>k_}b^Db7QEDqU9hr)DT z(C{B4H|$mE4M<8hfe2C*Gu$C24Rcdv)@7*12C(01 zHFMfvYL~xYac^Xy%I?{>X6R&K>O?@oB8Ar75Nq|bJfs8G@P3&dvW5oU5MAwE>>+T&=wk^qJ(ny+v*wh|trP_WswkDCXUCi0WKRjW~ ztuvICVj;3-68*)!_wUFI`mWlll~i>M4DkEt)xj#`G@(T7!R?^xf}lf(wq#)d;(?l} zhUDpf_BMcaJ8!h|K2GQ%vzflqIu9qSxb=-~WaDP^n_xX0t*mg-cJP%+E@*hP&*>zE zQGgN8f_jk!;NUwNRbq5OXZxRY9D^%0gwvK`b?GxlM@pHM9Pn{I~mVWV(+X{6_#p<(qYES!;C_Va~-T1;Z3?q}!+D4=kPV7}?cxBU7tC zWBJ*lMFSJ!UYlO?+3k&DkRj#5nsrn<%RB=5=+qqDz>0yGwfXr0qKSkaMyF}lE18ki ze+K6}(9gbUy>3>+iMAPUA*xR(#8p=2k3|Sz3~7H%q|Rl+yX6s?QP?PQfjS>F8=XS(dG{6SE&0Sl@3kQlJXRb@!Jst_+_F81*`Q9i;(6x zgQLABV^iIMjTQ|_^$N_7u@5ExO!gXW6 zsnJ$N$6JR&X0$tu-9a4v5MkoWgQeBtvRtw0!$5|&;Wy5;OOb=DI?z(^<~j5$Cs+X`a3V_D_(tcD!y}Z z2Ubc&_IhekTq@?$d2L3^zwVbw9-aF9R%HpRlT^Cx=#&12*;GH2ZWZ;O(fu|xOvofO z^;_e4xiX+F6IW*!5FSe^?DemklP}?c7?QxBOeNIuJ$AB!-44JBBjl68Os>gC7~+>! z&@X%URRYvGwxxE<--VO>#UlO=OsDD?j&5I|&d@cHd3QF+?Cw=lq!UTNrs_K3=6jPO zjVmbfHqiQK&@3SU%C?h~NWx#lVU6@oI&Hhw1YkLN3`qU^zF(Qq+R~HIW4{=LyeG~2 z*1kq-ZQD6=OYOk9kj8AtXHM}*mjaR5(ro|jpIS_*b)uH^SNhynZ5BPe#3_Mm&i+S) zwO7+~qTEO*uHa{MK;V}(*m6}Fs|njH39mP}6|-a!e=h^x7ovB`Tsl_dIE#v5FdsVj z8l7+iQeb#SD>+x?t_2I&d+xBzswf<_=o-}lZ}!Iv5x^BmDhCgKE79AQ47_DYzX=fI z1(C2dq~NOqog__2`PKoY&q1vwK@m>4J38s}x!3Rh+aXk2X1yh?ak8<#V|Q!jRMA*` z{C#gK_bIn#FcwXyyt;8RU>5|*gB}|B46`Z)U5YUuN1c!deJR>OLE8hQR4w-cp54>u z{hKIf3&iQJZ=dO3{DE*B+1P0(6COvUVH}h?V_-ZKeYx!CpgMPPQ!;BV83udF=#*Ek zwcJ{BEku{L z^WkMkS#83XHpM>P@--4|ac8pVi2}?bms~ruu`$Mif_aG00p79ZdMM$-!)jNhu*qVp z!0v9WTs0_lDzg=pm>vxxPAW&++hUPy2GM2aRtgy;i&x%Pa5sK3ZATnZ*$KL$rtfEs ztxI74B2?UyY$l-0CWZwl9V&09Dzx5= zcZ@}NmQc)ELmDFtT`}<}gnAZ>Tb{@bkr~lSwk5)J-{x?J4fk5dBl&(PO3Y4xu=?avtK1(vSB z(iK>`0!vq5>H7aq>3Vi&@dXz+`16(Q>`vR0d(|0NpRB03B zxA@4}Kwpf=5pecHQCs8!H0WsF+l9#?IXxofVCAPX(5?z>{h^0ahh@i|OtyYG^tdwy zfDsND6-lQvr3b2M=< z@Kf6|YTk2Lfr0n`JK9T!Vpw)qF@@FYhGppdCR&z-Ql}~lpE9)UH5L=4L~CT%6ikp`n(IxsxHyjI2I-5TDztZ^snPALzq6MdK#@Y-to~YOQ9Psck zy30zHxd5}O;p&O3?xcaudigRE6!+fL!nX$ zzxd5_8{tcv7Q{^Saa#4cCC~E#RK}e1Dl#1ACPkL2GqVzyHC;#7*@<8Fg+Vs|-uO^a zRY%$V&_&-?3U?v6uX0T?Q*$rC0pI>TTxHaJ!oR8V{_j9&QM*|0|2wnIfBuj(Mh|Bp zkXo87l1nL0JiPpF{1=<%0A5r(CyF`tDGY)@l>b2f^daa@{2kaKU9Fj$CPOl#i}(X? zDJe*w7CgSK^Y9Lym0#+mP%pFItUth!tjAkLS){Y*GHOVaRioo?+*PrqcsieD5dT8M zps)$i41OQW);j5Ws}dv#OA-dzfj*SbeO3@@nE#}8QpQ~t2?`YIBW;MNQ3z>J5KCf_ zJQ`X$FEky<=`pr!R)3<4OLC--Yk2)0*V6V{DiZH=5}Bx|PyDH}Qcg zR+Rn06CF~awM??*oQoyRxHHxd1dx>qjuJonuG+s#v9t!sq!>eaJUuU_3!x^!tv;lhP21q&9m{OO6~lEZMVXw`9$l)sjAaddqw7y=TdgA%mr8(V~{Gzy8`NFRD6KW8TeySk4Vw z;Lg}Te*D<-@Zm$tqeqV{M~)n^%$_~l;_dBi>CmBrrEJ-@3+sE!mMxa;+qYY`ZQEwqv15lNARxf9bLURuop1jB{+2)g{L@HFDDM(dhW=fD zC%<^oh^G$f=(bEXkcW91wb>={e;?3_7s+5|`7-M@c- z%lh@}EpzA2wPeYX#io3!S+ATfL4pL9j2Sapx_0eqiG((AHg*3${R-@XuQkW`b?@HY zpto#=%~xN2Wzc2NdL>GfurzDd%-H{J%^z3kQl&~|sa30%F$b*717}swf8HsWM+*BV zPo7vRRH$G{m@uJDYx1LyKC=Au(@zEs*t2I(%cq}yYUFcra`_v-vakx!-iR|U%zgdHf@?Eb?VfX)~#Dxgg$_u zb9Z;QfS02y?{$4YbLNb-uF{_Wth2V?vrg{by=xggdbCwofeYB%;mP5>ptBAhJZPCd zeYz!6rc9P}>C#y`cI;?Lks?Jz{bvKU&(gYiIf5i!Y3C@b1Fn>->LApQQ{!$qW6@Ga+&V+A8k$ z?c4IGhu;6CIiNcJ(w+~@@w;~IGI+eLTen*F@856ije+GM1?dGn@$(`YktDr@dP2LG3aVD;+Nmd>3!TO1r54BmXB`E12`tNP!1r~2(}?t5rxsD(XR zb>5)Sk|s@Rz?yekJ$xSW{HW4Hi?ct#n@5%Ib$)|B`QU>O44F0fPIs!_x8CXf<(YjR z-HPgXtUdY|=ze&C=*r2QIkN>k5nVc4zr$0Aw>1yx=(82)t-igrPWAVtwU2B@bvV|Z z^#py@v}seD%YZikS0qlH*ycQX8^I&&C5nc9353uolx>U5V!?t1FXex0fzJS%9JD@r zx<0lsd1jv&GGvGadT{L6v9T^ECUwG3KwC!VNP|ows(FCi!iw`&?Ro2*>gP*qKO`h1 z)-oCJC-fqEzh1q18FafEwAVTZzWnmb$mDod!1z3B(xgd|wkc)Glm>rb&ivK^AHbL# zYajdxpC`Ps=;%eiZVvfQ+Qy9=8#tdewr<@zOXbRyEvHYPHe>|Q*pg59aXqxguj}8* ziya8E17roj99iP6Tel4UQD`=F3)mMRo1jeUZQHi3WzL*Ark+|X6DCYB@YKM811(-& zUWQ(3z<>dU9#hIQW%7QT=78$kOKTt4|MSm3249Z;++Xq4=+@z_33Wc4IEhE64<8>K z9Bi!pz`#HQA0uCduVPM+pYkLhp_C`_@-CsI;XCc24CD{z&Yd%X<~hxZJOQ2m#*G^d zPrZv5FE(_|$S$!t(A|m^D-8Mc@ZrNP{rdGYJad8it<8bA4F3917=1=Ji+&8$V2g*w zW(r@Z$e5-5BS((3v~SC>l= zp##+8WBZKG2nVf_J9q8~{I0`T;4Y#5jlK~7%{Sjfi~_c*;1zS5pe4;XK&6TIE~4Y% z575=BQ!ja72S3an4{WDQnPTYd_5D)vF@BNlA?OUq|EjuP=nHWZCr&ixAF$NnD=?2N zBrS6Qymj{MSt-tP{`~ou)&REUR-AWyo&c&pFW`RYsd@9}MZg|CKD-lqx#(uF)oj_a z=wT&jsM` z=H~VS4GBH@@y8!Wj00_8j<5%qaDcb^7H^#y{?O9&4;&3ngsLssu%EZ$qYo0zx-ROMjH*^4N06qYD0&)iO5>hwvU=#eABk|T51E>8% ze~(=k{I%H36T$|);J^W+E-7Ei*3(lq z9@#zRn;mn2b|R}HBrWAz^VEY!_rGDo1|!5K0hxskTb?OT+Cd(io`&~$3w+gZ+Aj{A z2hUG*Y`v$ar?GCZ=eD&BbgfB}B(W(yuz=P(dGe$*+X&GyfXBrP4G>kxK0ta&1ATMt z+O>#sv2iO@sL%`T0tetsbHH2mHQqVZjpv;S?@y;ronGjx>QIc{!KF8D+^`HDJlI$_ z=KV9Ks4Ip+LF)72Aw5(Bq544KFjl2SP38RBK>2yzeXhir(ap(Zd?E?Rp z;7^)(=TskGfPZY(E8~|xe|}>hg+@f*him{_F!XA+;&nB6FO9RcIAA0W{u5q9=0H^N zj_#Yx1JXg~qcgxk1De}0Zrr%H1^zOW#<^IL-I@Cv)jPB{wjJ<;$oBg7?Q5(lczgB% z&iO=@Kc?T1HHvH4u;B|le{?X8?mKgUG|7@Bv-tSM0-@^Qu*`)$Ti4Tf<>AAUgIiF;KKpDs>h49vBt_ij+9$v6{6<>9+22VDYsUT8hsrAwC#J^(o)d^}|#r{GQjXf_FXw&vN_ ziI;Tp4*!DuS9k37$d}-aNKa^X@eTf}{V(kO^bvhId^0>2JT$zsgu+jg2D!`MfB$Xp z?vkDm{uzBce6sM}#0M)KE9ZYCUP4JD{B>mS=NgTbp#82yB<=ACf|_X@6uKPHXYb9NWH*c>nK=mUTM{ddFW zLSQD}Yz?`~M;vQ1Po6x64iY;<@ytV>32pW0F-a>S`v^|pOGy8i$LP8U+0%5V`Vg<2 z-gf$@8gKAYj059}ZiY1m4G$krpGgy$2fs!~>oazg$9@kVA6Z$E#UoRAQ=H5VX^(1i zymHcRLc!adxxr2o-5fSNF*$<+ov#KUT93^Y<%46PqxCbu(d9=k`KG#f1$+itbDYaD z+i67y3;jE`Lg-KQxTv1lZ@~qe2a`P~s`T*V(D`q&Q|*seP9IC?Zfsw%>wu5K!_$dw zRQNRcMhH(PJREv>c*lwrE51~Q&fDqvrA*4f^DcEty~M*aqL+BXopZbbzG|#_JmJaU z!|=lE2|p&GIUb&iyT0z+xnt*rhrd^$4Vn3Q2l+EJrM8T^_p*d^r0BcP~S~ zBlj0N9{XT$0(zjB;*_Y`5Ds?=Ms#!@-Rp=EBMiG+?%pOn=VCZR zt*>`@J7n?P@f2HGpWYVck?z#DckUHNKp#u=zSw*MD^;Xb51ofSKle6b1B_fqWZ~F( zu>YHJ2zRohGeI9n+Q`a|E}p#TU3B*fU4NIA0k`7N>%nisdy9uB$Hsy)vnyAwG+>F0 zKzMdS?grtUHS!~Ped21?tZC@eu+v7bgbgit1Dt@K&6*eet9+Ap&iClFA5DJ;#8(>u zE8sVx(52$Jj~TmYbiC-?(1#)e5dK``0r2OX?GDoJb>|!B2Z0}Ya^Vrs0i#!8Eu&+V z@1)_`nrALRTZ$e|+711$o}FK96#l!pWgI1B54dpQg0WY#4{%pUixw@6^&Fkf7MmYn zr$#eM&mK-%&i|q(f`4Ssh;DBn9cQnRF-78#WqAL0p&9d@>*L6oH}sy|zX@)~-aR^) z=&(jF3NNU~MfD6k*(c!Xixeqh6MYDdVUC*j0lgn@z_YXJcf4@=SaAopYILkUdpvf& z*iF1jIZ@@s2JG_X%WpdT>3_U%I{e|~Rik6&u@m6#1aJs?n%I_OOFrxmupNNrz;Q3t zo95yL@EL5)aR$?t@i(V|ub(w*mO&pP_vh{h^t$GBZ_7J<1IJ;vf{iSD5qb~ZslLVw zr?;82l*nsT!(-&RpA)`N zb^C01fAPZC^A4YnOaPt`9sxZrvS7Y}1JETRKOm3fC*)nc9v|Jao`+|2Oj4eN#MA!Q z8A>}CBig`kRxMn(P#ekk34ibyyuR@F@c6>#6YBbUFMEjSe24>sW7e6inz_ZQj^yvXl7zz@V`PqC#9Z%P{MB-!(H7a!pd&bDPt(f2?r zGFNmPaO8R1=Obk>FR&d(CxCsY#J_DJ@)GtR-Kjpt3#YdkJ9gFRNIh$s-}FO%kE~zU z^N|nTAN!%X3~cq$|3C|vzr79b=)19V(Vgm7yl{G((cP#<7qk%(`N0d9B4!p0)V@&p3T8sdmH*r?;8;i%g#L`{?Sy<($btUt`Ag zs&g-mKl<6|e$xfGQ69ccn>L1CkTW2*%8SqwMCHIi^a1=tnS|6SA|xls z;%SSFLwvPMFpnkrTXb^p(7<23@Y}-sN(kK}{5I$R*&jHA&3C>@exC8fOL}+(&Xhwx z$+MjCW}Lw#>>J<=^uOqekxxYB&<~=dKOhs#U8Z%401?W8jie-r#KZ6bu0(VdEm7fx?8&z#Ly z4Uds$uLcidFU0vAY`!_u8`E;k>5(nrl#N$JS>UCp9Op=Zp$o019&229Kavk zWNxqCF7+*5IK9n0$MkpC;p4dTi{Amo))Tuv^gieVu?bLv5Nof)8aPlEYdb0j&#J>- z)_81SFXc!G{Lya#fBjx;>7(ARcmaGGZgSWF@q10ur>H{KC$d27z`>314d?^dKcK;8 z&Yby5=RS}Zh=V2-J%Yqp3$aI+{a=TDWOP7u@dA6&q4VHg92|FC=wpLyOn2&Ayl{G( zc}ACoJq`31XSksUbPw+aABS8YdLDWhxe)Q(4a4{d@5k?cb1n>-AbW()GYT&#A^E9? zvfv5XM`WyN*VU_6jdKUcA)zrMbH2X5M*Ap>a`3`$Qdev|?S`h|x5e0taLjLbRr-bQ zhx_Mr7cYRX8mYILXK!=6ly@8~i2p3k--eJLqt!UwBE%lyWIMCSLNRD8aDdiOvwk&gq{$-oi(X{lQh;s zcx`<=d4~5REoEAB%nQ;8&Zf=c^*H@mzMDhR=;^@!`dz^0JCNWDbf?-GFPz?Hc?OTG z#z*+Vg$o<}4ZJmT!+a0Aq~*7~u*-xNkT^nQz04QJh&v)FFFF|kdIs~D0wc;JwC0#I zoI%uKDR7K!NLjQM9TxW>;dFjP`biqysrY!|RGYo^cJs`=4V>j;?}QHEjz8}ILf*|f zP#v@Cp^wn@NA`PR&~wO^&?iANB5PtDMKu@nwn2YO-PZO1@R6+9*uq=Sr_Uq$4b6vR zFOYWVq25*%A1|D0^GooD2ZZb zyWURPs>>W`k1k)}J7Z*SXMBb~?u7gyuYyhex-K4iblKRJW1mJNKDm zJFPp_#(3jYyI-OK;nP$HZ1#)+ww>^30wZXA<`8_mSyp6g*=D*5J)`8sHbWftSOPDB zsqEh|2_>)01@h`TXXF@Czl6{j=mmABzQr4-+Wivzp|4d3Z1T`u(BEP=fIbje8TpYV zAj?Nj6q`AKK2LYhgwig`7Kg5ac;FeY%9v;uc22i%3M0tb#49h9_zkbar%(o}rB zajI)C@Bs7`n5hm#>sjOAd7U@s_kmgSk{`Yexe#ZiY}rpFAEB-Trd|5oq`Dj!xun4C zRp8G&kU79Ja~j-+gU6r_y?s1`^Wy9IAJu-t86DLA!Rs;(>SLrHIWKgV*=B@wiJhc5 zFX_+^>1)`W#@f41Tfr0PX_$LBk^cz%WIe|w6!?SJnSa9fBcsymmSTS@W!HN7hOBNJ2(?N666DT;l-h);NiJ5fIR_xE_cD9cY?16KVbJw zdF&aiZQb#E+@yi;h6fi1zlx5Y`j7)qCww~Xl+YUg&o|nI=R15q`FWPQnd|URY{^HTm=C;@ z&b0o$;~V^GuRf0Q%x|?}Zv!0+P9&Kv9y?5EKr=qKC9j?axvCBaX&38~wMSZXmEzzD z*`sKy?Bh{|I=+`@LU2Dc3=WzFTQ?;P!xK1;}XI>tqHCPp54AovmeZcOu9OAqg$JLpG!ZXtIR2Mqz7g=UQk z=JHL)5zKe)vcmyecwB33k~pbX3!T-sc;{66|2K$QXOO|D&cw(wX4vfV+lkP3k*yzF z%hh>(X&S%7DEZ+Ds0)WYn0JAxz&NT<(ozq0OyXGkQirt=I@at|x_Il%ec>HmPjx6p z9@-z9KkonGzG(13boa+bR|mYm?wU7m{z9AB_r+cWeH`nUc_(lO#_}wo#1WDfc@Oj; zjqv$EfP_gw_9O?m9y@ZJ*gtiQv@!xx(AZ1!gG z3~7be7kLfv;5)K=WEa$f+<|A(<7q4J+3b)>B8!#s z$xm6(?z)4n!>)n709ay&&RHjM;2~@6H@AnguGmE5%=km4eJh;m+KYpyB7)VP2#usV z_<~2@hwT?IFn^PG#@!lxp#_->$W}SK#rad_hYm|AgHX!3lc)sGgxaaHg`oRi3xT>Ek2My8R7u0oEjRw%C5C&RZQrbf>KM$i4$BenSqO z4`;aG6(&rWV4NlA_aXH8!2JSdhb}R)ve|psw<2@%=g*Jv{gk?0x>l~UYQtOORKH%r z0rZvegtxPmA5;Tk{3akeLDoC(ui~L0%#PoL(B*;V^5OB=_q%oLX3!qc6WnPB?aw!J z`l#Na0jxQd=dE+r`pI3_tQmbxs*XoHhV0$gioNO_053dv@ZhDUv3Foc5R-PrB(3yO zw@KF;;r-SDpAJWY1F-SutOs;9G(7aO=*{(K=yCLPLQiu~8nim}7vDtB&N>tx9{P+j zB~H>1vPUD|<+sR8d#?cs?w`=xBW)tDw1IM|Ll60mCr+NF-GuNkocR|Sq`B_55%$t2 zZH`Ag(tl*T{N_74H}m-b(Ua@CcI1fI1)$HzmVj@P587PPl2?Bh`vF4YPn|ktz}^f4 zX&m)%7lD+ghkCiho4wv{>Z2^uAiv}tXQf_m8LPK3R9&`82Vk24UBy~b{kF-&`(qb^ zjRkZZdO}WpLcT2ec>^fgKX`NOfF%8^hU^j4g$=Vcr^wn>Ea^P@BNcH!tsE&D*vr_s?W~SZ#_h2k|j$P zo5z~FUOCgjcp}rmzLPzHyMB-(#PqBXGKI+G!|f!WC(@YVxf>!2C~ ztNQ@FKvegF>*EXD(aFIBz~>`R5_=2wSM){jmBi`!B74RLATr(_7;%pc@}i0_y{Ve!g4MwD%`#fjQo^9~kj4N{ndVskAPY<1qUV!=J z>FH_E>&TTN9{HFk~b=K-2tH>Z_lM78J zI#c1{pbv>dcF5UD_$xU(&D|gHY&y>epM_ok{sNEA7`+l69j!bQGGDlt1A0F?hx`c~ zgI$`~?m~ZH_lt-2=bR^Y2JA`fZ8$URiPMJTKliA*ZXC99ojQIiNwI9l3YHR>%F6=!f7(IE%tuv%xu=hT=c_ zs>UkPIRMUtre}|4AC2lxC}0ka&7Kh1UQZgnLC-U%kn;j><__~q=zMfYk?{jI!1kpi zg8To=`+ZasJgPasUW&b+t@;&cJ>2a6`(Rpl-#SZi(fW{)?9qgl;0SX||-~rC{ zfuo~Z+X7S8GW;LwTH<08a?U)CoVTj~or`7!qM8H10eLTXNTT15il<`@0dQqh3R+RP9sW-of1pTw@Z&7)CS3Z{p{7aE}R) zZAcpr<^l86*@mvXOY#aM@CMBT;O+eiU3r)F6-OX^F1+sj!GQBSSid5$-erHIMnKJH zYc9;-z$3mqRBis>ok-6$720nT@LA8W*?9Mg$ZovaWtaD7&)*{oe4gDd;s-cxJ^!9a z(w}|)9#P@u=kIp%-8=lg#hC-k|X2MD#e~J-mV8&9jpR zN4$qO_^gy?eh=@!X89i7dw2)EC4IE-&j%nPxm`@(pAXpo@*D3F!)5n;KwtGeVz|T0 zdyVf#|DTs1F?lS{!5J~RV)-61S;O;3_inCFCa1btz%<_4dv=R*@7^N@=#3Z;ZN3`q ziR*W5eHrDy>N_IOaA%Yk#k-RQ=Pk*@=V)~An@#B>fA=!VKO2$W`g;UE4aaxp_x~*j zqqzSqknlAg0TA^%ZB3)RbGUa^p|=&!_cU)rgJao<@cwx#S*LGw@=lf3s#E!bl^>%% z=7?o8{?%-%ovy0A%dB=LJQCS1zrny656*_5r{}K7F=NIUcfp`z=e!7Z9wz7duXZK| zm8o{t1y-i^S~zdU83ybPut~rM1(~*ZY#Zg-T8Ips-$oRt>IhWNZ_K)&Evikv(mq0d z1B0{Ax*iXG9rtZTb~mmX>PYo?l!N^Z^9J{(jDczjeFq+f!)6Hmgt;&19~cwP6>^t= z`Ma&}=r_3k689#IfoemS_{<}e)aAD z#i=&1XBm#)z~DDXutmeRl{>!CW3uM4QN;F;khRX4MDDXNuY2AlPJad`$U7l-Nto`p zas9UkKy^Atc-IY^OYTAA_xZ5X=bmQWjsyGb;>C-~TJdwgVRB8%sYKEI!$JKkAedLHaMasTEV5ZJ5G0?sq9PsRkeaSti> z!Pq2YM@qc4{aw$`S#xNGM~@y^PM#P~cP4OeHa4BqA+~(rRL*f>(@CA! zazaPq6g*!0UZARRr7moK&3(tlkUN4nw?ex)uOMmI^L3o4kC*<;Zxmn)Cw7X`cNqt4 zo!I}mi$>1TP_{T#)@yY#_c`OLDl*!DT?Y3hac`U4|4Dm^BMqMO9Nf=Lyu_J9?5uIz zlPUc+hvesXBXOMJrwqnK+Yg;p+-q~H|H0IK`}S>P566}q-i5OUta(|>#LF6$H4p6% zk0WVV*Wx+rB4^dHcbBpVuVGUTD1I&53CyR4h?2DwsGY9mLXJ21mV+^3HsY8BqPr=9kHTK^b*mDP%xnJ^* zy&8KIXB9cGLR;lqRAH-Dtt@~4{r3xfwKn%D4-ZYn@8_}RD3|==)cb33s(f$i;H-tU ze!-hyBM;3F-pBUJ*0a?@FGCmU{bs(1*Wf@dk(xN zbQA7%^`ElYXV`C;-|+I#IP_8aOURui`a9p@d9hDq4(s1|Hvb+h^}LExWxf_io4C7; z-?oRw1NMaC;rqDPjrl3xh?BI)gWwP4op0c8k?FijpCzwaqk*rZ^QwG<=izrpkWF&W zwRrY9o(YlvfCpFu5~qLXS@)bDV;>K94zHu_aZ#pfpRxDB$5_Mt%xn6Lhi|oY@8dVK zSi`RiZgJ6f%8>qpcX`!4bU*#&z5>n!Lc1gHu=d;EdOn^ROB{QPdVgb`YNE0Cv){nW zvA*$~#e>%)WIbb3%^C+MbH^v=E};RO)R{>+>&vrv_R(%mxpU`?^TK+3bkE36IadlT zD0E*;Le?Mi2>vPDd8<0()JgxjONn(Z`#Lb?nKN5Df6KWnzQx8%`L>2q2Yb)!?muVC z_5GW*4t)zh%GovKQtSnsOK;n@?F%%3o-Zz+1>b;sUU&b^_b(xn=C?KE_f_O~HsH_b zV{~VE)g+B{J;n4Jd(P|bKlqP5o8PkJ{3$Xn{hnjyfV7)2s9n3Z!3RgBBarlQ5x(yJ zBWq<2K+7}Uvi1mBukfnS1$sQ`$OCV{*(|U6{(0|A^t?{s`GGngOC)&k(R2~@_dmb`u-En6J<+H{JBlCQRmS7E{d!;V) zkKxW+y~n9j6eanIre@z~hTd3*9y{Yu?dyfdg0vA_J3jk_Q+gLqmSUTDo@aTEq}QKapS0!@GFO z!1GSXejKdsn&(}+XWKhYfzRNE!=HvC{~!vQhu;8zh84ONS(d<$XZ8m(txP`dKf=K) zX*`gjCuDBhGXJRudINa`?E&wGJ8$(Kr%sjYEQO=*;mkbv+$l8%86$ANzymp3xbu$F&a1*yxeih|=ZA^1=GpJfwhpADZFrd{ z@Qpa;0^^8d?*ku7AI)oCev5rhMRptVcz? z;MoJX`b`(HFFt#GI!lFKV)tLWBplwC!TfB-DA*HlnY%E?!47| zoIBNj!`6%Y&{W|sc;+H<4%*26hdds74EeY@E$`qB9D5+|=rFi@kN#6eRGz-GmY8eU z#Yp)YE$OY|;@qj`8Z-cF4jKSCA8mo21?F-O1#}?oR}C=aKhS*OX7mQK{#obDckZ_) zj(cb*7ksGqUDmuF$1~-To;{y>@T{+J=dIr3+^Mo7_5kK9v>tZCv{ z$KV2Nd`Sn53apVM$h|w1#rnlz+ambFj02<&?t299qc1~mNM5|y$Eadl$ zxz}bJt?F=`M1yU07dnXfHS?aiULnf^e7 zLi_0a0QA0Yvx@ATwt^eE?-d-#m|ePb$tVt3QWl;)RqXntF7^gp)+T9@0k9W_yMIN8 zs?P!RT-NXaeS=qsZ2e37g^ooJEOJ!7kq`UOH z*}#VVT4(^-t69^m5%ZqTcRaWQS(rF@2i>+t(owcNONdyE`blh2b}$YZ-ECCSvR^O_BP$IH?YqmQ$(KZqVB|lmmn>Bh0J>egV%2N9M!<8 zHoNNW#y%98Abmu(L!0sFhM{keiD4VTUI1@^4Gew4u7La8bq9Zh%oRB~a|gOg?7T>) z`W~o)*GBI})o=ZqYQqa-0LStaaIlQ{RHAOQn6|oNAXtc>9dDa;G4?5PUB> zdU#)WV?1jFyJheJ9$t3k%9Y0awstS^o7`_RAb^iP4#r@_;-4zRUuE-F{$HW%%>8)P zch&A3%Cj!$gRS0~e6L!!E%{YFmOuHY+GdxXKwUDBn(&sLopE!)W;;9MMgwnE9PyOu zr8ZqXbTYCT7r&_N#*IA2@iv62bR*ph;bx^ort$=R<#-TL^!CFuF5Bndm^f-m)Gc2wah4fn3Z|%tmqhb z<-4l2K23RF@hYyL^3|13_8OaGQ_-pod6n;>+O|RY3##1_4ml?LH+HP(qLI&FCyuT( z+_vw&%Ck`A|Int&;xLh_v#_dro$>~QjJyTeA$t-s6wV`|t3ZAY4F;VB?ShA9gYS~x zOHpNP;()+Ti6$QAW(^ildF@$eJCDOkx7gOsfS zcMj*{H}~8dJb?QygKqZep^Q8X(SyXJRIjgz%``jowUFM zxej;1@J>1G4{E#)#-gcKv#7FWU;|8hnGeXLXahDX%zydK6l5*f9O&(qXVRhDqJ7eK z+KUJO(0=%K(sS-L+-0)bpcqD~_Mc-P#Wo7v3G;=zfH(UQypzl+WDCfM^m&BcE%tNl z!`wR{c6cH?L59vZ?&%<(CO`T*hE07bxtfO`F&6Bf>f=kE^-O#9Z;Yw_4!)v&;917r zng?#k$=J`3t>M(TO?#<9F^o{{2j?3yE4@w3BjyjXCuCUY_Vn-iGrT^sADJ(ag{*1H zLx&H4tm^fTVRK(fuG-&Sc?&uOnG>v8@E$k=858fwB;>mu0ylnd44i|^j6}j5T%#=#k9$o_FvL{YSpWK4HycE5-Z= zpOOw8OB}V|Uu+|>X`b_c8cSJw|x&2Rb>klk?udgL#6Sj}W?F&iQ~_fDLzD5Ra~0wLetNh3}Qm^KbS++Rr$f@jLLq zR*`OsXWXHi<(&|DzNUj_IAY>%sXnJt<;2RVij46GpQ!>~@XQ%_N6uK8znR~mec%Pq z-`L{WgTV_p)&7rS)p!~a-hSFCIEE0K0sb3$fOEH;t(5PAccKd;OHVxWPHZpZqWzp{ zq&v(RaK707aX$@n2KYpUgUs--<(>H&SL2Uv3YrQ%oj$+8pR@&B1C4`6wCBH_1C8G&Ha$grDa-`Ui37^08e9 zKjG0q;=#v+e8ct+9*?;hSM7&pmob$PoP_Ow&b!JtLSO+uDfYCqg>ryZWb`NSLVf`* zW}k_x_Hz~i9XR)%Fdwi5g04gdip>J+fq3Q@o@aPX=y}Fg95gH6k#`{2b(eO9st+tXAtx=yWn;DNc-S}p)XY3MtbC&oJEdm?g-5Rp92jd z=Xc_u{Ri1U84t#axq+vh*wkU$tj`_h26Ke^|rcg}i*H<2?4=6QqMi#TXK>};q9 zxW&=zT@L)X?GB?1F+_l4g&39~wf|QJq{fILN?9yK z`KOxyYPt9+&jF)Qv{8w(gDnON$L6sFsAHbQ+Z}1Ca&pJbPgD!@7!WtlsG|)5r1|*KN zP2eeLapbe~g}s~gfy|t=?A6dw*g4}=y`AEs{gk2FZzva_%aMt&-efOhPGBFbk{SF7 z>zr|g21e$Bu8DEyJ9vhEgIm#sV1vor;u{_uh5dDS`(Ii9pvp9yzyLWk@><#_dl_pM zT7tccI6~$NAvCl6{w8o@U6Y3I%r{9#TFQhkQgtzR)=AxQ6{<2vFfPzT%u&H5;2r2W z=w-&9cW?@x_6je>T4o<1pM2Lt_HyLt;bUJauG%f-sBuZA`e0m!#@yA ztJ`8RC&c!QwQP;%CJpj=oT_7$)EU>I>O%ol{$0kBy&f3^^8&p9bSOLlIso_&JopJ( z8rU%3amdo)WuWufKgh$H4WBoEt1w+$w_7hym0w2n;STk|8-TwVKb6Md1;MR6gWKUZ z(Ydfjp*6HS!3?O)s+$j8B-*eKFw;b-X+UiK^K zCTLOmtvglD4Hd`b?J3Rmyv}!3r@g8h+mgq$2i(Nj70y#|)`pO^P8>L2&ZLl*Jj(A? zWw@)?f3@A_F;VqrQ|)LG-WOjLM&>7|bl<7;5SMY%W>wBGY`?HC@**_Mh*YTTl8}U8 zx0ISt*)t^}Jo~>8Ef;1<60!m;-gb88ke!M67ee)Fy#FuEZnVR&VlqBCncmImPoN5AEW$r@LaI6Q2;-3 z_ceSJ`zSOTxE`GVJh@8Crt{tl1;ye;l~GQWbs0VhT0#|JgzU*YTl1Xf;;g31x9C;c zpz`LR&){Jk%!2cEnTL` zIDp@wk%bO`|5Y*y=<68k`&Az1nL&3;|DdhV1;cAdoP^LP@YU#KvG+&Ljx2$@a#cUZ z#B>Z)o@vl6vQHt4qi>9b`S)5#10O(JgpWtw22BUwtIE0_i~57%J(1U82Sqv1B-CMs zJ+Ow?U|hr_^FTk!d-y$Xm~GnR)Yzv#apJ@a=Mm^L^ph&U@bp=pkt4%5$$ril@Ql46 zbAhu?3YJ}Ms$3;fX{#YKV7%dHfGzwNx-Z6*F%XZ=oAYd}1?jtl)DI5|zpr569fSJ2 zB7Q}z2ZXPD>c zCy*<{M6v%wv__xTgUgf@gV`XXYlhW$+xBmyopJVdR4`tsgnA^bwg9^HBCZiDykhci^y- z5!^2!<3vBm7t{KgQ_OqL=|gK^XCn8eGY-U|KM~tf=mPqy_nmiaY&a(u!}_QBD!U-y zFKd8#K)qd%noGWXdRxYL7m z0YAoAN#6W`7kRHYAK z?$Qt7&K`&iP428Aj%Q>i$Rdz`0%z$z^HucV%q3M`jOb7WgHF(|&^Evmc@8=WWHyW| z^PfF|{v($}R)anc+dbOC@6CYskUt}9R<5pUv&~MW$1eObGIr)W{bC)n_oD-5e?ZSe z8Zc>oOq{Ra;~A6b{oLHHqPB-S_%9E{ACcx3j-b5;K9>QjvAe*qMERT;;a zXYfDZ8}tOMDe7U5U~fW>heIxd&VYOORldt={K`mKu?@r95PHW z9u2H;s@_oL8I)M}+ge*yd39B}zRLSs@yk@4lDSywDsS^#vxF&e!De;5%G(ehcqwrL z-bslUbe|ou%|jLUP)Tzh+BqS<;oYhyt?nr=TukAl7KN8l7j@oJzr&(B3gMPR`3O0M z4JQm#AKzEw?V|AXEVU18Rs8u0wdPML*#PIJqO^xod6Oy`K>%wP7(&;A+wtIQwU)SG zGM8$SRi|Xky_t*9{>(o@@-in_pOmTAU8ML{wKa(K!Jfr@&Y3f(p$`CugKN-5DV&Y$ z@g+E_zGVd8W5)tNMBS`GbT^bme(*y$T~f~60hPZ3vK=x}H+`Druzi+E)8s{ZEY z`pHkd;2HKi%E7Y_Gp3Y<2QH+wmLI+Xm{UJ`Fz86+N$jn(2M_IFEx&40W!cwR_q2mO z23Ztkk(a$8{C=gE>R0(Qk`|g0xjp!lxx~I9@MG_!Z7OY3bNhK$eEn|v3@?O@J$Miu zHe<&eWUpl3Qu#|-%dg@agR7bA^qKtZne3^+fqp2y>YVC-B5V0od;+!aE@ppa9HEcE zgXn_Tht*u-%v>F7c_mJjkyzpMAu8=LMP~%7vmwDsr@B|+u!$;fK}jcJSav(RTd9># zVrO?&_g=CARkX8PJ|;z&+xzN0S=VY!JnZZ~2*4-U;l7}?on5OU)xWIxb?+88&LlZr zvg|iWx_Y|jZ(KL+`xRZ&W=zw~ZQ%O}PJGlj{repby0!V{pC3}C_53raZoMC>HECQR zSMr3(a}7$K{MX^{r+5%_z2|@nVaNL2ZF6(R6F-j-Pk;BjUNi63tWkVw&Dsi>weOTt zq{nkNY|xR+KjeI(UQW55^<9}Epj|0P$IY8FHtL&l+kyREFK(_Ik|nQ0`UaH(P7Iwj zpme7ZvmV;p@2i>e{#v&LDJ!4c-}PapYn=jqbV%<}DZtHbf$xs(masre%66%)JEZrl z6tJ_^f(cctObNQZ%<_0yqhUDM)B*rn1gXRcH!-L(I`s$Tc5^*y$sMV;)A#${i( z{$|f*8`kgZx%80Ig+D$P;_K_NuWbM0(}M2JTXZ+j$&!5iktJPLuRk>7=Bmes>pVSt zWWLwq`7XD!?bs0f^yZ>Ek0#c+8f@`SQqJ{$WtV%E7lk}t8q&1!1s`?lyJ3yz zh9jr^Zk&4XwP%IN>Abpp7ILRZ$iWHQ69vp>6q`Lg;_~#!wGhj*kS8IXQ&kLTGI&?mugHrAh%^iXC2kB7YX|%N0V`ElN>jt!vKCptItNtbHZ?68!?i!T>?qs@ltV7)s$40FE@@dry zcg8Jxa{6+GMbl3Io%h?352juDIQaI*jk4b@mVM>=?IoAi>+e@5*WSgSj_lm^bdU96 zj*f)}&#K*gV6B?jue@L2pWzQ{l&EmP(myz~zvs3bAAeDJkKffSe&@3I6m`nlwIbN+SzdW+EYEjBzGnEm0vMZE@G?p5KBmP@Ow3Y*-b@6~IGDx6L9TVQA{ zuh3pzr6+DVH*2>`rGN*St_2=l8}RYX{UtUP^XvBL;3i9|E?oy7xjf+J<)uN_Hw7(v z+%Ndv^vmViJ-l<#q3V|31}0qLQ^Yq_s=LJwPdkzS(|DMhV$JJWJ((K;w?dkIwjs*4mz^%eho;BJ(sa3H>j{}t#RV{Zu?V`ZPivyeXf2L;h zwMG7q7kLKEDf;wa(Hl$bN;Y0zu=SjK&(!o<6xw@C=-MyR-THX()1QVE|N5snKdkY) zzhqJHlTE?jK7Fj#?zJ@ouCM94D4_nvI(>9WUx{%S5Q%yeyg!(YN4-zjRjbL8S= zm!K^EYv)Z5DAc!6%hf>{D!DB^75wZ$|7F*DdJI3j`HM6SDm?r%b&LL2h7D-%+oEu% z>Y2V-*8j+&7OUH}%)52YuqQ#Gev5XLyHxDy+NT)@oXgm-sOO2@4U6{KS)*ame&Ek}POPw2EqsY}m`NnNL zwPDk@!M(?SS*>37J2|tj_$>6aMrQoM$f;T;8Opk>23k+R6^Zw#?OIkcWIC<%Si;V`f zxxcHCU-$ca+ErLtCuBsOe&?^{8*n~fL#I2romMszY;lFl9u?-VY1H+{Y|m~D z3*GZq# z(%^X&_piO<>H6*M0H?5kMZu3|1Yf=TWv&qu9ZI_dgt)IQ-fBULEcF@|{HWH@CzHJ% zP4){tJT2WfBNnIqmc`cV{u6)8lk%G$?R9Ul>0)8`CQsG4HF3|n^-;bDcXCd8s1TjI zXZ2jUZt<{8jp4Ij#ypuyPvA+oc;+}_aIxU-R@!A-S34w1KU+_sur@;ZObiC z&WX~=Gg*=hIGdy)%{mcy#%u4fezofO*ahFK6@0k#m-cB!|Ma_k)>J?B_ zw|IK3QD~*H)6V?UcGK+fiAU86cpBnm@w>fq|B#s#bI-3=DeK&F#~jABEmOSP#9SXg zdN$j2LE==6s-*1c`l;(PuZP3DuGDfVb}%5@gWvtSr(5EG=TrX`%T~FBZF4ytT%ugH zi~av;mHpJnApd(c{8#mTu+sO8%cA|6&XsVwTjEKNuUmKXy)$wCz4D=1f*)?5Ic{!1 zP=!6S8daHcUu|zKf=krMc=!4_m;1jpS~B2vMz7`m`JSa{acfYEUvpf_J$hi7EiJ25 zb*pZlX~vL&)jqD%_uz!b+s~(R?_J6Av}&6Hw;i+9@p^pdN!ZwGjuY)yu=sC|vH$$y zZ~Y3~*_y0Cuh3`rT`a4Qebl~R$!hiuM$fKN>~W@5seG>O@7gBdmZe?A_Ydc8mGu1b z0%fc3`Q$?P?G-akpXvRyT=@iPCoiaRplZ7uS&JQ;GWq7&?;345`O(jPPxkq$+=Z5b zA^k3Y9{OYDzFh(mjT$_(@kvTgd5J8K_q3{+d_sp@&`v!wbp=Y(_PbN6arDMzK; zj~;X$)A#V~z6H)M^1HUEp-X5_mo<;Kt7%Zd-6xNaoqdhbKYNv^lBeX3o>!jL37C{B zz~A@%@{@N}{qk6r9|nBArAOahlTNNJ)v8%w){+UgZ>ibO!)3}SuO^nvC3dGyykpMv z(GF>n4e@d5*Xqjbnwk6NoBv6rk@XMxj~MaY{tpkG?da;*((gw8K0nv6ub;fe_>Yne z+&Z?3>x9<(x4Exf;rj4$$9fGjv}!PF?)-xv);PalNP=JY2OOW;w9?Z1d$ymR*m7Lb zTpwSVHTqPs3TFaJ%)C9yZ%ym0bKG)%Q*Cy?;Cg@cm|bA+Y={2I(v6rp{N(39)@ZYC zbV%8Piwe{%`CjwWJ}W;C@SpkqM;C98@d~?kt&xAL)(QR^I$-@x0QOU)cKs$S|^13KOAaJ}%xsRfE}@^kxhX=cAX8HS%a-%62*i#p86Q($GSOf?cV z-{`Y4S%BA!RIMt1m8V{>%AFF`%(tR_Kv=`S@9%SecFFzb{8f!J7yrlY-ikWgs|IaK zb#KnRJRLiHoN#&8Ld&Zs^e)mO;KZPFzWaQ-%`Q+{Wp}aMcL~mtuKbmXsjt=Q-2BkB z2KS0(EEUpuseguElUqM<`*zBp#dCY+|MIt=SGKHowes<89m`~K2n%fD;8OGRF^{I~ zt-qpr%Z#n}xOb}a=Z?1759JKZk#WHb4LGjHFw-9+HPQfzpJI%F56ST$>Q6?C+r#j<(y-= zi+Q%`8c-SI-s6{L=vBSAr|ZL6mq(8F>JU~UNzJZJLT>yz{ij?%4XXL; zjeyOMzDwR}!>}S<0;Y~S=d`qP*=%_Rl&IQf-p|=iY}{Dj^Sd_{brpQ9(Sxj0XMdLZ z_IZ!MaqY5?acb3fYZu=PF7NlKwa8N1>u%}tiI%5qtuVLG7h}hb?bmyL#~;fcoSeAE zmscI^#(!|A@qqV-KU&Xe%~@~cIrFL{7O0=Jd||#lE6^+6#Hu3*^%VW(p|HT z_j8}@H+#j{%OMYc47qZ5RQ)1BzWwqB-`u&#qiSIHJ$G*x3wFPfxBS)I-8Q=PNp`vH z&}*5l`}JS&RjPKme7wq}XzJy0qwj#P*7iR7^yIRqO^c@8|Ci;e@3RgeONLFq`%mtY zf1fNn@5eR4PEQXx-CvpP$9adRdo=Dg<55rh_TN9)Qe$w!A47jRm%!a=rQOZjX(lf1 z(P`Vz;lT$d{M2J?w$qzV_quVa+}#0xHxF`qnlLb3;=P@d4tYA&_tDg#5a)GIFS$Q! z8?tagp(&Qn`i?30>4y``J!vuL_PC;b_O9DF@$d3^(*NCO&ZN3id%btjBbUF|Z?it> z_NZ;}@F9VHM%?L3^X+{srBf_?FVhDezilk|N45!}Gm7QOm#x&LLVr*9XtcNFuGPgH z$2cDwJ}9uB{Y|HPvr^yi^bE<-;mWKsn|kN{`1ZJ7YjkIuf-Kj_?(xiVj~d^eK@n zz<<%N4`%P(@NHn7xy9~pzt^jJs|>sHx9XCjMc0q>`gLzMVnWTr`-+U1TIkA%`^W9Q z3nb2;GiCOE8OASfe0tI+=MQd8IAOrhT0=u-jAYUcIp<$1*GJ9kR4LbEN$Iq!SN-Yo zbNka%AKy9qslOJ;buQ@Ld(bF7gu#n`fJ+8jUFZ1 z<=D-!*@l+S9EU&2pS@DT;PRJGZMc=HT|ysA$rQJ5Tz>Z5;nbs*S9ddtN%J1H< z6I(Z{(V$DVnJf3zZ&_r!W6>p{F1xli{<&tevLDuKapzNqB(;Al=05X8icza>eqOUz zmqAxIUMMtVOV6pbwq>oi;k{`;G%uXL{`fYBFa46@RM)>UJv&sT@fRspj;x=%Qo_Wa z7A)-fRB^!b?Yk5?@YBi%twLQq{eC>S=)*?U3r+7*=7VC>-9GgmnE71e7N@?LIq!0r zOifDd@yT=VgA0z8`kpN7P^-~M{}K0=<{7qPesJPBj)x}t)ZTD!uS1qZ7wfwIw*1K4d3gO?5lal8#Wy` zdEJ8QHLh2i-6nI%@fm6sJ5 z5jjWf`mzKts66G*gTX%OPwfevVBh{!NcYJb?v2jiny|s}Q%kEg%YATbR@auL z?v4BM=(sA?%J`JqVApX=^Ufpo4bOjT*?jvYMLGq{a(h@h%ena{Yko1Y^N8C?FXit3 z?Ps1#9lOrXa%RCAr!`BCOfQq^icjf{ZcgvHjj!1+Z^FArbJq`a+ghODN7H*GnfA-Z zDNpJLE%B&5KHr{Y2YwC++tai{&{^{+(XMdhEXlmm!wTq?Nzwlx0(IXO9>N~DS z)(&Ae2D?sbHE%3H@6Canlo+D4lb-x7b*QOe#_O-=Bv;XY7Yw+m1 zyLvA3Jaeev)@Jo@Kb#zVsnnW<6^f4dVBq0mC1yg0Mzu|x zX6KedUuNy}-L27C`_ydk^EU;W_ukt!N8stw_p7#C;V{ypRH6pIWJ!BzrPGs@PZAF= zTY5+SN+}+F5md2wx4;sIHtsu9BE^Crs9KyydNwc@d*~?GPxs9#g zG}G*jE-7+%-g=<*^bCo2_IKOWZuP3uBZtkrb-rxXHYf9k4n6djTgs|S{cmQ^xN~G^ zmlWOBRP^f*d~08~bxQ;4zMrLbx&Z&22W4xOu5_O4I!`_i=6u2l-C-tuAUmEMmE^_x2Pw@jC+wM^D>(y+{nFILT5 zrH<>hz=R)dpZEQPSr^;YY9H3=bcfU5)v?Rae%0k}OU_I>v*8=hlI2ECEj4g~dmZoM z1MGLK80Xl((cp&@r}%xcGV#>H)%%5xyy_l`a5J#X^8;_3VS zm3Vgg?@~5(NLuAY!_WN+H~Dt#VYjD#wSI5tQh0Q+arw9Z;@lux+mw4+I;`EYHfioB zLH#`T?e_d+UB24qb6@?gX7wf|&s6!o>1QAGxqSLu)r@}U<~W26Uj0k@3n@RWQSQL^ z6~FA#a8SVkGwmC#IJzi+9*zif`KC65B$oWZIr}s`-DN8{1 z(Vb5$TGs0C0>2F{95{E`#_9=tvXsn}>+qcllO1zpPV88IbAp!nEu)XmJ?@k@B-i6Z zH>VBD_u~qOR()%BTC(j#KDU{*j&Ci~pkbd;KbI>yb#;7cPHFMeEAN-bXbm)_6Ud7zq zKliCV9joKeSAp{G0RYuK6l&%zW(6mUFj0Y}#z=h;}JQj%XTKXH21*C(<0A@^FD; z+h=v{?S2ROH75{d(G7qgccT%hNr>+`8g@_x8!Rwz;0< z==lbJbU40!?Ui3g_MM$C`M#b%TkZ_#lQr0->V}CE z*XJoOUwW9Q$GI#tzVx7k`&!!nWA{(%+}Da!AL^Ff{mP%2l3qBx<;H~LS?gBm@k<5s2YlX7&^L|vUT?dq5NpE(`fEoFxP-eu&`#@ogn9^bmf$(e)trmB=6)fa_N z`~4NVugOi%l$8c9KR2=4y-Y`oy6##$t43hCBUjeBRQPn6M}_<4j_oQj@$$N&qpElp z-~ZKL^IQ^@?_JYp>X3YUYqf41Fn!vr19<~C7wH#J!C_)((>bf#4r#T_tLE9$2LgLI zPVT(H{i7}Cv+VIGoAmaFXA4by`ebDi%Y|&AYoA>?**~yw((~;%hGfp-In!rP|H1>t zb)A=>eCjr1JR5opA2@dTqIL)GE!{Zgsoj`Li;_({c6993N&PZb4=7n+*s!dL@`T*4 z9ej7<{Bm_=l_cR4kZ(q2p&WiINRXb52*zePzUWKx)bocLmtFT|O zHnXzsE+2Nc+3~Rt^S2nh@qU`SE+K9Qrg*F@U#Liv7C%q&UfAN>snx3n{o|XX==q$% zyVL9{TeV1=1Dz6lkhD^tWt9sS>Rj%+V|n|$Er0BIH%X~SdwN_L-_gCyyxEs-b{@NP z>b5$K#!dI|E&1c&MQP@L+}ty7wtB~pH|=}#dgrZf1wY;Bxus0T9qSwx)-88=Y?*_1 zZ_X*~Uh40$fnz=YDqCQO$M!0Be%yGhe38F0o$R$UApQ8%7w4TnG-v*fW=TTE*6EXa z*Q(Q@OZ;j~9a`V#=H$TXyW9O(pi!R_hZ6->+|_LT!O6WszS;L|b@8v47Vz3tDKJsD zO07~JS?P8x(=N~4Ul%VwDyT)Bg_AD-*0ECUCH^hyUte~)`{5_Krwwkpe&n=8PcJr^ zlJ@$2hko}xX6DY`tNhsaOO?-;z@hxn5}y?5<$Afv(&T;ixj4I5PySb?Z;HD2PcS}t zvZ0Ox9b5Yi&K!a$riJ6hpzF=;OPBX^A2+YpwN&>PPg&T|t>f7OJI9Wgwj%6g>575P z23M)PZk%1eH7oYFx;Cl5%hBS_`*LS46WHR}v%ww{9d2H3az0nLT5g}M&+auKD+t7?Hj$1l*n|tx}!44Tb?|+;p=g}D%DxdlK z$4Vb{KK_Z%ilC&q=5#AFZ^h<-MA;v1Zjp0)24Bn5CGP#N2bC`~vTM4h>vp%ywleYd z37I?gy^%Lv!)=fKT#rxCy zcmwOFQw-qkv9dR(LErXH=feOmqJ9?2TMx8jG+h4-Z2IeYu? z>kiA$d{_BS%Og2Q{xGH9{`PL4?JC=6{{Qjx)&Whv-}^Wqpwi9g?i}6ST}nue(IKV4 zM%M`G95tjtkw$6Bfq;w>L=mJxkWQ)Jc)fq0@Be$A``LZ&J?EV3T-UY1Q~5Qy%4wN- z3qZ~!VeJ6t*GoXa6BEQJ3g{$L+0?ZmIjk>6B$;BzXuMQrP15W!miQuO$f!OBln}n( zxp`+tn7A=4S%UwwL6=}dE+O7kPX$L2Z$~|T8aeS(iWH=$t7ZJd3w%*OUr{E!Ie4Rn z`XRPx{6&R5%gS_>4^};d|4lDk98fVxszH#g*P+Y1{47Im=hv++pI|c3#cZ6$6w-cdrpN#|e7O$C!<098KnPXDCF|cMK`gJnKRB=4~ zXaineA<4=D&zrOmu3MOGpwF#b417d;VkIYrfDUNoNQ|A(t`%V?pQLxWVi4e*UV<&E z8qqf&tdHIYGj#Y6cJ><~>44^qqPeFOl|KPLgn=9#sRQ;7Flh>d){EwxW_Mu@mWo0* z1*<#XHk-7wtID^erTp)Q*3`r`PU!%8fMqL@MQ!6_BQm!rqTY^}o{E-d7&FlR^JUW>@v( z+*I!qz6ghO?8BJyn^ZizxQ0FtE$lsTQ-S+{I6FB5`NNZB`Y^|W>%%uKO?yt~|Mw*t zlbeSn9C@dHgrT5w&CloCCte#sVC|M^$uutxbk|+d2G`*q`siaqzftIVP- zU|~_lI6j*Fa&23kX(O=pV46FD|Ml8I9&2(!3Ul?>cj)9E5L=QoAN95KZ6_LaTk3-q z2JJ99WkQ0JRcUhiNbwc@4=bk}YUl`7p;LkVk5ja_^Q$)}^-*EQ@DrW_WjSOnz%IsU> zz4_Z6$W>^Ia1&~_;d|uve6& zJx;D%p4ulMy;X(a}KI*=y882cqAvYI>xIo{AY>rw_AGeo3zp z-XgViuM>FNcbsOH)&P&GEaqD3J_tRqecFcqYf#3aVmQOc9mlSB{RRi=TOWSAOU!a7 zM1V|s^h@qxsb1Bohq?DMMo9n7c>a2%C1VNU!V+ki!d*FhdU;Ar0KH@c9Gs{Nn;FqO z8@GaXGA9=&$|LR>Rr9i8O1z!OL_R;}B;1HgLzMA;x4DQV_fFRQM)!{suX=x>Ez>Mv z?zOk`3gQux;wNqc&xEAR6VGa{H?Mc{9M%_Ypno_kq4=IU%*Zqw|p?T)O^Yr1a& zF;8E{i124|Zo0YG_m!sQbC=@oGeR7ZQ`;K87a%>Eej%*)9J(6l!w-)?!OR zGKX!}?T{4)BQDqu)=bn#QmZ0rSwm1HEK|blw<5QSYyme5_0sk z{6K{^rbY@7QLai;&5}k9$uPePNLe5HB*h8|Ou7$;{FO6P(Cp!JV?Cfk8b^;6pon^5 z784K^8JDbVmkG#aV@Iu}I4$m#3+?OaazUw%t>u?~+Klf!2Bra{fdVaiybZ5+ z+h*U50KP>L(cO01hMR=E2Ol_gWV`SWXF8+pfl6g$8DB)1LvfFr?9H$pnl5Po?qn`;{~eN`jN6}3B61m2&XUusR<<0ect-T&Z$VFtyou$Wnv ztnjQ{)td2N&OhKkiS6?%5_y#pb3q`DYF+EtYCnIubM3tTQ@Ffq6CRR#RsV}_-~t?Q zHgNy^?g|$*%jVp>I~`HdA;F(q62es?vb}KT+;RjZW@S+H+b_Q9T078p)U3pV-VlqQQUno3|{H%=x$W2-L_h>kL~35_i!=^EP&(`*I+7^N0V1 z^>Fyo>*>)@NS1l`;v>exh`Y`YB;{COc#W+t8&54FKegMt#i#n4UnR4^^7|v!X9(SlNj{`p^(2;m)2}sqkKDDg|9J)HXy z)>F*#(DY5)jX_F0TBR83ogZ+pLfw-r3ek!69b z_a8Q?l^m+Ghu~r)ucS=3`^C_4^5jZqd`Y)_%Ml;2ELLz-(|CfOR}Q$hWwJWIFVAWu zl(YYR>JBcI&BKz%hZ17$6XC~pZV5%WZg(}qOv}5NI|lfTTO5cq#<{e#o=clq=7kQMKO4&o{bCmg6witnc_;GIk&G@N*3i0E8H60WTbp ziAi601}xTmy}o7ssTo83mRb+pOwpG-B6}aZpvKFg-w{GKPsqbB1F}lxRD=Pu%xZ~% zbrm%htu?<}#dP!gXKfP*5Sz>^0~TPUEVfRW80VFQBcC!W{C%&JrOf|Zu69n9Cr(*7 z?e%SfyV|R*y(57Iuctl&mt=zNYQ8zK(5*85or+;|(u7%L_U7T)VePU-I|wQ`GHo#Q zE2mQUoBhtOEu}TC5V+kPk|1c>Or$%6Gc~14M6`m&HDY)JsBXHA5Pvu)^ZoxWqBLSO zDtCeo^6FR(Uf3~Z0{4KF<)7pYRFy{U4^Q4cmUrdDafF7BMYymLXmWPbV&HXf+)#J9 z;N{&j%~+?Em)Dc>(d?1bjK8RSByP`tr{h`n7_M?r3(_Xo=pfD6)2SEZr0mUt16!8n zh!m16EP@*8n~_C2#&0@PYO%%xtjk0KNy$v2gBm@-kyW20FJ1y7O5Bf9R032HQ3xOU zrS5inpw{a2@0=rDq(6g9jfdvFVsgZBh1^-vncdS$q!XmJjOP`KHfPYNE;Al5yfge# zrc{sAt=CBTpnks6ejo(dJuWBk>)9Jgbr?0hUimYTeu^pO?H!&Yc-4=&(Hqf&J`Te8 z{eVxMXS>wS(c{1@%MX166#mQ#;W$*U^GLaa7mm9ek&}zprl?QtL=~imzi0)MBZ%yi zeDh|tpyBcsk6349AIM&z=l2GW%(8bRETkd8kE-`}QT zRF)I7D~|hL5r3D5Zxt>Tr%x2Zz;wrgbK#>LPNx0xFjMx_{1)J2ryp~2Bf;4oUt*?F zkUG`1U7#1;aM(H?|sme05h|91NyalpQ_0wAF^BtQ#VTK->B~MBDipcz42Z$z5SJ zlcY&7LJDmaE=LW%JK9W(EgRI8G7an>!S}VypX2Zm^1#=Mvw^hRDg|(#8?0P@*A?0& zKlFQrIK%wT3>Rnqa!Hi~^?$oaKsp}hF_?lk(_Qs+jW>tijiH~Til1XWO3f>A?)?s%lyl}ndd~q)AP&n zVm$#0VF=-Bf_i$R!X|nfS#!?1Z=?``u`1+Eq*MZ5;r&VhnajJvIQO3o6fi#pSRSoA>=!%P)b} z3y&^ruYb&+|HD`1+)#EKAp*Tz1LA7OtB5x9TPpTJxIOqTi69eKZS*1a*L5eirt_vN zMX3Y1p!L}5`YxTzu%hU2_M{por1`1bpIqdEtoWSi{{@2#KKo-Is@dHM>~<|V0{9Ra zlN=?OH$spgqH`={8}jeo>DOp-H$rlU$IJxy^1}SsxAhxX9j&Jv+ zM~l1uy?jxZ$*$wNN6zWS40_FPT|F<*^dr{mzf-T`^wFz%BmdN~lwUny7Pv1_E39Ab zJB8uO%$=U3FHW*m93B>KSkWJZ{Oru3MK&Jb;dT%WSDIHcVf~r~O2sp+AH_08fZ8&I zjh|$)5%yr+{_~jHPCwU!}H|+5U&{J!QmH61}Ndp(bhRoCJBVb))Uj>ukXa)u8 z(rinibn5MDw{^ zn1we_WWGK3q|7??%gLmaBEqA=5}Yq1F(Cw^Yi#mFswGH0q@)bMXe-_a;Xw1g0Ci{x zSe-B;FZN-SS$_z_Y&m+)^gJQ{9(hj1+**kMHu|)RU8t9*1I=!Hr3f%Jr!WC8w}Il^ zpav5Pl)Rb9Mo)D}xc0H0LvuSm4(RGHdxtMgvK!v7W*7%BYnNT`TP^uQ4zqkL5BqA5 zFLT19833azKp0c;QAQMx_>3uSyp`28d-n;T)#sSj^XC)c%D$UjcwI=&5@cshhW8{* zu10ha0wu}6H91~z)QqZ}l=t{AI8oB|_MM!Gf;mxh48Pyk2TIOKN{&M(t((8HiBb61 zemPh6r^84bD~qbyfIl5@1oIB;y>Y)%x+}(wfJor@Entk-nEsbEAKvqgDBp9hm;MD| z(A0n;m9!(0^ySu#QkvC0cbC<&v{uql#v)`Vl|giX8GLoX2=wu_p1H_FZ!8eUo<}%| z;aUwz&R-K6bIUY;D~5hT@BbYi4}I)k!$AdpBc8qF#g~J&dM%dN3>a@DMR9)0kpInx zi{`#ad_bcX6@2u6Ji{HJ?2}^`oyn3+>z=_6DtPT<$uyCOsMO?JwKDigq(hpF)=C) zwa9JyvXyz_K%1^4R_aR8s767L6@tMx#y#SKuj7!HM zJ7T2qdNRnuLil+gx{s8I?G@vI?i(@Oq2IcFqe)+Z{!8dpEQ%49HAijjUNe4h-+9`g zwGhh4dd$XrGoy1sE^R7>#?AYnmvr9+k_K``F@7>{c#Au4ph%t!#P$_}n~drhJj_J) z7T4&H4Kujrd!(;2UG6hP&7Uqy2y%hEqLD`NEYCbJ&SM@nD-7eS98WKdl9z2)cIgGO zGRtq=SDYZ;g;q$`@g0#WGg7u9uxLmAV$C;4N-bP-CKO6Yq*0E6fGut1tzd*I1>7dP z6pC#OHHLgH3vSOLhG>O}d-kM%#`Nwh&koVaC3re~IjgV!IOdB80Pc z-3}j-96jS$XBj?8(#WOG&-o#`6u93>O)S2mixLrl%8i$UtwtbS2ZNb8Ez&WEV(Uf& zM@avR6Wf(bE+5Y0kixhwyB{U%u>;!2>^7iK&FS2n-~_IumUW>k=h-Hr>EFkCDw95z z^rvkjm9^!pGo^bRg+Jver6tY!<@hD944Jp~r2{FDlXwYi3?HwwI$BQjYITp7j@lcR z_`;4^2~k>}S{5k&>C(kvqfgtAu1v%D6^b&^U8#R||M&iHO>Cl^!#`f&tjx<1m8VP< zOH^5MIl}d47mx8Pt};(yLHQ>=Mx35rwhZ6g(meL91Ko1bqeO@IUefv1>!GHuS3hv3 zF0m|o&O)w$iXUMtKSPN$pllP`h1o&e$GzlpfjVQdR~^lo%p7SFmo32>BC8{0^A<}< zH{2=sd~7eaB1p5`OlHbHG7QVX3*E%(waN0?cC_2w;^jmgeM8WM;3?6cZISktHNHNx zQug~|WNxmb9%d3!5Kcu}tY*pMFUGog9t~rb7?bdP5ZO6e7NCEivwy9{Y1*ww@a-dr z=i${Z|2~$6!8~BWRkf$&Y~}-^CL`k+{UHx!T@E zR}h?fV`^r+2hb#T3237H3Gjb{$B$nx2t)Ajt@gZ}?`wKoQr+G2F>#n=s5dM=hFltx+(V zU87X;Zt62ywJ|G+=f>~8F_-Q8kRM)?g=N_5`JO@N?j=7CvAYonD>$nFdRwJ5ImX@j z_2sxUn5r<9rpvN2B=tUE{#K9AJ3VK|2ZxU(x{`eOGoc1I^?FMiu~+c>y~@Cx?|?3&f?wp{94qE?!&XrUu;; zv%~y8U`0PMA=6-`Je*{s1O%I&rV(vFZuxDQCYt@5n{xVlo=Wmu&v^(r2s%E|pcWQi z`igW=|Bc~fMzE&Ztrcx&sc-vUCJ2RX!uWp${QI};FAmQXJ1oD)oqPRwNR2F=!C7w)_n~(ia5m?1uxhQ{R@gJ}R=4>L+ z{LMIrcT{1CrxTUyAH6W*b7&bLTnhpXQZ^YNwQIgXV#+^1Tsl_l#HR6SEG(-a*p|78JQ?mKL0 zUbiRXow>VTnmK+m+2Pw|^%;khHgaR<>c zC``>8QPD|!w2Y7kp|1q2*c*XGlyg}%6q3B9qJ?=&59#7cCc$h9ts}S&L&MQY7tE@R zIex7^=%_e60>O|=nXlAB@U0&G7a$xL`ry5(O8gG&bgZP4q^TXO@Bd5}cfOAK0*-CU3df?!Q~&+W0&qT3VHgT&C;)P5I0y3g z4Bo(TU2GyQXNC_DL4vhQwsPzQPopIP#o_yJzEft^ExJC$Kh5)Y#8?j!l$l zb+g^2u1J;@qV+GOKWnG`fLj2CCRna+$)HXI**_1rGgcLE?Xz5sU9dtj!qtH9UFOrk zha}e|r3!SUjus>DW}AbEC0yRh+du3h*q)bQut-ey?s%Z8B=ug-p>^1$hyCR8sGVBV zy4;0&S+o=5WQZDOrWB}z2f}D*p0Ngxe;QBgO)rly=w3u*<#c@sQM$J?nA^cLv};YejnY=o5TSY2R|4uK&`{h;NSnqLMb$~_b$b?UOl>*I8%G| z^yn=2<+M=hF}Yv;cpyTyROH_2<`}Y{J6{qLxDW7Cyr4IgSUYrrwih>LdS4hELko+g zukfGl2LHPFY!de!dYQ}qbb6r!=J5YN6`#?^IjZ1>YV7-c8~6EzzvTA`=g9NI!1#>1 zR-&ucmnsJmYPz*z`E@&1G6YATXQ_jLay21Nht&V-M5Pi5ME+0lMw}{tW-OB) z4UwfA_hprYb4fn%=34ZvmcW`@~eR0V?Qs_&IF%wvMGJa4@*sZ8x zkL~n4dgz6H5cppcNWMeF^P$#8;QDVd7Gqn2;wj!@3a5H=Mwv8Fo$IkAq0A%Y)uc6- z8W=j7{`X0kWY1ADm%Hs)S1w}&C_YwQ46oJ41q&F;*=K*5hWl2{gJ83S5B0w%uuqn3 z_1jfwIfTPNX|VXX?|B`Cx!LhwEA1~Eova7Ww?|tZKrt&EFuk(QYNbbG%39s6VjSY` zwCaK^q7~B}mCIZTp)irCX#nsT4px*i1snp?y-M$oCbL~0fXI({62G2*8zP~)UY7%Z zl|MOq{%ZyKCX&4w-+}QTTDjxKHIshqg^X+@^>>^Q&?};0xvHz6jnH#b$3oYDQoa5hZMp?Qs#gwb}X0-Z~IqHFWeo(-+|N8 z;RTivlIZt53=#7CDenU(l}L~NzV2nnn<33~F!jr`rO-fhU$U&1K)0fgWnWswhv zH-gD9*e`Ikw+Cr@HbrlEF-qct#Lo}|x$%I%{A2cUXN&_pBcJEo|g>eA14W z)R)G1{m3%{PsbW#P)z^h6PRm-1B$DGfE>8K+hDip68}O zVR!E*kI`Kz)emu*WAs5;VWspVeliAhk- z&W}CiaLMT#&GiOYi-7u#Oj5iU7A;0Hl`~b!0O=+nm`ycVI1tV_(1~0Jyj!GT+C7XH$*pb+x6q%m3Wd< zX$DotJu|ukz0K|3bLwvM)Dsx}7}Ljtd$x}Jjl6{hk7vst0LA+g?=0d9vbHT!c+|0g^M25JgV$Vo!*YZ~#R^7MjyL|^$ukCHDTP#Aa_{Zw_y&l8mdzw6D?Jk;oyjR=imuKKM(T*7}I&&!}*m z%I<%wN)wzNQjpxI4|lR=V0d-bsKL~0@gC%ir}C9s>{xTL6fgo0Bw++%`P?BXQ;)-4 z7!AM0M*VnYf6-O4vMxM3z$>@JF_l&D5^UoN)Y4I;3xhh-8;aNq*}H!@RT8rq_B*sh zL7yM^y6EhaWQCcQvlRGY|3OHK71E={+IS|$@=M}7tqJ>{_cSZ6*sBTg7hMZGU-&I<8Jh|~}nJL+H`R&Wr@7cY%KMp*)$)4wjqPda zk{`-{E`T6WZf(|oTV8Rs7(;xM7+pmYaz&RAJx`a0cJ7H(P=?H_&7#$J+a=WY;i$D# zc84MRdG=TnE}v@0sq_c>=Ys-WCJ1l(g>e&2+#?sJz6)hQ9E}JUqwHf%TKfz=!`|ZG zlj`BG#$GHnNxGz{Z)82NU|glpQSc#~YbmRdWYj!b(S)w;F{EDpb5Xq7vpYces|{Z8 zUysS6!cO~v+l`+U50szBQ?UVIoH{=n)XLZquPpE6SDqSfb7a+W{kA>Md5wJ>7Vuc^ ziGZ7Ppu_zB*6lGYLujkVFyz4BOa2i`C!?~Ze673R_~wfcwVQ51Jsno>As;R6d1?uf zK~%v9>A;@-kiD}}svCQrkzW$mvnNa=(yR5w!71D*;Q$({?A=FFr5V2Ek5|7urnaY; zU#!Jp_MZMtl$7z9Fb~OY*7NhkXrBYML^pau54mwN4B6>C_!TePd~-D?4G7az9S8%? zex7-2^5T0&cqihy(6CFfp+fl0Uhsiyd_>Sndw|*km%@sltpY0SxbEs7e%vKq%nq;# zVQKAu4?P?VJTOj$nt7Y8%N?jq3obK}%}<@|nIBw^XeuwlDk8uHYS@oW!zp4~eKa{{ z5=VkV$d5yZi)==+Do!nUB*BEluynKbj`QLYBDI%gf?Tao9sm<0|*sI7NeVE^O8n z9pimJ+CLqt6w5GxC}@}m5Oxk4O+14?CBY_j0^$)XFhZa@oBcTl{pFt6<5Y0sPZ->R z%N!K2X&}D+{BJY^Nd-ojtZkKRi4jge)qC z;1Ty1?g?R{Dux_L3hWVlEDJzwu@-faGi}Its}E9D9L9!5v^KM9;1g+z=S_`w`Q3$x0ZPWaq+H z=uRTh=BDIlh@zhF-=LX-r51139sWgswbk}>J-|hI^ViojcF+li6YIO17tRxvu&q6a z>u%cvvX@%?3!ZlWo3Y?&_q`e0WcG`P6L`imLfpuxz)*J(70fCTXFk8t4o{orU3$Q19MBialifsAEa`? zrw-G9f7=SYw~g@W5!E~z+x_87FEqa~)l9JaJ=Wf~x0g2BB*{EHgpO0_r2Z&7Ww#uh z-y)8|6<<>P(nXfK7?2`ahs*kXK-31Vr+g4+cTlIw?evQU}MBd-y;zKg?yGB||1@}!w= zKYOytBL5B0j2=$jqdFN>d-S=|4_h_f;?FdA5IBY69jo40zp!uo^hu-mwp|BwQiVaM6clmO zG{MJ5%JxsW<>sxf@!+u2Bt)O=AkQ+mx)0wF<$Vc)^>+@fnKJ7u;5hTIQf}v!ZA}LV zeC-+oE=8?v9r2#(b-?&x3doyd1E}TW0XoxnU4qS9tl^KBkqQ>PZT1i{A9W+64B#>C4Wwc9jA z-)SyhB&oH(aDUF~`-Spf&e&?#=+9pJt@Lk~_i9#jgR`zB`-6tjg45cw`-ogl69mgVd#!a2VF{pB=D_9pk{1%w25{lyaU%5b=(ud=r_w2LJz*|M4Dy(L3;_^Ls6pOHFU zKypc!;iJu|Yc|Sw&BCv;y7iL7K{G6>IGVPvpKdLt#}&nDkbq0gh?3vfra6{yecN52 z?%iZY-fiyNo#fA-BDJAj2f>4Ej8j!Lk{SCIxwbzP%T7)6o=Moo9;XSj*hU}GCk+>$ z1OYk%1U(`0VJU@txgljDM+!?(bCSJUroDQ!@04gVd9^S{)AwUe9flo}88~N0q*;?{ zj?Rd7vIq)b9iH~Fx-zu-zL|*YI`IbI_coi-!V;?`L!Y$X-$=FDL=q!DfpmhJP z%AzClGo}RkkVqiKb7a>EyeW8ZqZ&L?ab>_NQ>iMen1dnuJYf#pCGwZV_@gbzqUuiDp7My-gG8Y9F&IfI|BsYWF> z_6oC051hRt{k+zm8|ZDM8?ej+e+m|}9i*j{wIre0B*0N|-{tnLeXcH%s)c#`aZH|s z5;zD$o!>zZdGn*cJ{_Kq?b8n!y{5S22}9!tBOad^!G?Xg?0U7iE*GiBNi_#Pak8hB zhTt+5qbo5A1YNNPR&cDY>I+^Be|{b( zQnID)#pPGsJKRi5yW3U+<+a+Ltt^IbmCLvqzIL>X`lY2H?a9&n$m?FCrDv`f+&?PM zcU~l3(xzeY6X-yYvW69=AbnZV_jZ^4)aUZ=4xJ9_qeutNDq+O!;qi{~BDltu-hX8W zF5&F!G8DLiG>{w5knSBoen)_sldae&Dr6H)C6}UPr<-1tQ5CrtbtUV43g$kTQF^RI z-u<=f);InV74y9|f)Uvh3Byz~3dSHSPPl?AvNPt|CaLr3$1qd{Yn4|q4Wy}~bo`!1 zgCyj=7p~{oBSMXrguH2a#=YR`<4n=t?Ee1L<$cZOhJhqhMiXwC(Az0?$wKi8dfzns zi-U$K-(lwG4539Sy(!w9<(}M^I5#C?gK0CIl z+W+&loyJJB;>I6l{xaLs&E5?BV_pqIlbw5nvmlgE3*~cVs50f7<9HV055O|=Q7%=| zoJd}PbD!AWD9;l@ChiV*H%78A7l4+(fW(&Qc3~@?jhG`HBtJ^hW-BD5sGvdRol%%c0x2o4A*saLD-6SR z#@!~=D*z#^tm4!F?{R11;P1@rVOPfRfaR=<+$*DryFOjp;|zrZ4)SaBjf=T>F>0}= zzmu6}nk=*BMN zAp0tHlZ7qZ6KJL*v(c#6DK~%3=7cI0(vmMBhKt_1!!RlVis(9g4_`H}IO>Mk)IX{a zduJnWsL265SsDkTe#<&dydBFurC0K8m5G*SsUiK-qiKMX6hZEZ@P>98u9odIiPMd@ z>;;hfeAF9Ws&s2L{{$_PeNg3~vn3H>XR*+C?KB>)ZbdNrAQnoV4%U<*OP&?ZGLvQc z_QKxn>YaJ_yNmAXA)z=N?ru?9J5+_049fvODjjKF_Cm!51k4vUWq8CT_*KeWW1w+$ANx4#)c6THNl}Q!GycouW4{9Z}REzg}?{1N6 zBaZyjQaO_^N#c2BO}bm^lFn(W9CdvhNwI`($S0<9XvZyCFC75_TG+ShEP_3#Acx$q zXz=vcX6vnAAtG;)EqC~KNg^T1{34l`rsKr_|GiDqiU)mTos~FB{Fm~n(49#Cmr=5QU)~UFzOh}U&ve_=Ub&Vg0qJx z29ELAlZ`QW>j!Dbd8Rv(B2O!)_s|4oI@JYpWzXQ7HKt{{utR_-f6#O$V%B5l>Rxo2 zp`O@&3E@vPz!-LlY>khjTZSm0@q=K*jygRAhgAV1D=lD)G6hKDWZ$(AM7i0$hsjN_ z!L^GM)1;xCqV?lA*80uB+GIn22hJ;k=`#U-))TLdj>k(0gByF9udy;dmK~6ocf6v~ zbJ7*+rOo7`4u$#ziMviwBJ>3Zt0CrrA9XK(4{3bI^$K9HadZsP4BZZn} z+I5@9i~?+{Xs7;!=AIQrAN$n`YfyJ-WLar5a+?_eJ74kWLb%H$#|I-qn?hJ-{~__a z!x=W5?Y}re2{R;Y)cAgX@#iVlddD)Jv?lkj=KSXGLH|5EI zY$fn%JJm#@9zO-4olcA|1H}7ZE=AQEE*HB13W64_@w|nhReTR(NN{-$&oC3KP8 z9|R4{p5rHLHB-HuFR$GeK?+m+_8Iu1UC#t7Voj2WBMYEs$~K9(A9*@9$u>O-ux{D1 z0EsMrRC=;W{0)tgNVyT*JCLDm9zw52S-0t@b$9wse?Yr~(arp=RCq(hAUXrB->bKm2jmn*}nGIAxlVUj&lHzzjjixh; z%MU(Vxw#@;H-rQY%n3|G;6M2RFQlY#mAE98z!(GX=F_@ay-$&1?- z@7~6J_x5zhK;u|(5i8+lE06PwIVW~muoa1F9H%@_vYNZwVwK`Q=RB>#@V9ef7=C?# zCdS$bDVXw;WeKkZ1KtEbFU*4$sluQf zXz?np{UukXeTEJmz&xKL!7p{F2v3#mWls-P%GXE`hIYxhT=}reTfYUT+@iL?HJN-Y z9A4PBG8sHN+yJ3*Cgc)qaHfr&81@_-q~?m8td}8ghcH;)4`i@V2EK zlfG;!+&y+C*13&N)Qxlo>CZr%7J=GhEi6NzzgH}2JjR`@-;DMr^^Sc{Z+EV$0J6it z_SBssE_t&PqZly^6lB8x-v!5w%&~Xnt0x@jD96E8mJ4BK*qrU10Nf;P^$PZuJ;@Wh z-R(@GrlgNGsuP@*6h-sXN`qk^A75LqzoHY7n;N0HvpBIQNERgbsGOr{q%S|c;Sf!Y zds1>FKVPz#`Plgzhp^B!@vv}{+fQl2&tePi?6!aOQ#d*f|65Kk3XHExNznQge#l+! zPyqa$;%S9f)*#GI=!y;JpyQmhnqS2qa8LH`XW_jk8M5ldA}#|q7h!2QxHD9ufO>xm zhE=1FjOkI`#fD0R063YDOkU^GSzYL&@13d)&RNuJr@VXGwZ~{vDAj>O?{|lyX9UjJ z-(&nOK;oP~1hv#F*1^q&JHt{#Ei9(CoLv$G>2di9O`|W{9AZJJz+V;&u>^KV=AG|5 zpO8}R!}>Itxo)5d;lKs%m@LhHH-cDTvJ4KIU3Q&^T|fzMx*ERZSCFR4b6XMTDK62% z0>AR5BcdEolp(yTk$#*#Fi{`U_qF+i8|g^j}s2{L5X`G&|w>uLyA&kjg9Dm>L7KEf8=(N{8(pGLi zyg~&BZ4BwAv87)ahe4|@@OKqQ_}=U3bWhW`5y)U}9N54ZVc>G03}uR~=S{i>oRr#I zg|0PbM>2HS=o>BCkwww!&E*px3K0XRE*0KMf2pnFdX*D$^8_tIDEU@aa61)a`vGmj zdoGq^-GP%!n4>5Z{9ACo?KjDTa`SWDT>o7u+)Y15J@saoHb_De% zRJ5i}qxQPdy)UC%`seKajdIrYm%IkNvl=LIxHQZ>Y<@;WNss9~)9gF{jqZrhdkOGsrj;#ZEM6`e0s8MC;O}r8ZNPu!duFyd+-w9-B%3zSd};ZV`JSV#5)DS z5_YoBvIU)9|0aDT0Xl1_8(tZnzasLrzQ(l*U0)R4Ww)2eh_=ngE-%r^Gl;Z_RyUPa zH;$rRHA!c{@0M4=`DTJp|>k%}V_1%@< znhn?vuimOlG(ju?y80u{p2$>{_Rs6z=s&QC^7>*lFe${nEE(pFcG%GCKU|)Ra?n?& z3|TIpCd>PvtjVH9_I7<5!(!kq)s|klhs~~)e5PQ6@VknUQ9_+h9Hwvj;48Z5R%Jqr z;Ql39jT$m4subt)I2Rx_m)L@9PnY!!*MG zA#sxfZ$7uay`?%WkFPAS6lk^+#XvT9w%m<1SyF&ow>sGqzh3`32=frY^?3VjUP)xp za#UESy?*yB8cl`COI%^9iyhUXptvcI2YArE{D)y0+v#9{E4(>FDDRHCP^WrEBP3+| z2=^OzK8w^JsqjRA`3A%8!@`-sn_=GL6Plza&Xr087 zjr)V!s`3bQ{k4F$_CmmX)qf`s^HUG(CIc0L`9sW&i!DW4db*aG+3#ogwQtA(xM+E` ze6i|c>Q~;{pMVWd&i(J0^`k#nE5*_8$_WXA`*RBWe@%}^+Ve0qR30o{q0|-<|Da@V z65z5u=uvum2RaT*q5!&A6LRq{KJZ8gR*U_mB`~!+0_P^T4|?||N>=u4)-ua+DqPp% zCkN){%gD}bZwQ4$?iE??J8qUuw^t93Z6oXIT&2@7U{Tk5z~8I>|3N zphAd6`P7o=y0Wz)sSBX4IiBy`*<-0Yc$C9Fowv;0KibsG9ey0E=c-T(7sdXBTyHg2VGmSKZK@U@^=sT*uu8VdP{b6%QBAn z3Jl#X6pBH9`?ML%;I*FNVVYByeujCxD7vf$(t*6UhQB^36)PKHKx^c)jqYaj0q=AM z77|w!i=%uuv|^PBjLfPp$4;uYG~SgObLUlU(xr-FcdZ2Vy8-x98N$Pe6ty^o>M~i_)TdP?sHo=-S%iUSUA-=;o=7>CwtIea=+E-i?x`WHT&19oGdD-XzBDk89 z(1j0nFGt7w0Z+D03hM44u^im(u~4w1{C8ux;u*@ziKzoeuwf2s(jpB&e`eBeF{I&L zvn68Z&0X>d%(<7xXm{{MahV_zQEwgCn;(6O3-zDI&2%`(HQar=EwFZC_wVinn|&9f zQeE>>L|b)0(b=Q9p+JR{`o%(*?x;e4oPeTJGDQ!1_MTwNDy4-~8ipHDLcf57rI?aL zvBJNAy9>AKGa_g~Eo0Ue^y3e!TVnt#-;~wq>Vw7Cve6`UITpE>IN6|mW#e31b2Fih z@(yBLWpX@v5LSk^%RDwyU*>%z#Ke2J2WPqhiisy(ipYcP==%OAv3zAOu6GTFV?4hBKs%5GbMcy zh_LMF_|cTupQ>hDNy4pA~#rV?f zH1IWu^ruM`FIh(`ujwZ;@8|BMVE}-TmqRS7vBy{0vHa&x{Q*p9vXr?q!I?dq zSv84g^YFcO{~$E9z|4q9qf=i-3M~e|7M75yIOY9BuS!eCN03)3Hp^XXlgIrgwFUPr zNCMU&oKQ3B*r9uBlg5ZZL{R4$x6S}w!4Rs84WNQ%9x$!d3wf>!?mL}7DJo^j}7U~=~=*WGO}VWX`mMVY#=iodVJHO%%A7<_(2!Hp<#Or_2)>?JF(+8HOIc)PBfBS zf{gnq2+jTT7qHRg<(FT6qRX7`ntU^5t6|nQ=;Ags934YFIugoW%2<`{KOX_cKVxH_ zZHWSm^3NhAce%@5dh0>@hqK8DNUyKQXC(F1r#|%xOTX6hH|!llomw26Rd@_Cy1~+O(lK)-hlw5I_GMc_Dfi z-vmd*^AJfp$J|f2+7a>lN7Bu?c)}z-Q=9V6cLDKy6fWOnN|Tavj#hsP!*6S7SPnzo zS{#N8=CSz$#0Q_>KL;ePuCC2Aa8J%2{+Ofe30(^(yfp+Its}rz!3sz5-AD27kH3C= z^rg$&k@J&0x#yW{Q*BujK{(IcFRv3{9PyK1M|qV-(q0E^F!+W|;ifSBu7-x)V5nz{ zATGxk5@8rjf;ssH=v6HZ#>CgsWHjKWz(U6TmLW4czLl#aqDoa^}S=b9&?bCh>j-++~3-jVks-jAj( z4Podri2A%Gh2;xz6b!$pp<(wJ>fEsqJ%JuvLy(?5z5pfk)_Qd&!sh)S@{ou048ug2 zpMb`|+5&tPG!$36+SPhxp>eeJ1{e-eq@A?4AcY{TL^)_p0meeiW-%V+nru%I2Cdy+lH}o<*SzNH$xnXr z>_t0j=+bIvI1CJR@>mGNJC=>Wm^PsdOR69}Tz1)Iy|T^JB+EsF0i!geNTj?Ysz3O_ z5AJsr(tzCK9{1>N8Z;yfaLzyf{C?QM@QB!sTwAxm3Pv23?4gk5)eT+TC+ZuLPy{k( zrY|V-S<)N~#oo|xco^#FUQja4ItI$Kspq@Iw(s1O&!Lzb8V(;rojoy}1j8Q}jrkkS zS`78LVM`3f*U)fwVW{6{H8zR#>o62kL&KE|L;XK%uuTIn6hT8n!x#gPoOKvJuc4t~ zDGa=Ia2T@J(9m!w7l({udZsh@+L3nq&X~002ovPDHLk FV1h@XzeNB5 literal 82992 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 literal 79787 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 diff --git a/src/win32/Srb2win.ico b/src/win32/Srb2win.ico index 6e667b61c84414bc9758ea57721bb07d85a62083..4e3f81336fa0835b1fdaea4cd5b4f43838647c5a 100644 GIT binary patch literal 125191 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 FV1h@XzeNB5 literal 82992 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 FV1h@XzeNB5 literal 82992 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 Date: Thu, 3 Jan 2019 16:30:50 -0500 Subject: [PATCH 38/86] Update SOC version, make base SRB2 SOC throw a warning --- src/dehacked.c | 6 +++++- src/dehacked.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 8cb704125..c6c9cceda 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -3686,13 +3686,17 @@ static void DEH_LoadDehackedFile(MYFILE *f, UINT16 wad) // no undo support for this insanity yet //DEH_WriteUndoline(word, word2, UNDO_HEADER); } - else if (fastcmp(word, "SRB2")) + else if (fastcmp(word, "SRB2KART")) { INT32 ver = searchvalue(strtok(NULL, "\n")); if (ver != PATCHVERSION) deh_warning("Patch is for SRB2Kart version %d,\nonly version %d is supported", ver, PATCHVERSION); //DEH_WriteUndoline(word, va("%d", ver), UNDO_NONE); } + else if (fastcmp(word, "SRB2")) + { + deh_warning("Patch is only compatible with base SRB2."); + } // Clear all data in certain locations (mostly for unlocks) // Unless you REALLY want to piss people off, // define a custom gamedata /before/ doing this!! diff --git a/src/dehacked.h b/src/dehacked.h index 411cb6c1b..27ceae58c 100644 --- a/src/dehacked.h +++ b/src/dehacked.h @@ -54,7 +54,7 @@ extern const char *superactions[MAXRECURSION]; extern UINT8 superstack; // If the dehacked patch does not match this version, we throw a warning -#define PATCHVERSION 210 +#define PATCHVERSION 102 #define MAXLINELEN 1024 From 57b25fd385ad61d52900059124d3af5d006633c2 Mon Sep 17 00:00:00 2001 From: SeventhSentinel Date: Thu, 3 Jan 2019 16:43:01 -0500 Subject: [PATCH 39/86] Actually, let's just do "1" --- src/dehacked.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dehacked.h b/src/dehacked.h index 27ceae58c..683fe7d94 100644 --- a/src/dehacked.h +++ b/src/dehacked.h @@ -54,7 +54,7 @@ extern const char *superactions[MAXRECURSION]; extern UINT8 superstack; // If the dehacked patch does not match this version, we throw a warning -#define PATCHVERSION 102 +#define PATCHVERSION 1 #define MAXLINELEN 1024 From 74aba4682319ea7b92ccda88b240ea96194bf1cc Mon Sep 17 00:00:00 2001 From: SeventhSentinel Date: Fri, 4 Jan 2019 04:44:55 -0500 Subject: [PATCH 40/86] In-game music credits --- src/d_netcmd.c | 1 + src/g_game.c | 3 ++ src/g_game.h | 1 + src/hu_stuff.c | 54 +++++++++++++++++++ src/k_kart.c | 3 ++ src/p_spec.c | 1 + src/s_sound.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++++ src/s_sound.h | 17 ++++++ 8 files changed, 224 insertions(+) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index f29798382..7e7560d73 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -788,6 +788,7 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_consolechat); CV_RegisterVar(&cv_chatnotifications); CV_RegisterVar(&cv_chatbacktint); + CV_RegisterVar(&cv_songcredits); //CV_RegisterVar(&cv_crosshair); //CV_RegisterVar(&cv_crosshair2); //CV_RegisterVar(&cv_crosshair3); diff --git a/src/g_game.c b/src/g_game.c index ac8e27a37..762e456a2 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -430,6 +430,9 @@ consvar_t cv_chatbacktint = {"chatbacktint", "On", CV_SAVE, CV_OnOff, NULL, 0, N static CV_PossibleValue_t consolechat_cons_t[] = {{0, "Window"}, {1, "Console"}, {2, "Window (Hidden)"}, {0, NULL}}; consvar_t cv_consolechat = {"chatmode", "Window", CV_SAVE, consolechat_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +// Display song credits +consvar_t cv_songcredits = {"songcredits", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; + /*consvar_t cv_crosshair = {"crosshair", "Off", CV_SAVE, crosshair_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_crosshair2 = {"crosshair2", "Off", CV_SAVE, crosshair_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_crosshair3 = {"crosshair3", "Off", CV_SAVE, crosshair_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; diff --git a/src/g_game.h b/src/g_game.h index 035a59bd1..8deff076d 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -55,6 +55,7 @@ extern INT16 rw_maximums[NUM_WEAPONS]; // used in game menu extern consvar_t cv_chatwidth, cv_chatnotifications, cv_chatheight, cv_chattime, cv_consolechat, cv_chatspamprotection, cv_chatbacktint; +extern consvar_t cv_songcredits; //extern consvar_t cv_crosshair, cv_crosshair2, cv_crosshair3, cv_crosshair4; extern consvar_t cv_invertmouse/*, cv_alwaysfreelook, cv_chasefreelook, cv_mousemove*/; extern consvar_t cv_invertmouse2/*, cv_alwaysfreelook2, cv_chasefreelook2, cv_mousemove2*/; diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 9bdf9bd7d..08aaec775 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -51,6 +51,7 @@ #include "lua_hook.h" #endif +#include "s_sound.h" // song credits #include "k_kart.h" // coords are scaled @@ -103,6 +104,8 @@ static patch_t *tokenicon; // crosshair 0 = off, 1 = cross, 2 = angle, 3 = point, see m_menu.c static patch_t *crosshair[HU_CROSSHAIRS]; // 3 precached crosshair graphics +// song credits +static patch_t *songcreditbg; // ------- // protos. @@ -290,6 +293,8 @@ void HU_LoadGraphics(void) tinyemeraldpics[4] = W_CachePatchName("TEMER5", PU_HUDGFX); tinyemeraldpics[5] = W_CachePatchName("TEMER6", PU_HUDGFX); tinyemeraldpics[6] = W_CachePatchName("TEMER7", PU_HUDGFX); + + songcreditbg = W_CachePatchName("MUSCRED", PU_HUDGFX); } // Initialise Heads up @@ -2050,6 +2055,51 @@ static void HU_DrawDemoInfo(void) } } + +// +// Song credits +// +boolean songcreditinit = false; + +static void HU_DrawSongCredits(void) +{ + static UINT8 transparency = NUMTRANSMAPS; + static INT32 x = 0; + UINT16 len = V_ThinStringWidth(songCredits[cursongcredit.index].info, V_ALLOWLOWERCASE|V_6WIDTHSPACE); + INT32 bgt; + + if (!songcreditinit) + { + memset(&cursongcredit,0,sizeof(struct cursongcredit)); + songcreditinit = true; + return; + } + + if (cursongcredit.anim) + { + if (transparency > 0) + transparency--; + if (x < (len+16)) + x += ((len+16) - x) / 2; + cursongcredit.anim--; + } + else + { + if (transparency < NUMTRANSMAPS) + transparency++; + if (x > 0) + x /= 2; + } + + //V_DrawThinString(0, 0, 0, transparency); + + bgt = (NUMTRANSMAPS/2)+(transparency/2); + if (bgt < NUMTRANSMAPS) + V_DrawScaledPatch(x, 30, V_SNAPTOLEFT|(bgt<flags & ML_EFFECT4)); + S_InitMusicCredit(); // Except, you can use the ML_BLOCKMONSTERS flag to change this behavior. // if (mapmusflags & MUSIC_RELOADRESET) then it will reset the music in G_PlayerReborn. diff --git a/src/s_sound.c b/src/s_sound.c index 8b5d29ed5..f84b9cf5e 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1541,6 +1541,132 @@ static void *music_data; static UINT16 music_flags; static boolean music_looping; +songcredits_t songCredits[] = { + // Race maps + {"kmap01","Toot Toot Sonic Warrior (Instrumental) - Sonic CD"}, + {"kmap02","Chao Race (Extended Mix) - Sonic Adventure 2"}, + {"kmap03","Touhou 10.5: Broken Moon (Jazz Arrangement) - Tokyo Active NEETs"}, + {"kmap04","Mortvia Fountain - Castlevania: Curse of Darkness"}, + {"kmap05","Let's Go Away - Daytona USA"}, + {"kmap06","War Machine - Marvel vs. Capcom"}, + {"kmap07","Sonic 3D Blast: Green Grove Zone, Act 1 (Remix) - Tee Lopes"}, + {"kmap08","Sonic Drift 2: Hill Top (Remix) - SeventhSentinel"}, + {"kmap09","Industrial District - Columns III"}, + {"kmap10","Dream Uneven Bars - Mario & Sonic at the London 2012 Olympic Games"}, + {"kmap11","Moon Palace 2 - Drift City"}, + {"kmap12","Authentic Sky - Tekken 4"}, + {"kmap13","Plant Man's Stage - Rockman 6 Complete Works"}, + {"kmap14","Twinkle Cart - Sonic Adventure"}, + {"kmap15","Pleasure Castle - Sonic Adventure"}, + {"kmap16","Horizon Heights Zone, Act 2 - Sonic: After the Sequel"}, + {"kmap17","Frost Man's Stage - Mega Man 8"}, + {"kmap18","Foliage Furnace Zone, Act 1 - Sonic: After the Sequel"}, + {"kmap19","Sand Ocean - F-Zero"}, + {"kmap20","El Anoir Field South - LaTale"}, + {"kmap21","Western GunRun - LaTale"}, + {"kmap22","Jr. Street - Mario Hoops 3 on 3"}, + {"kmap23","Fight or Flight (Air Armada) - Rivals of Aether"}, + {"kmap24","White Land I - F-Zero"}, + {"kmap25","Donkey Kong Country: Fear Factory (Remix) - Vincent Rubinetti"}, + {"kmap26","Desert Palace - Sonic the Hedgehog 3"}, + {"kmap27","Aurora Atoll Zone - SeventhSentinel"}, + {"kmap28","Hol Horse - JoJo's Bizarre Adventure (Arcade)"}, + {"kmap29","Red Barrage Area - Sonic Adventure"}, + {"kmap30","Reach Out To The Truth - Persona 4 Arena"}, + {"kmap31","Ave de Rapina - Beatmania IIDX 7th Style"}, + {"kmap32","Atomic Waste Zone - Michael Staple"}, + {"kmap33","Desert Area - LaTale"}, + {"kmap34","DuckTales: The Moon (Remix) - Chris Holland, Luke Kwing"}, + {"kmap35","Eggman Empire Zone - Michael Staple"}, + {"kmap36","Shooting Star - Elwood"}, + {"kmap37","Vigaku (Theme of Ein) - Dead or Alive 2"}, + {"kmap38","Lovely Gate 3 - Sonic Adventure 2"}, + {"kmap39","The Biggest Dreamer - Digimon Rumble Arena"}, + {"kmap40","Soft Collision - Mighty Switch Force 2"}, + {"kmap41","Ganbare Dochu - Konami Krazy Racers"}, + {"kmap42","Theme of 'CHAO' - Sonic Adventure"}, + {"kmap43","Join Us 4 Happy Time - Sonic Adventure"}, + {"kmap44","Search ~ In the Midst - Ace Attorney: Justice for All"}, + {"kmap45","Venezia, Italy - Tekken"}, + {"kmap46","Balloon Panic - Sonic Drift 2"}, + {"kmap47","Dimension Heist - Sonic Mania"}, + {"kmap48","MKSC Sky Garden (Remix) - Mario Kart DS"}, + {"kmap49","MKDS Peach Gardens (Remix) - Mario Kart Wii"}, + {"kmap50","MKSC Rainbow Road (Remix) - Panman14"}, + {"kmap51","Donut Plains - Super Mario Kart"}, + {"kmap52","Mario Circuit - Super Mario Kart"}, + {"kmap53","Ghost Valley - Super Mario Kart"}, + {"kmap54","Bowser Castle - Super Mario Kart"}, + {"kmap55","Vanilla Lake - Super Mario Kart"}, + // Battle maps + {"kmapb0","Tropic Turf Zone, Act 1 - Karl Brueggemann"}, + {"kmapb1","Seascape - Knuckles' Chaotix"}, + {"kmapb2","Boss Challenge I - Diddy Kong Racing"}, + {"kmapb3","Al's Toy Barn - Toy Story 2 (PS1)"}, + {"kmapb4","SRB2: Techno Hill Zone, Act 1 (Remix) - SeventhSentinel"}, + {"kmapb5","Sonic the Hedgehog: Marble Zone (Remix) - Tee Lopes"}, + {"kmapb6","Phi Battle - Sonic Battle"}, + {"kmapb7","Khan - JoJo's Bizarre Adventure (Arcade)"}, + {"kmapb8","Underground - Wild Guns Reloaded"}, + {"kmapb9","Disease Transport - DrTapeworm"}, + {"kmapba","Shining Force II: Shrine (Remix) - gxf4c3"}, + {"kmapbb","Bad Taste Aquarium - Sonic Adventure"}, + {"kmapbc","Space Ship: Strut - Space Channel 5"}, + {"kmapbd","Strollin' the City - Karl Brueggemann"}, + {"kmapbe","Fakery Way - Sonic Adventure"}, + {"kmapbf","Twinkle Circuit - Sonic Adventure"}, + {"kmapbg","Never Let It Go - Sonic the Fighters"}, + {"kmapbh","Power Plant - Sonic Heroes"}, + {"kmapbi","Tails' Lab - Sonic Battle"}, + {"kmapbj","Mega Man X: Armored Armadillo's Stage (Arranged) - Synthescissor"}, + {"kmapbk","School Ordeal - Danganronpa V3: Killing Harmony"}, + {"kmapbl","Mementos - Persona 5"}, + {"kmapbm","Special Stage (US) - Sonic CD"}, + {"kmapbn","Battle Mode - Super Mario Kart"}, + {"kmapbp","Vanilla Lake (Beta) - Super Mario Kart"}, + {"kmapbr","Choco Mountain - Mario Kart 64"}, + // Hell maps + {"kmaph0","Neo City - Drift City"}, + {"kmaph1","World Open Finals - Mario Power Tennis"}, + {"kmaph2","Arid Sands: Day - Sonic Unleashed"}, + {"kmaph3","Graveyard Gig - Sonic & All-Stars Racing Transformed"}, + {"kmaph4","Dr. Robotnik's Mean Bean Machine: 2 Player (Remix) - Jonny Atma, The8BitDrummer"}, + {"kmaph5","Living In One More City - Nib Roc"}, + {"kmaph6","Ema Skye ~ Scientific Detective - Apollo Justice: Ace Attorney"}, + {"kmaph7","4 Minutes Before Death - Ghost Trick: Phantom Detective"}, + {"kmaph8","Napoleon Disappeared!? - Pop'n Music 10"}, + {"kmaph9","Retro Maze - Pac-Man World Rally"}, + {"kmapha","Midnight Freeze Zone - Arrow, SSNTails"}, + {"kmaphb","Townsville Raceway - Cartoon Network Racing (DS)"}, + {"kmaphc","F-Zero: Silence (Remix) - Tony Thai"}, + {"kmaphd","Rainbow Road - Super Mario Kart"}, + {"kmaphe","Meadow Match Zone - Arrow, SSNTails"}, + {"kmaphf","merge-break - xaki"}, + // Misc + {"titles","Fluvial Beat Deposits - Simon Stalenhag"}, // Stålenhag + {"vote", "Chaotic World - Knuckles' Chaotix"}, + {"voteea","Decision - Knuckles' Chaotix"}, + {"voteeb","Decision - Knuckles' Chaotix"}, + {"kinvnc","Invincibility - Sonic the Hedgehog 3"}, + {"kgrow", "Surging Power - Knuckles' Chaotix"}, + {"kstart","Race Start - Diddy Kong Racing"}, + {"estart","Phantom Ruby Ambience - Sonic Mania"}, + {"krwin", "Practice - Sora"}, + {"krok", "Practice - Sora"}, + {"krlose","Hit 'Em Up (Instrumental) - 2Pac"}, + {"krfail","Results - F-Zero"}, + {"kbwin", "Wild Charabom Defeated! - Bomberman Tournament"}, + {"kbok", "Deadly Bomber Base Cleared! - Bomberman Tournament"}, + {"kblose","You Lose! - Bomberman Tournament"}, + {"racent","Menu - Metropolis Street Racer"}, + {"wait2j","Competition Results - Sonic the Hedgehog 3"}, + {"chalng","Sonic the Hedgehog 3: Minor Boss (Dual PCM) - MarkeyJester"}, + {"credit","Moot Booxle - Chomp"}, + {NULL,NULL} +}; + +struct cursongcredit cursongcredit; + /// ------------------------ /// Music Status /// ------------------------ @@ -1605,6 +1731,24 @@ boolean S_SpeedMusic(float speed) return I_SetSongSpeed(speed); } +void S_InitMusicCredit(void) +{ + UINT16 i; + + if (!cv_songcredits.value) + return; + + for (i = 0; songCredits[i].lump; i++) + { + if (!stricmp(songCredits[i].lump, music_name)) + { + cursongcredit.index = i; + cursongcredit.anim = 5*TICRATE; + return; // Don't return when there's SOC support, to see if there's any "replacement" credits? + } + } +} + /// ------------------------ /// Music Playback /// ------------------------ diff --git a/src/s_sound.h b/src/s_sound.h index c83188cf5..7ee28047b 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -128,6 +128,23 @@ boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi); // Set Speed of Music boolean S_SpeedMusic(float speed); +// Music credits +extern struct cursongcredit +{ + UINT16 index; + UINT16 anim; +} cursongcredit; + +typedef struct +{ + const char *lump; + const char *info; +} songcredits_t; + +extern songcredits_t songCredits[]; + +void S_InitMusicCredit(void); + // // Music Routines // From 9365f7f235aa34f3463cb27bdf345aacf5ec04d7 Mon Sep 17 00:00:00 2001 From: SeventhSentinel Date: Fri, 4 Jan 2019 16:47:03 -0500 Subject: [PATCH 41/86] Minor touchups/cleanup --- src/hu_stuff.c | 48 +++++++++++++++++++++--------------------------- src/p_setup.c | 4 ++++ src/s_sound.c | 2 ++ src/s_sound.h | 2 ++ src/v_video.c | 12 ++++++++++-- 5 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 08aaec775..2602cda2f 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -294,7 +294,7 @@ void HU_LoadGraphics(void) tinyemeraldpics[5] = W_CachePatchName("TEMER6", PU_HUDGFX); tinyemeraldpics[6] = W_CachePatchName("TEMER7", PU_HUDGFX); - songcreditbg = W_CachePatchName("MUSCRED", PU_HUDGFX); + songcreditbg = W_CachePatchName("K_SONGCR", PU_HUDGFX); } // Initialise Heads up @@ -2059,45 +2059,39 @@ static void HU_DrawDemoInfo(void) // // Song credits // -boolean songcreditinit = false; - static void HU_DrawSongCredits(void) { - static UINT8 transparency = NUMTRANSMAPS; - static INT32 x = 0; - UINT16 len = V_ThinStringWidth(songCredits[cursongcredit.index].info, V_ALLOWLOWERCASE|V_6WIDTHSPACE); + const char *str = va("\x1F"" %s", songCredits[cursongcredit.index].info); + INT32 len = V_ThinStringWidth(str, V_ALLOWLOWERCASE|V_6WIDTHSPACE); + INT32 destx = (len+7); + INT32 y = (splitscreen ? (BASEVIDHEIGHT/2)-4 : 32); INT32 bgt; - if (!songcreditinit) - { - memset(&cursongcredit,0,sizeof(struct cursongcredit)); - songcreditinit = true; - return; - } - if (cursongcredit.anim) { - if (transparency > 0) - transparency--; - if (x < (len+16)) - x += ((len+16) - x) / 2; + if (cursongcredit.trans > 0) + cursongcredit.trans--; + if (cursongcredit.x < destx) + cursongcredit.x += (destx - cursongcredit.x) / 2; + if (cursongcredit.x > destx) + cursongcredit.x = destx; cursongcredit.anim--; } else { - if (transparency < NUMTRANSMAPS) - transparency++; - if (x > 0) - x /= 2; + if (cursongcredit.trans < NUMTRANSMAPS) + cursongcredit.trans++; + if (cursongcredit.x > 0) + cursongcredit.x /= 2; + if (cursongcredit.x < 0) + cursongcredit.x = 0; } - //V_DrawThinString(0, 0, 0, transparency); - - bgt = (NUMTRANSMAPS/2)+(transparency/2); + bgt = (NUMTRANSMAPS/2)+(cursongcredit.trans/2); if (bgt < NUMTRANSMAPS) - V_DrawScaledPatch(x, 30, V_SNAPTOLEFT|(bgt<= 0x80 && (UINT8)c <= 0x8F) //color parsing! -Inuyasha 2.16.09 continue; - c = toupper(c) - HU_FONTSTART; + if (!lowercase || !tny_font[c-HU_FONTSTART]) + c = toupper(c); + c -= HU_FONTSTART; + if (c < 0 || c >= HU_FONTSIZE || !tny_font[c]) w += spacewidth; else + { w += (charwidth ? charwidth - : (option & V_6WIDTHSPACE ? max(1, SHORT(tny_font[c]->width)-1) : SHORT(tny_font[c]->width))); // Reuse this flag for the alternate bunched-up spacing + : ((option & V_6WIDTHSPACE && i < strlen(string)-1) ? max(1, SHORT(tny_font[c]->width)-1) // Reuse this flag for the alternate bunched-up spacing + : SHORT(tny_font[c]->width))); + } } + return w; } From 6da562f72f7b4eea30ed9b1399f3623d91b9e56e Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 5 Jan 2019 09:54:45 -0500 Subject: [PATCH 42/86] Revised comments --- .travis.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1ae42e9cc..b717ec187 100644 --- a/.travis.yml +++ b/.travis.yml @@ -565,16 +565,20 @@ addons: before_install: # Initialize Deployer defaults - . ./deployer/travis/deployer_defaults.sh + # Initialize Deployer; check if Deployer is enabled # This needs to be run in the current shell so that $__DPL_ACTIVE is set for this session - . ./deployer/travis/deployer.sh - # Also check if we should now terminate + + # Also check if we should now terminate -- see `deployer.sh` for conditions. + # This should never happen on non-release buildbots when Deployer is not triggered. - if [[ "$__DPL_TRY_TERMINATE_EARLY" == "1" ]]; then if [[ "$__DPL_ACTIVE" != "1" ]]; then echo "Exiting early because this job is not deploying."; exit; fi; fi + # If we're triggered by release tag, force ASSET_FILES_OPTIONAL_GET=1 - if [[ "$__DPL_TAG_ELIGIBLE" = "1" ]]; then ASSET_FILES_OPTIONAL_GET=1; @@ -607,6 +611,7 @@ before_script: fi # Get asset files (required for MD5) + # See `deployer_defaults.sh` for asset download path - if [[ "$ASSET_ARCHIVE_PATH" != "" ]]; then if [ -f "$(basename $ASSET_ARCHIVE_PATH)" ]; then echo "$(basename $ASSET_ARCHIVE_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_PATH))"; @@ -656,5 +661,8 @@ script: after_success: # Run the Deployer scripts + - if [[ "$__DPL_ACTIVE" != "1" ]]; then + exit; + fi; - . ../deployer/travis/deployer_ftp.sh - . ../deployer/travis/deployer_dput.sh From c88299a81b7ade49b8e18a03ac169f0a69c74d3e Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 5 Jan 2019 10:17:33 -0500 Subject: [PATCH 43/86] Don't terminate in after_success because it halts the log abruptly --- .travis.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index b717ec187..bf7c1b613 100644 --- a/.travis.yml +++ b/.travis.yml @@ -660,9 +660,7 @@ script: fi; after_success: - # Run the Deployer scripts - - if [[ "$__DPL_ACTIVE" != "1" ]]; then - exit; - fi; + # Run the upload scripts + # These do nothing if Deployer is not triggered - . ../deployer/travis/deployer_ftp.sh - . ../deployer/travis/deployer_dput.sh From 3e52eb1de51116d11f9b0beb5ff7f0792e799adf Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 5 Jan 2019 19:20:58 -0500 Subject: [PATCH 44/86] * Add homebrew tap mazmazz/srb2 * Use sdl2_mixer from mazmazz/srb2 due to removed options from homebrew-core * Use `brew install --build-bottle` to build compatible libraries for old Macs --- .travis.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index bf7c1b613..72f2261d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -586,10 +586,18 @@ before_install: install: + # Install OS X library dependencies via Homebrew + # `brew install --build-bottle` builds libraries for x86_64's lowest common denominator CPU, core2 + # `sdl2_mixer` requires options from the formula tap https://github.com/mazmazz/homebrew-srb2 + # `brew postinstall` runs post-install scripts after building a bottle - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; - brew install sdl2 game-music-emu zlib p7zip; - brew install sdl2_mixer --with-flac --with-mpg123; + brew tap mazmazz/srb2; + fi; + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + brew install --build-bottle sdl2 game-music-emu zlib p7zip; + brew install --build-bottle mazmazz/srb2/sdl2_mixer --with-flac --with-mpg123; + brew postinstall sdl2 game-music-emu zlib p7zip mazmazz/srb2/sdl2_mixer; brew install cmake||true; fi - mkdir -p $HOME/srb2_cache From 8d86c537e0668bad609204691dc5c220e1cccc0f Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 5 Jan 2019 19:27:34 -0500 Subject: [PATCH 45/86] OS X set CFLAGS+="-march=core2" for compatible binaries with old Macs --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index 72f2261d0..170943ac4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -584,6 +584,9 @@ before_install: ASSET_FILES_OPTIONAL_GET=1; fi; + # Print version info + - gcc --version; + install: # Install OS X library dependencies via Homebrew @@ -651,6 +654,10 @@ before_script: - mkdir package - export CFLAGS="-Wall -W -Werror $WFLAGS" - export CCACHE_COMPRESS=true + # If OS X, set -march=core2 to build compatible binaries with old Macs + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + export CFLAGS="${CFLAGS} -march=core2"; + fi; - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/bin -DCPACK_PACKAGE_DIRECTORY=$PWD/package -DSRB2_ASSET_HASHED="${SRB2_ASSET_HASHED}" -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}" -DSRB2_ASSET_DIRECTORY="${SRB2_ASSET_DIRECTORY}" From da0add55b0aa989db3f1b57e400af82e82e03ad4 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 5 Jan 2019 19:43:37 -0500 Subject: [PATCH 46/86] Use standard OSX brew bottles to speed up test buildbots --- .travis.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 170943ac4..893e729ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -590,18 +590,24 @@ before_install: install: # Install OS X library dependencies via Homebrew - # `brew install --build-bottle` builds libraries for x86_64's lowest common denominator CPU, core2 - # `sdl2_mixer` requires options from the formula tap https://github.com/mazmazz/homebrew-srb2 - # `brew postinstall` runs post-install scripts after building a bottle + # Do this differently for release buildbots: + # * `brew install --build-bottle` builds libraries for x86_64's lowest common denominator CPU, core2 + # * `sdl2_mixer` requires options from the formula tap https://github.com/mazmazz/homebrew-srb2 + # * `brew postinstall` runs post-install scripts after building a bottle - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; brew tap mazmazz/srb2; fi; - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - brew install --build-bottle sdl2 game-music-emu zlib p7zip; - brew install --build-bottle mazmazz/srb2/sdl2_mixer --with-flac --with-mpg123; - brew postinstall sdl2 game-music-emu zlib p7zip mazmazz/srb2/sdl2_mixer; - brew install cmake||true; + if [[ "$__DPL_ACTIVE" != "1" ]]; then + brew install sdl2 sdl2_mixer game-music-emu p7zip; + brew install cmake||true; + else + brew install --build-bottle sdl2 game-music-emu zlib p7zip; + brew install --build-bottle mazmazz/srb2/sdl2_mixer --with-flac --with-mpg123; + brew postinstall sdl2 game-music-emu zlib p7zip mazmazz/srb2/sdl2_mixer; + brew install cmake||true; + fi; fi - mkdir -p $HOME/srb2_cache From 0a40c19f7ac8f184581c620284a92a43024d771b Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 5 Jan 2019 19:49:25 -0500 Subject: [PATCH 47/86] Remove zlib from release brew packages (it was never in the original travis script) --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 893e729ac..5570b0062 100644 --- a/.travis.yml +++ b/.travis.yml @@ -603,9 +603,9 @@ install: brew install sdl2 sdl2_mixer game-music-emu p7zip; brew install cmake||true; else - brew install --build-bottle sdl2 game-music-emu zlib p7zip; + brew install --build-bottle sdl2 game-music-emu p7zip; brew install --build-bottle mazmazz/srb2/sdl2_mixer --with-flac --with-mpg123; - brew postinstall sdl2 game-music-emu zlib p7zip mazmazz/srb2/sdl2_mixer; + brew postinstall sdl2 game-music-emu p7zip mazmazz/srb2/sdl2_mixer; brew install cmake||true; fi; fi From 2a447f88006a91b1db1e35a2aef6a7161c430a1e Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 5 Jan 2019 19:56:27 -0500 Subject: [PATCH 48/86] Remove unnecessary version info call --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5570b0062..2a7efbebd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -584,9 +584,6 @@ before_install: ASSET_FILES_OPTIONAL_GET=1; fi; - # Print version info - - gcc --version; - install: # Install OS X library dependencies via Homebrew From 9490d225de25ebb64205c00029945d2869c1a856 Mon Sep 17 00:00:00 2001 From: SeventhSentinel Date: Sun, 6 Jan 2019 17:17:52 -0500 Subject: [PATCH 49/86] Minimum speed to get drift sparks --- src/d_player.h | 1 + src/dehacked.c | 3 ++- src/k_kart.c | 17 +++++++++++++---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 1b1d4d0a2..2d9ed5c82 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -351,6 +351,7 @@ typedef enum // v1.0.2 vars k_itemblink, // Item flashing after roulette, prevents Hyudoro stealing AND serves as a mashing indicator k_itemblinkmode, // Type of flashing: 0 = white (normal), 1 = red (mashing), 2 = rainbow (enhanced items) + k_getsparks, // Disable drift sparks at low speed, JUST enough to give acceleration the actual headstart above speed NUMKARTSTUFF } kartstufftype_t; diff --git a/src/dehacked.c b/src/dehacked.c index 8cb704125..3f6fcecb2 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8281,7 +8281,8 @@ static const char *const KARTSTUFF_LIST[] = { "YOUGOTEM", "ITEMBLINK", - "ITEMBLINKMODE" + "ITEMBLINKMODE", + "GETSPARKS" }; static const char *const HUDITEMS_LIST[] = { diff --git a/src/k_kart.c b/src/k_kart.c index 28a566c99..ccc0f64da 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4585,6 +4585,7 @@ INT32 K_GetKartDriftSparkValue(player_t *player) static void K_KartDrift(player_t *player, boolean onground) { + fixed_t minspeed = (10 * player->mo->scale); INT32 dsone = K_GetKartDriftSparkValue(player); INT32 dstwo = dsone*2; INT32 dsthree = dstwo*2; @@ -4635,14 +4636,14 @@ static void K_KartDrift(player_t *player, boolean onground) } // Drifting: left or right? - if ((player->cmd.driftturn > 0) && player->speed > FixedMul(10<<16, player->mo->scale) && player->kartstuff[k_jmp] == 1 + if ((player->cmd.driftturn > 0) && player->speed > minspeed && player->kartstuff[k_jmp] == 1 && (player->kartstuff[k_drift] == 0 || player->kartstuff[k_driftend] == 1)) // && player->kartstuff[k_drift] != 1) { // Starting left drift player->kartstuff[k_drift] = 1; player->kartstuff[k_driftend] = player->kartstuff[k_driftcharge] = 0; } - else if ((player->cmd.driftturn < 0) && player->speed > FixedMul(10<<16, player->mo->scale) && player->kartstuff[k_jmp] == 1 + else if ((player->cmd.driftturn < 0) && player->speed > minspeed && player->kartstuff[k_jmp] == 1 && (player->kartstuff[k_drift] == 0 || player->kartstuff[k_driftend] == 1)) // && player->kartstuff[k_drift] != -1) { // Starting right drift @@ -4666,6 +4667,8 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftend] = 0; } + + // Incease/decrease the drift value to continue drifting in that direction if (player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_jmp] == 1 && onground && player->kartstuff[k_drift] != 0) { @@ -4694,6 +4697,12 @@ static void K_KartDrift(player_t *player, boolean onground) driftadditive -= abs(player->cmd.driftturn)/75; } + // Disable drift-sparks until you're going fast enough + if (player->kartstuff[k_getsparks] == 0) + driftadditive = 0; + if (player->speed > minspeed*2) + player->kartstuff[k_getsparks] = 1; + // This spawns the drift sparks if (player->kartstuff[k_driftcharge] + driftadditive >= dsone) K_SpawnDriftSparks(player); @@ -4713,11 +4722,11 @@ static void K_KartDrift(player_t *player, boolean onground) } // Stop drifting - if (player->kartstuff[k_spinouttimer] > 0 // banana peel - || player->speed < FixedMul(10<<16, player->mo->scale)) // you're too slow! + if (player->kartstuff[k_spinouttimer] > 0 || player->speed < minspeed) { player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = 0; player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0; + player->kartstuff[k_getsparks] = 0; } if ((!player->kartstuff[k_sneakertimer]) From 654901a4b5b0087707fd2bb7c7917aaede4d4e1f Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Tue, 8 Jan 2019 18:57:10 +0100 Subject: [PATCH 50/86] use PLAY as default player MD2 if avaiable. --- src/hardware/hw_main.c | 3 ++- src/hardware/hw_md2.c | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index e4c9e8330..39c140c50 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5243,7 +5243,8 @@ static void HWR_DrawSprites(void) #endif if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY) { - if (!cv_grmd2.value || md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound || md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale < 0.0f) + // 8/1/19: Only don't display player models if no default SPR_PLAY is found. + if (!cv_grmd2.value || ((md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound || md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale < 0.0f) && (md2_models[SPR_PLAY].notfound || md2_models[SPR_PLAY].scale < 0.0f))) HWR_DrawSprite(spr); else HWR_DrawMD2(spr); diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 2856cada3..366ef460b 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -824,11 +824,12 @@ void HWR_InitMD2(void) } while (fscanf(f, "%19s %31s %f %f", name, filename, &scale, &offset) == 4) { - if (stricmp(name, "PLAY") == 0) + /*if (stricmp(name, "PLAY") == 0) { CONS_Printf("MD2 for sprite PLAY detected in kmd2.dat, use a player skin instead!\n"); continue; - } + }*/ + // 8/1/19: Allow PLAY to load for default MD2. for (i = 0; i < NUMSPRITES; i++) { @@ -1241,19 +1242,19 @@ void HWR_DrawMD2(gr_vissprite_t *spr) // 1. load model+texture if not already loaded // 2. draw model with correct position, rotation,... - if (spr->mobj->skin && spr->mobj->sprite == SPR_PLAY) // Use the player MD2 list if the mobj has a skin and is using the player sprites + if (spr->mobj->skin && spr->mobj->sprite == SPR_PLAY && !md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound) // Use the player MD2 list if the mobj has a skin and is using the player sprites { md2 = &md2_playermodels[(skin_t*)spr->mobj->skin-skins]; md2->skin = (skin_t*)spr->mobj->skin-skins; } - else + else // if we can't find the player md2, use SPR_PLAY's MD2. md2 = &md2_models[spr->mobj->sprite]; if (md2->error) return; // we already failed loading this before :( if (!md2->model) { - //CONS_Debug(DBG_RENDER, "Loading MD2... (%s)", sprnames[spr->mobj->sprite]); + CONS_Debug(DBG_RENDER, "Loading MD2... (%s, %s)", sprnames[spr->mobj->sprite], md2->filename); sprintf(filename, "md2/%s", md2->filename); md2->model = md2_readModel(filename); From fd99eb4f1330def3a821947e8cb442c99826a276 Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Wed, 9 Jan 2019 01:38:28 -0600 Subject: [PATCH 51/86] -noxinput command line parameter --- src/sdl/i_system.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index f85176183..6f5e265b4 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -2166,6 +2166,9 @@ void I_InitJoystick(void) if (M_CheckParm("-nojoy")) return; + if (M_CheckParm("-noxinput")) + SDL_SetHintWithPriority("SDL_XINPUT_ENABLED", "0", SDL_HINT_OVERRIDE); + if (SDL_WasInit(SDL_INIT_JOYSTICK) == 0) { CONS_Printf("I_InitJoystick()...\n"); From 6943f59e79eedb38805d3f9dae4d1bcc2c92131c Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Wed, 9 Jan 2019 15:35:51 -0600 Subject: [PATCH 52/86] If kmd2.dat isn't found in srb2home, search the game's directory for it --- src/hardware/hw_md2.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 0267770e4..0568151a2 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -818,9 +818,13 @@ void HWR_InitMD2(void) if (!f) { - CONS_Printf("%s %s\n", M_GetText("Error while loading kmd2.dat:"), strerror(errno)); - nomd2s = true; - return; + f = fopen(va("%s"PATHSEP"%s", srb2path, "kmd2.dat"), "rt"); + if (!f) + { + CONS_Printf("%s %s\n", M_GetText("Error while loading kmd2.dat:"), strerror(errno)); + nomd2s = true; + return; + } } while (fscanf(f, "%19s %31s %f %f", name, filename, &scale, &offset) == 4) { @@ -885,9 +889,13 @@ void HWR_AddPlayerMD2(int skin) // For MD2's that were added after startup if (!f) { - CONS_Printf("Error while loading kmd2.dat\n"); - nomd2s = true; - return; + f = fopen(va("%s"PATHSEP"%s", srb2path, "kmd2.dat"), "rt"); + if (!f) + { + CONS_Printf("%s %s\n", M_GetText("Error while loading kmd2.dat:"), strerror(errno)); + nomd2s = true; + return; + } } // Check for any MD2s that match the names of player skins! @@ -931,9 +939,13 @@ void HWR_AddSpriteMD2(size_t spritenum) // For MD2s that were added after startu if (!f) { - CONS_Printf("Error while loading kmd2.dat\n"); - nomd2s = true; - return; + f = fopen(va("%s"PATHSEP"%s", srb2path, "kmd2.dat"), "rt"); + if (!f) + { + CONS_Printf("%s %s\n", M_GetText("Error while loading kmd2.dat:"), strerror(errno)); + nomd2s = true; + return; + } } // Check for any MD2s that match the names of player skins! From 8f1617a4dc840caf75c7869db815a453bbd4110f Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Wed, 9 Jan 2019 15:53:59 -0600 Subject: [PATCH 53/86] Missed a few spots --- src/hardware/hw_md2.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 0568151a2..63ef80986 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -300,8 +300,12 @@ static md2_model_t *md2_readModel(const char *filename) file = fopen(va("%s"PATHSEP"%s", srb2home, filename), "rb"); if (!file) { - free(model); - return 0; + file = fopen(va("%s"PATHSEP"%s", srb2path, filename), "rb"); + if (!file) + { + free(model); + return 0; + } } // initialize model and read header @@ -500,8 +504,12 @@ static GrTextureFormat_t PNG_Load(const char *filename, int *w, int *h, GLPatch_ png_FILE = fopen(pngfilename, "rb"); if (!png_FILE) { + pngfilename = va("%s"PATHSEP"md2"PATHSEP"%s", srb2path, filename); + FIL_ForceExtension(pngfilename, ".png"); + png_FILE = fopen(pngfilename, "rb"); //CONS_Debug(DBG_RENDER, "M_SavePNG: Error on opening %s for loading\n", filename); - return 0; + if (!png_FILE) + return 0; } png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, @@ -628,7 +636,13 @@ static GrTextureFormat_t PCX_Load(const char *filename, int *w, int *h, FIL_ForceExtension(pcxfilename, ".pcx"); file = fopen(pcxfilename, "rb"); if (!file) - return 0; + { + pcxfilename = va("%s"PATHSEP"md2"PATHSEP"%s", srb2path, filename); + FIL_ForceExtension(pcxfilename, ".pcx"); + file = fopen(pcxfilename, "rb"); + if (!file) + return 0; + } if (fread(&header, sizeof (PcxHeader), 1, file) != 1) { From 5be9f9e2d46626282c474eb14f3d6edab5c25ee2 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 9 Jan 2019 21:00:45 -0500 Subject: [PATCH 54/86] Add MUSICDEF lump for defining custom songs & replacing existing songs Very rudimentary at the moment, but it's workable --- src/d_main.c | 1 + src/hu_stuff.c | 12 +- src/k_kart.c | 2 +- src/p_setup.c | 5 + src/p_spec.c | 2 +- src/s_sound.c | 346 +++++++++++++++++++++++++++++-------------------- src/s_sound.h | 22 ++-- src/w_wad.c | 1 + 8 files changed, 233 insertions(+), 158 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 2a5993c17..29a916863 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1350,6 +1350,7 @@ void D_SRB2Main(void) I_StartupSound(); I_InitMusic(); S_InitSfxChannels(cv_soundvolume.value); + S_InitMusicDefs(); CONS_Printf("ST_Init(): Init status bar.\n"); ST_Init(); diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 64580c82d..a38e91a78 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2130,12 +2130,18 @@ static void HU_DrawDemoInfo(void) // static void HU_DrawSongCredits(void) { - const char *str = va("\x1F"" %s", songCredits[cursongcredit.index].info); - INT32 len = V_ThinStringWidth(str, V_ALLOWLOWERCASE|V_6WIDTHSPACE); - INT32 destx = (len+7); + char *str; + INT32 len, destx; INT32 y = (splitscreen ? (BASEVIDHEIGHT/2)-4 : 32); INT32 bgt; + if (!cursongcredit.def) // No def + return; + + str = va("\x1F"" %s", cursongcredit.def->source); + len = V_ThinStringWidth(str, V_ALLOWLOWERCASE|V_6WIDTHSPACE); + destx = (len+7); + if (cursongcredit.anim) { if (cursongcredit.trans > 0) diff --git a/src/k_kart.c b/src/k_kart.c index 63425d1af..50d19c199 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4446,7 +4446,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (P_IsLocalPlayer(player) && leveltime == (starttime + (TICRATE/2))) { S_ChangeMusicInternal(mapmusname, true); - S_InitMusicCredit(); + S_ShowMusicCredit(); } } diff --git a/src/p_setup.c b/src/p_setup.c index 57a069a1f..90ac3a7cf 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3439,6 +3439,11 @@ boolean P_AddWadFile(const char *wadfilename) // R_AddSkins(wadnum); // faB: wadfile index in wadfiles[] + // + // edit music defs + // + S_LoadMusicDefs(wadnum); + // // search for maps // diff --git a/src/p_spec.c b/src/p_spec.c index b6661bba0..e3b54cbea 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2450,7 +2450,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) mapmusflags |= MUSIC_RELOADRESET; S_ChangeMusic(mapmusname, mapmusflags, !(line->flags & ML_EFFECT4)); - S_InitMusicCredit(); + S_ShowMusicCredit(); // Except, you can use the ML_BLOCKMONSTERS flag to change this behavior. // if (mapmusflags & MUSIC_RELOADRESET) then it will reset the music in G_PlayerReborn. diff --git a/src/s_sound.c b/src/s_sound.c index 87ab6359a..e3a62768e 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1541,131 +1541,209 @@ static void *music_data; static UINT16 music_flags; static boolean music_looping; -songcredits_t songCredits[] = { - // Race maps - {"kmap01","Toot Toot Sonic Warrior (Instrumental) - Sonic CD"}, - {"kmap02","Chao Race (Extended Mix) - Sonic Adventure 2"}, - {"kmap03","Touhou 10.5: Broken Moon (Jazz Arrangement) - Tokyo Active NEETs"}, - {"kmap04","Mortvia Fountain - Castlevania: Curse of Darkness"}, - {"kmap05","Let's Go Away - Daytona USA"}, - {"kmap06","War Machine - Marvel vs. Capcom"}, - {"kmap07","Sonic 3D Blast: Green Grove Zone, Act 1 (Remix) - Tee Lopes"}, - {"kmap08","Sonic Drift 2: Hill Top (Remix) - SeventhSentinel"}, - {"kmap09","Industrial District - Columns III"}, - {"kmap10","Dream Uneven Bars - Mario & Sonic at the London 2012 Olympic Games"}, - {"kmap11","Moon Palace 2 - Drift City"}, - {"kmap12","Authentic Sky - Tekken 4"}, - {"kmap13","Plant Man's Stage - Rockman 6 Complete Works"}, - {"kmap14","Twinkle Cart - Sonic Adventure"}, - {"kmap15","Pleasure Castle - Sonic Adventure"}, - {"kmap16","Horizon Heights Zone, Act 2 - Sonic: After the Sequel"}, - {"kmap17","Frost Man's Stage - Mega Man 8"}, - {"kmap18","Foliage Furnace Zone, Act 1 - Sonic: After the Sequel"}, - {"kmap19","Sand Ocean - F-Zero"}, - {"kmap20","El Anoir Field South - LaTale"}, - {"kmap21","Western GunRun - LaTale"}, - {"kmap22","Jr. Street - Mario Hoops 3 on 3"}, - {"kmap23","Fight or Flight (Air Armada) - Rivals of Aether"}, - {"kmap24","White Land I - F-Zero"}, - {"kmap25","Donkey Kong Country: Fear Factory (Remix) - Vincent Rubinetti"}, - {"kmap26","Desert Palace - Sonic the Hedgehog 3"}, - {"kmap27","Aurora Atoll Zone - SeventhSentinel"}, - {"kmap28","Hol Horse - JoJo's Bizarre Adventure (Arcade)"}, - {"kmap29","Red Barrage Area - Sonic Adventure"}, - {"kmap30","Reach Out To The Truth - Persona 4 Arena"}, - {"kmap31","Ave de Rapina - Beatmania IIDX 7th Style"}, - {"kmap32","Atomic Waste Zone - Michael Staple"}, - {"kmap33","Desert Area - LaTale"}, - {"kmap34","DuckTales: The Moon (Remix) - Chris Holland, Luke Kwing"}, - {"kmap35","Eggman Empire Zone - Michael Staple"}, - {"kmap36","Shooting Star - Elwood"}, - {"kmap37","Vigaku (Theme of Ein) - Dead or Alive 2"}, - {"kmap38","Lovely Gate 3 - Sonic Adventure 2"}, - {"kmap39","The Biggest Dreamer - Digimon Rumble Arena"}, - {"kmap40","Soft Collision - Mighty Switch Force 2"}, - {"kmap41","Ganbare Dochu - Konami Krazy Racers"}, - {"kmap42","Theme of 'CHAO' - Sonic Adventure"}, - {"kmap43","Join Us 4 Happy Time - Sonic Adventure"}, - {"kmap44","Search ~ In the Midst - Ace Attorney: Justice for All"}, - {"kmap45","Venezia, Italy - Tekken"}, - {"kmap46","Balloon Panic - Sonic Drift 2"}, - {"kmap47","Dimension Heist - Sonic Mania"}, - {"kmap48","MKSC Sky Garden (Remix) - Mario Kart DS"}, - {"kmap49","MKDS Peach Gardens (Remix) - Mario Kart Wii"}, - {"kmap50","MKSC Rainbow Road (Remix) - Panman14"}, - {"kmap51","Donut Plains - Super Mario Kart"}, - {"kmap52","Mario Circuit - Super Mario Kart"}, - {"kmap53","Ghost Valley - Super Mario Kart"}, - {"kmap54","Bowser Castle - Super Mario Kart"}, - {"kmap55","Vanilla Lake - Super Mario Kart"}, - // Battle maps - {"kmapb0","Tropic Turf Zone, Act 1 - Karl Brueggemann"}, - {"kmapb1","Seascape - Knuckles' Chaotix"}, - {"kmapb2","Boss Challenge I - Diddy Kong Racing"}, - {"kmapb3","Al's Toy Barn - Toy Story 2 (PS1)"}, - {"kmapb4","SRB2: Techno Hill Zone, Act 1 (Remix) - SeventhSentinel"}, - {"kmapb5","Sonic the Hedgehog: Marble Zone (Remix) - Tee Lopes"}, - {"kmapb6","Phi Battle - Sonic Battle"}, - {"kmapb7","Khan - JoJo's Bizarre Adventure (Arcade)"}, - {"kmapb8","Underground - Wild Guns Reloaded"}, - {"kmapb9","Disease Transport - DrTapeworm"}, - {"kmapba","Shining Force II: Shrine (Remix) - gxf4c3"}, - {"kmapbb","Bad Taste Aquarium - Sonic Adventure"}, - {"kmapbc","Space Ship: Strut - Space Channel 5"}, - {"kmapbd","Strollin' the City - Karl Brueggemann"}, - {"kmapbe","Fakery Way - Sonic Adventure"}, - {"kmapbf","Twinkle Circuit - Sonic Adventure"}, - {"kmapbg","Never Let It Go - Sonic the Fighters"}, - {"kmapbh","Power Plant - Sonic Heroes"}, - {"kmapbi","Tails' Lab - Sonic Battle"}, - {"kmapbj","Mega Man X: Armored Armadillo's Stage (Arranged) - Synthescissor"}, - {"kmapbk","School Ordeal - Danganronpa V3: Killing Harmony"}, - {"kmapbl","Mementos - Persona 5"}, - {"kmapbm","Special Stage (US) - Sonic CD"}, - {"kmapbn","Battle Mode - Super Mario Kart"}, - {"kmapbp","Vanilla Lake (Beta) - Super Mario Kart"}, - {"kmapbr","Choco Mountain - Mario Kart 64"}, - // Hell maps - {"kmaph0","Neo City - Drift City"}, - {"kmaph1","World Open Finals - Mario Power Tennis"}, - {"kmaph2","Arid Sands: Day - Sonic Unleashed"}, - {"kmaph3","Graveyard Gig - Sonic & All-Stars Racing Transformed"}, - {"kmaph4","Dr. Robotnik's Mean Bean Machine: 2 Player (Remix) - Jonny Atma, The8BitDrummer"}, - {"kmaph5","Living In One More City - Nib Roc"}, - {"kmaph6","Ema Skye ~ Scientific Detective - Apollo Justice: Ace Attorney"}, - {"kmaph7","4 Minutes Before Death - Ghost Trick: Phantom Detective"}, - {"kmaph8","Napoleon Disappeared!? - Pop'n Music 10"}, - {"kmaph9","Retro Maze - Pac-Man World Rally"}, - {"kmapha","Midnight Freeze Zone - Arrow, SSNTails"}, - {"kmaphb","Townsville Raceway - Cartoon Network Racing (DS)"}, - {"kmaphc","F-Zero: Silence (Remix) - Tony Thai"}, - {"kmaphd","Rainbow Road - Super Mario Kart"}, - {"kmaphe","Meadow Match Zone - Arrow, SSNTails"}, - {"kmaphf","merge-break - xaki"}, - // Misc - {"titles","Fluvial Beat Deposits - Simon Stalenhag"}, // Stålenhag - {"vote", "Chaotic World - Knuckles' Chaotix"}, - {"voteea","Decision - Knuckles' Chaotix"}, - {"voteeb","Decision - Knuckles' Chaotix"}, - {"kinvnc","Invincibility - Sonic the Hedgehog 3"}, - {"kgrow", "Surging Power - Knuckles' Chaotix"}, - {"kstart","Race Start - Diddy Kong Racing"}, - {"estart","Phantom Ruby Ambience - Sonic Mania"}, - {"krwin", "Practice - Sora"}, - {"krok", "Practice - Sora"}, - {"krlose","Hit 'Em Up (Instrumental) - 2Pac"}, - {"krfail","Results - F-Zero"}, - {"kbwin", "Wild Charabom Defeated! - Bomberman Tournament"}, - {"kbok", "Deadly Bomber Base Cleared! - Bomberman Tournament"}, - {"kblose","You Lose! - Bomberman Tournament"}, - {"racent","Menu - Metropolis Street Racer"}, - {"wait2j","Competition Results - Sonic the Hedgehog 3"}, - {"chalng","Sonic the Hedgehog 3: Minor Boss (Dual PCM) - MarkeyJester"}, - {"credit","Moot Booxle - Chomp"}, - {NULL,NULL} -}; +/// ------------------------ +/// Music Definitions +/// ------------------------ -struct cursongcredit cursongcredit; +musicdef_t *musicdefstart = NULL; // First music definition +struct cursongcredit cursongcredit; // Currently displayed song credit info + +// +// search for music definition in wad +// +static UINT16 W_CheckForMusicDefInPwad(UINT16 wadid) +{ + UINT16 i; + lumpinfo_t *lump_p; + + lump_p = wadfiles[wadid]->lumpinfo; + for (i = 0; i < wadfiles[wadid]->numlumps; i++, lump_p++) + if (memcmp(lump_p->name, "MUSICDEF", 8) == 0) + return i; + + return INT16_MAX; // not found +} + +void S_LoadMusicDefs(UINT16 wadnum) +{ + UINT16 lump; + char *buf; + char *buf2; + char *stoken; + char *value; + size_t size; + musicdef_t *def, *prev; + UINT16 line = 1; // for better error msgs + + lump = W_CheckForMusicDefInPwad(wadnum); + if (lump == INT16_MAX) + return; + + buf = W_CacheLumpNumPwad(wadnum, lump, PU_CACHE); + size = W_LumpLengthPwad(wadnum, lump); + + // for strtok + buf2 = malloc(size+1); + if (!buf2) + I_Error("S_LoadMusicDefs: No more free memory\n"); + M_Memcpy(buf2,buf,size); + buf2[size] = '\0'; + + def = prev = NULL; + + stoken = strtok (buf2, "\r\n "); + // Find music def + while (stoken) + { + /*if ((stoken[0] == '/' && stoken[1] == '/') + || (stoken[0] == '#')) // skip comments + { + stoken = strtok(NULL, "\r\n"); // skip end of line + if (def) + stoken = strtok(NULL, "\r\n= "); + else + stoken = strtok(NULL, "\r\n "); + line++; + } + else*/ if (!stricmp(stoken, "lump")) + { + value = strtok(NULL, "\r\n "); + + if (!value) + { + CONS_Alert(CONS_WARNING, "MUSICDEF: Lump '%s' is missing name. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line); + stoken = strtok(NULL, "\r\n"); // skip end of line + goto skip_lump; + } + + // No existing musicdefs + if (!musicdefstart) + { + musicdefstart = Z_Calloc(sizeof (musicdef_t), PU_STATIC, NULL); + STRBUFCPY(musicdefstart->name, value); + strlwr(musicdefstart->name); + def = musicdefstart; + //CONS_Printf("S_LoadMusicDefs: Initialized musicdef w/ song '%s'\n", def->name); + } + else + { + def = musicdefstart; + + // Search if this is a replacement + //CONS_Printf("S_LoadMusicDefs: Searching for song replacement...\n"); + while (def) + { + if (!stricmp(def->name, value)) + { + //CONS_Printf("S_LoadMusicDefs: Found song replacement '%s'\n", def->name); + break; + } + + prev = def; + def = def->next; + } + + // Nothing found, add to the end. + if (!def) + { + def = Z_Calloc(sizeof (musicdef_t), PU_STATIC, NULL); + STRBUFCPY(def->name, value); + strlwr(def->name); + if (prev != NULL) + prev->next = def; + //CONS_Printf("S_LoadMusicDefs: Added song '%s'\n", def->name); + } + } + +skip_lump: + stoken = strtok(NULL, "\r\n "); + line++; + } + else + { + value = strtok(NULL, "\r\n= "); + + if (!value) + { + CONS_Alert(CONS_WARNING, "MUSICDEF: Field '%s' is missing value. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line); + stoken = strtok(NULL, "\r\n"); // skip end of line + goto skip_field; + } + + if (!def) + { + CONS_Alert(CONS_ERROR, "MUSICDEF: No music definition before field '%s'. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line); + free(buf2); + return; + } + + if (!stricmp(stoken, "usage")) { +#if 0 // Ignore for now + STRBUFCPY(def->usage, value); + for (value = def->usage; *value; value++) + if (*value == '_') *value = ' '; // turn _ into spaces. + //CONS_Printf("S_LoadMusicDefs: Set usage to '%s'\n", def->usage); +#endif + } else if (!stricmp(stoken, "source")) { + STRBUFCPY(def->source, value); + for (value = def->source; *value; value++) + if (*value == '_') *value = ' '; // turn _ into spaces. + //CONS_Printf("S_LoadMusicDefs: Set source to '%s'\n", def->source); + } else { + CONS_Alert(CONS_WARNING, "MUSICDEF: Invalid field '%s'. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line); + } + +skip_field: + stoken = strtok(NULL, "\r\n= "); + line++; + } + } + + free(buf2); + return; +} + +// +// S_InitMusicDefs +// +// Simply load music defs in all wads. +// +void S_InitMusicDefs(void) +{ + UINT16 i; + for (i = 0; i < numwadfiles; i++) + S_LoadMusicDefs(i); +} + +// +// S_ShowMusicCredit +// +// Display current song's credit on screen +// +void S_ShowMusicCredit(void) +{ + musicdef_t *def = musicdefstart; + + if (!cv_songcredits.value) + return; + + if (!def) // No definitions + return; + + while (def) + { + if (!stricmp(def->name, music_name)) + { + cursongcredit.def = def; + cursongcredit.anim = 5*TICRATE; + cursongcredit.x = 0; + cursongcredit.trans = NUMTRANSMAPS; + return; + } + else + def = def->next; + } +} /// ------------------------ /// Music Status @@ -1731,26 +1809,6 @@ boolean S_SpeedMusic(float speed) return I_SetSongSpeed(speed); } -void S_InitMusicCredit(void) -{ - UINT16 i; - - if (!cv_songcredits.value) - return; - - for (i = 0; songCredits[i].lump; i++) - { - if (!stricmp(songCredits[i].lump, music_name)) - { - cursongcredit.index = i; - cursongcredit.anim = 5*TICRATE; - cursongcredit.x = 0; - cursongcredit.trans = NUMTRANSMAPS; - return; // Don't return when there's SOC support, to see if there's any "replacement" credits? - } - } -} - /// ------------------------ /// Music Playback /// ------------------------ diff --git a/src/s_sound.h b/src/s_sound.h index ae11065c7..df90ecb12 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -129,23 +129,27 @@ boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi); boolean S_SpeedMusic(float speed); // Music credits +typedef struct musicdef_s +{ + char name[7]; + //char usage[256]; + char source[256]; + struct musicdef_s *next; +} musicdef_t; + extern struct cursongcredit { - UINT16 index; + musicdef_t *def; UINT16 anim; INT32 x; UINT8 trans; } cursongcredit; -typedef struct -{ - const char *lump; - const char *info; -} songcredits_t; +extern musicdef_t *musicdefstart; -extern songcredits_t songCredits[]; - -void S_InitMusicCredit(void); +void S_LoadMusicDefs(UINT16 wadnum); +void S_InitMusicDefs(void); +void S_ShowMusicCredit(void); // // Music Routines diff --git a/src/w_wad.c b/src/w_wad.c index 69b4cb2e7..63bee97de 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -1738,6 +1738,7 @@ int W_VerifyNMUSlumps(const char *filename) {"MKFNT", 5}, // Kart font changes {"K_", 2}, // Kart graphic changes + {"MUSICDEF", 8}, // Kart song definitions {NULL, 0}, }; From 6c5cc453a8a820ceb4485b8b29bf253fc18b9b6b Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 9 Jan 2019 21:01:56 -0500 Subject: [PATCH 55/86] Show song credits if joining mid-game Dunno if this works or not yet! --- src/p_saveg.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/p_saveg.c b/src/p_saveg.c index 555a26140..30d01da1c 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -3355,6 +3355,10 @@ static inline boolean P_NetUnArchiveMisc(void) totalrings = READUINT32(save_p); lastmap = READINT16(save_p); + // Show music credits for mid-joiners + if (leveltime > (starttime + (TICRATE/2))) + S_ShowMusicCredit(); + for (i = 0; i < 4; i++) { votelevels[i][0] = READINT16(save_p); From e05e543396a298f24a8f1f2b5fba37095babf00d Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 9 Jan 2019 21:12:33 -0500 Subject: [PATCH 56/86] Accidental unselected change --- src/p_saveg.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/p_saveg.c b/src/p_saveg.c index 30d01da1c..a5b518100 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -30,6 +30,7 @@ #include "r_sky.h" #include "p_polyobj.h" #include "lua_script.h" +#include "s_sound.h" // S_ShowMusicCredit #ifdef ESLOPE #include "p_slopes.h" #endif From 171faa4ab4b31f8befdcc15f78e702b2bf6f202f Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 9 Jan 2019 21:13:06 -0500 Subject: [PATCH 57/86] Fix Music toggle trying to play a non-existent song in Kart --- src/s_sound.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/s_sound.c b/src/s_sound.c index e3a62768e..cc17ccd08 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -2178,7 +2178,7 @@ void GameDigiMusic_OnChange(void) if (Playing()) P_RestoreMusic(&players[consoleplayer]); else - S_ChangeMusicInternal("lclear", false); + S_ChangeMusicInternal("titles", looptitle); } else { @@ -2220,7 +2220,7 @@ void GameMIDIMusic_OnChange(void) if (Playing()) P_RestoreMusic(&players[consoleplayer]); else - S_ChangeMusicInternal("lclear", false); + S_ChangeMusicInternal("titles", looptitle); } else { From 3491a22a94330785e33ec98f83adc8cb00be0090 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 9 Jan 2019 21:17:10 -0500 Subject: [PATCH 58/86] Add disable for music credit showing on the change music linedef --- src/p_spec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/p_spec.c b/src/p_spec.c index e3b54cbea..ca4967ce3 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2450,7 +2450,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) mapmusflags |= MUSIC_RELOADRESET; S_ChangeMusic(mapmusname, mapmusflags, !(line->flags & ML_EFFECT4)); - S_ShowMusicCredit(); + if (!(line->flags & ML_EFFECT3)) + S_ShowMusicCredit(); // Except, you can use the ML_BLOCKMONSTERS flag to change this behavior. // if (mapmusflags & MUSIC_RELOADRESET) then it will reset the music in G_PlayerReborn. From 66bb728363c2a2fec5e5084c21aa00ced752624c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 9 Jan 2019 21:17:24 -0500 Subject: [PATCH 59/86] Expose S_ShowMusicCredit to Lua --- src/lua_baselib.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 6f542fae4..c862ec265 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -1839,6 +1839,21 @@ static int lib_sStopSoundByID(lua_State *L) return 0; } +static int lib_sShowMusicCredit(lua_State *L) +{ + player_t *player = NULL; + //HUDSAFE + if (!lua_isnone(L, 1) && lua_isuserdata(L, 1)) + { + player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); + if (!player) + return LUA_ErrInvalid(L, "player_t"); + } + if (!player || P_IsLocalPlayer(player)) + S_ShowMusicCredit(); + return 0; +} + static int lib_sChangeMusic(lua_State *L) { #ifdef MUSICSLOT_COMPATIBILITY @@ -2666,6 +2681,7 @@ static luaL_Reg lib[] = { {"S_StartSoundAtVolume",lib_sStartSoundAtVolume}, {"S_StopSound",lib_sStopSound}, {"S_StopSoundByID",lib_sStopSoundByID}, + {"S_ShowMusicCredit",lib_sShowMusicCredit}, {"S_ChangeMusic",lib_sChangeMusic}, {"S_SpeedMusic",lib_sSpeedMusic}, {"S_StopMusic",lib_sStopMusic}, From 6ac7e50d70acf43ba3e4d0d3f19f711172b36909 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 10 Jan 2019 00:35:11 -0500 Subject: [PATCH 60/86] Remove this, doesn't work --- src/p_saveg.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/p_saveg.c b/src/p_saveg.c index a5b518100..555a26140 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -30,7 +30,6 @@ #include "r_sky.h" #include "p_polyobj.h" #include "lua_script.h" -#include "s_sound.h" // S_ShowMusicCredit #ifdef ESLOPE #include "p_slopes.h" #endif @@ -3356,10 +3355,6 @@ static inline boolean P_NetUnArchiveMisc(void) totalrings = READUINT32(save_p); lastmap = READINT16(save_p); - // Show music credits for mid-joiners - if (leveltime > (starttime + (TICRATE/2))) - S_ShowMusicCredit(); - for (i = 0; i < 4; i++) { votelevels[i][0] = READINT16(save_p); From a1daaf339b52307f178ae318e4e291c6eb4d0b99 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 10 Jan 2019 01:03:53 -0500 Subject: [PATCH 61/86] Redone credits for joiners in a less stupid way, + redone start ambience in a less stupid way --- src/g_game.c | 4 ++++ src/k_kart.c | 2 +- src/p_setup.c | 4 ---- src/s_sound.c | 12 ++++++++---- src/s_sound.h | 2 +- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index fa7f6ce12..1e0c7e462 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2362,6 +2362,7 @@ void G_PlayerReborn(INT32 player) INT32 bumper; INT32 comebackpoints; INT32 wanted; + boolean songcredit = false; score = players[player].score; marescore = players[player].marescore; @@ -2540,10 +2541,13 @@ void G_PlayerReborn(INT32 player) strncpy(mapmusname, mapheaderinfo[gamemap-1]->musname, 7); mapmusname[6] = 0; mapmusflags = mapheaderinfo[gamemap-1]->mustrack & MUSIC_TRACKMASK; + songcredit = true; } } P_RestoreMusic(p); + if (songcredit) + S_ShowMusicCredit(); if (leveltime > (starttime + (TICRATE/2)) && !p->spectator) p->kartstuff[k_respawn] = 48; // Respawn effect diff --git a/src/k_kart.c b/src/k_kart.c index 50d19c199..320105ef4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4445,7 +4445,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) // Plays the music after the starting countdown. if (P_IsLocalPlayer(player) && leveltime == (starttime + (TICRATE/2))) { - S_ChangeMusicInternal(mapmusname, true); + S_ChangeMusic(mapmusname, mapmusflags, true); S_ShowMusicCredit(); } } diff --git a/src/p_setup.c b/src/p_setup.c index 90ac3a7cf..49b22184e 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2869,10 +2869,6 @@ boolean P_SetupLevel(boolean skipprecip) // As oddly named as this is, this handles music only. // We should be fine starting it here. S_Start(); - // SRB2 Kart - Yes this is weird, but we don't want the music to start until after the countdown is finished - // but we do still need the mapmusname to be changed - if (leveltime < (starttime + (TICRATE/2))) - S_ChangeMusicInternal((encoremode ? "estart" : "kstart"), false); //S_StopMusic(); levelfadecol = (encoremode && !ranspecialwipe ? 122 : 120); diff --git a/src/s_sound.c b/src/s_sound.c index cc17ccd08..856aa0459 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -101,7 +101,7 @@ consvar_t cv_numChannels = {"snd_channels", "64", CV_SAVE|CV_CALL, CV_Unsigned, #endif consvar_t surround = {"surround", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_resetmusic = {"resetmusic", "No", CV_SAVE|CV_NOSHOWHELP, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; +//consvar_t cv_resetmusic = {"resetmusic", "No", CV_SAVE|CV_NOSHOWHELP, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; // Sound system toggles, saved into the config consvar_t cv_gamedigimusic = {"digimusic", "On", CV_SAVE|CV_CALL|CV_NOINIT, CV_OnOff, GameDigiMusic_OnChange, 0, NULL, NULL, 0, 0, NULL}; @@ -263,7 +263,7 @@ void S_RegisterSoundStuff(void) #endif CV_RegisterVar(&surround); CV_RegisterVar(&cv_samplerate); - CV_RegisterVar(&cv_resetmusic); + //CV_RegisterVar(&cv_resetmusic); CV_RegisterVar(&cv_gamesounds); CV_RegisterVar(&cv_gamedigimusic); #ifndef NO_MIDI @@ -2043,9 +2043,13 @@ void S_Start(void) mapmusflags = (mapheaderinfo[gamemap-1]->mustrack & MUSIC_TRACKMASK); } - if (cv_resetmusic.value) + //if (cv_resetmusic.value) // Starting ambience should always be restarted S_StopMusic(); - S_ChangeMusic(mapmusname, mapmusflags, true); + + if (leveltime < (starttime + (TICRATE/2))) // SRB2Kart + S_ChangeMusic((encoremode ? "estart" : "kstart"), 0, false); + else + S_ChangeMusic(mapmusname, mapmusflags, true); } static void Command_Tunes_f(void) diff --git a/src/s_sound.h b/src/s_sound.h index df90ecb12..1ad519c20 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -27,7 +27,7 @@ extern consvar_t stereoreverse; extern consvar_t cv_soundvolume, cv_digmusicvolume;//, cv_midimusicvolume; extern consvar_t cv_numChannels; extern consvar_t surround; -extern consvar_t cv_resetmusic; +//extern consvar_t cv_resetmusic; extern consvar_t cv_gamedigimusic; #ifndef NO_MIDI extern consvar_t cv_gamemidimusic; From d1bbebcbeada5e2d8b457268273ac402ac97fb24 Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Thu, 10 Jan 2019 04:04:26 -0600 Subject: [PATCH 62/86] Fix player 2 not being able to play while the chat is open Also attempts to fix the d-pad typing characters into the chat box. --- src/g_input.c | 2 +- src/hu_stuff.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/g_input.c b/src/g_input.c index d7b7be91c..871c1e604 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -120,7 +120,7 @@ void G_MapEventsToControls(event_t *ev) case ev_joystick2: // buttons are virtual keys i = ev->data1; - if (i >= JOYAXISSET || menuactive || CON_Ready() || chat_on) + if (i >= JOYAXISSET || menuactive) break; if (ev->data2 != INT32_MAX) joy2xmove[i] = ev->data2; if (ev->data3 != INT32_MAX) joy2ymove[i] = ev->data3; diff --git a/src/hu_stuff.c b/src/hu_stuff.c index f66aa07be..f28f3c8a7 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1179,6 +1179,10 @@ boolean HU_Responder(event_t *ev) || ev->data1 == KEY_LALT || ev->data1 == KEY_RALT) return true; + // Ignore joystick hats + if (ev->data1 >= KEY_HAT1 && ev->data1 <= KEY_HAT1 + 3) + return false; + c = (INT32)ev->data1; // I know this looks very messy but this works. If it ain't broke, don't fix it! From d9b30a10e3990a278f20ecfa2b0140c86b229784 Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Thu, 10 Jan 2019 06:06:18 -0600 Subject: [PATCH 63/86] Enable d-pad on the vote screen, allow aborting connection with more joy buttons --- src/d_clisrv.c | 3 ++- src/g_game.c | 20 ++++++++++++++++++++ src/g_game.h | 1 + src/y_inter.c | 4 ++-- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index be6390341..75956d65f 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2076,7 +2076,8 @@ static boolean CL_ServerConnectionTicker(boolean viams, const char *tmpsave, tic I_OsPolling(); key = I_GetKey(); - if (key == KEY_ESCAPE || key == KEY_JOY1+1) + // For some reason, gamekeydown[gamecontrol[gc_brake][0]] is always true here, so we're just going to check the second to fourth buttons. + if (key == KEY_ESCAPE || key == KEY_JOY1+1 || key == KEY_JOY1+2 || key == KEY_JOY1+3) { CONS_Printf(M_GetText("Network game synchronization aborted.\n")); // M_StartMessage(M_GetText("Network game synchronization aborted.\n\nPress ESC\n"), NULL, MM_NOTHING); diff --git a/src/g_game.c b/src/g_game.c index 23f41564c..32e252fbd 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1177,6 +1177,26 @@ boolean InputDown(INT32 gc, UINT8 p) } } +// Returns true if the hat is pressed for the specified player +// 0 is up, 1 is down, 2 is left, 3 is right +// Basically a hack needed to allow the d-pad on the vote screen. +boolean HatDown(UINT8 dir, UINT8 p) +{ + if (p == 1 && gamekeydown[KEY_HAT1 + dir]) + return true; + + if (p == 2 && gamekeydown[KEY_2HAT1 + dir]) + return true; + + if (p == 3 && gamekeydown[KEY_3HAT1 + dir]) + return true; + + if (p == 4 && gamekeydown[KEY_4HAT1 + dir]) + return true; + + return false; +} + INT32 JoyAxis(axis_input_e axissel, UINT8 p) { switch (p) diff --git a/src/g_game.h b/src/g_game.h index 720d561fb..52f7f60db 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -99,6 +99,7 @@ INT16 G_ClipAimingPitch(INT32 *aiming); INT16 G_SoftwareClipAimingPitch(INT32 *aiming); boolean InputDown(INT32 gc, UINT8 p); +boolean HatDown(UINT8 dir, UINT8 p); INT32 JoyAxis(axis_input_e axissel, UINT8 p); extern angle_t localangle, localangle2, localangle3, localangle4; diff --git a/src/y_inter.c b/src/y_inter.c index 379d5cd39..6073f93ec 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -1318,13 +1318,13 @@ void Y_VoteTicker(void) && !voteclient.playerinfo[i].delay && pickedvote == -1 && votes[p] == -1) { - if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0) + if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0 || HatDown(0, i+1)) { voteclient.playerinfo[i].selection--; pressed = true; } - if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0) && !pressed) + if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0 || HatDown(1, i+1)) && !pressed) { voteclient.playerinfo[i].selection++; pressed = true; From 5838c6cae8260a8e1a1f4e2958e2d01951093d10 Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Thu, 10 Jan 2019 13:52:58 -0600 Subject: [PATCH 64/86] Don't check splitscreen in OLDCHAT --- src/hu_stuff.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hu_stuff.h b/src/hu_stuff.h index 0ca871f06..8173c065d 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -66,7 +66,7 @@ typedef struct #ifdef NETSPLITSCREEN #define OLDCHAT (cv_consolechat.value == 1 || dedicated || vid.width < 640) #else -#define OLDCHAT (cv_consolechat.value == 1 || dedicated || vid.width < 640 || splitscreen) +#define OLDCHAT (cv_consolechat.value == 1 || dedicated || vid.width < 640) #endif #define CHAT_MUTE (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer))) // this still allows to open the chat but not to type. That's used for scrolling and whatnot. #define OLD_MUTE (OLDCHAT && cv_mute.value && !(server || IsPlayerAdmin(consoleplayer))) // this is used to prevent oldchat from opening when muted. From 1c8c6387fcdbcb351ce822ea0734b6f395f9ec53 Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Thu, 10 Jan 2019 23:12:06 -0600 Subject: [PATCH 65/86] -nohidapi parameter Should fix problems where Switch Pro controllers suddenly had their mappings changed. Does not recognize controllers connected before game launch. Make sure to replug your controller after the game launches if using this param. --- src/sdl/i_system.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index 6f5e265b4..2154a070b 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -2169,6 +2169,9 @@ void I_InitJoystick(void) if (M_CheckParm("-noxinput")) SDL_SetHintWithPriority("SDL_XINPUT_ENABLED", "0", SDL_HINT_OVERRIDE); + if (M_CheckParm("-nohidapi")) + SDL_SetHintWithPriority("SDL_JOYSTICK_HIDAPI", "0", SDL_HINT_OVERRIDE); + if (SDL_WasInit(SDL_INIT_JOYSTICK) == 0) { CONS_Printf("I_InitJoystick()...\n"); From 93908a5610145287c692b832748c532d6300388a Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Fri, 11 Jan 2019 02:38:49 -0600 Subject: [PATCH 66/86] Fix chat toggle not working --- src/hu_stuff.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 89149a3f1..4bd0994cb 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1184,8 +1184,10 @@ boolean HU_Responder(event_t *ev) || ev->data1 == KEY_LALT || ev->data1 == KEY_RALT) return true; - // Ignore joystick hats - if (ev->data1 >= KEY_HAT1 && ev->data1 <= KEY_HAT1 + 3) + // Ignore joystick hats, except when the talk key is bound + if (ev->data1 >= KEY_HAT1 && ev->data1 <= KEY_HAT1+3 + && (ev->data1 != gamecontrol[gc_talkkey][0] + && ev->data1 != gamecontrol[gc_talkkey][1])) return false; c = (INT32)ev->data1; From ba9a6853d2afe760fac0dfefb1fa6a17526e30fc Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Fri, 11 Jan 2019 16:04:12 -0600 Subject: [PATCH 67/86] Fix the chat being incorrectly placed in splitscreen --- src/hu_stuff.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hu_stuff.h b/src/hu_stuff.h index 8173c065d..f1ecb2ff1 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -63,6 +63,7 @@ typedef struct //------------------------------------ #define HU_MAXMSGLEN 224 #define CHAT_BUFSIZE 64 // that's enough messages, right? We'll delete the older ones when that gets out of hand. +#define NETSPLITSCREEN // why the hell WOULDN'T we want this? #ifdef NETSPLITSCREEN #define OLDCHAT (cv_consolechat.value == 1 || dedicated || vid.width < 640) #else From 3249851c3e75c6bba5c9c95b992b8ecc508321fc Mon Sep 17 00:00:00 2001 From: fickleheart Date: Fri, 11 Jan 2019 20:45:59 -0600 Subject: [PATCH 68/86] Fix rendering gaps on polys with upper/lower textures --- src/r_segs.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/r_segs.c b/src/r_segs.c index 59abea3ad..62c0523d0 100644 --- a/src/r_segs.c +++ b/src/r_segs.c @@ -3093,8 +3093,9 @@ void R_StoreWallRange(INT32 start, INT32 stop) else markceiling = false; - // Don't render the ceiling again when rendering polyobjects - if (curline->polyseg) + // Don't mark ceiling flat lines for polys unless this line has an upper texture, otherwise we get flat leakage pulling downward + // (If it DOES have an upper texture and we do this, the ceiling won't render at all) + if (curline->polyseg && !curline->sidedef->toptexture) markceiling = false; } @@ -3106,8 +3107,9 @@ void R_StoreWallRange(INT32 start, INT32 stop) else markfloor = false; - // Don't render the floor again when rendering polyobjects - if (curline->polyseg) + // Don't mark floor flat lines for polys unless this line has a lower texture, otherwise we get flat leakage pulling upward + // (If it DOES have a lower texture and we do this, the floor won't render at all) + if (curline->polyseg && !curline->sidedef->bottomtexture) markfloor = false; } From dff273d990101721f4ac7cc72573e5bd0b65f63a Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 12 Jan 2019 02:53:14 -0500 Subject: [PATCH 69/86] Minor misc fixes --- src/hu_stuff.c | 5 ++++- src/y_inter.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index a38e91a78..9a940cbd7 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1421,13 +1421,16 @@ static void HU_drawMiniChat(void) y = chaty - charheight*(msglines+1); +#ifdef NETSPLITSCREEN if (splitscreen) { y -= BASEVIDHEIGHT/2; if (splitscreen > 1) y += 16; } - y -= (cv_kartspeedometer.value ? 16 : 0); + else +#endif + y -= (cv_kartspeedometer.value ? 16 : 0); dx = 0; dy = 0; diff --git a/src/y_inter.c b/src/y_inter.c index 379d5cd39..021519e3b 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -1037,7 +1037,7 @@ void Y_VoteDrawer(void) V_DrawFixedPatch((BASEVIDWIDTH-60)< Date: Sat, 12 Jan 2019 04:13:49 -0500 Subject: [PATCH 70/86] Turn the "Music" section of the credits into only the people on Krew who contributes music Meant to do this in song-credits, since individual songs are now properly credited there. --- src/f_finale.c | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index d210b9c81..fd7551c83 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -479,40 +479,10 @@ static const char *credits[] = { "\"VAdaPEGA\"", "\"VelocitOni\"", "", - "\1Music", // Can't list song names here, so we're listing artists - "\"Arrow\"", - "Jonny Atma", - "Moot Booxle", // Booxlé, add the accent char later? - "Malcolm Brown", - "Karl Brueggemann", + "\1Music", "\"DrTapeworm\"", - "\"Elwood\"", "Wesley \"Charyb\" Gillebaard", - "\"gxf4c3\"", "James \"SeventhSentinel\" Hall", - "Chris Holland", - "Johnny \"J\"", - "Masato Kouda", - "Fumie Kumatani", - "Luke Kwing", - "James Landino", - "\"Lange\"", - "Takenobu Mitsuyoshi", - "\"Nib Roc\"", - "Tomoya Ohtani", - "Vincent Rubinetti", - "Jun Senoue", - "\"SSNTails\"", - "Michael \"MaxieDaMan\" Staple", - "Simon Stalenhag", // Stålenhag, add the accent char later? - "\"Synthescissor\"", - "Yuko Takehara", - "Tony Thai", - "\"The8BitDrummer\"", - "Kenichi Tokoi", - "\"Tokyo Active NEETs\"", - "\"xaki\"", - "Michiru Yamane", "", "\1Lead Level Design", "\"Blitz-T\"", From 59c85425e2f90cb1c51492a5c17b6bdc34870c3e Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sat, 12 Jan 2019 12:27:30 +0100 Subject: [PATCH 71/86] Fixed WANTED poster drawing over minimap, WANTED cursor being colormapped, and splitscreen position shifting stuff --- src/k_kart.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 02c7e835c..742681f8b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6275,7 +6275,7 @@ static void K_initKartHUD(void) LAPS2_X = BASEVIDWIDTH-40; LAPS2_Y = (BASEVIDHEIGHT/2)-13; - POSI2_X = BASEVIDWIDTH -8; + POSI2_X = BASEVIDWIDTH -4; POSI2_Y = (BASEVIDHEIGHT/2)- 16; // Reminder that 3P and 4P are just 1P and 2P splitscreen'd to the bottom. @@ -6810,6 +6810,7 @@ static void K_DrawKartPositionNum(INT32 num) //INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT); INT32 fx = 0, fy = 0, fflags = 0; boolean flipdraw = false; // flip the order we draw it in for MORE splitscreen bs. fun. + boolean flipvdraw = false; // used only for 2p splitscreen so overtaking doesn't make 1P's position fly off the screen. boolean overtake = false; if (stplyr->kartstuff[k_positiondelay] || stplyr->exiting) @@ -6830,6 +6831,8 @@ static void K_DrawKartPositionNum(INT32 num) { fy = 30; fflags = V_SNAPTOTOP|V_SNAPTORIGHT; + if (overtake) + flipvdraw = true; // make sure overtaking doesn't explode us } else // if we're not p1, that means we're p2. display this at the bottom right, below the minimap. { @@ -6901,8 +6904,9 @@ static void K_DrawKartPositionNum(INT32 num) else localpatch = kp_positionnum[num % 10][0]; - V_DrawFixedPatch((fx<width*scale/2) : 0), fy<width*scale/2) : 0), (fy<height*scale/2) : 0), scale, V_HUDTRANSHALF|fflags, localpatch, NULL); // ^ if we overtake as p1 or p3 in splitscren, we shift it so that it doesn't go off screen. + // ^ if we overtake as p1 in 2p splits, shift vertically so that this doesn't happen either. fx -= W; num /= 10; @@ -7530,7 +7534,7 @@ static void K_drawKartMinimapHead(mobj_t *mo, INT32 x, INT32 y, INT32 flags, pat colormap = R_GetTranslationColormap(skin, mo->color, GTC_CACHE); V_DrawFixedPatch(amxpos, amypos, FRACUNIT, flags, facemmapprefix[skin], colormap); if (mo->player && K_IsPlayerWanted(mo->player)) - V_DrawFixedPatch(amxpos - (4< Date: Sat, 12 Jan 2019 12:28:15 +0100 Subject: [PATCH 72/86] Forgot to trim whitespace --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 742681f8b..e5cff06ba 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8336,7 +8336,7 @@ void K_drawKartHUD(void) #endif K_drawKartWanted(); } - + if (cv_kartminimap.value && !titledemo) { #ifdef HAVE_BLUA From 077c151a0be58a917d15ed3082b516848e323c49 Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Sat, 12 Jan 2019 05:37:07 -0600 Subject: [PATCH 73/86] Revert "Enable d-pad on the vote screen" Partial revert of commit d9b30a10e3990a278f20ecfa2b0140c86b229784. --- src/g_game.c | 20 -------------------- src/g_game.h | 1 - src/y_inter.c | 4 ++-- 3 files changed, 2 insertions(+), 23 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 7d3aec1a8..1e0c7e462 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1180,26 +1180,6 @@ boolean InputDown(INT32 gc, UINT8 p) } } -// Returns true if the hat is pressed for the specified player -// 0 is up, 1 is down, 2 is left, 3 is right -// Basically a hack needed to allow the d-pad on the vote screen. -boolean HatDown(UINT8 dir, UINT8 p) -{ - if (p == 1 && gamekeydown[KEY_HAT1 + dir]) - return true; - - if (p == 2 && gamekeydown[KEY_2HAT1 + dir]) - return true; - - if (p == 3 && gamekeydown[KEY_3HAT1 + dir]) - return true; - - if (p == 4 && gamekeydown[KEY_4HAT1 + dir]) - return true; - - return false; -} - INT32 JoyAxis(axis_input_e axissel, UINT8 p) { switch (p) diff --git a/src/g_game.h b/src/g_game.h index aff15ce4d..14dc12d01 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -100,7 +100,6 @@ INT16 G_ClipAimingPitch(INT32 *aiming); INT16 G_SoftwareClipAimingPitch(INT32 *aiming); boolean InputDown(INT32 gc, UINT8 p); -boolean HatDown(UINT8 dir, UINT8 p); INT32 JoyAxis(axis_input_e axissel, UINT8 p); extern angle_t localangle, localangle2, localangle3, localangle4; diff --git a/src/y_inter.c b/src/y_inter.c index 6073f93ec..379d5cd39 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -1318,13 +1318,13 @@ void Y_VoteTicker(void) && !voteclient.playerinfo[i].delay && pickedvote == -1 && votes[p] == -1) { - if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0 || HatDown(0, i+1)) + if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0) { voteclient.playerinfo[i].selection--; pressed = true; } - if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0 || HatDown(1, i+1)) && !pressed) + if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0) && !pressed) { voteclient.playerinfo[i].selection++; pressed = true; From 4d8cf3932066dc20a9f12112a41cba3a0fcafd7f Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Sun, 13 Jan 2019 19:22:54 -0600 Subject: [PATCH 74/86] Allow any key to abort network connection, ignore non-keyboard keys in chat --- src/d_clisrv.c | 4 ++-- src/hu_stuff.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 75956d65f..9f65fdf8b 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2076,8 +2076,8 @@ static boolean CL_ServerConnectionTicker(boolean viams, const char *tmpsave, tic I_OsPolling(); key = I_GetKey(); - // For some reason, gamekeydown[gamecontrol[gc_brake][0]] is always true here, so we're just going to check the second to fourth buttons. - if (key == KEY_ESCAPE || key == KEY_JOY1+1 || key == KEY_JOY1+2 || key == KEY_JOY1+3) + // Any key can be used to abort network connection + if (key != KEY_NULL) { CONS_Printf(M_GetText("Network game synchronization aborted.\n")); // M_StartMessage(M_GetText("Network game synchronization aborted.\n\nPress ESC\n"), NULL, MM_NOTHING); diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 4bd0994cb..fd3bf4362 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1184,8 +1184,8 @@ boolean HU_Responder(event_t *ev) || ev->data1 == KEY_LALT || ev->data1 == KEY_RALT) return true; - // Ignore joystick hats, except when the talk key is bound - if (ev->data1 >= KEY_HAT1 && ev->data1 <= KEY_HAT1+3 + // Ignore non-keyboard keys, except when the talk key is bound + if (ev->data1 >= KEY_MOUSE1 && (ev->data1 != gamecontrol[gc_talkkey][0] && ev->data1 != gamecontrol[gc_talkkey][1])) return false; From e2b3cd181e41436c0c0e06257ecc3232915f03f9 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sun, 13 Jan 2019 20:47:57 -0500 Subject: [PATCH 75/86] Gag spacing was not updated --- src/f_finale.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/f_finale.c b/src/f_finale.c index fd7551c83..b398c0ef2 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -556,7 +556,7 @@ static struct { // This Tyler52 gag is troublesome // Alignment should be ((spaces+1 * 100) + (headers+1 * 38) + (lines * 15)) // Current max image spacing: (200*17) - {112, (15*100)+(17*38)+(102*15), "TYLER52", SKINCOLOR_NONE}, + {112, (15*100)+(17*38)+(72*15), "TYLER52", SKINCOLOR_NONE}, {0, 0, NULL, SKINCOLOR_NONE} }; From ff1d433d1ea166d6f631355c33392c9f27194bfa Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 14 Jan 2019 02:01:00 -0500 Subject: [PATCH 76/86] Tiny SPB fixes - Fix typo that could potentially invalidate the wait phase - Prevent dying during target phase causing it to redirect to someone else - Ease speed back up to default whenever slowed down - SPB intensity now biases against high drift sparks + acceleration, instead of only acceleration. - Slow speed is scaled w/ SPB intensity too --- src/p_enemy.c | 79 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 32 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index fc3ae9d94..2e8a17325 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8364,13 +8364,13 @@ void A_SPBChase(mobj_t *actor) if (!playeringame[i] || players[i].spectator || players[i].exiting) continue; // not in-game - if (!players[i].mo) + /*if (!players[i].mo) continue; // no mobj if (players[i].mo->health <= 0) continue; // dead - /*if (players[i].kartstuff[k_respawn]) + if (players[i].kartstuff[k_respawn]) continue;*/ // respawning if (players[i].kartstuff[k_position] < bestrank) @@ -8386,18 +8386,35 @@ void A_SPBChase(mobj_t *actor) { fixed_t defspeed = wspeed; fixed_t range = (160*actor->tracer->scale); + fixed_t cx = 0, cy =0; + + // Play the intimidating gurgle + if (!S_SoundPlaying(actor, actor->info->activesound)) + S_StartSound(actor, actor->info->activesound); // Maybe we want SPB to target an object later? IDK lol - if (actor->tracer->player) // 7/8ths max speed for Knuckles, 3/4ths max speed for min accel, exactly max speed for max accel + if (actor->tracer->player) { + UINT8 fracmax = 32; + UINT8 spark = ((10-actor->tracer->player->kartspeed) + actor->tracer->player->kartweight) / 2; + fixed_t easiness = ((actor->tracer->player->kartspeed + (10-spark)) << FRACBITS) / 2; + actor->lastlook = actor->tracer->player-players; // Save the player num for death scumming... if (!P_IsObjectOnGround(actor->tracer) /*&& !actor->tracer->player->kartstuff[k_pogospring]*/) - defspeed = (7*actor->tracer->player->speed)/8; // In the air you have no control; basically don't hit unless you make a near complete stop + { + // In the air you have no control; basically don't hit unless you make a near complete stop + defspeed = FixedMul(((fracmax+1)<tracer->player->speed) / fracmax; + } else - defspeed = ((33 - actor->tracer->player->kartspeed) * K_GetKartSpeed(actor->tracer->player, false)) / 32; + { + // 7/8ths max speed for Knuckles, 3/4ths max speed for min accel, exactly max speed for max accel + defspeed = FixedMul(((fracmax+1)<tracer->player, false)) / fracmax; + } - defspeed -= (9*R_PointToDist2(0, 0, actor->tracer->player->cmomx, actor->tracer->player->cmomy))/8; // Be fairer on conveyors + // Be fairer on conveyors + cx = actor->tracer->player->cmomx; + cy = actor->tracer->player->cmomy; // Switch targets if you're no longer 1st for long enough if (actor->tracer->player->kartstuff[k_position] <= bestrank) @@ -8408,10 +8425,6 @@ void A_SPBChase(mobj_t *actor) spbplace = actor->tracer->player->kartstuff[k_position]; } - // Play the intimidating gurgle - if (!S_SoundPlaying(actor, actor->info->activesound)) - S_StartSound(actor, actor->info->activesound); - dist = P_AproxDistance(P_AproxDistance(actor->x-actor->tracer->x, actor->y-actor->tracer->y), actor->z-actor->tracer->z); wspeed = FixedMul(defspeed, FRACUNIT + FixedDiv(dist-range, range)); @@ -8419,10 +8432,18 @@ void A_SPBChase(mobj_t *actor) wspeed = defspeed; if (wspeed > (3*defspeed)/2) wspeed = (3*defspeed)/2; + if (wspeed < 20*actor->tracer->scale) + wspeed = 20*actor->tracer->scale; hang = R_PointToAngle2(actor->x, actor->y, actor->tracer->x, actor->tracer->y); vang = R_PointToAngle2(0, actor->z, dist, actor->tracer->z); + // Modify stored speed + if (wspeed > actor->cvmem) + actor->cvmem += (wspeed - actor->cvmem) / (3*TICRATE); + else + actor->cvmem = wspeed; + { // Smoothly rotate horz angle angle_t input = hang - actor->angle; @@ -8431,7 +8452,7 @@ void A_SPBChase(mobj_t *actor) input = InvAngle(input); // Slow down when turning; it looks better and makes U-turns not unfair - xyspeed = FixedMul(wspeed, max(0, (((180<cvmem, max(0, (((180<cvmem, max(0, (((180<movedir += input; } - actor->momx = FixedMul(FixedMul(xyspeed, FINECOSINE(actor->angle>>ANGLETOFINESHIFT)), FINECOSINE(actor->movedir>>ANGLETOFINESHIFT)); - actor->momy = FixedMul(FixedMul(xyspeed, FINESINE(actor->angle>>ANGLETOFINESHIFT)), FINECOSINE(actor->movedir>>ANGLETOFINESHIFT)); + actor->momx = cx + FixedMul(FixedMul(xyspeed, FINECOSINE(actor->angle>>ANGLETOFINESHIFT)), FINECOSINE(actor->movedir>>ANGLETOFINESHIFT)); + actor->momy = cy + FixedMul(FixedMul(xyspeed, FINESINE(actor->angle>>ANGLETOFINESHIFT)), FINECOSINE(actor->movedir>>ANGLETOFINESHIFT)); actor->momz = FixedMul(zspeed, FINESINE(actor->movedir>>ANGLETOFINESHIFT)); // Red speed lines for when it's gaining on its target. A tell for when you're starting to lose too much speed! @@ -8491,15 +8512,18 @@ void A_SPBChase(mobj_t *actor) { actor->momx = actor->momy = actor->momz = 0; // Stoooop - if (actor->lastlook != -1 && playeringame[actor->lastlook] && players[actor->lastlook].mo) + if (actor->lastlook != -1 + && playeringame[actor->lastlook] + && !players[actor->lastlook].spectator + && !players[actor->lastlook].exiting) { spbplace = players[actor->lastlook].kartstuff[k_position]; - if (actor->extravalue2-- <= 0) + if (actor->extravalue2-- <= 0 && players[actor->lastlook].mo) { P_SetTarget(&actor->tracer, players[actor->lastlook].mo); - actor->extravalue1 = 1; // TARGETING + actor->extravalue1 = 1; // TARGET ACQUIRED actor->extravalue2 = 7*TICRATE; - actor->extravalue2 = 0; + actor->cvmem = wspeed; } } else @@ -8513,22 +8537,12 @@ void A_SPBChase(mobj_t *actor) { actor->lastlook = -1; // Just make sure this is reset - // No one there? - if (player == NULL || !player->mo) + if (!player || !player->mo || player->mo->health <= 0 || player->kartstuff[k_respawn]) { -#if 0 - // SELF-DESTRUCT? - mobj_t *spbexplode; - - S_StopSound(actor); // Don't continue playing the gurgle or the siren - spbexplode = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SPBEXPLOSION); - P_SetTarget(&spbexplode->target, actor->target); - - P_RemoveMobj(actor); -#else + // No one there? Completely STOP. actor->momx = actor->momy = actor->momz = 0; -#endif - spbplace = -1; + if (!player) + spbplace = -1; return; } @@ -8582,6 +8596,7 @@ void A_SPBChase(mobj_t *actor) S_StartSound(actor, actor->info->attacksound); // Siren sound; might not need this anymore, but I'm keeping it for now just for debugging. actor->extravalue1 = 1; // TARGET ACQUIRED actor->extravalue2 = 7*TICRATE; + actor->cvmem = wspeed; } } From 19329f9a4a18e64b2752c0d9b2d143e11582b026 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 14 Jan 2019 18:16:07 -0500 Subject: [PATCH 77/86] bump maxskins to 64, fix overflow error --- src/doomdef.h | 2 +- src/r_things.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index c44e70c00..70e521b15 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -244,7 +244,7 @@ extern FILE *logstream; // NOTE: it needs more than this to increase the number of players... #define MAXPLAYERS 16 -#define MAXSKINS 32 +#define MAXSKINS 64 #define PLAYERSMASK (MAXPLAYERS-1) #define MAXPLAYERNAME 21 diff --git a/src/r_things.c b/src/r_things.c index 1825d2d94..d6234d4b3 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -2500,7 +2500,7 @@ void R_DrawMasked(void) // ========================================================================== INT32 numskins = 0; -skin_t skins[MAXSKINS+1]; +skin_t skins[MAXSKINS]; // FIXTHIS: don't work because it must be inistilised before the config load //#define SKINVALUES #ifdef SKINVALUES @@ -2771,7 +2771,7 @@ void R_AddSkins(UINT16 wadnum) // advance by default lastlump = lump + 1; - if (numskins > MAXSKINS) + if (numskins >= MAXSKINS) { CONS_Debug(DBG_RENDER, "ignored skin (%d skins maximum)\n", MAXSKINS); continue; // so we know how many skins couldn't be added From 15174b0f02e7fe2de185975b29b1839f77e0933e Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 14 Jan 2019 18:24:25 -0500 Subject: [PATCH 78/86] Missed this --- src/r_things.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/r_things.h b/src/r_things.h index a8635034a..53784415f 100644 --- a/src/r_things.h +++ b/src/r_things.h @@ -192,7 +192,7 @@ typedef struct drawnode_s } drawnode_t; extern INT32 numskins; -extern skin_t skins[MAXSKINS + 1]; +extern skin_t skins[MAXSKINS]; void SetPlayerSkin(INT32 playernum,const char *skinname); void SetPlayerSkinByNum(INT32 playernum,INT32 skinnum); // Tails 03-16-2002 From 32030fae5730263b6dd83cc4d046d0ea3b850660 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 14 Jan 2019 21:37:53 -0500 Subject: [PATCH 79/86] Reduce easing time, revert changing air speed --- src/p_enemy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index 2e8a17325..8a6d7597f 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8404,7 +8404,7 @@ void A_SPBChase(mobj_t *actor) if (!P_IsObjectOnGround(actor->tracer) /*&& !actor->tracer->player->kartstuff[k_pogospring]*/) { // In the air you have no control; basically don't hit unless you make a near complete stop - defspeed = FixedMul(((fracmax+1)<tracer->player->speed) / fracmax; + defspeed = (7 * actor->tracer->player->speed) / 8; } else { @@ -8440,7 +8440,7 @@ void A_SPBChase(mobj_t *actor) // Modify stored speed if (wspeed > actor->cvmem) - actor->cvmem += (wspeed - actor->cvmem) / (3*TICRATE); + actor->cvmem += (wspeed - actor->cvmem) / TICRATE; else actor->cvmem = wspeed; From 1a104997793ca5d2607b256f26c8aaa086074936 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 14 Jan 2019 21:38:38 -0500 Subject: [PATCH 80/86] Attempt to fix the stupid bug where SPB decides to not hurt --- src/p_inter.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index f9cccd697..23cf1892c 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -579,30 +579,31 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) if (special->health <= 0 || toucher->health <= 0) return; - if (!player->mo || player->spectator) + if (player->spectator) return; - if (special->tracer && toucher == special->tracer) + if (special->tracer && !P_MobjWasRemoved(special->tracer) && toucher == special->tracer) { mobj_t *spbexplode; - S_StopSound(special); // Don't continue playing the gurgle or the siren - - if (!player->kartstuff[k_invincibilitytimer] && !player->kartstuff[k_growshrinktimer]) + if (player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0) { + player->powers[pw_flashing] = 0; K_DropHnextList(player); K_StripItems(player); - //player->powers[pw_flashing] = 0; } + S_StopSound(special); // Don't continue playing the gurgle or the siren + spbexplode = P_SpawnMobj(toucher->x, toucher->y, toucher->z, MT_SPBEXPLOSION); spbexplode->extravalue1 = 1; // Tell K_ExplodePlayer to use extra knockback - P_SetTarget(&spbexplode->target, special->target); + if (special->target && !P_MobjWasRemoved(special->target)) + P_SetTarget(&spbexplode->target, special->target); P_RemoveMobj(special); } else - K_SpinPlayer(player, NULL, 0, special, false); + K_SpinPlayer(player, special->target, 0, special, false); return; /*case MT_EERIEFOG: special->frame &= ~FF_TRANS80; From 553f3a92954f9e2c9616cea7800e0e1d660759a0 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 14 Jan 2019 21:55:10 -0500 Subject: [PATCH 81/86] Fix really dumb flags on MT_SPBEXPLOSION --- src/info.c | 2 +- src/p_inter.c | 2 +- src/p_mobj.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/info.c b/src/info.c index 93804b0ca..ea9eac9d5 100644 --- a/src/info.c +++ b/src/info.c @@ -15861,7 +15861,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass 1, // damage sfx_None, // activesound - MF_BOUNCE|MF_FLOAT|MF_NOCLIPTHING|MF_MISSILE|MF_SHOOTABLE|MF_DONTENCOREMAP, // flags + MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_DONTENCOREMAP, // flags S_NULL // raisestate }, diff --git a/src/p_inter.c b/src/p_inter.c index 23cf1892c..dd27858fc 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -588,7 +588,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) if (player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0) { - player->powers[pw_flashing] = 0; + //player->powers[pw_flashing] = 0; K_DropHnextList(player); K_StripItems(player); } diff --git a/src/p_mobj.c b/src/p_mobj.c index 4379b9585..f71ff2092 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7441,10 +7441,10 @@ void P_MobjThinker(mobj_t *mobj) break; case MT_SSMINE: case MT_SPBEXPLOSION: - if (mobj->health > -100) + if (mobj->extravalue2 != -100) { P_SetMobjState(mobj, mobj->info->deathstate); - mobj->health = -100; + mobj->extravalue2 = -100; } else { From 7c42a72fdddc2d35f737387f4623997dc70b18bd Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 15 Jan 2019 03:41:33 -0500 Subject: [PATCH 82/86] Don't draw multiple WANTED posters in splitscreen --- src/k_kart.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index e5cff06ba..0b280b7a9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7334,6 +7334,9 @@ static void K_drawKartWanted(void) UINT8 *colormap = NULL; INT32 basex = 0, basey = 0; + if (stplyr != &players[displayplayer]) + return; + for (i = 0; i < 4; i++) { if (battlewanted[i] == -1) From 3c35f4057275a6779639d0e07584f44708b06fba Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Tue, 15 Jan 2019 03:02:52 -0600 Subject: [PATCH 83/86] Stop the keyboard from treating accelerate and break as menu keys --- src/m_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 2241e8261..8c0e6079f 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2584,7 +2584,7 @@ boolean M_Responder(event_t *ev) return false; else if (ch == gamecontrol[gc_systemmenu][0] || ch == gamecontrol[gc_systemmenu][1]) // allow remappable ESC key ch = KEY_ESCAPE; - else if (ch == gamecontrol[gc_accelerate][0] || ch == gamecontrol[gc_accelerate][1]) + else if ((ch == gamecontrol[gc_accelerate][0] || ch == gamecontrol[gc_accelerate][1]) && ch >= KEY_MOUSE1) ch = KEY_ENTER; // F-Keys @@ -2662,7 +2662,7 @@ boolean M_Responder(event_t *ev) return false; } - if (ch == gamecontrol[gc_brake][0] || ch == gamecontrol[gc_brake][1]) // do this here, otherwise brake opens the menu mid-game + if ((ch == gamecontrol[gc_brake][0] || ch == gamecontrol[gc_brake][1]) && ch >= KEY_MOUSE1) // do this here, otherwise brake opens the menu mid-game ch = KEY_ESCAPE; routine = currentMenu->menuitems[itemOn].itemaction; From 8f05182530d9f03ab7e06aaf8e44b50996b8dbc1 Mon Sep 17 00:00:00 2001 From: wolfy852 Date: Tue, 15 Jan 2019 18:47:13 -0600 Subject: [PATCH 84/86] Only allow ESC and non-keyboard keys to abort connection --- src/d_clisrv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 9f65fdf8b..764fbcbe3 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2076,8 +2076,8 @@ static boolean CL_ServerConnectionTicker(boolean viams, const char *tmpsave, tic I_OsPolling(); key = I_GetKey(); - // Any key can be used to abort network connection - if (key != KEY_NULL) + // Only ESC and non-keyboard keys abort connection + if (key == KEY_ESCAPE || key >= KEY_MOUSE1) { CONS_Printf(M_GetText("Network game synchronization aborted.\n")); // M_StartMessage(M_GetText("Network game synchronization aborted.\n\nPress ESC\n"), NULL, MM_NOTHING); From 55e67972253c38d79201799f9bf976525d9c1fdb Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 15 Jan 2019 20:09:55 -0500 Subject: [PATCH 85/86] Update the (unused) SP menu stuff to use MAXSKINS --- src/dehacked.c | 4 ++-- src/m_menu.c | 47 ++++++++++++----------------------------------- src/m_menu.h | 2 +- 3 files changed, 15 insertions(+), 38 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index e7e1ae69c..49b274d3f 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -436,11 +436,11 @@ static void readAnimTex(MYFILE *f, INT32 num) static boolean findFreeSlot(INT32 *num) { // Send the character select entry to a free slot. - while (*num < 32 && PlayerMenu[*num].status != IT_DISABLED) + while (*num < MAXSKINS && PlayerMenu[*num].status != IT_DISABLED) *num = *num+1; // No more free slots. :( - if (*num >= 32) + if (*num >= MAXSKINS) return false; // Found one! ^_^ diff --git a/src/m_menu.c b/src/m_menu.c index 2241e8261..4705a5216 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -911,41 +911,7 @@ static menuitem_t SP_LevelStatsMenu[] = // External files modify this menu, so we can't call it static. // And I'm too lazy to go through and rename it everywhere. ARRGH! #define M_ChoosePlayer NULL -menuitem_t PlayerMenu[32] = -{ - {IT_CALL, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0}, - {IT_DISABLED, NULL, NULL, M_ChoosePlayer, 0} -}; +menuitem_t PlayerMenu[MAXSKINS]; // ----------------------------------- // Multiplayer and all of its submenus @@ -3188,6 +3154,8 @@ void M_Ticker(void) // void M_Init(void) { + UINT8 i; + COM_AddCommand("manual", Command_Manual_f); CV_RegisterVar(&cv_nextmap); @@ -3235,6 +3203,15 @@ void M_Init(void) quitmsg[QUIT3MSG5] = M_GetText("You'll be back to play soon, though...\n...right?\n\n(Press 'Y' to quit)"); quitmsg[QUIT3MSG6] = M_GetText("Aww, is Eggman's Nightclub too\ndifficult for you?\n\n(Press 'Y' to quit)"); + // Setup PlayerMenu table + for (i = 0; i < MAXSKINS; i++) + { + PlayerMenu[i].status = (i == 0 ? IT_CALL : IT_DISABLED); + PlayerMenu[i].patch = PlayerMenu[i].text = NULL; + PlayerMenu[i].itemaction = M_ChoosePlayer; + PlayerMenu[i].alphaKey = 0; + } + #ifdef HWRENDER // Permanently hide some options based on render mode if (rendermode == render_soft) diff --git a/src/m_menu.h b/src/m_menu.h index 9509004b4..864f4cacc 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -150,7 +150,7 @@ typedef struct menuitem_s UINT8 alphaKey; } menuitem_t; -extern menuitem_t PlayerMenu[32]; +extern menuitem_t PlayerMenu[MAXSKINS]; typedef struct menu_s { From 0957d704519a096a74c9a9624bcb0a13130c29ac Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 15 Jan 2019 20:35:20 -0500 Subject: [PATCH 86/86] Update file hashes --- src/config.h.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/config.h.in b/src/config.h.in index dd86966e1..78d14d5bb 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -36,8 +36,8 @@ /* Manually defined asset hashes for non-CMake builds * Last updated 2015 / 05 / 03 - SRB2 v2.1.15 - srb2.srb * Last updated 2018 / 12 / 23 - SRB2 v2.1.22 - patch.dta - * Last updated 2018 / 11 / 16 - Kart v1.0.0 - Main assets - * Last updated 2018 / 12 / 13 - Kart v1.0.2 - patch.kart + * Last updated 2019 / 01 / 15 - Kart v1.0.2 - Main assets + * Last updated 2019 / 01 / 15 - Kart v1.0.2 - patch.kart */ // Base SRB2 hashes @@ -50,9 +50,9 @@ #define ASSET_HASH_GFX_KART "99c39f223d84ebc78e67ab68f3bead95" #define ASSET_HASH_TEXTURES_KART "ec8e9b7535cf585afe72ef277b08f490" #define ASSET_HASH_CHARS_KART "784ee9177b01c8cb26edff43eaf93d87" -#define ASSET_HASH_MAPS_KART "84018d9b35d181ca9fcc2be5a9d43a45" +#define ASSET_HASH_MAPS_KART "1335cd064656aedca359cfbb5233ac4a" #ifdef USE_PATCH_KART -#define ASSET_HASH_PATCH_KART "843a13a73935dc4df721427a8948fb89" +#define ASSET_HASH_PATCH_KART "899aee1b63e731b7e2098406c85608b4" #endif #endif