Fixes #4933 by refactoring climbing (ty MrPerson)