1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#include <newer.h>
#include <game.h>
void WriteAsciiToTextBox(nw4r::lyt::TextBox *tb, const char *source) {
int i = 0;
wchar_t buffer[1024];
while (i < 1023 && source[i]) {
buffer[i] = source[i];
i++;
}
buffer[i] = 0;
tb->SetString(buffer);
}
void getNewerLevelNumberString(int world, int level, wchar_t *dest) {
static const wchar_t *numberKinds[] = {
// 0-19 are handled by code
// To insert a picturefont character:
// \x0B\x01YY\xZZZZ
// YY is the character code, ZZZZ is ignored
L"A", // 20, alternate
L"\x0B\x0148\xBEEF", // 21, tower
L"\x0B\x0148\xBEEF" L"2", // 22, tower 2
L"\x0B\x012E\xBEEF", // 23, castle
L"\x0B\x012F\xBEEF", // 24, fortress
L"\x0B\x013D\xBEEF", // 25, final castle
L"\x0B\x014D\xBEEF", // 26, train
L"\x0B\x0132\xBEEF", // 27, airship
L"Palace", // 28, switch palace
L"\x0B\x0147\xBEEF", // 29, yoshi's house
L"\x0B\x014E\xBEEF" L"1", // 30, key 1
L"\x0B\x014E\xBEEF" L"2", // 31, key 2
L"\x0B\x014E\xBEEF" L"3", // 32, key 3
L"\x0B\x014E\xBEEF" L"4", // 33, key 4
L"\x0B\x014E\xBEEF" L"5", // 34, key 5
L"\x0B\x014E\xBEEF" L"6", // 35, key 6
L"\x0B\x0138\xBEEF", // 36, music house
L"\x0B\x0133\xBEEF", // 37, shop
L"\x0B\x0139\xBEEF", // 38, challenge house
L"\x0B\x0151\xBEEF", // 39, red switch palace
L"\x0B\x0152\xBEEF", // 40, blue switch palace
L"\x0B\x0153\xBEEF", // 41, yellow switch palace
L"\x0B\x0154\xBEEF", // 42, green switch palace
};
dest[0] = (world >= 10) ? (world-10+'A') : (world+'0');
dest[1] = '-';
if (level >= 20) {
wcscpy(&dest[2], numberKinds[level-20]);
} else if (level >= 10) {
dest[2] = '1';
dest[3] = ('0' - 10) + level;
dest[4] = 0;
} else {
dest[2] = '0' + level;
dest[3] = 0;
}
}
int getUnspentStarCoinCount() {
SaveBlock *save = GetSaveFile()->GetBlock(-1);
int coinsSpent = save->credits_hiscore;
return getStarCoinCount() - coinsSpent;
}
int getStarCoinCount() {
SaveBlock *save = GetSaveFile()->GetBlock(-1);
int coinsEarned = 0;
for (int w = 0; w < 10; w++) {
for (int l = 0; l < 42; l++) {
u32 conds = save->GetLevelCondition(w, l);
if (conds & COND_COIN1) { coinsEarned++; }
if (conds & COND_COIN2) { coinsEarned++; }
if (conds & COND_COIN3) { coinsEarned++; }
}
}
return coinsEarned;
}
|