Add VN-style dialogue test
9
Makefile
|
@ -3,8 +3,8 @@
|
||||||
# multiple-targets like sparrow3D!
|
# multiple-targets like sparrow3D!
|
||||||
# whoops.
|
# whoops.
|
||||||
|
|
||||||
SRC = lib/button.c lib/font.c lib/sound.c lib/menu.c
|
SRC = lib/button.c lib/font.c lib/sound.c lib/menu.c lib/scene.c
|
||||||
OBJ = button.o font.o sound.o menu.o
|
OBJ = button.o font.o sound.o menu.o scene.o
|
||||||
DEP = $(SRC:.c=.d)
|
DEP = $(SRC:.c=.d)
|
||||||
|
|
||||||
DYNAMIC = -lSDL_ttf -lSDL_mixer -lSDL_image -lSDL -lm
|
DYNAMIC = -lSDL_ttf -lSDL_mixer -lSDL_image -lSDL -lm
|
||||||
|
@ -56,11 +56,12 @@ targets:
|
||||||
|
|
||||||
test-sprites: tests/test-sprites.c $(OBJ) makeBuildDir
|
test-sprites: tests/test-sprites.c $(OBJ) makeBuildDir
|
||||||
$(CC) $(CFLAGS) $(LINK_FLAGS) $< $(OBJ) $(SDL) $(INCLUDE) $(LIB) $(EFEMMERA_STATIC) $(DYNAMIC) -o $(BUILD)/tests/$@$(SUFFIX)
|
$(CC) $(CFLAGS) $(LINK_FLAGS) $< $(OBJ) $(SDL) $(INCLUDE) $(LIB) $(EFEMMERA_STATIC) $(DYNAMIC) -o $(BUILD)/tests/$@$(SUFFIX)
|
||||||
|
|
||||||
test-menu: tests/test-menu.c $(OBJ) makeBuildDir
|
test-menu: tests/test-menu.c $(OBJ) makeBuildDir
|
||||||
$(CC) $(CFLAGS) $(LINK_FLAGS) $< $(OBJ) $(SDL) $(INCLUDE) $(LIB) $(EFEMMERA_STATIC) $(DYNAMIC) -o $(BUILD)/tests/$@$(SUFFIX)
|
$(CC) $(CFLAGS) $(LINK_FLAGS) $< $(OBJ) $(SDL) $(INCLUDE) $(LIB) $(EFEMMERA_STATIC) $(DYNAMIC) -o $(BUILD)/tests/$@$(SUFFIX)
|
||||||
|
test-dialogue: tests/test-dialogue.c $(OBJ) makeBuildDir
|
||||||
|
$(CC) $(CFLAGS) $(LINK_FLAGS) $< $(OBJ) $(SDL) $(INCLUDE) $(LIB) $(EFEMMERA_STATIC) $(DYNAMIC) -o $(BUILD)/tests/$@$(SUFFIX)
|
||||||
|
|
||||||
tests: test-menu test-sprites
|
tests: test-menu test-sprites test-dialogue
|
||||||
@echo "=== Tests built ==="
|
@echo "=== Tests built ==="
|
||||||
#efemmera: main.c $(OBJ) makeBuildDir
|
#efemmera: main.c $(OBJ) makeBuildDir
|
||||||
#$(CC) $(CFLAGS) $(LINK_FLAGS) $< $(OBJ) $(SDL) $(INCLUDE) $(LIB) $(EFEMMERA_STATIC) $(DYNAMIC) -o $(BUILD)/$@$(SUFFIX)
|
#$(CC) $(CFLAGS) $(LINK_FLAGS) $< $(OBJ) $(SDL) $(INCLUDE) $(LIB) $(EFEMMERA_STATIC) $(DYNAMIC) -o $(BUILD)/$@$(SUFFIX)
|
||||||
|
|
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,165 @@
|
||||||
|
# You can place the script of your game in this file.
|
||||||
|
|
||||||
|
init:
|
||||||
|
# Declare images below this line, using the image statement.
|
||||||
|
# eg. image eileen happy = "eileen_happy.png"
|
||||||
|
|
||||||
|
image g = "images/girl_happy.png"
|
||||||
|
image g angry = "images/girl_angry.png"
|
||||||
|
image g sad = "images/girl_sad.png"
|
||||||
|
image g bored = "images/girl_bored.png"
|
||||||
|
|
||||||
|
image street = "images/background.png"
|
||||||
|
|
||||||
|
# Declare characters used by this game.
|
||||||
|
|
||||||
|
$ g = Character('Sakura-chan')
|
||||||
|
$ m = Character(what_color="#bae9fb")
|
||||||
|
|
||||||
|
$_game_menu_screen = "_quit_prompt"
|
||||||
|
|
||||||
|
# The game starts here.
|
||||||
|
label start:
|
||||||
|
$ config.rollback_enabled = False
|
||||||
|
scene street with pixellate
|
||||||
|
show g
|
||||||
|
m "There is this girl at my school."
|
||||||
|
m "She's so goddamn cute."
|
||||||
|
m "I heard from my mate that she's having boyfriend problems."
|
||||||
|
m "What she really needs now, is a nice guy like me."
|
||||||
|
"Hey, Sakura-chan!"
|
||||||
|
show g bored
|
||||||
|
g "Hey"
|
||||||
|
m "She needs a nice guy."
|
||||||
|
m "She is like a goddess."
|
||||||
|
m "I think about her... every night."
|
||||||
|
show g
|
||||||
|
g "Do we know each other?"
|
||||||
|
"I'm in your class!"
|
||||||
|
show g bored
|
||||||
|
g "Oh, right."
|
||||||
|
g "Oh you must sit with... those... otaku guys. Uh."
|
||||||
|
m "Bitch."
|
||||||
|
"Yeah. Them."
|
||||||
|
g "Sorry, school is so boring."
|
||||||
|
g "I hate this stupid school!"
|
||||||
|
show g
|
||||||
|
g "Urgh, and I hate this uniform. It makes me look so fat."
|
||||||
|
menu:
|
||||||
|
"Yeah, lay off the doughnuts then.":
|
||||||
|
"Yeah, you look a bit chunky in that."
|
||||||
|
show g angry
|
||||||
|
g "What the hell? Like you can talk."
|
||||||
|
g "Idiot."
|
||||||
|
g "It's 'cos of jerks like you that regular girls like me get eating disorders."
|
||||||
|
g "Twat."
|
||||||
|
"No, you look fine.":
|
||||||
|
"No, you look fine!"
|
||||||
|
show g sad
|
||||||
|
g "Urgh but I'm sooo fat!"
|
||||||
|
g "I gotta go on a diet, but I just like sweets too much!"
|
||||||
|
g "I hate myself. Why does this happen to me?!?"
|
||||||
|
|
||||||
|
|
||||||
|
show g
|
||||||
|
g "Actually, I had a fight with my boyfriend because he said I was fat."
|
||||||
|
show g sad
|
||||||
|
g "He's such a... cunt."
|
||||||
|
show g angry
|
||||||
|
g "I hate him!"
|
||||||
|
show g bored
|
||||||
|
g "He's pretty thick too... Like, he comes out with the most moronic things."
|
||||||
|
g "Makes me ashamed to be around him."
|
||||||
|
show g
|
||||||
|
g "He's pretty thick really."
|
||||||
|
"Heh..."
|
||||||
|
menu:
|
||||||
|
"Yeah, sounds like a real idiot.":
|
||||||
|
"Yeah, he sounds like a real idiot!"
|
||||||
|
show g angry
|
||||||
|
g "D-don't be mean to him!"
|
||||||
|
g "What the hell, you don't even know him."
|
||||||
|
g "Will you butt out?"
|
||||||
|
g "We have enough problems without losers like you adding to them!!!"
|
||||||
|
"Fine, whatever."
|
||||||
|
|
||||||
|
"Aww, you're being unfair.":
|
||||||
|
"Aww, don't you think you're being a little unfair to him?"
|
||||||
|
show g sad
|
||||||
|
g "Ah I knew you wouldn't understand."
|
||||||
|
g "Stupid boys always stick together!"
|
||||||
|
show g bored
|
||||||
|
g "Guess you're just an idiot like him."
|
||||||
|
|
||||||
|
show g bored
|
||||||
|
g "Hey, do you have any cigarettes?"
|
||||||
|
menu:
|
||||||
|
"Yes!":
|
||||||
|
"Y-yes."
|
||||||
|
g "..."
|
||||||
|
show g angry
|
||||||
|
g "What the hell, this is made of fucking chocolate!?"
|
||||||
|
g "Grow up a little... man, I can't believe you're the same age as me."
|
||||||
|
|
||||||
|
"No.":
|
||||||
|
"No, I don't think you should smoke."
|
||||||
|
show g angry
|
||||||
|
g "What are you, my mother?"
|
||||||
|
g "Jeez..."
|
||||||
|
|
||||||
|
show g bored
|
||||||
|
g "Damn, I hate being a teenager."
|
||||||
|
g "Stupid family, stupid school..."
|
||||||
|
show g
|
||||||
|
g "Wouldn't it be nice to do something fun?"
|
||||||
|
menu:
|
||||||
|
"Let's run away!":
|
||||||
|
"We could run away together."
|
||||||
|
show g bored
|
||||||
|
g "No thanks."
|
||||||
|
g "Besides, who has the money?"
|
||||||
|
g "Do you ever think anything through?"
|
||||||
|
g "...Stupid soft-headed boys."
|
||||||
|
|
||||||
|
"Be more responsible.":
|
||||||
|
"You should be more responsible."
|
||||||
|
show g angry
|
||||||
|
g "What?"
|
||||||
|
g "What the hell? I have a job as well as school."
|
||||||
|
g "So stop lecturing me!"
|
||||||
|
g "I bet mummy and daddy buy you everything!"
|
||||||
|
|
||||||
|
|
||||||
|
show g
|
||||||
|
g "OK, I've gotta go soon... Got things to do."
|
||||||
|
g "So what did you want?"
|
||||||
|
m "Oh man, here we go."
|
||||||
|
"Uhh..."
|
||||||
|
m "Just say it, say it say it...!!!"
|
||||||
|
"Would... you like to hang out?"
|
||||||
|
show g bored
|
||||||
|
g "..."
|
||||||
|
g "I have a boyfriend."
|
||||||
|
"But you were having trouble with him."
|
||||||
|
g "Yeah."
|
||||||
|
g "You're just... not my type."
|
||||||
|
"..."
|
||||||
|
g "I think I'm going to make up with my boyfriend now."
|
||||||
|
m "Cow..."
|
||||||
|
show g
|
||||||
|
g "So, see you. It was, uh, nice chatting to you..."
|
||||||
|
g "Uh... Akihiko was it?"
|
||||||
|
m "That's not my name."
|
||||||
|
"Yeah, Akihiko."
|
||||||
|
g "So, maybe I'll see you in class!"
|
||||||
|
m "Riiight."
|
||||||
|
g "Bye!"
|
||||||
|
hide g
|
||||||
|
m "Stupid goddamn bitchy girls..."
|
||||||
|
m "They can never appreciate a nice guy like me."
|
||||||
|
m "Always clinging to popular neanderthal types."
|
||||||
|
m "Oh man, if I had a girl like her..."
|
||||||
|
m "..."
|
||||||
|
m "...!"
|
||||||
|
m "..."
|
||||||
|
scene black with pixellate
|
|
@ -91,7 +91,7 @@ resizeMenu ( struct eMenu* menu )
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// draw an eMenu on it's surface.
|
// draw an eMenu on it's surface.
|
||||||
void
|
void
|
||||||
drawMenu ( SDL_Surface* surface, struct eMenu* menu )
|
drawMenu ( struct eMenu* menu )
|
||||||
{
|
{
|
||||||
SDL_Surface* old_surface = spGetRenderTarget( );
|
SDL_Surface* old_surface = spGetRenderTarget( );
|
||||||
spSelectRenderTarget( menu->surface );
|
spSelectRenderTarget( menu->surface );
|
||||||
|
|
|
@ -53,7 +53,7 @@ void initMenu ( struct eMenu*, char title[512],
|
||||||
void initMenuElement ( struct eMenu*, struct eMenuElement*, char[512] );
|
void initMenuElement ( struct eMenu*, struct eMenuElement*, char[512] );
|
||||||
void addMenuElement ( struct eMenu*, char[512] );
|
void addMenuElement ( struct eMenu*, char[512] );
|
||||||
|
|
||||||
void drawMenu ( SDL_Surface*, struct eMenu* );
|
void drawMenu ( struct eMenu* );
|
||||||
void drawMenuElement ( struct eMenuElement* );
|
void drawMenuElement ( struct eMenuElement* );
|
||||||
|
|
||||||
int calcMenu ( struct eMenu*, int, Uint32 );
|
int calcMenu ( struct eMenu*, int, Uint32 );
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
#include <sparrow3d.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "scene.h"
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// INIT
|
||||||
|
// ============================================================================
|
||||||
|
void
|
||||||
|
initScene ( struct eScene* scene, char background[512], struct eActor* actor )
|
||||||
|
{
|
||||||
|
scene->surface = NULL;
|
||||||
|
scene->background = NULL;
|
||||||
|
strcpy(scene->backgroundPath, background);
|
||||||
|
scene->actor = actor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drawScene ( struct eScene* scene )
|
||||||
|
{
|
||||||
|
SDL_Surface* old_target = spGetRenderTarget();
|
||||||
|
spSelectRenderTarget( scene->surface );
|
||||||
|
|
||||||
|
spBlitSurface( scene->surface->w/2,scene->surface->h/2,0, scene->background );
|
||||||
|
drawActor( scene->actor );
|
||||||
|
|
||||||
|
spSelectRenderTarget( old_target );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
resizeScene ( struct eScene* scene )
|
||||||
|
{
|
||||||
|
if ( scene->background != NULL )
|
||||||
|
spDeleteSurface( scene->background );
|
||||||
|
if ( scene->surface != NULL )
|
||||||
|
spDeleteSurface( scene->surface );
|
||||||
|
|
||||||
|
scene->background = spLoadSurfaceZoom( scene->backgroundPath,
|
||||||
|
spGetSizeFactor()/ 2 );
|
||||||
|
scene->surface = spCreateSurface(1000,1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
initActor ( struct eActor* actor, char name[512] )
|
||||||
|
{
|
||||||
|
strcpy(actor->name, name);
|
||||||
|
actor->emoteCount = 0;
|
||||||
|
actor->emoteSelection = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drawActor ( struct eActor* actor )
|
||||||
|
{
|
||||||
|
SDL_Surface* target = spGetRenderTarget();
|
||||||
|
if ( actor->emote != NULL)
|
||||||
|
spBlitSurface( target->w / 2,target->h - (target->h / 2),0, actor->emote );
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
resizeActor ( struct eActor* actor )
|
||||||
|
{
|
||||||
|
int nowEmote = actor->emoteSelection;
|
||||||
|
|
||||||
|
if ( actor->emote != NULL )
|
||||||
|
spDeleteSurface( actor->emote );
|
||||||
|
if ( nowEmote >= 0 && actor->emoteCount > 0 )
|
||||||
|
actor->emote = spLoadSurfaceZoom( actor->emotePaths[nowEmote],
|
||||||
|
spGetSizeFactor()/ 3);
|
||||||
|
else
|
||||||
|
actor->emote = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
addEmote ( struct eActor* actor, char path[512] )
|
||||||
|
{
|
||||||
|
strcpy( actor->emotePaths[actor->emoteCount], path );
|
||||||
|
actor->emoteCount += 1;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
#include <sparrow3d.h>
|
||||||
|
|
||||||
|
struct eActor
|
||||||
|
{
|
||||||
|
char name[512];
|
||||||
|
|
||||||
|
Uint16 textColor;
|
||||||
|
char emotePaths[20][512];
|
||||||
|
int emoteCount;
|
||||||
|
int emoteSelection;
|
||||||
|
|
||||||
|
SDL_Surface* emote;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct eScene
|
||||||
|
{
|
||||||
|
char backgroundPath[512];
|
||||||
|
SDL_Surface* background;
|
||||||
|
|
||||||
|
struct eActor* actor;
|
||||||
|
|
||||||
|
SDL_Surface* surface;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void initScene ( struct eScene*, char[512], struct eActor* );
|
||||||
|
void drawScene ( struct eScene* );
|
||||||
|
void resizeScene ( struct eScene* );
|
||||||
|
|
||||||
|
void initActor ( struct eActor*, char[512] );
|
||||||
|
void drawActor ( struct eActor* );
|
||||||
|
void resizeActor ( struct eActor* );
|
||||||
|
void addEmote ( struct eActor*, char[512] );
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
#include <sparrow3d.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "../lib/font.h"
|
||||||
|
#include "../lib/scene.h"
|
||||||
|
#include "test-dialogue.h"
|
||||||
|
|
||||||
|
SDL_Surface* screen = NULL;
|
||||||
|
|
||||||
|
struct eScene* mainScene = NULL;
|
||||||
|
struct eActor* girl = NULL;
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
int
|
||||||
|
main ( int argc, char **argv )
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
spLoop( draw_test, calc_test, 10, resize, NULL );
|
||||||
|
|
||||||
|
cleanup();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// TEST
|
||||||
|
// ============================================================================
|
||||||
|
// draw this whole sprite test (aka, simple background, text, and the sprites.)
|
||||||
|
void
|
||||||
|
draw_test ( void )
|
||||||
|
{
|
||||||
|
spSelectRenderTarget(spGetWindowSurface());
|
||||||
|
spClearTarget( spGetRGB(64,64,64) );
|
||||||
|
|
||||||
|
screen = spGetWindowSurface();
|
||||||
|
drawScene( mainScene );
|
||||||
|
spBlitSurface(screen->w/2,screen->h/2,0, mainScene->surface);
|
||||||
|
|
||||||
|
spFlip();
|
||||||
|
}
|
||||||
|
|
||||||
|
// input for the sprite test
|
||||||
|
int
|
||||||
|
calc_test ( Uint32 steps )
|
||||||
|
{
|
||||||
|
if ( spGetInput()->button[SP_BUTTON_SELECT] )
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
resize ( Uint16 w, Uint16 h )
|
||||||
|
{
|
||||||
|
spSelectRenderTarget( spGetWindowSurface());
|
||||||
|
resizeScene( mainScene );
|
||||||
|
resizeActor( girl );
|
||||||
|
resizeFonts();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// INIT
|
||||||
|
// ============================================================================
|
||||||
|
int
|
||||||
|
init ( void )
|
||||||
|
{
|
||||||
|
init_sparrow3d();
|
||||||
|
init_fonts();
|
||||||
|
init_scenes();
|
||||||
|
resize( spGetWindowSurface()->w, spGetWindowSurface()->h );
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
init_fonts ( void )
|
||||||
|
{
|
||||||
|
addFont("data/font/cozette-vector.ttf");
|
||||||
|
addFont("data/font/love_me_chain.ttf");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
init_scenes ( void )
|
||||||
|
{
|
||||||
|
girl = malloc(sizeof(struct eActor));
|
||||||
|
initActor(girl, "Girl");
|
||||||
|
addEmote(girl, "data/image/girls_are_weird/girl_happy.png");
|
||||||
|
addEmote(girl, "data/image/girls_are_weird/girl_bored.png");
|
||||||
|
addEmote(girl, "data/image/girls_are_weird/girl_sad.png");
|
||||||
|
|
||||||
|
addEmote(girl, "data/image/girls_are_weird/girl_angry.png");
|
||||||
|
girl->emoteSelection = GIRL_HAPPY;
|
||||||
|
|
||||||
|
mainScene = malloc(sizeof(struct eScene));
|
||||||
|
initScene(mainScene, "data/image/girls_are_weird/background.png", girl);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
init_sparrow3d ( void )
|
||||||
|
{
|
||||||
|
spSetDefaultWindowSize( 320, 240 );
|
||||||
|
spInitCore();
|
||||||
|
spCreateDefaultWindow();
|
||||||
|
spSetZSet(0);
|
||||||
|
spSetZTest(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// CLEANUP
|
||||||
|
// ============================================================================
|
||||||
|
int
|
||||||
|
cleanup ( void )
|
||||||
|
{
|
||||||
|
cleanupFonts();
|
||||||
|
spQuitCore();
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <sparrow3d.h>
|
||||||
|
|
||||||
|
#define FN_COZETTE 0
|
||||||
|
#define FN_LOVEMECHAIN 1
|
||||||
|
#define SF_TAMBORINE 0
|
||||||
|
#define SF_EEUH 1
|
||||||
|
|
||||||
|
#define GIRL_HAPPY 0
|
||||||
|
#define GIRL_BORED 1
|
||||||
|
#define GIRL_SAD 2
|
||||||
|
#define GIRL_ANGRY 3
|
||||||
|
|
||||||
|
|
||||||
|
int calc_test ( Uint32 );
|
||||||
|
void draw_test ( void );
|
||||||
|
void draw_scene ( void );
|
||||||
|
void draw_hud ( void );
|
||||||
|
void resize ( Uint16, Uint16 );
|
||||||
|
|
||||||
|
int init ( void );
|
||||||
|
|
||||||
|
void init_scenes ( void );
|
||||||
|
void init_images ( void );
|
||||||
|
void init_fonts ( void );
|
||||||
|
void init_sparrow3d ( void );
|
||||||
|
|
||||||
|
int cleanup ( void );
|
|
@ -41,7 +41,7 @@ draw_test ( void )
|
||||||
spClearTarget( spGetRGB(64,64,64) );
|
spClearTarget( spGetRGB(64,64,64) );
|
||||||
spSelectRenderTarget(spGetWindowSurface());
|
spSelectRenderTarget(spGetWindowSurface());
|
||||||
|
|
||||||
drawMenu ( testMenu->surface, testMenu );
|
drawMenu ( testMenu );
|
||||||
spBlitSurface( spGetWindowSurface()->w/2, spGetWindowSurface()->h/2, 0,
|
spBlitSurface( spGetWindowSurface()->w/2, spGetWindowSurface()->h/2, 0,
|
||||||
testMenu->surface );
|
testMenu->surface );
|
||||||
|
|
||||||
|
|