I LOVE STEALING PIRACY STEALING LURAICHU'S CODE FROM RECSBR - https://github.com/BTTRG/recsbr

This commit is contained in:
DG 2022-11-03 15:19:42 -04:00
parent 88b7892c26
commit 3bedf7136a
27 changed files with 501 additions and 234 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -7,10 +7,11 @@
#include "Draw.h" #include "Draw.h"
#include "Game.h" #include "Game.h"
#include "Triangle.h" #include "Triangle.h"
#include "Map.h"
CARET gCrt[CARET_MAX]; CARET gCrt[CARET_MAX];
CARET_TABLE gCaretTable[18] = { CARET_TABLE gCaretTable[24] = {
{0, 0}, {0, 0},
{0x800, 0x800}, {0x800, 0x800},
{0x1000, 0x1000}, {0x1000, 0x1000},
@ -28,7 +29,13 @@ CARET_TABLE gCaretTable[18] = {
{0x2800, 0x2800}, {0x2800, 0x2800},
{0x800, 0x800}, {0x800, 0x800},
{0x2800, 0x800}, {0x2800, 0x800},
{0x6800, 0x800} {0x6800, 0x800},
{0x1000, 0x1000},
{0x1000, 0x1000},
{0x1000, 0x1000},
{0x800, 0x800},
{0x800, 0x800},
{0x800, 0x800},
}; };
void InitCaret(void) void InitCaret(void)
@ -249,7 +256,7 @@ void ActCaret05(CARET *crt)
crt->rect = rect[crt->ani_no]; crt->rect = rect[crt->ani_no];
} }
void ActCaret07(CARET *crt) void ActCaret07(CARET *crt) // Booster smoke
{ {
RECT rcLeft[7] = { RECT rcLeft[7] = {
{56, 0, 64, 8}, {56, 0, 64, 8},
@ -401,16 +408,20 @@ void ActCaret11(CARET *crt)
void ActCaret12(CARET *crt) void ActCaret12(CARET *crt)
{ {
RECT rcLeft[2] = { RECT rcLeft[5] = {
{0, 193, 32, 225},
{112, 0, 144, 32}, {112, 0, 144, 32},
{64, 192, 96, 225},
{144, 0, 176, 32}, {144, 0, 176, 32},
//{144, 192, 176, 225},
{184, 192, 216, 225},
}; };
if (++crt->ani_wait > 2) if (++crt->ani_wait > 2)
{ {
crt->ani_wait = 0; crt->ani_wait = 0;
if (++crt->ani_no > 1) if (++crt->ani_no > 4)
{ {
crt->cond = 0; crt->cond = 0;
#ifdef FIX_BUGS #ifdef FIX_BUGS
@ -549,8 +560,191 @@ void ActCaret17(CARET *crt)
crt->rect = rcLeft[1]; crt->rect = rcLeft[1];
} }
void ActCaret18(CARET* crt)
{
RECT rcLeft[7] = {
{0, 153, 16, 169},
{16, 153, 32, 169},
{32, 153, 48, 169},
{48, 153, 64, 169},
{64, 153, 80, 169},
{80, 153, 96, 169},
{96, 153, 112, 169}
};
switch (crt->act_no)
{
case 0:
crt->ym = Random(-0x500, 0x500);
crt->xm = Random(-0x500, 0x500);
crt->act_no = 1;
case 1:
crt->ym += 0x20;
crt->rect = rcLeft[crt->ani_no];
break;
}
crt->x += crt->xm;
crt->y += crt->ym;
//crt->rect = rcLeft[0];
crt->rect = rcLeft[crt->ani_no];
if (++crt->ani_wait > 6) // Animation counter, how many frames until we advance to next frame
{
crt->ani_wait = 0; // Reset counter
++crt->ani_no; // Increase animation frame by one
}
if (crt->ani_no > 6)
{
crt->cond = 0;
return;
}
}
void ActCaret19(CARET* crt)
{
RECT rect[4] = {
{112, 32, 128, 48},
{128, 32, 144, 48},
{144, 32, 160, 48},
{160, 32, 176, 48},
};
if (++crt->ani_wait > 2)
{
crt->ani_wait = 0;
if (++crt->ani_no > 3)
{
crt->cond = 0;
#ifdef FIX_BUGS
return; // The code below will use 'ani_no' to access 'rect', even though it's now too high
#endif
}
}
crt->rect = rect[crt->ani_no];
}
void ActCaret20(CARET* crt) // Splash caret
{
RECT rect[4] = {
{0, 65, 8, 72},
{8, 65, 16, 72},
{16, 65, 24, 72},
{24, 65, 32, 72},
};
//crt->ym += 0x20;
//crt->ani_no = Random(0, 4);
crt->rect = rect[crt->ani_no];
if (++crt->ani_wait > 6) // Animation counter, how many frames until we advance to next frame
{
crt->ani_wait = 0; // Reset counter
++crt->ani_no; // Increase animation frame by one
}
if (crt->ani_no > 3)
{
crt->ani_no = 3;
crt->cond = 0;
}
switch (crt->act_no)
{
case 0:
crt->ym = Random(-0x200, 0x80);
crt->xm = Random(-0x200, 0x200);
crt->act_no = 1;
case 1:
crt->ym += 0x20;
crt->rect = rect[crt->ani_no];
break;
}
if (crt->ym > 0x5FF)
crt->ym = 0x5FF;
crt->x += crt->xm;
crt->y += crt->ym;
crt->rect = rect[crt->ani_no];
if (crt->direct == 2)
{
crt->rect.top += 2;
crt->rect.bottom += 2;
}
/*if (++crt->act_wait > 10)
{
if (crt->flag & 1)
crt->cond = 0;
if (crt->flag & 4)
crt->cond = 0;
if (crt->flag & 8)
crt->cond = 0;
if (crt->flag & 0x100)
crt->cond = 0;
}*/
if (crt->y > gMap.length * 0x200 * 0x10)
crt->cond = 0;
}
void ActCaret21(CARET* crt)
{
RECT rect[1] = {
{128, 120, 136, 128},
};
if (++crt->count1 > 30)
crt->cond = 0;
if (crt->count1 < 3)
crt->ym = -8 * 0x200;
else
crt->ym = 0;
crt->y += crt->ym;
crt->rect = rect[crt->ani_no];
}
// I FUCKING HATE THIS
void ActCaret22(CARET* crt)
{
RECT rect[1] = {
{136, 120, 144, 128},
};
if (++crt->count1 > 30)
crt->cond = 0;
if (crt->count1 < 3)
crt->ym = -8 * 0x200;
else
crt->ym = 0;
crt->y += crt->ym;
crt->rect = rect[crt->ani_no];
}
void ActCaret23(CARET* crt)
{
RECT rect[1] = {
{144, 120, 152, 128},
};
if (++crt->count1 > 30)
crt->cond = 0;
if (crt->count1 < 3)
crt->ym = -8 * 0x200;
else
crt->ym = 0;
crt->y += crt->ym;
crt->rect = rect[crt->ani_no];
}
typedef void (*CARETFUNCTION)(CARET*); typedef void (*CARETFUNCTION)(CARET*);
CARETFUNCTION gpCaretFuncTbl[18] = CARETFUNCTION gpCaretFuncTbl[24] =
{ {
ActCaret00, ActCaret00,
ActCaret01, ActCaret01,
@ -570,6 +764,12 @@ CARETFUNCTION gpCaretFuncTbl[18] =
ActCaret15, ActCaret15,
ActCaret16, ActCaret16,
ActCaret17, ActCaret17,
ActCaret18,
ActCaret19,
ActCaret20,
ActCaret21,
ActCaret22,
ActCaret23,
}; };
void ActCaret(void) void ActCaret(void)

View file

@ -2,7 +2,7 @@
#include "WindowsWrapper.h" #include "WindowsWrapper.h"
#define CARET_MAX 0x40 #define CARET_MAX 0x43
struct CARET_TABLE struct CARET_TABLE
{ {
@ -25,11 +25,13 @@ struct CARET
int ani_wait; int ani_wait;
int view_left; int view_left;
int view_top; int view_top;
int count1;
int count2;
RECT rect; RECT rect;
}; };
extern CARET gCrt[CARET_MAX]; extern CARET gCrt[CARET_MAX];
extern CARET_TABLE gCaretTable[18]; extern CARET_TABLE gCaretTable[24];
void InitCaret(void); void InitCaret(void);
void ActCaret(void); void ActCaret(void);

View file

@ -748,6 +748,7 @@ static int ModeAction(void)
if (g_GameFlags & 2) if (g_GameFlags & 2)
{ {
PutMyLife(TRUE); PutMyLife(TRUE);
PutCion();
PutArmsEnergy(TRUE); PutArmsEnergy(TRUE);
PutMyAir((WINDOW_WIDTH / 2) - 40, (WINDOW_HEIGHT / 2) - 16); PutMyAir((WINDOW_WIDTH / 2) - 40, (WINDOW_HEIGHT / 2) - 16);
PutActiveArmsList(); PutActiveArmsList();

View file

@ -19,7 +19,8 @@
enum enum
{ {
SOUND_TYPE_PIXTONE, SOUND_TYPE_PIXTONE,
SOUND_TYPE_OTHER SOUND_TYPE_OTHER,
SOUND_TYPE_DABABYAUDIO
}; };
static const struct static const struct
@ -28,93 +29,94 @@ static const struct
const char *path; const char *path;
int type; int type;
} ptp_table[] = { } ptp_table[] = {
// TODO - Name the files // TODO - Remove names
{1, "PixTone/001.pxt", SOUND_TYPE_PIXTONE}, {1, "PixTone/007.pxt", SOUND_TYPE_PIXTONE}, //menu move blip
{2, "PixTone/002.pxt", SOUND_TYPE_PIXTONE}, {2, "Wav/Message.wav", SOUND_TYPE_OTHER}, //msg blip
{3, "PixTone/003.pxt", SOUND_TYPE_PIXTONE}, {3, "PixTone/003.pxt", SOUND_TYPE_PIXTONE}, //bonkhead
{4, "PixTone/004.pxt", SOUND_TYPE_PIXTONE}, {4, "PixTone/004.pxt", SOUND_TYPE_PIXTONE}, //switch weapon
{5, "PixTone/005.pxt", SOUND_TYPE_PIXTONE}, {5, "Wav/YesNo.wav", SOUND_TYPE_OTHER}, //menu prompt
{6, "PixTone/006.pxt", SOUND_TYPE_PIXTONE}, {6, "PixTone/006.pxt", SOUND_TYPE_PIXTONE}, //critter hop(?)
{7, "PixTone/007.pxt", SOUND_TYPE_PIXTONE}, {7, "PixTone/007.pxt", SOUND_TYPE_PIXTONE}, //nothing, DO NOT EDIT OR I'LL KILL YOU
{11, "PixTone/011.pxt", SOUND_TYPE_PIXTONE}, {11, "PixTone/011.pxt", SOUND_TYPE_PIXTONE},//swell sound, used in ballos fight
{12, "PixTone/012.pxt", SOUND_TYPE_PIXTONE}, {12, "PixTone/012.pxt", SOUND_TYPE_PIXTONE},//door
{14, "PixTone/014.pxt", SOUND_TYPE_PIXTONE}, {14, "PixTone/045.pxt", SOUND_TYPE_PIXTONE},//destroy snack block
{15, "PixTone/015.pxt", SOUND_TYPE_PIXTONE}, {15, "PixTone/015.pxt", SOUND_TYPE_PIXTONE},//touch exp dorito
{16, "PixTone/016.pxt", SOUND_TYPE_PIXTONE}, {16, "Wav/Hurt.wav", SOUND_TYPE_OTHER},//jump
{17, "PixTone/017.pxt", SOUND_TYPE_PIXTONE}, {17, "PixTone/007.pxt", SOUND_TYPE_PIXTONE},//hurt
{18, "PixTone/018.pxt", SOUND_TYPE_PIXTONE}, {18, "Wav/Select.wav", SOUND_TYPE_OTHER},//RIP
{20, "PixTone/020.pxt", SOUND_TYPE_PIXTONE}, {20, "PixTone/020.pxt", SOUND_TYPE_PIXTONE},//menu select
{21, "PixTone/021.pxt", SOUND_TYPE_PIXTONE}, {21, "PixTone/021.pxt", SOUND_TYPE_PIXTONE},//health refill
{22, "PixTone/022.pxt", SOUND_TYPE_PIXTONE}, {22, "PixTone/022.pxt", SOUND_TYPE_PIXTONE},//bubble
{23, "PixTone/023.pxt", SOUND_TYPE_PIXTONE}, {23, "PixTone/023.pxt", SOUND_TYPE_PIXTONE},//chest open
{24, "PixTone/024.pxt", SOUND_TYPE_PIXTONE}, {24, "PixTone/024.pxt", SOUND_TYPE_PIXTONE},//quote thud
{25, "PixTone/025.pxt", SOUND_TYPE_PIXTONE}, {25, "PixTone/025.pxt", SOUND_TYPE_PIXTONE},//walking
{26, "PixTone/026.pxt", SOUND_TYPE_PIXTONE}, {26, "PixTone/026.pxt", SOUND_TYPE_PIXTONE},//funne explosion!
{27, "PixTone/027.pxt", SOUND_TYPE_PIXTONE}, {27, "PixTone/027.pxt", SOUND_TYPE_PIXTONE},//quake (BOMMMMMMM)
{28, "PixTone/028.pxt", SOUND_TYPE_PIXTONE}, {28, "PixTone/028.pxt", SOUND_TYPE_PIXTONE},//level up
{29, "PixTone/029.pxt", SOUND_TYPE_PIXTONE}, {29, "PixTone/029.pxt", SOUND_TYPE_PIXTONE},//shot hit
{30, "PixTone/030.pxt", SOUND_TYPE_PIXTONE}, {30, "PixTone/030.pxt", SOUND_TYPE_PIXTONE},//teleporter sound effect
{31, "PixTone/031.pxt", SOUND_TYPE_PIXTONE}, {31, "PixTone/031.pxt", SOUND_TYPE_PIXTONE},//critter jump
{32, "PixTone/032.pxt", SOUND_TYPE_PIXTONE}, {32, "PixTone/032.pxt", SOUND_TYPE_PIXTONE},//shot bounce, played when shooting an an invincible enemy (clink!)
{33, "PixTone/033.pxt", SOUND_TYPE_PIXTONE}, {33, "PixTone/033.pxt", SOUND_TYPE_PIXTONE},//polar star shot level 1-2
{34, "PixTone/034.pxt", SOUND_TYPE_PIXTONE}, {34, "PixTone/034.pxt", SOUND_TYPE_PIXTONE},//woooosh sound, I think this has something to do with a weapon
{35, "PixTone/035.pxt", SOUND_TYPE_PIXTONE}, {35, "PixTone/035.pxt", SOUND_TYPE_PIXTONE},//fireball shot
{37, "PixTone/037.pxt", SOUND_TYPE_PIXTONE}, {37, "PixTone/037.pxt", SOUND_TYPE_PIXTONE},//fat ass explosion
{38, "PixTone/038.pxt", SOUND_TYPE_PIXTONE}, {38, "PixTone/038.pxt", SOUND_TYPE_PIXTONE},//no ammo
{39, "PixTone/039.pxt", SOUND_TYPE_PIXTONE}, {39, "Wav/Shoot.wav", SOUND_TYPE_OTHER},//get item
{40, "PixTone/040.pxt", SOUND_TYPE_PIXTONE}, {40, "PixTone/040.pxt", SOUND_TYPE_PIXTONE},//labyrinth critter fire bubble (I think)
{41, "PixTone/041.pxt", SOUND_TYPE_PIXTONE}, {41, "PixTone/041.pxt", SOUND_TYPE_PIXTONE},//Waterway stream
{42, "PixTone/042.pxt", SOUND_TYPE_PIXTONE}, {42, "PixTone/042.pxt", SOUND_TYPE_PIXTONE},//get missle
{43, "PixTone/043.pxt", SOUND_TYPE_PIXTONE}, {43, "PixTone/043.pxt", SOUND_TYPE_PIXTONE},//computer bep
{44, "PixTone/044.pxt", SOUND_TYPE_PIXTONE}, {44, "PixTone/044.pxt", SOUND_TYPE_PIXTONE},//missle hit
{45, "PixTone/045.pxt", SOUND_TYPE_PIXTONE}, {45, "PixTone/045.pxt", SOUND_TYPE_PIXTONE},//xp dorito bounce
{46, "PixTone/046.pxt", SOUND_TYPE_PIXTONE}, {46, "PixTone/046.pxt", SOUND_TYPE_PIXTONE},//ironH shot fly
{47, "PixTone/047.pxt", SOUND_TYPE_PIXTONE}, {47, "PixTone/047.pxt", SOUND_TYPE_PIXTONE},//fast, short explosion (explosion2)
{48, "PixTone/048.pxt", SOUND_TYPE_PIXTONE}, {48, "PixTone/048.pxt", SOUND_TYPE_PIXTONE},//bubbler lv. 1 shot
{49, "PixTone/049.pxt", SOUND_TYPE_PIXTONE}, {49, "PixTone/049.pxt", SOUND_TYPE_PIXTONE},//lv. 3 polar star shot
{50, "PixTone/050.pxt", SOUND_TYPE_PIXTONE}, {50, "PixTone/050.pxt", SOUND_TYPE_PIXTONE},//mimiga death squeak
{51, "PixTone/051.pxt", SOUND_TYPE_PIXTONE}, {51, "Wav/EnemyHurt.wav", SOUND_TYPE_OTHER},//enemy hurt
{52, "PixTone/052.pxt", SOUND_TYPE_PIXTONE}, {52, "Wav/EnemyHurt.wav", SOUND_TYPE_OTHER},//big enemy hurt
{53, "PixTone/053.pxt", SOUND_TYPE_PIXTONE}, {53, "Wav/EnemyHurt.wav", SOUND_TYPE_OTHER},//small enemy hurt
{54, "PixTone/054.pxt", SOUND_TYPE_PIXTONE}, {54, "Wav/EnemyHurt.wav", SOUND_TYPE_OTHER},//"cool" enemy hurt
{55, "PixTone/055.pxt", SOUND_TYPE_PIXTONE}, {55, "PixTone/055.pxt", SOUND_TYPE_PIXTONE},//another enemy squeak
{56, "PixTone/056.pxt", SOUND_TYPE_PIXTONE}, //{56, "PixTone/056.pxt", SOUND_TYPE_PIXTONE},//watersplash
{57, "PixTone/057.pxt", SOUND_TYPE_PIXTONE}, {57, "PixTone/057.pxt", SOUND_TYPE_PIXTONE},//weird and fast enemy hurt sfct
{58, "PixTone/058.pxt", SOUND_TYPE_PIXTONE}, {58, "PixTone/058.pxt", SOUND_TYPE_PIXTONE},//short noise???
{59, "PixTone/059.pxt", SOUND_TYPE_PIXTONE}, {59, "PixTone/059.pxt", SOUND_TYPE_PIXTONE},//spur charge 1
{60, "PixTone/060.pxt", SOUND_TYPE_PIXTONE}, {60, "PixTone/060.pxt", SOUND_TYPE_PIXTONE},//spur charge 2
{61, "PixTone/061.pxt", SOUND_TYPE_PIXTONE}, {61, "PixTone/061.pxt", SOUND_TYPE_PIXTONE},//spur charge 3
{62, "PixTone/062.pxt", SOUND_TYPE_PIXTONE}, {62, "PixTone/062.pxt", SOUND_TYPE_PIXTONE},//spur fire lv. 2
{63, "PixTone/063.pxt", SOUND_TYPE_PIXTONE}, {63, "PixTone/063.pxt", SOUND_TYPE_PIXTONE},//spur fire lv. 3
{64, "PixTone/064.pxt", SOUND_TYPE_PIXTONE}, {64, "PixTone/064.pxt", SOUND_TYPE_PIXTONE},//spur fire MAX
{65, "PixTone/065.pxt", SOUND_TYPE_PIXTONE}, {65, "PixTone/065.pxt", SOUND_TYPE_PIXTONE},//Honey, your spur is fully charged
{70, "PixTone/070.pxt", SOUND_TYPE_PIXTONE}, {70, "Wav/Shatter.wav", SOUND_TYPE_OTHER},//small explosion
{71, "PixTone/071.pxt", SOUND_TYPE_PIXTONE}, {71, "PixTone/071.pxt", SOUND_TYPE_PIXTONE},//lil crash
{72, "PixTone/072.pxt", SOUND_TYPE_PIXTONE}, {72, "PixTone/072.pxt", SOUND_TYPE_PIXTONE},//fat ass crash
{100, "PixTone/100.pxt", SOUND_TYPE_PIXTONE}, {100, "PixTone/100.pxt", SOUND_TYPE_PIXTONE},//I have no idea, sounds like a click
{101, "PixTone/101.pxt", SOUND_TYPE_PIXTONE}, {101, "PixTone/101.pxt", SOUND_TYPE_PIXTONE},//Lightning strike (RIP king fly high)
{102, "PixTone/102.pxt", SOUND_TYPE_PIXTONE}, {102, "PixTone/102.pxt", SOUND_TYPE_PIXTONE},//"jaws"
{103, "PixTone/103.pxt", SOUND_TYPE_PIXTONE}, {103, "PixTone/103.pxt", SOUND_TYPE_PIXTONE},//curly charges her gun
{104, "PixTone/104.pxt", SOUND_TYPE_PIXTONE}, {104, "PixTone/104.pxt", SOUND_TYPE_PIXTONE},//I have no idea, sounds like a squeal
{105, "PixTone/105.pxt", SOUND_TYPE_PIXTONE}, {105, "PixTone/105.pxt", SOUND_TYPE_PIXTONE},//puppy bark
{106, "PixTone/106.pxt", SOUND_TYPE_PIXTONE}, {106, "PixTone/106.pxt", SOUND_TYPE_PIXTONE},//blade shot
{107, "PixTone/107.pxt", SOUND_TYPE_PIXTONE}, {107, "PixTone/107.pxt", SOUND_TYPE_PIXTONE},//block move LMAO
{108, "PixTone/108.pxt", SOUND_TYPE_PIXTONE}, {108, "PixTone/108.pxt", SOUND_TYPE_PIXTONE},//idk, sounds like a large enemy hop or a fart
{109, "PixTone/109.pxt", SOUND_TYPE_PIXTONE}, {109, "PixTone/109.pxt", SOUND_TYPE_PIXTONE},//critter FLY
{110, "PixTone/110.pxt", SOUND_TYPE_PIXTONE}, {110, "PixTone/110.pxt", SOUND_TYPE_PIXTONE},//idk, click
{111, "PixTone/111.pxt", SOUND_TYPE_PIXTONE}, {111, "PixTone/111.pxt", SOUND_TYPE_PIXTONE},//idk, low pitched thud
{112, "PixTone/112.pxt", SOUND_TYPE_PIXTONE}, {112, "PixTone/112.pxt", SOUND_TYPE_PIXTONE},//idk, slightly higher pitched thud
{113, "PixTone/113.pxt", SOUND_TYPE_PIXTONE}, {113, "PixTone/113.pxt", SOUND_TYPE_PIXTONE},//booster
{114, "PixTone/114.pxt", SOUND_TYPE_PIXTONE}, {114, "PixTone/114.pxt", SOUND_TYPE_PIXTONE},//ALERT: CORE IS WOUNDED, CORE IS WOUNDED
{115, "PixTone/115.pxt", SOUND_TYPE_PIXTONE}, {115, "PixTone/115.pxt", SOUND_TYPE_PIXTONE},//Core thrusting towards your ass
{116, "PixTone/116.pxt", SOUND_TYPE_PIXTONE}, {116, "PixTone/116.pxt", SOUND_TYPE_PIXTONE},//epic idk sound
{117, "PixTone/117.pxt", SOUND_TYPE_PIXTONE}, {117, "PixTone/117.pxt", SOUND_TYPE_PIXTONE},//idk sound
{150, "PixTone/150.pxt", SOUND_TYPE_PIXTONE}, {150, "PixTone/150.pxt", SOUND_TYPE_PIXTONE},
{151, "PixTone/151.pxt", SOUND_TYPE_PIXTONE}, {151, "PixTone/151.pxt", SOUND_TYPE_PIXTONE},
{152, "PixTone/152.pxt", SOUND_TYPE_PIXTONE}, {152, "PixTone/152.pxt", SOUND_TYPE_PIXTONE},
{153, "PixTone/153.pxt", SOUND_TYPE_PIXTONE}, {153, "PixTone/153.pxt", SOUND_TYPE_PIXTONE},
{154, "PixTone/154.pxt", SOUND_TYPE_PIXTONE}, {154, "PixTone/154.pxt", SOUND_TYPE_PIXTONE},
{155, "PixTone/155.pxt", SOUND_TYPE_PIXTONE} {155, "PixTone/155.pxt", SOUND_TYPE_PIXTONE}
}; };
// Original decompiled from `PTone103.exe` - has since been modified // Original decompiled from `PTone103.exe` - has since been modified
@ -186,6 +188,7 @@ static BOOL LoadPixToneFile(const char *filename, PIXTONEPARAMETER *pixtone_para
p += increment; p += increment;
sscanf(p, "cy :%d\n\n%n", &pixtone_parameters[i].pointCy, &increment); sscanf(p, "cy :%d\n\n%n", &pixtone_parameters[i].pointCy, &increment);
p += increment; p += increment;
} }
free(file_buffer); free(file_buffer);
@ -196,6 +199,7 @@ static BOOL LoadPixToneFile(const char *filename, PIXTONEPARAMETER *pixtone_para
return success; return success;
} }
BOOL LoadGenericData(void) BOOL LoadGenericData(void)
{ {
int pt_size; int pt_size;
@ -236,6 +240,13 @@ BOOL LoadGenericData(void)
if (bError) if (bError)
return FALSE; return FALSE;
LoadSoundObject("data/PixTone/150.wav", 150);
LoadSoundObject("data/PixTone/151.wav", 151);
LoadSoundObject("data/PixTone/152.wav", 152);
LoadSoundObject("data/PixTone/153.wav", 153);
LoadSoundObject("data/PixTone/154.wav", 154);
LoadSoundObject("data/PixTone/155.wav", 155);
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_SCREEN_GRAB, TRUE); MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_SCREEN_GRAB, TRUE);
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_BACKGROUND, FALSE); MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_BACKGROUND, FALSE);
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_MAP, TRUE); MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_MAP, TRUE);
@ -246,7 +257,6 @@ BOOL LoadGenericData(void)
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_1, FALSE); MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_1, FALSE);
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_2, FALSE); MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_2, FALSE);
MakeSurface_Generic(320, 16 * (MAX_STRIP - 1), SURFACE_ID_CREDIT_CAST, FALSE); MakeSurface_Generic(320, 16 * (MAX_STRIP - 1), SURFACE_ID_CREDIT_CAST, FALSE);
pt_size = 0; pt_size = 0;
for (unsigned int i = 0; i < sizeof(ptp_table) / sizeof(ptp_table[0]); ++i) for (unsigned int i = 0; i < sizeof(ptp_table) / sizeof(ptp_table[0]); ++i)
@ -265,6 +275,7 @@ BOOL LoadGenericData(void)
++ptp_num; ++ptp_num;
pt_size += MakePixToneObject(pixtone_parameters, ptp_num, ptp_table[i].slot); pt_size += MakePixToneObject(pixtone_parameters, ptp_num, ptp_table[i].slot);
} }
break; break;
@ -274,6 +285,46 @@ BOOL LoadGenericData(void)
ExtraSound_LoadSFX(path.c_str(), ptp_table[i].slot); ExtraSound_LoadSFX(path.c_str(), ptp_table[i].slot);
break; break;
#endif #endif
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,,,,,,***/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@*.....,.@@%,,,,,,,,,,,/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@..........@.@*,,,,,,,,,,,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@.....,,...*@@@@@/,,,,,*****@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@.....@@@..(@@/@@@,,,*,**,*,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@.....**/,.,,.,,,,,,*,,,***,&@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@*...... . .,@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@. .% &...,,,,... . @@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@ ,,,,*,*.,,**//(//*****//#//@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@,,*,*,,.,,,**///*,.,*//((%&(/*%@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@#,##,,,,*..,,,,/((*,,*(#((/(***,/**@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@*/.,,.,*,,,**,,*,*((((#(//(##(*(,/*(,**,#@@@@@@@@@/%&*@@@@@
//@@@@@@@@@@@@@@@@@@@*/**//.,,*/((*,*,*/(#&%(#/,*(##(//@@,,****,,****@@@*#*(@@@@@@
//@@@@@@(%@@@@@@@@**/*,*//,@(,,**.,****,../#%####(.//.@@@@@@,,**,/(/((((//(#@@@@@@
//@@@@@@((#&@@@*//(***#(*&@@@#.,.,,*/****////*, .(//,@@@@@...,,,/(((((%((###*@@@@@
//@@@@@@*******//**/(#(/(*,@@@*.,,*,.(#&&@@&%%//#/*,@@@@@@,,..,/((/(//(((/#%#@@@@@
//@@@@@@*/***/*/*/((//((%#(*@@@@/,,**//#(#(((((#(//*@@@@@@,,,,*///(*((((######@@@@
//@@@@@@/***/*///*///#(*,//@&&&&@#.,**,,,..,*((#/,,/(@&@@@@@@**,**/*((#((#%#%(@@@@
//@@@@@#***////**((((//(/(/&&&&&/,.. ,***////(/..,,.&@@@@@&@@@@@&/,*//(((#%%%%#(@@
//@@@@@***///(/****/(////&&@&&&&%#,.. ,,,.....,,&%@@@@@@@&@@@@@@@@*****#&#%@#&@
//@@@@@*////((((((/**%&&&&&&&&&&@(&&&%%%&%%&&&&&&&&,@@@@&@@@@@@@@@@@@&@***,(@@@@@%
//@@@@***//(((((//%&&&&&&&&&&&&&&*%%&&&%%&&&&&&&%##&&&@@@@@@@@@@@@@@&@%&#%&,&(@@@@
//@@@@**,*(//((/&&&&&&&&&&@&&&&&&%*&&&&&&&&&&&&%/%&&@@@@@&@@@@@@@@@&@@@@,,,,,((((/
//@@((**,**//((@@@@@@&&@@@@&&@@@@@&(&@@&&&&&&&%/#&&@@@@@@@@@@@@@@@@@@@@@**,/*/##(/
//@@@#.,&#/((((%&@@@@@&&@@@@@@&@@@&&&&@@@&&&&&%%&&&&&@@@@@@@@@@@@@@@@@@@&***///###
//@@,,,**,%(%%%&&&&@@&&&&@@@@@@@@@@%/&@@@&&&%&(&&&&&&&&&&&@@@@@@@@@@@@@@@*,,////(#
//@*,,,,/**,/(@&&&&&&&&@@@@@@@@&&@@@&#@@@@&&&%&&&&%&&&&&&&&&@@@@@@@@&@*,****////(#
//&,**,,**,*((/%&&&&&&&&@@@@@@@@@@@@&%*&&(*&&&&&&&&&&&&&&&&&&&@@@@@/***,*****((///
case SOUND_TYPE_DABABYAUDIO:
{
std::string path = std::string("data/") + ptp_table[i].path;
LoadSoundObject(path.c_str(), ptp_table[i].slot);
break;
}
} }
} }

View file

@ -39,6 +39,7 @@ void InitMyChar(void)
gMC.life = 3; gMC.life = 3;
gMC.max_life = 3; gMC.max_life = 3;
gMC.unit = 0; gMC.unit = 0;
cion = 0;
// This is initialized with the values the game uses in vanilla // This is initialized with the values the game uses in vanilla
gMC.physics_normal.max_dash = 0x32C; gMC.physics_normal.max_dash = 0x32C;
@ -445,7 +446,7 @@ void ActMyChar_Normal(BOOL bKey)
if (bKey) if (bKey)
{ {
// Look up and down // Look up and down
if (gKey & gKeyUp) /*if (gKey & gKeyUp)
gMC.up = TRUE; gMC.up = TRUE;
else else
gMC.up = FALSE; gMC.up = FALSE;
@ -453,7 +454,7 @@ void ActMyChar_Normal(BOOL bKey)
if (gKey & gKeyDown && !(gMC.flag & 8)) if (gKey & gKeyDown && !(gMC.flag & 8))
gMC.down = TRUE; gMC.down = TRUE;
else else
gMC.down = FALSE; gMC.down = FALSE;*/
if (gKeyTrg & gKeyJump && (gMC.flag & 8 || gMC.flag & 0x10 || gMC.flag & 0x20)) if (gKeyTrg & gKeyJump && (gMC.flag & 8 || gMC.flag & 0x10 || gMC.flag & 0x20))
{ {

View file

@ -800,7 +800,8 @@ void HitMyCharNpChar(void)
if (hit != 0 && gNPC[i].code_char == 1) if (hit != 0 && gNPC[i].code_char == 1)
{ {
PlaySoundObject(14, SOUND_MODE_PLAY); PlaySoundObject(14, SOUND_MODE_PLAY);
AddExpMyChar(gNPC[i].exp); // AddExpMyChar(gNPC[i].exp);
cion+= 1;
gNPC[i].cond = 0; gNPC[i].cond = 0;
} }

View file

@ -37,19 +37,35 @@ ARMS_LEVEL gArmsLevelTable[14] =
{{40, 60, 200}} {{40, 60, 200}}
}; };
void SetDestroyMyChar(int x, int y, int w, int num)
{
int i;
int offset_x;
int offset_y;
// Create smoke
w /= 0x200;
for (i = 0; i < num; ++i)
{
offset_x = Random(-w, w) * 0x200;
offset_y = Random(-w, w) * 0x200;
SetNpChar(4, x + offset_x, y + offset_y, 0, 0, 1, NULL, 0x100);//SetNpChar(NPC_SMOKE, x + offset_x, y + offset_y, 0, 0, 0, NULL, 0x100);
}
// Flash effect
SetCaret(x, y, 12, 0);
}
void AddExpMyChar(int x) void AddExpMyChar(int x)
{ {
int lv = gArmsData[gSelectedArms].level - 1; /*int lv = gArmsData[gSelectedArms].level - 1;
int arms_code = gArmsData[gSelectedArms].code; int arms_code = gArmsData[gSelectedArms].code;
gArmsData[gSelectedArms].exp += x; gArmsData[gSelectedArms].exp += x;
if (lv == 2) if (lv == 2)
{ {
if (gArmsData[gSelectedArms].exp >= gArmsLevelTable[arms_code].exp[lv]) if (gArmsData[gSelectedArms].exp >= gArmsLevelTable[arms_code].exp[lv])
{ {
gArmsData[gSelectedArms].exp = gArmsLevelTable[arms_code].exp[lv]; gArmsData[gSelectedArms].exp = gArmsLevelTable[arms_code].exp[lv];
if (gMC.equip & EQUIP_WHIMSICAL_STAR) if (gMC.equip & EQUIP_WHIMSICAL_STAR)
{ {
if (gMC.star < 3) if (gMC.star < 3)
@ -65,7 +81,6 @@ void AddExpMyChar(int x)
{ {
++gArmsData[gSelectedArms].level; ++gArmsData[gSelectedArms].level;
gArmsData[gSelectedArms].exp = 0; gArmsData[gSelectedArms].exp = 0;
if (gArmsData[gSelectedArms].code != 13) if (gArmsData[gSelectedArms].code != 13)
{ {
PlaySoundObject(27, SOUND_MODE_PLAY); PlaySoundObject(27, SOUND_MODE_PLAY);
@ -73,8 +88,6 @@ void AddExpMyChar(int x)
} }
} }
} }
}
if (gArmsData[gSelectedArms].code != 13) if (gArmsData[gSelectedArms].code != 13)
{ {
gMC.exp_count += x; gMC.exp_count += x;
@ -83,6 +96,19 @@ void AddExpMyChar(int x)
else else
{ {
gMC.exp_wait = 10; gMC.exp_wait = 10;
gArmsData[gSelectedArms].level = 1;
gArmsData[gSelectedArms].exp = 0;
}
}*/
cion += x;
if (x == 1) {
SetCaret(gMC.x, gMC.y, 21, 0);
}
else if (x == 3) {
SetCaret(gMC.x, gMC.y, 22, 0);
}
else if (x == 8) {
SetCaret(gMC.x, gMC.y, 23, 0);
} }
} }
@ -175,7 +201,7 @@ void DamageMyChar(int damage)
{ {
PlaySoundObject(17, SOUND_MODE_PLAY); PlaySoundObject(17, SOUND_MODE_PLAY);
gMC.cond = 0; gMC.cond = 0;
SetDestroyNpChar(gMC.x, gMC.y, 0x1400, 0x40); SetDestroyMyChar(gMC.x, gMC.y, 0x1400, 0x40);
StartTextScript(40); StartTextScript(40);
} }
} }
@ -233,25 +259,30 @@ void AddMaxLifeMyChar(int val)
gMC.lifeBr = gMC.life; gMC.lifeBr = gMC.life;
} }
void PutActiveArmsList(void)
{
RECT rect = {0, 0, 0, 16};
// Draw icon
rect.left = gArmsData[gSelectedArms].code * 32;
rect.right = rect.left + 32;
// Put your X and Y values here
PutBitmap3(&grcGame, PixelToScreenCoord(16), PixelToScreenCoord(16), &rect, SURFACE_ID_ARMS_IMAGE);
}
void PutArmsEnergy(BOOL flash) void PutArmsEnergy(BOOL flash)
{ {
static unsigned char add_flash; static unsigned char add_flash;
RECT rcPer = { 72, 48, 80, 56 }; RECT rcPer = { 72, 48, 80, 56 };
RECT rcLv = {80, 80, 96, 88};
RECT rcView = { 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT }; RECT rcView = { 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT };
RECT rcNone = { 80, 48, 96, 56 }; RECT rcNone = { 80, 48, 96, 56 };
if (gArmsEnergyX > 16)
gArmsEnergyX -= 2;
if (gArmsEnergyX < 16)
gArmsEnergyX += 2;
// Draw max ammo // Draw max ammo
if (gArmsData[gSelectedArms].max_num) if (gArmsData[gSelectedArms].max_num)
{ {
PutNumber4(gArmsEnergyX + 32, 16, gArmsData[gSelectedArms].num, FALSE); PutNumber4(32, 24, gArmsData[gSelectedArms].num, FALSE);
PutNumber4(gArmsEnergyX + 32, 24, gArmsData[gSelectedArms].max_num, FALSE);
} }
else else
{ {
@ -263,15 +294,6 @@ void PutArmsEnergy(BOOL flash)
if (flash == TRUE && (gMC.shock / 2) % 2) if (flash == TRUE && (gMC.shock / 2) % 2)
return; return;
PutBitmap3(&rcView, PixelToScreenCoord(gArmsEnergyX + 32), PixelToScreenCoord(24), &rcPer, SURFACE_ID_TEXT_BOX);
PutBitmap3(&rcView, PixelToScreenCoord(gArmsEnergyX), PixelToScreenCoord(32), &rcLv, SURFACE_ID_TEXT_BOX);
PutNumber4(gArmsEnergyX - 8, 32, gArmsData[gSelectedArms].level, FALSE);
RECT rcExpBox = {0, 72, 40, 80};
RECT rcExpVal = {0, 80, 0, 88};
RECT rcExpMax = {40, 72, 80, 80};
RECT rcExpFlash = {40, 80, 80, 88};
int lv = gArmsData[gSelectedArms].level - 1; int lv = gArmsData[gSelectedArms].level - 1;
#ifdef FIX_BUGS #ifdef FIX_BUGS
@ -281,97 +303,37 @@ void PutArmsEnergy(BOOL flash)
if (lv < 0) if (lv < 0)
lv = 0; lv = 0;
#endif #endif
int arms_code = gArmsData[gSelectedArms].code;
int exp_now = gArmsData[gSelectedArms].exp;
int exp_next = gArmsLevelTable[arms_code].exp[lv];
PutBitmap3(&rcView, PixelToScreenCoord(gArmsEnergyX + 24), PixelToScreenCoord(32), &rcExpBox, SURFACE_ID_TEXT_BOX);
if (lv == 2 && gArmsData[gSelectedArms].exp == gArmsLevelTable[arms_code].exp[lv])
{
PutBitmap3(&rcView, PixelToScreenCoord(gArmsEnergyX + 24), PixelToScreenCoord(32), &rcExpMax, SURFACE_ID_TEXT_BOX);
} }
else
{
if (exp_next != 0)
rcExpVal.right += (exp_now * 40) / exp_next;
else
rcExpVal.right = 0;
PutBitmap3(&rcView, PixelToScreenCoord(gArmsEnergyX + 24), PixelToScreenCoord(32), &rcExpVal, SURFACE_ID_TEXT_BOX);
}
if (gMC.exp_wait && ((add_flash++ / 2) % 2))
PutBitmap3(&rcView, PixelToScreenCoord(gArmsEnergyX + 24), PixelToScreenCoord(32), &rcExpFlash, SURFACE_ID_TEXT_BOX);
}
void PutActiveArmsList(void)
{
int x;
int a;
RECT rect = {0, 0, 0, 16};
int arms_num = 0;
while (gArmsData[arms_num].code != 0)
++arms_num;
if (arms_num == 0)
return;
for (a = 0; a < arms_num; ++a)
{
// Get X position to draw at
x = ((a - gSelectedArms) * 16) + gArmsEnergyX;
if (x < 8)
x += 48 + (arms_num * 16);
else if (x >= 24)
x += 48;
if (x >= 72 + ((arms_num - 1) * 16))
x -= 48 + (arms_num * 16);
if (x < 72 && x >= 24)
x -= 48;
// Draw icon
rect.left = gArmsData[a].code * 16;
rect.right = rect.left + 16;
PutBitmap3(&grcGame, PixelToScreenCoord(x), PixelToScreenCoord(16), &rect, SURFACE_ID_ARMS_IMAGE);
}
}
void PutMyLife(BOOL flash) void PutMyLife(BOOL flash)
{ {
RECT rcCase = {0, 40, 232, 48}; static unsigned int add_flash;
RECT rcLife = {0, 24, 232, 32};
RECT rcBr = {0, 32, 232, 40};
if (flash == TRUE && gMC.shock / 2 % 2) RECT rcLife[2] = {
{0, 151, 7, 158},
{0, 144, 7, 151},
};
if (flash == TRUE && (gMC.shock / 2) % 2 && gMC.life != 1)
return; return;
if (flash == TRUE && gMC.life == 1 && ((add_flash++ / 2) % 2))
if (gMC.lifeBr < gMC.life) return;
gMC.lifeBr = gMC.life; for (int i = 0; i < gMC.max_life - 1; i++) // For every 1 in max life, add 1 to i, and run the following code
if (gMC.lifeBr > gMC.life)
{ {
if (++gMC.lifeBr_count > 30) // Put a heart
--gMC.lifeBr; PutBitmap3(
&grcGame, // Target
// On the next two lines TT7 forgot PixelToScreenCoord, which is needed for the PutBitmap to work on resolutions other than 1x
PixelToScreenCoord(16 + (8 * i)), // X position, offset by 8 for every 1 in i
PixelToScreenCoord(225), // Y position,
& rcLife[gMC.life - 1 > i], // Which rect to use, 'gMC.life - 1 > i' checks if the current heart that is being drawn is full or not, returns 0 if it's not and 1 if it is
SURFACE_ID_TEXT_BOX); // Surface
} }
else
{
gMC.lifeBr_count = 0;
} }
// Draw bar void PutCion()
rcCase.right = 64; {
rcLife.right = ((gMC.life * 40) / gMC.max_life) - 1; RECT rcCion = {208, 112, 226, 118};
rcBr.right = ((gMC.lifeBr * 40) / gMC.max_life) - 1; PutBitmap3(&grcGame, PixelToScreenCoord(51), PixelToScreenCoord(218), &rcCion, SURFACE_ID_TEXT_BOX);
PutNumber4(17, 217, cion, FALSE);
PutBitmap3(&grcGame, PixelToScreenCoord(16), PixelToScreenCoord(40), &rcCase, SURFACE_ID_TEXT_BOX);
PutBitmap3(&grcGame, PixelToScreenCoord(40), PixelToScreenCoord(40), &rcBr, SURFACE_ID_TEXT_BOX);
PutBitmap3(&grcGame, PixelToScreenCoord(40), PixelToScreenCoord(40), &rcLife, SURFACE_ID_TEXT_BOX);
PutNumber4(8, 40, gMC.lifeBr, FALSE);
} }
void PutMyAir(int x, int y) void PutMyAir(int x, int y)

View file

@ -26,6 +26,7 @@ void AddMaxLifeMyChar(int val);
void PutArmsEnergy(BOOL flash); void PutArmsEnergy(BOOL flash);
void PutActiveArmsList(void); void PutActiveArmsList(void);
void PutMyLife(BOOL flash); void PutMyLife(BOOL flash);
void PutCion();
void PutMyAir(int x, int y); void PutMyAir(int x, int y);
void PutTimeCounter(int x, int y); void PutTimeCounter(int x, int y);
BOOL SaveTimeCounter(void); BOOL SaveTimeCounter(void);

View file

@ -9,6 +9,7 @@
#include "ArmsItem.h" #include "ArmsItem.h"
#include "Caret.h" #include "Caret.h"
#include "CommonDefines.h"
#include "Draw.h" #include "Draw.h"
#include "File.h" #include "File.h"
#include "Flags.h" #include "Flags.h"
@ -166,13 +167,14 @@ void SetDestroyNpChar(int x, int y, int w, int num)
{ {
offset_x = Random(-w, w) * 0x200; offset_x = Random(-w, w) * 0x200;
offset_y = Random(-w, w) * 0x200; offset_y = Random(-w, w) * 0x200;
SetNpChar(NPC_SMOKE, x + offset_x, y + offset_y, 0, 0, 0, NULL, 0x100); SetCaret(x + offset_x, y + offset_y, 18, 0);//SetNpChar(NPC_SMOKE, x + offset_x, y + offset_y, 0, 0, 0, NULL, 0x100);
} }
// Flash effect // Flash effect
SetCaret(x, y, 12, 0); SetCaret(x, y, 12, 0);
} }
void SetDestroyNpCharUp(int x, int y, int w, int num) void SetDestroyNpCharUp(int x, int y, int w, int num)
{ {
int i; int i;
@ -185,7 +187,7 @@ void SetDestroyNpCharUp(int x, int y, int w, int num)
{ {
offset_x = Random(-w, w) * 0x200; offset_x = Random(-w, w) * 0x200;
offset_y = Random(-w, w) * 0x200; offset_y = Random(-w, w) * 0x200;
SetNpChar(4, x + offset_x, y + offset_y, 0, 0, 1, NULL, 0x100); SetCaret(x + offset_x, y + offset_y, 18, 0);
} }
// Flash effect // Flash effect
@ -208,15 +210,15 @@ void SetExpObjects(int x, int y, int exp)
memset(&gNPC[n], 0, sizeof(NPCHAR)); memset(&gNPC[n], 0, sizeof(NPCHAR));
if (exp >= 20) if (exp >= 8)
{ {
exp -= 20; exp -= 8;
sub_exp = 20; sub_exp = 8;
} }
else if (exp >= 5) else if (exp >= 3)
{ {
exp -= 5; exp -= 3;
sub_exp = 5; sub_exp = 3;
} }
else if (exp >= 1) else if (exp >= 1)
{ {
@ -618,7 +620,7 @@ void DeleteNpCharCode(int code, BOOL bSmoke)
if (bSmoke) if (bSmoke)
{ {
PlaySoundObject(gNPC[n].destroy_voice, SOUND_MODE_PLAY); PlaySoundObject(70, SOUND_MODE_PLAY);
switch (gNPC[n].size) switch (gNPC[n].size)
{ {
@ -681,3 +683,4 @@ int CountAliveNpChar(void)
return count; return count;
} }

View file

@ -110,7 +110,7 @@ void ActNpc001(NPCHAR *npc)
// Bounce off floor // Bounce off floor
if (npc->flag & 8) if (npc->flag & 8)
{ {
PlaySoundObject(45, SOUND_MODE_PLAY); PlaySoundObject(07, SOUND_MODE_PLAY);
npc->ym = -0x280; npc->ym = -0x280;
npc->xm = 2 * npc->xm / 3; npc->xm = 2 * npc->xm / 3;
} }
@ -118,7 +118,7 @@ void ActNpc001(NPCHAR *npc)
// Play bounce song (and try to clip out of floor if stuck) // Play bounce song (and try to clip out of floor if stuck)
if (npc->flag & 0xD) if (npc->flag & 0xD)
{ {
PlaySoundObject(45, SOUND_MODE_PLAY); PlaySoundObject(07, SOUND_MODE_PLAY);
if (++npc->count2 > 2) if (++npc->count2 > 2)
npc->y -= 1 * 0x200; npc->y -= 1 * 0x200;
} }
@ -183,17 +183,22 @@ void ActNpc001(NPCHAR *npc)
// Size // Size
if (npc->act_no != 0) if (npc->act_no != 0)
{ {
switch (npc->exp) //cout << npc->exp;
switch (npc->exp) //SetCaret(gMC.x, gMC.y, 21, 0);
{ {
case 5: case 3:
npc->rect.top += 16; npc->rect.top += 16;
npc->rect.bottom += 16; npc->rect.bottom += 16;
//printf("me when 3 cion drop");
break; break;
case 20: case 8:
npc->rect.top += 32; npc->rect.top += 32;
npc->rect.bottom += 32; npc->rect.bottom += 32;
//printf("me when 8 cion drops");
break; break;
//case 1:
//printf("bruh whate da heall bruh");
} }
npc->act_no = 1; npc->act_no = 1;

View file

@ -82,6 +82,7 @@ BOOL SaveProfile(const char *name)
memcpy(profile.permitstage, gPermitStage, sizeof(profile.permitstage)); memcpy(profile.permitstage, gPermitStage, sizeof(profile.permitstage));
memcpy(profile.permit_mapping, gMapping, sizeof(profile.permit_mapping)); memcpy(profile.permit_mapping, gMapping, sizeof(profile.permit_mapping));
memcpy(profile.flags, gFlagNPC, sizeof(profile.flags)); memcpy(profile.flags, gFlagNPC, sizeof(profile.flags));
profile.cion = cion;
// Custom // Custom
memcpy(profile.extra_code, gProfileCodeExtra, sizeof(profile.extra_code)); memcpy(profile.extra_code, gProfileCodeExtra, sizeof(profile.extra_code));
profile.MIMCurrentNum = gMIMCurrentNum; profile.MIMCurrentNum = gMIMCurrentNum;
@ -123,6 +124,7 @@ BOOL SaveProfile(const char *name)
fwrite(profile.permit_mapping, 0x80, 1, fp); fwrite(profile.permit_mapping, 0x80, 1, fp);
fwrite(FLAG, 4, 1, fp); fwrite(FLAG, 4, 1, fp);
fwrite(profile.flags, 1000, 1, fp); fwrite(profile.flags, 1000, 1, fp);
File_WriteLE32(profile.cion, fp);
// Custom // Custom
fwrite(gProfileCodeExtra, 0x10, 1, fp); fwrite(gProfileCodeExtra, 0x10, 1, fp);
File_WriteLE32(profile.MIMCurrentNum, fp); File_WriteLE32(profile.MIMCurrentNum, fp);
@ -211,6 +213,7 @@ BOOL LoadProfile(const char *name)
fread(profile.permit_mapping, 0x80, 1, fp); fread(profile.permit_mapping, 0x80, 1, fp);
fread(profile.FLAG, 4, 1, fp); fread(profile.FLAG, 4, 1, fp);
fread(profile.flags, 1000, 1, fp); fread(profile.flags, 1000, 1, fp);
profile.cion = File_ReadLE32(fp);
// Custom // Custom
fread(profile.extra_code, 0x10, 1, fp); fread(profile.extra_code, 0x10, 1, fp);
@ -268,6 +271,7 @@ BOOL LoadProfile(const char *name)
gMC.star = profile.star; gMC.star = profile.star;
gMC.cond = 0x80; gMC.cond = 0x80;
gMC.air = 1000; gMC.air = 1000;
cion = profile.cion;
gMC.lifeBr = profile.life; gMC.lifeBr = profile.life;
gMC.x = profile.x; gMC.x = profile.x;
gMC.y = profile.y; gMC.y = profile.y;

View file

@ -30,7 +30,8 @@ typedef struct PROFILE
signed char permit_mapping[0x80]; signed char permit_mapping[0x80];
char FLAG[4]; char FLAG[4];
unsigned char flags[1000]; unsigned char flags[1000];
// CION
unsigned int cion;
// Custom // Custom
char extra_code[0x10]; char extra_code[0x10];
// <MIM // <MIM

View file

@ -53,6 +53,7 @@ const RECT gRect_line = {0, 0, 216, 16};
static unsigned long nod_color; static unsigned long nod_color;
#endif #endif
unsigned int cion = 0;
unsigned int gMIMCurrentNum = 0; unsigned int gMIMCurrentNum = 0;
// Initialize and end tsc // Initialize and end tsc
@ -705,6 +706,38 @@ int TextScriptProc(void)
y = GetTextScriptNo(gTS.p_read + 9); y = GetTextScriptNo(gTS.p_read + 9);
AddPermitStage(x, y); AddPermitStage(x, y);
gTS.p_read += 13; gTS.p_read += 13;
}
//CION commands
//Add X amount of cion
else if (IS_COMMAND('C','I','+'))
{
x = GetTextScriptNo(gTS.p_read + 4);
cion+= x;
gTS.p_read += 8;
}
//Remove X amount of cion
else if (IS_COMMAND('C','I','-'))
{
x = GetTextScriptNo(gTS.p_read + 4);
cion-= x;
gTS.p_read += 8;
}
//Set cion to X (useful for removing all cions!)
else if (IS_COMMAND('C','I','S'))
{
x = GetTextScriptNo(gTS.p_read + 4);
cion= x;
gTS.p_read += 8;
}
//If cion is Greater than or Equal to X, go to event Y.
else if (IS_COMMAND('C','I','J'))
{
x = GetTextScriptNo(gTS.p_read + 4);
y = GetTextScriptNo(gTS.p_read + 9);
if (cion >= x)
JumpTextScript(y);
else
gTS.p_read += 13;
} }
else if (IS_COMMAND('M','P','+')) else if (IS_COMMAND('M','P','+'))
{ {

View file

@ -55,6 +55,8 @@ typedef struct TEXT_SCRIPT
unsigned char wait_beam; unsigned char wait_beam;
} TEXT_SCRIPT; } TEXT_SCRIPT;
unsigned extern int cion;
extern TEXT_SCRIPT gTS; extern TEXT_SCRIPT gTS;
extern const RECT gRect_line; extern const RECT gRect_line;