diff --git a/source/blood/src/d_menu.cpp b/source/blood/src/d_menu.cpp index 72c07e933..ed4be948e 100644 --- a/source/blood/src/d_menu.cpp +++ b/source/blood/src/d_menu.cpp @@ -96,15 +96,7 @@ void CGameMenuItemQAV::Draw(void) at2c = data->at10; } data->Play(data->at10 - at2c - nTicks, data->at10 - at2c, -1, NULL); - int wx1, wy1, wx2, wy2; - wx1 = windowxy1.x; - wy1 = windowxy1.y; - wx2 = windowxy2.x; - wy2 = windowxy2.y; - windowxy1.x = 0; - windowxy1.y = 0; - windowxy2.x = xdim - 1; - windowxy2.y = ydim - 1; + if (bWideScreen) { int xdim43 = scale(ydim, 4, 3); @@ -120,10 +112,6 @@ void CGameMenuItemQAV::Draw(void) else data->Draw(data->at10 - at2c, 10, 0, 0, 0, false); - windowxy1.x = wx1; - windowxy1.y = wy1; - windowxy2.x = wx2; - windowxy2.y = wy2; gFrameClock = backFC; } } diff --git a/source/build/include/build.h b/source/build/include/build.h index f5d03c772..b73b039fa 100644 --- a/source/build/include/build.h +++ b/source/build/include/build.h @@ -698,24 +698,6 @@ static FORCE_INLINE void rotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t { rotatesprite_(sx, sy, z, a, picnum, dashade, dapalnum, dastat, 0, 0, cx1, cy1, cx2, cy2, pic, basepal); } -// Don't clip at all, i.e. the whole screen real estate is available: -static FORCE_INLINE void rotatesprite_fs(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, - int8_t dashade, uint8_t dapalnum, int32_t dastat, FGameTexture* pic = nullptr, int basepal = 0) -{ - rotatesprite_(sx, sy, z, a, picnum, dashade, dapalnum, dastat, 0, 0, 0,0,xdim-1,ydim-1, pic, basepal); -} - -static FORCE_INLINE void rotatesprite_fs_alpha(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, - int8_t dashade, uint8_t dapalnum, int32_t dastat, uint8_t alpha) -{ - rotatesprite_(sx, sy, z, a, picnum, dashade, dapalnum, dastat, alpha, 0, 0, 0, xdim-1, ydim-1); -} - -static FORCE_INLINE void rotatesprite_win(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, - int8_t dashade, uint8_t dapalnum, int32_t dastat) -{ - rotatesprite_(sx, sy, z, a, picnum, dashade, dapalnum, dastat, 0, 0, windowxy1.x,windowxy1.y,windowxy2.x,windowxy2.y); -} void getzrange(const vec3_t *pos, int16_t sectnum, int32_t *ceilz, int32_t *ceilhit, int32_t *florz, int32_t *florhit, int32_t walldist, uint32_t cliptype) ATTRIBUTE((nonnull(1,3,4,5,6))); diff --git a/source/core/gamecvars.cpp b/source/core/gamecvars.cpp index fa25b7327..6c7e3d9ab 100644 --- a/source/core/gamecvars.cpp +++ b/source/core/gamecvars.cpp @@ -355,8 +355,6 @@ CUSTOM_CVARD(Float, r_ambientlight, 1.0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "sets t CVARD(Bool, r_shadows, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable sprite and model shadows") -// Gross hack stuff. Only settable from the command line -CVARD(Bool, r_rotatespritenowidescreen, false, CVAR_NOSET, "pass bit 1024 to all CON rotatesprite calls") CVARD(Bool, r_precache, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable the pre-level caching routine") CUSTOM_CVARD(String, wchoice, "3457860291", CVAR_ARCHIVE | CVAR_NOINITCALL | CVAR_FRONTEND_DUKELIKE, "sets weapon autoselection order") diff --git a/source/core/gamecvars.h b/source/core/gamecvars.h index 678ca46b6..c0c26df00 100644 --- a/source/core/gamecvars.h +++ b/source/core/gamecvars.h @@ -78,7 +78,6 @@ EXTERN_CVAR(Int, r_showfps) EXTERN_CVAR(Int, r_showfpsperiod) EXTERN_CVAR(Float, r_ambientlight) EXTERN_CVAR(Bool, r_shadows) -EXTERN_CVAR(Bool, r_rotatespritenowidescreen) EXTERN_CVAR(Bool, r_precache) EXTERN_CVAR(Bool, r_voxels) EXTERN_CVAR(Int, r_upscalefactor) diff --git a/source/core/menu/imagescroller.cpp b/source/core/menu/imagescroller.cpp index ef3784fce..cc2b50871 100644 --- a/source/core/menu/imagescroller.cpp +++ b/source/core/menu/imagescroller.cpp @@ -71,7 +71,8 @@ void ImageScreen::Drawer() else tileindex = *tileindexp; if (!gi->DrawSpecialScreen(origin, tileindex)) // allows the front end to do custom handling for a given image. { - rotatesprite_fs(int(origin.X * 65536) + (160 << 16), int(origin.Y * 65536) + (100 << 16), 65536L, 0, tileindex, 0, 0, 10 + 64); + DrawTexture(twod, tileGetTexture(tileindex), origin.X, origin.Y, DTA_FullscreenScale, 3, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200, + DTA_TopLeft, true, DTA_LegacyRenderStyle, STYLE_Normal, TAG_DONE); } } else if (mDesc->type > 0) diff --git a/source/sw/src/anim.cpp b/source/sw/src/anim.cpp index 59de21b9f..50d4ce560 100644 --- a/source/sw/src/anim.cpp +++ b/source/sw/src/anim.cpp @@ -221,6 +221,13 @@ void AnimZilla(int frame, int numframes) } } +// Used nowhere else anymore, will go away with the rest of this file. +static void rotatesprite_fs(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, + int8_t dashade, uint8_t dapalnum, int32_t dastat, FGameTexture* pic = nullptr, int basepal = 0) +{ + rotatesprite_(sx, sy, z, a, picnum, dashade, dapalnum, dastat, 0, 0, 0,0,xdim-1,ydim-1, pic, basepal); +} + void playanm(short anim_num) { diff --git a/source/sw/src/d_menu.cpp b/source/sw/src/d_menu.cpp index 46085abc4..c5024ace5 100644 --- a/source/sw/src/d_menu.cpp +++ b/source/sw/src/d_menu.cpp @@ -257,7 +257,7 @@ void GameInterface::DrawMenuCaption(const DVector2& origin, const char* text) short w, h; // Draw the backdrop bar rotatesprite(10 << 16, (5-3) << 16, 65536, 0, 2427, - 2, 0, MenuDrawFlags|ROTATE_SPRITE_CORNER, 0, 0, xdim - 1, ydim - 1); + 2, 0, MenuDrawFlags|RS_TOPLEFT, 0, 0, xdim - 1, ydim - 1); MNU_MeasureStringLarge(text, &w, &h); MNU_DrawStringLarge(TEXT_XCENTER(w), 5, text, 1); } diff --git a/source/sw/src/draw.cpp b/source/sw/src/draw.cpp index fa59e7406..4fb0b99f1 100644 --- a/source/sw/src/draw.cpp +++ b/source/sw/src/draw.cpp @@ -66,7 +66,6 @@ extern char buffer[]; SWBOOL DrawScreen; extern short f_c; -extern SWBOOL HelpInputMode; extern short HelpPage; extern short HelpPagePic[]; extern ParentalStruct aVoxelArray[MAXTILES]; @@ -1465,34 +1464,6 @@ void DrawCheckKeys(PLAYERp pp) ResizeView(pp); } -void DrawMessageInput(void) -{ - short w,h; - static SWBOOL cur_show; - short c; - - // Used to make cursor fade in and out - c = 4-(sintable[((int32_t) totalclock<<4)&2047]>>11); - - if (MessageInputMode) - { - MNU_MeasureSmallString(MessageInputString, &w, &h); - - cur_show ^= 1; - if (cur_show) - { - minigametext(TEXT_XCENTER(w), MESSAGE_LINE, MessageInputString,ROTATE_SPRITE_SCREEN_CLIP); - rotatesprite((TEXT_XCENTER(w)+w+2)<<16,(MESSAGE_LINE+1)<<16,20000,0,COINCURSOR+(((int32_t) totalclock>>3)%7),c,0,ROTATE_SPRITE_SCREEN_CLIP,0,0,xdim-1,ydim-1); - } - else - { - minigametext(TEXT_XCENTER(w), MESSAGE_LINE, MessageInputString,ROTATE_SPRITE_SCREEN_CLIP); - rotatesprite((TEXT_XCENTER(w)+w+2)<<16,(MESSAGE_LINE+1)<<16,20000,0,COINCURSOR+(((int32_t) totalclock>>3)%7),c,0,ROTATE_SPRITE_SCREEN_CLIP,0,0,xdim-1,ydim-1); - } - } -} - - void DrawCrosshair(PLAYERp pp) { extern SWBOOL DemoMode,CameraTestMode; @@ -1513,11 +1484,8 @@ void DrawCrosshair(PLAYERp pp) //NORMALXHAIR: rotatesprite(160<<16, 100<<16, (1 << 16), 0, 2326, 10, 0, - ROTATE_SPRITE_VIEW_CLIP, windowxy1.x, windowxy1.y, windowxy2.x, windowxy2.y); + 0, windowxy1.x, windowxy1.y, windowxy2.x, windowxy2.y); } - - //#define TITLE_ROT_FLAGS (ROTATE_SPRITE_CORNER|ROTATE_SPRITE_SCREEN_CLIP|ROTATE_SPRITE_NON_MASK) - } void CameraView(PLAYERp pp, int *tx, int *ty, int *tz, short *tsectnum, fix16_t *tq16ang, fix16_t *tq16horiz) @@ -1890,35 +1858,6 @@ drawscreen(PLAYERp pp) int const viewingRange = viewingrange; - if (HelpInputMode) - { - renderFlushPerms(); - // note - could put Order Info Pages at the top like this also - - rotatesprite(0,0,65536L,0,HelpPagePic[HelpPage],0,0, - (ROTATE_SPRITE_CORNER|ROTATE_SPRITE_SCREEN_CLIP|ROTATE_SPRITE_NON_MASK|ROTATE_SPRITE_IGNORE_START_MOST), - 0, 0, xdim-1, ydim-1); - videoNextPage(); - - return; - } - -#if 0 - if (TenScreenMode) - { -#define TEN_PIC 5109 - - renderFlushPerms(); - // note - could put Order Info Pages at the top like this also - rotatesprite(0,0,65536L,0,TEN_PIC,0,0, - (ROTATE_SPRITE_CORNER|ROTATE_SPRITE_SCREEN_CLIP|ROTATE_SPRITE_NON_MASK|ROTATE_SPRITE_IGNORE_START_MOST), - 0, 0, xdim-1, ydim-1); - - videoNextPage(); - return; - } -#endif - DrawScreen = TRUE; PreDraw(); // part of new border refresh method @@ -2209,8 +2148,6 @@ drawscreen(PLAYERp pp) // Boss Health Meter, if Boss present BossHealthMeter(); - DrawMessageInput(); // This is only used for non-multiplayer input now - if (!M_Active()) SecretInfo(pp); diff --git a/source/sw/src/game.cpp b/source/sw/src/game.cpp index d840c64eb..7a778fe27 100644 --- a/source/sw/src/game.cpp +++ b/source/sw/src/game.cpp @@ -124,7 +124,7 @@ extern int sw_snd_scratch; #define STAT_SCREEN_PIC 5114 #define TITLE_PIC 2324 #define THREED_REALMS_PIC 2325 -#define TITLE_ROT_FLAGS (ROTATE_SPRITE_CORNER|ROTATE_SPRITE_SCREEN_CLIP|ROTATE_SPRITE_NON_MASK) +#define TITLE_ROT_FLAGS (RS_TOPLEFT|ROTATE_SPRITE_SCREEN_CLIP|ROTATE_SPRITE_NON_MASK) #define PAL_SIZE (256*3) char DemoName[15][16]; @@ -165,11 +165,9 @@ SWBOOL MultiPlayQuitFlag = FALSE; //Miscellaneous variables char MessageInputString[256]; char MessageOutputString[256]; -SWBOOL MessageInputMode = FALSE; SWBOOL ConInputMode = FALSE; SWBOOL ConPanel = FALSE; SWBOOL FinishedLevel = FALSE; -SWBOOL HelpInputMode = FALSE; SWBOOL PanelUpdateMode = TRUE; short HelpPage = 0; short HelpPagePic[] = { 5115, 5116, 5117 }; diff --git a/source/sw/src/game.h b/source/sw/src/game.h index cfd55944e..572b59bf3 100644 --- a/source/sw/src/game.h +++ b/source/sw/src/game.h @@ -227,7 +227,6 @@ y++ ////////////////////////////////////////////////////// extern SWBOOL MenuInputMode; -extern SWBOOL MessageInputMode; extern SWBOOL ConInputMode; extern SWBOOL ConPanel; extern SWBOOL InputMode; @@ -586,15 +585,8 @@ EDUKE32_STATIC_ASSERT(isPow2(MAXSECTORS)); #define OVER_SPRITE_YFLIP (BIT(4)) // rotatesprite flags -#define ROTATE_SPRITE_TRANSLUCENT (BIT(0)) -#define ROTATE_SPRITE_VIEW_CLIP (BIT(1)) // clip to view -#define ROTATE_SPRITE_YFLIP (BIT(2)) -#define ROTATE_SPRITE_IGNORE_START_MOST (BIT(3)) // don't clip to startumost #define ROTATE_SPRITE_SCREEN_CLIP (BIT(1)|BIT(3)) // use window -#define ROTATE_SPRITE_CORNER (BIT(4)) // place sprite from upper left corner -#define ROTATE_SPRITE_TRANS_FLIP (BIT(5)) #define ROTATE_SPRITE_NON_MASK (BIT(6)) // non masked sprites -#define ROTATE_SPRITE_ALL_PAGES (BIT(7)) // copies to all pages #define RS_SCALE BIT(16) diff --git a/source/sw/src/jplayer.cpp b/source/sw/src/jplayer.cpp index 373324af8..47f5ab30a 100644 --- a/source/sw/src/jplayer.cpp +++ b/source/sw/src/jplayer.cpp @@ -229,8 +229,6 @@ void operatefta(void) j=MESSAGE_LINE; // Base line position on screen quotebot = min(quotebot,j); quotebotgoal = min(quotebotgoal,j); - if (MessageInputMode) - j -= 6; // Bump all lines up one to make room for new line quotebotgoal = j; j = quotebot; @@ -275,7 +273,7 @@ void addconquote(const char *daquote) strcpy(con_quote[0],daquote); } -#define CON_ROT_FLAGS (ROTATE_SPRITE_CORNER|ROTATE_SPRITE_SCREEN_CLIP|ROTATE_SPRITE_NON_MASK) +#define CON_ROT_FLAGS (RS_TOPLEFT|ROTATE_SPRITE_SCREEN_CLIP|ROTATE_SPRITE_NON_MASK) void operateconfta(void) { int i, j; diff --git a/source/sw/src/menus.cpp b/source/sw/src/menus.cpp index 13634a014..430e57af0 100644 --- a/source/sw/src/menus.cpp +++ b/source/sw/src/menus.cpp @@ -222,7 +222,7 @@ void MNU_DrawStringLarge(short x, short y, const char *string, int shade) continue; } - rotatesprite(offset << 16, y << 16, MZ, 0, pic, shade, 0, MenuDrawFlags|ROTATE_SPRITE_CORNER, 0, 0, xdim - 1, ydim - 1); + rotatesprite(offset << 16, y << 16, MZ, 0, pic, shade, 0, MenuDrawFlags|RS_TOPLEFT, 0, 0, xdim - 1, ydim - 1); offset += tilesiz[pic].x + 1; } diff --git a/source/sw/src/misc.h b/source/sw/src/misc.h index b69c2bad9..87d70e393 100644 --- a/source/sw/src/misc.h +++ b/source/sw/src/misc.h @@ -54,7 +54,6 @@ void MoveSectorObjects(SECTOR_OBJECTp sop, short locktics); inline int TEXT_INFO_LINE(int line) { return (TEXT_INFO_Y + ((line)*TEXT_INFO_YOFF)); } void DisplayMiniBarSmString(PLAYERp pp, short xs, short ys, short pal, const char* buffer); -void DisplayMiniBarNumber(short xs, short ys, int number); void PutStringInfo(PLAYERp pp, const char* string); void PutStringInfoLine(PLAYERp pp, const char* string); void PutStringInfoLine2(PLAYERp pp, const char* string); diff --git a/source/sw/src/panel.cpp b/source/sw/src/panel.cpp index 6016ba7be..be137fc18 100644 --- a/source/sw/src/panel.cpp +++ b/source/sw/src/panel.cpp @@ -7106,7 +7106,7 @@ pDisplaySprites(PLAYERp pp) if (pp->InventoryActive[INVENTORY_CLOAK]) { - SET(flags, ROTATE_SPRITE_TRANSLUCENT); + SET(flags, RS_TRANS1); } //shade = overlay_shade = DIV2(sector[pp->cursectnum].floorshade + sector[pp->cursectnum].ceilingshade); @@ -7127,20 +7127,17 @@ pDisplaySprites(PLAYERp pp) pal = 0; } - SET(flags, ROTATE_SPRITE_VIEW_CLIP); - if (TEST(psp->flags, PANF_TRANSLUCENT)) - SET(flags, ROTATE_SPRITE_TRANSLUCENT); + SET(flags, RS_TRANS1); SET(flags, TEST(psp->flags, PANF_TRANS_FLIP)); if (TEST(psp->flags, PANF_CORNER)) - SET(flags, ROTATE_SPRITE_CORNER); + SET(flags, RS_TOPLEFT); if ((psp->State && TEST(psp->State->flags, psf_Xflip)) || TEST(psp->flags, PANF_XFLIP)) { - // Build has no xflip, so it uses yflip plus rotation. We don't need the rotation here. - SET(flags, ROTATE_SPRITE_YFLIP); + SET(flags, RS_XFLIPHUD); } // shading @@ -7186,9 +7183,9 @@ pDisplaySprites(PLAYERp pp) case BLOODYFIST3_SWING0: case BLOODYFIST3_SWING1: case BLOODYFIST3_SWING2: - if (TEST(flags, ROTATE_SPRITE_YFLIP) && x > 160) + if (TEST(flags, RS_XFLIPHUD) && x > 160) x = 65; - else if (!TEST(flags, ROTATE_SPRITE_YFLIP) && x < 160) + else if (!TEST(flags, RS_XFLIPHUD) && x < 160) x = 345; break; default: diff --git a/source/sw/src/panel.h b/source/sw/src/panel.h index 610fd0ac3..4d94bc487 100644 --- a/source/sw/src/panel.h +++ b/source/sw/src/panel.h @@ -89,7 +89,6 @@ struct PANEL_STATEstruct #define PANF_JUMPING (BIT(21)) #define PANF_FALLING (BIT(22)) #define PANF_DRAW_BEFORE_VIEW (BIT(30)) // draw before drawrooms -#define PANF_NOT_ALL_PAGES (BIT(31)) // DONT use permanentwritesprite bit for rotatesprite typedef void (*PANEL_SPRITE_FUNCp)(PANEL_SPRITEp); diff --git a/source/sw/src/player.cpp b/source/sw/src/player.cpp index 652fb6d82..7d1f82715 100644 --- a/source/sw/src/player.cpp +++ b/source/sw/src/player.cpp @@ -2494,7 +2494,7 @@ MoveScrollMode2D(PLAYERp pp) int32_t keymove; int32_t momx, momy; static int mfvel=0, mfsvel=0; - extern SWBOOL HelpInputMode, ScrollMode2D; + extern SWBOOL ScrollMode2D; CONTROL_GetInput(&scrl_input); @@ -2538,7 +2538,7 @@ MoveScrollMode2D(PLAYERp pp) keymove = NORMALKEYMOVE; } - if (!HelpInputMode && !ConPanel) + if (!ConPanel) { if (buttonMap.ButtonDown(gamefunc_Turn_Left)) { @@ -2550,7 +2550,7 @@ MoveScrollMode2D(PLAYERp pp) } } - if (!InputMode && !ConPanel) + if (!ConPanel) { if (buttonMap.ButtonDown(gamefunc_Strafe_Left)) { @@ -2563,7 +2563,7 @@ MoveScrollMode2D(PLAYERp pp) } } - if (!HelpInputMode && !ConPanel) + if (!ConPanel) { if (buttonMap.ButtonDown(gamefunc_Move_Forward)) { @@ -7645,10 +7645,9 @@ void PlayerTimers(PLAYERp pp) void ChopsCheck(PLAYERp pp) { - extern SWBOOL HelpInputMode; extern int ChopTics; - if (!M_Active() && !HelpInputMode && !TEST(pp->Flags, PF_DEAD) && !pp->sop_riding && numplayers <= 1) + if (!M_Active() && !TEST(pp->Flags, PF_DEAD) && !pp->sop_riding && numplayers <= 1) { if ((pp->input.bits|pp->input.vel|pp->input.svel|pp->input.q16angvel|pp->input.q16aimvel) || TEST(pp->Flags, PF_CLIMBING|PF_FALLING|PF_DIVING)) diff --git a/source/sw/src/sbar.cpp b/source/sw/src/sbar.cpp index d9acf596d..c9e2098d0 100644 --- a/source/sw/src/sbar.cpp +++ b/source/sw/src/sbar.cpp @@ -730,7 +730,7 @@ class DSWStatusBar : public DBaseStatusBar DrawGraphic(tileGetTexture(MINI_BAR_HEALTH_BOX_PIC), x, y, DI_ITEM_LEFT_TOP, 1, -1, -1, 1, 1); x = MINI_BAR_HEALTH_BOX_X + 3; - DisplayMiniBarNumber(x, y + 5, u->Health); + DisplayPanelNumber(x, y + 5, u->Health); if (u->WeaponNum != WPN_SWORD && u->WeaponNum != WPN_FIST) { @@ -738,7 +738,7 @@ class DSWStatusBar : public DBaseStatusBar DrawGraphic(tileGetTexture(MINI_BAR_AMMO_BOX_PIC), x, y, DI_ITEM_LEFT_TOP, 1, -1, -1, 1, 1); x = MINI_BAR_AMMO_BOX_X + 3; - DisplayMiniBarNumber(x, y + 5, pp->WpnAmmo[u->WeaponNum]); + DisplayPanelNumber(x, y + 5, pp->WpnAmmo[u->WeaponNum]); } if (!pp->InventoryAmount[pp->InventoryNum]) diff --git a/source/sw/src/text.cpp b/source/sw/src/text.cpp index 671fddd06..23e5f6797 100644 --- a/source/sw/src/text.cpp +++ b/source/sw/src/text.cpp @@ -182,34 +182,6 @@ PANEL_SPRITEp pClearSpriteID(PLAYERp pp, short id) } -void -DisplayMiniBarNumber(short xs, short ys, int number) -{ - char buffer[32]; - char *ptr; - short x, size; - short pic; - - sprintf(buffer, "%03d", number); - - for (ptr = buffer, x = xs; *ptr; ptr++, x += size) - { - if (!isdigit(*ptr)) - { - size = 0; - continue; - } - - pic = PANEL_FONT_G + (*ptr - '0'); - - rotatesprite((long)x << 16, (long)ys << 16, (1 << 16), 0, - pic, 0, 0, - ROTATE_SPRITE_SCREEN_CLIP | ROTATE_SPRITE_CORNER | RS_ALIGN_L, - 0, 0, xdim - 1, ydim - 1); - - size = tilesiz[PANEL_FONT_G + (*ptr - '0')].x + 1; - } -} void DisplayMiniBarSmString(PLAYERp UNUSED(pp), short xs, short ys, short pal, const char *buffer) @@ -231,7 +203,7 @@ DisplayMiniBarSmString(PLAYERp UNUSED(pp), short xs, short ys, short pal, const pic = FRAG_FIRST_TILE + (*ptr - FRAG_FIRST_ASCII); rotatesprite((int)x << 16, (int)ys << 16, (1 << 16), 0, pic, 0, pal, - ROTATE_SPRITE_SCREEN_CLIP | ROTATE_SPRITE_CORNER | RS_ALIGN_L, + ROTATE_SPRITE_SCREEN_CLIP | RS_TOPLEFT | RS_ALIGN_L, 0, 0, xdim - 1, ydim - 1); } }