Adapt polyobject door move linedef types to UDMF

This commit is contained in:
MascaraSnake 2021-07-02 17:18:55 +02:00
parent 805bafd936
commit 3b1d64703d
3 changed files with 66 additions and 15 deletions

View file

@ -2746,6 +2746,57 @@ udmf
} }
} }
linedefexecpoly
{
title = "Linedef Executor (polyobject)";
480
{
title = "Door Slide";
prefix = "(480)";
arg0
{
title = "PolyObject ID";
type = 14;
}
arg1
{
title = "Speed";
}
arg2
{
title = "Distance";
}
arg3
{
title = "Return delay";
}
}
481
{
title = "Door Swing";
prefix = "(481)";
arg0
{
title = "PolyObject ID";
type = 14;
}
arg1
{
title = "Speed";
}
arg2
{
title = "Angle distance";
type = 8;
}
arg3
{
title = "Return delay";
}
}
}
scrollpush scrollpush
{ {
title = "Scrollers and Pushers"; title = "Scrollers and Pushers";

View file

@ -3663,6 +3663,14 @@ static void P_ConvertBinaryMap(void)
case 456: //Stop fading colormap case 456: //Stop fading colormap
lines[i].args[0] = Tag_FGet(&lines[i].tags); lines[i].args[0] = Tag_FGet(&lines[i].tags);
break; break;
case 480: //Polyobject - door slide
case 481: //Polyobject - door move
lines[i].args[0] = tag;
lines[i].args[1] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
lines[i].args[2] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
if (lines[i].sidenum[1] != 0xffff)
lines[i].args[3] = sides[lines[i].sidenum[1]].textureoffset >> FRACBITS;
break;
case 500: //Scroll front wall left case 500: //Scroll front wall left
case 501: //Scroll front wall right case 501: //Scroll front wall right
lines[i].args[0] = 0; lines[i].args[0] = 0;

View file

@ -992,30 +992,22 @@ static boolean PolyDoor(line_t *line)
{ {
polydoordata_t pdd; polydoordata_t pdd;
pdd.polyObjNum = Tag_FGet(&line->tags); // polyobject id pdd.polyObjNum = line->args[0]; // polyobject id
switch(line->special) switch(line->special)
{ {
case 480: // Polyobj_DoorSlide case 480: // Polyobj_DoorSlide
pdd.doorType = POLY_DOOR_SLIDE; pdd.doorType = POLY_DOOR_SLIDE;
pdd.speed = sides[line->sidenum[0]].textureoffset / 8; pdd.speed = line->args[1] << (FRACBITS - 3);
pdd.angle = R_PointToAngle2(line->v1->x, line->v1->y, line->v2->x, line->v2->y); // angle of motion pdd.angle = R_PointToAngle2(line->v1->x, line->v1->y, line->v2->x, line->v2->y); // angle of motion
pdd.distance = sides[line->sidenum[0]].rowoffset; pdd.distance = line->args[2] << FRACBITS;
pdd.delay = line->args[3]; // delay in tics
if (line->sidenum[1] != 0xffff)
pdd.delay = sides[line->sidenum[1]].textureoffset >> FRACBITS; // delay in tics
else
pdd.delay = 0;
break; break;
case 481: // Polyobj_DoorSwing case 481: // Polyobj_DoorSwing
pdd.doorType = POLY_DOOR_SWING; pdd.doorType = POLY_DOOR_SWING;
pdd.speed = sides[line->sidenum[0]].textureoffset >> FRACBITS; // angular speed pdd.speed = line->args[1]; // angular speed
pdd.distance = sides[line->sidenum[0]].rowoffset >> FRACBITS; // angular distance pdd.distance = line->args[2]; // angular distance
pdd.delay = line->args[3]; // delay in tics
if (line->sidenum[1] != 0xffff)
pdd.delay = sides[line->sidenum[1]].textureoffset >> FRACBITS; // delay in tics
else
pdd.delay = 0;
break; break;
default: default:
return 0; // ??? return 0; // ???