# \[REQUEST\] BunnyHop / AutoHop for SpearMint / ioquake3, can you add it please?

**URL:** <https://discourse.ioquake.org/t/request-bunnyhop-autohop-for-spearmint-ioquake3-can-you-add-it-please/2030>\
**Category:** ioquake3\
**Created:** [March 23, 2025, 2:44pm UTC](https://discourse.ioquake.org/t/request-bunnyhop-autohop-for-spearmint-ioquake3-can-you-add-it-please/2030 "2025-03-23T14:44:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![SolivaN](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.ioquake.org/solivan/32/524_2.png) [@SolivaN](https://discourse.ioquake.org/u/SolivaN)\
**Post date:** [March 23, 2025, 2:44pm UTC](https://discourse.ioquake.org/t/request-bunnyhop-autohop-for-spearmint-ioquake3-can-you-add-it-please/2030/1 "2025-03-23T14:44:22Z")

</div>

I know some hate it.  
Quake Champions and Quake Live has it feature incorporated.  
For me (and at least many others) autohop/bunnyhop are very comfortable, because i don’t need to constantly press the space (or whatever key you have binded to +moveup).

Making more enjoyable to make some acrobatics or simply move fastly around the maps.

I’ve done it inyecting the following code to Quake 3 1.32 vanilla…

```
#include "pch.h"
DWORD FL_ONGROUND = (DWORD)GetModuleHandle(L"quake3.exe") + 0x75A74C;
int* ground = (int*)FL_ONGROUND;

DWORD JUMP = (DWORD)GetModuleHandle(L"quake3.exe") + 0x80B7B0;
int* jump = (int*)JUMP;

DWORD WINAPI BunnyHop(LPVOID x)
{
    while (1)
    {
        if (GetKeyState(VK_SPACE) & 0X80000)
        {
            if (*ground < 1)
            {
                *jump = 1;
            }
            else
            {
                *jump = 0;
            }
        }
        else
        {
            *ground = 0;
            *jump = 0;
        }
        Sleep(1);
    }
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    {
        CreateThread(NULL, 0, BunnyHop, NULL, 0, NULL);
    }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

```

Here’s and example of gameplays:  
**Quake 3 DLL injected bunny hop**

[![](https://img.youtube.com/vi/Q0OSdQASl9g/maxresdefault.jpg "Quake 3 bunny hop / auto hop") ](https://www.youtube.com/watch?v=Q0OSdQASl9g)

_But the DLL injection don’t work perfectly._  
_Because the iteration is interrupted when we press backward [+back]_  
_So the auto bunnyhop stop and even the jump function don’t respond sometimes._  
_But, if we press forward [+forward] or left or right [+moveleft / +moveright] the code will work again and auto bunnyhop comeback correctly._

_I think some other memory function are relationed with jump action [+moveup]_

**Quake Live bunny hop**

[![](https://img.youtube.com/vi/LUMUBcXvvv8/maxresdefault.jpg "Quake Live bunny hop / auto hop") ](https://www.youtube.com/watch?v=LUMUBcXvvv8)

**Quake Champions bunny hop**

[![](https://img.youtube.com/vi/Lo0XonHEhm4/maxresdefault.jpg "Quake Champions bunny hop / auto hop") ](https://www.youtube.com/watch?v=Lo0XonHEhm4)

Quake Live manage this with two cvars:  
pmove\_bunnyhop 1/0  
pmove\_autohop 1/0

 ![20250323102434_1](https://canada1.discourse-cdn.com/flex030/uploads/ioquake/original/1X/5b6772276194b722057b045f0b4c817c00178044.jpeg)

Is feasible do this?

---

<div class="post-metadata">

**Author:** ![MrNuclearMonster](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.ioquake.org/mrnuclearmonster/32/820_2.png) [@MrNuclearMonster](https://discourse.ioquake.org/u/MrNuclearMonster)\
**Post date:** [March 23, 2025, 9:11pm UTC](https://discourse.ioquake.org/t/request-bunnyhop-autohop-for-spearmint-ioquake3-can-you-add-it-please/2030/2 "2025-03-23T21:11:46Z")

</div>

ioquake3 doesn’t do gameplay changes like this that would make the gameplay incompatible with baseq3.

---

<div class="post-metadata">

**Author:** ![SolivaN](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.ioquake.org/solivan/32/524_2.png) [@SolivaN](https://discourse.ioquake.org/u/SolivaN)\
**Post date:** [March 30, 2025, 11:36pm UTC](https://discourse.ioquake.org/t/request-bunnyhop-autohop-for-spearmint-ioquake3-can-you-add-it-please/2030/3 "2025-03-30T23:36:20Z")

</div>

I know I know… the same thing told me the Quake3e people…

BUT! from those discussion appears a nice idea, that have the:  
“Perfectly Balanced mod/baseq3, As All Things Should Be…”

I say:  
Implement BunnyHop in the gamecode but only make it accessible from a server-side cvar or via a dmflags value.  
And make the BunnyHop set to disabled by default.

What do you think now?  
This is the most friendly conservate way to not altering the base game.

---

<div class="post-metadata">

**Author:** ![MrNuclearMonster](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.ioquake.org/mrnuclearmonster/32/820_2.png) [@MrNuclearMonster](https://discourse.ioquake.org/u/MrNuclearMonster)\
**Post date:** [March 31, 2025, 12:06am UTC](https://discourse.ioquake.org/t/request-bunnyhop-autohop-for-spearmint-ioquake3-can-you-add-it-please/2030/4 "2025-03-31T00:06:03Z")

</div>

So this would be a fine mod to make, and you or someone else can make it, but it is unlikely to be part of ioquake3.
