Behind the scenes of "Succor"
home
Overview
- Initial version created in 3 days (more than 8 hours a day) in the spirit of the Indie Game Jam
- Polished over several successive weekends (music, level-design tweaking, endgame)
Sources
- 4400 lines of custom C code (plus audio, graphics libraries)
- 1 custom font created for an old unfinished game
- 40 measures of music
- 3000 words of discussion by playtesters on email thread
Storage
- 80 KB main game executable (after compression)
- 25 KB percussion samples
Libraries
In addition to the code written specifically for the game,
it also uses:
- OpenGL (graphics)
- DirectSound (audio playback)
- stb_vorbis (ogg vorbis decoder)
- stb_image (png decoder for font)
- unreleased libraries: stb_audio_mixer; stb_synth; stb_wingraph
Sample Code
The Americas in two primitives:
float r = ball[n].radius/20;
glColor3f(0.5,0.8,0.4);
// south america:
glBegin(GL_TRIANGLE_FAN);
glVertex2f(x+r*11,y+r* 9);
glVertex2f(x+r* 6,y+r*14);
glVertex2f(x+r* 3,y+r*16);
glVertex2f(x+r ,y+r*18);
glVertex2f(x-r ,y+r*18);
glVertex2f(x+r/2 ,y+r*10);
glVertex2f(x-r*2 ,y+r* 8);
glVertex2f(x-r*3 ,y+r* 6);
glVertex2f(x-r , y+r* 3);
glVertex2f(x-r*10, y );
glVertex2f(x-r*8, y-r );
glVertex2f(x-r/2, y+r* 3);
glVertex2f(x ,y+r/2 );
glVertex2f(x+r* 9,y+r* 2);
glVertex2f(x+r* 9,y+r* 3);
glVertex2f(x+r*15,y+r* 5);
glEnd();
// north america:
glBegin(GL_TRIANGLE_FAN);
glVertex2f(x-r*12,y-r*9);
glVertex2f(x-r*12,y-r*7);
glVertex2f(x-r*11,y-r*3);
glVertex2f(x-r*10,y);
glVertex2f(x-r* 8,y);
glVertex2f(x-r* 8,y-r*5);
glVertex2f(x-r* 1,y-r*5);
glVertex2f(x ,y-r*3);
glVertex2f(x+r*0.5,y-r*4);
glVertex2f(x ,y-r*5);
glVertex2f(x+r ,y-r*7);
glVertex2f(x+r*2 ,y-r* 9);
glVertex2f(x+r*4 ,y-r*11);
glVertex2f(x+r*6 ,y-r*13);
glVertex2f(x+r*3, y-r*15);
glVertex2f(x , y-r*13);
glVertex2f(x-r*4, y-r*15);
glVertex2f(x-r*8, y-r*18);
glVertex2f(x-r*9, y-r*17);
glVertex2f(x-r*12,y-r*10);
glEnd();
All the music:
char bass1[] = { 8,
6,4,6,9, 11,9,11,13, 11,9,11,13, 16,13,16,18,
13,11,9,6, 11,9,6,4,
TIME(16), HOLD(1,2),HOLD(4,2),HOLD(6,2),11,9, TIME(8), HOLD(6,4),
6,4,6,9, 11,9,11,13, 11,9,11,13, 16,13,16,18,
16,13,11,18, 16,13,11,9,
TIME(16), HOLD(13,2),HOLD(11,2),HOLD(9,2),11,9, TIME(8), HOLD(6,4),
6,4,6,9, 13,11,9,11, 13,16,13,11, 16,18,16,13,
13,11,9,6, 11,9,6,4,
11,13,11,9, HOLD(6,4),
6,4,6,9, 11,9,11,13, 11,9,11,13, 16,13,16,18,
13,11,9,6, 11,9,6,4,
TIME(16), HOLD(1,2),HOLD(4,2),HOLD(6,2),HOLD(9,2), TIME(8), HOLD(6,4),
11,11,11,11,11,11,11,11,
TIME(32),11,HOLD(13,3),TIME(8),13,13,13,13,13,13,13,
4,4,4,4,4,4,4,4,
6,6,6,6,6,6,6,6,
11,11,11,11,11,11,11,11,
13,13,13,13,13,13,13,13,
16,16,16,16,18,18,13,TIME(16),11,9,
HOLD(6,2),HOLD(6,2),HOLD(6,2),HOLD(9,2),
6,13,18,13,HOLD(6,2),TIME(8),0,
6,4,6,9, 11,9,11,13, 11,9,11,13, 16,13,16,18,
16,13,11,18, 16,13,11,9,
TIME(16), HOLD(6,2),HOLD(4,2),HOLD(1,2),HOLD(9,2), TIME(8), HOLD(6,4),
6,4,6,9, TIME(32),11,HOLD(13,3),TIME(8), 11,9,13, 16,13,16,18, 11,13,11,9,
6,4,6,9, 11,9,11,13,
TIME(16), HOLD(1,2),HOLD(4,2),HOLD(6,2),11,9, TIME(8), HOLD(6,4),
4,4,4,4, 11,16,11,4, 6,6,6,6, 13,18,13,6,
2,2,2,2, 9,14,9,2, 1,1,1,8, 13,16,11,6,
4,4,4,4, 11,16,11,4, 7,7,7,7, 14,19,14,6,
11,11,11,11, 18,23,18,11, 14,14,21,26, 13,13,20,TIME(16),11,9,TIME(8),
END };
char drums1[] = { 16,
KH,0,H,0, SH,0,H,K, KH,0,KH,0, SH,0,H,0,
KH,0,H,0, SH,0,H,0, KH,0,KH,K, SH,0,H,0,
KH,0,KH,0, SH,0,H,K, KH,0,KH,K, SH,0,H,0,
KH,K,KH,0, SH,0,H,0, KH,0,KH,0, SH,0,S,S,
KH,0,H,K, SH,0,H,K, KH,0,KH,0, SH,0,H,S,
KH,0,H,K, SH,0,H,K, KH,0,KH,K, SH,0,SH,0,
KH,0,KH,0, SH,K,H,0, KH,0,KH,K, SH,K,H,0,
SH,K,H,K, SH,K,KH,0, H,S,K,K, S,K,K,S,
KH,0,H,0, SH,0,H,K, KH,0,KH,0, SH,0,H,0,
KH,0,H,0, SH,0,H,0, KH,0,KH,K, SH,0,H,0,
KH,0,KH,0, SH,0,H,K, KH,0,KH,K, SH,0,H,0,
KH,K,KH,0, SH,0,H,0, KH,0,KH,0, SH,0,S,S,
KH,0,H,K, SH,0,H,K, KH,0,KH,0, SH,0,H,S,
KH,0,H,K, SH,0,H,K, KH,0,KH,K, SH,0,SH,0,
KH,0,KH,0, SH,K,H,0, KH,0,KH,K, SH,K,H,0,
SH,K,H,K, SH,K,KH,S, H,S,K,K, S,K,K,S,
KR,0,R,0, SR,0,R,K, KR,0,KR,0, SR,0,R,0,
KR,0,R,0, SR,0,R,0, KR,0,KR,K, SR,0,R,0,
KR,0,KR,0, SR,0,R,K, KR,0,KR,K, SR,0,R,0,
KR,K,KR,0, SR,0,R,0, KR,0,KR,0, SR,0,S,S,
KR,0,R,K, SR,0,R,K, KR,0,KR,0, SR,0,R,S,
KR,0,R,K, SR,0,R,K, KR,0,KR,K, SR,0,SR,0,
KR,0,KR,0, SR,K,R,0, KR,0,KR,K, SR,K,R,0,
SR,K,R,K, SR,K,KR,0, R,S,S,K, S,S,K,S,
KH,0,H,0, SH,0,H,K, KH,0,KH,0, SH,0,H,0,
KH,0,H,0, SH,0,H,0, KH,0,KH,K, SH,0,H,0,
KH,0,KH,0, SH,0,H,K, KH,0,KH,K, SH,0,H,0,
KH,K,KH,0, SH,0,H,0, KH,0,KH,0, SH,0,S,S,
KH,0,H,K, SH,0,H,K, KH,0,KH,0, SH,0,H,S,
KH,0,H,K, SH,0,H,K, KH,0,KH,K, SH,0,SH,0,
KH,0,KH,0, SH,K,H,0, KH,0,KH,K, SH,K,H,0,
SH,K,H,K, SH,K,KH,0, H,S,K,K, S,K,K,S,
KR,0,R,R, SR,0,R,K, KR,0,KR,R, SR,0,R,0,
KR,0,R,R, SR,0,R,R, KR,0,KR,K, SR,0,R,R,
KR,0,KR,0, SR,0,R,K, KR,R,KR,K, SR,0,R,0,
KR,K,KR,0, SR,0,R,R, KR,0,KR,R, SR,0,S,S,
KR,R,R,K, SR,0,R,K, KR,0,KR,R, SR,0,R,S,
KR,0,R,K, SR,0,R,K, KR,R,KR,K, SR,0,SR,0,
KR,0,KR,0, SR,K,R,R, KR,0,KR,K, SR,K,R,0,
SR,K,R,K, SR,K,KR,0, R,S,K,S, S,K,S,S,
END };
home