mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	Add K_GetRollingRouletteItem, refactor item drawers
Roulette now cycles through all single items (that have odds). Added missing shields and drop target.
This commit is contained in:
		
							parent
							
								
									794385dd63
								
							
						
					
					
						commit
						375fb72de1
					
				
					 4 changed files with 86 additions and 211 deletions
				
			
		
							
								
								
									
										187
									
								
								src/k_hud.c
									
										
									
									
									
								
							
							
						
						
									
										187
									
								
								src/k_hud.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -695,6 +695,40 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static patch_t **K_GetItemPatchTable(INT32 item)
 | 
			
		||||
{
 | 
			
		||||
	patch_t **kp[1 + NUMKARTITEMS] = {
 | 
			
		||||
		kp_sadface,
 | 
			
		||||
		NULL,
 | 
			
		||||
		kp_sneaker,
 | 
			
		||||
		kp_rocketsneaker,
 | 
			
		||||
		kp_invincibility,
 | 
			
		||||
		kp_banana,
 | 
			
		||||
		kp_eggman,
 | 
			
		||||
		kp_orbinaut,
 | 
			
		||||
		kp_jawz,
 | 
			
		||||
		kp_mine,
 | 
			
		||||
		kp_landmine,
 | 
			
		||||
		kp_ballhog,
 | 
			
		||||
		kp_selfpropelledbomb,
 | 
			
		||||
		kp_grow,
 | 
			
		||||
		kp_shrink,
 | 
			
		||||
		kp_lightningshield,
 | 
			
		||||
		kp_bubbleshield,
 | 
			
		||||
		kp_flameshield,
 | 
			
		||||
		kp_hyudoro,
 | 
			
		||||
		kp_pogospring,
 | 
			
		||||
		kp_superring,
 | 
			
		||||
		kp_kitchensink,
 | 
			
		||||
		kp_droptarget,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	if (item >= KITEM_SAD && item < NUMKARTITEMS)
 | 
			
		||||
		return kp[item - KITEM_SAD];
 | 
			
		||||
	else
 | 
			
		||||
		return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
INT32 ITEM_X, ITEM_Y;	// Item Window
 | 
			
		||||
| 
						 | 
				
			
			@ -1096,90 +1130,23 @@ static void K_drawKartItem(void)
 | 
			
		|||
 | 
			
		||||
	if (stplyr->itemroulette)
 | 
			
		||||
	{
 | 
			
		||||
		const INT32 item = K_GetRollingRouletteItem(stplyr);
 | 
			
		||||
 | 
			
		||||
		if (stplyr->skincolor)
 | 
			
		||||
			localcolor = stplyr->skincolor;
 | 
			
		||||
 | 
			
		||||
		switch((stplyr->itemroulette % (16*3)) / 3)
 | 
			
		||||
		switch (item)
 | 
			
		||||
		{
 | 
			
		||||
			// Each case is handled in threes, to give three frames of in-game time to see the item on the roulette
 | 
			
		||||
			case 0: // Sneaker
 | 
			
		||||
				localpatch = kp_sneaker[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_RASPBERRY;
 | 
			
		||||
				break;
 | 
			
		||||
			case 1: // Banana
 | 
			
		||||
				localpatch = kp_banana[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_YELLOW;
 | 
			
		||||
				break;
 | 
			
		||||
			case 2: // Orbinaut
 | 
			
		||||
				localpatch = kp_orbinaut[3+offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_STEEL;
 | 
			
		||||
				break;
 | 
			
		||||
			case 3: // Mine
 | 
			
		||||
				localpatch = kp_mine[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_JET;
 | 
			
		||||
				break;
 | 
			
		||||
			case 4: // Grow
 | 
			
		||||
				localpatch = kp_grow[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_TEAL;
 | 
			
		||||
				break;
 | 
			
		||||
			case 5: // Hyudoro
 | 
			
		||||
				localpatch = kp_hyudoro[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_STEEL;
 | 
			
		||||
				break;
 | 
			
		||||
			case 6: // Rocket Sneaker
 | 
			
		||||
				localpatch = kp_rocketsneaker[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_TANGERINE;
 | 
			
		||||
				break;
 | 
			
		||||
			case 7: // Jawz
 | 
			
		||||
				localpatch = kp_jawz[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_JAWZ;
 | 
			
		||||
				break;
 | 
			
		||||
			case 8: // Self-Propelled Bomb
 | 
			
		||||
				localpatch = kp_selfpropelledbomb[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_JET;
 | 
			
		||||
				break;
 | 
			
		||||
			case 9: // Shrink
 | 
			
		||||
				localpatch = kp_shrink[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_ORANGE;
 | 
			
		||||
				break;
 | 
			
		||||
			case 10: // Invincibility
 | 
			
		||||
			case KITEM_INVINCIBILITY:
 | 
			
		||||
				localpatch = localinv;
 | 
			
		||||
				//localcolor = SKINCOLOR_GREY;
 | 
			
		||||
				break;
 | 
			
		||||
			case 11: // Eggman Monitor
 | 
			
		||||
				localpatch = kp_eggman[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_ROSE;
 | 
			
		||||
 | 
			
		||||
			case KITEM_ORBINAUT:
 | 
			
		||||
				localpatch = kp_orbinaut[3 + offset];
 | 
			
		||||
				break;
 | 
			
		||||
			case 12: // Ballhog
 | 
			
		||||
				localpatch = kp_ballhog[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_LILAC;
 | 
			
		||||
				break;
 | 
			
		||||
			case 13: // Lightning Shield
 | 
			
		||||
				localpatch = kp_lightningshield[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_CYAN;
 | 
			
		||||
				break;
 | 
			
		||||
			case 14: // Super Ring
 | 
			
		||||
				localpatch = kp_superring[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_GOLD;
 | 
			
		||||
				break;
 | 
			
		||||
			case 15: // Land Mine
 | 
			
		||||
				localpatch = kp_landmine[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_JET;
 | 
			
		||||
				break;
 | 
			
		||||
			case 16: // Drop Target
 | 
			
		||||
				localpatch = kp_droptarget[offset];
 | 
			
		||||
				//localcolor = SKINCOLOR_LIME;
 | 
			
		||||
				break;
 | 
			
		||||
			/*case 17: // Pogo Spring
 | 
			
		||||
				localpatch = kp_pogospring[offset];
 | 
			
		||||
				localcolor = SKINCOLOR_TANGERINE;
 | 
			
		||||
				break;
 | 
			
		||||
			case 18: // Kitchen Sink
 | 
			
		||||
				localpatch = kp_kitchensink[offset];
 | 
			
		||||
				localcolor = SKINCOLOR_STEEL;
 | 
			
		||||
				break;*/
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
				break;
 | 
			
		||||
				localpatch = K_GetItemPatchTable(item)[offset];
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
| 
						 | 
				
			
			@ -1240,79 +1207,27 @@ static void K_drawKartItem(void)
 | 
			
		|||
 | 
			
		||||
			switch(stplyr->itemtype)
 | 
			
		||||
			{
 | 
			
		||||
				case KITEM_SNEAKER:
 | 
			
		||||
					localpatch = kp_sneaker[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_ROCKETSNEAKER:
 | 
			
		||||
					localpatch = kp_rocketsneaker[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_INVINCIBILITY:
 | 
			
		||||
					localpatch = localinv;
 | 
			
		||||
					localbg = kp_itembg[offset+1];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_BANANA:
 | 
			
		||||
					localpatch = kp_banana[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_EGGMAN:
 | 
			
		||||
					localpatch = kp_eggman[offset];
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
				case KITEM_ORBINAUT:
 | 
			
		||||
					localpatch = kp_orbinaut[(offset ? 4 : min(stplyr->itemamount-1, 3))];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_JAWZ:
 | 
			
		||||
					localpatch = kp_jawz[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_MINE:
 | 
			
		||||
					localpatch = kp_mine[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_LANDMINE:
 | 
			
		||||
					localpatch = kp_landmine[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_DROPTARGET:
 | 
			
		||||
					localpatch = kp_droptarget[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_BALLHOG:
 | 
			
		||||
					localpatch = kp_ballhog[offset];
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
				case KITEM_SPB:
 | 
			
		||||
					localpatch = kp_selfpropelledbomb[offset];
 | 
			
		||||
					localbg = kp_itembg[offset+1];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_GROW:
 | 
			
		||||
					localpatch = kp_grow[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_SHRINK:
 | 
			
		||||
					localpatch = kp_shrink[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_LIGHTNINGSHIELD:
 | 
			
		||||
					localpatch = kp_lightningshield[offset];
 | 
			
		||||
					localbg = kp_itembg[offset+1];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_BUBBLESHIELD:
 | 
			
		||||
					localpatch = kp_bubbleshield[offset];
 | 
			
		||||
					localbg = kp_itembg[offset+1];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_FLAMESHIELD:
 | 
			
		||||
					localpatch = kp_flameshield[offset];
 | 
			
		||||
					localbg = kp_itembg[offset+1];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_HYUDORO:
 | 
			
		||||
					localpatch = kp_hyudoro[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_POGOSPRING:
 | 
			
		||||
					localpatch = kp_pogospring[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_SUPERRING:
 | 
			
		||||
					localpatch = kp_superring[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_KITCHENSINK:
 | 
			
		||||
					localpatch = kp_kitchensink[offset];
 | 
			
		||||
					break;
 | 
			
		||||
				case KITEM_SAD:
 | 
			
		||||
					localpatch = kp_sadface[offset];
 | 
			
		||||
					break;
 | 
			
		||||
					/*FALLTHRU*/
 | 
			
		||||
 | 
			
		||||
				default:
 | 
			
		||||
					localpatch = kp_nodraw; // diagnose underflows
 | 
			
		||||
					localpatch = K_GetItemPatchTable(stplyr->itemtype)[offset];
 | 
			
		||||
 | 
			
		||||
					if (localpatch == NULL)
 | 
			
		||||
						localpatch = kp_nodraw; // diagnose underflows
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										35
									
								
								src/k_kart.c
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								src/k_kart.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -350,7 +350,7 @@ consvar_t *KartItemCVars[NUMKARTRESULTS-1] =
 | 
			
		|||
#define NUMKARTODDS 	80
 | 
			
		||||
 | 
			
		||||
// Less ugly 2D arrays
 | 
			
		||||
static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
 | 
			
		||||
static UINT8 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
 | 
			
		||||
{
 | 
			
		||||
				//P-Odds	 0  1  2  3  4  5  6  7
 | 
			
		||||
			   /*Sneaker*/ { 0, 0, 2, 4, 6, 0, 0, 0 }, // Sneaker
 | 
			
		||||
| 
						 | 
				
			
			@ -383,7 +383,7 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
 | 
			
		|||
			   /*Jawz x2*/ { 0, 0, 1, 2, 1, 0, 0, 0 }  // Jawz x2
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static INT32 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
 | 
			
		||||
static UINT8 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
 | 
			
		||||
{
 | 
			
		||||
				//P-Odds	 0  1
 | 
			
		||||
			   /*Sneaker*/ { 2, 1 }, // Sneaker
 | 
			
		||||
| 
						 | 
				
			
			@ -899,6 +899,37 @@ UINT8 K_FindUseodds(player_t *player, fixed_t mashed, UINT32 pdis, UINT8 bestbum
 | 
			
		|||
	return useodds;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
INT32 K_GetRollingRouletteItem(player_t *player)
 | 
			
		||||
{
 | 
			
		||||
	static UINT8 translation[NUMKARTITEMS-1];
 | 
			
		||||
	static UINT16 roulette_size;
 | 
			
		||||
 | 
			
		||||
	static boolean odds_uncached = true;
 | 
			
		||||
 | 
			
		||||
	const UINT8 EMPTYODDS[sizeof K_KartItemOddsRace[0]] = {0};
 | 
			
		||||
 | 
			
		||||
	if (odds_uncached)
 | 
			
		||||
	{
 | 
			
		||||
		UINT8 i;
 | 
			
		||||
 | 
			
		||||
		roulette_size = 0;
 | 
			
		||||
 | 
			
		||||
		for (i = 1; i < NUMKARTITEMS; ++i)
 | 
			
		||||
		{
 | 
			
		||||
			if (memcmp(K_KartItemOddsRace[i - 1], EMPTYODDS, sizeof EMPTYODDS))
 | 
			
		||||
			{
 | 
			
		||||
				translation[roulette_size] = i;
 | 
			
		||||
				roulette_size++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		roulette_size *= 3;
 | 
			
		||||
		odds_uncached = false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return translation[(player->itemroulette % roulette_size) / 3];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
 | 
			
		||||
{
 | 
			
		||||
	INT32 i;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,7 @@ UINT8 K_FindUseodds(player_t *player, fixed_t mashed, UINT32 pdis, UINT8 bestbum
 | 
			
		|||
fixed_t K_ItemOddsScale(UINT8 numPlayers, boolean spbrush);
 | 
			
		||||
UINT32 K_ScaleItemDistance(UINT32 distance, UINT8 numPlayers, boolean spbrush);
 | 
			
		||||
INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, UINT32 ourDist, fixed_t mashed, boolean spbrush, boolean bot, boolean rival);
 | 
			
		||||
INT32 K_GetRollingRouletteItem(player_t *player);
 | 
			
		||||
INT32 K_GetShieldFromItem(INT32 item);
 | 
			
		||||
fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against);
 | 
			
		||||
boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										74
									
								
								src/p_mobj.c
									
										
									
									
									
								
							
							
						
						
									
										74
									
								
								src/p_mobj.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -5997,79 +5997,7 @@ static void P_MobjSceneryThink(mobj_t *mobj)
 | 
			
		|||
				{
 | 
			
		||||
					P_SetMobjState(mobj, S_PLAYERARROW_BOX);
 | 
			
		||||
					mobj->tracer->sprite = SPR_ITEM;
 | 
			
		||||
					switch((mobj->target->player->itemroulette % (16*3)) / 3)
 | 
			
		||||
					{
 | 
			
		||||
						// Each case is handled in threes, to give three frames of in-game time to see the item on the roulette
 | 
			
		||||
						case 0: // Sneaker
 | 
			
		||||
							mobj->tracer->frame = KITEM_SNEAKER;
 | 
			
		||||
							//localcolor = SKINCOLOR_RASPBERRY;
 | 
			
		||||
							break;
 | 
			
		||||
						case 1: // Banana
 | 
			
		||||
							mobj->tracer->frame = KITEM_BANANA;
 | 
			
		||||
							//localcolor = SKINCOLOR_YELLOW;
 | 
			
		||||
							break;
 | 
			
		||||
						case 2: // Orbinaut
 | 
			
		||||
							mobj->tracer->frame = KITEM_ORBINAUT;
 | 
			
		||||
							//localcolor = SKINCOLOR_STEEL;
 | 
			
		||||
							break;
 | 
			
		||||
						case 3: // Mine
 | 
			
		||||
							mobj->tracer->frame = KITEM_MINE;
 | 
			
		||||
							//localcolor = SKINCOLOR_JET;
 | 
			
		||||
							break;
 | 
			
		||||
						case 4: // Grow
 | 
			
		||||
							mobj->tracer->frame = KITEM_GROW;
 | 
			
		||||
							//localcolor = SKINCOLOR_TEAL;
 | 
			
		||||
							break;
 | 
			
		||||
						case 5: // Hyudoro
 | 
			
		||||
							mobj->tracer->frame = KITEM_HYUDORO;
 | 
			
		||||
							//localcolor = SKINCOLOR_STEEL;
 | 
			
		||||
							break;
 | 
			
		||||
						case 6: // Rocket Sneaker
 | 
			
		||||
							mobj->tracer->frame = KITEM_ROCKETSNEAKER;
 | 
			
		||||
							//localcolor = SKINCOLOR_TANGERINE;
 | 
			
		||||
							break;
 | 
			
		||||
						case 7: // Jawz
 | 
			
		||||
							mobj->tracer->frame = KITEM_JAWZ;
 | 
			
		||||
							//localcolor = SKINCOLOR_JAWZ;
 | 
			
		||||
							break;
 | 
			
		||||
						case 8: // Self-Propelled Bomb
 | 
			
		||||
							mobj->tracer->frame = KITEM_SPB;
 | 
			
		||||
							//localcolor = SKINCOLOR_JET;
 | 
			
		||||
							break;
 | 
			
		||||
						case 9: // Shrink
 | 
			
		||||
							mobj->tracer->frame = KITEM_SHRINK;
 | 
			
		||||
							//localcolor = SKINCOLOR_ORANGE;
 | 
			
		||||
							break;
 | 
			
		||||
						case 10: // Invincibility
 | 
			
		||||
							mobj->tracer->frame = KITEM_INVINCIBILITY;
 | 
			
		||||
							//localcolor = SKINCOLOR_GREY;
 | 
			
		||||
							break;
 | 
			
		||||
						case 11: // Eggman Monitor
 | 
			
		||||
							mobj->tracer->frame = KITEM_EGGMAN;
 | 
			
		||||
							//localcolor = SKINCOLOR_ROSE;
 | 
			
		||||
							break;
 | 
			
		||||
						case 12: // Ballhog
 | 
			
		||||
							mobj->tracer->frame = KITEM_BALLHOG;
 | 
			
		||||
							//localcolor = SKINCOLOR_LILAC;
 | 
			
		||||
							break;
 | 
			
		||||
						case 13: // Lightning Shield
 | 
			
		||||
							mobj->tracer->frame = KITEM_LIGHTNINGSHIELD;
 | 
			
		||||
							//localcolor = SKINCOLOR_CYAN;
 | 
			
		||||
							break;
 | 
			
		||||
						case 14: // Super Ring
 | 
			
		||||
							mobj->tracer->frame = KITEM_SUPERRING;
 | 
			
		||||
							//localcolor = SKINCOLOR_GOLD;
 | 
			
		||||
							break;
 | 
			
		||||
						case 15: // Land Mine
 | 
			
		||||
							mobj->tracer->frame = KITEM_LANDMINE;
 | 
			
		||||
							//localcolor = SKINCOLOR_JET;
 | 
			
		||||
							break;
 | 
			
		||||
						case 16: // Drop Target
 | 
			
		||||
							mobj->tracer->frame = KITEM_DROPTARGET;
 | 
			
		||||
							//localcolor = SKINCOLOR_LIME;
 | 
			
		||||
							break;
 | 
			
		||||
					}
 | 
			
		||||
					mobj->tracer->frame |= FF_FULLBRIGHT;
 | 
			
		||||
					mobj->tracer->frame = K_GetRollingRouletteItem(mobj->target->player) | FF_FULLBRIGHT;
 | 
			
		||||
					mobj->tracer->renderflags &= ~RF_DONTDRAW;
 | 
			
		||||
				}
 | 
			
		||||
				else if (mobj->target->player->stealingtimer < 0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue