For those users coming from GameMaker: Studio 1.4 it may be a bit confusing using GameMaker Studio 2 at first since there have been a number of changes made to the way that project resources, editing and coding are handled. These changes mean that the neither the IDE nor the GameMaker Language (GML) supports the items listed below. However, that does not mean that you cannot import games made with GameMaker: Studio 1.4 into GameMaker Studio 2, as you can! The functions listed here will be turned into compatibility scripts
In GameMaker: Studio 1.4 you had a separate background resource, where you could add images to be used as backgrounds. In GameMaker Studio 2 all images are considered sprites, and the use you put them too will depend on the layer they are assigned to in the room. This means that there is no longer a "background" resource, and it also means that the following functions are obsolete:
draw_background draw_background_ext draw_background_stretched draw_background_stretched_ext draw_background_part draw_background_part_ext draw_background_general draw_background_tiled draw_background_tiled_ext background_name background_exists background_get_name draw_background draw_background_ext draw_background_stretched draw_background_stretched_ext background_get_width background_get_height background_get_transparent background_get_smooth background_get_preload background_get_uvs background_get_texture background_set_alpha_from_background background_create_from_surface background_create_color background_create_colour background_create_gradient background_add background_replace background_add_alpha background_replace_alpha background_delete background_duplicate background_assign background_save background_prefetch background_prefetch_multi background_flush background_flush_multi room_set_background
GameMaker: Studio 1.4 also had a number of different background variables that accessed the global background array. These are no longer required in GameMaker Studio 2:
background_index[0..7] background_visible[0..7] background_alpha[0..7] background_blend[0..7] background_x[0..7] background_y[0..7] background_colour background_showcolour background_foreground[0..7] background_hspeed[0..7] background_vspeed[0..7] background_htiled[0..7] background_vtiled[0..7] background_width[0..7] background_height[0..7] background_xscale[0..7] background_yscale[0..7]
You can find out more about Background Layers from the section on the Room Editor, and for more information on the functions that control background layers using code see Background Layers.
As with backgrounds (explained above) the tile resource from GameMaker: Studio 1.4 no longer exists, and instead we have Tile Sets in GameMaker Studio 2. In GameMaker: Studio 1.4, tiles used a background resource and were placed at different depths in the room editor or through code, however the method used was not terribly flexible and was also not that efficient. To address these issues, in GameMaker Studio 2 tilesets are now created from a sprite resource, and can have various different properties (like animation or auto-tiling). They are then placed on a tilemap layer within the room editor or through code. Due to these changes the following functions are now obsolete:
tile_get_x tile_get_y tile_get_left tile_get_top tile_get_width tile_get_height tile_get_depth tile_get_visible tile_get_xscale tile_get_yscale tile_get_alpha tile_get_background tile_set_visible tile_set_background tile_set_region tile_set_position tile_set_depth tile_set_scale tile_set_blend tile_set_alpha tile_get_count tile_get_id tile_get_ids tile_get_ids_at_depth tile_add tile_exists tile_delete tile_layer_hide tile_layer_show tile_layer_delete tile_layer_shift tile_layer_find tile_layer_delete_at tile_layer_depth room_tile_add room_tile_add_ext room_tile_clear
You can find out more about Tile Sets from the manual section on the Tile Set Editor and about how to use them in the room editor from the section on Tile Layers. For more information on the functions that control background layers using code see Tilemap Layers.
The way objects are treated in GameMaker Studio 2 has changed slightly due to the introduction of layers in the room editor. There still exists the "depth" variable, but it is now only really used for compatibility and you can no longer get or set the depth for objects, only instances. This makes the following functions obsolete:
object_get_depth object_set_depth
You can find out more about object resources from the manual section on the Object Editor and on the functions that control objects using code from the section Objects.
GameMaker: Studio 1.4 had two different sound API's, one which used the legacy sound_ functions (that was only really valid for the HTML5 target platform), and the other which used the audio_ functions. The audio API has been improved and expanded in GameMaker Studio 2, making the legacy functions listed below obsolete:
sound_name sound_exists sound_get_name sound_get_kind sound_get_preload sound_exists sound_restore sound_delete sound_play sound_loop sound_stop sound_stop_all sound_isplaying sound_volume sound_fade sound_global_volume audio_music_gain audio_music_is_playing audio_new_system audio_old_system audio_pause_music audio_play_music audio_resume_music audio_stop_music audio_system
You can find out more about audio resources from the manual section on the Sound Editor and on the functions that control audio using code from the section Audio.
When using 3D models or primitives in GameMaker: Studio 1.4, you had to use the d3d_ functions. These used an obsolete API for drawing and in many cases were not related strictly to Direct 3D API, or even to using 3D itself. With the advent of vertex buffers, matrices and cameras in GameMaker Studio 2, the following functions have been made obsolete:
d3d_start d3d_end d3d_set_perspective d3d_set_hidden d3d_set_depth d3d_set_lighting d3d_set_shading d3d_set_fog d3d_set_culling d3d_set_zwriteenable d3d_set_projection d3d_set_projection_ext d3d_set_projection_ortho d3d_set_projection_perspective d3d_transform_set_identity d3d_transform_set_translation d3d_transform_set_scaling d3d_transform_set_rotation_x d3d_transform_set_rotation_y d3d_transform_set_rotation_z d3d_transform_set_rotation_axis d3d_transform_add_translation d3d_transform_add_scaling d3d_transform_add_rotation_x d3d_transform_add_rotation_y d3d_transform_add_rotation_z d3d_transform_add_rotation_axis d3d_transform_stack_clear d3d_transform_stack_empty d3d_transform_stack_push d3d_transform_stack_pop d3d_transform_stack_top d3d_transform_stack_discard d3d_transform_vertex d3d_light_define_ambient d3d_light_define_direction d3d_light_define_point d3d_light_enable d3d_primitive_begin d3d_primitive_begin_texture d3d_primitive_end d3d_vertex d3d_vertex_color d3d_vertex_colour d3d_vertex_texture d3d_vertex_texture_color d3d_vertex_texture_colour d3d_vertex_normal d3d_vertex_normal_color d3d_vertex_normal_colour d3d_vertex_normal_texture d3d_vertex_normal_texture_color d3d_vertex_normal_texture_colour d3d_draw_block d3d_draw_cylinder d3d_draw_cone d3d_draw_ellipsoid d3d_draw_wall d3d_draw_floor d3d_model_create d3d_model_destroy d3d_model_clear d3d_model_load d3d_model_save d3d_model_draw d3d_model_primitive_begin d3d_model_primitive_end d3d_model_vertex d3d_model_vertex_color d3d_model_vertex_colour d3d_model_vertex_texture d3d_model_vertex_texture_color d3d_model_vertex_texture_colour d3d_model_vertex_normal d3d_model_vertex_normal_color d3d_model_vertex_normal_colour d3d_model_vertex_normal_texture d3d_model_vertex_normal_texture_color d3d_model_vertex_normal_texture_colour d3d_model_block d3d_model_cylinder d3d_model_cone d3d_model_ellipsoid d3d_model_wall d3d_model_floor
You can find out more about vertex buffers here, more about matrices here more about cameras here and more about the GPU functions here.
With the advent of the camera functions in GameMaker Studio 2, it means that a number of view variables are no longer required, specifically those referring to the view into the room rather than the view_port (which is still used). There are also a few functions for controlling how things are displayed that were available in legacy versions of GameMaker: Studio 1.4 which are also no longer appropriate. These variables and functions are listed below:
view_object view_angle view_xview view_yview view_hview view_wview view_hborder view_vborder view_hspeed view_vspeed display_set_windows_vertex_buffer_method display_get_windows_vertex_buffer_method display_set_windows_alternate_sync display_get_windows_alternate_sync room_set_view
You can find out more about cameras from the manual section on Cameras And The Display.
GameMaker Studio 2 moves a lot of built in functionality from previous versions into extensions, meaning that the following 3rd party support functions are considered obsolete:
ads_enable ads_disable ads_move ads_get_display_width ads_get_display_height ads_interstitial_available ads_interstitial_display ads_setup ads_engagement_available ads_engagement_launch ads_engagement_active ads_event ads_event_preload ads_set_reward_callback playhaven_add_notification_badge playhaven_hide_notification_badge playhaven_position_notification_badge playhaven_update_notification_badge pocketchange_display_reward pocketchange_display_shop analytics_event analytics_event_ext iap_event_queue iap_files_purchased iap_is_downloaded iap_product_files iap_product_status iap_store_status immersion_play_effect immersion_stop
You can get the official YoYo Games extensions for advertising and analytics from their Marketplace Page.
Both GameMaker: Studio 1.4 and GameMaker Studio 2 have a visual scripting Drag and Drop (DnD™) interface for creating your games, however the way it is handled in GameMaker Studio 2 is quite different to the previous methods used. Previously, all DnD™ actions had their own corresponding function which worked "behind the scenes" to get the desired results, however this was not very transparent and added in extra overheads to the function calls, resulting in poorer performance. In GameMaker Studio 2 this has been changed, and now all actions compile to pure code (and can be shown as such if required), meaning that the following action functions are obsolete:
action_path_old action_set_sprite action_draw_font action_draw_font_old action_fill_color action_fill_colour action_line_color action_line_colour action_highscore action_set_relative action_move action_set_motion action_set_hspeed action_set_vspeed action_set_gravity action_set_friction action_move_point action_move_to action_move_start action_move_random action_snap action_wrap action_reverse_xdir action_reverse_ydir action_move_contact action_bounce action_path action_path_end action_path_position action_path_speed action_linear_step action_potential_step action_kill_object action_create_object action_create_object_motion action_create_object_random action_change_object action_kill_position action_sprite_set action_sprite_transform action_sprite_color action_sprite_colour action_sound action_end_sound action_if_sound action_another_room action_current_room action_previous_room action_next_room action_if_previous_room action_if_next_room action_set_alarm action_sleep action_set_timeline action_timeline_set action_timeline_start action_timeline_stop action_timeline_pause action_set_timeline_position action_set_timeline_speed action_message action_show_info action_show_video action_end_game action_restart_game action_save_game action_load_game action_replace_sprite action_replace_sound action_replace_background action_if_empty action_if_collision action_if action_if_number action_if_object action_if_question action_if_dice action_if_mouse action_if_aligned action_execute_script action_inherited action_if_variable action_draw_variable action_set_score action_if_score action_draw_score action_highscore_show action_highscore_clear action_set_life action_if_life action_draw_life action_draw_life_images action_set_health action_if_health action_draw_health action_set_caption action_partsyst_create action_partsyst_destroy action_partsyst_clear action_parttype_create_old action_parttype_create action_parttype_color action_parttype_colour action_parttype_life action_parttype_speed action_parttype_gravity action_parttype_secondary action_partemit_create action_partemit_destroy action_partemit_burst action_partemit_stream action_cd_play action_cd_stop action_cd_pause action_cd_resume action_cd_present action_cd_playing action_set_cursor action_webpage action_splash_web action_draw_sprite action_draw_background action_draw_text action_draw_text_transformed action_draw_rectangle action_draw_gradient_hor action_draw_gradient_vert action_draw_ellipse action_draw_ellipse_gradient action_draw_line action_draw_arrow action_color action_colour action_font action_fullscreen action_snapshot action_effect
You can find out more about the new DnD™ from the manual section Drag And Drop Overview.
When you import a project made with a previous version of GameMaker Studio, any obsolete functions that have been used will still work as they will have been transformed by the IDE automatically into compatibility scripts. What happens is that GameMaker Studio 2 will parse your project for all the obsolete functions and variables that you have used, and then create a series of scripts using those function names. These scripts will contain either the new equivalent function or a short script of code that performs the same action as the obsolete function.
When you first import a GameMaker Studio 2 project you will be shown a compatibility report much like this one:
The main body of the report shows which objects and scripts have been affected and where, while at the end you can find a list of the scripts that have been created for your project. You can click the middle mouse button or press on any of the scripts listed in the report to open it and see what has been done. Note that if you see any scripts created with a double under-bar before their name (for example: __global_object_depths), then these are scripts that have been created by the IDE to help with compatibility and are not scripts that have been converted from obsolete functions, so these should not be tampered with as they are required for the other compatibility scripts to work.
When you have finished revising the compatibility report you can close the workspace, but should you need to revise anything within the report you can find it again by going to the Notes section of the resource tree.
Please note that there are some functions that have been introduced to the GameMaker Language to ensure compatibility with older projects and that will appear in these compatibility scripts. However these functions should never be used in your own projects. You can find a list of these functions from the following section of the manual: