It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
While the native Linux build of Contraption Maker seems to work as expected on the X.org display server, it does crash on launch when using Wayland + XWayland. Here is a copy of the segmentation fault backtrace:
#0 0x0000000000f9da87 in _glfwPlatformInit ()
#1 0x0000000000f99469 in glfwInit ()
#2 0x0000000000d86fdc in cocos2d::GLViewImpl::GLViewImpl() ()
#3 0x0000000000d87230 in cocos2d::GLViewImpl::createWithFullScreen(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#4 0x00000000008dbae4 in AppDelegate::applicationDidFinishLaunching() ()
#5 0x0000000000d82178 in cocos2d::Application::run() ()
#6 0x00000000008601c1 in main ()
I get the same behaviour with the much older Humble Bundle build, so this does not seem to be related to the GOG build itself, nor to recent updates.

More details can be found on ./play.it forge.
With some help, we tracked down the segmentation fault to the version of GFLW that is statically linked into the game binary. We will keep investigating and try to get a workaround included in XWayland, but a real fix would be to:
- use dynamic linking against libglfw.so.3, instead of including an old version of the library in the game binary
- update the shipped version of libglfw.so.3, the one currently used is almost 9 years old
After investigating a bit more, it looks like we can not expect a workaround at the XWayland level. The only reasonable fix would be to update the GFLW build Contraption Maker relies on.

A dedicated bug report has been opened on ./play.it forge to keep track of this crash: Contraption Maker - Crash on XWayland.
Post edited November 10, 2023 by vv221
Since this game is built on top of the cocos2d engine it should probably be updated to use cocos2d ≥ 3.13, as this is the first version of this framework including GLFW ≥ 3.2.
A hack has been included in ./play.it to avoid the crash on XWayland.

It is based on the following preload shim:
#define _GNU_SOURCE
#include <stdio.h>
#include <X11/XKBlib.h>

XkbDescPtr XkbGetKeyboard(Display *display, unsigned int _,
unsigned int device_spec)
{
XkbDescPtr desc = XkbGetMap(display, 0, device_spec);
XkbGetNames(display, XkbKeyNamesMask, desc);
return desc;
}

void XkbFreeKeyboard(XkbDescPtr xkb, unsigned int which, Bool free_all)
{
XkbFreeNames(xkb, XkbKeyNamesMask, free_all);
XkbFreeClientMap(xkb, which, free_all);
}
(sorry for the lack of indentation, you can blame the GOG forum engine for that)