From 0114c2bc22c0acd2f29d74f03d5540f1d86bcb5e 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 2a152162..fa024497 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 50808cc48c41f178cf391590f96cf68b4beca076 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 fa024497..896dcc84 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 629067c5eb238e58ccc2755ab08409764d46d036 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 896dcc84..2b0ae318 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 e2f5c99217150d266fa28d47c30a1d8bec435204 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 922fac4a..3090417d 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 3166ed78..e546f2f9 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 eb91866f..e7dda836 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 9ed61ca1..d6e46a75 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 2cf93c84..5f6db6dd 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 68c952a4..f3fe9003 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 00000000..64562e2a --- /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 22d9643e..ae5c0ce6 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 97d606b0..cc47c453 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 a34a3393..99a4eaf3 --- 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 f3a92e1c..00000000 --- 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 4b724816..3aa52787 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 00000000..fb08908c --- /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 ce3b33fb..e1348d70 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 97d606b0..cc47c453 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 02e3dc78..2cc00122 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 841c65a6..1ef771dd 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 00000000..07c7906e --- /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 855c1c1b..00000000 --- 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 3a1cac9f..00000000 --- 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 00000000..c1af3c19 --- /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 00000000..c88155d2 --- /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 00000000..3817f025 --- /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 00000000..9716c31c --- /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 00000000..863a928c --- /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 a3626970..441203dd 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 355232ec306378b8da41344c9259e2934f2e1d0b 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 1ef771dd..9532ff20 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 cf5aa7b807d9d4ff3c0078d2e8ca00af07c4e648 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 6d00b47225bc857624a07e7ab7bbcb606edd86dd 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 e7dda836..5128589f 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 9716c31c..6df8f45e 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 346e11d6daed8d65e44b6561e8a5879b4729f732 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 679fe2aec16bc52b912bd9c17ffa9f403b56e557 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 5128589f..bc132c4d 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 6df8f45e..c0122d6c 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 14c5805e9029f807b70c40ed021f98670d8041ad 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 e546f2f9..3fe21884 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 9b698d24b9327dd2e3efdf45b48903c7acea0d19 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 a35f3291..0f96c22c 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 8dd0c8dff817498cfd7eab21078598cbe2f2f23d 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 c0122d6c..9f81733d 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 077469cbab3225a2385f2d93ccc148065f6e38a9 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 8cb70412..ccb25810 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 de0da37691be0a8b2127bf52b8eb0b0affdd5bf4 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 4f824aa3..18b51ae7 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 7616e3014218ac90137582e3e1d90081f890af2e 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 603e3de0..6dff4dbe 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 fa551a980bd6bcc38e0d3ac7e6cabcef3771b938 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 eae921fa..62301dc1 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 48d3df5c6e5ca2c0276851676b144cd2c7a08708 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 6dff4dbe..474fb46c 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 9684dfd6f6ec772219cf17832143c4136951d185 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 8299f6eb..5ea6449c 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 eb29a0bcef924375768342330026038865ac95f0 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 2cc00122..0a77624c 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 07e7dba730e419b49e2fc49ddd873eaa24bfde82 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 a1a9df90..95d144cd 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 91f9168a01f80f74f6b9a84712815d9a7241cdeb 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 907a6d74..61daaea5 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 90eacd94cf4a9dfb4cfb8406d612a9911226455a 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 3fe21884..12d3c59a 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 5f6db6dd..b957f48a 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 99a4eaf3..c2d19922 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 9f81733d..96ce1142 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 ab308cd627efcffe48bab14d154efd72eff84b9a 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 96ce1142..c97cee45 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 9a030bfd40e74b415b52c156a205737cf072a13b 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 2b0ae318..02c7e835 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 cf2b93d8ab4dfd9576c9112a2d5c87657fb57c22 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 d6e46a75..6b881b98 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 b957f48a..fd34939c 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 9b24fd9337b8991ab19a7d2bed09aa2912c1ea02 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 6b881b98..b9dc7c70 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 fd34939c..1eab62cc 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 00000000..dfa06f2c --- /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 c97cee45..9b853a80 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 908869e15b38d5572db40a573d97bba8b3f56346 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 12d3c59a..058b0f6b 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 503c75576b7da1434220ab8ed0085c90a16606c4 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 058b0f6b..245bbe9d 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 c338115ebc7326e0381938bb9191385fb4632c19 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 9bdf9bd7..52dc4a7a 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 963819c81de02d354926f5602c7745291b503681 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 2856cada..0267770e 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 6166b78c877d1831d351fdf518666e05e47b0020 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 52dc4a7a..01a19ff3 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 4ea7c53d8ee077ff0cbb1105919e743da7812c9a 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 bf60f3be..a37ff709 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 b08e522aca3bf7613566a0948b9285ee8c4189c7 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 a37ff709..3a425a97 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 3a0217c8c8ae0eb3d7e7397126a43df235e5fa2e 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 fce8ccd5..5481b131 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 b2c10a65..2d63317a 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 a3429690..747d4b06 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 b8fe77b6e22c79aefeb0b310b854221b6880bf00 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 245bbe9d..1ae42e9c 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 e7ffd86c6e86957fc8b893b98757cf2a631eea1b 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 f2979838..0a691d28 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 ccb25810..3aba7aef 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 5f632d9b3cb7ec920dcafabbde0858dd27e23975 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 zcmeF)3B2vsbU5&%10DaJN7~*;tJOvoK~VA%A)=~55JU7ukeCuf42ftSVn`7&6H{VH zOrgXOO;u{9f@+ObNmbES=Xw17*LT0S&fE8Qe`mV)oO|y%_pJLlcmMW0uC>=*d+oi? zKKf2ae(!hvEu4PpLB||> z>TOPW*ux%h@~L6%^=|XX2ONLu1Ma`_*aw|@(#nxX{rb`O|K$fx4mwvUMezZO()0yCe*=ZTF$6FA2cV=9!7- zAVio+W^<5eyFHc!VG}!TNdPvlvD*WE^KzcAoZ9WQBnUI?za;^fVdL&kx;>z0pW|ZX zP`BTb7;Lm}uYHRL{!Houw9;AS!t;hWPzyJH*U;M>i^#16N{;2oI zfBeV2zxkWL>HX(_{%7z1{_p=vnE(Fo|L*{qO(&Z@(<^ zRHlscBR}#Zy`TE2pX&YSkN#-yd%yR4OPv4r|NdX^Cw}55df)&3-(TYY+rRx=ahHL( z(oi1xOc}Dxr=IYX%egI+TM~fjbxRJ!iBp6efA@EP*E{dL^Lm$FdTH-#U;A1?7zq9k z|L_k5!66Z(92XM#g%@|dkOV2sQR#fgcYH?)@*BVL8@-Dzx~P0B_dovQKNbRlP${4wPW?zAOhm{_&6Z ze)1=Ovds9n0AhacX1;~U@D`>VhDs|}{M@#qAZ-}imrxABCgpMw6|nFOJu zEtdqKqfv%9twH`eY!ZTWOZ%fA{pj9hmtEFpiwVf4$qD?@Fa1*QcDK7-@8vIldCwAK ztKn^Ld)w5JAHmG_oTPr_E84pSOCqqpL6!udH8O@+ha!JFUOiwf1JZ5~+efz>Fpc&4 zFaF{$_HKOR8~2|3+~-b(s6ZBFOr%KxWt(6L)5XQu`m^mfZ5W08*}iFJ{#lQ-SLTuk zL}M%oKs6$Ud=5qa_Mppj(*1{iD6V-6VE40S2XR09+0Sl>2w<^)?&p54_nOzdW)w|qhY}3P~;bL$?BmDf~AO7Kf+b8lffj&t$_73Fd46=WBq+DQ00QL=nLH~1b z4Dw&&jsn*y4JOdimX`(0YDI})sH&rsNQ#d*LU?k^q~)x0lp@& z4hQK`%RS_fLkbf7$)Eg58Qjty1`tAA%MbCX^itu4=(vbq`ITQO>E-MW@gN%wMW!u2 zgbOlW;~Li}KWfB~j7g(0m62-18&;-Ke#-oaM?9i;@x>PxB`IwuZJbH1qI}=`-naMg zhd+E3!jDS3!(U(TI3loA3hEdM`<*62eghNys#NtC?lz( zvI;Xnxpov0SP}rEb}fvB{Pm#9K?yN!_dy^tZ6Z4ag>VKVfY9s)sR5jWlv{!UE`AaY zNZ>mMw%J(tL{KG#iPbugL;URSr7A69LqsegMImLLJ+uWuIHicOaArMbloRh$%;8qX;b;@=U zM*aAwdnri#Kv|>< zCPb_fC*z%V+G(X+cf8{rOL?4YFuQBpBvuFx0;jy{pltF~KIPX&kleQ)#P`Dqu-A}8 zLVW4(bXal#t4F}tv%i7(tYFp!5JFi(2YlL|MXJ(VK~ zzz_nq@La%>12`~}Mk2pKlY`~N6HhDy*_!zAkAM7uRMzoj$zTa!W`*=g03;{_!i6RRO9HU3 zw^xsvY6R4uIl!pj{_gMoZeg(@=0*WBzv)eHDu{t~w+sOC`}v>$`5rcT@7}#-*8nmC z!p4U@kw=y~ne}G@ zZRD3nx-mcc(T|q)bT2~^FKwUS1IlDiwJ%uA!c81qE^QWDiT!#^yKLj87sRv)#4m+QGb<7y z-u12`)N}0j%rnm{l6OKl>-%Rs;~8a58)J0RtkxBtAkt35B=D=h`m6n&k&Vb9CdqSD zSUVjFmRX=}k{#H7oLl(Yn|=N*W9kC*>v+|fKeKlyQ-q1oD5i|w5l0+RG*J32IOPv} ze#HGYz)=I5Gt>?5eCInC$)Ei>i}Pnc``NwoL!)N1D1mCa%9y_MxS(uq5T*6A-9XuF zpO6+Na6=W+?4Sn5%fblt5Hpl_Oi?jwgVuf(=)RGYYx1BNcRe-VZ$G|{^x=VE-2-|tIis5A-Eli z1-2S+Ad>(Mo;Sbw&67mg)Uei6C!BCXIiz9j_4KDdy=XcqL~;OGAZ<~>!f^ph4xsAY zu21T6Sn<2x{qAKZe#I+ZQ8Z1u!fwRP41~q^TUl8ti*K4d&gmjRjs&KT>qhb!71tga z1q8GA@BjYq7h=ag3DC<$KxpJ_M?lowY>KNPTtQqDk`qX~rQagMPE-vXIs4}tR7 zmWTYM$;@&~*S8;cb?q|66NbNXGu!rbmmgpvs=@;Gw$!2vt?%?lYFCv2`~OLINZl7k z7O*4$b+5O+4JKM76ypsTKLg6ZfK=R>1~xEgAsK&h*$Id-@)lqE!uggjc>%W^;7snykOP>TGyu2smw&oLQpAQJl6F#!0Cid=kpchIITRKO zJDo_UzS=3%QD*+0|B4mUU;g+X&wDCT3wvE~M>#~+|or{%Lk5Ez ztMZ8%wh2zAq1G6PH8cI>LFJvcdsZ#SLz?N{GUpz5mOBD5f@*N^pD-(DHh#%=*5Rh{ zZN?!rKmPdRdlz1KVb2pl$+E^kn?@EBr{PSk>xeB=#wo)KUhsn6``-7yvcASe%z^{Z zPWhX-LK8-?G^*<@-$jO~0eL4aj;$$(|STi)`PRReDp z`Hhn%BvvK@vQc$M811KvgK(`E`LzQ!ob1KzCc9!+#G{CoVKgL_LmQx|Hn^C>d5Cgi2x48OjK9+oM94m_f*>^K8ruB>4E}PhK zXzp>3drU3OcG&`XCQdu#6Qdg|LO9yk&TkTX5SixQ_r7-%#IKxsiY?Gp#}Gpx*l>%> z7@N4BxC!p09D|(Yl1%v>x10d_gd*b1-SFRXNYEJsZx!#wWRT?<56#@${Hl-T~FskdIR#wLNL;|~!g0f=t4fy@xe536j8>n?Y>OOfV7 zOt*z#&q?}~6>E!aM+gvsF7OaQoQLl6TIB`_ot2mru=Vuu?L26MNdeKaTXB9IjPhjB zGze!`85|s<52BrG(DohB>DUo&`#H@c+cH6!Bj{)dBx!Db^P7()!FJHx4IUs6xEz9y zUY(c~4uVoxU()kQUJRvLwhnrfs?zCd+AgI0WX7^^dyjBX0SzpyrT1JKz=j{!OsS6AkE> zzVxMKaJaSyQJ7@#L58^Nt6cFDv-sF?W5z7ogmFP&gJ=OrU<=WW9FvrxD=hiPH~@)* zbsuZ15)o40xNB^jq$ds&Qu`(Zha0YYS9`=Euzq+O3Z zAd0l^vaCDeMl#)`xCgpw$d?Yj=RNPauE7+yViZJ-^>Y)4V#ekS;ws*9-&g3Sj}-?p z#rnL7>x!FDP%1*R=Rg1XO&oM7!Ylq=gLxdcTG)Bho8ELtOYQU0UU6|^5#)sge_+1K zgb*NL;}C+_4sCEV1h8>(uZe4!8$>!ZG8=jt!+?J%_zWz|IPH*O2tx@3*`=9~+`x7v z2vN>;;qtm7tv9nxj+cEm(9BMaeeJOjF$YQ8jP-c);upWT4BByKcbvrU{Lb$*@nT2k zj7qu2;Dg}q6Qih;WsR$Z8i?vXv35BowLkHRPi#UPv5AKZns~&ZAmG5psytj)7{b#g z1dgTM+60I_v|!Mf4!(0>@%KEpg>_oRty zlgly)()wjt(hi|RU^g(CPkriBjV)1aP{+@72AL~yyJ{Tm?MxSu3{~X~5p(%I@PQ9( zEHmOPNE6CojrxuOqsHX6^xv^(1foNuulF4rbt=yGnG5)66)THoH0i;e2O$@um242spELLPWhEh2Ed@AH1pi&KDQTZ)BZsq9iB7kpju!V-RO&Dk9B*|rgQTS zjzanre_TgJ&)p+`!c*A6$~$`O@=xruSy^7#eaDl({N*o~aMHp0D!17-XKr?o2$AJv zPq(bAIKI`H5)GF6e)qdyQ6!Q#g`!d5(2_^^u=~nN*$6j+y~b5o)`VQ6C?$2Jg^l*u zB5gw7%A#(`o-4nfw3O8^>#jchoIUW%xY%-sxI9fHof?GK{#V9xN?-lzSBqklGV9Ys zWO?PcxW47fU3~A7dz{hICgd``m005O&-ShJo7e9}BLE}W|LnZjM(bU6*=6N*NeJ?^ zr#-El%&R-nAQ%PK`hMgGPRRipZ!`>D{vU$Df+z?Cgg1CyKjyL#1It0ATioInC5$w@ ztm(Qf1KogCUITL4pgiOa)L#!f?69H9E3-1@ff<1zi}p#A8#x87#5RcUZa#I*`ao{( z89)0aO=(D<9nvLoCZS}C&vcqmJJ%rm<#BJpo;cvOQ6NijdCPW#$AAC7zcFC{tCT|)>qQcSbI*~#o-uzH2#QIC35xseAKfEzGK5f4X% z4K{=Wk?=-2qJbEISr7v05~?X1_2E(Ax#OA;2%m&9O>VKp$XEsH>Kuf8oC2(8cw7#o z<;FymnfXgQ6H#C$fj|g=xZ2IT?CrMV7SA)SD$jZ>@^Wt^sEJiaS|cZ;jyPNDv}oMG z$i~FNn)w}~F|bLHrwx`CZX5QLj%Rq~MM{m$$5vZDIFJO%EkB$Qzy(0c8lk3Lt~xyu zeXRL7`Qe;K!O=$_U2flLhr?-L$sw=XgtUK~rDm_8ZBIY$>6cuBHsj{1a_2bO=N3Nv z;SZNXQT>#VaHdI&L#l{gu9GtD>wIkeH@9>cN9MxVY7l#W9FQEm_lZlmn| z2O%hW0BOc--|3$I%nXxe?dCf;iJ~M$Rl7^iff{un@L2U2)b_z8wyQVDUIwc0p$)YCXa$DAvD7gUI+2*!M&u0BHoL-RI>Ks0?d^cnK?fbwE=sY} zDr}c~5<3DC+)_y^&CZPG1o5Nn1^0Ix0hr~J!0iDgFHir{I&`Rq{yJ?lYRKE+ZEeUi z3PvH$APqe#&)P#CiLABRM)FDRby~i00f-H4#ID)eS%!B1Oll8#Mrp1^A^?jb1k|}> z!F%8P-m$_>Baoc}l-Byu+Shv9>qCT&^|Q9q$ZI`m*t#4B%1&T92m;A_v>e-Dz3t9D zpw0=|7SmWyx6>d1Ou?yl7Uflg?bzGj{`R%g#NTd_2JO5jPG}oNSQG**3Bwc=Hr5qVPK1rpl}e_R&0YEjNQ9;7wLTZAp#IGX6kg> zu-Qg%3F_kns?}|984R6_^@4j57Y(M@Bip=XKKjv*mfL;WTSc=hHpHjoV+)O>KaTd! zGP{Y>_FUN@z`b}601+DmT?i3}n2OSmSrWqMtS^lu1l%_ItIL#mF!SAlOE0~2)f3^u z$1*AH~qmDXi-K>eYK%R>Ni$DNI_JzSfB@aLDR?N-nK$kuaan96PVrzn0IyURP2c_>?VXAtsd)@2G!3An{T>t?gQi#$E0jtCC z6EE)luAK`nP9@U83vCS;`w;xcpBp%8@qUkJh4OBMWj!G*G zF&GydsL&?#yB7(%N5CT0aDQD4d;=*qt9xcD4+C1To29X>wM1ze)t4@vVCfsqlH@>mV-lO6wD^Tv&zV@}fxGA&{j*REt^EObV$9g;Tp9q;kfOgnSKii|W z=eIar{@jJ>3YUIKY;h`iGKu~*;O9Pg$Q;)Jty#vDKpp?|ClyDWqz4G={5yirjnllJ z6&|@5Gl+B+U0vdM9SGrTq%@-mXZCWuj0oRAF-TIM)r`U}oB_^Xy4X#F!#6)jAZ>(( zVmf~_<2S$g%@Phls0WYq#gjhp?dYB|`Q>0{n!T{Lj`|tg^3Ad6M64h5hEXHx`}%7%T<}wiipTLm|0iZ3JOD8G=A4r)3OE zKL{jV5(?=UKoE|}o`XO*gM^#3*d6zizQJU0O3!y9K!%rox=FVl=;HB{kF=FNzjI{q z2mB0Pb&x+hP+s4bA!aUq2D^H9LDorrFMQz(%e6ma?=#X=XYZ zCXtgJu=}OIa{Hyb?~QoLSaZS>}cSEc_BcCz}x< zy;C_ht_@a#IkVKt%1R$Ga6RO2 zW^v^qTs^z98+_8^&Q5rUU?Eh}RF8ZuLt4T!vD`SDM09Cz_oJPIt6|19#k~hV_`wB1 zm3a`PpK_A{$j6?hyULtsirX~TM71ss9q6*8lCL_7r_9px?FSO^_~mRa3_CyIdzf8a z#gUJnus}Pgf4Z@&hsy-wN$3*BKVd>Ax)5f5+SSuU&Q0Tza7)sM^uj7T8G!WE&)H<$ zkT3%P6&vU|AkLOJFFXOzsyf&D*9_?A_?`ic09dvIRk*H(;=Q)FyeaO{)}L7 zjRFJm{`bFsAsW=w5StvVqvEE24mxrKWitCn0|CPsKprML!s6Qi%|V*^DGP*=9_|Du zg6kLr20UUJH-eUVYLIol(n>__C(`;*t|SV=D{mby?HO%U zdKn%kA{{^*>|qakSgAj|Fm{8S&&CbKmB~dooCH>wHYBp+0MxZh^QawXiuUvG^sdvo zbpfWBNq>-LC(e->MI8sg^7E~WjL z>fZIM+go{sVUGH>!==5;P6Qc%!nqLN(Z6h)eJyq1KZF>Th6fGWfM7s;hymdsVf~u~*+&tB zVg5BisPk8*VDHOwQFp!TUE9TPVy9$io!jjpZO<+R2eu}ymP6N=-F9x}`^w6` z*G32??|kPw7pXg`efwg*X_a3(gr38I-ozkq0th6cLZpod#q?1PqwICqNxr3%{C`bn3u31auc(cwu<}&?9w-4}>~#+U>_7d7F6cU7PYVz$oU?1Yu3hQO+O1uNv@4@;{i6@ty8Rw;pu;gP*jC*R zx4n#8-eKVung9$N@WUEqm>+q7mo%{O*vV^O``Tr2iDQs?JiywRB25j5!r^f^AMzh^ z$RXvP>yuADc_7l&ai{f7CtwiJVjKirM~KNo+K>px+=^dao_1O29asYR#Vx3H&_cwW zf*cp5L7yZc^Gf>^&9iR&V~?A?F2Mc*FDx-Ixbyz1DRxdt>YeX=XPL<%1f6-xC;<1d zd-v{w;PuSv4smN|eg_|Xa8XJ+{q)m|c3+9ON&n1-gMjR0kiTQaZHVo)B3}?Ef5IeU z)Nc9B1hcT0g!lie)6YC{1lIA)Pk;K;b@1{%$wLE(LDo~`%wtWWbKtOW1VG35xj259 z^n0UybN1P1msy`C9X21(P2>|2ePx>1>iCah0yopZ)BjPo6U*bzXza znSccMZ+WBIb{dsb2X8ieEeTo8@S)w9#ad$`mWWv!>~3gN00GsH8~_5?`UKj8A5&On zy0^{r&wfh(bZ^_!z01rr>U=XCw{(|g$^?|tGfuW$eft4hv0fo@!)WLb6u0(2X*+r7 zjse8pt1oj8*$8uFMp1`DboQzM6m+Q8PE*4!I=*O|#oln^MUY_en|LRz2|a`+o+xTa zjcFvta-lizyz`nsmLipoL0ME`#ovry5WmJ{{>n8Bv{|hb6ob97dl5vgA5EBGe~Z>) z9JFdem!V$=^%AH4sbAY(yVc*qt;e2mn8SXVzFizUAC!SYu-C6!eguJQ;ygiTT6Pv< zTexUdx)(l#iy5uU>=T&q+_vBIcuZL53mh^3gkQTcGM(!abH5Zo<5^Kocw-br(2_S{e_|nL9g=1%$v9dhrUz_RA zR6gmMiR<{%A&VfCB;~f>ZFa-9X4_ z&omQx*+J$HseJooemU^@W&T+{Zpv#Ar>ud!MzAbHn(?+;?^@ToRv{R|sb3pGGAvVA zmvE?~aPpRKmP=ds&YwDEz3Oju0^G8WgZzcdHmJjBlWa@={6MCe_Vi1$1gicizp>+( zx2;+PR9j?SEZuB{YSUdq+x~Om2!Mh9n%BIhAUT0tu;;z2LOaiFY#>0u8~_F< z;BEjV0_A{7WUc+h$-!>$6Oxha+v-C+k}w!d1`4geFMjchWeZ8Xgv=w;Hqdg`6jyn& zto($l%g3JO%fYYi%4dzP9O`VpoA5F7VYY!jKpaRaoQyIX=yp*~I_ab}cLio#b;VUt zwWa=SO|5*8h0H-d+BwUtj5RSxyY#aB**F6w5LbVzvvh?c1RX{s>vXs6w}zUtUleyR1QIoIHFp!|^NZ$I49K#c ziviiWu8WRYw|fkVA_t%$792-e8wNs@12l0}brVa2b*H_Na*3(m1I5=i%s{+ivMW;{Trs(GOMCir7jBe2 z`!my*SDjy`FCFd~KJ!yQ@|iYx`Lqt7>86?KiSJ#qA+Qm=y7-oF`e$m@Cj|sJkVAZ8$puIb-shHkjSa;Pm?6{qA>{yv&4d8@lH`@7c3v-YQUEYkP-T z%zp8NahVO<~ER1+a6|9lJh}8s7hTrkw3#F!lk`7(~r4X zzs$eRj~jx}#i6+}Zd~wKkMFPjJoMG6-5kEI|}Z$%bg2^ z2K$Lc=Wj+s^hR+!gnM0pbLj&087Ax^E%z`71(_Ohrmfw^`4%q;gzy`+xAV;O(#*W< znh=~OjCy4?!!a$f<{cJ}0JPU-Iviw&&!WT3mL$v$pFj+2?u~%-NT0FobPY)KZ7Y(( z=NjAkoIlg911a{fIvzgY^-x=+U2vW2T&K%CRtCs+Px~mdUG|OI+xbZ^ zf3=?*k54$^guW9k$Z>%l#Jt185dbr=nTsGW*K-6$+zd)z`f<`56lNGg z)<>A@_+7Jm?VsQ3jf=nqAxw~IyF!iVDM&?d5kcHmf|sVpApjYEistS9?!=Gvbph6< zySF)Wt>biE=7}PVHPjptyy&8fijHh5yl0b9hIg(v9tbES7zHp&sQ5YfPsDwBoFh$T zf{ZuHv}i{OV8pm_jX-RG^SMT+A8O!WfrTo4)Jdqzurl8EwznPV-L)ow-Qxl^#JGE_ zP~2>9b*U*sO_6G>l*eY-vpks}Q#rMHwree-T-m`Eb%R8^ z!r-mxw3-SboV_yIAQsI>AANN12~T)J|M35~)s;>naTh|h(@{oZdIJrsVpz93la&s{Kjz;-?hTd*yh3-vS(j(nO(#n!^yK9zqYsiC$(qZ^7F0D z5xe&EPa-=Gh(GTzPaMElZEaSEP!@I`h^q%zCg9+JALPfAy95v)4w22~E(nA;sr;Vt z2AT4M$fGy_gN~%~fe(COS@hdi@}r?*O_DR{pnN8AmsjZd7H+32o_6t5SK|Ge;7lUe zAhC?wPs_=n+#`fk(nthRmP9&bVNa8LhAWOE{M+H%_Dna^YTL6MO#P*-l>Xa5$TMo+ z@0@eaX-Ato`@#@_98_3vQa>6muYBbz%c-G3y<(6OtH*V}Wf0JI!95W1yWwMHWu+G{ zdkj>aldgO%EJ?=@6a%XZ406H)YJ+Z?z$xHHQ>Y;#ksHMkSK*%e#>hYKhuWzh@O72>}mr+jayw) z;@S51;DgH_=N;zhvVd;P+TQ~?SZKOj7N3+W2VOnn7z7mC4Nfz;aJT|9 z8!4heOa~N_;x2O55Y`X7Xz3)UBNiRiwjXJ2@>30nn&A8QTW2h}7#&(&;%UbSAqW1lI9PgUHN` zgV5Q&b+CBC8gRmi4`B@^ewGg05CHy}mN?vn0phbK!Xpmy%z?-+f5Q7VXls9V=_nWQ zo&LW4vaI5d0tCz6s2elMCU7#!KPkvlU9^ERXd9qxS*NTIGm%G_^!J@@#tmdW)6O5H zoqxtpx3p&-S%$h@GK{p8wT=ATfiWO{mdj+K4~!9UGXH&{SN$K|_^X0%jb&k$0GiKQ z8tZ1JwXUBtfMtWVe7eiiEJAYc zM>km-6wOJ=S5{W~v$2B>u6>t45<+`*OP zz!kp+@#r#R{c$9ALU2!np|oY%;p@0v-^xy!9_MGvJ{uyCWvZ{@OQz(1s7aU`UmG{@6hD{u6|}GH#y~$Q_7_j z8E-C4m7SAc6mu}d$($zM_9_?SMdvl4Q)`Os|6&mKzianl-$6Xef%!OFTQ1X!^?P|m zG!Vau8KAtK9fY6>VNerS0XHEDFPH2E5|vBocJ12L#Lhw!4-htBUhK>)kMacpF7@^{dl1i6)pij;hRHO<7dGyD zZ$fjci3wpom5$eW)A$8f zP~H}I3uxT^T?h?gfLH|U+{7!Rg;>PVy5fdFKtgYBg;1%9wRYnf+G&(!J!!bPv4l4JFR!gC70}ToYMceez*6Y_q?YF z3OxiscOYc}$+BZDEg}3YLG1ZsGkv?r&=JP1f*6%+vQ|!atPRo^$a<}bIKaWOMjR}7 z$^z=3bs6$oc;A_q@AS*KliJ10IGJ8;uhZpjiJ|Y@7|Ki_OdTc{AuRL|L~s`wWiHKy zAOJcN@)HEQ1TWWt)9euhz#0))|66l|m|e<`P|#qqp0*dyACf80R=+>pwYNHsU(MCM>wp*s(_FJz#<@LHY*@(d)Bj_Rh}k-XH!NKPybXv`8we5C2vK>&0TX?E_b&#Kex1W&v832h`v z_dzBtx*B=9!tu{AvogE#dhdwu&J6VTT=7 zw)(6W%^(zie3M5|8SP@dH=~U0JPho5&<`R?v=!G2G%C%Ypw4T(=}j|UmZvs-XL%8E zlLxM-CVa;nbIj0U)M1AP+{T^@qZ5D~$AasWHYJ~S`%`_j_iv5pl%e&%{9Unw-S)WP zphNi6F3ULSwFma)ar&_fQm)bEH_8n+)Lugmij#<_ukw3P*lD?EK5Y{bNEtv9%0%p8 zCn}X|Z>UtyJIp-?kR1vM&C2fWLI`FFX7*RS;uYl}k0YhnUwIl#u~oS0713FiW1O@N zX638Fu0$6&;Im#J14sg#eNv~DNX5(_|8&o=Y0oh0wP$*1W;$&De6+8ZL}uOc zyYSq)Om4M%reQgU$hXr<|F&s6)#OvxvmIt0> zYKR>JasUHp+(9(U0pd!ecrK?Lm~ur@4fUlM>8=h4*`$yNfbd!pC30mtiEwGwh?#9w zn;DPUZpXB@%{q?nEK_ab)Y#K4WdZEI5wP45$@DU8+L^{wJULvBmd|?GS?4>e?}d>E z8035Q>?ykLr1O>qb_sMU#T=cLonBLJ?%B}>skLDaV(VKoLk_qcAl!v>!5>!Jx9y{N zyQ}CXNM9P*V`cH31CU*M^5mZRa}$q0KR@{h!`;Bk^|t)P6V^9(@o_-Pi?t=)&t*z` z@VKYINlIq~+>zkm3j($t$hIL1aWvVTXUeV&%9eGJHha3&d8s21R(kAynRb4sJ;T&- z@|($DTG~AOJoDw3%a%GlZP*rw@^^N?Y>&8UtI)74J3n@O+(j|(F!!efbu=J=gP=N1 zr$Z1OogHrwB?8q0Es;kW!X%k3? zre6+DCdB7&V4C^kU`-hm7himFKYav9`k9~b35m$eOgGaLhPz)5R^{SPvXAiC(#stX zb>t@<^-OMoogX{)-XJINqSs*CG7ePrZgis?_3KgV17tZTHRWX;4T&2+qu>4pZzNx?V%r~rA;m0Y%43DG!nG+<*|d} z9szYx5A}3XP`&0I=AHoP0E5E7d&x^)(u>15<(RHc1v(2NBr*wWAmpIa*#^X(QUB93&{3m!M1 z293bfZHzNgR(*mnCa9D0XWg>y>@^bluFKW7*M8DVyYFn1bmu3&b_B);#MXvM*tutT zgu(H1_X)au2EqTr7rs!oe=|&);>{Z@1Od?K2OV@!Iq!b#vB#Eg4+*$*)1b`tt&TUi za=_`hBovc&9Hca03~u)UATk?)97H+zA&@~zmO=Nx?L~Pbkvg4w?z#PXO_DDJkQYRB z>y2N6-2xYkt_PG?`;sf*GSZ%DX)k$0$VAXAONQw(m31SKc`!3y>7~1G?TiD;d&Ch1 z7Qm32#^I|Rp0Wg>$1+cCq%)#F7-o3l9y{@ow^2>TXI~Jm? z7x}Yu4GKiSpvGS3Y?J;gtG( z?o@pG)1SWT5r#qSk!7fnaMC=-4WD@l@4L2h)8>e{-{EoKi)JTco7@V{t{q1_SGrRg za`)q81mKC!zxlb_OBX~$h zY}M8Ab-L|uTVZiwNV%l+(T{#~+k2!PQG)aapgnwq3}=%wH6fI>r+s`Zt8#7@K$N;& zHUoJ#t8UZCM|%wEkM*ysrct;t(^v>@!0o$jfYgx2FW=B+z6+ezU$SxLiOwXhxkhul0n_!JR}g&Gn?Uh;g)s z-(=jt_G*cRAOPbcpLMGD0Q_!qo7>h>?5D^zuoW z5dv#ccM7FCmbW`9|Z^iVbZt+KpqGVnS^z}HU6cSURo|8S%fEQN43`?_#@f? z_c!mb5Ci}Vy%9hNY_VbgQFKTRLGO9bdyc#s8sZCYXJ8zlI!klTvICocejFz9O3f1H zrv=;ug>ch-n0HtR0x-@@J*uN1F}B|YA2kbB)xKjhZ2*= zLMfOmVZK^`a*#fxqcQI=|2$0e0PVJE!8g9~jou4i_`;&?2Vrf?Ap)0Oc3F`bwDUnY z%;dwC0M__%m3aTfU_wR*bJn}B-!8+_zPT-6=BKP>H%b4Gw+ryH7d`47qjUlGHfL^b zRo3RV5G;X>fA@GzYmtT>_}IrjR;YlZZ>WM7B%Qx)18P8nXP5->j(5CckNP5MAU#?~ z&z97n-ICkeo>*_qh$0XiIczcSun+_Qg1OMo^}f>rqJD2pxnLhL(D9Ji^j?Ewf_^sj z+ah9V?B2b*>^~wZP7=|@9cTSe=dt|W`W7(t0|F>&srsBsVG@R|FX8%1un?+&s!l(c z>KqLpr#tZIkj~F6?FYDLr!mtVvgQe#db8im?j(tg`(3+smGr3X;S3A}vpPv1K>`gW zi+wYMIQT{a3vNXIwjK;5TMv{Ol#Q9|3a0WY3qNKmJ+Lb;J9ofT{;W@iPkV+hf%pFt zz8yc);-2~Y7GL-zY|PA0S^etrXg7B8{MfU-*~L%0Jo#(GEKmBc*Iwr*{Y+2ZwY^y4 zUxsJT_EkRhN-R*AW86mpH4k3u6dKrI!OOO@0ad*|XftvvO~NV7OrQT&*p<63Put#AK4k@2Uh&mA>uVg)FK74t z;0Hgrgxwcw&HuR|0CT%7kb{n?bKMu_ZYReAXC+{>{Xl&WTaVp$!iZK7k-sGXbwg*A zY5X{WWZ%duBF@hWhdox_CCqONAbbeJu2>G<=RWr-eLcUm31T-#19A=KBoVMqw;p@t zD_=SDzHn|=K4cE|_8>lC5Tf7?F0=ey?|Rq5Ej;w04=qxEoW&fq^UT|D-ZRkGh`bv_ z2!98_k^>mfFjI5JssXoxYzFen%i;0!L!IxGQ%)({f(QWtAFhL-(BPo`^YWL!yy*Nc z5nrp#Kjc`mCH$P{Jf~b1;Av07M|@MF~0y^9qi?5q7@xr7tb&&pFH0Yup&`^IE-S zxjR~5YcQvyAnSF)b~||Q^@lbXxU(Lx6oJ0J+|{; zeeO)cw78$gJmxXw236%pG-pjXXVFI6D9x*Fqp}Pw%G`4RYIo|Xr}jSbk&l$0D|a2) z{KO|dQB*h)2*Nr@N_aI3aP6=cCM^Y~4G^C;qJ!y09xLWTn&v;Pqqbt3mjyUX?IckW7AO;Y`wY#+Q?AOxVdc-3hQCM^mZC3@m{^wJl z`c%13oT~0L0g)Ht3|`3X;y>&xq%=cgoz14S`V4djciaKsl783t(DI|kyB?4y z0>E@8z>;7itTe=vj>AVTqo9K9=^AD9jSvW<9?7T`Z1u^PYy}aWfB-BJemw(c zo5Y#xGXm{4gb)N)5Q3o2jOi$+L7hnB;(lvtEH*O<1!6#&&kg~kfhd?^rRkSQ0bztQ zb4nX`;YLvTIjsn!;fEkO!{E>mBo+n>FD>aL@_Ih#&_fUH?b)-Z=XOdLin#p5-3P+8 z4;d*>);G(O+yHlwCimJe<8l+m4M^StpWqI*CDNA`p8tOfMF8sVfN(D8zyTQOW=@C* zp&*mlj(#^H0Qf;h$N_PgAZJ?Ni7<(@OxuE_>4<^d0Eq1;U;dC&8txkKExi1JEjan` z6JEZ;AQb1v)*OT+10d5#zZ$8fk@n0d-K1Op_$!z2+?fQ7mQBntm8+JBuYnf`7LovX zgUi*tSbfNuNNnH(rh(5L0kAy4DL`1WGgey~1aG(iVa?=_R2<=$5ZO^-SBTx>7Plxz zhd=w-&-RxSNdznpoG+(Im(K%BPdYg>yWB*%HiCW`A{)RwBJ`>9Ip@WfMl;%H})m$|6nSxTU}R$t(~sry99ScL_VE1r~w; z82oPG#Y$tvFTecq{!EvM*wv-{{45W=9^#S_uZGxC^rjf3CLE*Zk1dBh5DsKqdFO4x zmK?$)LT0!UA^r*L#vuNdAV(c_RL@o%$^O}ApIzc+*v&LO!;D)(fR?bcT43&#f*_)q zGWX35VqCy_0P?=}wXZGbz#+4l+BV|-?|=WYm6)@?JafjCk69X*U`7Sf83bl?(tVE= zuB@z-%SN^m`IQqPD(w5OG= zIg);gGKU|2cu~@6KO{$pNL5%ENZthq2_mA52$ti-mLE8o?E>n&gq_s_3n35CWw!UQ zg zpzx&TE{dcG1exjWKk|`}EVDV~AzO#}wqTZtJixY}rGqEUT)@E`wqr1}h8i-ch3RSc0zk}J0>pMH$O~TZg5Kq!cR+98`OklTZzZ<&97~qJFp1za00|D+pYe=m z^uF?yuk>{lW?9blrfqiuXQK{&OIZ9CSQr98uiYNLQ-HGui2URyKe-6=X!V^RI{Xd? z$(vpPgvSj$>QRp>L;;boMVW+Q*5zAo`Z$!F{RePWORCV-xOYGL#~(75F2LUA%&z#` z$!+c_LXKS1vb{N2=>Dr&gT27VKK8MN6>wY0?QVCw!WuZ(k2QGEgC5j7_~3)f1qGyl z1Pj|4Y^!KPkZoEl%YO^q0t+J)pxM z5(WJ2j{Mq*nx#`tSOQvB)&xsJFzXSt_36*kQNe7jp?oP7y{A0oDdk;p5!e&(E30O0b6gq{Idx^FTtQYdwp)~WPkMd<6 z%Ih0(VY16Zx_-*bp8Jo&W!W=5{^Bz0`pYN7i-S|)?-(QEDZC%fh5ry3>NzCd(rcTw zz`_v#;`tAJ-~;964XS#H2nIF;@k>Nz=0L9rfjB@MP=_xL@ed-2BW$Ko>kZQvhG4c4 z@{$5^<)4TqUY3WM{^_1>+-pS6@^R0+Q{Yhh$%lWIG1KEFyz-|ukn(bKN7*3tM)_5+ zBmz}q%kQ%>K?p801zYN92KU#4Bx zH_I=5KOharpJ_|$e)qdyc@?z;82xW3CpJ3z!iAVmf@mPj*)NK_7D6?!33a_DSnlRw z4|`Y>vvCsxzX@bFP-p&&S+hC!+;dC8;;ynL2*gzL3`A}GK6#Vp?stvUFn^C z^2uu(cIh%n3(OlX_2zyTAmK_F^5hDa#^yUxB5&_>c`x}?w%!CV$>B;6ev7crhISST654Q_CQazxKHKUnU~ z25VX4nnfpf?-p?s6vyJ83uZxrNVx!}dn%PzZYqsc9F{C|Ai&5s&G z7htZI1q;Is7N?pv> zPDZIGZf6>VKzXG@F5m%%CqD6s)2hNUoo(C#3&jn%eS>ZQu>IyfZg+HD_qx|DCW2sq zf8h&XCDfS_mZHy?gie9{>2qZa%ZxqUev6->Ce+<^Lc3=tm2}Le`Cfd&X!Vx^&RHXjp%z3pv#H^2GK3vn>B zzUy7@Di`V5)>{u)vy%rvSceEU0{6Y|eS5LH(L3+F^LlT7^P9^SV-CQLq&se0gwa{& zMT3nHfo%VJoVD6#NdQ_6G7IY(B9NVGmd|T^+8IMm90DTX8(|>9CnI>sLmpBH0hxgZ z1fKr%r}r+s^wRzwdONLQb~kb6qXg@{gNsfB)ndz-d=0hMXdIURwESGY_=G1sVNG(D z9|)6Ym$aw0)c(GiemE`!7^jkM+B-Ry3@;pHVv5gyT)Xr#zIgIuPj}oLJ9Ta6HO@Kb zoRY_y3RMmi%6{v&eyjgbWA5xoQ~C7kv!3;=QpN#9V6F&2zjLya=ERI*u7>F7;t&rA zHnIM1V%^*XF+eDW{$kKHq1e;Jt)NY)#x}7f*1Ye1?`uN4un8n=0s)7{?@B)eXiW&} znm8vsaa?7gQxI$WCSD~ed;ZE8gKgrpy2>`Lo3@LqjaD~u*n$W(cfRwT`(+tat}JsP zP0?MT%ix>IFNj7lxk)1stZyn~ZEyRtx8tR~Hl-mS>Cq8+_`@Gw>J!AG3F6Q&6O12q zi#y{>_$+^Lj{QE!bYjwIa=c~y%A6~lnybP_BWHQ5_TKlI9TFG$HGB5#X<|)Zl!L|{ z@O3zYMH+DrSQ!-YUU?JSZ~Z}Ehwb{l)1B^A;yvI24;VX6rt{qAKDW8*s;in`p z)0l=CvW7Kn%;9;@dtSd>kOY!3>pUT7`tgU98IGAhVd`*gdpn)lKhw;#*wepGlRG3f zDIlmZqc_39G_eFML?A0^{KRcA&C1G3Ar_f8Gk@x6k^sWzn9DTwn>j}3!t9h{L`CNk zq62y{JN171w|~1F(uskvu6mFWV8NaGa~U8hJa*UH?2XV?~@nATOv4TKg-XEmaT*PzE`(4S|@&k304}K_B@6b=F7hzT0+wUH%!D z+11C&BTr`j$byucY{ybcUdostyj>*Qtqw{7akIQx=GWfplv7g|z&J~g-n_#+?g(h} zeWR(>`Z^C7AduMQ{00C$e*5SKK@J{abzpXK>fc*K3d0nK=Am;3P666o;BJji=w~;9 zJR#HI=jXH_q!IsPANyDdC(YcF6kdLrkGsWeTT=LO!q6RM?jbOMh0Ot-2o^J3aaVqR z+?m`n-E?Pf`-^ArGx__G{wv?g%1U`(%o=|XXh(umL{D7lXk$nu4NosQuR)F>9resQ zq+QzF_~o~{CW2vE@FP8oG45K_iowOkYr}T7(JKUjc6_X8+3DuxZr=Na$ zxdV=-srKilKKfKy9si~{rOcT}oyPv}xuOaSMF6rh3`zvR79U|BfsjtrX$FuEG=L14 zv}arcG~I-U#AbE_z+mE*1KQx^CcLx~e5bp3?9$1>o`YOGC3maYZG>HGk^9PA+!9-l=-GxZDzW)n{UKW+WfT{!J%}tMV5yN>iX2> z<(Ku#e3TKei=SFWztY)`Vj8w_grI z=|D)}0u7vi!68j&0T3EDg36N;4J5EDVXHBOlZ6Py`o4tamxEIp?8->BnVy1Wh=&nz z7s@6~LJnAF{tVnKD>rf2bKqwE)Fu6;m;Q*7G=$@?+{$dG#Fcb`-4f-(tpIg<;~U>t z>aYCTg;r$9L<-VLUmHRqz?45kWU^ z{OdO52DtlqR$3h_{cvP2xxUHp!KJ=lz&wcK5MVZF{GPsr34;Wn7 zQQ^%l-Ys*_!BzvsspmZBIXwza?|%2Yi)_G|hb%k912~sGA-k{?Kuoj`WP!NPeC9KY znRQKs7KXpJN;3%rdxpz&gaZ&i!^vN|?85sNj-9FRlaNrLqMPAWSZ~2~fieN{)H!x! zdKX-9L8%{iWwFgnM&cT}%s=A^Gq;ePI)`Qyc{RjfDBCCZs9&AEcr-`e9o46~mY%9hL)5Q6NCgcT8>>U^Xm`(dq@wzNA*oqW7X8f`(S^I65 zZ}o|@7ONY2zb*7Aiu7E4h4Tv}>~Hr4La&nev-=5?-^@U~;+F2C>=|y5sT_f%r99HN zBcQG06y&OHz;>nV6oei~6I@;?Pu&O7u}d=s^a*8z-S*$>6PZWLY)3$mb9Qn^-*Lws zSB?%(yR16a{eYB1%z`T`E4};N=RSq)mzUX!yV=}fr5LDX7BO2TaPulDR@(7mGw5~% zb+Mjr1I~)tv)R#Xt8QjrZR1-%WPjA(IcqZ0Uz`MC*)v?1UD(>cZI^!_Y)OZoGFsoe z2*sOlU4R3#Y`N=Q?^@1{h*N{QQ3y(?%bafWXf6~1&;dHidtYarbynxVon|M|8pO6^ z4=p#2J@(k%o?wZwl78012BLL-4%jrUlb!T)%-4ei+Zkv%wgKC3y$sp>5+FwY(vQh4 z&Gheb%P^zNOe4d!?c9?fDH}q9$hu9sOKa3Ns1uQ0ep$D!XO`tV&#-U=Kt~hQnUxaR zX4yfu>>Q)@E||4EPJpCXIS2)1l-L0gl)Tb?=IVBt`rkyI|IaM14%gq%Qj8~ zti$n3|Jr?)-&u|tG3#$T6Ybeud2k5B;E%uZQz7+S=^b^%VaEt(cPaDAc$;0<%y(Mm zJQIU`Qk+&x=nz61rvU3g&v;K{L`fI|U7TAD zh=b+ZFvxmln0ZJ1tj9bPfUHBO3CT7Ku$i_6Nx^BE*+P8GV;)l;9i%|SPWq1{z%f`? zk^@i}>RM}WR=LN`2WQm=1lIZ*K!#+?(_TEPe>K7+LZ)|@J^h$nanmj1*7iEC?<5i- zC@k-~rCWx(;)*NsbD(KQ1QE!5h7p{BiEKlUg(CpjG1lOl4YvKT_k>O~2rUh0qftnK z{E&pZttEuORwaSkJOBist5AbC8W4wCn3>2{hx0wiy&Y~Gd-ic{=6A+V!jMR-{ju=7 zckj+1#kBsv$35<`%B{=dIcXrDOuH-GytyqL0mu%Z)Ug$S2oMt5OScJYWT}B_ZOt7(GLXo~%wNV!`$o)m9$jg3Lva0)eW!Sp zkTW@DuC66chD#H{PEhtmfrTXiW?3D-6<|=EdFGi#NQm`EjP7{HI~Kv9Ehow;wEsxd z=K&u0zz3GA)o41lVej6(y$3(|!R2-&udF5{@-f>8lQU={VQnAxTRwHz%$J$Og}?l9 zS-2E$Jk}tb{uu>?xLJoZ2gK==OAQFSJ)E<#=Gcs)AAsoaa(pw?SDUzA8>!y1A4L>z z8HA9j34Qa%5oY$_4w^V*vSsC(q)lS*H}MSGfd-B*ZLCfpIDlgM$33`!Qm;V1RrL#E z+`k9Fw{UHfTkYPq4-22^%QwH(lY&qPg_|?ZIHL(cU%#wb-r#IT9s!p|?0%H`<@j2a z&;d)I_=MA3e9uK8M>OVv=5Kw)9eYj8PDLwhl0iSsurX^k23af(nm9+$#MWUG+(AKx zY34Jlv|_J(RjbmRb8kW$AO?8->tA2ax)7%v}8oOQQs{QwUW+#QFSM&ML zf4&ULcBgKZ-N1~4Glc-ewqO%$|K=`txy!2AaT;Zzh8#Er`8}swz;r-_UtJLKPXRStIIdaE}c4j+H1E=0|CfMJ!Kk@4fGRZ;{B^z^A=K+69D-QB@X?zVnx2`}C(71B8v~ssA1Q-?s-9 zDDj!3gr4iAtdM7b9XRI>NYyg!7|liVrg+3Zc}O=+?#jary1ZmFcr9lPj4?1xfwXQMv8q zsz=--R<420@@9Tn=1gn9Ie!8HZL1;X9EMha8lQof+91@#{0uM%LSrWf6}LnJZNkrH zvJThzIRLV~G9G{J$nKZnvTY6COk19|1ZWG{HURQ87=`Db1Kq$*J3sEqBYj}d1MW#k zmm0NgS^=_q&V0z)iFBK|N)0;EjdJW~$&NjJ+RzV9@J&0mJ+ z$4!~iFWuP31?fpc8vyn?KE(`(k5KV5F=%6;O|!o3cx`(GAHPr~_3iO*5eR^m97qJ} zP81OGIpt!O%mJ^{>Aec;XMmWk%>q}&S>TY0l|c+43}o^A3<8kf^(>W0YA}f-eM$ll z$-QJ=G2xd8nMf*c;r*lsd`r*l1ToEU_P7u>W&iruzg`{|fPBJA13^(2@%*GOF5sVG z*!i<(eUcc7qaBpfJ!r)0(g%o-awOQ}#MR`T=^y|2$9u7!D2OF(kon3l)5-YUv?K8C zr@Y+Kp6$%8Y)t7uUV7TQckk|^;0WQi{gzZ#LnQCIb(+~ClIZ6xlv6+d;xRULWc zk)^HKv;6%GR)5ST0VoZjG3NXi#qWkdg1!hl5UQN%4WucOLT6kp94)2;p~}xWQBt6| zBdmz--6R?_UpfC9gJ9rdHwFi4F!Xogi6=Jkx=0hx0re%7F^Gr8=}I$@vYclPC4(aJ z-i+-J?Lfk+J;5cHT+#%q+;8-_6rrha96jx{)0$Xfm9`7yEA`bzfw*OXpY4@q*0XIN z)jqX<%;b&jpoAb8rMy9`iWvxBB($N%S+)q`;mIaA!_M|sPVH=rxK&hI`OEZM=3L^? z+}{?mnh3A8#egcah#4b9*5%fSIuy!|Ri(j`>)hzrRo4NTDO@^dMs=ptvH}NDgE*tW zEff?4TuYO)m$WAVatrUIS<-k;$ZaH>p zWGvj&lO338&F1 zA4}l)r!1C7u1zvF#P`cQGu(djKt);}+ugeGOMqknvD_h!AE=Ip5MXz8IMy2br?cIU zg*~LuPa)o5Gq_*$q8F8$Ky|QzF%F1J%SKwRCbk@z6izznr1H|qg%@5}-cKj6Qpe2( z$mMW@+f-|?6hNR5N=uSl7S&=(r1lsYdt6oR6pxUv#K?t^|c?N zp_#&!vA6~6Z#R6z3mZLy$xLibJPHx{+W`>YmBOUuT?4u`;0*h0t}X|tY*KxwA?IA!k&Tf0dUr*UQIFhBBpiYv`z%OkG1wAWczYlC2MQRtbiz(Wn2nyuY29A7i-Dh zo8I)Mf)KgASEp5fyJuWl;yXY9k;Vatb^F`jzJw=SLy+phKTaCc4&%9GdciehIo%>^ zHcpr&@+5M~1F=VZ4msqI%(`!8I0D1u82X+EK7R4-FOO4D2kr$ZKKd)$dzN)MP>e13 zQo#lJMKuP)r$7DaCZzG5!k=jNvD|~TESKfQa-j$dV@7Y{Y;Y3@-o(ulNh3O{2$5+t=y|#3^-Dhx`tN z?YsFN_a_ZM;q?Vmn(E2q#-y4Vgnv!BI0Uh7Xa~TJ*Z4Eng>N;!&gg`o z{7uZdOn;iE&^8{~GM-SOZ|# z;As09c(%XdjBwFERR~BC7X)_Z6>M@70>LKk7a!}@(-0swApo3-esQ}l>#^gkx**;p zFNm24nn(*-eQUS;rQaa4CL9?*!`5YvrQ4dKK;GEEY}Is#EXG5)#?&LS)aQn?7sKCZ;>Am+<9lqMTTu4cyyt?GsHCQh5>&&2o!MK zF0vhA(3Yf~6x)W{UYiF-t&+)b2i!;f+VvJ51Y-8R$R;RX)gYXFoXt)Z@Y;XSx5p!E z$gzhF`gjOX-60Qipt-~xD2QYANR!793EBn>9`(_Ca znw)&{$-SeFI;yCvdUA;L-@R03av>+L=a)MOU|@Rel?^$!{iQ+iwoUgnjl?%nLc-Y zK8o8CE{IJTBfdfAndUy%1^TaI3-*iZ42G+&x~e(&;Dd`WD73!%vy;A__Adr%W5>V& z`cRfB+<<3ya06yQ&kngggw(n#Z(+_q|NJJ{*KH~MQ)Ys-gjfbOvFurMD@Xb>&B)ZQ zwN1|E%$)JnnE;My=1=$96qmpJpYVhy)XDe1&ESN1RDwag)>6{yYG-a_L&ilA?N#Mh z-XSpexU*;+K=kEch>k28f7C(aze)Nv z<%~~V*SA^!Nl$uGX1~gGxQEPyLYHrCpZU}Qm7f-)rOJoCar?e5fJ0Cezi@2w&tDz4 z`X0!6R$;dN=c1?xw;Q?>b95*$Aaj5jDDIDr8!^gYVdw7`Gf+RQ@CK6~M9s7eTw#F$ zp7DgCAR`=AS?Ll0QZz9D4N~sdR6A8~c&9uEpY^MBQ=OH+ftz_|{+Tv=B8$8eiMjdq6V}gnhG$on44?H? z7kTjq8Q!-e)OG?OBtoXFo+8E#OcSK-ST{9nMAAhip&(U`BPSBK^Ha{yNhps4BBa_P zk67zh?VtUl9_klMfkI%_Jz+@zvL)uz97+VttbRF&bi7wUuz=o{iZy!~@CFJ5@=Hhr zHPArXAyJJa5DG}cATxuTu?Wu$OnD6Eu4b$?vTo31XNm+EroFMkY}A2 zd*+u!K>fI@8#mpnT;H2+wCNr=hl>|=IHsdR%~B*F@>bZ zO2T^AEQuSihi&a@_9uwM9n2awYjz{ZB=aB(u;sc@aMc(22tl78*}*#Dc1M2vj(uH# zJKgC{{bV+)ZTcB*^#^3w0lz-AAM~-+I{3jVH%ki*DtfG4 zuk6HuX6zLYRUsWVh^FO-r9J%c!Wf z(gT7binRDFpVpJtpg8A;3N{#n2(-u4Lf99g648I-)T4BC*T3xi*q@&2;2JdOhPjhV z#IwVVtGHc2GA!(*erCJ4>a55fwo3jnsLaX(xtZ4IwK*uxM%`;U0PbQ4j5EIGGR%&b z2gD%iOQr1(JKeXH5QDHN0=@j@FE6UB$}|n20OOP*y?%;D^4U(HJY*xxAjqrCS(P&m zY?Y+tNl9oY!XhgLb@k_1qyEcru_wXRRssbTM1X#K>~(LrD9$9fw%oPn+x5uthATNi z0yIFKzd&q8Aphbh0Clv_&Ln#s4N*JAG1guj-L0LljJBEg1%{pPUlVyk2kNj- zeBu+!sX{mI1WP<&3I~EKr$!Rj%YTmur}45 zMgRt4Q4WAKxJaokDs z3EhGoqUNrDdiXmH;+eIcQ-QW3(4i72JIg%arD)IbA;7$f?hvXGl@s$H_oU* zWV}(}L|a^U)juUTPF!KE`SjGro52*G|+EM&?&hg?cpPh+#UO2P0v;L*@8L{58y`m4a_~nnf7W zI~0O0Y%Vf0UDSX($V&oH8s~!J>YbvaOlp_MDTRyp{ z70x$5?pPEo4PgKKeSBB4W$(Mh|%l5dz4Q^1LK6X+`-#H}|4?L81&A3eQ#(=Q`jgii_4zd$jg6xo0 zM1Z3~TMrKQgs*+=Yh_x_Gq4U8_!*3l5n>yNz~D5{5efcS2AOt>iz01lF!^UX85e@{&kF|RtxnRAN5)t7%tLv6^Ov6R?0)Qt(CMEDDJ|c% zJ;Mv@mjqE-S!QmvU7Q*+|8%SSgj?FBA@2ljo@r+oejYaz?wZ%UW(FDyUcY2!NB4SWcZ2+Zy$KH$fm z^+^A;xBc1u#22>hpYi3Fb%b0~7*cv$66uBm!`Q{0IT*p#i$GvQm~4 z(%^1sAsrGcFL8e5D_<#Wz5xvZ04@L_A=x8vz>P4oJj#}!-12uB!7Xoj%igPA^{S~T z=4blb-PBeN5rm56s-k9FB{5m$xz@6}^Vj+>jLS}x0o0wRqt_6DHu8&L;2;c;(ruoQ zm6WiJ{KD1<2~i=qI8OhV{p~5@01Q?Hz)2TpgsshmCrPw_7uOE=Z_u!wb#n&o9vp|0 zML?O_fMam+9WFw?I|*<|&R)0M1;K5*4QQ7ggZ!ob8fE#578nzP05pDqq)iCcVBdy+ z!6lT31uwYZf+jeD{v&unT$;GTXw^AbZ(GGx#7*4R*_m$;swS2r&3WgY*Mug}rrv@w zjkcIp8qQkR5Jb7Q4*K44xUl0Y96dj%&VvTUD))LI#g(+3NVuLs3~__aFBjSG-o3kt z*Eah3#_V6N6$);l8 z8fhxII+t({YyZ6GJ+G+ykt5V#`9jtpJ;Fb-gq;W}7+qcWNB#9F@9XOVtoB;kdP`z( zU=WO42OqSyGXSxL6>nDVdWC8ZMZ85rGbY*3wNYpcbWg`!u zRrJ-bel?wUlt~Z5ZV1pGW58H}#z<%Gf-DKZ>Mk2P5bD8{9D(Sh{RD3i&z4giZgujL z+eotGcF}TR!1km2uyG0=>hpvyWgkMt8uEn_#A&C1Hn;oYRTB>vj=A-xd4~4+qPO3Y z0Icodu?IvVI%0qYcL%vU$k?Y1b`{Pz-t%U<@fg7grV5lI@>(7%d6Fm`%2BLSR|oN?NL_Hm7jMaCIk}HrV zfF<&`8f!@aS`9M7x^5znf^%6D|os$4FWdgN{ZS z!)e__VOZLfdTjqWcVMjx$(=>8q#)_13`EkOZ(!y2BgsEE2;=NQ9u>~@v2+m|h$AeM zox7iS%yfrbzCmrKyYSr8O!wLpmp#o)N50(U$3(1{NeqRvtWox?=kDFR%b5oyUp0eao7j~`Gz>s70x#T zk#VJ&1b`dF<0hV;Z*kH9`PEKq4eWGw30ewLNLSJ#XK*1V|1!5^xA^Hf4$@ z9m@n^d?zwz9!zPcA0&sE%q)X2W@zE~`S#^J^kgy4#X1<5o7X8f+Af&3lewZ zT3-Y&)28=u>ZzwLk-xOk^#3h6fa$gAh6w?r0QGDMVIUBsslj;yT7R?zU2cdtxE>fH znfW0T0s)z%0nu`|z|5O@NHY<&PJgq$lb9e_eh3&{hdq1t^j!0ccnPx(SXZQV-M3*vph$>84t(EfPq%T3Esl#q-v9ph7j_$>;~eZpI6#D02$P&gSDNw@W|n|J z#d~7Cv(7rJ7Y_s$g0;^4mPkKg!z~HGgbg-9@C{>4B7GuY+S_FqMHDi=c#z!=gx!dE zzq~9F$OM3Nk~1KOz)285;xup%(!q@+yN;mXCb&alKfp~m?$~~N_Xv-)t>yj9^pM^a zXbwNQ1ciK~3r5v%f1D-qcQxJ!w(Lhu3-Y_v3w;YM=|9{9eH?|A}QwK5^n>?}h zk)sY|Hz{_)+=@rfXyzv;B0zBu3tTewk7^@51n5>6U~?L&nGc&8^cExFW;~f+{j)uA z*EZ5x0D3!pNZB`97z})L4QSyo@ZKle1$YVpvdtWE8c~OtN1XQug@@4-@~|%uU@cHQ z&3k+igC1V^)Q-v#2!YW8fIt8ZfHbZIK5PmGP{xN90z`%{t}r1|`=~NpAu!qnz!fq> zM|{{63}`_lqtDnm{r-UW|nk3}) literal 3778 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 FV1h@XzeNB5 literal 82992 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 literal 103434 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 FV1h@XzeNB5 literal 82992 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 literal 79787 zcmeEuWnfg-*7g~9_v2?~qC{{nQrrm+1!5C{dTDQOjn2daNpLAHg|wnJjGT&_vwAKDWs6yBpW5tsY%fOah$v33H-OcN5!Gj&{X_Dbz9KYwH}k_3py zE$dm|<7bWE@JR>GeMYs(d#;=;iPD-0%8hAI6jN#_o6>|^tu`Bqy7^L(5aEjie1X8j z=h`aZ+L|X)gd1v(NMvY=@LQ_tIZrd!LWEc;_~JMqZ7om#R!wj5<> zlE83`+%e_NrUrJ7JOVT0Zd7S*pSS07&AH7P7L39@7-pM!_VB?2C+DbWCfsb)IC8<} zHE%dfC<)DUqhhU|v}w(l$HwCtDG>>I;YQ~0a}k8+=JNzR4jo2;v6g8lf zQP;P4%8nHJ$>Nvfr~7AgxgFOtI|5wZiQycgaSTa zC=iGQh?_sH{UI&NAIv_LTsp^u`$HX74vz>$J_^&g%pji@puB{O*ROLxu=o+DGovY2CZ#= zn(EnKTSf#qSBZ-!Cs)p~=7%rdH?nDn#DZ*RgN;p14WUpy`xPQU5M3n; zpFuzqd&hu4?X`2BvFxd(JMOYr9WIn z3QQie#AHTosMTh1n-FuJsSsBa7-o-gI_wPmg&CNK^Dz|9!=%=TJ`=`A6BOm4`6Pwr zVLHleBXAT)iC)RB)a)cG((WdO6v@zN4ra4<>h3hzNNd!njFgn*q}F&mZL(Rd78{d` z*-&OeT5pFTep346)bTwXLrM-#mg1-tqj7kNn-kKecC)^co}7}JJfZh@Ec=ewtT9qJ zlxaoDNn>!wgtX*I6DFmlk6zEdVjb2YlE8^PkV=hk5@fsd)Hg~#oRpl^{maqXUcI_^ zj^JKmq#Y`Tw@qHU&OO03J}x%O3ig3wNF3zmU|O7^X{WB;+yy1WA{`WJv%47&?Iw&U zMk+o{(cA5&!Mkrit~=Elg*9C(<_A9-kh*mPF4cClgw^{Aj zwg$If#ksx#Vf3kqq>h92zZF1v*_jXuBs zDZ5k>Nz;r~uC{^&ggLot>@`< z1sc9qqt4arMVeKbXEM8Oe2dlmLZwv%iau9q=x-wbxkigEk^Lu4iXn0+0ZkClCL1U; z4$6)aebTctUK>S4J88&3+bO7q(bDEr)5m+?dXzO($5$j8Q~zg{xv6NzR}Z`oR#j%NK5WjbmZ)09fJ~N0c0amCJ>Iv zndzyMQ!}$ClwKM{jO-E(?c=nW934pz9kMdso;^J+{k1;D{f&Kk_vjjlfi|P0gJc-I zUE0d8awlg`Oo(vUux4#0@f=KtKG)`X3(Jxsog~(*%@&v?Fb@>&G)|p|?7sWVf2K{d zIvb%#%xb@10Qx-ejK8U|p54Idvx$LaP(6;_ZnfjzvYZKOdn0^rg(=vYNC`E z*kD6Ls38Ojo&TFM?-3f2qij9AU>_wuS7wU9tuQ?Zv*IK6bM>o81(&g&{lx(m1tZKB zg5Z|qur7boWv}o$TOSJf*yXYaH|@mrCX~};_=6ML1ylQMF6GQ-6WcJUr45#7tA!+q ze9UZ%?bCC?_We(uJ$`z1!#8KLEq3UC8dTXtEWCcQeDhc9S8e<9(6JL+Fw%m7Di?sc zv04|MD?fI$@>u21e=9q;6^s<8$Y9t&%Lyx)Q}Ofh%8H5;+xHwu(%Eb@r^z-P%EE2> z&Yyg>=ivTboBrBLWi=U1U{7cq%EED@E~49*p)bYiP0-~wi_L~nXfCJ9B!yYb7K@D{ zIaTI#+4@|Sbv&)MPy_#QntT+I3WTsc@%Tc1AyQ~kS!^Z=pRZ8MC47a&mTxM+wX{uv zj$XXE^8As#gOdY{bsE7xxNNUbMwFe#-NdgI!j+6R~2HR|(^Huaj4<5|6O)<kHL=zjFEd zZ=d=bYp-$^Fi_`bcVJo)Bh_zx@Arou%-?kL@#8}WSYNQ-pA)e8>)6`XI@0Q_U4N&+ zw{TyeJ{V+=-fi&t^8@B*Y^5I6jAyqWV7IS_!u`I`oePbSjpz5e>r9W?1p+YTI}6yv z<6%=Cy7zOF-yPt4y`da-Vgs8BwtUl|98iDGmN(V>*!+`yynof=MaxeIzvgVYCac+& z`=*7!st*z(SMh1Fb3>ewR>SZMG1*kQwTjGH1blabKQd$r%D zQZ^W@53;^bSKMf*zc;4)5BF#rIOH%rFf1}LE`7$|U=lpJyy)$}e(;bjd+Ey%o313e z(Qr;%RGK%HxgV@! z&w;v&achjLaAv7{rl#!UkKY?IWSHwA8+_K-R}1zCGNPSEW=#9w{nyj`(^h+Y+tKSD zHL-8XDOe3)zko7{o!YdB1P{$(GV2YUzGgjA$^-L3!p#8Apt}h-DWPbyqHk{_Sos3Z zxWm7EjZkM0Np(4z1>l_V)*`Qky*OdB7Z>(t{wx21cMlK$kCTEg{QO0;Lm2)5g*89i zcl`L5yZ7kP4duM37vF;bMHz)#Hv z?~<+KR^Q(}jqEN>a{-9366`1YT=MfI4eU}x(A)wM@-`cK;b^{)(8Qk1R3Rd+hC*cG zZ*J?0*YLBEJ=OscKmsB1${)TDu|YSupz!`vkpBk{tO(z#z{9qMUFttb08a9E(C1ly zB)&O$JzIbvupIqCX6`HKZ8k}CiR+(#dYVF^hNgxfdqsHm58pq}(8MBp{y=^cdu!D@ zBRh=9D&B+?{lWW2_BIAh3qK?NsQDqblr!wGl}6e>`hyBIvS(p8%8jo8>E`|C1hBH8wOfa=(YzVnoE{=kY|ypl56&w@+zkR-q>NJ;ZMPO+$rEc{G)m)phk z`iA?!{=uKSNTYEJo=*sIFfK$P&W9f!0)c;D;5#rW3QHtsd7QbC(g=nkU?s-U8cYTF z072UwF>x_15)&eGW0X$Z-a0-ZHo{3mf-9Jcj);m$Oo&TJj88~lthuP#q_spcc8fDH zJ|@ae;ukO}&Ll+J^k$0Ap?D;j&+zRG>7nEdYIWMd1ACg;-%yB&kn(b2JX9IwRmOa!Ax^_EWK zCQfp>($Xiyk<5Hr4yX);;yNmpzz<_al#X(k^d`FVn6xz5ge9jWrwwp?MoSsWVo^C_ z8TufmB%*Mo(H7b5m9+HaY265B z2`#ph23w4s*n=rhDiYP|o&83qrl%IC2$R!B)6_CrM4Ih!c5*q!!?7H6E+oSu>>8b= z)!4MOS1gcBbu43OdM6kpP$!awR(KX1zIb0JOX`#gLpl zIdd{DHkspeGYWvFMJ}|%B8FBuskjkoWhu6djKR(p ztw#25>vs2oub9Xh<5KuxJ_WmbvJtfeAo3SWv54#&%!GNq)YjO-mn*crlT*4Rke zNRur_r$LQyD5bN#U60;f+Sy45BUiQ_R#3X{#}jKT7E)>`vx<#oIug*lWf-`49rIFj zsp(@9Q5bjJD&=WtB5G7xX$tO2Yt0Ow(A7zkc1pz0`R3H+8`rL0zOjq2kz##`RcvOW z>=AZiCB~;)bj(jtrM~iV9JF31vd|GPk1I_fQ(x&D({j`hCqdb53UbPZ%Qr4wICt*+ zrK{&%dYTgp$+;=YRM(`=jDe?h5}jO72QqcikWm@qd$o(A%-Ros zthsUV-1!TaYOeqKxM_<9M9hHx)k0H9d<`a`taNIAiXu5RwH@C?Q;}m*lgmPMK+x+f+5#oLWgy*D>*Mknw;WP0PGSs zc}@y1IoX|JNlkSn=*AtZy<(Io2GD$Y!;~ILI%d(Z=4cWKW7bIb#qHKuF3t zAnh{{k(@Owe%_;y7d%=sWHehzJ!Z97tO}_@E>jwe28Q|y6H>~aT#rdDdOPff9DP%l z!j#S!-)j5`))TP#*kh2-K*uH|Boao2N~=-ubg08Y;_ER19@#TBCq?dx62QJ6wpneG zm!(7|r)CWwxAj5D56wGawUI_*K>DP~lLod*AV^dxl7LZ;pm1U>#>WXNCqgQjVBIn%7pLT<&P<6&Pag*RSTDO+NozF@Y*_kauoo%mU=#brL^x5YoQZL8x*{W} zl$6O?-6SR|j}}l7Nv`4)B-t~OH)+z$6kW2bSL-EDz3dx^U8{EB{j$>X(p9buXh`qw zxW*70MH8zqDTtWt8m=@lg)~2Ma9UxCbaF=CygBn{zM4EEMVp-7#w7Z#k$o4j>x~Q* z-7deawpH(uBPOS%4~sL~WONi5xaF9Hpuiv+EwD)!QuaaVFdB+UugzY)VdKUP-z=UC zrdX5gYH3$2ZF=f5&}tO+$c2O!mcrPUty)Gfgc-vkB4}b6CML+#iP2g|F_=@zF*qG` zPL!OHyYlM|o-c%7e*Ws@)FKd-oIujn{r6j#t$f%v(=!-^bmMZ^C);s_HZqCwWwPh%4PWGZDg0vdyAx9jKuBt4dyF!EUuH?6GY<&#K896 z1Iv{O(L&^62`r;_6G}OpBt9SVM`PZ*C_YIu z`Jm`ld^N1PR-BHs<8vVs6K5r0?Znk&ukTKlyAQe#NcSJAJh7vTo?x~?N;41K5@I&D zZObf=mpW%b>3UIzjVJcGf5_V>`eDz3qkW~@;Y&(sf&j%VOw8E6{$+^NUPddNT4DN@ z!+ZDbEk9eEb4_~vmtzO^eAC0sd<)4LwH_9fQcOxpU#ma8t0iim2_sJPsIngp?%Q|h zmxsQ*pw$25cGc-MR+D`PE!1hjNR?nxT6Tavxxb~%!KGJP*B;xqf8U|1KromekOb@N zAJ%-VSGo}j;3>I77rFGueLozl{BSP8n0`P*YG2aIL^|uax`LfAgKuhfy zl6q|KzRDYOA#r1t9%?S87?sjN!%kUAm#1Sl#aAQJR(v1ZaMf7Y3 zj%XmUgp%-(h&%QEa9udzf1{O@R%CZ_!6)fUtlt9_50$GC8JAiPo`1~a=czA4>hHm8 zR>&9%5_6J00X+cYMnn!4g3`gB9f`UAJoTwQIF}kmlc0Z>nyob>VjH*s64Iis9Z~z0>rOiFvRvkx;voo2cIs4y^DsSRXjHrcG=4M76pV}HV?6{qy-E>e=`Xl z1%ZQH+Cm9%D2h__VMDNH`y1{|g$jvrT@C`9piQhdoUs6LETd(R(PGjl6>@6(iu;>qrtc8g(Lo zz@un`$!Ij79)RQZD!JC65eX!EgOLzRo{I~)0|tNS&g-yWL!vkBU_k5(alVERWzGdO z!njG5&7xF@RHQMX{g@U;%nb-R)QfgTI3r_QIOGzUT#Sej34o5Iehm9}nS3OD&nCwU znV>-a;I+<5$2?lckY>H!pc2ZQxGC1D)vJwelxIW3K~vb3!RV8AyE7^Rpi(RMK|l6+ z%ekr|$n;ZZ5)r-|;qPR9VX-$lnZR=EA#!TeXjM`H(t4y4(i-}9T6h< z_4-CPm#-(}R!7TR9``J3L|LI2vVw?>w(Ka1|*mpHFS8|jx z0?ML{TCG~Gb8Dp<8+dPWEoNJdnQ7AjfHWG}ALU5j$KGebUq}SW^nr>?yxwlcXs6R& zN+ULp7SVaMG93v^zrh?~##cd1$2?+6N?P)plcmUqAfkyqSWsNWHkbIZQt0OK^%2Yr zn$MUtd0L(h7GWW2jx^g=VJ0+!KkM+J4>(00v~xtS^ew0AngTGaN?*eXI}-Q)4{2g4 zZZCqoxQ@$f%>naf?hv5^7s!fRV%s7mhrZiJa(cl-RJ|yrXUCHU-~52u=Vix<-StqJ zz41JQ9bB#E(oHz$`PtC!+7;ZO#W=^!h=69jeub%(8N!+ezocA4c|R^ z>I(&+5&?FOeZjUGK=T5D`rMGRp#cIP&(>#+opnFt%LUDS+L(^mb72WKLJy%}xr7X^ zAi-Hx;*x$hI1s4`HV$AQ6@EXvvOO{C((PNmK;CV|wc0Jqw zKc4ahy@gPtz~hz@hlfT`sF0B=hQ^sy47vsrnUL0JSZ{Ga>h%WMy4~y6uLu9|t93PO zlZWL6p^6|sCm{0&pGAvd&&!Z`TE2mT_^HrtRXA*GF_8@!$@=^=U}f-fgUjYM34(sF z*X=_%gubD^Id_Z%a#O}!El*FBfS;~&SRpT=6S!G#X`sko#I<%8AoK2UVd3N!4J0>_ zCEUOoY+PA{TDG9cyCxv2WBY;4b_XO-u^6$FvWC^T6c#s&95X2@~DwBj7Cr7X?)HEQs~j-T9?@PfJ8!q!nn)G}Kwh7)ToZ z65t7)o*J>~r>8!Dz#W_wPzQqnpWpkS=E{|t{hj#+j|M`vd0L@H4^$Pdv-K(({R-S5 zOfNtZSDgO!-s5L=Fi2{DUESk5H!uHk_3DrAL`0q=%L<8<(F$WZ(gsyc>eOG zSqy4X7=ST>VII^3p(_gbP7!vKhA);2C2EygXM?#bV6-;d7L0)~4p0V+J%+rpZ1J2O zKOU?+Tsr;JqGjWH^c<)aLrjhUr`LmOtX7Dp8V!*qvr)@a7y%R$QdY)#IhR8ixe&XVAfgAOh(u@SHpF&?5ktR)EjmXTFlu$y zNX99*wuoBQ*hzF3=D`&C-Vi`~ z0SkuOL{h|lOu&lwp5~gR4 z3nRgljfr7kxrScnkYMOkhh49;ww{m)^_c0Bq-TYpU?#_oK(&P=6HDV97EBUA2n13g zhXu=_4)Kh|*%^v1gDjb2I4Bs+u?kQapki+Qq?ouEW(gqpExS;R1GLHk1VtFeFcQqz ztp;=CU}$xz%bl*Bl1j=fHo8OC&RyHtU?N5oIrAK1yTidmMgR<~$E{@M@OCy4UxFn% z2!f$VG#^l4Ix@;&cC;FuHQQyFGIi?64k+4t*ub&l$G*nG(tLTYB5yP;sL& zOI>LClT}B|sWKC$r;lPAV&esAoJvIwE3D3@G;~X*hB@PH?B)sJ5iQL+yMc8b13I`;Zu_k4w=eeZm=}r}(>v5@b zpgYr{vokWX6AdrVS-a|s?T3z3R#qH2wFayzSGoXrCmaw=P>CrSxh`3{D+VG#G}$Tb zGnX_wYvAAycOR>)^i)WW{Jh?5B@9ka1kYjjI7ATVL$F!KX@7R%YcZKT6&+Cjv9gv zSn6`5XHRT5c-{HR@`{S)i~t8GCL~f;rADvU3JjRtPJ97yZe-6~mpnTb6d%MA?bDaJ zBGWUbjv78||FLq&x!!~lMq+SQYFg^h)&K?*8j%b_cK{`WCnW&pK$^!T%akx7&5OSXoHS!k&@wpu1gu&t8JSoJE~S$C1nR4%&hc5Eh3$mTw#v{qArIA zlWDHBS9{7Vur~lacw}~wi^7VDYRs(`UG}=~-<};swXgyu!1C z1*f9h=eN_e?lWd|YGzhaoCTHBQ6#Yfd_^)XYn;UzMuZ(hGhsv&sc+2v{OfPN+5GMD zw2WdfI8$0N>W@zxOfpd%;qf^l+@cl08`Z= zt(!OIY!YtV@_tH20Z7SswKG5oyn!bOixog94iN^ZhjG|cR0Ihk1kP4MB8&(}belXS z{hhTNH@G*7H*DOnX-zh)Q0k1Vaa}n?m_R2uaD((ST8ya-(Lk~O3=^OlMHmk5I5wqd z=jN^MZQ>oWqthD$y2Ao5}W3pB$_xR_BkMI0YI2)284n0PJtcZ0AVL|F$W08bm;7w>`JhA z@7AI9py3n8_XR*W5y+@vK-hu+ZqW<~D>N}+g#Zx7^#Y6ogdM1&%e2z%Tet1px&6C! zIn%pn9rnKi!YB!VFtDB>NQuvbj*7RDa{xLgbrc5(A2`^I2m@`ctBDFD!WO;-aDNUF zwq#Yr%Q!^XZjyBV9U^>epbS7yN@Iq|E&#$5y5-6cc^DAZi(OkeK)B-kwcP8HUydKx zv!$n%161v>-rEU)g9+(djc5J_biyzk%%^9C;ovKegL#e8dhgxp7jUp%=d^QhFey94 zo;=V-$-%*PHTF5c!TS%@09hfwK?0o8Uu!>6hv8s_HIjpaDfR1Y!?lVx`C&MikvUfa z9K7%3gZjpq4Z?bMG=~O@7+i)%lEnZ9Tbx(ehWp1n&%t1Q%(5^T{H&?8K@?>F_8bhh zNvw7Pz+g%`wkgF_c{EhQLa#Lv-3bu)DkwCdpk*ZRTVA=TO z%z6WtSYlW7{bApcdyNYkMD^^c=TNXk0Y)+8tw3&WMuO#Wp{5WBZ@j&?&)<;6w zjx{tw&ZKxW1PJ7m7=sE?vfhA*HpoKk0}i?rlg2Rq`!yR3=K;ueIaoXJ^Q~sHK1ZyU zNaS*bOe_%tRTp-LZoAAWSAiT-Gm`Z*7((pBw>hLs9G`+A&Dd|Vpb`%I)q>f>P^(sH z(UYWJr_*XZ5V$3*8l~Q>6N_aAzHPQGy}C%$q*?ojQajw8VCArc0wIFAUOz{5^B8GS>;$j zYX~5(7-dS3(E_+BC|(NmOop*Xg4>IRQQoi^6*Lhlg&?1vIok~K?qci1Vs3Rc+vhd8Q-Oz7&@!RaZP8>QM<86YxFuq;+5p!u33Y#T?+6w0-q=XY3 zMwGC0-U5^Gd6C%dCN_sdcVDh+3WcX(wao;JhzK~wDyhk1720fS2fYTMOKYl+%l6<+ z=&G(an%Fr2?y45BTt$QIPB27((~>ruMr^WqtRm8`(nkS+W}&(lE zc0hL>ySZ#o$Fa@mE>zNNhFoF-oH3aeiZheOLt$*UT!9Rz3;G+Y0Nc%~2hEiPgFTE< z&DbvK0Xhu)!`!sMZq!9WKHNBZYHE7QTPZT68QJ}@pty!BO&(-FR)~c{0U*0GX#_8@ zB2*47FhfYI8P%OrdE`S*MF)R3qIc%@bAC8Su&_Z{&;IO0B2qpZCY0e|$$6A5&&sm_ zBr9OhsOXhkzr?md%8u;*_Bo_0Z(~uoch|9@`3-7dyN>5iIeGf$Q;Y08Gl0SfmT%>u zBnJuO+7=|f0^?g_Tjd~nJ}?x4W!CT74{KkGd$pSDv9bnzs6N=puI#w#OvT|NM@}7F zh-<+f^9ZN{LgaJ6i_Wncb`dIGE@G5KkYkotR-QWl!}w8`fKdok^oE9lkh@+6l)KCB zm)D&+3_h{=NX5lZWfT}+9vKz`_>J8p2Qfe`Yo7^B+LGdV2M!%MR#ATBaOF?$IG60Y z24{B~8uFUltgMNx+wj_uX?u>9=T?Zy4;>%I52Ls!SD!-8T&jTlunJZXyx*>?r%s>w zxuUY7+*6?_FF)muHH@ylf3LnF@4n*J?VW4BO-A}uo~|s<2SGnClVA|LLvWCThmljD zgu&j1uuS~sfcprq98xLDPn{`$H)BM%PiMW{*WE|a_vJTdywWFi*@p6?M~W*12czU1 zd`rOKpkesd0vH{@w-g@t#ZQnxdgMsu*(39F^Kx_YWd%9gj-5Gw`pi$2ITav02dYr{ zBQ15hX@m+3m;s$)RX9J#M6`CqnIq*hD){9`juxGiR6w_sA2|Y9_$Q7*%l@7b&jqz0 zOKH9u1FT3$5pSG0Qd&_|UQ{7Ea&q2^Q%Bqt(&kcNNrpl&KoSM8;xbSOPLS`PII^Zf zbog@Tndc#;q&X#p=UWkwDYRQ;(L^{Q_3rr}SHUQr&Wql4oEy*b%0m!;MIj-^A)2_F zvabV%1WvqtzPx-nygxGoai2S!TOlZq)sUd{B;c=hla?aZ0oY^iu=>!6BjrmV-LaM0 zA%~$!;>z+f3jxu4o|G}GDcGoit8RUB$MIw3iz{^HNB2bzD?bYRq{{L``!;k?Vuc`f zHu&C382=IDWqm9VF(tT?cB#Nnv z*UX4j;JLPZD<94hKzF?WXaNpI#O2WYkB}w5Xt45-Q-J%w1!-vy05JRG{sBM^nu$ZDF zUs<$x+3Hnm+$#+$R;*pO?(@~lmMmS8X|*_Uz@5O!^AKu=Fe&*`nOMsmS|h^HEQD9L z!ud;raawF0JM?_}jVXDhGs{XdCrnIz^QD%Zdypmv97`+%9GHR)jm@UhsEsOv6*hIi zj@yA*;piuv+aX$w8b4v+h~BN+w6x=d)k;yYU*L#MZdyXv6AeO@4Ge+MuC!6;PT)3z zLgS9axCAPyRbpZUM`B$HMu8-l7{aDe8GvKw=28P@x*J1Kw~dFPZtFTs3wr|~o9ZQ6 z%Fcve1O5s}pKyEwRFHI1W|Kv40xAZFyegoZoe?szP68jjn3%LXi~=(m0JC8SD0v}v z8JM#$wcvCKu@JvzL`;kRTfpmHW4>vJaVL%txg>(+p$Oq2c?7W;{|4g&=hlt$;8?4f z4`6sMq81oU8WV)BVTA{e1HA-W7C4<`(FkB|6$mVmo(N%-5)nvp5RuAc0VMkZ7K393 zwFI1^_#Q8H>(L=)_l3s~9zJ~V_{i$bd)IFq->oel;mOo`6wtm?K+wRIhy5Mr-oPc zU?BuWd|qF$;nYkUoJ5eJ_z&Fb0Cgn3e9DHdS5+6(@N4e}7ei3X-^kwF7=iGmKY+$# zQnBT&(~ZxrRaX_)@T(sMKMTmbP~z?gM4$!`4#7VIL8w}Q^f}+)y;W0PJ)?$KeIqB3 z=jTHRx+s7^Xinzy1&@tJ#A+1uPYiP#97Kq)%W#VrY4d(<@LKik8qs6F7tY({H1QjQ zf#M)9RG$+B4o4sv5onfRGOLt3ZL76e0e>$6G!$1Mnhp?et%0n(s=E*ayj|t47S+@~ z@l~HII4`(Z^SCbOnZ(al0j=HyxT=njwVM{_h>}6LS8uff1Va>n9Kt3RcUXDPccXe% zjqz&L)%!QUFDhG{UHsYn#l`)nzE`+%Y5p?)^0i-kzL9O-`SY>U-*!cmwnYH0io4xA zTz>48#I7wZA_P$wjo{?wfIv)*s8ed2>Tgz;)tIYm?mc|C`_q1Ha@Os+egEErn|s%f zny_(Y!D?hx{&LBZC0i#WQUio0?1UaE`?dDgBY)G~{hN|{s}Y26Fo&IHkREfeG5FwG zS&g;2=0@$`Uh6!d;MzT}zdpo~IvPVcLpQD{T$Q(4vTE(}sTd+PF2aBhi?pw(s=9jX zS5UP^wq#s;IViCSd{v%i@Ilu5u%^1CMqX8Q`^vGEaji4%hTJ|Sl=1M3l6hsDH%$6+ zW$7yE$`z|egOjg87h@Em7QcF_ss@zq+QT|u16%jq$70H6iaa_Sx1?r}gdBx_kejJ(2Gobje>cbCq<( zS99CS5rGlqup$dG>ULF5jSjl!X)pkX7HTITGaEzRTh*mCeaH<$gv|w3?Djlwuia;7s&ZKWqiU!Sb?xGg!}o69efq5NyCL>YBgZ8T8#**8IrFa{%^3Cl zuOO#rm1O1TxmrY|v#btB&->i0&aaVOy??IjS0S(OCMYU%?cS{_7>gT?{gENB3>!LR z#H6ghxC@F)JkGsbRaUNAmAg{5YUSsJ7MML40G1+BsNQ?Gs-Q-klm}f=S33u04UB-Y z`s)46D96jA$0on!$#WM=3d`O`_CM;F>siTLz1F=(x_ZT`rCh zu1|WWG2jb6sa;$ntG;(@<10NsESXX4DN+@dPUG!=kh$vfb?eqIU*ujYS-I}(6hx@T zzrciI>zX@No*Mbp2b&YPv&{Yn)t`Z^s)wgX^!{WBeNe|b=Qcit8cbh$Hm`~2TNeEuit;-W>t+%r7sPPfE|H~J4U)1j4P6Ot-7YV=H`m%&0PGQ=exbU zCaU_%tqX&Pm4blTsr}ixh3wN>D5mO4)%AN%z&zi`=_3*eU~U4lftH^Za)dKH$Uir$@qvKf)#R#tHG70 zC5~^NYiHJIt84CfCgv2*O=!!${{ic}UsYJGx?X$pf$ze4C#-%lE3rJB z`TCXnJ0iYkg9UK#@OE`!jik2b+^N&2&R!|0QD5~|#!M=m)qPU1bQc^REO@GW_VDIS zF#h+S?0*jt@T5vBm~gHNHMjOB9RV&vVSw+ySDRNOtgSwEyuw}1KXUTg%o=soBlhc& zvp-6$xm$D|Xop2XZGC;+)2C1T?6YH2IRrujVI?VrB-}igwuXH+Gr+qG(@t>dcsaPf z{PN>fGiy|}Peb=(GCt^Dy_>qs`ep_^L1n-fU~AniU{G}g#JD6N;Ni6FMt?~_;J;H1 zea62~0q!Bc@=9$nRN@Jou3t59dY9Vo1i!Gpxv+HAvu6gWc|xrvoVnW@iFX2!SsL^` zyk1p%^<;&oTzCYc2gi$QG@xgXK}CE`L!v%p7YzWOqymv%bb90lB}fsosMER-)!;ZWPaUtI0PzVD<;tYq_s{Py#&S9osj5yE-o?d-l^t ze=)E$>n_}@_xqM{3psl{7INzFIk35jr2YbHd>K?O^yI5sJM&a2)lx4Y47r*_Z@)#mAV%9Gyn~jNRF?<+`8u|F9RR#o{0K96Hhc zeLpCJ-@hgx_4yx_Oo~9X;1)}OVqEodD(jsYQ2BlAW@^H=@)s;)Su@MH*RDqYRw$@G zw5X#LQQ{m@3`FB|8$V@zGXg3fdwXQ7;{Crdjb$9u`0UD7m8=hP`2tNVyCgzU9Df+- z#y{;Ix{UP|f!E{@EH$h;@ps0tlw%y^svU5fm@RG8(>bT z{6XKRaZ8T=Mm!b={Y}GvFrEgrIHN zcN+YV#otibub)Cj7Glch^y8!N8z4(Q5UQF=9P0pceojCZ`PsgES>Lxny<;~-m=OaU zZCAbEARk#b9GaU4!^oa9Ogh=jLIzGy)@;_dJs^I@eyDWvtz3o|H00f5=CfYN;BWk_ z$Fb)`WI=uH3jYphe8at$`za6`91vF#rcaxh$Um066#!}(DEu~j(GiY{ya1@k8@_Dt zZ-zob_~5U5F@;BR->-^@oA``M#^d0HRN!v4r;lxiGE!!Ibw z693t+yRyL2psST^P)MHQeGvUWF`3&w zIR>jK?0lNJ%%J22J%D1kfSYQ;hNi}*;OtM{>_4=Z-lNG;Cur47e?ZlP^{|LGu-OtV zV9@_SXKp=g0?sWc&2(mvSJDSaW^;kc<_kcG4qC9j0T;Uhv@rt>(Q%2tDFSH$VnabJE?pmW8d$I&9J|@obi35e>NO^ z^0ALLd^{sM%ze!>WfU6L3W7hAU5g>xDn2His^* z;N+V8O~IQp`uFbs4BKWYT&RUvVB@O-5S!Ew`r1~h$kS<;A>WS?QfhYcP3RS(2W1IlS7&_AU+ zb2ha5wI*L_04Ce z`t=(*Z1{-YTiH4`39(X8^q(`IW&X#bufW!;vCdZvOLODdkwcS4j2JdNY3TcpLUrs$ zg@ys*H2G)rXN8yjOXR!RuV$=aL$D0NdAj+1q2iE#$fW89U%<~Ufn!kU3c%S3C-3h( z=%ij*TTj)2YrYW7O~VNXLiT&Bv-JZomIXlmY`8prXp(!lDrrd4a?bnpHPl2aqrjy^ zTO=SQ2g7V=4VMCg%5SUiBE%a-*X=^n008k$sa zild6ctr=|;b`C_hwMfW8JbX36YwaO9g;L0I%ec%wjRI&FfP-1YLeqv6SSH`)P<<2>+40uWpi`8486cYhcvUJ z6&yR71xUT+TeAy1MUujzg#%i`^*|oLL>fiS{*vm!h^UiP#=LBJ_L)X{CiM|p(>1%)80 zYS0X4bE+}wAPTtHJxkdWoVg($btoP3z z$o0;USFeP??Stvw1#!ZrONh1}Fkwa+^m9>>sIb)aS{d|^42txye&1(kk=x7u0D)aN+bO~m zJC7uM7GQPl7>78g`oXm2gFTi#QyRUV>5`Ccd9jQn(Z{%y?bix}dp`Ig^Kb zl7=PaK$a2BS^SNE0}>j_!TKEsO#1808HJ0Bw1qQr&~`;Lpc9IVJReSBx)g93&Vk*JCNxQ3r*>-?nwVclC05B(C8 zI{J0&R!~wpqj+JFs<@;G(z{{4;cZ5`hatn=N$z3p;gTU!%j^9x8-VQYZ~V%}WmVyL zY}f8ByN-D4tq-P8&v6$P!bH~OPyh6TH>ZwGN*XaR0gY)LK!)J0uR8G-+(Q`)%Z}`9+4pzrOX(>*L3b9z1MJpM+>7 zA~z$5n2f$a>KGVnPOE63qR zQAew;ttdl_0fUB(NE$i9lZ1?Pk5Z2uHe|q{Rw7I1gy;ykqB0*hSUFCnUd~74dTZBV zg9j!3jSYb<;4~L*k=%^gQ5%)mDuzy^o!z^(@7=F|-+t{|wQAD|$Kk&g2@VwQsVW4@ zvz{Pn%&Jq!6gpe$#DNQL!PP`?XwA#MiP%YWD`3||WI~&SHZOH;*{(~Qt{r0uCc1sg zxK8a`!;N)w09S{Y2#_kR8iib<>a>sz*1<_3?)Wf6YaWo?cAeFM|Ueh zTnx}BV6C>o^$;K_A}R`(BXQdvunk`CQ^;k(cLE#>r2=c2fh*z|5nQN=VsO$PuCc>u zr-LvGkmwHc;Z~4v>OELKAVO|bjXTV80iqkWXj}OE$8g;x$>3s$F)v91sgGgAx!c9e zYPecNfj@&RVw}Q^dK`#SmjTNKd>&Yy6hsCZ|0F8#Zur`s9{cMXfr#F8- zIY!6bI`{8;0AoYiPkM6~9On(+wfv7|zxd2uHV4n6W3%I7yZrB}0hBK2_?N>EABUjn zFN*rppW$xs?|Iz>HTZY*08BV>?CYoh!^MMtT6psdu8$rUw}2ZB|Mw5fIO|_4;Bxe) zf7$c@P$Nj|J2r0s0E7R#8o-oO_Fi1~pA7py6dwM_T}OK^39P}tuE4*v7Eroo*peE! znejg#_J67a;I8cP{`~)>2f{`(d>!ULR}}P)`s6NmV*H!8laPW#N;~g{5r^g(Y*isRTF!2$e)*wt%MrF#D*tqyz8%Q zd^-Uyf`KbY7CibNY5hOesEPfh*PoWpM>?GNyK+MvK+{6Ui@WQkFMZ3+-~av77`p6| z{fqL&p8r@zc%omNJ+1QJ)cB`gkCpss@m$y>amPQ{78nZF_awZG{Xh2J0xGX0=^w@k z?(XjH!7afF?(XguB)Gdf1SbK41$PN9!QI_8ID8M;nc3Z$cXsyw?qv3S=e&IqZr^*K z+rR3nwrZ*RXVU)P?;Ze~{z)KyzxF@B0b>2~8%F;bj0aHr2!IEijQE!U1PILb^tS~3 z2^2g&-L1sp0`^z@>i`Nw3^4EZ=LdikJH-CMIP33G0RjZ){)>x=Kb4G6JpbMR1dI}3 zclOT?k565^|7Pb80`zL@HznXdr04NzQS2Z3lHX(g_vau$#NB{Zr9U-1J{8dc7I**N zoBaz4K!9E(|Eb{L6Fca7%m2K(`AdKL`xJlxNdkKLKb?e!#dj=N&z5}tD1ZPF_5axd z_&#d6m@n7F_+t)$0Fey*>G*)=@3{xt4JHQq9d-Q|w)`M`fItC#$!WD1Kn?hpLilm` z-F{3PJxDGWfyxfU59xp3er@a{oKw zN8MC;oe?(2vLeUKcxmuRjEI0Dpe_^XujmFtqIuf%_jN02l<0|A6-AR}=tb zFctwg4EkFVK!7YRen9*GEBx=JAO+*M1b_ljbp93a&%5@IV<>-10Fd=xlKsE6$NBib z8j=Emi;ey@*?%SgV5E`upEv-}veU2sGJF8gZ9djN5&#OsIR4kce=h@u|J)K9|5eie zTZMRdnv@6or4|C(p60(Y``^pJ2+J>J5EMvo<1fd*@0dOliKTZ1q zc3r3a)$q@?a6%U1I|o33WH$eLe841q4b9&q0C11^-w2O)#efqqfMF?^+kXQd!14zh zfO-lz(%1CgVE=OwXlDl~20-ipW1Iga4io@-A|Teq{~G?eJtQa)+kXomFc|2i{%_&~ zS|N`ABL4wmUtj^`f9bE0|MLv_bpL?iP5h=8XqvR4X|MJw>tJ5{W%W6jRJTJ zOaEc`&pG~iTIuof|vEtP<)LDh+6$Q>kPln1t3*BfX4lOIq7*h=eySR907#q z_)nyO0Ew;tm;wlxfRzH6#s6iX`75>WJ3pS+A5e3C3_hTQmjTYh{R;Lsw}1iA&W|DB z@##?WkMTi)h`N4|?)?ZjuJwlm049F{u2X+qdj6Dqz|y1mFXQ~*F#hikepn5Bx=;Hb z)cwB$KgU3T&hHgFefS@igan9x zJ@pIVKb+(CuX^VH5cBV!KR%5D%y#`Y)BpGcaAH=i1z^kk?_d3SvB#$qg@2<40MVBG zDExD)Kj8o0%7EDPk0PKR?~erVOaX*G;2^-C$M;`SdUzV=_;>JuU`_t?CBSDQ9-mJA z;r|T+0EN(T>Blq!b-$kP`^UonOB}Gz$mK`OgFHSR8UH~A{2L7b7c8kiq82_p)dP&h z{F2Y#kAMIXMC|_gA^>bZ`TJzo@1q0W0DRzjAOGpK;PGjR{oiPUo+$$;BZ2$BXeYna zq5mxMtmXZi_<+6$*=p-Q-tqL$^a8Y8o_`k~zyU<}?dR>K|D48uc6S^2`}==>T_6C~ zK;)YKM?cB`YZ@M&KK+vm-d{uh^F3h4AFX%K@gHyedR8ufrs*G|KR^2W_2H@H{{jDb zN(_w3srOky{d*d}iTzEl{plCa7l4xeJHLN;`iSsvH2^;|0zd%_NATRUhWs1czdd+< zbF{GX#n%R~3*6quw_$nn`32zd|L_H%0s6PPz@Om(SHM0*D5*j~hx9+~d;~mud|E0q zXXBs-I4XM%kYp?}Y2_U|-?jVS@Bu)o)<2~EZ$$wt07h2MUic|H0K{k1=kT2Yhr{~F z&#s<-8e0M)An=I9QiapL>+r$3H=Gzk4IQ2+`+Ud=0 zg!{7t_rHAy0-qOK^dBW*`~Qv)5CT9&hJxd?wzu}_US3@290mO8 ziF2@Ego6TXPyBU{@~l=r(*OxWYUuEOVR02uiGLx%?tg<1px}FofVl#4b~ZL5T6Q*e z(ih+L_TSmh@vKq%lz&hQ?fF@FG@2mON&e!%NzHXu-F ze?A1Pb=d!a^#3@?=i&o`ZP>EYAPz7q^xp{2bpn)Jf*wHY|8d~|IPiZQ`2Q0J%nTSgfq-%a0W`y!zab=qgAM}h83sZ%c675fw`C@L z&dX0%S-{m4aEoqcYH0sF%K82u3=(iy1P~AmY%J}+$AAz4x5NPVQN{r4ThHOyjMPuR z2H1Xj9#efkZv;rr;7Jx>^oRLxKl)pe&++H*^9O&s0|J8t2L9#WlROZ>#x9^+0S5y( z0DjU0LLq#ks;c|*Kh-yHRG$oikbrp|=$Yx60M^Eyvj&u-2>2#$q#YJH zeAPu;mm%ecmJD=Hd?X|7s95ODfv1K~p_sKe8Si5a7Q8hV=dirX#giIsk84#U&#FPz_jQfE$eB-0pz~z$s z2NMeK%MHf!8W|_&kkGX2@rcMr+9`pcVXL_whTNgw^?s5Sa;e8v5c^c^UO%IOvp};g z_JF2Q+%orWUfY|YFL;EE9RmM_9WYr@(X93e=$FMHZH{9Y+LLv!{0JQq`JNRggwG%Z zJ~P~T(D_CVxqEHP3A)#AvLDU$@FKkpor!dFR z>b57duMP;U5U6wT<{scWd~*aZta);Nj~)&7w$7at($6H|^IZc1%+x&DTv6%>^1jGy zzof`D!Tpwl6R|^e+%jTk-~<*!3+cj*e4b6wo5Do?`Bv44yN{vw6D!9`w42yK z1V+^K)Cmq;q9x4w`?VA1*&xDXH1OGWFB)E_hcETbT5C*`E|hnuXCn=b6HcL#mz`sd z2EjDF92|2hRklReX<7)xWDHn+n7AyVgp-!HAAN5G@`}lbYZKR|qv<2qiYn@ta#a=H zlq}QFek9?a71CtUwW`Epam?7b=0ZVSxzk*Ui75N_Uxg2*RSw5AHcdMZNgGcCWgl?F z5N_DG-+=^Ny}0z+va}VW9?ubs4p6s`YHq(o6ud-kyA5fR!|%U5N)Vbn>ENyrMk#?g z+r0k(7Gkx7W|W$jb)kbQmG!N?OawLIwMT*F3b=Ee?~_;(!vq-ri2@odlS$wm#vzS; zqhJAl>4PR2GBr@93iAYXH*D=RV=;7*?9}p*eat->623u3pc;{X&x!+qFPN7}8`Kk; zCCZGV$<*D&TM}Js-Yqgc6{<@I`6LwKvadJHg{?X&+LoZB{Vta?Uf+`VSQ1|YM>u+o`zN}s(7H{?y8IHl?($!R`6fMSi zyIj=`>QG` zZjlbvCh5SGGyN?n1zrIe#BcO5jx%C%?M8<4qdGc*Ru#P?FPudAOb^-(yXC($>#LM0 z4n|Ko1~tj`p=JgP(d!L7Vz-;a8}|W`hlc9h1wCmUCgNlvot6YpZe#KcP!#9%r8}Y9 zVk9}g0pqMK64QUXrv)Z6kTd@z>RJDUn2l>!%E7`hwZrEMir%vbmRBC+8MDqpgix20 z(!|sv>o`rdgAFTon`=z6%)rB3{8}ye^_z1K+3h5_+VRWsfnmoWw+Bi2hRELQT;MPm z9bL z+guOBURFYvtygYDk|Hnk$(+G^_OZ%nL#Bp9JU|0_TlcG#RQ`Ok{Q)5&awMgHl1aQ2 zcjz~&_%&%I!)hC}h?na8hEEi9&|n7FP3XObChMOb`f5n+hqHZaNDyRS7p>L z1Z6m@&;|tD_}zFNS1PhH&Flm#kM2bB;5G~o$3JR0#j)MGvDV}cn`?Fyq{bM$pfDMg z9+Z;|jeHF`yeOB2$`$4~!_>pHpLC4466?g`mxfH+`a}RRkE(M>8x!P(lR^n3oi_O` zG(^&O@blDw^Q$`00{eS)2jVHU9uO|yhkL{E6**JY||saJVc1KChrygGb&ayM_!!V8isRYW1w@ z3ZImF`&Yc&R%P(TBfVO$*lxuwyPn7n+4fzrwKBzR zKLCZ8%DgwLWOR`!aDy`^f3vf~uGg|zocbE?5G9o#O3gNJ5Nog`reYfD6dJa)o@8+y z`yiQH{}x4pL>AdCc#zz#fByqvopTz_#m4(e#A6jH!48VPT}jN|4voxRjZZxN`@ZJP zYDBS7qwCPYBZRAtpPVF;UcP}x++7m}VK({*sGmZSg|{A%`)7j0EjQUBwei^nSA;qx?pGs?x#O1k;_cT2(b(D! zPX?Ru`#4JTBgI0dr;*i`xkUui3%v5GOVo-Yk#)|!J|$SHn=1IAZ}qIeJvjnhXw+%w z!SLOLBiM|~tlE|3v6G+PrHIg@i%$uur729}oTOdwpufc@0S2y8+asSqjH_D{P1Kv{ zUf)nfx|j@)?w4tayIZ|C8oBO?S@o%pop9FyT`N54*n;m&x%{}*V%A#6UbFi7>o8!@ z0@X7wX}+kU(|$=Oc*)rQt=ii!hf^T!2pdCL<7FtEWPjPf)v8iAD0+mp;x`tELR<>r zK2pTH{6Anxv601 zKqw&Hx$^n*n?bPS&{poO$WJhkJ8NMesLHsTD`1CL(Y=-^5Yi7;i`&Wa~wI;vo^21}+& z{Do>LjgC+J;z|xk7}d%gzMZk&r8_f95amv7Dy3Fy>4_4=xAtowhZF@#rbw;74Z3hi z&#Lh2Rf*TzqTVKqDJVv^XP5{PKxx;UTApfq6lR`|rk+{t8{}-M6QP_PP3bfPUcrMs zy4F#X`_^O?S&&ISPFznibBj4T#Rwdtyf`!JsO#F*y1l1114(k>RO{4xROhN5c|w?s ze*R?wy#~i(AE15vg}F3u1tTMBq#yul-5}Amks| zN7IPH4>dy*oI@WH#dgC|X@KX_v^^aW`J6^Y8aSNw#LKQm8_bSE(z}UvsT#(@veG$D z^_{m|U!$hmEd(ZNDcj%7I+(;jd2)s{DnOJDF^_+uef0^Afvy*=8m|CZOIuhINe`Wh7I!Dxf^u{v7x>^%m>&L? z1regfl5uEgae`>XM|f6RVcP$L*f1JBL!*EE*GQ+(k9nZuAbkDE#c3BKd{43!pPMPE zV0xbjd-j_z=>m4o}NQ#M5JwHJ7l7V9#hL;)pHL&ClzQXwB8^4d(vJS{|-x&KZ}! zcPB1tp|tLb1lQ=uuRd7}K1$#KUZa?!U79N{Ckf3;5hTQ(vq4kU2lJADMs)2%fHuv? zV-EPaa1a^^#$(`Ehpbg!>iQ{ssEa5T!ln>*33{fIqp!W}zTNH`&FN<0V`I*bY}f{w z)%?c3R=!$3Q!h*Du;KAz1Yd4*0%1qV`MaxCUN)9ORW7zVfNv4l%6!cS(IJMi59-6S z8~c!W6DA`%E%6Q{ErShaN?fT%JOxq@b;#kRe~>XTvjSo_!Jxf7X(-j#9JpV!yMM^W#-iIP%>nx4vb1&at_Q@i!yT$bcM&9h z6-+4~k>(by>1}nu1Za*fs&Oe8z`E*=AjwF|K=dO+GE4HK!AlVS;;)*))FrgK&JexT zSNF3#S#t48EUJ98jfp)>At8KB*;Pmbv9Tg85DR?Kc9T7Gaz0B-!x(jKW)*L{Y?^MZ z+XWC%N#lH7M2M_Rn)~wfm>}1;;l%Btyygl%61i1;N!{xbA|s35@7P#t&FbCkf;|=O z+a`L~SkZUS8H$*L6{u&ogA^==*t=#0nP|&7Y9rW*G!Q4cHQ&oO@xFtZWB{Y7AAINr zBH6?PgLA9dvZ#lAMH;%CRzLd#^6ePdaq*|vD{a`w8~S--56Ab*vW;RReG&yTH>_$q zrdLX+e1|(W5~P%sMQLX}6WOCo=jz9-IcG^YPB@$)+;xS#FG4(Q_FhEute^xu=y;y& zZUoWUdDnnfja12Uf4d4H9|qdn(h8{WBkrboqBXiH6{UDTpySMVr{=2|rId1-$+~Rx znkrYgG?Ta&Kg`;}mUEvypX6YpY5}+?M5uYfgrO}03Cg0+2lCJ@I4o4SGj(V*^-43T z#&zE&tc~MIwyp}>;GMWQqD-e_gs?nb%N1eu11w0;O>Zv%yy@{jik zc_COxRFeVnwaF#juc(WPW^hF2p>iC5gSZHUK}3+AwB ziki&0FTFi9uEAJysItAj6dZL$${8^<)w^NTZ>;3jqyJK*HB|+)K}RB-7}ddvwW?oI zU!PX!3-^brLOq{E_h$dn&$ zxf00)WyXy3_c>=MC;^um8F4c>S)TF2x#%qp!g!0OiRtTa2~|zZt(zw!z<{h>6qh`$ zFMpzt6zU_jcAMXril{#0DdNqvD{!69pOu8QNKVvjvR6a<@GV5&U74+H*xNQR|I>JI zSqJJ`k7%oZ5q8F*$Zfe8&6KxHV6llHhHPvYZle8Wk4~r?Vyl}61RVxu)hV^2@4Ku= z613E!{;0qWM&*woA|4}}{XGI@r~9i$b|2Kzv+DWO`i5RR+NX?s^PI(K1WHDH1OAk?$0iDd{PcYP2g*X{VG=?_(cpKaGTpTJv%*6%l78{yEWG^ zFJoJJ2^ouOhU7fkJ_gR&@3ks2zx6j=8-SHRN9m<7TmnKpm$>jYo-)GdL^;{di$<}T zX}~H(#tX59fgpYog-mZIAm-G~g(B&Vy;2LxMa%5vUvd(^xSS^>V+!heF*zaGFJ}*jV)Zd*uc<7&WQwndMD=UQBMMeosjJ{@4gE zFu8MY_zE5&k@$?+cih_PM@acoMNxJlhukoP;6(%ew@UM}35>#73mCH!l-h*ZSM;JT zV)n7=l5rD!lAM`w%;kpHXge7$@2UG~s)i63y<}^^HOHeZ2JxZxtrxgeCA7$jcW4*Y zK^6$YUA{rY8bYyNFVAc2_ILxU7qsqe^4P-CkK3n(2kY@tM#d2ww0GmKEn?Pxbx`ie zQ#1~&59mOYpgLSV(pa78LI$UC!1>IBsiG{m1^E#l7C3Bhr2n=&gglb!Eki>6a_rd9 zpef>oN-#8Nr|Ezjf)%CJhu2+Hi^)XF$TOnc_f&%?y2ra%{Q}KnNCUHoPd?CP5aDGw zjrjS(XzQijsET0O%}&^tbW5bt9@G?W$*JaClt3;JaWPpbX zol^I4^8=7buvw(rfafC(6K<)+B12|zA^u#_N3&q9cOZ4K?A}RiPAZv;UpP8V{Z&#P zJqzH&hc+ja4LLf5NvH@uq*I&eV}UH9ksF>zkYlhi);y`(}C6i?jpq z{IyU@IivT)EPnG0w6%>v@BrYS1S;uh?m`SUVR!_t4LU zNRTB3QE{z3YL$$sJX?1hi|1FYA);l@w0ilwj#q|DO0!cj4g>BTqH4!BtpRS~7LC@8 zvt?tS?S@919gXY~2tPSSfsEJ?@nY(Sm^~3idh{-z+`SL)47h-EMy?-vs7`2Inl1f6 zjWDLIE8g)~i?24;b#ZFO0KaS==~aM7Fe23{p3#W!;HDLp3EV<>hc{Mrq=)6ZJtb5H ztKn!J~J$_T7#9fpbXy9>lJ05w)4)tf`^yKzS%@a>`D9HKuD{UN2VBhw_3O6plP%z~= zt6*kCcJ57zFt?;3-wgoc_fxv-5)F{3xjh0wDQ$t*=P zlW?#p!&sdS-gWGRR>s(_>{ zO`6j)YU&eTU@2%DHB!;xDP4#c(VhhwMr3Kcw7?dKi;_gAN|h6P zM9N@I_V$aCh#4sfUvnK|B}iaj8`g-r+7_%=q^ z*V+}VF%=*+=10+7ypKTX`UR|Iz0z%S@(@TYP)gl&!7Xov3MY1Kg*?&5&2Gj?%BEJ1 zqaaTMDDI;e9_xj1^-7Eq+Qh?j9cd?6xp0N51x;L3n?1vQ=q*RqVA$me z*ZRja@zCnmxUS| zQOIFfT%I~_33K1c4yJ^kY8GpmX+krpqdBj`Yf2rcc1L&H*Z1Bvn6p}@Lg0*lQ#%;i zz5#I^uBb^agm9Rg<+n}kk+ciN)dUL&J|3Xw8$q?jF6>_++jyT6*0)(V4O=psm(yr1 ziUPJ*l4D6M+)R&mbls#za%rFMSlUtoPh;!;gxcGg^-d|@)7zFoKDX03;Vp>_q}5$x z-|=Wng@)Gy)ty0*4&5<>%M^*9*S2u!)L6>o$N;!twOkP0!@kuV9fpalZ!JS06U_r< zLc3a_{~Xl(lsrCSl7|54h}1@Zh=fIc_mB(E81>h{jW(&b(_iC=fOKbvm3BvF?sL{K z<@cg4cCI9l_Oit-P-0p!niiTjQ)@y9%~)$-StpRZ$F~AcRmy#y`SP0 zvgol@EKtr`swdu4O4_)AJYf?D$7gE$U-ZCSs!y}{-Qi|{72p&WoXX-sYU6aFvA#?2 zf5{E?h%ml&1Dmh`908g<9RSCSVfUnTQ^xL^Nfm&?a@L-|&@Gz-pA82!UMqT?awAju zBGGjYEWog#W4`B#GPA`7E6}zd6?MWs5Rb|HuE9M6vi5-ai}D0YWA<51ZRWMiB-Uir z_6RiXwJ=K>_2gdWv}I%CN9W0Pk|ws9=*X%Dc^t?T+C-HN7iLrei;;~O9&;8|=$H$r z;7mwfM_Jf^+J|!yhI%qNt}`=ZS}iU zf;94LqqDF~MP^Cmi!}XW?O&PtVMewocp$4stkg}mFVeoL!DMC$I}aD2{i4L~aqfnk*tb228Q=Wqw$&lEj3qZWB1`1qWSY@Zw z^~N|PkqjbDggsg&2@uh|LO6^Oo|atxdS3=B{molwUIQmI)|hu-)gy2SDNVv#0=}qn z(0)NMY!oZtRxTAA!zv;SpN*5Xk~67-$;bVNv+ff$($% z1D?Zo%}=boq+fE~}RsMsAxE5(k`QcCuu+nn2oJW`PpVj{aM{e3Mj{jnrwx|ZH$1x*w+5f+_Y{TX=keCzgdbt~>Qsy2cQ} zkfN4zlpsA)1T|Jpj%uQGzLZ~9+1pfJD`-LY!&*OxAkb|9oOLJhF)nh?&s>TH(RPX& zMCY%uV1Ft6>Qu_1m2s5$Ndq@K5=2cFD7#i9c_pOl*jKw_uufC~77uTz%-p=MAN|Wp zn*-bjSo4d+IVPS15Ngo^UY;Jc?69P&p_s*6CSp#3&&EUUfj63?F)uzBX>5n-WRO-^ zI2h@7p-x{e5w#V3(3nN{^`YZ1p!dS|7%dGVvC%Kn-5p)W`wIDr5H_*Lqy;hFo31muYQIs*)g5){x z?2qHYb3gOXt!p}BypJ>T6&D4)j|7YAyH%1-EC=^_*hp+wio*;MK19K!@7y*Iov6uG692W*IG=JeYG+Q+hur)A{e?@~8*tcZ&GI^{a&ysl1-`!*;+_f$>m{P`6 zT2}5ub0d1CKE6WoRvaN}VU(?_N(zPXWWLVjb@>ysV!k-^D{uS)ep{e7=XxdE2NV{_ zR4c+!Vv&qwAfLK(H@gx}V>fHi;S_M1fVWWszpkN+uOJrg(1#=I2$zB7oign*N`D@1 zt6k*qlrWwTxy#h;(p9Oyf3IW*pK?sImZ5f|2CG=X&4mE=?j5mSm#@9c{_AY`8lWMr zBLfpj{Gh8hdCkUdduL(;vmiQFN;T=*pxt!R)U>*9YD?GAd8O2&Am)8jAf4u4V!Qh@ zoQz%gKH(Rny@B}pLXE~EPIS8jU9LDBF8&UMV;p z*=!0vHqfUsuTH-ZJI617U2ryow7I@$ewUn$iOjv>g&*g>!>|l8HwD2GPPrn zE)Oe9n8C=d*VZkUwHhVEf8yDrIN0wq@?dh!)ja2@2Diyrn0D9>Lf z(^*)QByw^RD>MR!mVMvs6{DH*<2U$#^*VmIJJ34s_AD-)`;N2 zQVJ*{DiieSsu5~ru>BNx-P==U`uMUFyBeihN+>8i{JAlfy*YERpTC5s84gP-K%F_e zk9Rm7ynKf&uEA+Xg?~RJ{nB3U74zCz^DVBj{MrX65Bq?&Ly>I4kSavkQ#+39)ef-` zdu_0YoZawMKJ|Pc-03y}f8_%T_cI-RsS`;S=4;Am2?pX?0|d2gOYd`Urx!8TyV4@2 zyS}_=wRgGMJmd0T5J*93gC+ZH4i{w|nY+m8IyY!~{3oa-%UvVRDf>I(e9uuHjH~Qw zRI#a!Ty70z?Wl_UDAT;%_B}y2s+l1lng#I zIQ`_*KaWfa@JiXnX$>O2R%8Vx{*|k3xfPONp_mEYw@?=_qM8Ld-l8^N^IIxx4 zanZrcB8V$}vMu*xLVkpSegI=gu@o&I?32_S9gZ%t%ydcdUeVWkd6~`TD(x(&_nIVmFrPpDerwo1d^&Qyz zq5Cg$S4gDnLrIs^?qSI3S+9Ah=M`gwE5*eqj>3J^HlX@Dlban7-fQ*&M*>Xuu~U~7 ztzt4Kd~kLZXNVR=3!IgH5~FlZOu%!4u1b`xTbW|aC?b=6frgkc)Lq7KW01nC4okx^ zso@eZlT-mc?UrxjPV95T{YHl(bAfGTu`N7E#JD{RH*+P>>#CjlW>f=X9cOOW+eevb zpAo#TOFV+RLC)gS`xp`hm>^#3q3fh~-XeAK5{WFUw+l~hh*z16qxVOXee!#iNxVx9 zym^JasBIPqvCXURweyM2pA7hQX(vK3m$Wtr7`&BBpx6e$JUlk@Cv%KH)3J0~R&d zWZ1hXVkuTK`U9YT_xL!>ugDQNx_ysuqDSbaa5jeY*FQ~-ibAntOm*2eiZ11*R(?Pt z#9UmApzY0hvIyrjt3LCuKBkYTV6>}(3)`{#>N-9GZ%C^b!Jvt55U|G00^(f?d&#U~ zbUk;{cu>JX_{ENp#6jGFVFV$s789hqe+*u4+#2L{l#f{za2~|Et!02J`y?iJbENOV zErMBHOJW*m<_d10@9BNJszTphW(Jypt?(zYVN3SpTO)PD*(OhF8Fk|8zDnT9@-RK1 z0jk3gSo4{VM}}3^`R%f3f=Jx(KvkTk0ir~pUnAm+vt6H# zSaH`8XF4L_Mx-yo@Aq((EF{8Rzr4-5BEEkEm7^bp9-k-2T`L9fldL?Zvhg{H^7;r- z8r#(mWons32cs1~8HK#}z;_l*ZX4LXMVjSpbI{t&g|MZ;gdNH-HX|Bq&-_9Dqdel>OIC6#oTCFb_n8R z>uia@Rn59Hx_vX`h&^t^UQjok0Php3XN0yRn>m)AyboBJ-2cSVp@glcEr$`_x zYzU-E6qQ>Yvef<6Zs!+qOr7$&HTqS?(3tKjyolYSl5l-O{O-cl5%aU{79s*S#Mfv^ zteo0XQB90N=HGBi{ddl3i#52C-CD|W?VtoO_{jD9RSg>`3xMG@% zBvwi_-o@ne2Z71j0g9V$DOXk>q;)@1{)6DKu@CPu;uN=#UXhNI2KHOUu7pz$trTSt zA>9}0s~BcgBrA|>fYCAyz)^vLfx>F|sqGVfI(&KbWH!UHKSLj+KUP_@S5-xZdE}ev zyWPd`m?7=U49@Q-B<_JRXIDb4;}I%NM0?mNYZ+weym%+<5LVm(<(C|P+Sx^wkfMcu zfRyXI38Wou;N^3_d34T72I3Sc{Fa<4p%C6_4jHJ|kEIAf^N~K4^-k=@Q*Pq@E)3=V zI2=8u;vJ5mVu*!gu=*xPW?A_V9YfKB02Nj-?RD=MRU(xi<+VP{81+HDcBl!$gFUC% zjm894u}cN$gcErc6T>>a-@wOPD~{O4i}G47onoa&JCV;2Cgt1}Vy|0S*zlHWsZ|QD zOxnyj)HjRGhjC01wR#pm$i4eGckowC0( zuc_;ZXvMCRFZZe2iI%K3*fdouiGPj7ea3Y+%_vg}SyTu*Hq7t~QR|-7T}gn-*5!pC zv$6$ZsJ>J=Q$I;Ljh)33#WgVuVO4cnD5=c2TQ{(P#1a3AqVODDAT$aOvIdu0;)?D!H&UALjybMFF+XnWdZ&9>fi zvFV^SqqOZC58g0W&2|$M6o-fr!)LjLQX<~Ntjkcqy%{z*!U}M1Nn0m~ri!HN73k;z z_nyfVlk4EB2q&|awIKJDV9c0_?eyJ>ifq(~Rs9OvI}BGGi{7U^)j!5LQb$liUdxOv z=nTO(<>;Pjj7H6Kp)Y-3!h}Jt<#WMa6>Nn<(7&~KBTbwi?_48ZsGcEJ9aE`K5WZ*S zK;q(Un;isjP(9l80m-gu@)EKbYYSnRYh3!ACLFyJ!9WrYXdlVO9+$e>8}bV243!+| zUgJPvp(GWFN7Z2{W&a?19z+aWx!IR(qy6S6B*gr+x;0o#T~m@Yc0%;qdKXijIo-4waoR=@f=EsY=og3_|OtY%)<<1GRmKUJK4l zBj$o#*ir}&uKkdrLH{I%!r7?TL;6$+x&At^1(g$`X0Dsn?&;`3whp0q?lF2XK36pA zF|5eQACO{e(NHYrG;#Yg;0A;umQ-I5myqW-$2^W*94GHq?OgBCb57^*Pw{fC>LiSA z`&Mr9LcYy@t}@FSboq?C5v(;+99ZKwCPzS5_+7KP>&#as2V+10i#>_VQ@ zNIRkcdZm=(7u~@d=O4y&x1+`60y1DZNv`O*QcV7sM`2+k^MY4Cv7}HagIAE=^@fk` zo0!I~n+7f~qE)yDwTEv(d($M3>($YL5XSpU6!B0As!}y`?N80fiMQJ}6sFAQ>V8Yq zZM||dfzTL4Acuw}wr*;YgP7T5QkYQ0B(!vo3ag3^*EA&Lk?RI))B`E;)V*2zh_0V( zDHCrcG*>(x6B{F(i~E$=4?1?;5(OjQ@60(94+`^4BHVdftQn&>bs*EuQZ*l~Vc$FR z4x9@0QH?Gu;V2dfPLI=^K;kl>U6PjilSs6bNs&kQAiY5?Efpy8Hzrx0%Kc=w9#Du=IqhL|QLI^wb?dzO5T<8zVhT=B`ESfGr$Xj*MV zx6wXKqKcr4n;M&Jrk zdJQz;buV1#ObBnFm&LYXXR%a;{#WU0}si)Wp7U0wh zMGwCTThz1;$|$2J87o`DqUC}#YubRJdUANwGnlXjZ9L9+w-dNQ5Po4#IVuDvR2a+d zGi!7UD-|tErNsdhEDo)$N=>o+Sl((_J!H3sd~f&RiBX`6d_K~k!6D7oSMRtk+*^#w}r`%_0bU9Y1A~%61rcB*GlqSw=h2XTWnCbD%TlhU=CunKFEB+ zkeiJCv|D(vUxAxOSMXsQ7l$kY(_t(Ev=#2Zm~DEo%IdkHVJf=>e7u+}p)88TCgd24 z^JCj0L=dWKS=owsY)7^PU7*}{fe8bnxtR@)d4XH|zCN~eJClHl_}D(%tD<_X*6>UW z$cqI77di6%L}aMMH|1EL7(w7xoW8Pllg8l=!!=!%yb6?X-$D4JjTCnME|imudyHjJ zyxkhD>wAr4*NB8Tp)2r(%ny5OYS!tMn7d7*BL$PC(>~n~N-8&DZh{YY5FRA~#S#-m zJi(Y{l!b;%oT1hug$}Fuk<*VBKy^=uqKM>-aKL-Qqx0E)ELI6%*ay+Gcp47p3#FjK zXX-B{6WP891-U?mR~ZR-nv1ybXqO9~^`GWu+-SLE=ROkAdAxmqKxB9`c2y*z089cB zA4{Lr(NZ8MwkSFN;HJQFw-9j+8TJDMIYTtd?HS(0egap5X?l56d;N0}M zb%<8Xn#%$*QQme?KMYGh{5l?BxA@>TNg1Owy_%SqLybJhD^{Ywxr` zj+{v84eZ56a*c&>7mD+WX89n=va-lSEZksfLWwNM&HytkOUh`?Y`xOh?}%dk9yQ*1 zQ#~4kyNp3}oz6ovEpc)DMT^tc>jwU4*F9Mz;aAcrsha}5N3@w^TkbbQXnb}2XF zUis@7I00j|rm%%sH)_3FzK&UNE2rKL9*bEPlTyYBF8A_zkrnFX!p2({gP*|RacdWJ z8nU4(4Psu>3@hQ^^?@EHvDJVpE78zbc`tV~kDkRZ#;W*@RaTuOhvd5oCo^@lGUJo= zxj0Gg@P6La>OS1xEUiagC+N6;@DaRBWCS`@+4E!#+Vd3cmZ%&T`cl?x%8U2nt9*}m z88a?6W1jVGFMSAC1#t^r+~I)5Wgomb^cT^sZy%KrJ!i5y6HS@WFlDY!<0l8($2?cP@wClv;h#m@EWbRu2#r|y^97A%F~!wm z>1B;$m}18_UKIE`%Zqa5B8}UwX=TN= z-to~sNO6iBplMRRcZ603UQVU=wkMkR3fOd-pn3O1C7$uBRiybP;Nd9HbP~nfR|)F; zyF@B0eFwa)@Pa;TDa^4V^cR#SvK+7{7+2Dv5-yY#3(1OKiW%I5P?D~?UfPBc6b%+< ztB}19a3_(_Gvaq-SgFi~hx8lj-HW~Q+|-z@sOS9VUrRnmb+RyE>J@|7kw@cLXR6Y; zZE&C*Pb%Sun8jE#o1#Znj#JxRBru`8faba$@M=W)21Zn&ES6{tdxbF!(hTX~$WS1| zHwm?K4~|;bDsY5oX<+~j`20duvkfP)BrOy- zv$~TXm-JOg7#P>wHNTBSCgEqsu}CF3WmhcF-rvJpop+8V8P5`yT=EgR6bKzcZB_J~ zuwT?q%Ts*~g0^rE$!&IXk>eJtx(V}GoU5gv&x+o9nKXMT$IEIg(K3YIYzQ>LK{tfQ z;QCtWDwS$2b!m+Mg^c1M)jOUMM6MZ51^14q5<9t!8(-NXk-3# zOwudV?`7pPZooq=c;{M?%jRz`)pPtFu}29|MqomP?1S#f$ja`LCUAh<`Rg7ZrEsYU zF>FaJ`rVhMsYA>621V^a;m}~m5X$xBkuY0`DO-Gtc`9vjykOp0-b}O7yX`ltkiwD} zTkY=3AdiNuVhN7RN?a4oikFM#pK7YVFiGP-69SI8nBeg<1FB#fl!wm^9 z?6HLqSbuqR*)j1EG>w>~$36?X7vJc8G%XJL#DHH4w(g2Iq#=qF)F=KEVkflMHQl=& z*aMNPjkJ$3nELRtsBQrqT**s5dxWJ%<0!o*YM+vi>CF8F)FD;anj{tHEjnMLsgHB85bg6Lo4T?e_cOO{PkSp5u5apFbm~r!fJN!sjq2w5k~G7yfQ~zn-^mQQ8cf!z z3j2$`kO4u!-iU+CtqfMb3@}l-j$5P122~EDGjJ9v@)5k+`wb^^^a*Fc< z$ijJ%nvKyuduA$UyCBKe+n?!f87wjI0+)rcbAA-Xb~AtlzfyX#w{2O#L382z3jE%N zqT<-;#rE*+6&T|LKDHnCn_zBWhO5f`4X@6aUh4|k>SaoUtF7~p4Q=Y8IjdPzT2rv* zv2PIcEbFsmmbP?Fz@IO+W!5WS6e4jom)sP_PLT%O$`4bU0l$3kEfviPqxUr=EO^gv z%DyoNsgKkOo)%0z3b9OK>0o|06W0^>Hqb{<=Jk8y_%|m(@%gX?gtU@cIh78bT2Vd} zLNt{8(6?1LIXO|$TnI5pn4xBq_PQ??PYcB>3%Cwd!IjUbB1=5DV?P{NAZJfW;M(hb zOV}fEJmvOylLK}xqbW;0K~~ShP{^S{jrwvzDtG!APMP)_Kb!7RBqlxcykUk(A2mZK zyQ!6wT-wS+4yp{-Q9<%s%WTbbA>9!5bYZG!sGxm8*`@A15VjtazN((YB=Mq^Awdc< zXovMZg;7aK=&^E@Nir?B{+SoSD@*Z5Sk6d!z$uJp2%r!S6dEdBWkjF)Y1QD;!*p=V z2R7ew&+zJ~^$E1-m%d!h%~XuF_bdSDNbJ( zFweftW@jasC*Z4}e#G&xzr37l!#(kf;mzlb&qg~q{D`BCcsu>JkwJ`+g2hZ0KEABH zG`&E(=`|_U?Wk0kta$2MMLFJU)=B^UC3$b(W*ggpfyTkes$5b3akY@jf)}7LAN2cz zf)}jMok=jIR;ny{J}DgHz*0h^i8aol2=5g%tl%Y)yJNm2s~D46G7p`a@&_-^C^%hm)lbV3>Rxb8(fT->)%KSeI#poGh{(Im542p-( zWzs-hG(J@w?)X`FLH~N2XL2ZL$fA)q9ghR2dTAO^e>F4h{+$ydxkmC3rVvJ%@-pq`nNS5hl;3Y7L=zoRLfGMWJIZfDhXQHo z$yZ5@=81VQpF78W0kVNFQPlu5cXfu9f{~ca^KE9BX+2sVq4|&YCYtF%fkH!mYmzdNcUt{){kb9%5c$J4md>52^=dy z-`QF8y9?KptP4IOU<2;uZ%{@zFSD$EBf96(*J>>D7o-VjF8?L@B%i@#;QMwjgzwJv z<=g>8pz4+Xa-oL!$Lg3GC8tExcHD(BDI0PwTTUi@g&y9%cRdVsdJHOkQ*|n3fEvLp z$x^InD&6HLFk?58D|br=v7M@V36?}lmhq2Q^!!Zqm8#VKMm1ZrP6pQBd)J$Gy3JVR z>LKBK8+&fp@o^Bk)16li{TP@xo(ZC`ac@{}r%`P;;hro>_n8 z6NAozsm0W@*hHW01D#3^C~r6T+_nOgh`*6*Y)Z?lYd+T{Qf9mx`7e;F`SO01a~xWy z4BW%2@pKvsPow4H9*X$y!+>NygW(D>@Z~Cu`KUM9^`#UqsP|n%o`*;dKyXmn?(0Eb zotY4IS1Qmx+t*cBlSq)e31nH=Errwh)qUW96NWyf=g$c4HG*!p zt?y(KPpfE=I2+WF`b>@$=4qM5x{#%LjPgGfW5 zsU*Cl4P!A~r2j=4b)wgA{zS-GV0O}p5p|V^`>y~lJj1PvJB|dj&JTAH3*BV8o?F|L z7=u!K!|Oi;%zM_T{+m+Zd_%?}T$V|aWAQ|6koq1ah>*0rKRdOpERsDgA8q8tZ-vq0 z!5E?npQDmcA*BlyP;lgKFN3*G_6cY-smMh;8x|(>cabr%xdo;3QM)m7DRIl+ino0Q z=C`PUCGyAN(DXjujp6q0`0`UtN%V?O#YbuJcui^-y^Dd`81Pa!B@$mJPjmNrWFXw; z?!Pv`Nk@{1cuP^A$a^_4ro6FF{G+4o^giY-&9p=zIPSP^(mKs6L{c5twpE^xSk(Q3 z)tSV3nvUcEF9L-tGpFx)KNz!haBOLD0A_XYV>u!h2>fgYG`E}*#PZ%)I z`H05&+5crhCL31^nv9&{wwyLq9f|0h?IB-#%>-MthE+Q;X>xKX%4 z`;Fiogkse{@Z4W}dxIXW$*y8M`^P#HJ+%Br5d+j8y25E0LYNE3C(`$EL064i@L=en=3ws~%1 zEk%*73No^YNWdNz#m#;%H1*YfF1X+L_S|>5*1woCa#4mo?N1JoJrTnD`o-P9w(&>T z4CsNh3x$u2`Z2Mca0Lg*AdpQ!;sYbs>2n6l^9E`>g)b8Fho)}G*(C05M}EshqgJ55 zj=@m`m&Q4_7yu*l{Dba>mgo6r$XcXsg4uQ!P-A#KW|7=<#fN zvSb;G=*#M=yoH$GRjB?pzP|E-WNn%z$iPl%o$ZjSZDOjV?!^nx^z^mrsE9{s_w;Kd zI)IiQEW5$R*oXgmF`v=cpTb}}qDrd9!^eNe%QsB{CKWe1s2A&iZv)|h1gwel;W>!c zFVR(+nD{wQ(_ctHld40Olm>acQ^>KG0zWe{HA74lgO_lfG$`L`9;m0BOrM|Ih?8*e zPXmG#%o2iV$Qc~i_gD%Pk9akcSh zweVmJMB5TZm`mx5)kd`e4?K8z0cp%JZ}exONHnJb;p8NJJr`!ewcM-Z&h1JOmkx2Y z;4-P0l@JL)ZmUv^&_*_AO`V&>#^QP`$5y*%d^8XFdiTYB{Utzh-c%&-9LrdM!CdH% zegQd55J~U$ympSzt)$~WW{^yxIY`36|9J!A8iyofXh3<4MAG`|Z7FzB_8)d|G)Xsd zNl8(})g&}lxW{{yS--{Kh^xL}uRELM^7$>yIt`~a|6%e;(;HRec>0Xu9PLKa`}=*h z`z+CHY8}R%2A@Ns`ZOPiO7>jMV$tq@WY{rj)Ye$-R&9z&1a<0wDY+!-K`HNLY%@da zl|t5D8f&VPc#7_1w4zVxS~jqcbboM3s)y*zf06As+>Kq92RN)*sR&P05w$4Kc8!@dwpq29MfEoiLHoV7!M%3myBDuyf_qikzP#$skh=}xSLhT%zmvzw%i zF^D+ugtbWhoZAyR$QcvowPqpv7WSkPjJ*Pd`1hUwmkK(A#iq|RYt23(swX>-@;g)O z)r5l+ma4*o(QhE&6#Q$OxiU+i8XSsP&B>G)bRQ!au(vRd*P_|uaLqDuZc zNOvFIqZb_+STqQFMgcY;5F*jI6o=w6G3{IjkSX(Gfq?r^aFQtr-A97+`7g+5Ms~u(&uEuF(d7+3q&fU6I#b?n;p_aH6^#%DXq?KU=;EFpApo@ktfJI7DP4>=c08+ zi8%Y*h!H(X8ZCNzPFprvYbb-mC?Df2^Tc{(l!FpWO&wzPQ+jDBtk71RbLa5wkN9*E z{5uD}-h*=cd#3&!GJg)p@3*3CKW}E=w|PHrRbRJpK==)?0H?>|dB2-heksY?9Yx#9 zd&4JK;d=gStA93ilc(vC;FX?7jL!JSv6Gk6pGUG2qH@v z2S%J6uD9rV*(?grLG1IwQSe!wHRc8crOZTb*8C~W01P=Daz5bLx|lez`5HN|PAzlTg3Zb2Y%?M@Z553Z-7WET8Va9hbrm4$Ft4_CV* zmt!w|bsI6tbb+-i;N{u2o8H-C6UTPE*@GV6Otq6*Ca5Yprdm+Md= z-H{aZMkjBud)O|TZ8)kyj#u1H|XYxaC zfxvJwgyT!{$^7IA$+ars{Ab?#Y6r=K%581qYwpoARIF*1GyqYHCCU0=4Qb9j-mZ#b8}JA36^Z zIzufK{sl)yM;XX zQ4iFft{sbs6+t>`xDWOYSTI&MwV05*W(M?A+Z?7pmBNO84cINbLDH>-k+hNg6;6Kd zW{_59J5s>~k;tRfx(g_N{}p z`I7i^jz+f)-GI&Lpvh!a{)Sowr;q0h`A-GlmJYrCp0N@vyYR}cmTi=O3Kg?33=A{9 ziqII7rhMvMhV<|!8EUs|NB)6a`NswIKK%(RM}*blny+bR*||j8wc_n)*vYKvk#R<$ zQydNCH|t*>(Ce_o9RA+((!lam%+pnblqj25xXhGwEh7JOIYu8yX0k`EY?Kh4z(tn@ zSi01DN`h0k%k+uZTmLUh_3yZ?kSc>;iDSY@^rG=xTNa$Vfi& zWH}^#+Nlig8w3kkY%;qt?f-HdB0!dX(W9d*uLWpsMhQEJ3EO+n@zoTK&!H)eL#T5` zM4p|sqoHTH(`7vp^)ou?;#GN@3)W@v@F~7KAn&dh?0}%&PTY=qRlgOdK`h9*(*nYL zYIxwu>TgiWq;Z?LqiM%}O_tF85UubW*SvmSGkn{p7vL70IR8jV3we?6AR96q%E~h< zTO`XRh-)VNB9^>D&56F|ifT!o%4Cg}bu+xW!$5-e&sR1oAg+=GI9+jSP8H;>vtItM z#aPzq^p!0uDkI)Uo7}{KYQsGy!}?nALx^&^fUxP)_g~%tgD%znCTzt35|0k~>KB>3 zB*5fu-3ctHLfJp4ZKRZ-@A!v{mSb^}W-3sMDCi^ru+WsQZj(Mz$9_%wj~`lEo4gJ) zBwL~3q`*H-zq2rAFZPB#K^ZN#{`mgtA8UCb2uF7m1Eb%uEO=h0L{?wh^f)ee61#SX z#b@P!zk%XsLJFZG)kS+=R91+7&8ig!83^^V0=*{+0~x2k;HpI*8vdr< zU+RwfWLSn|bP@$N+|EJ9wi0VciY;}!;?5D3cP3Nm&hP|o{rPY3pi zZwCcK2tr2ySCIC>O7W0OXH`zFaa>IY5p%-PIdxhNIFr5E5IrbFCli=}3^H^nr{fK)8%&vZ2#}c@lgV7-&_P3T1j)4}1Q#o;NuiAqNdpx)msMJ{+N8nVY=$vJc|k(dE$~i*&kt zk8Wabb)lq=bE?|4YbAqHOHSu2`@b(tZ|bME^KRovH?!}533+H`Zh9T$`*#2p?_~s1 z$fy)A`aIAH@V8FXtj6Vf)s_l}XRX4)-|33>Lnw<}b*5vJ`$wf=2Okp%{TTq>?(1ZC z8*mihVqP?)4rj#pUyTaW0y4s9Po@rvz;HOh3t@5tKeuw8u>68w56l&8rd7T-rAL0S zzX`}nwgas~e;&~G`N&D;fulviyene0wD;Q_OXFy>?j`UK(@(u%Q*(ekf*IwUE*n^x z6x(&ol{R0$OlO`Oz6y<%qE%%8b3t%q2!u`oLb}N0j)QJ`4-ERfM3gELL${C$e_BSv zD3=}~gWTc?$>=OOZ)KdXkPzrz^HFjHxN>#^n|;|6qh=a|4tg))*8J%><0;q9^sI>2a$ zX!|A{$PZO(T})^A5pFowmEuLha{Dr-J!^HF%sqI= zi{3+7K4?HMeKY1?E3#O#?6;%J4CP?+lsJ&OV{qe+q5n(2T|svN2Wu9r=)9>|X7YI` z$ggm{Q;UEs?rjmA0LuS+eqom@C)05}^06=kC&UGflrmSxyd99X5+w@u_$?=L8O0HE zblO@e&;}~TKc%!er!ER=40~l2C?fC$_-8`zVy0|t41ikF_R^3Rlzeb!4DjM&UWJJO zXCUo}^S~C&rK!o;|YCwFOQbKHPg|wn5Qa&B6WsnaRO5V{-q@P zQi@RxIvsd&MNbe_bs#-5D*;MRq~6`)HvTnxi7m;o8?G^7f(SH5Aky(|D$#*ruhad- z|9}5!`cYSC_qI-zPl2qU(Sr*X@o|0H7Uw==Ar&+%+BPI=!RP?440yA#Uuj)P!)ocB zx#7X3ZazUc)TAh7wn!4S)Z0ghf9tcj*IcBp9#O|1ALOAJG!ojjv1yg^Gxmxq|$h8ZGpK;p1Z^R7^I{qbAe_Kc?VF_-YB zgwYBWyaOrruzxi5fu)){;0|C3l*d4n2D%$=czj+_>GMKr&9wSzTZ>w1JS>-wC&Os- zXKm@Vb^k-3McC(JU;?}a)G>Kr&F#>phP~{7hbf~@WG{UiY88;ywDbm=Hb}4ZDQGG- zmkM)`8*_)g)}qRT4pBBfRpcGLOS{5RgfYA*G4tmO@AoF4&Iz{)Z$rXt$8x_-3q;7u zqLU67!D!|LwU`PPdb0(l3Q-__cr>^?+>%hZT0fBiOuZ^>@EfQ}{~6{G`MrKi)l~@Z zD6P*Q!E^E!=(^D4Xg<2aA{j0`g%0Iq2Is{n;T249{-bV5A#Y|=+@QZ79PQIs%ftkI zxK3iE^c{^0g}* zO0MCql9}<*RREArK0~NahAIr-!SJaBRUyEM^g!`z?xqRH+*K&zsp_F?@n&axC*x| zGe#`ePhO7uU){2&yhn3m(c~cMDu60Y#r7&EDR=p+(F=gweH-C+r!da>CqVKO zI@3bm^52x9qVizU^Fe$t6}#6I$!aZ3fS8QHC;-B1?uNNi_7W9k{gwo`SwB64=exd) z>lmL152NLZuqSPg_aW6=O+ZOzSFRr%P&%>P;zyfgV_mF~C3=X_9L=BtlZ5h9VDzj3 z&(@1!y)xV!9b$i&ty%oT1#}<0bNIPfNzirzZ^PT3cf0$runX3|oo*@f{%EC+iw}HV;(8;c?SDOr_Gups{Y`? z!C7>!TFBd(|2sWX0j9IqJ?;9byV9d6P@vrhU~_la{}$2df{#GJ?fVj8b={dHg0zq| zF6R`P9>9jkqb?u{u7Pze9NE7$u1WmHHLGms$A`|w9*ejX8Zm_+6qxqO^#$*n{XA|U zEU`!{FvH%e1&5`-I_`l3k6dQQ*;XNO1GNHn{Vntqk^L^ujT1qX`qVtuClU9wT>Jl6 zS|MRmd9x6WYZ`;(=}YYjuW8hvQFb8VZvQ~1$x}L>($+S1O`4{}gK0VZo<4QjCU4_z zJDvo5U+?qwxnxdwNuruA9~}}s{{gl^l2Hp%%WwWz3v+=egFd|@|9kj?jhMy8*BnCM z{sQ9n4iHHJffnQeQ(N`V=C_Ln>D5={tMxinb=?`G?TJCGEcyu;xM&&l7|0V9TVuNf zWZldQHEIXU+RbGgDnKVn#>@$v^}Kyyf*K88&+|scN5j7UW=^Rf*BT-?lxXk7-_b}4 z@Bt-=M00xO1sO3Cg9joMU6#Mn^-GZ;GP;6*!#;&?cWr;cCKi@pZeBvB@1o5q@?08V zk68|&xvWRh%33Rzt$6~`7Z406o*uZ*?lYF}XxL<+7as4a1O=&l#Kbu<(P_B7|I-vcW$;eyc5_GYwpTV)& z+Ujh1k=^AGzKcs0ZC85R_F%P{a-8Mm$+m^;Y3a%?skj}4IQ3P;JPIX_q>SHKg=f&8 zg;7TjeM4>gIIInR>n1Wk7skKCf_P%FSyFl)%m}Te%;3L2xhQCJX?8!LuZpdnllupV zI25-Vd!cF_YQVC^Z=nXSAE%I}^KBYB*S}Ara7V6$8}I!>oSxu2Zp9e-gizr2B*A~R zyeS4~e{@vivfhIkE=_SH8*uC?H@FgJU-ca$Lm(CsC@mF%^EqLDz-spzTS+u1{84G_ zaF%K#_`4uN*oz#77oO}jrw2fG(8#fPW(w|~FhpaA_q%S_fW-IZ1&7N2J;(D z%U6e|>kthv^lg^Rt7qSQ%{$WNfazNScfj?vJmSZ|5=1!^`n-$)X1+rqd8OtHA(T)l zHWXu=`t^CZXhIIHkfB3hoZHTxPLKjZP2C zR03L?3N!zI_E&~x4z(^P)XSkEB+z@jzCmS*+h7QWG?=9NKsYDOU6_g-!uX;>Kz|>K zIq6pxn@HrX^ovA0mM_%wScBKg>abtFRaNAy{*gXE2lVT$oP?x{h@?CDx|XE>SIY^k zK;&X@hD|$?_hHjD#5jcK{~EP9^K-dtSJf?2F#Jh+E;}OG9rrSTy+MjqyK!fumRw(J zO{V^%3Z0YT{-pSwa@wlr(Zltfm@i4*BPffdryPUoG)&=ufU!v}*Iyu)*=!Z~RznL2 zQq$*EtQX?#sh^SE1}hHbdxHq)$$ci*aLU{X?!Ob6`%4pn-mS>qiQCquVEAjta%@y2vZ%(u`3xV$!w8N>VeLjLikj*UrS!~VFJRaF9SF-t7E1KPh#zDVX%mCh=)<;s`et_C#X_L9HFgViZgL0ll}ibFK^6xRYSWz zN82?}yc4mjzeb*kaTi2DIK;D(|3d>&U|K=`(n5CU`ADJJVsoU8Fry}Q)_aTSars}Cf#XbqOLO}_sMeSTq zW3)>e$$K+I!6Kam(yWv~f^@t69nOT$NDgsrwDbp4pI9a7m!2bN-YRLIBQ^r#Ofr6{ z&|)3@7;$?Xq|qdq@xkY)f7pV>$$D?vje<)W54&n@^5#xnW@tezC;I zPZdRJFG$EBGYPnxkGmN7kyz)oHew}Ay?e;HG7;=XrcvLW z%U(hQN=}M&naga!m{$n8gTE(sNN5?AeAv}I(W_F<`VCdVz!$kG0%jZYqb}2dK&n_v zY|ekIo?gg|hM0o=;V=qH`k*A{fKD+oA7EcAIHVa!UQLOgU}+qpEyPDf*Vq_SI>*HZ zdseQK?K!S|>ts`M4hf?@awNaU6GNYL*69AEx7oD{F*f_Q_a4_U$k9H^(x3@4}_t^-&+{(K)y1oL{s?hixT zqDvgK9);m=@ka}$8xi7E?LLNoY1ho(jGAAxC2bt^qM%{tD(b@}LAN;$ha=9f-@WX( z+*&QQ3FGnyH$R+Bzk9?nyfek(WyRz0>)mpmr`xwtoKMWCDc)0ODB%H-ZB-9ZM#(O5 z*vgJimeKrpHSJ(g}8{k zsX{d;0sS{o%QUq`;Vk9wV9$nBEU%FP!iSA;1z88&~Lb_f}Q*TGAz2B zF%`L)!z#wAIbw=uTuHEkF?Xyg`T0r3J6CBWpdJ-CA1^@pNZN~?OHBMRCUEq~&2Cv6 z!ZY8O@BkeAThqsCP5e5%L_bPoU;koA&e2*ew|*A?JHs1Kr%u&6Am3Bv%3Fs=pn?c! zTlbtCyPZWUFr+E(T+DSQHc@}O74y$?RwJh@L-nP}>u|@YrC6CWZpS4l4|erII!cS& zTPqFDLLGGR(88!3QI{zBT;LDSyA8B&LpDYVTi@eQJ(Xkb%H{v-sfeVMorT?IKhY1sTL)3V*rc$~62PWjm6TH1fr7 z{}cjb?T@ARuHo9C51!6<);So*sv!uh0HaDrb25$=v)oA>NG=AVOZGZsv1U&M`U^E6 z0y*|f1BuD~{i0-N$i)sprh+&*rlE)5Zvw@Y z4+`yT|9{xw(@+SAOKmz#%wEQvyHTqyw{n;@vd*}7Juc2qG7NPzh7h`pLV)8ozR+1v z*Qe(^%Yag#W)8>|M@+Z^;a3Baz7|xFp`IWn@`w%Do=MZzv(<*{M!u^bp-kJvBsK4# z=lGZcMkk!FM?_*@X9pg>YkaYQD&Va5j*Tc~S|4aps*5i~RST1>F4deHy^Oh3>gy{; zV5s+7Z3C3J&4DaGS12t5=QEtqoLRO?GdVla^45xYZz?@hBt?@y9a{38jPHLc1Tc2y ztH~PtgzXUoE{m8NOl3);kCPUm;7_)@_CX%!wL36(%MOtzWCxg7Nl>%-l)fz3 z8V>8thi)oRgcV?ns5Hu!%L^eyS=FGm?s6=c=`aE^WZ^zHV@tj+4pPqP#%pc;q*c#7 zep-kCYCEQ{OjSkA?$*9c18F2|P0+J8Fqn?_r!95);MM#L3%}(>)(57Bu$5(hAY7%G zecF9J)?1C6#2%r~a<3BW?`aXia=!)7AocayR$g_QdIes|I(f$n{f6wq1yNB}^_tvX za0`51<&TPLW4XV+mSX*t!EOx-0mOX~fZ|z61jR+v))oIMZN8nALYECd>>ZJJ8p#V< z_4M|gqyRH3z%{4M_pTCE=(GEQ`gPaCswRKh`>dJQJ2=>6A;p@C7|>}R+P7sXB<3|7 z(7XFp5M_|wb>1)x`n+jBV~7+T{nA22OZ_I`?y>UOWG|P&EDMsKoBI(P%;3DLi*xke zOS(ds6SY-V%z)r=__80L_GgvQ`3=SbVof}F5eR--mQ2ts;~(3!zVFIT^nbe%K_Ks0 zjr-unP>iKxh%P_=aW@PEz0D*eVB;K@evzC7CwyjVpS&ndLYDeptL&O0prcT#)xKH> zcl95<@DLrLKzlAmij(!can#*m9Z?_F@>lDlCM)UxGS(Te-E#<2ZAjK(+_yjTE(kp1 zq-AZyeqU>(KkG!^^}E2ejjg&2nzeh?@ye$>mushhWr;#8;HWTsn+t9-4Dy@YbtWuToe53L!z_6f*G0QV z<@Waz{5p}o-i&{TQkncarT!gmUvEa=!>SBlZ)l&xrMvCk@8QwV|$uzc+ z$s)s~#U&z3d;W^ET~Q&&*;MDTBl-i#u5O=!9(G8LAdX5`S3R7+h0)o@r{&I6u4_D+ zgE1^UYJQz>8!jl*!r@j8fV3_943nbWO+8 z7)8t3y}gL+2RdQS5P;*C|19728-;Yo^z@_4nyQ-x$W&P0Z6+7Cl&=Letb|6Q0dJ)~ zc3H#OCDmNT?vejU|9(@=@5aq@)!LlQmNR1vvbUak^}0^UC7K{ynTAe~A<~}R|9o4M za`5-rYVgiOWIvl$`e@U)b__$B#5c5Gyw%e90+9$1IAW1_28FDvl5WhjupRwdf)U*A zjtNu5nywJK;t-`lq4kLxdl7^H+JVhKH-21Y-TLO4$^!)%cp@{+@yUtQ)?MG9%Yr?+ zG|3(}hF71Zv$aLuVY9@kBgP891tZsiQnt{ya}pyhf!4IvNNJSfR7Lh{(_Ope$#~h# z3}7q3HT;)v?W#$?yd=S)QaWBf3{H$SQ2q2TaC~yTOf@*sj0$JJ(lrCEvqUf)t5w7pW;LNYOd1Zs~B|LHne0g-&s)n{UmXlfeJ(>bH+>^$1 zHkeu!+bE+TA@m*2yHi0be{EB(nDEaW`9;lCwopQ$Wb ztvs}XREWLShoy6Ey@t+?{x0of)*lvZa#IHG4Hw%;u>_i7vQsoe`ovuV-Uk65c{J+-RWA{YVi8$BOHTgy`K5NF*vxVkji;40r)>6o{E& zy^!=`;4HnA!f@kM265p#O-EVZpP_2~I5?5RZ_M{jlD?f*ub$9IzNh1YLY!%+^C6o< zMfiff1yQYciyayUj3ukFVVoMC?id(V411jE_IFYTA>J!bwp)Ui)FIElmwtatj3S*nn|4;eh#D=8tl%jNC^&+J-=pVuhs3q>RFc%;4~w-PJnI0eHC;XxpY{Oc~l??LviJouRgi*7KIhGV8Y&wh24*a&J zRvkM$h_Y?Mr}S*r7MUPDhGq?gx<<#cYSYaaT`dD<;XqET*LhC^)UoDjYqpu+LTI)) zN^`dHO}fX!B7Qj{3!!wKtGL6Las2~yJ9MqNZ`@nht(iuo7v#D+Fqe?CX@tWVlvZY5 zAu^UTD641Ev4!@ESf|V7##2I|KHes5O!`TlGkF@Pf700v^A?SebYcg%4H9{Yp`~eJ zEiev0;A(IL*KGR8>+4yfYd&%+krcJ^}PUGh*SB>H3 z>X@TM%b8I*jpo=0(33Hj+@lyroW!Ua&pX+5SRE%i9=E?uMK>>AQvl^KH!_Gw?)Q<8 z@fuo%{?Jd`o7$o?(=w6H>axr!AP4tK!;Ar@Pt7?Fs=4H2(deSig|GE!!HbKk%RZNe zE$#O%D7QlE;l+=)P_mmm1JQkh&6oPDC{3gHZd9z*;my;w(#8ry#GJPNZsEgk?|FF6 z`DO7nMG^8IF8vWG3`CUbD{|aKw!gD|aN%8B4HjVQdIw4U_P6=f$9QqWgDre-OqT*C zWtex!c1j5y6NDsogIP#zOT)_Uf^udCX^63B)|sKQw`DL95CB`lZpMrWJoDhN+^^wq zKc&}}StU%uXR?#R3K#_GL$`rs1Dj(2VC@(xhj7B6S=7e^Hx<-m+-)N-0Kgr4vmu|~ zd%K|wh7RJ{og4k8_TFVJ%E3n)Al^IOpv9@uY6Pk+2ffG6i7RGalf9$5D0K{DP4=)B z&|FVB;T%WSPV2xMN>nw(X9v@njfoED<48U8J>Bt53MkT3@k#2ko^wxFzgI--HdNUN(CZo)uyrL<{p>&9w9|df( z#8LX}h3y7yYj&OnOGHJGP>kh$jlH3gKI1^3!0fY@E5j zZXvAY26&pSN|4XNMrhvmu`?4Rqj;tbVi1u0Dk$uSWrx`70 zyl)gK6{MPvxmtha7)zM7%%jrfcwK2>1ZI9)IuZlr9bW>&0|^tRmpLwiMjR`4m(N#YNOBEI}+08(+n zMs(`~P1+7+8a^ZR#6295n>mPuJsdJzd^J_5W*&lw%W0)os6xLT4Yh zdp|6(3M)ARDG|0#`dk1H!rKC~Y1!|uRWzkiqYh)ct73|cq}^)PE+Z^%Twj%9rZfRzqaz&`>*m4tg^rz}@Vd|B_O z)kkhm3D9NP=$driV?3Q;p^MO7MD3?ofqr?O94jkFtL3J|#h??>H-6V7Yrl_EWXjwM zHOM!GB5D48%@4dRM-rgpEdO`8G>amYdbs*{UYm+^8Y$77&DGnQBB2UawtkX{^+S*zulB74RFA+;Rh>vfHCq2H+~x z7}Tn@O~@7Rh>s?!xn|HNGLFCu=Pf52r*{!);iRkeTfOCEh#-n&MX`5mwJ=`7_ae1z zCT~Wl3DC@=cj*+YP-G$KYs6kEGk@A~Rrf>#uFzkKj?#KE>qw#S)U@UAQzL9q)+X&j zJ`t!=in>jRBWt6s=l^kO1v?bsB8M}AvT<9lP#TadEiY+JRahbDBHpd=-;LqOXGX41 zl4c~*m~$xLgJJ}6Kx`+-|4ZP}qopOQW|KKX{(5=Oz-in)XN$*Be;7!CXWTpeq&4>E4Y-ms$KM@-4y%e>?7l0(fcp6e z2s8Wi-zh*5FVjZ$wsEaph$r#c9JisHO&Y$;UbhEF6$~@~0dtKrfLF1R(liV>w)H~t z^J7!2?7lOTV%uS)2**!SiV1JWFLvEHAaPXbS+m$m&`1s{$s-(Qj55zTQat))B7WOf z3LUHCbV6iYi4FNw_Iw8cZG@;UlAT8!bC>f46&BON$xRM9N8PBKVVCsI`$aIe4a)u> z!~ZZ3Sxip_((22OIzB)1+;CqvEsu`46F>oZa`hT+Po-$ejR#hR$9Wtj7uf*L{#Kfd zgdAa7h7Qg~A)2@KLVNCjW^rx&`bBsXFJLRoPEXCPM9DJscP}?hQ5c!N3^}vt#$_xg zafOc7zC>N0Df}Y(SbrON4}Qye1`Pir5KWai!2<*lAgNW4qi;15R4Y?w#9~tdcsc42 z?ZicIkiWu1A68spl3yDe!ta&uY~%|Es3tI?*&rd@mjO(#S@$-6!GrO2OLT49FCN7- zKwiD8y>B{kg35CR<%dc0_}_4k%XAb1Ft?xSy$R7nR}Uikz&LtTgw9`#;_s?B&d`p- z!zCRb+)F4)m*aE5#vpbY z^96dOS~wp3>oR9EE~Bj7jjzif#+m}sAK~AxG(YsenAlIFhdBeH1}d1f8*2J;Icmu2 z?hJ$wX#ps05?FSZ;6l}+SKUH#)8L8!81!^**FsUN@+~k1bwm%6fXD)#cZ;8hG0ob? zD$_4(IMq%h@mB$!;Avd$o@gLjZb~|dzbtgtNkXKAFh0{?3Z3;`SAs8Yq?<$+gfhUJ{TqTNCv_Ew&8gRVCe_JQBZ`=ri{TsSLxk6h18 zM}AZ?VGw=yo4P5XRQunk*)e%E4JwJ7&sYT1ZurJ=Ypj?JzhbhHl^qbZ`86km8KcOKaef5Z*f~uV0~+;twn;#yh}FE=+P&8u#~+ z)d}*cE2VQQ;ub6R%=|0zE}C7qwU*Oxdr`h9Hw-))H~K6HXp7cYbYf+3iD<4Cjbz-P0SZaQR)n3}hIMqcwy{6o3fkBc za9TkZCvYo&c&j<$+ft8=TfNE%W0N9+;a8rXflirY$VzZXUH&A_O=kY`BU>7#xR^HG zZ52Pic0TCQq|(-0;flq62A=yDOT(s=8&^B1(+3EjhbvtuF+q&~UwbA@6Jz4%^3JR^ zLdn|t6e~*+@`!Q`tnjHQ7MMr#wpI=&BVFfqO0m)d+}4TbHsp!9`32rE&<;(TM|*Y5E`R9D}ObF^}gVCF^jmttHxb}ra6b*xmx@#O1#Rg=H!gehA}0A7Z%44_XJ|;7G(Czd1Y@}f zmEEV|f`a^%Ee^;T_5V&deMBh$EWzMn8O+C|hB;nptyi&7iL+^W4sc?iGOnPZH2nuq za|#4dj+SF}qTq}^6imEEWzO|IeJoWoNrmc3`%biq-2O$dE<)Y!O_h+v@Qx33U-Ll7 zissIgf=h8}i>h-djL}%QF&*F{zjL!yeKxks1>$LMj(*w}>=ZS&0>eiEQKf^wlgr_; za@sbAz;%=1rMoYLHN(c^PTxLh{Gq#=DB5Fu192Jd8OT^B)alo~%d&)=^u8jwXQ+(r zp}~O27X@na8WpxrDTLE>tG|VcnpNNX5cm45wTZ=a80^(JUV|$6nX|9Q`KkCQJKDo{v;aUauSS18iMJGtv_gOc3yM0y(Eau6In6Bru5l((IgetmwgaCz_{yGrwWJ z8*9gw@AaH1vfAbS>jp(B_(JTuS$^)adK#J81FRXZ7RT+_CM3Zl0S2xl84Bw7>gfT9 z2GD_&i;?T@7+ls{$zRQ3bVL+oN7; zvl}_L9P)vo6cA%SZZ^(leHYPzd(1$Zd0)IB16kNj;9 zkdaMR6*uc@$=%kJf7Ua570BqJ5eP>*jO)Wl!ASQk5P#K?pV&|G__)MU*6kVaFtcu@ ztp2ElWXf-NKcKS>N15kQHO3DLaK|G=(Y3S+`*xQ{hvisdx%)@O*_=dxg(7~*d zyW1}jK34d7z3M3}CE9YtqgEV{wxUs)Z6coG^cRnysT7qfBY4rVW75butcKtKcb?P> z%y(o~I$<616Z!5nYlNr{J9vF~Q5rRC!(a8qr|ElUw0o zTL+AaLKYB;n@$f|rR@(~?|h|dpQ_GC*=o&%HkknulK8jGhBcll(A?$b2>|Fc=`E{o zyx}zLXu9$>KpMrgSSmvxv!wQEfcg-L9mH_Gn8cC(!?gL=o8Vgp(G1mG%7jriAr<&t zZm-+);o~M3K)cd9-E2#Q_Ns>ayu-khJu6~cWk=_DPf&R;a+Wqooul`{BmV}Sso{M0^rlKn|KJH^L#N=CDphaY)Q-i?kLoT<^~eK1b<5 zlkqx49Fv%0K>qI$xTH{C*Q2TX`WY$wx}P_=5_?(d0FVaXHDzUVDR@53nqin(^v0e& zG}ttmw5pc;YF%Er57e$3WFsp8CtJxRzvtt3M(%GZVZ#8Z>eN!hX+{yZ98j9fr~^~4 zM4UI(Ei-87GD(WM73pkge3n`NS*k-nsfD}uq`aA-zSd6q(lvOF4SotrYr=wjYKvI)$YDqFWuZO*Zu0`UB?#V^I4%=bMXb^+@AoFYP~Obuar3x1j* z^&2I7CwQfrMiR>6&xhhFw zCk1&4ynFX*V4FgVl+OeT3JWem&YG*({7UXwaT;}g@Z|@%xxLnfY#JB2W$O*Z|1N=Y z`XH5x$Mv*l#a-(UvwS)w!tgOu+2o;$_e`QXPyaM-d1S+Mpv(cXy-Uq&om@eSo%VA7 zVWz^7!;<1=RqUu1IlfML$2GMsX*~x)sy9|&4Q0|HyWEXj|rgn4H)AE zUaVEZ%2^iay*-sFeQ%4ovul@PK@8Qq`)v1ixlhvr;0YqEc!G@o4cW5H0DkAndyC!k zwzcLlEypb+iZ7786!egzY9*n07#RxM&F-&JCym#ATLJ?MX1lFsDJtxv9ky;QwK<$z zejTtU=mli|0pU~J*Fon{4B$X5e!Oij>mA2%tA4N*+_xg~z-XlOf-%%!h}D`L%-!S`l;| zf5FQnx_YW!E2lnAfz9;c|8rgizI--fl?eJ6#zM_^gJ6G$^qchIOE|W~)W*M=tG>23 zh<`YM@C)6bpy2QXGG$cv#N-t1Zi>)xZ?iTgD@L+z%_UlkU9z=xSwd-7)g@W}Z78Sz zGFy>!BI~Y$sUkYg>~7@EePC|gX}NH&t*Ya5%&vQH!IfK5obaQ6Y-$X z=^GtO1dGI#+KaVWP?QaFLmg&;&&$=C_)GKi*tFIXN)mKBF%k=A$N+A;N&4b4 z^H$zGkP6rU?fYseJbnz)vu<@HDRKk0WH3!@!nf%)Cjt9FFilMEC8a9nMhNZQu+jwX zdmKd?v(TfBm4T+?#HR)gSM=UeK}Awbv&Y^vln4%fP*aw{y`d>38oD$d92Zg@g$RO> zxfEmnKAXVRID?IgL%;K;RRBsJ{7lBa3VfNpYcUN{@Kg_~bk&(d0kl#J#;=udaTr^T z$Xdg=TiCs-1q4DKl^i;4Nh_-32HrfkNG8mIpM^|2*)z$VGa*{>+>Vfxs{+CqdA10O=)Cy&G6^mNV zy-U5@f8>zBlir(#*fAcd_~lhxGCpSt<`Ga#I8;|6W%7w4b%~9%aURTDcb)dxJ@=+3ZmVA^H~VBAA0RK{Ay> zwY`uSp|zd^$F;`wkp7Q*9C4augF$W6vC!4m`oa~BK}fIm^14clPg)PBJic00ntCn^ihzWF${CZTId#4U+I@b?SF`6? z3(0kMd7fimA9$8XZ4F7SQ=pJgk9;xfvPLRmho~1ExH-XKh;@H7L$?ANAKJT%^Ni^`MGez(>h^(6vwU_|u$=r$S~k4yEV|D4!=$e>fa`!G zzRhBQSx6YFkNR{QE(L%aW9gm_sBM`Wb@Y9QdTfb&NYi&S^@DVPPmqj^Jl`!v<5zYN zy!Hoi`}sO&fs4uPI^AEKAnP#LGiX#$%JH-hRqhxnj$;el zVU^lykrciH1&5vRW=GFG#oI24WNa>`id$-ViM4834a5a5rS6m>v5*H%d0A zt&+%Z4BICIEKTNGD%xKrg=PBDlNveAO>wT72Sja3@(ONbCj41i?$Uqgh$;}L_7(Oj zl@DKz*5sk{j+0acpPSx|SLyNYSG_02gi5*aQ?rna}1(z6x^ zivFb9GPB{4+95cwL@Q$X!TDl)i3Q%@9%U`@*!ICwjgDuOYgH8Knbdp)%x#p(rjq4- zsM9)c%-na3@=BzW#I}w-IfLPR{a(I)ivF#^{aVk5>eh?r>CfujU)8RdFQ2V9&(KfR zvVW^o0P-_GfA(gdS&z{;&vfJBmnCrVg5D&5UWv9ByGbPkQ!?Ipo(TTm41Dzssbs~9 zGPc5{@w0rG2+%D^{1Gmd9?r-!`}2H6qWFWOo{)9tJOQ~Dtm0<-j&_LZbp9UlhM8<< zMXfhXo=m4h6SF3R#J6tYEz>e0Z4b+2G^5 z=~)XK)~Uu){#y&}h*X~wvk1tA8o)fZ!V|!(_yI}b-;zF$m!+i-eYR{tB34&zqvhN7 zM-h^M5xy5#>-B|##(EL_!_5%P+Wx&C7p?A@MAgoxhFbNo31d#-GiDHEHV`I=Cnl<; zyJF*=G`2@SbKV$v=0VL0AE!3oiVLEP;L^ipVS%_E1Y`H|@&r%H{>%RksCe;H;k-en z8MAsN$}zcKc<7#?I$P$$RcuYw=2T#XHKuMR_|c$Qg7hHBzFRDT@v-WOj@(nmlRH>2Q%qd$hdZf?-!5rhUz ziueg=B4PNGAfe3m_6xAhk7^V3+#p{HyRD?-WeSzKy=7dDl7)jX2WR+ZVj{O-=eVDl z!!v;{(~?b|@H|QJEi5E_gZ-f)zr4DOJx{ii$iMp_{|;ZA^7=$rG`(woCr?I=Jv1*L z-imvGBL<+)VPM?FtxeqngDomZ)B&&=Rz zE@ca9cN+Ajr&ji`ok`1%*0l8nl~1H6-D(} zc8pK1&&n?!a%*oy(Vtksb{i1&b4Y=Si$Jh&`e+f1)A8ArX&D$X7?!iE=vN@w`f1m> zF5~qe?4r0CNa0E{ER4rHjQ+q_1-sJZ!4^a(bK!U30K{j?}s))mn|%zY)L`pC+q8-+KAc%T9w>Ga>`=WZ(;aB)JI&e7L3Q6?ZCm>%Xw<; zBGA#!4|jOl6oqbQ&3+OTzhtKsF6oSD}%CTlAICe9i>) zg7-9m8$<_C19Viy(oOz{p2-TG8LDg{GYwV6)1=52>(PjTBRLe_AM_woN=pit;Iy*W zeRk(m0*y5UAryts;}Ob1o1TO6x#-I-`irsl^a*Xxq;-Uz&G&QEw-#czPuM;{vRsOKfU|7O*tbmBhaCFw_^OJUvG{uxYFayj85Ze?2 zA9na!L|)3K%i3a*?odD~4adE+B)#W!dV{Nd7!_e~J@yrls?A4ZKvs;_yJy#pa{rC$K6flp)3bRS={aP9UeLa`NF}xI%bQoOHxOo zKu)=Z6}mC(MjJ(H`?;0eWCy#Wh9npWmX^H8=~>XvZHxC;@hXx(rT1xa-#Vd&9KbiI zigJ^7xG7pRCB7o6)~pDbzUG=9Rs~aBH8K+$<0G~jNBD?;R!BzWRdGp)nwa}Ghd|)+ zIk81-l#I(J$}Q&MdWx@7BJ#-ob>Ess8>1j6st}JW>Z98ZN&jDi1mye3ydZ#{6nsDv z?5UW`23(jyk0v#i+&orxP*ivGC8)O%3H3wo!oE%Mop4DSCI)FZi$-k44ez-42G_ZT zBpK&WCn5oZo`FTq#ZE%R-eXBx)SEQK`?ttz6@xCmARmkG7^ImY1G}AxPlokV7_hL# zFb6wfmOYAuPT5I3B<8A0B&x-G$kt6G8MQM%CR13lKCNaDd^_a|Pl)0dVXUZttQU_W z8iU@2Ma2%-+)99&;&sgEYAwmdD!QVMv2opj(_;kYkxtiGbh&zIbD)}Kae)F>sr&hb zyv8hrXz82=>_6Bt46yf$yLI{|WsjB*9c9izkKl{_ER-KdaVlA zd=P(EMJuk_JO64K4Rl~d_f}KNxN7R*jr*@MG2ggXMnmH} zi~2X^NxQRcj2kbb`C$g)crG`|t&jugs`5ONGm*B3`0;#Qz}9w4FZPCR{kD7xsQ8Q+ zoE_1)`GnpDN@I7zfU43I!DV(Yxe;?8nN@^w>eE)_=G}`qo6p%eznQd%ZBLqQrFHZL z={(OyMO)neLUB-sX%x??>&j04TH3py74OO^(h`grxmcZ~oXE&`*iz0LmE$>WQ1DK)gTfuM@v@1Ha#E!iwn-Ut#h zfy<@)^$&kx5}Vhm@^6Oq@uu;15+blSsD^9qq>2bDxeCkYwOF%gxfZT{Hi)diH^u{? z10%8|BFgc-{$Dj-dN*(rDme>7u#Kn)DQm5J8TIm(TB`*S1lP_t$HtVoBjey{zYufx zx;U=l0JjJCTHb1TsFJ*6F{2i4yGsRz%|{?0&BrYd+aSwJoKScep==)v0Vu4Tf*$i+ z#<9S*zZ2HSG;iqFO;Bwo6pf_ETq8-=TOoW1xAdxFEZo%tEKr?wjNvfh7F8B2>n?wQ zSuc|psoc;sC^cOXnmsI6kK5N(26p@lD=H4x&jhpdnbVIw0D714x1Foo#Bu}sBbv;$ zar!+FX3GjS7aIYoE||cFD^s1p*JP921B&7f6ygC2s)18v7-mv4o2Q_UP`*tlvrhav z6mY0gd>=$tz8zY>6KsNZj;ozHI=2T0M+HP_nCK&E@lhUY(>7ZsVMH+CDcc!vP%CZspo4+p^v|IB4%~~Kns>T^mjq1 zQp?S;meIflGvfh1Tpl8pQC0gH%xRe7K7Ni^PI$*FprzTc1`z*SLNoF|FZPG8RPGeB z=@?tr*UMFII|~>n5GwA#?lSKo@kwg^f(G?sN(NSlz80RmuYckdJH!Yi!-*^I$(kgR zk$*J;;uovBP)n}BedmF00z2+H#g7tc5QMo3--BH73?Ltv3P~cmIQoew&Sd`$}2d8 zn%?GiC^?73$NRnKO=5L>X&~gFB!tV_pyjlVqurT$Fn!7jF{?&z{~S!H#%s^C(Yjrk zPEPG)d~Q4b=QUPYoxEWW=6JO+))OZ0is!}9*K^DO34HgbR|E%mA$kab$9eoGj?X9a zoXMhZ!G}G63=}E6;F8k z!J%Sbi2iR>orvej6TNqSjp$mD&vifxzA(Sq#7v+V2XCC_VJ(gGdc*D^Fl`Kn%3AiV z%x-~{-D+!qBtRj4s*#qysd3}IX?0&_NftbWGnw?)fMT#ZaN%uc60O;8kpb_e&SO+K zNs-X_FFCf(eRRDM%Vnk|MyV9Z2E9cfoT`KzcUY&!pJPTi6{~6z({wx=10$?pz?z3@ zT}wrczAZ%85Jm+){7z=5QgI=qAUR3l-y4G#7MOuqfp9>2pfjbfVkrj-FL{T#x5RJ6 zE>SlCABiS*iuEU34hgyi!*QxL#b+MSSD5raMsv1T1w}0#1-t|V^CB8eA@)`X&+$+& z>o&VHwhx9HA?#kw1z8&C;b4ZS!`m`UszY3R5=Zu9uk7P)cXU4TsP7U`XIQ}&90au{ z$E-|TNmaPR_w@fay`YXDv@`NKaVon9?gplV_42D`XZ4=={#fx)jeRGV| zHe7TjoToh1Ejg&EpVNk1vGG`>aWzeo8IIKNfFhC4?DJQ^8+j6ytIT^aC+F}4+&a#! z`nkbj4|NZ3xkMfy=>Z(=(na0tX%<(E5u|`VJezYM6F8Y?h>14+l59xJLfSNy+y*`R zf(T&$9KlJ5vIkBB&>Cy+3?}gV6xLulIgQWlRsx8$vem9qHUk~^w%>bZrWoxb5Q>xA zu%*N1qKP7P21!XjWSuuyjDtI9WQj%5e@gEPFHzVGTo*a=<&H$EmOqhW|gJ22$X(e5B8; zJT4)hS-o0SsqvLB8?*mLMY;(>4f!sawVLp&GWTe9wr@R8whP^IX4hz(PT8rpm8xH&AZtV z`RehyE8NO_5ZWga=@KOfS?ZvX~Vd3H?qcMYKT3(VA(xlnX4}Z zZctJ!OK0UCYIFu>=syCB@P&Di0?44#670b|Do%i?5S}0mUn~P}<{HzCvshmoD*EqC zon`kd?CWau`?Z=(vVe9(`Cp*KJ#k{`Perp=gHF2lacA*HaC|vh=17w&&okH;E!QQh zyFhvxPbFGE+~}O+`UW4vG(y#4%RYY1ba&~Xa;;YiJ+yy5uU&=zVszRjba)`RwT$8V zv`6)52kN=MR*Yf#v^(`^r|P*sR*&F*eVh69@8{Mx$*zFx79s}}JHdKV7lTGF%l-Z1 zJ=k&t{&Ih-Y$yIIi8eI8PpW-+hppbUBx+t@AgaIKh-EJmB*XbU>O=hUL!`4jEK6s# zZ{;X{CHc0`yr4JbyiHka+`{|>?Hj%Mgq_wN$F6r116WvCAmtKUs;^Nw`k z0J3WNpb#zg0* z_56q{Fj;`?G@l#VGKU3CsQyE%poCMczr_CX+D=o@69bvq{^ZkOAD7KC!~SX1<#Qfk zAz{qP{x>RyTdI;4D1TfVJWZyOJ)6@s=~A{J7H;c{hV{bZJK^a+xZWOIYwpz4$%F$T zxI*0>1aY~K;k_eO(@Ck&ERR*yC)}!fjw$&OZ-Z@~2W`=ob%ksUeIHq`cu_mY$AGJ`Kuu%l-Nc=eVSy&8P-NBITK4*M zoZ!d8PK2=g=Ch znbn>e8~6vl={-8%luC&FqD*vn_N!gYgeL>CtgB3ACt_88t3z& za>|FiQpC-)RT}v6fm@&xzwO8=lX}I34v3JSrgwr@;0V-Fge;d0^s&hGj`v+<0fBgZ zCiL)e0xv_I>8ese+YYGVxhSQ~&q9S7Z)#F7CLhEVSS+|p$ps33*9nPNdAM5XA#_@d z3=m0)x!j1fW&Y`bB;$Slj(2rCtp0VC`L^+B!_Q&dA~&-*rV$6Bi75)yhbn{YT{o=8C|X*jATtJQme-K@f2% zjB<2_j5hcgPs9;FEmTI|D$XHm1N#2oaiP`6=b>xcTd(3j2AEd?JJ!v7c1dZ|(0XR+ z4!jvY7kAIbwT&iSHb{V=g9YmV`=#Y##jQ1Zg(Z@|XN01b~ZGRpR|p<< zFM?_@-vJTb_i;K#)WlX_)i*&|`Zp5BS56l+l(o2@H~=X9q7#{g)2~JL%~#D_y+Kd@ z@9$+RqBiQTble7~lal$!3+res`5xu>y^lmL;1g=WD9cK26ukc^jZxxkYz_t9cX0Hm zXsYXVIQc}6GbUzI;^MU<-2Vk5`w@OK<82Mh34jXpe*fr?Tg5vio)C-7VNRxEOv z2plKRj?^y?78>Y*REq#?<}_3#jX!45C_ae|LqekXsS6I1L%AK$6qtA7bGF<>Ls3F%MB z9()<%0Y69ejjHsUhDSm`m5v)(Qh9=QN${S-UQ&oEn&8E8JVb4qdLAq-=zXBrgZ3%B z7S}~30lc6i>`IArOY_lSc;lkPzZ@UGzX?*TPn>33fZG9N8CA=Zy7r=JrwxOCr)D_r zdqK@%Eo#Gmgej}^j6~=b+RD`?pg9TAsr@#>Qo^i3IZ48+E72q*+&gIVYYD?3=+^=a ziR8O8n`A;Hlbn??-PYFS$T>YCqWFxbsWt@qO9^+M+_mjo27c-GA2AMe;>Hy*)b9xi z?Q?s*Pu<0-+^DadBYdO|k`r5i90rVCl*hhw$c{U^8l&f1RXM zR4Ga7N^!YVZu8B{y@OAceA(4gTy^)44Zu@uhZ^AvaA%ZX-Bw8gYEJ#(?>bBOPvxHuUf;!0ZvCot& zZv1t5G~$jO`zpm_Lrk&kxeP<3_$v}sF~U9BkG%wOAt07ZDGbcjow7$taf9D#MFELnHKCL{Z8hj-ar z?n`1fqj;0@&3UKTc5)48Je?ja2lg>RI?9M?u`Cr_Q02vwPod|QKo%fgjX-%@QsIA+ zp*7XG0gLBE75*VCv7dA;r}B8xKOHTb+QL+IeCh!8vQ=l}(kzJlTGc3w>mC8IOzE0l ze_)Xh8m!9H);MK>2!=Y^(k74SV8XzzL&e@7--dfE&HMdsVx z7_V7Pr!yTe%Yv2Q6}W4{FH_eD1=X5c@|8`Iqcf<6y1TRk4dIe$VY#^cDPoEqs(vX( zgfNsIqY)l*Z+YyHZP1177PqK(hLjI*P{puu#P_nHjSz**C2RxN<_na^D{V#1C#rI# z>Rs?J1>A`WZ0`LH(hoY!ScW1RNp8?9nMQN+{~IDLRWh)oL%E_8rvMJ;G#TqeA z>=uQI6v93ByPTw5=x_GauSvJ~CX!?QSq|Z`iy4qM5U@<;m{a;*sOR0h^mCt}Qy|-S zuic||=TTp057o4U`A28K^2Wr0$Y&C+!fvW+(SZ?6&%6y36r_U4reUGIqlW|E?F)qc x+v9tl@1%ZHy1z^s)VY6XB>b>eOg-@aU|va}PHxmh|Ji9{ZdL#Q01QI#008W(|9=1g 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 8cb70412..c6c9cced 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 411cb6c1..27ceae58 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 b513b8a11b088a7d4d9acd1faa0a57377574f1ee 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 27ceae58..683fe7d9 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 5d51754936b3b634cdca30c4d9fdaa526122f5a1 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 f2979838..7e7560d7 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 ac8e27a3..762e456a 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 035a59bd..8deff076 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 9bdf9bd7..08aaec77 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 8b5d29ed..f84b9cf5 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 c83188cf..7ee28047 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 3e37d131edeca64295a0d033fe11001250af0313 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 08aaec77..2602cda2 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 963d6c85bc4872ad089474ed3d70b4cd43927b0d 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 1ae42e9c..b717ec18 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 061b1e406b599a44ba92cf8a03486b92e0875dc3 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 b717ec18..bf7c1b61 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 b3d29fb7138a74d1020d8394adf5b44ff01801cd 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 bf7c1b61..72f2261d 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 e7dc346a10f7129eafdebde11304a270f8ef2f49 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 72f2261d..170943ac 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 1e19ba85706b23d8d3b9b02f647df1a51e30c311 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 170943ac..893e729a 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 c7725525a85ae058d0191c1e0ec4994c7a6767f4 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 893e729a..5570b006 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 2e9b18669a1d33f393cbb92b40feed313d5cd32e 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 5570b006..2a7efbeb 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 eebdda083338a7216883c6dd03473121b69b6a17 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 1b1d4d0a..2d9ed5c8 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 8cb70412..3f6fcecb 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 28a566c9..ccc0f64d 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 a4641e10108552dc28625c38833a3f22373d515b 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 e4c9e833..39c140c5 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 2856cada..366ef460 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 5e682d612f02a180c2588358c7fbe6504750b9c0 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 f8517618..6f5e265b 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 90148f79eb83cc43faf88036cebde925cbe2b754 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 0267770e..0568151a 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 dbb7267f228dd4f8825c96aa4b9c873c5e340842 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 0568151a..63ef8098 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 de72403fb9f2be579af6d7810d946492f5a78879 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 2a5993c1..29a91686 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 64580c82..a38e91a7 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 63425d1a..50d19c19 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 57a069a1..90ac3a7c 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 b6661bba..e3b54cbe 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 87ab6359..e3a62768 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 ae11065c..df90ecb1 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 69b4cb2e..63bee97d 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 565b8f87fb7c7f0f0e9bd23c885927c47762bd6a 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 555a2614..30d01da1 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 ed36f5ac1618345262a101a5340fac2ffa529a5c 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 30d01da1..a5b51810 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 2ccdd3e4b787042dacb3bfe3b218cbc008cd74d7 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 e3a62768..cc17ccd0 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 d3a38a437544af807d33b6f180f684e42eb021e9 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 e3b54cbe..ca4967ce 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 cff7d2795df7956c9c5b34534ea9dfd5d66ca9a5 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 6f542fae..c862ec26 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 9975497a688e3ab79db36bea30afcd21fa39b5be 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 a5b51810..555a2614 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 37e79ebfbdb9053dc11464790e50230e827d4041 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 fa7f6ce1..1e0c7e46 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 50d19c19..320105ef 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 90ac3a7c..49b22184 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 cc17ccd0..856aa045 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 df90ecb1..1ad519c2 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 73369679f59a6a8b5227d4da4169929a5362e3ce 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 d7b7be91..871c1e60 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 f66aa07b..f28f3c8a 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 92a60b32de4cd236915745cf2d6fc96e53723572 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 be639034..75956d65 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 23f41564..32e252fb 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 720d561f..52f7f60d 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 379d5cd3..6073f93e 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 6c4decfef312f88710bfeb0451fd10489c3e80b9 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 0ca871f0..8173c065 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 a8e080526168a1ae0429b48ad3c27f5c105c211e 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 6f5e265b..2154a070 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 622509682a08482060f96409e2dc6c8380224c6b 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 89149a3f..4bd0994c 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 88b5a056c885d1da94ae27228342f2445afd3725 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 8173c065..f1ecb2ff 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 87ede1e934186e6fd25f9a45afad90ef1ebc48da 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 59abea3a..62c0523d 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 89f12599c6c65e905f2129de597f91e5e353e236 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 a38e91a7..9a940cbd 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 379d5cd3..021519e3 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 d210b9c8..fd7551c8 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 23f99bd28d0f295b402edf9df39aaf17513e9a5e 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 02c7e835..742681f8 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 742681f8..e5cff06b 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 31ccae60c9281c6ca9efb63440f14b0ec9056210 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 92a60b32de4cd236915745cf2d6fc96e53723572. --- 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 7d3aec1a..1e0c7e46 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 aff15ce4..14dc12d0 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 6073f93e..379d5cd3 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 dead0475ce3798300b14da09a689f5e4e5a8efe0 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 75956d65..9f65fdf8 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 4bd0994c..fd3bf436 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 b560a90890d476ced65737b22733f4cc2dfe66df 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 fd7551c8..b398c0ef 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 7d1e630007462c1cdc99f93e52e09f0d50910ebf 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 fc3ae9d9..2e8a1732 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 e63d7537e05a9ec06e0c8c8a41b9b5f9c25781e4 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 c44e70c0..70e521b1 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 1825d2d9..d6234d4b 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 6ba69e90025f4d601d015491f1772c53ccb52b0a 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 a8635034..53784415 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 0b299012f7b2fcef45f73f2e0bb5190837853b95 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 2e8a1732..8a6d7597 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 4ce528bea7f6027025d5f897e6302ae4be9886b9 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 f9cccd69..23cf1892 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 c61fcc8db6d54585d6efbfca9514cae532801655 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 93804b0c..ea9eac9d 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 23cf1892..dd27858f 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 4379b958..f71ff209 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 5cd8691a719fe4e5a3f00c9cf14d3776a4938cae 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 e5cff06b..0b280b7a 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 f53594cf816b7c1c38f63e03432d906049530d4d 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 2241e826..8c0e6079 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 3dbf6f7ad0f0bf3dbb921ecb2a2eb66b8331074e 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 9f65fdf8..764fbcbe 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 105958d29fcd0865eaee6893765cb80de690a204 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 e7e1ae69..49b274d3 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 2241e826..4705a521 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 9509004b..864f4cac 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 ea6ff29c43e0eed379a95b80733b21ff3418f805 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 dd86966e..78d14d5b 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