mirror of https://github.com/nmlgc/ReC98.git
95 lines
2.4 KiB
C++
95 lines
2.4 KiB
C++
#pragma option -zPmain_01
|
|
|
|
extern "C" {
|
|
#include <stddef.h>
|
|
#include "platform.h"
|
|
#include "pc98.h"
|
|
#include "planar.h"
|
|
#include "master.hpp"
|
|
#include "th03/formats/cdg.h"
|
|
#include "th04/common.h"
|
|
#include "th04/main/playfld.hpp"
|
|
#include "th04/main/stage/stage.hpp"
|
|
#include "th04/sprites/main_cdg.h"
|
|
}
|
|
#include "th04/shiftjis/fns.hpp"
|
|
#include "th04/playchar.h"
|
|
#include "th04/main/ems.hpp"
|
|
#include "th04/main/dialog/dialog.hpp"
|
|
|
|
void near dialog_init(void)
|
|
{
|
|
#undef FACESET_REIMU_FN
|
|
#undef FACESET_MARISA_FN
|
|
#define FACESET_REIMU_FN FACESET_REIMU_FN_1
|
|
#define FACESET_MARISA_FN FACESET_MARISA_FN_1
|
|
extern const char FACESET_REIMU_FN[];
|
|
extern const char FACESET_MARISA_FN[];
|
|
|
|
cdg_free(CDG_BG_PLAYCHAR_BOMB);
|
|
|
|
if(Ems) {
|
|
uint32_t offset = EMS_FACESET_PLAYCHAR_OFFSET;
|
|
size_t size = cdg_slots[CDG_FACESET_PLAYCHAR].bitplane_size;
|
|
int slot = CDG_FACESET_PLAYCHAR;
|
|
while(slot < (CDG_FACESET_PLAYCHAR_last + 1)) {
|
|
allocate_and_load_from_ems(
|
|
cdg_slots[slot].seg_alpha(), offset, size
|
|
);
|
|
offset += size;
|
|
size *= PLANE_COUNT;
|
|
allocate_and_load_from_ems(
|
|
cdg_slots[slot].seg_colors(), offset, size
|
|
);
|
|
offset += size;
|
|
size /= PLANE_COUNT;
|
|
slot++;
|
|
}
|
|
} else {
|
|
main_cdg_load_faceset_playchar();
|
|
}
|
|
}
|
|
|
|
void near dialog_exit(void)
|
|
{
|
|
#undef BOMB_BG_REIMU_FN
|
|
#undef BOMB_BG_MARISA_FN
|
|
#undef FACESET_MUGETSU_DEFEAT_FN
|
|
#undef FACESET_GENGETSU_DEFEAT_FN
|
|
extern const char BOMB_BG_REIMU_FN[];
|
|
extern const char BOMB_BG_MARISA_FN[];
|
|
extern const char FACESET_MUGETSU_DEFEAT_FN[];
|
|
extern const char FACESET_GENGETSU_DEFEAT_FN[];
|
|
|
|
int i;
|
|
|
|
for(i = CDG_FACESET_PLAYCHAR; i < (CDG_FACESET_PLAYCHAR_last + 1); i++) {
|
|
cdg_free(i);
|
|
}
|
|
if(stage_id == STAGE_EXTRA) {
|
|
// MODDERS: This assumes that BSS6.CD2, BSS7.CD2, and BSS8.CD2 each
|
|
// have at most 3 slots, rather than up to FACESET_BOSS_COUNT.
|
|
for(i = CDG_FACESET_BOSS; i < (CDG_FACESET_BOSS + 3); i++) {
|
|
cdg_free(i);
|
|
}
|
|
|
|
// What's a function parameter? :zunpet:
|
|
extern uint8_t number_of_calls_to_this_function_during_extra;
|
|
if((number_of_calls_to_this_function_during_extra++) == 0) {
|
|
cdg_load_all(CDG_FACESET_BOSS, FACESET_MUGETSU_DEFEAT_FN);
|
|
} else {
|
|
cdg_load_all(CDG_FACESET_BOSS, FACESET_GENGETSU_DEFEAT_FN);
|
|
}
|
|
}
|
|
|
|
if(Ems) {
|
|
playchar_bomb_bg_load_from_ems();
|
|
} else {
|
|
if(playchar == PLAYCHAR_REIMU) {
|
|
cdg_load_single_noalpha(CDG_BG_PLAYCHAR_BOMB, BOMB_BG_REIMU_FN, 0);
|
|
} else {
|
|
cdg_load_single_noalpha(CDG_BG_PLAYCHAR_BOMB, BOMB_BG_MARISA_FN, 0);
|
|
}
|
|
}
|
|
}
|