@@ -1,6 +1,7 @@
#include "../propkg.dnh"
#include "./ingame_scenes.dnh"
#include "./loading.dnh"
#include "../system/transparent_background.dnh"

let rpi = -1;
let difficulty;
@@ -9,7 +10,7 @@ let start = 1;
let end = 6;
let mode;
let i;
let alreadyLoaded = [false, false, false, false, false, false, false];
let alreadyLoaded = [false, false, false, false, false, false, false, false];

@Initialize {
rpi = GetScriptArgument(0);
@@ -102,6 +103,11 @@ task main {
return;
}
}
if (isDedz) {
dedz(false);
endScene;
return;
}
let state = GetStageSceneState;
if (state == STAGE_STATE_FINISHED) {
let res = GetStageSceneResult;
@@ -163,4 +169,12 @@ task loadStageStats(stage, difficulty) {
"Replay", "Rank",
GetAreaCommonData("Replay", "Rank" ~ s, difficulty)
);
}

function isDedz {
return GetCommonData("Dedz", false);
}

task dedz(d) {
SetCommonData("Dedz", d);
}
@@ -109,7 +109,9 @@ task unlockCharacter(id) {
SetAreaCommonData("Cy06", "Unlocked" ~ IntToString(id), true);
}


function randomSign {
return 1 - 2 * round(rand(0, 1));
}
}

let EV_SUBMIT = EV_USER + 6;
let EV_DEDZ = EV_USER + 5;
@@ -1,86 +1,91 @@
// menu header
#include "./transparent_background.dnh"
#include "../language.dnh"
function showMenu(title, titleColor, items) {
TBackground;
PauseStageScene(true);
function createText(text, x, y) {
let obj = ObjText_Create;
ObjText_SetText(obj, text);
ObjText_SetFontSize(obj, 20);
ObjText_SetFontType(obj, S("font.dialogue"));
ObjText_SetFontColorTop(obj, 128, 255, 255);
ObjText_SetFontColorBottom(obj, 128, 255, 255);
Obj_SetRenderPriority(obj, 0.9);
ObjRender_SetPosition(obj, x, y, 1);
return obj;
}
function createTitle(text, titleColor) {
let obj = ObjText_Create;
ObjText_SetText(obj, text);
ObjText_SetFontSize(obj, 32);
ObjText_SetFontType(obj, S("font.menu"));
ObjText_SetFontColorTop(obj, titleColor[0], titleColor[1], titleColor[2]);
ObjText_SetFontColorBottom(obj, titleColor[0], titleColor[1], titleColor[2]);
Obj_SetRenderPriority(obj, 0.9);
ObjRender_SetPosition(obj, 32, 64, 1);
return obj;
}
let selected = 0;
function menuItem(i, text, x, y) {
let objText = createText(text, x, y);
let objSelect = createText(text, x, y);
ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
task fork {
while (!Obj_IsDeleted(objText)) {
Obj_SetVisible(objSelect, i == selected);
yield;
}
}
fork;
return [objText, objSelect];
}
let noItems = length(items);
let textObjs = [createTitle(title, titleColor)];
ascent (i in 0 .. noItems) {
textObjs = textObjs ~ menuItem(i, items[i], 48, 128 + 32 * i);
}
flushEsc;
let frames = 0;
loop {
if (GetVirtualKeyState(VK_OK) == KEY_PULL) {
break;
}
if (GetVirtualKeyState(VK_CANCEL) == KEY_PULL ||
GetVirtualKeyState(VK_PAUSE) == KEY_PULL) {
selected = -1;
break;
}
let up = GetVirtualKeyState(VK_UP);
let down = GetVirtualKeyState(VK_DOWN);
if (up == KEY_PUSH) {selected--;}
else if (down == KEY_PUSH) {selected++;}
else if (up == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected--;}
}
else if (down== KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected++;}
}
else {frames = 0;}
if (selected < 0) {selected = noItems - 1;}
else if (selected >= noItems) {selected = 0;}
yield;
}
ascent (i in 0 .. 2 * noItems + 1) {
Obj_Delete(textObjs[i]);
}
TStopBG;
PauseStageScene(false);
return selected;
}

function flushEsc {
while (GetVirtualKeyState(VK_PAUSE) != KEY_FREE) {yield;}
// menu header
#include "./transparent_background.dnh"
#include "../language.dnh"
function showMenu(title, titleColor, items) {
TBackground;
PauseStageScene(true);
function createText(text, x, y) {
let obj = ObjText_Create;
ObjText_SetText(obj, text);
ObjText_SetFontSize(obj, 20);
ObjText_SetFontType(obj, S("font.dialogue"));
ObjText_SetFontColorTop(obj, 128, 255, 255);
ObjText_SetFontColorBottom(obj, 128, 255, 255);
Obj_SetRenderPriority(obj, 0.9);
ObjRender_SetPosition(obj, x, y, 1);
return obj;
}
function createTitle(text, titleColor) {
let obj = ObjText_Create;
ObjText_SetText(obj, text);
ObjText_SetFontSize(obj, 32);
ObjText_SetFontType(obj, S("font.menu"));
ObjText_SetFontColorTop(obj, titleColor[0], titleColor[1], titleColor[2]);
ObjText_SetFontColorBottom(obj, titleColor[0], titleColor[1], titleColor[2]);
Obj_SetRenderPriority(obj, 0.9);
ObjRender_SetPosition(obj, 32, 64, 1);
return obj;
}
let selected = 0;
function menuItem(i, text, x, y) {
let objText = createText(text, x, y);
let objSelect = createText(text, x, y);
ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
task fork {
while (!Obj_IsDeleted(objText)) {
Obj_SetVisible(objSelect, i == selected);
yield;
}
}
fork;
return [objText, objSelect];
}
let noItems = length(items);
let textObjs = [createTitle(title, titleColor)];
ascent (i in 0 .. noItems) {
textObjs = textObjs ~ menuItem(i, items[i], 48, 128 + 32 * i);
}
flushEsc;
flushZ;
let frames = 0;
loop {
if (GetVirtualKeyState(VK_OK) == KEY_PULL) {
break;
}
if (GetVirtualKeyState(VK_CANCEL) == KEY_PULL ||
GetVirtualKeyState(VK_PAUSE) == KEY_PULL) {
selected = -1;
break;
}
let up = GetVirtualKeyState(VK_UP);
let down = GetVirtualKeyState(VK_DOWN);
if (up == KEY_PUSH) {selected--;}
else if (down == KEY_PUSH) {selected++;}
else if (up == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected--;}
}
else if (down== KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected++;}
}
else {frames = 0;}
if (selected < 0) {selected = noItems - 1;}
else if (selected >= noItems) {selected = 0;}
yield;
}
ascent (i in 0 .. 2 * noItems + 1) {
Obj_Delete(textObjs[i]);
}
TStopBG;
PauseStageScene(false);
return selected;
}

function flushEsc {
while (GetVirtualKeyState(VK_PAUSE) != KEY_FREE) {yield;}
}

function flushZ {
while (GetVirtualKeyState(VK_OK) != KEY_FREE) {yield;}
}
@@ -1,87 +1,90 @@
#include "./replay_slot.dnh"
#include "../sound.dnh"

let BACKSLASH = ToString("|" - " ");

function enterName(str) {
let name = GetAreaCommonData("Cy06", "Name", "");
let title = createTextR(str, 80, 320);
let text = createTextR(name ~ "_", 80, 400);
ObjText_SetSyntacticAnalysis(text, false);
// Okay, we're going to let players actually type in names.
function checkAndEnter(k, chara, schar) {
if (GetKeyState(k) == KEY_PUSH) {
if (k == KEY_BACK && name != "") {
name = name[0 .. length(name) - 1];
playSE("type00");
}
else if (k != KEY_BACK && length(name) < 8 && chara != "") {
name = name ~
[chara, schar][GetKeyState(KEY_LSHIFT) == KEY_HOLD || GetKeyState(KEY_RSHIFT) == KEY_HOLD];
playSE("type00");
}
ObjText_SetText(text, name ~ "_");
return true;
}
return false;
}
flushZ;
loop {
checkAndEnter(KEY_A, "a", "A");
checkAndEnter(KEY_B, "b", "B");
checkAndEnter(KEY_C, "c", "C");
checkAndEnter(KEY_D, "d", "D");
checkAndEnter(KEY_E, "e", "E");
checkAndEnter(KEY_F, "f", "F");
checkAndEnter(KEY_G, "g", "G");
checkAndEnter(KEY_H, "h", "H");
checkAndEnter(KEY_I, "i", "I");
checkAndEnter(KEY_J, "j", "J");
checkAndEnter(KEY_K, "k", "K");
checkAndEnter(KEY_L, "l", "L");
checkAndEnter(KEY_M, "m", "M");
checkAndEnter(KEY_N, "n", "N");
checkAndEnter(KEY_O, "o", "O");
checkAndEnter(KEY_P, "p", "P");
checkAndEnter(KEY_Q, "q", "Q");
checkAndEnter(KEY_R, "r", "R");
checkAndEnter(KEY_S, "s", "S");
checkAndEnter(KEY_T, "t", "T");
checkAndEnter(KEY_U, "u", "U");
checkAndEnter(KEY_V, "v", "V");
checkAndEnter(KEY_W, "w", "W");
checkAndEnter(KEY_X, "x", "X");
checkAndEnter(KEY_Y, "y", "Y");
checkAndEnter(KEY_Z, "z", "Z");
checkAndEnter(KEY_0, "0", ")");
checkAndEnter(KEY_1, "1", "!");
checkAndEnter(KEY_2, "2", "@");
checkAndEnter(KEY_3, "3", "#");
checkAndEnter(KEY_4, "4", "$");
checkAndEnter(KEY_5, "5", "%");
checkAndEnter(KEY_6, "6", "^");
checkAndEnter(KEY_7, "7", "&");
checkAndEnter(KEY_8, "8", "*");
checkAndEnter(KEY_9, "9", "(");
checkAndEnter(KEY_MINUS, "-", "_");
checkAndEnter(KEY_EQUALS, "=", "+");
checkAndEnter(KEY_SLASH, "/", "?");
checkAndEnter(KEY_SPACE, " ", " ");
checkAndEnter(KEY_LBRACKET, "[", "{");
checkAndEnter(KEY_RBRACKET, "]", "}");
checkAndEnter(KEY_SEMICOLON, ";", ":"); // Don't forget your semicolons kids!
checkAndEnter(KEY_APOSTROPHE, "'", "\"");
checkAndEnter(KEY_GRAVE, "`", "~");
checkAndEnter(KEY_COMMA, ",", "<");
checkAndEnter(KEY_PERIOD, ".", ">");
checkAndEnter(KEY_YEN, BACKSLASH, "|");
checkAndEnter(KEY_BACK, "", "");
if (checkAndEnter(KEY_RETURN, "", "")) {break;}
yield;
}
SetAreaCommonData("Cy06", "Name", name);
Obj_Delete(title);
Obj_Delete(text);
if (name == "") {return "Cen.Cyr."}
return name;
#include "./replay_slot.dnh"
#include "../sound.dnh"
#include "./transparent_background.dnh"

let BACKSLASH = ToString("|" - " ");

function enterName(str) {
TBackground;
let name = GetAreaCommonData("Cy06", "Name", "");
let title = createTextR(str, 80, 320);
let text = createTextR(name ~ "_", 80, 400);
ObjText_SetSyntacticAnalysis(text, false);
// Okay, we're going to let players actually type in names.
function checkAndEnter(k, chara, schar) {
if (GetKeyState(k) == KEY_PUSH) {
if (k == KEY_BACK && name != "") {
name = name[0 .. length(name) - 1];
playSE("type00");
}
else if (k != KEY_BACK && length(name) < 8 && chara != "") {
name = name ~
[chara, schar][GetKeyState(KEY_LSHIFT) == KEY_HOLD || GetKeyState(KEY_RSHIFT) == KEY_HOLD];
playSE("type00");
}
ObjText_SetText(text, name ~ "_");
return true;
}
return false;
}
flushZ;
loop {
checkAndEnter(KEY_A, "a", "A");
checkAndEnter(KEY_B, "b", "B");
checkAndEnter(KEY_C, "c", "C");
checkAndEnter(KEY_D, "d", "D");
checkAndEnter(KEY_E, "e", "E");
checkAndEnter(KEY_F, "f", "F");
checkAndEnter(KEY_G, "g", "G");
checkAndEnter(KEY_H, "h", "H");
checkAndEnter(KEY_I, "i", "I");
checkAndEnter(KEY_J, "j", "J");
checkAndEnter(KEY_K, "k", "K");
checkAndEnter(KEY_L, "l", "L");
checkAndEnter(KEY_M, "m", "M");
checkAndEnter(KEY_N, "n", "N");
checkAndEnter(KEY_O, "o", "O");
checkAndEnter(KEY_P, "p", "P");
checkAndEnter(KEY_Q, "q", "Q");
checkAndEnter(KEY_R, "r", "R");
checkAndEnter(KEY_S, "s", "S");
checkAndEnter(KEY_T, "t", "T");
checkAndEnter(KEY_U, "u", "U");
checkAndEnter(KEY_V, "v", "V");
checkAndEnter(KEY_W, "w", "W");
checkAndEnter(KEY_X, "x", "X");
checkAndEnter(KEY_Y, "y", "Y");
checkAndEnter(KEY_Z, "z", "Z");
checkAndEnter(KEY_0, "0", ")");
checkAndEnter(KEY_1, "1", "!");
checkAndEnter(KEY_2, "2", "@");
checkAndEnter(KEY_3, "3", "#");
checkAndEnter(KEY_4, "4", "$");
checkAndEnter(KEY_5, "5", "%");
checkAndEnter(KEY_6, "6", "^");
checkAndEnter(KEY_7, "7", "&");
checkAndEnter(KEY_8, "8", "*");
checkAndEnter(KEY_9, "9", "(");
checkAndEnter(KEY_MINUS, "-", "_");
checkAndEnter(KEY_EQUALS, "=", "+");
checkAndEnter(KEY_SLASH, "/", "?");
checkAndEnter(KEY_SPACE, " ", " ");
checkAndEnter(KEY_LBRACKET, "[", "{");
checkAndEnter(KEY_RBRACKET, "]", "}");
checkAndEnter(KEY_SEMICOLON, ";", ":"); // Don't forget your semicolons kids!
checkAndEnter(KEY_APOSTROPHE, "'", "\"");
checkAndEnter(KEY_GRAVE, "`", "~");
checkAndEnter(KEY_COMMA, ",", "<");
checkAndEnter(KEY_PERIOD, ".", ">");
checkAndEnter(KEY_YEN, BACKSLASH, "|");
checkAndEnter(KEY_BACK, "", "");
if (checkAndEnter(KEY_RETURN, "", "")) {break;}
yield;
}
SetAreaCommonData("Cy06", "Name", name);
Obj_Delete(title);
Obj_Delete(text);
if (name == "") { return S("noname"); }
TStopBG;
return name;
}
@@ -1,143 +1,151 @@
#include "../language.dnh"

let selected = 0;
let exited = false;

function selectSlot {
return selectSlotS(0);
}

function selectSlotS(idx) {
let currentPage = truncate(idx / 10);
selected = idx % 10;
exited = false;
//let noSlots = REPLAY_INDEX_DIGIT_MAX - REPLAY_INDEX_DIGIT_MIN + 1;
let noSlots = 100;
let slotsPerPage = 10;
let totalPages = max(1, truncate((noSlots - 1) / slotsPerPage)) + 1;
let slotsOnLastPage = noSlots - slotsPerPage * (totalPages - 1);
let replayTextItems = [];
ascent (i in 0 .. slotsPerPage) {
let items = menuItem(i, replayString(i + currentPage * 10), 64, 64 + 30 * i);
replayTextItems = replayTextItems ~ items;
}
flushZ;
let frames = 0;
while (!exited) {
if (GetVirtualKeyState(VK_OK) == KEY_PULL) {
break;
}
if (GetVirtualKeyState(VK_CANCEL) == KEY_PULL ||
GetVirtualKeyState(VK_PAUSE) == KEY_PULL) {
selected = -1;
currentPage = 0;
break;
}
let up = GetVirtualKeyState(VK_UP);
let down = GetVirtualKeyState(VK_DOWN);
let left = GetVirtualKeyState(VK_LEFT);
let right = GetVirtualKeyState(VK_RIGHT);
if (up == KEY_PUSH) {selected--;}
else if (down == KEY_PUSH) {selected++;}
else if (up == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected--;}
}
else if (down == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected++;}
}
if (selected < 0) {selected = slotsPerPage - 1;}
else if (selected >= slotsPerPage) {selected = 0;}
let prevPage = currentPage;
if (left == KEY_PUSH) {currentPage--; turnPage;}
else if (right == KEY_PUSH) {currentPage++; turnPage;}
else if (left == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {currentPage--; turnPage;}
}
else if (right == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {currentPage++; turnPage;}
}
else if (up == KEY_FREE && down == KEY_FREE) {frames = 0;}
if (currentPage < 0) {currentPage = totalPages - 1;}
else if (currentPage >= totalPages) {currentPage = 0;}
if (prevPage != currentPage) {
ascent (i in 0 .. slotsPerPage) {
let str = replayString(currentPage * 10 + i);
ObjText_SetText(replayTextItems[2 * i], str);
ObjText_SetText(replayTextItems[2 * i + 1], str);
}
}
yield;
}
ascent (i in 0 .. 2 * slotsPerPage) {
Obj_Delete(replayTextItems[i]);
}
return selected + 10 * currentPage;
}

function createTextR(text, x, y) {
let obj = ObjText_Create;
ObjText_SetText(obj, text);
ObjText_SetFontSize(obj, 16);
ObjText_SetFontType(obj, S("font.dialogue"));
ObjText_SetFontColorTop(obj, 128, 255, 255);
ObjText_SetFontColorBottom(obj, 128, 255, 255);
Obj_SetRenderPriority(obj, 0.9);
ObjRender_SetPosition(obj, x, y, 1);
return obj;
}

function menuItem(i, text, x, y) {
let objText = createTextR(text, x, y);
let objSelect = createTextR(text, x, y);
ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
task fork {
while (!Obj_IsDeleted(objText)) {
Obj_SetVisible(objSelect, i == selected);
yield;
}
}
fork;
return [objText, objSelect];
}

function replayString(slot) {
let base = GetCommonData("Base", 16);
let text = vtos("02s", IntToStringBase(slot, base)) ~ " ";
slot++;
if (IsValidReplayIndex(slot)) {
let scoreStringR = " " ~
IntToStringBase(min(GetReplayInfo(slot, REPLAY_TOTAL_SCORE), base ^ 14 - 1), base);
let char = GetReplayInfo(slot, REPLAY_PLAYER_NAME);
let num = atoi(char[6 .. 7]);
let com = GetReplayInfo(slot, REPLAY_COMMENT);
let coms = SplitString(com, "|");

return text ~
vtos("-8s", GetReplayInfo(slot, REPLAY_USER_NAME)) ~ " " ~
GetReplayInfo(slot, REPLAY_DATE_TIME) ~ " " ~
(scoreStringR)[(length(scoreStringR) - 14) .. length(scoreStringR)] ~ " " ~
vtos("-8s", char2) ~ " " ~
com[0..1] ~ " " ~ comR;
}
else {
return text ~ "Civoro";
}
}

#include "../language.dnh"
#include "../sound.dnh"

#include "../itsb.dnh"

function flushZ {
while (GetVirtualKeyState(VK_OK) != KEY_FREE) {yield;}
}

function flushX {
while (GetVirtualKeyState(VK_CANCEL) != KEY_FREE) {yield;}
}
#include "../language.dnh"
#include "./transparent_background.dnh"

let selected = 0;
let exited = false;

function selectSlot {
return selectSlotS(0);
}

function selectSlotS(idx) {
TBackground;
let currentPage = truncate(idx / 10);
selected = idx % 10;
exited = false;
//let noSlots = REPLAY_INDEX_DIGIT_MAX - REPLAY_INDEX_DIGIT_MIN + 1;
let noSlots = 100;
let slotsPerPage = 10;
let totalPages = max(1, truncate((noSlots - 1) / slotsPerPage)) + 1;
let slotsOnLastPage = noSlots - slotsPerPage * (totalPages - 1);
let replayTextItems = [];
ascent (i in 0 .. slotsPerPage) {
let items = menuItem(i, replayString(i + currentPage * 10), 64, 64 + 30 * i);
replayTextItems = replayTextItems ~ items;
}
flushZ;
let frames = 0;
while (!exited) {
if (GetVirtualKeyState(VK_OK) == KEY_PULL) {
break;
}
if (GetVirtualKeyState(VK_CANCEL) == KEY_PULL ||
GetVirtualKeyState(VK_PAUSE) == KEY_PULL) {
selected = -1;
currentPage = 0;
break;
}
let up = GetVirtualKeyState(VK_UP);
let down = GetVirtualKeyState(VK_DOWN);
let left = GetVirtualKeyState(VK_LEFT);
let right = GetVirtualKeyState(VK_RIGHT);
if (up == KEY_PUSH) {selected--;}
else if (down == KEY_PUSH) {selected++;}
else if (up == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected--;}
}
else if (down == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {selected++;}
}
if (selected < 0) {selected = slotsPerPage - 1;}
else if (selected >= slotsPerPage) {selected = 0;}
let prevPage = currentPage;
if (left == KEY_PUSH) {currentPage--; turnPage;}
else if (right == KEY_PUSH) {currentPage++; turnPage;}
else if (left == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {currentPage--; turnPage;}
}
else if (right == KEY_HOLD) {
frames++;
if (frames == 30 || (frames > 30 && (frames % 10 == 0))) {currentPage++; turnPage;}
}
else if (up == KEY_FREE && down == KEY_FREE) {frames = 0;}
if (currentPage < 0) {currentPage = totalPages - 1;}
else if (currentPage >= totalPages) {currentPage = 0;}
if (prevPage != currentPage) {
ascent (i in 0 .. slotsPerPage) {
let str = replayString(currentPage * 10 + i);
ObjText_SetText(replayTextItems[2 * i], str);
ObjText_SetText(replayTextItems[2 * i + 1], str);
}
}
yield;
}
ascent (i in 0 .. 2 * slotsPerPage) {
Obj_Delete(replayTextItems[i]);
}
TStopBG;
return selected + 10 * currentPage;
}

function createTextR(text, x, y) {
let obj = ObjText_Create;
ObjText_SetText(obj, text);
ObjText_SetFontSize(obj, 16);
ObjText_SetFontType(obj, S("font.score"));
ObjText_SetFontColorTop(obj, 128, 255, 255);
ObjText_SetFontColorBottom(obj, 128, 255, 255);
Obj_SetRenderPriority(obj, 0.9);
ObjRender_SetPosition(obj, x, y, 1);
return obj;
}

function menuItem(i, text, x, y) {
let objText = createTextR(text, x, y);
let objSelect = createTextR(text, x, y);
ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
task fork {
while (!Obj_IsDeleted(objText)) {
Obj_SetVisible(objSelect, i == selected);
yield;
}
}
fork;
return [objText, objSelect];
}

function replayString(slot) {
let base = GetCommonData("Base", 16);
let text = vtos("02s", IntToStringBase(slot, base)) ~ " ";
slot++;
if (IsValidReplayIndex(slot)) {
let scoreStringR = " " ~
IntToStringBase(min(GetReplayInfo(slot, REPLAY_TOTAL_SCORE), base ^ 14 - 1), base);
let char = GetReplayInfo(slot, REPLAY_PLAYER_NAME);
let num = atoi(char[6 .. 7]);
let com = GetReplayInfo(slot, REPLAY_COMMENT);
let coms = SplitString(com, "|");
let charL = S("replay.c" ~ IntToString(num / 2));
let charR = S("replay." ~ ["a", "b"][num % 2]);
let char2 = charL ~ charR;
let comR = com[1..length(com)];
if (comR == "Stage 7") {comR = "Extra";}
else if (comR == "Stage 8") {comR = "Phantasm";}
return text ~
vtos("-8s", GetReplayInfo(slot, REPLAY_USER_NAME)) ~ " " ~
GetReplayInfo(slot, REPLAY_DATE_TIME) ~ " " ~
(scoreStringR)[(length(scoreStringR) - 14) .. length(scoreStringR)] ~ " " ~
vtos("-8s", char2) ~ " " ~
com[0..1] ~ " " ~ comR;
}
else {
return text ~ "Civoro";
}
}

#include "../language.dnh"
#include "../sound.dnh"

#include "../itsb.dnh"

function flushZ {
while (GetVirtualKeyState(VK_OK) != KEY_FREE) {yield;}
}

function flushX {
while (GetVirtualKeyState(VK_CANCEL) != KEY_FREE) {yield;}
}
function turnPage {playSE("paper00");}
@@ -33,6 +33,7 @@ let cwd = GetCurrentScriptDirectory;
currentFps;
replayFps;
mech;
pollForGameOver;
}

@Event {
@@ -270,4 +271,32 @@ task replayFps {
ObjText_SetText(objText, text);
yield;
}
}

#include "./transparent_background.dnh"

task pollForGameOver {
yield;
loop {
if (GetPlayerLife < 0 || GetVirtualKeyState(VK_USER2) == KEY_PUSH) {
SetPlayerLife(-1);
submitScore;
}
yield;
}
}

function submitScore {
SetCommonData("pauseblocked", true);
if (getMode == MODE_ALL && !IsReplay) {
WriteLog(getCharacter);
WriteLog(getDifficulty);
WriteLog(GetCommonData("Stage", 1));
WriteLog(GetScore);
NotifyEventAll(EV_SUBMIT, [getCharacter, getDifficulty, GetCommonData("Stage", 1), GetScore]);
while (!GetCommonData("HSSubmitDone", false)) {yield;}
}
SetCommonData("Dedz", true);
SetCommonData("HSSubmitDone", false);
CloseStgScene;
}
@@ -1,64 +1,18 @@
// The default TBackground task, slightly modified for our use.

task TBackground {
SetCommonData("KillBG", false);
task TVertex(i, left, top, right, bottom) {
ObjPrim_SetVertexPosition(obj, i + 0, left, top, 0);
ObjPrim_SetVertexPosition(obj, i + 1, left, bottom, 0);
ObjPrim_SetVertexPosition(obj, i + 2, right, top, 0);
ObjPrim_SetVertexPosition(obj, i + 3, right, top, 0);
ObjPrim_SetVertexPosition(obj, i + 4, left, bottom, 0);
ObjPrim_SetVertexPosition(obj, i + 5, right, bottom, 0);
ObjPrim_SetVertexUVT(obj, i + 0, left, top);
ObjPrim_SetVertexUVT(obj, i + 1, left, bottom);
ObjPrim_SetVertexUVT(obj, i + 2, right, top);
ObjPrim_SetVertexUVT(obj, i + 3, right, top);
ObjPrim_SetVertexUVT(obj, i + 4, left, bottom);
ObjPrim_SetVertexUVT(obj, i + 5, right, bottom);
if (left >= 32 && right <= 416 && top >=16 && bottom <= 464) {
let alpha = 255;
while (alpha >= 128) {
ObjPrim_SetVertexAlpha(obj, i + 0, alpha);
ObjPrim_SetVertexAlpha(obj, i + 1, alpha/2);
ObjPrim_SetVertexAlpha(obj, i + 2, alpha/2);
ObjPrim_SetVertexAlpha(obj, i + 3, alpha/2);
ObjPrim_SetVertexAlpha(obj, i + 4, alpha/2);
ObjPrim_SetVertexAlpha(obj, i + 5, alpha);
alpha -= 255 / frame;
yield;
}
}
}
let frame = 30;
let countH = 20;
let countV = 30;
let width = 640 / countH;
let height = 480 / countV;
let target = GetTransitionRenderTargetName;
let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D);
ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);
ObjPrim_SetVertexCount(obj, countH * countV * 6);
Obj_SetRenderPriorityI(obj, 0);
ObjPrim_SetTexture(obj, target);
ascent (ix in 0.. countH) {
ascent (iy in 0.. countV) {
let i = (ix + iy * countH) * 6;
let left = ix * width;
let right = left + width;
let top = iy * height;
let bottom = top + height;
TVertex(i, left, top, right, bottom);
}
}
while (!isBGStopped) {yield;}
Obj_Delete(obj);
}

function isBGStopped {
return GetCommonData("KillBG", false);
}

task TStopBG {
WriteLog("BG killed");
SetCommonData("KillBG", true);
}
// The default TBackground task, slightly modified for our use.

task TBackground {
let obgct = getBGCt;
SetCommonData("BGCt", obgct + 1);
}

function getBGCt {
return GetCommonData("BGCt", 0);
}

task TStopBG {
WriteLog("BG killed");
if (getBGCt == 0) {
RaiseError("No backgrounds to delete!");
}
SetCommonData("BGCt", getBGCt - 1);
}