Cavestory Mod API
BulletAct.cpp

An example of CSM_Bullet_ActFunc.

Parameters
pBulA pointer to the bullet.
iLevelThe level of the bullet, starting from 1.
// pBul->count1 = Distance traveled so far
void ActBullet_MyWeapon(BULLET* pBul, int iLevel)
{
// Level 1 sprite rects
RECT rect1[2] =
{
RECT_XYWH(128, 32, 16, 16),
RECT_XYWH(144, 32, 16, 16)
};
// Level 2 sprite rects
RECT rect2[2] =
{
RECT_XYWH(160, 32, 16, 16),
RECT_XYWH(176, 32, 16, 16)
};
// Level 3 sprite rects
RECT rect3[2] =
{
RECT_XYWH(128, 48, 16, 16),
RECT_XYWH(144, 48, 16, 16)
};
if (++pBul->count1 > pBul->life_count)
{
// We've exceeded our bullet range limit.
// Spawn a 'pop!' effect
SetCaret(pBul->x, pBul->y, 3, 0);
// Delete the bullet
pBul->cond = 0;
return;
}
if (pBul->act_no == 0)
{
// Initialization act -- Switch to act 1 immediately
pBul->act_no = 1;
// Set velocity according to direction
switch (pBul->direct)
{
pBul->xm = -0x1000;
break;
pBul->ym = -0x1000;
break;
pBul->xm = 0x1000;
break;
pBul->ym = 0x1000;
break;
}
// Set hitbox according to level & direction
switch (iLevel)
{
case 1:
switch (pBul->direct)
{
pBul->enemyYL = 0x400;
break;
pBul->enemyXL = 0x400;
break;
pBul->enemyYL = 0x400;
break;
pBul->enemyXL = 0x400;
break;
}
break;
case 2:
switch (pBul->direct)
{
pBul->enemyYL = 0x800;
break;
pBul->enemyXL = 0x800;
break;
pBul->enemyYL = 0x800;
break;
pBul->enemyXL = 0x800;
break;
}
break;
}
}
else
{
// Add velocity to position
pBul->x += pBul->xm;
pBul->y += pBul->ym;
}
// Set the display sprite based on level & direction
switch (iLevel)
{
case 1:
pBul->rect = rect1[1];
else
pBul->rect = rect1[0];
break;
case 2:
pBul->rect = rect2[1];
else
pBul->rect = rect2[0];
break;
case 3:
pBul->rect = rect3[1];
else
pBul->rect = rect3[0];
break;
}
}
@ DIRECT_LEFT
Left.
Definition: CSMAPI_enums.h:39
@ DIRECT_RIGHT
Right.
Definition: CSMAPI_enums.h:45
@ DIRECT_UP
Up.
Definition: CSMAPI_enums.h:42
@ DIRECT_DOWN
Down.
Definition: CSMAPI_enums.h:48
CAVESTORY_MOD_API void SetCaret(int iSpawnX, int iSpawnY, int iCaretId, int iDirection, CARET **pOut=NULL)
Spawn a caret at the coordinates.
Bullet object.
Definition: CSMAPI_types.h:1128
int ym
Y Motion (y velocity)
Definition: CSMAPI_types.h:1163
int life_count
Bullet range.
Definition: CSMAPI_types.h:1207
int enemyXL
Enemy collision width.
Definition: CSMAPI_types.h:1219
RECT rect
Sprite rect.
Definition: CSMAPI_types.h:1195
int x
X Position.
Definition: CSMAPI_types.h:1151
int count1
Custom counter 1.
Definition: CSMAPI_types.h:1199
int act_no
Act number.
Definition: CSMAPI_types.h:1175
int cond
This bullet's condition.
Definition: CSMAPI_types.h:1147
int enemyYL
Enemy collision height.
Definition: CSMAPI_types.h:1223
int xm
X Motion (x velocity)
Definition: CSMAPI_types.h:1159
unsigned char direct
Direction.
Definition: CSMAPI_types.h:1191
int y
Y Position.
Definition: CSMAPI_types.h:1155
Rect structure.
Definition: CSMAPI_types.h:125