slide mechanic + levels up to 6_1

This commit is contained in:
Lephenixnoir 2022-01-16 19:30:11 +01:00
parent da61dad100
commit c654fd4121
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
13 changed files with 258 additions and 219 deletions

View File

@ -20,33 +20,40 @@ set(ASSETS
assets-cg/font.png
assets-cg/title.png
assets-cg/levels.png
assets-cg/level/level1.txt
assets-cg/level/level2.txt
assets-cg/level/level3.txt
assets-cg/level/level4.txt
assets-cg/level/level5.txt
assets-cg/level/level6.txt
assets-cg/level/level7.txt
assets-cg/level/level8.txt
assets-cg/level/level9.txt
assets-cg/level/level10.txt
assets-cg/level/level11.txt
assets-cg/level/level12.txt
assets-cg/level/level13.txt
assets-cg/level/level14.txt
assets-cg/level/level15.txt
assets-cg/level/level16.txt
assets-cg/level/level17.txt
assets-cg/level/level18.txt
assets-cg/level/level19.txt
assets-cg/level/level20.txt
assets-cg/level/level21.txt
assets-cg/level/level22.txt
assets-cg/level/level23.txt
assets-cg/level/level24.txt
assets-cg/level/level25.txt
assets-cg/level/level26.txt
assets-cg/level/level27.txt
assets-cg/level/level1_1.txt
assets-cg/level/level1_2.txt
assets-cg/level/level1_3.txt
assets-cg/level/level1_4.txt
assets-cg/level/level1_5.txt
assets-cg/level/level2_1.txt
assets-cg/level/level2_2.txt
assets-cg/level/level2_3.txt
assets-cg/level/level2_4.txt
assets-cg/level/level2_5.txt
assets-cg/level/level2_6.txt
assets-cg/level/level3_1.txt
assets-cg/level/level3_2.txt
assets-cg/level/level3_3.txt
assets-cg/level/level3_4.txt
assets-cg/level/level3_5.txt
assets-cg/level/level4_1.txt
assets-cg/level/level4_2.txt
assets-cg/level/level4_3.txt
assets-cg/level/level4_4.txt
assets-cg/level/level4_5.txt
assets-cg/level/level4_6.txt
assets-cg/level/level5_1.txt
assets-cg/level/level5_2.txt
assets-cg/level/level5_3.txt
assets-cg/level/level5_4.txt
assets-cg/level/level5_5.txt
assets-cg/level/level5_6.txt
assets-cg/level/level6_1.txt
assets-cg/level/level6_2.txt
assets-cg/level/level6_3.txt
assets-cg/level/level6_4.txt
assets-cg/level/level6_5.txt
assets-cg/level/level6_6.txt
)
fxconv_declare_converters(converters.py)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 994 B

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,37 +1,37 @@
#It's all a matter of\nperspective.
left fast_2
middle
right fast_2
middle
left fast_2
!1.0
left
square left fast_2
square right
middle fast_2
middle slow_1
right
left fast_2
middle slow_1
left
right fast_2
left slow_1
square left
square right slow_1
middle
right slow_1
left
middle fast_2
left
right fast_2
left slow_1
right
left slow_1
middle
left slow_1
right
right slow_1

View File

@ -1,34 +1,34 @@
#Regret has two sides.
left fast_2
left fast_2
!1.1
left
left
left fast_2
small right fast_2
left slow_1
square right fast_2
square left fast_2
right fast_2
middle fast_2
square left fast_2
left
small right
square right
right fast_2
square left
right
left fast_2
middle
square left
square right slow_1
right
right slow_1
left
left fast_2
left slow_1
left
left slow_1

View File

@ -1,40 +1,38 @@
#What we do...
!1.05
left
small right
left fast_2
small right fast_2
right
right fast_2
right
square left slow_1
square right
square left fast_2
left
left fast_2
square right
square right fast_1
square left
right
left fast_1
square right fast_1 fast_2
middle
square left fast_2
left slow_1
left fast_1 fast_2
left
middle fast_2
middle fast_1
left
right fast_1
right
right fast_2
square left fast_1
middle fast_1 fast_2
left fast_1 fast_2
left fast_2
square left fast_1 fast_2
square right fast_2
square right

View File

@ -1,39 +1,40 @@
#And the things we wish we has done.
right fast_2
right fast_2
left
small right fast_2
left
left
left
huge left outer_rotate_right
middle rotate_left
right fast_2
small left fast_2
left fast_2
left
huge right outer_rotate_right
middle rotate_left fast_2
#And the things we wish\nwe had done.
!1.20
right
right
right fast_2
left slow_1
small right
left
left
left
left outer_rotate_right
middle rotate_left
right fast_2
right
small left
left
left slow_1
right outer_rotate_left
middle rotate_right
right slow_1
right
middle rotate_left
right
right slow_1

View File

@ -1,46 +1,46 @@
#We may try to make you feel\nguilty.
middle fast_2
right fast_2
right fast_1
right
huge right outer_rotate_left
right fast_2
small left fast_2
right fast_2
small left fast_2
square left fast_2
square right fast_2
right fast_1 fast_2
left fast_1 fast_2
right
right fast_2
right
right fast_2
middle fast_2
!1.35
middle
middle fast_1 fast_2
right
right fast_2
right
middle rorate_left
right slow_1
right outer_rotate_left
right
small left
right
small left
square left
square right
right fast_1
left
right slow_1
right
right slow_1
right
middle
middle slow_1
middle fast_1
left
middle rorate_left
left
small right

View File

@ -1,36 +1,36 @@
#But the real guilt only comes\nfrom you.
!1.35
middle
middle fast_2
left fast_2
small right
square left fast_2
square right fast_1
right
small left fast_2
left fast_2
left fast_1
middle square
square right fast_1
right fast_1
small left
right
right fast_2
left
small right slow_1
square left
square right fast_1
square right slow_1
square left fast_2
right slow_1
small left
left
left slow_1
left square slow_1
right square
right
small left slow_1
right slow_1
right
square left slow_1
square right
square left
square right slow_1

View File

@ -1,5 +1,5 @@
#Nothing is wrong with you
#Nothing is wrong with you.
!1.0
left
right slide

View File

@ -81,6 +81,8 @@ def convert_level(input, output, params, target):
action = 8
if "fast_3" in r:
action = 9
if "slow_1" in r:
action = 10
if "rotate" in r and position == 0:
action = 6
if "rotate" in r and position == 1:
@ -98,7 +100,7 @@ def convert_level(input, output, params, target):
if shape < 0 and position == 2:
shape = 3
# No special properties -> normal
if shape < 0 and action in [0, 3, 8, 9]:
if shape < 0 and action in [0, 3, 7, 8, 9, 10]:
shape = 4
if shape < 0 or action < 0 or position < 0:

View File

@ -34,6 +34,7 @@ typedef enum {
Action_Slide = 7,
Action_Speed2 = 8,
Action_Speed3 = 9,
Action_Slow1 = 10,
} action_t;
typedef enum {
@ -69,19 +70,18 @@ typedef struct {
#define PLAYER_X 60
#define PLAYER_R 40
#define PLAYER_SIZE 8
#define CORRIDOR_SIZE 150
#define CORRIDOR_SIZE 156
#define RECT_SPEED 50 /* px/tempo */
typedef struct {
float w, h; /* px */
float y_init; /* px */
float x, y; /* px */
float r; /* rad */
rectmeta_t const *meta;
} rect_t;
#define RECT_TABLE_SIZE 20
typedef struct game {
/* Current level */
level_t const *level;
@ -144,13 +144,12 @@ void rect_physics(rect_t *r, rectmeta_t const *meta, float time);
// Levels
//---
extern level_t level1, level2, level3, level4;
extern level_t level5, level6, level7, level8;
extern level_t level9, level10, level11, level12;
extern level_t level13, level14, level15, level16;
extern level_t level17, level18, level19, level20;
extern level_t level21, level22, level23, level24;
extern level_t level25, level26, level27, level28;
extern level_t level1_1, level1_2, level1_3, level1_4, level1_5;
extern level_t level2_1, level2_2, level2_3, level2_4, level2_5, level2_6;
extern level_t level3_1, level3_2, level3_3, level3_4, level3_5;
extern level_t level4_1, level4_2, level4_3, level4_4, level4_5, level4_6;
extern level_t level5_1, level5_2, level5_3, level5_4, level5_5, level5_6;
extern level_t level6_1, level6_2, level6_3, level6_4, level6_5, level6_6;
extern episode_t episodes[];
extern int episode_count;

View File

@ -28,37 +28,42 @@ episode_t episodes[] = {
.name = "ignorance",
.level_count = 5,
.levels = (level_t *[]){
&level1, &level2, &level3, &level4, &level5
&level1_1, &level1_2, &level1_3, &level1_4, &level1_5
},
},
{
.name = "denial",
.level_count = 6,
.levels = (level_t *[]){
&level6, &level7, &level8, &level9, &level10,
&level11,
&level2_1, &level2_2, &level2_3, &level2_4, &level2_5, &level2_6
},
},
{
.name = "anger",
.level_count = 5,
.levels = (level_t *[]){
&level12, &level13, &level14, &level15, &level16,
&level3_1, &level3_2, &level3_3, &level3_4, &level3_5
},
},
{
.name = "bargaining",
.level_count = 6,
.levels = (level_t *[]){
&level17, &level18, &level19, &level20, &level21,
&level22,
&level4_1, &level4_2, &level4_3, &level4_4, &level4_5, &level4_6
},
},
{
.name = "guilt",
.level_count = 5,
.level_count = 6,
.levels = (level_t *[]) {
&level23, &level24, &level25, &level26, &level27,
&level5_1, &level5_2, &level5_3, &level5_4, &level5_5, &level5_6
},
},
{
.name = "depression",
.level_count = 6,
.levels = (level_t *[]){
&level6_1, &level6_2, &level6_3, &level6_4, &level6_5, &level6_6
},
},
};

View File

@ -96,24 +96,31 @@ void rect_load(rect_t *r, rectmeta_t const *meta)
switch(meta->position) {
case Position_Left:
if(meta->shape == Shape_Square)
r->y = DHEIGHT/2 - 0.22*CORRIDOR_SIZE;
r->y_init = DHEIGHT/2 - 0.22*CORRIDOR_SIZE;
else if(meta->shape == Shape_HugeBar)
r->y = DHEIGHT/2 - 0.38*CORRIDOR_SIZE;
r->y_init = DHEIGHT/2 - 0.38*CORRIDOR_SIZE;
else
r->y = DHEIGHT/2 - CORRIDOR_SIZE/2 + r->h/2;
r->y_init = DHEIGHT/2 - CORRIDOR_SIZE/2 + r->h/2;
break;
case Position_Right:
if(meta->shape == Shape_Square)
r->y = DHEIGHT/2 + 0.22*CORRIDOR_SIZE;
r->y_init = DHEIGHT/2 + 0.22*CORRIDOR_SIZE;
else if(meta->shape == Shape_HugeBar)
r->y = DHEIGHT/2 + 0.38*CORRIDOR_SIZE;
r->y_init = DHEIGHT/2 + 0.38*CORRIDOR_SIZE;
else
r->y = DHEIGHT/2 + CORRIDOR_SIZE/2 - r->h/2;
r->y_init = DHEIGHT/2 + CORRIDOR_SIZE/2 - r->h/2;
break;
case Position_Middle:
r->y = DHEIGHT/2;
r->y_init = DHEIGHT/2;
break;
}
r->y = r->y_init;
}
float cubic_ease(float t)
{
return (t <= 0.5) ? 4 * t * t * t : 1 - 4 * (1 - t) * (1 - t) * (1 - t);
}
void rect_physics(rect_t *r, rectmeta_t const *meta, float absolute_time)
@ -121,6 +128,7 @@ void rect_physics(rect_t *r, rectmeta_t const *meta, float absolute_time)
float time = absolute_time - meta->time; /* <= 0 most of the time */
r->x = PLAYER_X - RECT_SPEED * time;
r->y = r->y_init;
r->r = 0;
if(meta->action == Action_RotateLeft) {
@ -132,7 +140,7 @@ void rect_physics(rect_t *r, rectmeta_t const *meta, float absolute_time)
r->r = 0.3 - time * vr;
}
else if(meta->action == Action_Speed1) {
/* Double speed between -6 and -4 to skip 2 tempos */
/* Double speed between -4 and -2 to skip 2 tempi */
float speeding_period = fminf(2.0, fmaxf(0.0, time + 4.0));
r->x -= RECT_SPEED * (speeding_period - 2.0);
}
@ -148,13 +156,32 @@ void rect_physics(rect_t *r, rectmeta_t const *meta, float absolute_time)
r->r = -time * vr;
}
else if(meta->action == Action_Slide) {
// TODO
float amp = 2 * (DHEIGHT/2 - r->y_init);
/* Nothing happens until -7 */
if(time <= -7.0) {}
/* Slide to the opposite side between -7 and -5 */
else if(time <= -5.0) r->y += amp * cubic_ease((time + 7) / 2);
/* Stay there until -3 */
else if(time <= -3.0) r->y += amp;
/* Slide back between -3 and -1 */
else if(time <= -1.0) r->y += amp * (1 - cubic_ease((time + 3) / 2));
/* Stay there until +1 */
else if(time <= +1.0) {}
/* Move back between +1 and +3 */
else if(time <= +3.0) r->y += amp * cubic_ease((time - 1) / 2);
/* Stay there indefinitely */
else r->y += amp;
}
else if(meta->action == Action_Speed2) {
/* Speed x1.6 permanently */
r->x -= RECT_SPEED * time * 0.6;
/* Speed x1.5 permanently */
r->x -= RECT_SPEED * time * 0.5;
}
else if(meta->action == Action_Speed3) {
// TODO
}
else if(meta->action == Action_Slow1) {
/* Speed x2/3 until they come close enough to you */
if(time <= -1.0)
r->x += RECT_SPEED * (time + 1) / 3;
}
}