ReC98/th05/main/dialog/dialog.cpp

101 lines
2.5 KiB
C++

#pragma option -zPmain_01
extern "C" {
#include <stddef.h>
#include "platform.h"
#include "pc98.h"
#include "planar.h"
#include "master.hpp"
#include "th02/hardware/frmdelay.h"
#include "th03/formats/cdg.h"
#include "th04/main/playfld.hpp"
}
#include "th04/main/stage/stage.hpp"
#include "th04/sprites/main_cdg.h"
#include "th04/main/ems.hpp"
#include "th05/playchar.h"
#include "th05/formats/dialog.hpp"
#include "th05/shiftjis/fns.hpp"
#include "th05/main/dialog/dialog.hpp"
#pragma option -a2
extern char faceset_boss_format[];
extern char faceset_playchar_format[];
void pascal near dialog_face_load_unput_put_free_8(
screen_x_t left, vram_y_t top, int face_id
)
{
size_t size;
uint32_t offset;
char near *faceset_fn = faceset_boss_format;
char near *faceset_playchar_fn = faceset_playchar_format;
if(face_id != FACE_NONE) {
if(Ems) {
if(dialog_side == DIALOG_SIDE_PLAYCHAR) {
offset = EMS_FACESET_PLAYCHAR_OFFSET;
} else {
offset = EMS_FACESET_BOSS_OFFSET;
}
size = cdg_slots[CDG_DIALOG_FACE].bitplane_size;
offset += (face_id * size * (PLANE_COUNT + 1));
allocate_and_load_from_ems(
cdg_slots[CDG_DIALOG_FACE].seg_alpha(), offset, size
);
offset += size;
size *= PLANE_COUNT;
allocate_and_load_from_ems(
cdg_slots[CDG_DIALOG_FACE].seg_colors(), offset, size
);
offset += size;
} else {
if(dialog_side != DIALOG_SIDE_PLAYCHAR) {
faceset_fn[3] = ('0' + stage_id);
} else {
faceset_fn = faceset_playchar_fn;
faceset_fn[3] = ('0' + playchar);
}
cdg_load_single(CDG_DIALOG_FACE, faceset_fn, face_id);
}
}
frame_delay(1);
dialog_face_unput_8(left, top);
if(face_id != FACE_NONE) {
cdg_put_8(left, top, CDG_DIALOG_FACE);
cdg_free(CDG_DIALOG_FACE);
}
}
void near dialog_exit(void)
{
#undef BOMB_BG_REIMU_FN
#undef BOMB_BG_MARISA_FN
#undef BOMB_BG_MIMA_FN
#undef BOMB_BG_YUUKA_FN
extern const char BOMB_BG_REIMU_FN[];
extern const char BOMB_BG_MARISA_FN[];
extern const char BOMB_BG_MIMA_FN[];
extern const char BOMB_BG_YUUKA_FN[];
if(Ems) {
playchar_bomb_bg_load_from_ems();
} else {
switch(playchar) {
case PLAYCHAR_REIMU:
cdg_load_single_noalpha(CDG_BG_PLAYCHAR_BOMB, BOMB_BG_REIMU_FN, 0);
break;
case PLAYCHAR_MARISA:
cdg_load_single_noalpha(CDG_BG_PLAYCHAR_BOMB, BOMB_BG_MARISA_FN, 0);
break;
case PLAYCHAR_MIMA:
cdg_load_single_noalpha(CDG_BG_PLAYCHAR_BOMB, BOMB_BG_MIMA_FN, 0);
break;
case PLAYCHAR_YUUKA:
cdg_load_single_noalpha(CDG_BG_PLAYCHAR_BOMB, BOMB_BG_YUUKA_FN, 0);
break;
}
}
}