Wintermute Engine Forum

General Category => Software and games => Topic started by: Mot on May 30, 2021, 12:02:43 AM

Title: Wintermute in other Operating Systems: Wine Edition
Post by: Mot on May 30, 2021, 12:02:43 AM
Recently I installed Wintermute Engine Development Kit in my GNU/Linux machine (by means of Wine (https://www.winehq.org/) 5.0) and I was nicely surprised to see that everything worked: every tool and every demo (including those with 3D features).

I also tested several games made with WME (The White Chamber, Kulivo─Źko, and James Peris) and they all worked nicely - no apparent lag, loss of graphic quality or bug.

As far as I read, these are the operating systems for which Wine provides binary packages: Android, Ubuntu, Debian, Fedora, macOS, Suse, Slackware and FreeBSD. It can also be built from source.

Notes (after installing Wine):

(1) Wine comes with its own variant of DirectX, so there's no need to install native DirectX (in fact, they recommend not to). I didn't.

(2) I installed .NET Framework 2.0 (https://appdb.winehq.org/appview.php?iVersionId=3754) (as suggested by Wintermute installer). Apparently Wine also comes with its own version (of .NET), but since Wintermute is working this way ...

(3) Wine does not sandbox malware. If you use Wine, you should be careful about which Windows programs you pick (in order to avoid installing malware). Never run Wine as root (not even sudo). Never. There's no need for it under any circumstance.

(https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fih1.redbubble.net%2Fimage.118653520.3619%2Fflat%2C800x800%2C070%2Cf.u2.jpg&f=1&nofb=1)

Wine (originally an acronym for "Wine Is Not an Emulator") is a compatibility layer capable of running Windows applications on several POSIX-compliant operating systems, such as GNU/Linux, macOS, and BSD.

Instead of simulating internal Windows logic like a virtual machine or emulator, Wine translates Windows API calls into POSIX calls on-the-fly, eliminating the performance and memory penalties of other methods, and allowing to integrate Windows applications into the desktop.
Title: Re: Wintermute in other Operating Systems: Wine Edition
Post by: Mot on April 19, 2022, 07:54:44 PM
I run into an issue while using SpriteEdit under Wine 7.0 (Stable). When I try to add a frame, a message pops up explaining that it needs to close the program, and subsequently it closes it down. On the other hand, the rest seems to be working fine.

So if you're set in using Wine 7.0, you can still add frames to your sprite (eg. MyFile.sprite) via a text editor, and then open the hand-edited file in SpriteEdit to set (visually) variables, such as the hotspot coordinates, etc.

To give you an idea of what you would need to do, here's a a sprite without frames (named chair.sprite) that I created by clicking the option 'Add sprite'. Then I opened it in a text editor.

Code: [Select]
; $EDITOR_PROJECT_ROOT_DIR$ ..\..\..\
; generated by SpriteEdit

SPRITE {
  NAME="chair"
  LOOPING=TRUE
  CONTINUOUS=FALSE
  PRECISE=TRUE
}

And now I will add a frame by copy-pasting the text part corresponding to the frame, like in the example below. Important: I fill the IMAGE variable with the location (within the project) where the wouldbe frame image is located; in this case: IMAGE = "tutorial\gfx\chair.bmp"

Code: [Select]
; generated by SpriteEdit

; $EDITOR_PROJECT_ROOT_DIR$ ..\..\..\

SPRITE {
  NAME="chair"
  LOOPING=FALSE
  CONTINUOUS=FALSE
  PRECISE=TRUE
  FRAME {
    DELAY = 0
    KEYFRAME=FALSE
    IMAGE = "tutorial\gfx\chair.bmp"
    HOTSPOT {0, 0}
    EDITOR_SELECTED=TRUE
  }

}

That's it. chair.sprite is ready to be opened in SpriteEdit, where I can set the hotspot coordinates of such frame, and other settings.

The same method can be applied to multiple frame sprites. Here you can see the finished version of walk.sprite portraying the character Molly walking in the dd direction:

Code: [Select]
; generated by SpriteEdit

; $EDITOR_PROJECT_ROOT_DIR$ ..\..\..\..\

SPRITE {
  NAME=""
  LOOPING=TRUE
  CONTINUOUS=FALSE
  PRECISE=TRUE
  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\00.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\01.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\02.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\03.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\04.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\05.bmp"
    HOTSPOT {50, 250}
    EDITOR_SELECTED=TRUE
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\06.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\07.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\08.bmp"
    HOTSPOT {50, 250}
  }

  FRAME {
    DELAY = 90
    MOVE {0, 8}
    KEYFRAME=FALSE
    IMAGE = "actors\molly\dd\walk\09.bmp"
    HOTSPOT {50, 250}
  }

}