OhMyGame
OhMyGame is the open-source studio for making games with AI. Design, build, playtest, and publish games in one app, with your own model keys.
Un jeu Sonic écrit en PHP, qui tourne dans le navigateur grâce à PHP + SDL2 compilés en WebAssembly. Ordinateur, Android, iPhone, iPad.
Translation pending
GamesJavaScript · HTMLGitHub @davidnurdinOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A poc of Sonic in PHP (with wasm)
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗[DEMO] ( working yet on android ! ) => https://davidnurdin.github.io/php-wasm-sdl/
Documentation (français) :
https://github.com/soyuka/php-wasm
Project based on https://github.com/seanmorris/php-wasm which was forked from https://github.com/oraoto/pib
I fixed some inconsistencies in the Makefile and removed non-essential things. This fork:
docker buildx bake
Builded files will be located in build/php-web.js and build/php-web.wasm.
The module we export in this image is called createPhpModule.
Use this as template to build PHP with emscripten. At build these arguments are available:
LIBXML2_TAG=v2.9.10
PHP_BRANCH=PHP-8.3.0
The next args are used for emcc options -sOPTION
see settings.js.
In fact it's even easier for you to set them directly in the Dockerfile.
WASM_ENVIRONMENT=web
ASSERTIONS=0
OPTIMIZE=-O2
INITIAL_MEMORY=256mb
JAVASCRIPT_EXTENSION=mjs # change by js if needed
MODULARIZE=1
EXPORT_ES6=1
EXPORT_NAME=createPhpModule
My preferred option is to use the file_packager tool to build the preloaded data in a php-web.data.js (and php-web.data file). These are preloaded into IDBFS. That can be changed changing the -lidbfs.js argument to emcc.
This will preload SOME_DIR into the /src directory inside the WASM filesystem:
mkdir -p php-wasm
docker run -v SOME_DIR:/src -v $(pwd)/php-wasm:/dist -w /dist soyuka/php-wasm:8.2.9 python3 /emsdk/upstream/emscripten/tools/file_packager.py php-web.data --use-preload-cache --lz4 --preload "/src" --js-output=php-web.data.js --no-node --exclude '*/.*' --export-name=createPhpModule
ls php-wasm/
Note that the php-web.data.js must be either used as PRE_JS argument to emcc or it needs to be included inside the php-web.js:
sed '/--pre-js/r php-wasm/php-web.data.js' php-wasm/php-web.mjs > this-has-preloaded-data-php-web.mjs
We match the export-name with the emcc EXPORT_NAME option. Use excludes to downsize the preloaded data weight.
To execute some php, call phpw_exec using ccall, for example:
const phpBinary = require('build/php-web');
return phpBinary({
onAbort: function(reason) {
console.error('WASM aborted: ' + reason)
},
print: function (...args) {
console.log('stdout: ', args)
},
printErr: function (...args) {
console.log('stderr: ', args)
}
})
.then(({ccall, FS}) => {
const phpVersion = ccall(
'phpw_exec'
, 'string'
, ['string']
, [`phpversion();`]
);
})
phpw_exec(string code): string
phpw_run(string code): void
phpw(string filePath): void
const STR = 'string';
ccall("phpw", null, [STR], ["public/index.php"]);
console.log(ccall("phpw_exec", STR, [STR], ["phpversion();"]));
More about how to call exposed functions
Before running the demo, you need to build the library.
docker buildx bake
Then you need to copy
the php-web.js and php-web.wasm to the demo directory.
$ cp build/php-web.* demo/public/
Then to build the preloaded data:
docker run \
-v $(pwd)/demo/src:/src \
-v $(pwd)/demo/public:/dist \
-w /dist \
soyuka/php-wasm:8.2.9 \
python3 \
/emsdk/upstream/emscripten/tools/file_packager.py \
php-web.data \
--use-preload-cache \
--lz4 \
--preload "/src" \
--js-output=php-web.data.js \
--no-node \
--exclude '*/.*' \
--export-name=createPhpModule
Then attach the php-web.data.js to the demo/public/php-web.mjs:
sed '/--pre-js/r demo/public/php-web.data.js' demo/public/php-web.mjs > this-has-preloaded-data-php-web.mjs ; mv this-has-preloaded-data-php-web.mjs demo/public/php-web.mjs
And finally open a web sserver in the demo directory:
$ php -S 127.0.0.1:8000 -t demo/public