mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2026-01-29 17:38:16 +03:00
Add enemy speed as a room property
Currently, you can change platform speed, but not enemy speed, which is always hardcoded to be 4. This commit fixes that, by adding the "enemyv" property, which is an offset to the speed of 4. Since it defaults to 0, older levels are not broken by this change.
This commit is contained in:
committed by
Misa Elizabeth Kai
parent
8b62bb1d65
commit
d8b2b3542a
@@ -57,6 +57,7 @@ RoomProperty::RoomProperty(void)
|
||||
enemyx2=320;
|
||||
enemyy2=240;
|
||||
enemytype=0;
|
||||
enemyv=0;
|
||||
directmode=0;
|
||||
}
|
||||
|
||||
@@ -389,6 +390,7 @@ void customlevelclass::reset(void)
|
||||
roomproperties[i+(j*maxwidth)].enemyx2=320;
|
||||
roomproperties[i+(j*maxwidth)].enemyy2=240;
|
||||
roomproperties[i+(j*maxwidth)].enemytype=0;
|
||||
roomproperties[i+(j*maxwidth)].enemyv=0;
|
||||
roomproperties[i+(j*maxwidth)].directmode=0;
|
||||
}
|
||||
}
|
||||
@@ -1264,6 +1266,7 @@ bool customlevelclass::load(std::string _path)
|
||||
edLevelClassElement->QueryIntAttribute("enemyx2", &roomproperties[i].enemyx2);
|
||||
edLevelClassElement->QueryIntAttribute("enemyy2", &roomproperties[i].enemyy2);
|
||||
edLevelClassElement->QueryIntAttribute("enemytype", &roomproperties[i].enemytype);
|
||||
edLevelClassElement->QueryIntAttribute("enemyv", &roomproperties[i].enemyv);
|
||||
edLevelClassElement->QueryIntAttribute("directmode", &roomproperties[i].directmode);
|
||||
|
||||
edLevelClassElement->QueryIntAttribute("warpdir", &roomproperties[i].warpdir);
|
||||
@@ -1645,6 +1648,7 @@ bool customlevelclass::save(const std::string& _path)
|
||||
roompropertyElement->SetAttribute( "enemyx2", roomproperties[i].enemyx2);
|
||||
roompropertyElement->SetAttribute( "enemyy2", roomproperties[i].enemyy2);
|
||||
roompropertyElement->SetAttribute( "enemytype", roomproperties[i].enemytype);
|
||||
roompropertyElement->SetAttribute( "enemyv", roomproperties[i].enemyv);
|
||||
roompropertyElement->SetAttribute( "directmode", roomproperties[i].directmode);
|
||||
roompropertyElement->SetAttribute( "warpdir", roomproperties[i].warpdir);
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ public:
|
||||
FOREACH_PROP(enemyx2, int) \
|
||||
FOREACH_PROP(enemyy2, int) \
|
||||
FOREACH_PROP(enemytype, int) \
|
||||
FOREACH_PROP(enemyv, int) \
|
||||
FOREACH_PROP(directmode, int)
|
||||
|
||||
class RoomProperty
|
||||
|
||||
@@ -3096,12 +3096,22 @@ static void handle_draw_input()
|
||||
|
||||
const int room = ed.levx + ed.levy * cl.maxwidth;
|
||||
const int plat_speed = cl.roomproperties[room].platv;
|
||||
const int enemy_speed = cl.roomproperties[room].enemyv;
|
||||
|
||||
const bool ctrl = key.keymap[SDLK_LCTRL] || key.keymap[SDLK_RCTRL];
|
||||
const bool shift = key.keymap[SDLK_LSHIFT] || key.keymap[SDLK_RSHIFT];
|
||||
if (key.keymap[SDLK_COMMA])
|
||||
{
|
||||
if (key.keymap[SDLK_LCTRL] || key.keymap[SDLK_RCTRL])
|
||||
if (ctrl)
|
||||
{
|
||||
cl.roomproperties[room].platv = plat_speed - 1;
|
||||
if (shift)
|
||||
{
|
||||
cl.roomproperties[room].enemyv = enemy_speed - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
cl.roomproperties[room].platv = plat_speed - 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3111,9 +3121,16 @@ static void handle_draw_input()
|
||||
}
|
||||
else if (key.keymap[SDLK_PERIOD])
|
||||
{
|
||||
if (key.keymap[SDLK_LCTRL] || key.keymap[SDLK_RCTRL])
|
||||
if (ctrl)
|
||||
{
|
||||
cl.roomproperties[room].platv = plat_speed + 1;
|
||||
if (shift)
|
||||
{
|
||||
cl.roomproperties[room].enemyv = enemy_speed + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
cl.roomproperties[room].platv = plat_speed + 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3134,6 +3151,18 @@ static void handle_draw_input()
|
||||
ed.show_note(buffer);
|
||||
}
|
||||
|
||||
if (enemy_speed != cl.roomproperties[room].enemyv)
|
||||
{
|
||||
char buffer[3 * SCREEN_WIDTH_CHARS + 1];
|
||||
vformat_buf(
|
||||
buffer, sizeof(buffer),
|
||||
loc::gettext("Enemy speed is now {speed}"),
|
||||
"speed:int",
|
||||
cl.roomproperties[room].enemyv + 4
|
||||
);
|
||||
ed.show_note(buffer);
|
||||
}
|
||||
|
||||
if (key.keymap[SDLK_SPACE])
|
||||
{
|
||||
ed.toolbox_open = !ed.toolbox_open;
|
||||
|
||||
@@ -1850,7 +1850,7 @@ void mapclass::loadlevel(int rx, int ry)
|
||||
{
|
||||
case 1: // Enemies
|
||||
obj.customenemy = room->enemytype;
|
||||
obj.createentity(ex, ey, 56, ent.p1, 4, bx1, by1, bx2, by2);
|
||||
obj.createentity(ex, ey, 56, ent.p1, 4 + room->enemyv, bx1, by1, bx2, by2);
|
||||
break;
|
||||
case 2: // Platforms and conveyors
|
||||
if (ent.p1 <= 4)
|
||||
|
||||
Reference in New Issue
Block a user