Added fade.

This commit is contained in:
2022-01-08 23:05:15 -08:00
parent c426d0e929
commit d9281cffe2
10 changed files with 172 additions and 20 deletions

68
src/conversation/fade.c Normal file
View File

@@ -0,0 +1,68 @@
/**
* Copyright (c) 2022 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "fade.h"
void conversationFadeToBlack() {
TIME_FUTURE = TIME_CURRENT;
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_FADE_TO_BLACK;
}
void conversationFadeFromBlack() {
TIME_FUTURE = TIME_CURRENT;
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_FADE_FROM_BLACK;
}
void conversationFadeToWhite() {
TIME_FUTURE = TIME_CURRENT;
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_FADE_TO_WHITE;
}
void conversationFadeFromWhite() {
TIME_FUTURE = TIME_CURRENT;
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_FADE_FROM_WHITE;
}
void conversationFadeUpdate() {
uint16_t diff;
if(
TIME_FUTURE_TYPE < TIME_FUTURE_TYPE_FADE_TO_BLACK ||
TIME_FUTURE_TYPE > TIME_FUTURE_TYPE_FADE_FROM_WHITE
) return;
diff = TIME_CURRENT - TIME_FUTURE;
// Now we work out the steps. Time is measured in steps which are made of
// parts of a second.
if(diff == FADE_STEP) {
// First step
BGP_REG = (
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_TO_BLACK ? COMMON_SHADE_DARK :
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_TO_WHITE ? COMMON_SHADE_BRIGHT :
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_FROM_BLACK ? COMMON_SHADE_DARKER :
COMMON_SHADE_BRIGHTER
);
} else if(diff == FADE_STEP * 2) {
// First step
BGP_REG = (
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_TO_BLACK ? COMMON_SHADE_DARKER :
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_TO_WHITE ? COMMON_SHADE_BRIGHTER :
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_FROM_BLACK ? COMMON_SHADE_DARK :
COMMON_SHADE_BRIGHT
);
} else if(diff == FADE_STEP * 3) {
// First step
BGP_REG = (
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_TO_BLACK ? COMMON_SHADE_BLACK :
TIME_FUTURE_TYPE == TIME_FUTURE_TYPE_FADE_TO_WHITE ? COMMON_SHADE_WHITE :
COMMON_SHADE_NORMAL
);
} else if(diff == FADE_STEP * 4) {
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_NULL;
conversationQueueNext();
}
}

21
src/conversation/fade.h Normal file
View File

@@ -0,0 +1,21 @@
/**
* Copyright (c) 2022 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "../libs.h"
#include "queue.h"
#include "pause.h"
#include "../display/common.h"
// There are 4 total shades, so this is all 4 shades in a second.
#define FADE_STEP TIME_PER_SECOND / COMMON_TILE_COUNT
void conversationFadeToBlack();
void conversationFadeFromBlack();
void conversationFadeToWhite();
void conversationFadeFromWhite();
void conversationFadeUpdate();

View File

@@ -7,18 +7,16 @@
#include "pause.h" #include "pause.h"
uint16_t PAUSE_END;
void conversationPauseInit() {
PAUSE_END = 0;
}
void conversationPause(uint16_t duration) { void conversationPause(uint16_t duration) {
PAUSE_END = TIME_CURRENT + (duration * TIME_PER_SECOND); TIME_FUTURE = TIME_CURRENT + (duration * TIME_PER_SECOND);
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_PAUSE;
} }
void conversationPauseUpdate() { void conversationPauseUpdate() {
if(PAUSE_END == 0 || TIME_CURRENT != PAUSE_END) return; if(TIME_FUTURE_TYPE != TIME_FUTURE_TYPE_PAUSE || TIME_CURRENT != TIME_FUTURE) {
return;
}
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_NULL;
conversationQueueNext(); conversationQueueNext();
PAUSE_END = 0;
} }

View File

@@ -10,8 +10,5 @@
#include "../time.h" #include "../time.h"
#include "queue.h" #include "queue.h"
extern uint16_t PAUSE_END;
void conversationPauseInit();
void conversationPause(uint16_t duration); void conversationPause(uint16_t duration);
void conversationPauseUpdate(); void conversationPauseUpdate();

View File

@@ -8,6 +8,7 @@
#include "queue.h" #include "queue.h"
#include "pause.h" #include "pause.h"
#include "textbox.h" #include "textbox.h"
#include "fade.h"
uint16_t QUEUE_ITEM; uint16_t QUEUE_ITEM;
@@ -19,18 +20,35 @@ void conversationQueueNext() {
BGB_printf("Queue item: %d\n", QUEUE_ITEM); BGB_printf("Queue item: %d\n", QUEUE_ITEM);
switch(QUEUE_ITEM) { switch(QUEUE_ITEM) {
// case 0:
// conversationTextboxSetText(STR_POKER_GAME_START_DATA, STR_POKER_GAME_START_LENGTH);
// conversationPause(3);
// QUEUE_ITEM++;
// break;
case 0: case 0:
conversationTextboxSetText(STR_POKER_GAME_START_DATA, STR_POKER_GAME_START_LENGTH); conversationFadeToBlack();
QUEUE_ITEM++; QUEUE_ITEM++;
break; break;
case 1: case 1:
conversationPause(3); conversationFadeFromBlack();
QUEUE_ITEM++; QUEUE_ITEM++;
break; break;
case 2: case 2:
conversationTextboxSetText(STR_POKER_GAME_START_DATA, STR_POKER_GAME_START_LENGTH); conversationFadeToWhite();
QUEUE_ITEM++;
break; break;
case 3:
conversationFadeFromWhite();
QUEUE_ITEM++;
break;
// case 2:
// conversationTextboxSetText(STR_POKER_GAME_START_DATA, STR_POKER_GAME_START_LENGTH);
// QUEUE_ITEM++;
// break;
} }
} }

View File

@@ -15,6 +15,23 @@
#define COMMON_TILE_2 0x02 #define COMMON_TILE_2 0x02
#define COMMON_TILE_3 0x03 #define COMMON_TILE_3 0x03
// Shades are mapped where each set of 4 colors is mapped to two bits that will
// specify its darkness. Higher = Darker, Lower = Brighter
// 11 11 11 11
#define COMMON_SHADE_BLACK 0xFF
// 11 11 11 10
#define COMMON_SHADE_DARKER 0xFE
// 11 11 10 01
#define COMMON_SHADE_DARK 0xF9
// 11 10 01 00
#define COMMON_SHADE_NORMAL 0xE4
// 10 01 00 00
#define COMMON_SHADE_BRIGHT 0x90
// 01 00 00 00
#define COMMON_SHADE_BRIGHTER 0x40
// 00 00 00 00
#define COMMON_SHADE_WHITE 0x00
extern const uint8_t COMMON_TILES[]; extern const uint8_t COMMON_TILES[];
void commonTilesInit(); void commonTilesInit();

View File

@@ -6,6 +6,7 @@
*/ */
#include "main.h" #include "main.h"
#include "SM.h"
void main() { void main() {
int16_t j; int16_t j;
@@ -21,13 +22,12 @@ void main() {
initarand(DIV_REG); initarand(DIV_REG);
// Prepare time and input // Prepare time and input
TIME_CURRENT = 0;
INPUT_STATE = joypad(); INPUT_STATE = joypad();
// Init things // Init things
timeInit();
commonTilesInit(); commonTilesInit();
conversationTextboxInit(); conversationTextboxInit();
conversationPauseInit();
conversationQueueInit(); conversationQueueInit();
pokerInit(); pokerInit();
@@ -37,6 +37,12 @@ void main() {
SCX_REG = 0x00; SCX_REG = 0x00;
SCY_REG = 0x00; SCY_REG = 0x00;
set_bkg_data(SM_DATA_POSITION, SM_IMAGE_TILES, SM_IMAGE);
uint8_t sm[SM_IMAGE_TILES];
for(j = 0; j < SM_IMAGE_TILES; j++) sm[j] = j + SM_DATA_POSITION;
set_bkg_tiles(0x00, 0x00, SM_IMAGE_COLUMNS, SM_IMAGE_ROWS, sm);
// Now turn the screen on // Now turn the screen on
DISPLAY_ON; DISPLAY_ON;
enable_interrupts(); enable_interrupts();
@@ -55,8 +61,9 @@ void main() {
conversationTextboxUpdate(); conversationTextboxUpdate();
conversationPauseUpdate(); conversationPauseUpdate();
conversationFadeUpdate();
// Tick time. // Tick time.
TIME_CURRENT++; timeUpdate();
} }
} }

View File

@@ -13,6 +13,7 @@
#include "display/common.h" #include "display/common.h"
#include "display/tilemap.h" #include "display/tilemap.h"
#include "poker/poker.h" #include "poker/poker.h"
#include "conversation/fade.h"
#include "conversation/pause.h" #include "conversation/pause.h"
#include "conversation/queue.h" #include "conversation/queue.h"
#include "conversation/textbox.h" #include "conversation/textbox.h"

View File

@@ -8,3 +8,15 @@
#include "time.h" #include "time.h"
uint16_t TIME_CURRENT; uint16_t TIME_CURRENT;
uint16_t TIME_FUTURE;
uint8_t TIME_FUTURE_TYPE;
void timeInit() {
TIME_CURRENT = 0;
TIME_FUTURE = 0;
TIME_FUTURE_TYPE = TIME_FUTURE_TYPE_NULL;
}
void timeUpdate() {
TIME_CURRENT++;
}

View File

@@ -9,4 +9,17 @@
#include "libs.h" #include "libs.h"
#define TIME_PER_SECOND 60 #define TIME_PER_SECOND 60
#define TIME_FUTURE_TYPE_NULL 0x00
#define TIME_FUTURE_TYPE_PAUSE 0x01
#define TIME_FUTURE_TYPE_FADE_TO_BLACK 0x02
#define TIME_FUTURE_TYPE_FADE_FROM_BLACK 0x03
#define TIME_FUTURE_TYPE_FADE_TO_WHITE 0x04
#define TIME_FUTURE_TYPE_FADE_FROM_WHITE 0x05
extern uint16_t TIME_CURRENT; extern uint16_t TIME_CURRENT;
extern uint16_t TIME_FUTURE;
extern uint8_t TIME_FUTURE_TYPE;
void timeInit();
void timeUpdate();