v1.51 (05/21/17):
-Changed ds_map_write/read back to json_encode/decode
-Changed lite version to be the same as the base engine except with less extra resources
v1.50 (01/04/17):
-Added global.playerAnimationFix option which fixes the weird player animation inconsistencies when moving around (disabled by default)
-Added debug mode indicator to the title screen when debug mode is active
-Changed default death music mode to no music
-Tweaked main menu cursor so that it stays in the same place after switching between different menus
-Added support for DirectInput gamepads
-Added separate debug variables for global.noDeath and global.infJump called global.debugNoDeath and global.debugInfJump
-Tweaked platform and slip block logic to fix some minor issues
v1.42 (11/29/16):
-Changed global.saveRoom to use room names instead of room indexes
-Reverted json_encode/decode back to ds_map_write/read (json_encode/decode causes some issues when saving booleans)
-Removed button text from the start screen
-Disabled precise collision checking for sprites that don't need it
v1.41 (10/13/16):
-Updated project to GM Studio v1.4.1763
-Added an option to fix the behavior when tapping left/right for less than 1 frame so that the player moves for 1 frame (by default he doesn't move when this happens)
-Changed save files to use json_encode/json_decode instead of ds_map_write/ds_map_read to prevent memory leaks
-Added a check to objWorld to make sure more than one never exists
v1.40 (09/07/16):
-Now includes a lighter version of the engine which simplifies the engine and cuts out extra resources/features
-Changed some menu arrays/variables to be more consistent
-Fixed more minor issues
v1.32 (08/23/16):
-Added an option to change the number of secret/boss items for the game to use (set to 8 by default)
-Added an option to autosave secret items when they're grabbed instead of having to save afterward (disabled by default)
-Changed some view_wview/view_hview to view_wport/view_hport to improve death text/pause screen behavior when changing the camera zoom
-Changed secret/boss item arrays to start at 0 instead of 1 (by default they go 0-7 instead of 1-8)
-Fixed a few minor issues
v1.31 (04/30/16):
-Added global option for whether to use ds_map_secure functions to save (disabled by default)
v1.30 (04/23/16):
-Added native controller support with automatic switching between keyboard/controller (Thanks chalenged for the help!)
-Added slopes (supports any shape)
-Added a warning prompt before overwriting a save on the difficulty select menu
-Added objOutsideRoomChanger which allows for smooth warp room transitions
-Added slight title screen text animation
-More minor tweaks/fixes
v1.22 (02/08/15):
-Rewrote save system to use maps instead of lists (they are now stored using ds_map_secure functions to improve save security and prevent transferring between PCs)
-Added moving platforms that don't bounce off of walls
-Added scrDrawTextOutline for outlined text on the debug info overlay (Thanks Archee for the suggestion!)
-Tweaked main menu layout
-Changed a bunch of 0/1 to false/true to improve code readability
-Removed/tweaked global.player_xscale, global.player_djump, global.savePlayerXScale, and global.debugOverlayColor to simplify code logic
-Other minor tweaks/fixes
v1.21 (11/20/15):
-Added vsync option
-Added stopping death sound when pressing "R"
-Some minor tweaks
v1.20 (11/9/15):
-Rewrote save system to use lists for saving instead of bytes
-Rewrote config system to use ini files
-Changed in-game timer to use delta_time for better accuracy
-Added scrStopMusic() to more easily stop current music
-Tweaked save system to not always load data from the file when pressing "R" to improve performance
-A bunch of minor tweaks/fixes
v1.15 (10/21/15):
-Fixed some buggy platform behavior when gravity is flipped
v1.14 (10/18/15):
-Tweaked vines to fix weird behavior when directly above/below a block with a vine on it
-Tweaked vines to fix getting stuck while on the ground
-Added saving the player's xscale to the save file
-Changed default jump refresher refresh time to 100
-Changed objKillerBlock to be visible
-Changed the way blood snaps to walls to look better (Thanks to patrickgh3!)
-Added "scrSetPlayerMask" which sets the player's mask_index according to the current gravity
-Tweaked scripts for better readability
-Other minor tweaks/fixes
v1.13 (10/4/15):
-Enabled being able to stretch the game window (Window size can be reset to the default by pressing F5)
-Changed screen smoothing from always changing when toggling fullscreen into an option to turn it off/on whenever (using the options menu or F3 to toggle)
-Tweaked the player draw to not round the player's position
-Renamed "scrInitializeVariables" to "scrInitializeGlobals"
-Renamed "scrConfigVariables" to "scrSetGlobalOptions"
-Organized scripts into folders
-Tweaked "scrPlayerJump" to give the player a djump if touching objWater3
-Added "refreshTime" variable to jump refreshers to customize how long until you can use them again
-Removed idle swaying movement for jump refreshers
-Changed save points to have a depth of 1
-Some other minor changes
v1.12 (9/29/15):
-Fixed a small saving exploit
-Added global.autosave variable for easily doing autosaves when the player is created
-Added objWarpAutosaveNext which goes to the next room and autosaves
-Added being able to use -2 in scrGetMusic in case you don't want it to affect a room's music at all (useful for bosses where you want other objects to control music)
-Changed player draw code to include image_xscale and image_yscale in case they're changed
v1.11 (9/22/15):
-Moved some pieces of code to scripts (scrFlipGrav, scrRestartGame, scrSetFullscreen, scrToggleMusic)
-Renamed scrGetControl to scrGetKeybind
-Disabled showing the splash screen by default
-Changed the bow so that it doesn't lag behind the player by a frame (there's a setting in scrConfigVariables to make it delay if you want it to)
v1.10 (9/20/15):
-Updated collision code to work better with the new version of GM Studio (v1.4.1657)
-Added showing current binds in controls menu
-Fixed another possible case of saving in a wall
-Changed key rebinding so that if you bind to a shift key, it still works for both shift keys
-Changed platform objects to have a depth of 1
-Added more comments to scripts
v1.03 (9/12/15):
-Fixed part of the difficulty select not using global.menuSound
-Fixed another rare bug involving music variables not getting initialized properly
v1.02 (9/8/15):
-Enlarged the save point hitbox so touch saves work on edges of blocks
-Fixed a very rare bug involving music variables not getting initialized properly
v1.01 (9/6/15):
-Fixed warp room mode for file difficulty select not working properly
-Tweaked game muting/unmuting using Ctrl+M to work properly when using objPlayMusic
v1.0 (9/4/15):
-Added debug overlay (toggle with backspace)
-Updated objSign to display text instead of using show_message
-Added configurable variable for which sound to use for navigating the menu
-Added volume control to the options menu
-Added randomize() when the game is started to start with a random seed for RNG (Studio starts with the same initial seed every time you run the game)
-Added scrPlayMusic script to make it easier to change songs
-Added objPlayMusic for people who don't want to use the scrGetMusic method of playing music
-Added example Miku avoidance (Thanks to Stinkycheeseone890 for designing it!)
-Some other minor changes/fixes
v0.9 (9/1/15):
-Added main menu system based off the KS engine that has options and rebindable controls
-Added saving fullscreen mode in the config file
v0.8 (8/31/15):
-Fixed the player sometimes getting stuck on the sides of objSlideBlocks
-Fixed game not restarting properly when pressing R and F2 on the same frame
-Fixed texture interpolation setting bugging out when pressing F2+F4 on the same frame
-Changed it so that you can't switch between fullscreen on/off when the game is paused (this caused the pause surface to be lost)
-Added a variable to customize the speed of objSmoothCamera
-Changed default case for scrGetMusic to play nothing instead of musGuyRock
-Changed font naming
-Fixed the player occasionally drawing abnormally
-Set debug mode off by default
-Added a variable for whether or not to show the debug player visual changes when inf jump/god mode are toggled
-Some other minor changes/fixes
v0.7 (8/29/15):
-Implemented save verification system with MD5 hash checks to make saves harder to hack
v0.65 (8/27/15):
-Fixed a bug where right vines wouldn't always work properly
v0.6 (8/26/15):
-Implemented pause screen that shows deaths/time
-Implemented volume control in the pause menu (Updated config file to save the volume level)
-Made objGameClear autosave when touched
-Optimized objMovingPlatform performance
-Merged objMusicFade into objWorld
-Fixed the player moving when standing still for a long time on objSlipBlock
-Fixed a case where the player could save inside of a wall
v0.5 (8/23/15):
-Initial release
Hey, you've made a massive work. That's really awesome.Oh yeah sure, I'd like to see how you implemented the pausing. I tried a couple different methods but nothing worked as well as I wanted it to.
Do you need any help, by the way, to create the engine faster? I've made a simple pause (https://i.imgur.com/gUbfqV4.png), it works pretty well, I think. If you like it, I can post a diff with version 0.5 here. :)
Edit: found a bug, when you can't complete the game on impossible mode, because objGameEnd doesn't save you and there's no savepoints in the end room.
if (keyboard_check_pressed(global.pausebutton) && !global.noPause) {
global.pause = !global.pause;
if( global.pause ) {
instance_deactivate_all(true);
surface_copy(global.pause_surf,0,0,application_surface);
} else {
instance_activate_all();
}
}
var str, off, th, tm, ts;
if(global.pause) {
draw_clear(c_black);
draw_surface_ext(global.pause_surf,0,0,1,1,0,c_white,0.5);
draw_set_color(c_white); //Font color
th = floor(global.time/(60*60));
tm = floor((global.time/60) mod 60);
ts = floor(global.time mod 60);
str = "Time: "+string(th)+":"+string(tm)+":"+string(ts);
off = view_hview - string_height(str)-8;
draw_text(8+string_width(str)/2,off,str);
str = "Deaths: " + string(global.death);
off = off - string_height(str)-8;
draw_text(8+string_width(str)/2,off,str);
str = "PAUSE";
draw_text(view_wview/2,view_hview/2,str);
}
Well, there's too many shitty changes I've made, so I'm just going to explain how I've made it insteat of posting it here.Oh awesome, thanks! I didn't realize you could copy the application surface like that. That's a pretty good way of doing the pausing.
Changed code is this:Code: [Select]if (keyboard_check_pressed(global.pausebutton) && !global.noPause) {
global.pause = !global.pause;
if( global.pause ) {
instance_deactivate_all(true);
surface_copy(global.pause_surf,0,0,application_surface);
} else {
instance_activate_all();
}
}
if (distance_to_object(objWalljumpL) < 2 && place_free(x,y+(global.grav)))
...
if (distance_to_object(objWalljumpR) == 1 && place_free(x,y+(global.grav)))
Sometimes vines are not working (the right one), I wasn't able to reproduce it again. I guess if this is a mistake that causes the bug:Based sub-pixels causing another bug. Thanks for letting me know, just uploaded a fix.Code: [Select]if (distance_to_object(objWalljumpL) < 2 && place_free(x,y+(global.grav)))
...
if (distance_to_object(objWalljumpR) == 1 && place_free(x,y+(global.grav)))
Edit: I got it, it's because of slip blocks which make player coordinates being changed to something like N + 0.5 exactly, works with everything else. Changing == 1 to < 2 seems fixing it.
if (keyboard_check_pressed(vk_f2))
- Muting sound effects on reset
There seems to be a bug whereas whenever you exit the fullscreen mode, the view(s) become smaller than the standard 800x608 view(s). Just felt I should address this.Can you get a screenshot of this? I've never seen this happen before.
Can you get a screenshot of this? I've never seen this happen before.
I'm not really sure what the issue is, the game view looks fine to me.Can you get a screenshot of this? I've never seen this happen before.(Mind you, this may have only happened because I have installed a windows partition into a Macbook, henceforth seeing these bugs on regular pc's isn't common to begin with. Just to keep in mind + not to get overworked for).
Awesome work, but is there a way to transfer levels from older version of the engine into the newer one?Yeah you can puts things you made in the older version into the newer version by dragging and dropping the resource files you made from your original project into the newer engine or right clicking in the resources folders in the newer engine and using "Add Existing".
Ok, just a heads up for anyone using this engine on the newest version of GM Studio (1.4.1657).
I've tried downloading the newest version to ensure that the engine is still working correctly but I can't use it quite yet as YoYo Games are apparently having server issues at the moment. As soon as I can use Studio again I'll be checking everything in the engine myself to make sure it's in good shape. Let me know if there are any major issues in the meantime.
Also another heads up for anyone looking to switch to Studio: they're currently having a Humble Weekly Bundle at httpss://www.humblebundle.com/weekly where you can get GM Studio Pro for only $6.
I bought this bundle but it keeps telling me I have a bad license so I'm assuming this is because of the issues atm? I can't actually license studio pro or log in even if I use the license from the bundle.Yeah their servers are still not up as far as I can tell. I'd just wait a bit and try it again later.
One of the main changes is that I tweaked the vines to not have glitchy behavior when you're standing on the floor or when you're directly above/below a block with a vine on it.
No, in normal circumstances they work the same. This tweak just makes it so they don't affect the player when you touch them from above or below a block like they do in other engines. This fixes getting stuck when standing on top of a block over a vine and falling really quickly when touching a vine from the bottom of a block.One of the main changes is that I tweaked the vines to not have glitchy behavior when you're standing on the floor or when you're directly above/below a block with a vine on it.
Does this mean they won't work like they do in normal engines?
///draw_text_outline(x,y,text,textcolor,outlinecolor)
var _x;
var _y;
var text;
var color;
var outlinecolor;
_x = argument0;
_y = argument1;
text = argument2;
color = argument3;
outlinecolor = argument4;
draw_set_color(outlinecolor);
draw_text(_x-1,_y+1,text);
draw_text(_x-1,_y,text);
draw_text(_x-1,_y-1,text);
draw_text(_x+1,_y+1,text);
draw_text(_x+1,_y,text);
draw_text(_x+1,_y-1,text);
draw_text(_x,_y+1,text);
draw_text(_x,_y-1,text);
draw_set_color(color);
draw_text(_x,_y,text);
This is how it looks in game in debug overlay:Well, enough people asked to piss off kayin, so...
https://kayin.moe/iwbtg/forums/index.php?topic=1604.0
Text is absolutely unreadeable sometimes, so I've made a simple draw_text_overlay script to make it better:
Would be pretty nice to see it in engine if you're going to update it.
Noticed something. When riding on a rising platform, you will continue to go through the block above until you get stuck. As far as i know, the kid must fall from the platform instead of going through blocks isn't it?
I think it has something to do with GMS's Asset Compiler because if I do select a file, doesn't matter what file, I get this error box: https://i.imgur.com/4VdTrEY.pngWeird. I also get that message sometimes (i don't know if it says exactly the same or not), but i'm never asked to open a file, and resetting GM solves it perfectly.
Do you get the same error if you try to compile the game (for distribution)?
To set what music you want a room to play, change the "scrGetMusic" script. You can also place an objPlayMusic object in the room and set the variable "BGM" in its creation code. If you want something to stop music, use "scrStopMusic()".
To set what music you want a room to play, change the "scrGetMusic" script. You can also place an objPlayMusic object in the room and set the variable "BGM" in its creation code. If you want something to stop music, use "scrStopMusic()".
I assume I could also use a sound engine like FMod instead, correct? (I'm sorry, I'm still new to this ^-^)
There is nothing wrong with the built-in audio engine that comes with GameMaker: Studio. In the past with GameMaker 8.1, people had to use FMOD to decrease loading times, and get more functionally like Pausing and Playing music, now it's all built-in to the default engine.
You can still choose to use FMOD but at this point you'd have to be doing something really interesting with the music to make use of it at this point.
I'm not certain if you're trying to say that in a hostile way (proving that there's something bad about FMod) or just not wanting to answer my question on whether it's compatible or not.
You can still choose to use FMOD
I'm having a really hard time believing that the built-in audio engine can manage MIDI, pitch shift, reverse, pass, what more.The build in sound engine can pitch shift. Everything would classify as
something really interesting
Hopefully Starz0r won't be 'hostile' anymore by trying to answer your questions.
No worries. I used to use FMOD in 8.1 because my tracks would always stutter when looping. In studio everything plays perfectly with the built in engine. The vast majority of fangames just play the music and maybe pitch shift on death. I think most people would consider any other manipulation of the music unusual an therefore interesting. I look forward to seeing what you come up with.
Too late.
Before I screw something up could someone tell me how to make custom objects?
Oh wow its that simple (facepalm)Before I screw something up could someone tell me how to make custom objects?
Read this before you start making a fangame. https://klazen.com/IWBTG/tutorial/dev_tutorial.html
I can see that so far (I just finished the first screen and working on the second)
OK, I'm on it.(I mean the topic)
I'm using this engine, and this is quite satisfactory and convenient, especially with MD5 save encryption that is available only on studio. However, it could be better if these are improved:
- I wish I could easily change the number of bosses and hidden items in game.
Current version they're both set to 1 to 8, and changing them from 0 to 10 was harder than I expected; I could find the variables and set it myself, but not without errors because of undefined variables.
- The creators would want to choose if their game keeps the secret items when they die without saving.
Sometimes it can be an unnecessary and unintended skip that creators want to fix.
- It's maybe because GMS update issue, but I experienced this glitch : when I use MD5 encryption, the game said the file's corrupted when I didn't even touch the save, and when I reset the 'corrupted' file, it didn't reset correctly. It sent me to the start of my fangame, but it kept my time, deaths, and secret items, etc.
I'm not sure this will understand, but the physics in this engine feel strange compared to 8.0 and 8.1 engines. So I am wondering if anybody knows why...(click to show/hide)
edit: I hope this is not a stupid question...
I noticed that the jumping seemed a little slow (at least compared to IWBTG), so I tweaked the jumpspeed and gravity a bit.
I'm not sure this will understand, but the physics in this engine feel strange compared to 8.0 and 8.1 engines. So I am wondering if anybody knows why...(click to show/hide)
edit: I hope this is not a stupid question...
I noticed that the jumping seemed a little slow (at least compared to IWBTG), so I tweaked the jumpspeed and gravity a bit.
The standard fangame physics are much different than the original IWBTG, and for the better. People in the community are used to these physics, and 99% of the time when they're changed people dislike the game (notable exceptions: Take the Time Machine 2 and Justice Guy). Fangames are the new physics standard, not IWBTG anymore. So, you're strongly advised not to change the physics unless you really know what you're doing and know that fangame players skill and taste will transfer over to the new physics.
Another thing I noticed is that when "game over" shows up on screen, it isn't centered. It appeared much lower on the screen and got cut off at the edge screen so I had to adjust that. Not sure if anyone else had that problem.
Just a heads up, there's a small memory leak every time you die. Turns out that ds_map_write leaks a couple kb of ram every time you call it. json_encode and json_decode don't leak though.Thanks for the heads up! I just posted an updated version (v1.41) with this and a couple of other fixes.
One small thing I noticed:I'm not sure I understand the issue, can you post the error message when it crashes? The global death count variable is called "global.death" and that specific object stores the loaded death values as a "death[]" array.(click to show/hide)
This results in a crash when starting the game. "death" should be "deaths" for global.deaths
############################################################################################
FATAL ERROR in
action number 1
of Draw Event
for object objDifficultyMenu:
trying to index a variable which is not an array
at gml_Object_objDifficultyMenu_Draw_0 (line 11) - draw_text(x+i*xSeperation+10,y+70,string_hash_to_newline("Deaths: "+string(death[i])));
############################################################################################
// Save map didn't load correctly, set variables to the defaults
deaths[i] = 0;
time[i] = 0;
difficulty[i] = 0;
boss[i] = array_create(BOSS_ITEM_TOTAL,false);
clear[i] = false;