/* Vertical Sector Flipping/Mirroring by Hendricks266 ALWAYS MAKE BACKUPS OF YOUR MAPS BEFORE RUNNING THIS SCRIPT! When you start Mapster32, type: include flipvert Then, [RAlt] select the sectors you want to mirror. Type: do state flipvert The sectors should then be flipped. NOTE: The reflection will take place *over the midplane of the net z-extent of the selected sectors*. NB: Sector effects that differ between floor and ceiling will need manual correction. Currently, only ST 20 and 21 are handled automatically. Y-panned NPOT textures will not flip properly. This is unavoidable. Sprites with a y-offset may not flip perfectly. This cannot be avoided because currently there is no M32Script access to ART offsets. */ gamevar i 0 0 gamevar j 0 0 gamevar k 0 0 gamevar swap 0 0 gamevar floorz -2147483648 0 gamevar ceilingz 2147483647 0 defstate flipvert set floorz -2147483648 set ceilingz 2147483647 // find z-extent for i selsectors { ifg sector[i].floorz floorz set floorz sector[i].floorz ifl sector[i].ceilingz ceilingz set ceilingz sector[i].ceilingz } // modify sectors for i selsectors { // swap z-extent set swap sector[i].ceilingz set sector[i].ceilingz ceilingz sub sector[i].ceilingz sector[i].floorz add sector[i].ceilingz floorz set sector[i].floorz floorz sub sector[i].floorz swap add sector[i].floorz ceilingz // swap stat, picnum, slope, shade, pal, xpanning, ypanning, bunch set swap sector[i].ceilingstat set sector[i].ceilingstat sector[i].floorstat set sector[i].floorstat swap set swap sector[i].ceilingpicnum set sector[i].ceilingpicnum sector[i].floorpicnum set sector[i].floorpicnum swap set swap sector[i].ceilingslope set sector[i].ceilingslope sector[i].floorslope set sector[i].floorslope swap mul sector[i].ceilingslope -1 mul sector[i].floorslope -1 set swap sector[i].ceilingshade set sector[i].ceilingshade sector[i].floorshade set sector[i].floorshade swap set swap sector[i].ceilingpal set sector[i].ceilingpal sector[i].floorpal set sector[i].floorpal swap set swap sector[i].ceilingxpanning set sector[i].ceilingxpanning sector[i].floorxpanning set sector[i].floorxpanning swap set swap sector[i].ceilingypanning set sector[i].ceilingypanning sector[i].floorypanning set sector[i].floorypanning swap /* set swap sector[i].ceilingbunch set sector[i].ceilingbunch sector[i].floorbunch set sector[i].floorbunch swap */ // floor door <--> ceiling door set swap 0 ife sector[i].lotag 20 { set sector[i].lotag 21 set swap 1 } else ife sector[i].lotag 21 { set sector[i].lotag 20 set swap 1 } // modify walls set j sector[i].wallptr set k 0 whilel k sector[i].wallnum { ife swap 1 xor wall[j].cstat 4 // floor/ceiling alignment xor wall[j].cstat 8 // y-flip set j wall[j].point2 add k 1 } // modify sprites headspritesect j i whilen j -1 { // spriteheightofs set k sprite[j].picnum set k tilesizy[k] mul k sprite[j].yrepeat shiftl k 2 // z-mirror set swap sprite[j].z set sprite[j].z ceilingz add sprite[j].z k sub sprite[j].z swap add sprite[j].z floorz xor sprite[j].cstat 8 // y-flip nextspritesect j j } } ends