ENIGMA Forums

Outsourcing saves money => Issues Help Desk => Topic started by: rcobra on May 27, 2016, 10:56:20 am

Title: destroy block
Post by: rcobra on May 27, 2016, 10:56:20 am
I did destroy block like mario ,gm is work im check enigma not work
https://dl.dropboxusercontent.com/u/69870545/other/myexample.gmk
Title: Re: destroy block
Post by: Goombert on May 28, 2016, 12:01:17 pm
What exactly is the problem you are having? For me the game builds fine on Windows 10. However, I do notice the extensions folder appears twice in the tree, which is sometimes caused by LGM converting between formats. That is something I want to get fixed, possibly in the next LGM version. I want to go and fix the problems with our formats all in one big swoop but have not gotten the time yet.
Title: Re: destroy block
Post by: rcobra on May 28, 2016, 12:09:58 pm
in linux version is not destroy block
Title: Re: destroy block
Post by: Goombert on May 28, 2016, 12:25:28 pm
It seems you found a bug in the object inheritance in ENIGMA. For some reason the player's collision event is fired but not the walls. The example works in both GM8.1 and GMS but not ENIGMA. Let me investigate some more.
Title: Re: destroy block
Post by: Goombert on May 28, 2016, 12:44:26 pm
Nope, I am sorry, if you set the block non-solid and jump into it then it does register the collision event. So I am guessing it's a minor difference between our functions place_free or move_contact_solid that you are using in the player object and what GM does.

I would try playing with the code that triggers collision events in enigma-dev/events.res
Code: [Select]
beforecollisionautomaticcollisionhandling: 100000
Name: Before collision automatic collision handling
Mode: None
Default: ;
Instead: enigma::perform_callbacks_before_collision_event();

collision: 4
Group: Collision
Name: %1
Type: Object
Mode: Stacked
Super Check: instance_number(%1)
Sub Check: (instance_other = enigma::place_meeting_inst(x,y,%1)) # Parenthesize assignment used as truth
prefix: for (enigma::iterator it = enigma::fetch_inst_iter_by_int(%1); it; ++it) {int $$$internal$$$ = %1; instance_other = *it; if (enigma::place_meeting_inst(x,y,instance_other->id)) {if(enigma::glaccess(int(other))->solid && enigma::place_meeting_inst(x,y,instance_other->id)) x = xprevious, y = yprevious;
suffix: if (enigma::glaccess(int(other))->solid) {x += hspeed; y += vspeed; if (enigma::place_meeting_inst(x, y, $$$internal$$$)) {x = xprevious; y = yprevious;}}}}
# Check for detriment from collision events above
Title: Re: destroy block
Post by: rcobra on May 28, 2016, 01:25:17 pm
the use of non-solid, is working and player is blocked
Title: Re: destroy block
Post by: Goombert on June 14, 2016, 02:30:00 pm
I see and I also realize that is undesirable. This would take quite a bit of debugging to solve, and I am not even sure where to look to find this bug. It could also be related to the following GitHub issue which we are keeping open due to known issues with the order of collision events and inheritance.

https://github.com/enigma-dev/enigma-dev/issues/870