diff --git a/src/extensions/mouse/mouseext_hooks.cpp b/src/extensions/mouse/mouseext_hooks.cpp index 275c60160..fe1434e49 100644 --- a/src/extensions/mouse/mouseext_hooks.cpp +++ b/src/extensions/mouse/mouseext_hooks.cpp @@ -102,7 +102,7 @@ bool MouseClassExt::_Override_Mouse_Shape(MouseType mouse, bool wsmall) * Only certain mouse shapes have a small counterpart. If the requested mouse * shape is not one of these, then force the small size override flag to false. */ - if (control->SmallFrame == -1) { + if (control->SmallFrame == -1 || !control->SmallFrameCount) { wsmall = false; } @@ -113,7 +113,7 @@ bool MouseClassExt::_Override_Mouse_Shape(MouseType mouse, bool wsmall) if (!startup || (MouseShapes && ((mouse != CurrentMouseShape) || (wsmall != IsSmall)))) { startup = true; - Timer = control->FrameRate; + Timer = wsmall ? control->SmallFrameRate : control->FrameRate; Frame = 0; baseshp = Get_Mouse_Current_Frame(mouse, wsmall); @@ -139,11 +139,11 @@ void MouseClassExt::_AI(KeyNumType &input, Point2D &xy) //MouseStruct const * control = &MouseControl[CurrentMouseShape]; MouseTypeClass const * control = MouseTypeClass::As_Pointer(CurrentMouseShape); - if (control->FrameRate && Timer == 0) { + if ((IsSmall && control->SmallFrameRate) || control->FrameRate && Timer == 0) { Frame++; - Frame %= control->FrameCount; - Timer = control->FrameRate; + Frame %= IsSmall ? control->SmallFrameCount : control->FrameCount; + Timer = IsSmall ? control->SmallFrameRate : control->FrameRate; int baseframe = Get_Mouse_Current_Frame(CurrentMouseShape, IsSmall); Point2D hotspot = Get_Mouse_Hotspot(CurrentMouseShape); WWMouse->Set_Cursor(&hotspot, MouseShapes, baseframe); diff --git a/src/new/mousetype/mousetype.cpp b/src/new/mousetype/mousetype.cpp index 90f6cca0d..26b9eb44e 100644 --- a/src/new/mousetype/mousetype.cpp +++ b/src/new/mousetype/mousetype.cpp @@ -114,76 +114,76 @@ const char *MouseTypeClass::MouseNames[MOUSE_COUNT] = { * sequences. */ MouseTypeClass MouseTypeClass::MouseControl[MOUSE_COUNT] = { - MouseTypeClass ( 0, 1, 0, 1, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MIN } ), // MOUSE_NORMAL, - - MouseTypeClass ( 2, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MIN } ), // MOUSE_N, - MouseTypeClass ( 3, 1, 0, -1, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MIN } ), // MOUSE_NE, - MouseTypeClass ( 4, 1, 0, -1, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_CENTER } ), // MOUSE_E, - MouseTypeClass ( 5, 1, 0, -1, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MAX } ), // MOUSE_SE, - MouseTypeClass ( 6, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MAX } ), // MOUSE_S, - MouseTypeClass ( 7, 1, 0, -1, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MAX } ), // MOUSE_SW, - MouseTypeClass ( 8, 1, 0, -1, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_CENTER } ), // MOUSE_W, - MouseTypeClass ( 9, 1, 0, -1, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MIN } ), // MOUSE_NW, - MouseTypeClass ( 10, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MIN } ), // MOUSE_NO_N, - MouseTypeClass ( 11, 1, 0, -1, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MIN } ), // MOUSE_NO_NE, - MouseTypeClass ( 12, 1, 0, -1, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_E, - MouseTypeClass ( 13, 1, 0, -1, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MAX } ), // MOUSE_NO_SE, - MouseTypeClass ( 14, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MAX } ), // MOUSE_NO_S, - MouseTypeClass ( 15, 1, 0, -1, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MAX } ), // MOUSE_NO_SW, - MouseTypeClass ( 16, 1, 0, -1, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_W, - MouseTypeClass ( 17, 1, 0, -1, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MIN } ), // MOUSE_NO_NW, - - MouseTypeClass ( 18, 13, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CAN_SELECT, - MouseTypeClass ( 31, 10, 4, 42, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CAN_MOVE, - MouseTypeClass ( 41, 1, 0, 52, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_MOVE, - MouseTypeClass ( 53, 5, 4, 63, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_STAY_ATTACK, - MouseTypeClass ( 58, 5, 4, 63, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CAN_ATTACK, - MouseTypeClass ( 68, 5, 4, 73, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_AREA_GUARD, - MouseTypeClass ( 78, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_TOTE, - MouseTypeClass ( 88, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_TOTE, - MouseTypeClass ( 89, 10, 4, 100, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ENTER, - MouseTypeClass ( 99, 1, 0, 63, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_ENTER, - MouseTypeClass ( 110, 9, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_DEPLOY, - MouseTypeClass ( 119, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_DEPLOY, - MouseTypeClass ( 120, 9, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_UNDEPLOY, - MouseTypeClass ( 129, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SELL_BACK, - MouseTypeClass ( 139, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SELL_UNIT, - MouseTypeClass ( 149, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_SELL_BACK, - MouseTypeClass ( 150, 20, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_GREPAIR, // Engineer entering friendly building to heal it. - MouseTypeClass ( 170, 20, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_REPAIR, - MouseTypeClass ( 190, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_REPAIR, - MouseTypeClass ( 191, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_WAYPOINT, - MouseTypeClass ( 201, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_PLACE_WAYPOINT, - MouseTypeClass ( 211, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_PLACE_WAYPOINT, - MouseTypeClass ( 212, 7, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SELECT_WAYPOINT, - MouseTypeClass ( 219, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ENTER_WAYPOINT_MODE, - MouseTypeClass ( 229, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_FOLLOW_WAYPOINT, - MouseTypeClass ( 239, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_WAYPOINT_TOTE, - MouseTypeClass ( 249, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_WAYPOINT_REPAIR, - MouseTypeClass ( 259, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ATTACK_WAYPOINT, - MouseTypeClass ( 269, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ENTER_WAYPOINT, - MouseTypeClass ( 356, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_LOOP_WAYPOINT_PATH, - MouseTypeClass ( 279, 20, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_AIR_STRIKE, - MouseTypeClass ( 299, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CHEMBOMB, - MouseTypeClass ( 309, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_DEMOLITIONS, - MouseTypeClass ( 319, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NUCLEAR_BOMB, - MouseTypeClass ( 329, 16, 2, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_TOGGLE_POWER, - MouseTypeClass ( 345, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_TOGGLE_POWER, - MouseTypeClass ( 346, 10, 4, 42, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_HEAL, - MouseTypeClass ( 357, 20, 3, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_EM_PULSE, - MouseTypeClass ( 377, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_EM_PULSE_RANGE, - - MouseTypeClass ( 378, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING, - MouseTypeClass ( 379, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_N, - MouseTypeClass ( 380, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_NE, - MouseTypeClass ( 381, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_E, - MouseTypeClass ( 382, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_SE, - MouseTypeClass ( 383, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_S, - MouseTypeClass ( 384, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_SW, - MouseTypeClass ( 385, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_W, - MouseTypeClass ( 386, 1, 0, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_NW, - - MouseTypeClass ( 387, 10, 4, -1, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ) // MOUSE_PATROL_WAYPOINT, + MouseTypeClass ( 0, 1, 0, 1, 1, 0, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MIN } ), // MOUSE_NORMAL, + + MouseTypeClass ( 2, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MIN } ), // MOUSE_N, + MouseTypeClass ( 3, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MIN } ), // MOUSE_NE, + MouseTypeClass ( 4, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_CENTER } ), // MOUSE_E, + MouseTypeClass ( 5, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MAX } ), // MOUSE_SE, + MouseTypeClass ( 6, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MAX } ), // MOUSE_S, + MouseTypeClass ( 7, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MAX } ), // MOUSE_SW, + MouseTypeClass ( 8, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_CENTER } ), // MOUSE_W, + MouseTypeClass ( 9, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MIN } ), // MOUSE_NW, + MouseTypeClass ( 10, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MIN } ), // MOUSE_NO_N, + MouseTypeClass ( 11, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MIN } ), // MOUSE_NO_NE, + MouseTypeClass ( 12, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_E, + MouseTypeClass ( 13, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MAX, MOUSE_HOTSPOT_MAX } ), // MOUSE_NO_SE, + MouseTypeClass ( 14, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_MAX } ), // MOUSE_NO_S, + MouseTypeClass ( 15, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MAX } ), // MOUSE_NO_SW, + MouseTypeClass ( 16, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_W, + MouseTypeClass ( 17, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_MIN, MOUSE_HOTSPOT_MIN } ), // MOUSE_NO_NW, + + MouseTypeClass ( 18, 13, 4, -1, 13, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CAN_SELECT, + MouseTypeClass ( 31, 10, 4, 42, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CAN_MOVE, + MouseTypeClass ( 41, 1, 0, 52, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_MOVE, + MouseTypeClass ( 53, 5, 4, 63, 5, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_STAY_ATTACK, + MouseTypeClass ( 58, 5, 4, 63, 5, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CAN_ATTACK, + MouseTypeClass ( 68, 5, 4, 73, 5, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_AREA_GUARD, + MouseTypeClass ( 78, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_TOTE, + MouseTypeClass ( 88, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_TOTE, + MouseTypeClass ( 89, 10, 4, 100, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ENTER, + MouseTypeClass ( 99, 1, 0, 63, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_ENTER, + MouseTypeClass ( 110, 9, 4, -1, 9, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_DEPLOY, + MouseTypeClass ( 119, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_DEPLOY, + MouseTypeClass ( 120, 9, 4, -1, 9, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_UNDEPLOY, + MouseTypeClass ( 129, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SELL_BACK, + MouseTypeClass ( 139, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SELL_UNIT, + MouseTypeClass ( 149, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_SELL_BACK, + MouseTypeClass ( 150, 20, 4, -1, 20, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_GREPAIR, // Engineer entering friendly building to heal it. + MouseTypeClass ( 170, 20, 4, -1, 20, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_REPAIR, // Engineer entering building to damage it. + MouseTypeClass ( 190, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_REPAIR, + MouseTypeClass ( 191, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_WAYPOINT, + MouseTypeClass ( 201, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_PLACE_WAYPOINT, + MouseTypeClass ( 211, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_PLACE_WAYPOINT, + MouseTypeClass ( 212, 7, 4, -1, 7, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SELECT_WAYPOINT, + MouseTypeClass ( 219, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ENTER_WAYPOINT_MODE, + MouseTypeClass ( 229, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_FOLLOW_WAYPOINT, + MouseTypeClass ( 239, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_WAYPOINT_TOTE, + MouseTypeClass ( 249, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_WAYPOINT_REPAIR, + MouseTypeClass ( 259, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ATTACK_WAYPOINT, + MouseTypeClass ( 269, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_ENTER_WAYPOINT, + MouseTypeClass ( 356, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_LOOP_WAYPOINT_PATH, + MouseTypeClass ( 279, 20, 4, -1, 20, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_AIR_STRIKE, + MouseTypeClass ( 299, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_CHEMBOMB, + MouseTypeClass ( 309, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_DEMOLITIONS, + MouseTypeClass ( 319, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NUCLEAR_BOMB, + MouseTypeClass ( 329, 16, 2, -1, 16, 2, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_TOGGLE_POWER, + MouseTypeClass ( 345, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_NO_TOGGLE_POWER, + MouseTypeClass ( 346, 10, 4, 42, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_HEAL, + MouseTypeClass ( 357, 20, 3, -1, 20, 3, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_EM_PULSE, + MouseTypeClass ( 377, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_EM_PULSE_RANGE, + + MouseTypeClass ( 378, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING, + MouseTypeClass ( 379, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_N, + MouseTypeClass ( 380, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_NE, + MouseTypeClass ( 381, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_E, + MouseTypeClass ( 382, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_SE, + MouseTypeClass ( 383, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_S, + MouseTypeClass ( 384, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_SW, + MouseTypeClass ( 385, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_W, + MouseTypeClass ( 386, 1, 0, -1, 1, 0, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ), // MOUSE_SCROLL_COASTING_NW, + + MouseTypeClass ( 387, 10, 4, -1, 10, 4, { MOUSE_HOTSPOT_CENTER, MOUSE_HOTSPOT_CENTER } ) // MOUSE_PATROL_WAYPOINT, }; @@ -192,11 +192,13 @@ MouseTypeClass MouseTypeClass::MouseControl[MOUSE_COUNT] = { * * @author: CCHyper */ -MouseTypeClass::MouseTypeClass(int start_frame, int frame_count, int frame_rate, int small_frame, Point2D hotspot) : +MouseTypeClass::MouseTypeClass(int start_frame, int frame_count, int frame_rate, int small_frame, int small_frame_count, int small_frame_rate, Point2D hotspot) : StartFrame(start_frame), FrameCount(frame_count), FrameRate(frame_rate), SmallFrame(small_frame), + SmallFrameCount(small_frame_count), + SmallFrameRate(small_frame_rate), Hotspot(hotspot) { MouseTypes.Add(this); @@ -244,6 +246,8 @@ void MouseTypeClass::One_Time() MouseControl[mouse].FrameCount, MouseControl[mouse].FrameRate, MouseControl[mouse].SmallFrame, + MouseControl[mouse].SmallFrameCount, + MouseControl[mouse].SmallFrameRate, MouseControl[mouse].Hotspot); ASSERT(mousectrl != nullptr); @@ -292,6 +296,12 @@ bool MouseTypeClass::Read_Mouse_INI(CCINIClass &ini) tok = std::strtok(nullptr, ","); mousectrl->SmallFrame = std::strtol(tok, nullptr, 10); + tok = std::strtok(nullptr, ","); + mousectrl->SmallFrameCount = std::strtol(tok, nullptr, 10); + + tok = std::strtok(nullptr, ","); + mousectrl->SmallFrameRate = std::strtol(tok, nullptr, 10); + tok = std::strtok(nullptr, ","); if (!strcmpi(tok, "left")) { value = MOUSE_HOTSPOT_MIN; @@ -371,11 +381,13 @@ bool MouseTypeClass::Write_Default_Mouse_INI(CCINIClass &ini) return false; }; - std::snprintf(buffer, sizeof(buffer), "%d,%d,%d,%d,%s,%s", + std::snprintf(buffer, sizeof(buffer), "%d,%d,%d,%d,%d,%d,%s,%s", mousectrl.StartFrame, mousectrl.FrameCount, mousectrl.FrameRate, mousectrl.SmallFrame, + mousectrl.SmallFrameCount, + mousectrl.SmallFrameRate, hotspot_x, hotspot_y); diff --git a/src/new/mousetype/mousetype.h b/src/new/mousetype/mousetype.h index 934f5f1f4..f0b83ea7b 100644 --- a/src/new/mousetype/mousetype.h +++ b/src/new/mousetype/mousetype.h @@ -45,7 +45,7 @@ class MouseTypeClass friend class MouseClassExt; public: - MouseTypeClass(int start_frame, int frame_count, int frame_rate, int small_frame, Point2D hotspot); + MouseTypeClass(int start_frame, int frame_count, int frame_rate, int small_frame, int small_frame_count, int small_frame_rate, Point2D hotspot); MouseTypeClass(const NoInitClass &noinit); virtual ~MouseTypeClass(); @@ -82,6 +82,16 @@ class MouseTypeClass */ int SmallFrame; + /** + * Number of animation frames for small version (if any). + */ + int SmallFrameCount; + + /** + * Frame delay between changing frames for small version (if any). + */ + int SmallFrameRate; + /** * Hotspot X and Y offset. */