Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - mdotedot

Pages: 1 2 3 ... 6
A Developers Journal / Post Mortem.

My ludum dare participation wend incredible well this time.
You propably know that I like to do things that shouldn't be done and this time this way of doing seems to work out nicely.
Initially I wanted to have another theme like hidden worlds or Lost Signal / split in two. But it was Deeper and Deeper.
Directly I had an idea about (deep)voice control. But how can I get that?

After the first hours I had audio recording but I could not figure out how to get the pitch from the recorded WAV file.
During game play I could save the recorded data to my server and use Linux tools to inspect this.
That would have been a way forward but I wanted to have realtime feedback. After some investigation I found out
that there are some Javascript stuff to get real data from a stream. BINGO.

After some tweaks to find out what the 'notes' are I found out that the frequency was the thing that made everything much better.

So on Saturday morning I had the game mechanic in place. The rest of the day (till 04:00) I worked on the animations.
Last week I installed Aseprite and had some experience with it.
That tool is sooooo much better than my previous experience with GIMP.
I could work with layers so much faster and I found out that I could use Remote Desktop on my Samsung Tab Note 7 plus.
So I had pen control. Some of you might know that I make 'regular art' and using the pen on my Tab made drawing so much more efficient with the computer.
Previous attempts where with scanning regular drawings and I lost the line-work  with it and spending time on drawing and then fixing things on the computer afterwards was not very efficient.

Using some references online I could select frames from regular animations and draw them. This wend very well and at the end of the day I had a lot of animations and other artwork ready.

Sunday was all about getting the right pitch for the game play. I needed to tweak the input to be more forgiving. No input wend from high/low frequency to 0 in an instant.
If I would have had a character following that inputpath they would surely crash into the ground immediately.
So tweaking this data took a few hours.

Next was to make it multiplayer. Oh boy that was another challenge. After a few hours it boiled down to the fact that in order to get audio input I had to make a secure (HTTPS) connection to the server.
But frustrating enough that requirement didn't uphold on my 'localhost' execution when testing the stencyl game.
On localhost you can have audio input and do client to server communications on a non-secure protocol. But once I uploaded a built to test on my server that failed. You cannot mix secure and non-secure protocols !!!
That TESTing was what I learned on previous jams. When you make everything on your local system it could fail missarably on a server. Past experience was with 3D assets that loaded differently.

So fail faster was here the thing that rescued me.

Conclusion : don't mix https with non-secure websockets. I didn't want to investigate in making the websockets secure. I know that it can be done but I didn't want to spend all Sunday making/fixing this.

That resulted in the way that I had four character-animations and I could have made the game with just one. So I decided to have the four characters be selected during the start of the game.

Adding all the assets together was prety straight-forward. (But as you all know : takes time) And on Sunday afternoon I had:

  • Character Selection Menu
  • Character control
  • Object spawning (cow, windmill, kite and airplane)
  • Different heights of the object spawning and using the wave behavior

At that time (Sunday 18:00) I wanted to have some audio in the game and I recorded lots of things with my voice to be added into the game.
Unfortunately I couldn't get audio to play. I think that is caused by having the audio channels 'blocked' by the recording.
I believe I should be able to adjust this, but, again at that time I felt that I should not bother to touch the working code.

The remainder of the time I spend on making the -test-for-audio- in HTML and make according scenes to give the player chance to turn on their audio. A audio recording bar would indicate the level of input to the player and they can start playing.

I wanted to make a death animation and a nice 'Loser' / 'Winner' screen but the time was running out and I selected for one scene that had either one of the results in them.

Two hours or so before the deadline I completed the LD page and wend to bed.

The next morning I was surprised with the great feedback I received and most people seem to enjoy my entry. WOW very excited!
On Monday afternoon I had already received enough ratings to be given a score at the end of the compo. How cool is that!

If you are doing a LD yourself I would greatly appreciate a vote/comment from you on my LD page (I will certainly comment/rate yours if you post me your LD page)

I will be updating this post with the result I will get. (22 days from now)

Shared Resources / Playing Cards Resources
« on: January 26, 2021, 12:01:04 am »

Ginge on the discord chat made a Cards game. He gave permission to post this here.

Download Cards Stencyl file

His discord post:


The code contains:
- a deck of cards (images from imported as distinct animations on a single actor
- code to set up a Deck as a list and generate the 52 actors
- a shuffle function
- the ability to click and drag cards around the screen
- the ability to flip a card (or all cards) over
- and some Debug codes:
     - Space spreads the cards out to view them all based on their order in the Deck list
     - Enter triggers the "flip" event in all cards
     - Tab sends all the cards to a stack in the top left corner and flips them facedown
     - Up shuffles the deck again.
     - Note: If you press Up followed by Space, the cards will reorganize
                   themselves to the new shuffle
Cards keep track of their suit and their value. This allows the code to switch between the facedown animation and their correct faceup animation. Additionally, that would be useful as separate Attributes for games such as Solitaire, War, etc when you need to compare values
Future things to add:
- "Piles" as a set of facedown cards
- a "Draw" function that takes the top card of a Pile. It can either go to a display spot on the table (a la Texas Hold'em Poker or Solitaire) or into a "Hand" list
- a "Stack" of cards that moves together. If you grab at one card, it will drag all cards stacked on top of it with you, but leave the ones behind that card.
- Might add the option for the Deck to actually contain multiple copies of the full deck of cards as some games call for 2-4 decks to be mixed together.
Some Card Resources:

Poker Extension
Cards question
Cards game by LIBERADO
drag drop 1 actor

After 12 hours I am ready for a break. I didn't got any sleep over 34 hours :D

Theme : Stuck in a Loop

What I'm going for is that you are stuck with your friends. There should be zombies and vampires.
Vampires come out at night and the zombies during the daytime.
You are in a cemetery and when you think you reach the end it will LOOP you back.

  • Gimp
  • MagicaVoxel
  • MixaMo
  • Noesis
  • Colyseus Extension
  • Away3D Extension

  • Room Lock template adaption
  • Healthbar behavior
  • Random wall generator
  • Searching free spot
  • HIT - detection. Currently on friends : To be converted into monsters-only (More emphasis on Co-Op)
  • PointLight mechanism so that you can help your friends spot enemies

  • Enemies
  • Spawning and fighting mechanism for the enemies
  • Day/Night cycle
  • Limit room for 4 players and offer creation of room for others
  • Loop-back implementation
  • Menus / SplashScreen

Progression with three active sessions:


Extensions / Colyseus Extension [Public Beta]
« on: September 23, 2020, 04:11:05 am »
Colyseus Multiplayer Extension


Should work on Stencyl 4.x, but confirmed on 4.0.3 (Build 10561)

Confirmed publication to:
  • HTML5
  • Windows
  • Android
Should work:
  • Mac OSX
  • iOS
  • Linux

Will not work on Flash !


RAW Room Types:


Turn Based Types:


SetActive Player
Lock Room type:
Client As A Server (CaaS):


Extensions / Multiplayer Extension - call for BetaTesters
« on: September 07, 2020, 10:00:42 pm »

For my multiplayer extension I'm looking for some beta-testers.

Since the extension is for experienced Stencyl users I kindly ask for this
  • Simple game (mechanic)
  • Emphasis on Client-As-A-Server model
  • Advice/Feedback on the blocks

The extension will not work on Flash and I don't have the resources anymore to publish/run on iOS, but I would like to know if the extension works on iOS.

The following platforms are tested:
  • HTML5
  • Windows
  • Android

The extension is based on Colyseus
On their forums I published a work-in-progress post:

It works on websockets instead of UDP.

Some demo gifs

Physics (collision) demo



You will receive:
  • Demo stencyl files
  • Extension
In case you want to run your own server you need to know Linux and it helps if you are familiar with Docker.
But you can use my server for testing purposes.

I offer to help you to port your simple game to a multiplayer version. It helps if you want to share your work.

As a start I would advice to alter the demos to fit your need and see what can be improved on.

I'm looking forward to work with you.

Kind regards from

Justin made a toolset extension with which you can enhance your Engine Extensions.

Today, I experimented with it.


Actions in Stencyl:
* Extensions : Extension Repositories : Add repository
*  New Repository:
* Extensions : Toolset Extension Manager : Enable the Enhanced Block Definitions

This extension is not visible in the Dashboard under Extensions.

When enabled you can use extra functionality in your Engine Extensions.

As a demonstration I created an engine Extension:
* mkdir  %AppData%\Stencyl\stencylworks\engine-extensions\EnhancedBlocksTest
Using notepad (++) create these:

Code: [Select]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

spec="%1 listener %2 for enhanced event %0"
code='EnhancedBlocksTest.#1EventListener(#0, EnhancedBlocksTest._customEvent_#2);'
<dropdown order="0">
<c text="Test" code="MyType.Test1"/>
<dropdown order="1">
<c text="add" code="add"/>
<c text="remove" code="remove"/>
<text order="2"/>


The magic is in : EnhancedBlocksTest.#1EventListener(#0, EnhancedBlocksTest._customEvent_#2);'
Where the #0 through #2 are replaced by the toolset extension.

Note the tag: "EventAddremoveListener"
You have to have the same tag in the blocks-enhancements.xml file. That xml file is used by the toolset extension.
the blocks-enhancements.xml file has a relation with the blocks.xml !!

Code: [Select]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>



<code order="2"/>


Code: [Select]
class EnhancedBlocksTest {

public static function addEventListener(type:MyType, fn:Void->Void):Void{
trace("ADD Listener: The Type is :"+type);
trace("ADD Listener: The function is : "+fn);
if(fn != null) fn();
public static function removeEventListener(type:MyType, fn:Void->Void):Void{
trace("REMOVE Listener: The Type is :"+type);
trace("REMOVE Listener: The function is : "+fn);
public static function _customEvent_hello(){
trace("CustomEvent HELLO Called");

Code: [Select]
abstract MyType(String)
var Test1 = "TEST1";


Code: [Select]
<?xml version="1.0" encoding="utf-8"?>


Code: [Select]

Put an icon in the folder: %AppData%\Stencyl\stencylworks\engine-extensions\EnhancedBlocksTest\icon.png

Restart Stencyl

through settings enable the EnhancedBlocksTest extension and you can now use the new block:

* [add/remove]  listener [hello] for enhanced event [Test]

Which will produce the following haxe code : EnhancedBlocksTest.addEventListener(MyType.Test1, EnhancedBlocksTest._customEvent_hello);

Running this it will output the trace information in your log viewer or browser console.

I used static class but this is not a requirement!

Personally I have to figure out how and when I will use this in my own engine extensions but it is a cool addition !!!

Ask a Question / Skewing / flipping actors
« on: July 06, 2020, 12:46:13 am »

Source Reference:

Propably the issues I have are more related to haxe/openfl.
But some of you have experience with Math and graphics programming, so hopefully someone has a tip how to go about solving this.

I tried to simplify the code and bring it to the base-requirements.

Below code uses 'plane' which is a Sprite;  texture is bitmapdata and degrees is the rotation:

Code: [Select]
// skew function
pProjection = new PerspectiveProjection();
pProjection.fieldOfView = 54;
proj = pProjection.toMatrix3D();

mat.appendRotation(degrees, Vector3D.Y_AXIS);
mat.appendRotation(0, Vector3D.X_AXIS);
mat.appendTranslation(0,0, 480.245531742791);


projectedPoints = new Vector<Float>();
Utils3D.projectVectors(mat, vertices, projectedPoints, uvt);;, null, false, true);, indices, uvt, TriangleCulling.NONE);;

return plane;
This code is called from another part    :
Code: [Select]

var bitm:BitmapData=sourceBitmapData.img.bitmapData;
var spr:Sprite = skew(, bitm);

var newBitmapWrapper=new BitmapWrapper(new Bitmap(new BitmapData(sw,sh)));
// Shift towards top
var rect = spr.getBounds(spr.parent);
var matrix = spr.transform.concatenatedMatrix;
matrix.translate(-rect.left,; // move image to 0,0 : if you ommit this you don't see a thing
matrix.translate((sw/2)-((rect.width)/2), (sh-rect.height)/2);  // move it to the center of the image
drawingText(spr,"W:"+Math.round(rect.width)+" H:"+Math.round(rect.height));

The most important problem I have is that the skewing makes a sprite with different dimensions.
The width/height of the sprite change in each rotation step.
I believe this part is where things are going wrong:
Code: [Select]
matrix.translate(-rect.left,; // move image to 0,0 : if you ommit this you don't see a thing
matrix.translate((sw/2)-((rect.width)/2), (sh-rect.height)/2);  // move it to the center of the image
When you remove the getBounds movement you don't see anything on the bitmap that will be attached to the actor.

Here are the results of the code:

Notice the changing Width and Height.

Also the HTML5 version has a white line around the triangle. Which isn't visible on Windows:

When you use a circle the distortion is more prominent:

In action:

Stencyl file in case you want to experiment :

In the end I didn't use it in my game since flipping the image doesn't use light-source and the scene looked bad with different actors with lightsources.
But I hate lose-ends. It took me a week to figure some things out and I hate to waste that time. So I want to understand what is going on.

Journals / LudumDare 46 (Keep it alive) : Is it a boy or a girl?
« on: April 17, 2020, 07:09:31 pm »
'It' is a boy or a girl ...

Since my publication for the Stencyl Jam went horribly wrong,
I will try to upload a small wip game to the LD site in order to test the game from that page.

Also, I started out making  a 3D asset instead of programming!
'Art' first ???  That is a first one for m.e.  ;D

Edit: all is well. You post URL on the LudumDare page. So I have full control over my own site and thus no problem loading OBJ files.

now to keep it alive

Journals / Stencyl jam #19 : RESET [your path]
« on: March 27, 2020, 06:16:48 pm »
EDIT: The final entry:

Here is the final version of the Jam Entry:

   Stencyl Jam 19 : Reset your Path


This is the journal where I will post progress on the game

Regret  Reset your Path

I'm going to port my 2010 java 4k game to Stencyl and making some changes to the gameplay.

Screenshot of original game:

The original game didn't have a path - editing - mechanism that I will try to make to better suit the theme.


Shoutout to Yoplalala for his awesome scaling/position utilities found here:,46621.0.html


Journals / Ludum Dare 45 : SintMatch ( start [and end] with nothing )
« on: October 05, 2019, 11:06:31 am »
Start [and end] with Nothing



Extensions / Poker Evaluation Extension
« on: June 30, 2019, 12:03:28 am »
Poker Extension

Ported from: GitHub happinesssam


Extension: Extension

There can be multiple decks to get ' dummy '  cards from.
You can use this in your A.I. strategy to calculate strength when there are 3 or 4 cards from the community cards.
As the strength calculation done from the original code is based on 5 community-cards.

Extensions / [iOS/Android] MicroPhone Decibel and Frequency values
« on: May 12, 2019, 05:23:55 am »
* Initialize
* Start Recording
* getDecibel
* getFrequency
* Stop Recording

MicroPhone Extension + Demo download

The decibel values are calculated with the same formulas on both iOS and Android.
This is where the best game mechanics can be obtained.

Frequency values are obtained by using Fast Fourier Transform calculations. But the implementation differ on both platforms and values aren't the same.
Need far more testing when implemented.
Also, the range detection for your particular sound/noice detection should be evaluated.

Extensions / Extension Creators : ios PLIST file
« on: May 11, 2019, 04:24:38 am »
With the help of Justin and the internet (FaceBook Extension) I came up with a working way to add things to a PLIST file.

In my case I needed permission request for the microphone and that required setting key-string value in the PLIST file.

Because I don't want extension users to adjust their configuration it is better to include a custom plist template file.

You can use the {{app.file}} aproach but this is overwritten by the 'default'  later on:

Copying template file: /Users/admin/stencylworks/engine-extensions/MicroPhone/templates/ios/template/{{app.file}}-Info.plist -> Export/ios/_GAME_NAME_-Info.plist
Then a bit later on it will do:
Copying template file: /Users/admin/Downloads/plaf/haxe/lib/lime/lime/templates/ios/template/{{app.file}}/{{app.file}}-Info.plist -> Export/ios/_GAME_NAME_/_GAME_NAME_-Info.plist

But when you put the plist file in here with the PROJ name rather than {{app.file}} it works:

copy StencylApplicationDirectory/plaf/haxe/lib/lime/lime/templates/ios/template/{{app.file}}-Info.plist     to    (StencylWorks) engine-extensions/YourExtension/templates/iphone/PROJ/PROJ-Info.plist
Modify the (StencylWorks ) engine-extensions/YourExtension/templates/iphone/PROJ/PROJ-Info.plist to include your extension specific requirements.

In my case : add microphone permission request
Code: [Select]
<array>::foreach languages::
        <string>Need microphone access (M.E.)</string>

Then modify the include.xml (or nmml) for the ios section:
Code: [Select]
<section if="ios">
        <template path="templates" />

Resulting action:

Copying template file: /Users/admin/stencylworks/engine-extensions/MicroPhone/templates/iphone/PROJ/PROJ-Info.plist -> Export/ios/_GAME_NAME_//_GAME_NAME_-Info.plist

In the XCode project, under Resources, you can find the plist file containing the change.

Extensions / [Stencyl 3.5/4.0.x] Away3D Extension
« on: January 01, 2019, 11:02:22 pm »
Away3D Stencyl 3.5 Extension

For publication to:
  • Flash
  • HTML5
  • Android
  • iOS
  • Mac OSX
  • Windows
  • Linux

Download extension and examples : Away3D Extension
(Some of the examples are ports from demonstration/games made by LIBERADO; who gave permission to use them)


Stencyl is a 2D Tool/Engine. Not everything you see done with 3D engines/tools is possible with this Extension.

*** WARNING ***
The Library is not scale aware. Binding of Actors and Tiles is done on a 32px by 32px size. 3D Camera does not perfectly align Meshes with 2D objects.
You have to adjust to these yourself.

Special Thanks to : Justin, LIBERADO, Merrak, SadiQ (alphabatic order)


Journals / Ludum Dare 43 : Sacrifices must be made
« on: December 01, 2018, 03:31:25 am »

Game Play is done:
* Load Levels
* Player ordering
* Movement
* Mine exploding

Now turning it into a 3D thing.

Pages: 1 2 3 ... 6