Floupix ping-pong propaganda page

Floupix ping-pong is copylefted under the GNU General Public License by the S.S.M.T.F.

floupix ping pong logo


Floupix sprites

Floupix is a Slime-Volleyball-like with many bonuses, options, playable up to 12 human or automatic players.

Each player is a floupix and can jump and bump the ball to make it touch the other players' ground, using various bonuses with different colors and effects.

Get Floupix ping pong as a a bin/cue (complete game ready to burn; 60 Mo); an iso (the same without audio cd tracks; 1,4 Mo).

for NTSC 60 Hz version, please get this iso. Use the PAL bin/cue and replace the sl.iso with it.

You can get the source code (4 Mo)

Note:mp3 audio files are not included in the source archive. Download the bincue archive to get it.


left / rightmove your floupix left and right
Asingle jump (and fly) depending on the control mode
left / right quicklysingle jump (and fly) depending on the control mode
Zmove your floupix back to your camp
Buse the bonus over your head
Cask for new bonuses depending on bonus distribution mode
Ltoggles pause

Note : When someone pauses the game, you can join by pressing A.


Scoring is easy in one net, two teams mode : when the ball touches the ground of a team, the other team scores one point.

In two nets, three teams mode, when the ball touches the ground of a team, this team loses one point and ther other two teams score one point.

Note : You will probably notice that in two nets, three teams mode, the two losing teams should band together against the third team to lower its score.


Floupix sprites Floupix sprites
KingKongthe ball bounces on the ground
Nosferatuthe ball does not collide with players
LongDrinkcreates a fake ball
Chompletfreezes the ball
Liste des fuckings makes the ball invisible
Throtermake the net full heighted (invisible wall)
Kansasmakes the player race towards the ground
Proatgives an upward impulsion to the ball
Jumbo Jimdisables boucing on the top of the screen


Floupix sprites

The game options menu is straightforward. Use Up or Down keys to select an option; A to change its value; B to validate and exit.

Bonus Distribution is one of none,straight,smooth,boumtou,chainsaw, and ok corral. It determines the distribution frequency of incoming bonuses, the number of bonuses for each distribution as well as the maximum number of bonuses one floupix can simultaneoulsy get.

Note : in ok corral mode, you can press C to get more bonuses.

The selected bonus collection (i.e. set of bonus that are to be used during the game and probablity for each bonus to appear) is shown under the option menu when "bonus collection" is selected, as represented on the screenshot.

The controls choice between different that are to be used during the game is made among the followings :

StandardLeft+Right buttons to jump and fly
Floupix ConA button to jump and fly
ComboLeft+Right or A button to jump and fly
SlimeLeft+Right or A button to jump

Mechanical considerations

You will probably notice some strange collisions effects between the balls and the players. It's not a bug: you should consider it to be a modelisation of the quantic behaviour of floupixes viewed as particles.

If you persist in seeing these behaviours as bugs, please correct these lines :

void compute_boucing_ball_speed(BALL* b, PLAYER* p){ // is fact, there is no collision... if (b->pos[Y]>(p->pos[Y]-PLAYER_SPR_CENTER_OFFSET)) return; FIXED dist1,dist2; dist1 = (p->last_pos[Y] - PLAYER_SPR_CENTER_OFFSET) - b->last_pos[Y]; dist2 = (p->pos[Y] - PLAYER_SPR_CENTER_OFFSET) - b->pos[Y]; if (dist1 < dist2){ // the boucing surf. is flat FIXED sy = b->speed[Y]; b->speed[Y] = slSquartFX(slMulFX(sy,sy)); } else { // else, it is curved ... FIXED x_p,y_p,x_b,y_b; // ball & player position FIXED dx, dy; FIXED d,d_2; // distancy & distancy^2 FIXED vx, vy; // ball speed FIXED vxdx,vxdy,vydx,vydy,dx_d2,dy_d2; // various terms ... vx = b->speed[X]; vy = b->speed[Y]; x_b=b->pos[X]; y_b=b->pos[Y]; x_p=p->pos[X]; y_p=p->pos[Y]; dx = x_p - x_b; dy = (y_p - y_b); d_2 = slMulFX(dx,dx) + slMulFX(dy,dy); d = slSquartFX(d_2); // boucing direction & speed vxdx = slMulFX(vx,dx); vxdy = slMulFX(vx,dy); vydx = slMulFX(vy,dx); vydy = slMulFX(vy,dy); dx_d2 = slDivFX(d_2,dx); dy_d2 = slDivFX(d_2,dy); b->speed[X] = slMulFX(dx_d2,vxdx-vydy) - slMulFX(dy_d2,vxdy+vydx); b->speed[Y] = - slMulFX(dy_d2,vydy-vxdx) + slMulFX(dx_d2,vxdy+vydx); // correct ball position (push ball to the surface) FIXED cos_a,sin_a; FIXED real_pradius = BALL_SPR_RADIUS+PLAYER_SPR_RADIUS+toFIXED(1.0); cos_a = slDivFX(d,dx); sin_a = slDivFX(d,dy); b->pos[X] = x_p - slMulFX(real_pradius, cos_a); b->pos[Y] = y_p - slMulFX(real_pradius, sin_a); } // ball speed modification according the player's (in all kind of coll) int i; for (i=0;i<2;i++){ if ((slMulFX(b->speed[i],p->speed[i])speed[i] += p->speed[i]; } else { //b and p speeds sign are the same FIXED vp2,vb2; vp2 = slMulFX(p->speed[i],p->speed[i]); vb2 = slMulFX(b->speed[i],b->speed[i]); if (vb2speed[i] += p->speed[i]; } } } }

Thanks, and have a nice floupix.

Last Update : 2004.09.12 -- Vreuzon -- Sega Saturn Multiplayer Task Force