From b990c8767e7d63caf5b13284c200e7a07f3d97f8 Mon Sep 17 00:00:00 2001 From: YYBartT Date: Tue, 30 Apr 2024 20:26:11 +0200 Subject: [PATCH 001/134] docs(feature): Add an option to specify "step" in the ImGUI slider control YoYoGames/GameMaker-Bugs#2971 * Added optional step parameter to dbg_slider & dbg_slider_int * Added second example to dbg_slider that shows how to use the step size parameter * Added a note on what the step size actually means (i.e. possible values are limited to multiples of the step size) * Updated shortcut style on the pages --- .../GML_Reference/Debugging/dbg_slider.htm | 22 ++++++++++++++----- .../Debugging/dbg_slider_int.htm | 18 ++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_slider.htm b/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_slider.htm index 3e52ac9b2..b6cdf11a5 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_slider.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_slider.htm @@ -16,11 +16,11 @@

dbg_slider

This function creates a slider control for a Real value within the current debug section, with a minimum and maximum value.

-

Pressing CTRL+click on the slider will allow you to enter a number directly.

+

Pressing CTRL +   on the slider will allow you to enter a number directly.

 

Syntax:

-

dbg_slider(ref[, minimum, maximum, label]);

+

dbg_slider(ref[, minimum, maximum, label], [step]);

@@ -53,18 +53,30 @@

Syntax:

+ + + + +
String  The label to show next to the slider
stepReal  The step size to use for the slider. Values <= 0 indicate no step.

 

Returns:

N/A

 

-

Example:

+

Example 1: Basic Use

Create Event

my_var = 7;
dbg_slider(ref_create(self, "my_var"), 0, 10);

-

The above code is executed in an object's Create event, or any other event that isn't performed continuously. First, an instance variable my_var is set. Then, a slider control is created using dbg_slider. It receives a reference to the variable, returned by ref_create, and values of 0 and 10 for the minimum and maximum parameters. Dragging the slider changes the value of the instance's my_var variable.

+

The above code is executed in an object's Create event, or in any other event that isn't performed continuously. First, an instance variable my_var is set. Then, a slider control is created using dbg_slider. It receives a reference to the variable, returned by ref_create, and values of 0 and 10 for the minimum and maximum parameters. Dragging the slider changes the value of the instance's my_var variable.

+

 

+

Example 2: Step Size

+

Create Event

+

my_var = 1.2;
+ dbg_slider(ref_create(self, "my_var"), 0, 10, 0.2); +

+

The above code is executed in an object's Create event, or in any other event that isn't performed continuously. An instance variable my_var is initialised and a slider control is created. The slider receives a reference to the variable and its minimum and maximum value are set to 0 and 10 respectively. Dragging the slider changes the value of the my_var variable in increments of 0.2.

 

 

-
© Copyright YoYo Games Ltd. 2023 All Rights Reserved
+
© Copyright YoYo Games Ltd. 2024 All Rights Reserved
-

audio_emitter_gain

-

This function sets the maximum gain (volume) for the sound. The perceived volume for a sound can change depending on the fall-off value and the position it has relative to the listener, but by setting the gain with this function, the full volume will never exceed the specified gain value. The image below illustrates how gain affects the volume of the emitter when fall-off is greater than 0:

+

audio_emitter_gain

+

This function sets the maximum gain (volume) for the sound.

+

The perceived volume for a sound can change depending on the fall-off value and the position it has relative to the listener, but by setting the gain with this function, the full volume will never exceed the specified gain value. The image below illustrates how gain affects the volume of the emitter when fall-off is greater than 0:

Audio Gain DiagramThis function will change the volume of the sound while it is being played as well all subsequent sounds played through the given emitter. Note that on some platforms you can have a gain of greater than 1, although a value of 1 is considered "full volume" and anything greater may introduce audio clipping or distortion.

-

NOTE the final volume will also be influenced by the global audio gain that has been set by the function audio_master_gain().

+

 The final volume will also be influenced by the global audio gain that has been set by the function audio_master_gain.

+

 

Syntax:

-

audio_emitter_gain(emitter, gain);

+

audio_emitter_gain(emitter, gain);

@@ -30,12 +32,12 @@

Syntax:

- + - + @@ -45,7 +47,7 @@

Returns:

N/A

 

Example:

-

if (up)
+

if (up)
{
    gain += 0.05;
    if gain >= 1 up = false;
@@ -61,7 +63,6 @@

Example:

The above code sets the variable "gain" to different values and then uses that same variable to set the gain of the emitter indexed in the variable "s_emit".

 

 

-

 

audio_sound_gain

With this function you can fade a sound asset or instance in or out over a given length of time, or it can be used to set the sound gain instantly.

+

The time is measured in milliseconds, and the function requires that you input a final level of gain for the sound to have reached by the end of that time. This gain can be between 0 (silent) and any value greater than 0, although normally you'd consider the maximum volume as 1. Anything over 1 can be used but, depending on the sound used and the platform being compiled to, you may get distortion or clipping when the sound is played back. Note that the gain scale is linear, and to instantly change the gain, simply set the time argument to 0.

This function will affect all instances of the sound that are playing currently in the room if the index is a sound asset, and the final volume will be the volume at which all further instances of the sound will be played. However, if you have used the index returned from a function like audio_play_sound it will only affect that one instance of the sound.

@@ -52,26 +53,16 @@

Returns:

N/A

 

Example 1:

-

- var snd = audio_play_sound(snd_fountain, 10, true);
- audio_sound_gain(snd, 0, 0);
- audio_sound_gain(snd, 1, 5000);
-

-

- The above code assigns the index of a sound to be played to the local variable snd. - This variable is then used to reduce the volume of that specific sound to 0 and fade up to full volume over 5 seconds. +

var snd = audio_play_sound(snd_fountain, 10, true);
+ audio_sound_gain(snd, 0, 0);
+ audio_sound_gain(snd, 1, 5000);

+

The above code assigns the index of a sound to be played to the local variable snd. This variable is then used to reduce the volume of that specific sound to 0 and fade up to full volume over 5 seconds.

 

Example 2:

-

- audio_sound_gain(snd_fountain, 0.5, 0);
- var snd = audio_play_sound(snd_fountain, 0, true, 2); -

-

- The above code first sets the gain of the sound asset snd_fountain to 0.5. - It then plays this sound using audio_play_sound  - and sets the gain of this new sound instance to 2 (using the optional "gain" parameter of the function). -

+

audio_sound_gain(snd_fountain, 0.5, 0);
+ var snd = audio_play_sound(snd_fountain, 0, true, 2);

+

The above code first sets the gain of the sound asset snd_fountain to 0.5. It then plays this sound using audio_play_sound  and sets the gain of this new sound instance to 2 (using the optional "gain" parameter of the function).

 

 

-
© Copyright YoYo Games Ltd. 2023 All Rights Reserved
+
© Copyright YoYo Games Ltd. 2024 All Rights Reserved
+ + + \ No newline at end of file diff --git a/Manual/contents/assets/scripts/gml.js b/Manual/contents/assets/scripts/gml.js index 22e3a6610..feab01938 100644 --- a/Manual/contents/assets/scripts/gml.js +++ b/Manual/contents/assets/scripts/gml.js @@ -197,6 +197,7 @@ export default function(hljs) { "is_mouse_over_debug_overlay", "is_keyboard_used_debug_overlay", "vertex_submit_ext", + "dbg_text_separator", "abs", "achievement_available", "achievement_event", diff --git a/Manual/contents/assets/snippets/Note_Debug_Control_Single_Column_Only.hts b/Manual/contents/assets/snippets/Note_Debug_Control_Single_Column_Only.hts new file mode 100644 index 000000000..b0df4f943 --- /dev/null +++ b/Manual/contents/assets/snippets/Note_Debug_Control_Single_Column_Only.hts @@ -0,0 +1,14 @@ + + + + + + + + Note_Debug_Control_Single_Column_Only + + + +

 This control takes up a single column and cannot be shown on the same line with another single-column control.

+ + \ No newline at end of file diff --git a/Manual/toc/Default.toc b/Manual/toc/Default.toc index ed1cec1c3..67144871f 100644 --- a/Manual/toc/Default.toc +++ b/Manual/toc/Default.toc @@ -3096,6 +3096,7 @@ + From e5a3de6afa62e44ece0353c8d3c359d1bf938477 Mon Sep 17 00:00:00 2001 From: YYBartT Date: Thu, 2 May 2024 12:47:42 +0200 Subject: [PATCH 005/134] docs(feature): smaller custom format screenshot YoYoGames/GameMaker-Bugs#5495 --- .../Texture_Groups_Settings_Custom_Format.png | Bin 19317 -> 10826 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Manual/contents/assets/Images/Settings/Texture_Groups_Settings_Custom_Format.png b/Manual/contents/assets/Images/Settings/Texture_Groups_Settings_Custom_Format.png index 02a7939972a4bf7cdf350039042005fa0b1bbe8f..cffdef2d2aeb8abf449d4826cd7110d8bd5eaf6c 100644 GIT binary patch literal 10826 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 literal 19317 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 A0RR91 From 357ebe6a6eb688874c996619f5834bce8ff735a8 Mon Sep 17 00:00:00 2001 From: YYBartT Date: Thu, 2 May 2024 13:39:10 +0200 Subject: [PATCH 006/134] docs(general): mentioned that any attached files are uploaded privately --- Manual/contents/IDE_Navigation/Menus/The_Help_Menu.htm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Manual/contents/IDE_Navigation/Menus/The_Help_Menu.htm b/Manual/contents/IDE_Navigation/Menus/The_Help_Menu.htm index e77c268b0..d5398c39d 100644 --- a/Manual/contents/IDE_Navigation/Menus/The_Help_Menu.htm +++ b/Manual/contents/IDE_Navigation/Menus/The_Help_Menu.htm @@ -27,7 +27,8 @@

The Help Menu

  • Report A GameMaker Bug - You can use this option to report bugs directly from within the IDE, in case you find any bugs or have any issues while using GameMaker. You will also be redirected to this window when you click Report after an IDE error occurred. If you're not signed in, a message is shown to ask you to Sign In/Register. It's also possible to Continue Anonymously.
    If you are using a GameMaker account, it is recommended to connect your GitHub account to your GM account via the GameMaker Account Dashboard. This will ensure your submitted reports are tied to your account so you can post updates and receive notifications from our team.

    - In the Report a Bug window you fill in a Title and Description and optionally the Steps To Reproduce the issue. It's also possible to assign an Issue Category (either General IDEBuilding A Project, Crash/Unstable Message, Editing Your Assets, In-Game or Manual Content), Attach additional files that might be useful, Include the project and Make the report private.
    + In the Report a Bug window you fill in a Title and Description and optionally the Steps To Reproduce the issue. It's also possible to assign an Issue Category (either General IDEBuilding A Project, Crash/Unstable Message, Editing Your Assets, In-Game or Manual Content), Attach additional files that might be useful, Include the project and Make the report private. +

     Any files attached via the Bug Reporter are uploaded privately, only accessible by the GameMaker team, even when the bug is public.

    You can choose to include the current project by ticking the Include project checkbox. It is highly recommended that you provide a sample project that shows the issue as it provides important information to the GameMaker team about your issue. A message will be shown asking to include the current package when you select a category related to the runner and the checkbox isn't ticked.

    Finally you can submit the report by clicking the Submit button. @@ -40,7 +41,7 @@

    The Help Menu


  • Release Notes - This opens the Release Notes for GameMaker in your browser. Should you need to roll back an update, you can get previous version installers by clicking the version number link on this page.
  • -
  • Required SDKs - Due to the cross-platform nature of GameMaker a number of 3rd party SDKs are required. Clicking this will take you to a support article that details what you need on a per-platform basis. +
  • Required SDKs - Due to the cross-platform nature of GameMaker a number of third-party SDKs are required. Clicking this will take you to a support article that details what you need on a per-platform basis.
  • Open Project In Explorer - This opens the save location of the currently loaded project in the OS file explorer. @@ -61,7 +62,7 @@

    The Help Menu

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    -

    skeleton_animation_clear

    -

    This function will clear the specified animation track of all animations, ready to be re-assigned.

    +

    skeleton_animation_clear

    +

    This function will clear the specified animation track of all animations, ready to be reassigned.

    +

    It can optionally reset the skeleton to its setup pose in a given amount of time.

     

    Syntax:

    -

    skeleton_animation_clear(track);

    +

    skeleton_animation_clear(track, [reset], [duration]);

  • emitterAudio Emitter IDAudio Emitter ID The index of the emitter to change.
    gainRealReal The maximum gain (default 1).
    @@ -28,32 +29,45 @@

    Syntax:

    - + + + + + + + + + + +
    trackRealReal The animation track to clear.
    resetBoolean  Whether to reset the skeleton to its setup pose. Default is false.
    durationReal  How long animating the skeleton to setup pose should take.

     

    Returns:

    N/A

     

    -

    Example:

    -

    if (mouse_check_button(mb_right))
    +

    Example 1: Basic Use

    +

    if (mouse_check_button(mb_right))
    {
        skeleton_animation_clear(1);
    }

    The above code will clear the animation track 1 if the right mouse button is pressed.

     

    +

    Example 2: Resetting to Setup Pose

    +

    skeleton_animation_clear(1, true, 1);

    +

    The above code clears animation track 1 of the skeletal animation assigned to the current instance and resets it to its setup pose.

     

     

    -

    draw_skeleton

    +

    draw_skeleton

    This function is only for use with sprites that have been created using a skeletal animation program like Spine. While you can draw these sprites using the normal draw functions (like draw_self()), there are times when you may want to draw a single frame or show a change of skin texture without actually changing the sprite properties. In these cases you can draw the sprite with this function, where you give the sprite index and then the name of the animation to get the frame from (a string, as set within the program used to make the sprite). Next you give the name of the skin to use (again, as set when the sprite was made), and a frame value. The frame value is for telling GameMaker what part of the animation to show and is a value between 0 and the image_number. The rest of the arguments are the same as those used for normal sprite drawing and will change the scale, angle, blend colour and alpha of the final animation frame being drawn.

    -

    WARNING! Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

    +

     Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

     

    Syntax:

    -

    draw_skeleton(sprite, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    +

    draw_skeleton(sprite, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    @@ -30,57 +30,57 @@

    Syntax:

    - + - + - + - + - + - + - + - + - + - + - + @@ -103,7 +103,7 @@

    Example:

    Next: draw_skeleton_instance
    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    -

    draw_skeleton_instance

    +

    draw_skeleton_instance

    This function is only for use with instances which have sprites assigned to them created using the skeletal animation program Spine. While you can draw these sprites using the normal draw functions (like draw_self()), there are times when you may want to draw a single frame or show a change of skin texture without actually changing the sprite properties for an instance. In these cases you can draw the sprite that has been assigned to the instance with this function, where you give the unique Instance ID and then the name of the animation to get the frame from (a string, as set within the program used to make the sprite). Next you give the name of the skin to use (again, as set when the sprite was made), and a frame value. The frame value is for telling GameMaker what part of the animation to show and is a value between 0 and the image_number. The rest of the arguments are the same as those used for normal sprite drawing and will change the scale, angle, blend colour and alpha of the final animation frame being drawn.

    -

    WARNING! Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

    +

     Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

     

    Syntax:

    -

    draw_skeleton_instance(instance, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    +

    draw_skeleton_instance(instance, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    spriteSprite AssetSprite Asset The index of the sprite to draw.
    animnameStringString The name of the animation to get the frame from (a string).
    skinnameStringString The name of the skin to use (a string).
    frameRealReal The animation frame to draw (from 0 to image_number - 1).
    xRealReal The x coordinate of where to draw the sprite.
    yRealReal The y coordinate of where to draw the sprite.
    xscaleRealReal The horizontal scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    yscaleRealReal The vertical scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    rotRealReal The rotation of the sprite. 0=normal, 90=turned 90 degrees counter-clockwise etc.
    colourColourColour The colour with which to blend the sprite.
    alphaRealReal The alpha of the sprite (from 0 to 1 where 0 is transparent and 1 opaque).
    @@ -30,57 +30,57 @@

    Syntax:

    - + - + - + - + - + - + - + - + - + - + - + @@ -102,7 +102,7 @@

    Example:

    Next: draw_skeleton_collision
    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    -

    skeleton_animation_clear

    -

    This function will clear the specified animation track of all animations, ready to be re-assigned.

    +

    skeleton_animation_clear

    +

    This function will clear the specified animation track of all animations, ready to be reassigned.

    +

    It can optionally reset the skeleton to its setup pose in a given amount of time.

     

    Syntax:

    -

    skeleton_animation_clear(track);

    +

    skeleton_animation_clear(track, [reset], [duration]);

    instanceInstance IDObject Instance The index of the instance to draw the sprite from.
    animnameStringString The name of the animation to get the frame from (a string).
    skinnameStringString The name of the skin to use (a string).
    frameRealReal The animation frame to draw (from 0 to image_number - 1).
    xRealReal The x coordinate of where to draw the sprite.
    yRealReal The y coordinate of where to draw the sprite.
    xscaleRealReal The horizontal scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    yscaleRealReal The vertical scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    rotRealReal The rotation of the sprite. 0=normal, 90=turned 90 degrees counter-clockwise etc.
    colourColourColour The colour with which to blend the sprite.
    alphaRealReal The alpha of the sprite (from 0 to 1 where 0 is transparent and 1 opaque).
    @@ -28,32 +29,45 @@

    Syntax:

    - + + + + + + + + + + +
    trackRealReal The animation track to clear.
    resetBoolean  Whether to reset the skeleton to its setup pose. Default is false.
    durationReal  How long animating the skeleton to setup pose should take.

     

    Returns:

    N/A

     

    -

    Example:

    -

    if (mouse_check_button(mb_right))
    +

    Example 1: Basic Use

    +

    if (mouse_check_button(mb_right))
    {
        skeleton_animation_clear(1);
    }

    The above code will clear the animation track 1 if the right mouse button is pressed.

     

    +

    Example 2: Resetting to Setup Pose

    +

    skeleton_animation_clear(1, true, 1);

    +

    The above code clears animation track 1 of the skeletal animation assigned to the current instance and resets it to its setup pose.

     

     

    -

    draw_skeleton

    +

    draw_skeleton

    This function is only for use with sprites that have been created using a skeletal animation program like Spine. While you can draw these sprites using the normal draw functions (like draw_self()), there are times when you may want to draw a single frame or show a change of skin texture without actually changing the sprite properties. In these cases you can draw the sprite with this function, where you give the sprite index and then the name of the animation to get the frame from (a string, as set within the program used to make the sprite). Next you give the name of the skin to use (again, as set when the sprite was made), and a frame value. The frame value is for telling GameMaker what part of the animation to show and is a value between 0 and the image_number. The rest of the arguments are the same as those used for normal sprite drawing and will change the scale, angle, blend colour and alpha of the final animation frame being drawn.

    -

    WARNING! Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

    +

     Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

     

    Syntax:

    -

    draw_skeleton(sprite, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    +

    draw_skeleton(sprite, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    @@ -30,57 +30,57 @@

    Syntax:

    - + - + - + - + - + - + - + - + - + - + - + @@ -103,7 +103,7 @@

    Example:

    Next: draw_skeleton_instance
    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    -

    draw_skeleton_instance

    +

    draw_skeleton_instance

    This function is only for use with instances which have sprites assigned to them created using the skeletal animation program Spine. While you can draw these sprites using the normal draw functions (like draw_self()), there are times when you may want to draw a single frame or show a change of skin texture without actually changing the sprite properties for an instance. In these cases you can draw the sprite that has been assigned to the instance with this function, where you give the unique Instance ID and then the name of the animation to get the frame from (a string, as set within the program used to make the sprite). Next you give the name of the skin to use (again, as set when the sprite was made), and a frame value. The frame value is for telling GameMaker what part of the animation to show and is a value between 0 and the image_number. The rest of the arguments are the same as those used for normal sprite drawing and will change the scale, angle, blend colour and alpha of the final animation frame being drawn.

    -

    WARNING! Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

    +

     Because of the way skeletal animations are interpolated between various "key" frames, there is an additional overhead associated with this call and therefore it is recommended that you avoid drawing skeleton based sprites using this method unless absolutely necessary.

     

    Syntax:

    -

    draw_skeleton_instance(instance, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    +

    draw_skeleton_instance(instance, animname, skinname, frame, x, y, xscale, yscale, rot, colour, alpha);

    spriteSprite AssetSprite Asset The index of the sprite to draw.
    animnameStringString The name of the animation to get the frame from (a string).
    skinnameStringString The name of the skin to use (a string).
    frameRealReal The animation frame to draw (from 0 to image_number - 1).
    xRealReal The x coordinate of where to draw the sprite.
    yRealReal The y coordinate of where to draw the sprite.
    xscaleRealReal The horizontal scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    yscaleRealReal The vertical scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    rotRealReal The rotation of the sprite. 0=normal, 90=turned 90 degrees counter-clockwise etc.
    colourColourColour The colour with which to blend the sprite.
    alphaRealReal The alpha of the sprite (from 0 to 1 where 0 is transparent and 1 opaque).
    @@ -30,57 +30,57 @@

    Syntax:

    - + - + - + - + - + - + - + - + - + - + - + @@ -102,7 +102,7 @@

    Example:

    Next: draw_skeleton_collision
    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    + + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view.htm b/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view.htm index b1447dcf4..747bb69bb 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view.htm @@ -41,41 +41,39 @@

    Syntax:

    - + - + - + - + - + - +
    instanceInstance IDObject Instance The index of the instance to draw the sprite from.
    animnameStringString The name of the animation to get the frame from (a string).
    skinnameStringString The name of the skin to use (a string).
    frameRealReal The animation frame to draw (from 0 to image_number - 1).
    xRealReal The x coordinate of where to draw the sprite.
    yRealReal The y coordinate of where to draw the sprite.
    xscaleRealReal The horizontal scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    yscaleRealReal The vertical scaling of the sprite, as a multiplier: 1 = normal scaling, 0.5 is half etc...
    rotRealReal The rotation of the sprite. 0=normal, 90=turned 90 degrees counter-clockwise etc.
    colourColourColour The colour with which to blend the sprite.
    alphaRealReal The alpha of the sprite (from 0 to 1 where 0 is transparent and 1 opaque).
    nameStringString The name of the debug view
    visibleBooleanBoolean Whether the debug view should be visible when the debug overlay is opened
    xRealReal  The x position of the debug view, the default -1 indicates it can be placed anywhere
    yRealReal  The y position of the debug view, the default -1 indicates it can be placed anywhere
    widthRealReal  The width of the debug view (default is 500)
    heightRealReal  The height of the debug view (default is 400)
    -


    - -

    +

     

    Returns:

    -

    Debug View Pointer

    +

    Debug View Pointer

     

    Example:

    dbg_view("CustomDebugView", true);

    @@ -86,10 +84,31 @@

    Example:

    Back: The Debug Overlay
    -
    Next: dbg_view_delete
    +
    Next: dbg_view_exists +

     

    + +

     

    + +

     

    + +

     

    + +

     

    + +

     

    + +

     

    + +

     

    + +

     

    + +

     

    + +
    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    + + + \ No newline at end of file diff --git a/Manual/contents/assets/scripts/gml.js b/Manual/contents/assets/scripts/gml.js index feab01938..46d76002b 100644 --- a/Manual/contents/assets/scripts/gml.js +++ b/Manual/contents/assets/scripts/gml.js @@ -198,6 +198,8 @@ export default function(hljs) { "is_keyboard_used_debug_overlay", "vertex_submit_ext", "dbg_text_separator", + "dbg_view_exists", + "dbg_section_exists", "abs", "achievement_available", "achievement_event", diff --git a/Manual/toc/Default.toc b/Manual/toc/Default.toc index 67144871f..0e9c5274d 100644 --- a/Manual/toc/Default.toc +++ b/Manual/toc/Default.toc @@ -3083,8 +3083,10 @@ + + From 5df7eeefa07c725cbca1c2aaceafe85d959eb5f2 Mon Sep 17 00:00:00 2001 From: YYBartT Date: Thu, 2 May 2024 21:21:17 +0200 Subject: [PATCH 009/134] docs(feature): documented dbg_view_exists and dbg_section_exists YoYoGames/GameMaker-Bugs#4931 * Tiny change to short function description of dbg_view_exists --- .../GML_Reference/Debugging/dbg_view_exists.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view_exists.htm b/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view_exists.htm index cfd92016b..402b803d1 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view_exists.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Debugging/dbg_view_exists.htm @@ -15,7 +15,7 @@

    dbg_view_exists

    -

    This function returns whether a custom debug view, created with dbg_view, still exists.

    +

    This function returns whether the given custom debug view, created with dbg_view, still exists.

     

    Syntax:

    dbg_view_exists(view)

    From 0ea2c88e4e9946cde045d7d26beaa9120284505c Mon Sep 17 00:00:00 2001 From: YYBartT Date: Fri, 3 May 2024 17:15:23 +0200 Subject: [PATCH 010/134] docs(feature): skeleton_animation_clear optional parameters YoYoGames/GameMaker-Bugs#1570 * added units of the "duration" parameter --- .../Skeletal_Animation/Animation/skeleton_animation_clear.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Sprites/Skeletal_Animation/Animation/skeleton_animation_clear.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Sprites/Skeletal_Animation/Animation/skeleton_animation_clear.htm index 15b2ffab9..18c21860d 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Sprites/Skeletal_Animation/Animation/skeleton_animation_clear.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Sprites/Skeletal_Animation/Animation/skeleton_animation_clear.htm @@ -40,7 +40,7 @@

    Syntax:

    duration Real -  How long animating the skeleton to setup pose should take. +  How long animating the skeleton to setup pose should take, in seconds. From fa80a63a4181d4c6d2fc14951cea70c97eae52c4 Mon Sep 17 00:00:00 2001 From: YYBartT Date: Fri, 3 May 2024 19:39:56 +0200 Subject: [PATCH 011/134] docs(feature): documented gamepad_enumerate YoYoGames/GameMaker-Bugs#5329 * Added function reference page * Some small changes on the related gamepad pages --- .../GamePad_Input/Gamepad_Input.htm | 18 ++++--- .../GamePad_Input/gamepad_enumerate.htm | 49 +++++++++++++++++++ .../GamePad_Input/gamepad_remove_mapping.htm | 20 ++++---- Manual/contents/assets/scripts/gml.js | 1 + Manual/toc/Default.toc | 1 + 5 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_enumerate.htm diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/Gamepad_Input.htm b/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/Gamepad_Input.htm index f924f8447..44f6b70e7 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/Gamepad_Input.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/Gamepad_Input.htm @@ -14,10 +14,10 @@ -

    Gamepad Input

    -

    GameMaker has a number of dedicated functions that can be used to detect both analog and digital controls from multiple connected gamepads. These functions work similar to the Device Inputs, in that you can detect up to four different XInput game pads that are connected (and up to 8 DirectInput gamepads) and deal with the input from each one using the same functions. Note that when a gamepad is plugged in to your device (or it is removed) then an asynchronous System Event is triggered where you can deal with the situation using the appropriate functions.

    -

    The gamepad "slots" are indexed from 0 upwards, and the actual slot that a gamepad assigned will depend on a variety of factors, not least of which is the OS that the project is running on. On the Windows target, slots 0 - 3 inclusive are only for Xinput gamepads, ie: Xbox360 controllers and compatibles. However you can also check slots 4 - 11 inclusive for DirectInput gamepads, which means you can detect many other models of controller when connected through these slots. On other platforms, pads may be detected on any slot that the OS has assigned it, which could slot 3 or slot 20 or more. For example, Android devices will store bluetooth gamepads in a slot and then reserve that slot for that gamepad in the future, whether it is connected or not, so you cannot assume that a single connected gamepad is connected to slot 0, as this will probably not be the case.

    -

    It is worth noting that when using DirectInput gamepads on Windows, or generic gamepads on other platforms, the constants given below may not match exactly the buttons that you expect when they are pressed, due to the fragmented and non-standardised way that the API is implemented by controller manufacturers. Because of this, it is recommend that you have some kind of gamepad setup screen in your games where people can redefine the gamepad buttons based on input from any connected device to mitigate any issues (there are gamepad "mapping" functions that can help with this on Windows Desktop, Ubuntu, macOS, and Android targets, while on all others you would need to do this yourself using code).

    +

    Gamepad Input

    +

    GameMaker has a number of dedicated functions that can be used to detect both analog and digital controls from multiple connected gamepads. These functions work similar to the Device Inputs, in that you can detect up to four different XInput gamepads that are connected (and up to 8 DirectInput gamepads) and deal with the input from each one using the same functions. Note that when a gamepad is plugged in to your device (or it is removed) then an asynchronous System event is triggered where you can deal with the situation using the appropriate functions.

    +

    The gamepad "slots" are indexed from 0 upwards, and the actual slot that a gamepad gets assigned will depend on a variety of factors, not least of which is the OS that the project is running on. On the Windows target, slots 0 - 3 inclusive are only for Xinput gamepads, i.e.: Xbox360 controllers and compatibles. However, you can also check slots 4 - 11 inclusive for DirectInput gamepads, which means you can detect many other models of controller when connected through these slots. On other platforms, pads may be detected on any slot that the OS has assigned it, which could slot 3 or slot 20 or more. For example, Android devices will store bluetooth gamepads in a slot and then reserve that slot for that gamepad in the future, whether it's connected or not, so you cannot assume that a single connected gamepad is connected to slot 0, as this will probably not be the case.

    +

    It is worth noting that when using DirectInput gamepads on Windows, or generic gamepads on other platforms, the constants given below may not match exactly the buttons that you expect when they are pressed, due to the fragmented and non-standardised way that the API is implemented by controller manufacturers. Because of this, it is recommended that you have some kind of gamepad setup screen in your games where people can redefine the gamepad buttons based on input from any connected device to mitigate any issues (there are gamepad "mapping" functions that can help with this on Windows Desktop, Ubuntu, macOS, and Android targets, while on all others you would need to do this yourself using code).

    Input Constants

    When working with the gamepad functions, input can come from axes, buttons or hats, which GameMaker will assign to the following built-in constants (note that "hats" are generally only detected on non-standard controllers):

    @@ -128,14 +128,18 @@

    Functions

  • gamepad_hat_value
  •  

    -

    The following gamepad functions also exist and are used for remapping the built in constants to the direct physical inputs of a given gamepad. These functions are only for the Windows Desktop, Ubuntu, macOS, and Android target platforms and on Windows, they will only be valid for Direct input devices. While GameMaker comes with mappings for a number of different gamepads based on SDL Gamepad Controller DB, however due to the huge number of controller types and brands out there, it is impossible to map the GML constants to the correct inputs for every make and model, so with these functions you have the possibility to create your own custom mappings.

    +

    The following gamepad functions also exist and are used for remapping the built-in constants to the direct physical inputs of a given gamepad. These functions are only for the Windows Desktop, Ubuntu, macOS, and Android target platforms and on Windows, they will only be valid for DirectInput devices. While GameMaker comes with mappings for a number of different gamepads based on SDL Gamepad Controller DB, however due to the huge number of controller types and brands out there, it is impossible to map the GML constants to the correct inputs for every make and model, so with these functions you have the possibility to create your own custom mappings.

     

    -

    It is worth noting that Direct Input gamepads are run in cooperative mode which means that your game only has access to them when it is the foreground application, which in turn will cause Direct Input controllers to be "lost" if the game loses focus and then "found" again when it comes back into focus (this can be detected in the System Event and dealt with). Similarly, no input from gamepads will be detected while the game is not in focus, and we recommend that you use the function os_is_paused() or window_has_focus() to detect this and pause the game or something similar as any button being held down at the time the game loses focus will maintain the held down state until the game regains focus.

    +

    It is worth noting that DirectInput gamepads are run in cooperative mode which means that your game only has access to them when it is the foreground application, which in turn will cause DirectInput controllers to be "lost" if the game loses focus and then "found" again when it comes back into focus (this can be detected in the System Event and dealt with). Similarly, no input from gamepads will be detected while the game is not in focus, and we recommend that you use the function os_is_paused or window_has_focus to detect this and pause the game or something similar as any button being held down at the time the game loses focus will maintain the held down state until the game regains focus.

    +

    Finally, there is one function 

    +

    Compatibility

    The following list shows current compatibility across the platforms (note that this will change with future updates):

      @@ -149,7 +153,7 @@

      Compatibility

    • Web browsers will only detect gamepads when a button is pressed or an axis is moved, so they may not be available at the immediate start of the game. This applies to the GX.games and HTML target platforms.
    • Gamepad support also extends to iOS with the iCade cabinet. The left axis maps to the stick controller (although the input is digital, not analogue), the four "face" buttons map to the cabinet front buttons, and the four shoulder buttons map to those at the back of the cabinet.
    • Android (and Amazon Fire) export supports NYKO controllers and generic Bluetooth controllers, but only when they are enabled, meaning that you will have to tick the iCade/Bluetooth option in the General section of the Android Game Options. They require API level 12 for them to work fully and it should be noted that GameMaker will register as connected any Bluetooth devices that your device is paired with, whether or not it's actually connected. Therefore this should be taken into account when assigning and checking "slots". Note that the remapping of controller constants is also permitted.
    • -
    • On PS4, if you want to use the touch pad tracking you need to use the device_mouse_* buttons. Remapping of controller constants is not permitted.
    • +
    • On PS4, if you want to use the touch pad tracking you need to use the device_mouse_* buttons. Remapping of controller constants is not permitted.
    • On, Xbox One and Nintendo Switch targets, gamepads are fully supported, but remapping of controller constants is not permitted.

    Ideally, on all target platforms, you want to enumerate a list of available gamepad "slots" and then check them to see if any devices are detected, something like this:

    diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_enumerate.htm b/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_enumerate.htm new file mode 100644 index 000000000..4ab20c565 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_enumerate.htm @@ -0,0 +1,49 @@ + + + + + + gamepad_enumerate + + + + + + + + + + +

    gamepad_enumerate

    +

    This function forces the device enumeration that would take place in reaction to a bluetooth device change on Android, updating the list of connected devices.

    +

    It allows the game to detect when a controller connects or disconnects to the device in real time.

    +

     This function only works on Android.

    +

     

    +

    Syntax:

    +

    gamepad_enumerate();

    +

     

    +

    Returns:

    +

    N/A

    +

     

    +

    Example:

    +

    gamepad_enumerate();

    +

    The above code triggers device enumeration.

    +

     

    +

     

    + + + + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_remove_mapping.htm b/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_remove_mapping.htm index ece675995..17399f555 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_remove_mapping.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_remove_mapping.htm @@ -4,7 +4,7 @@ gamepad_remove_mapping - + @@ -22,21 +22,23 @@

    Syntax:

    - + + - + - + + - +
    ArgumentTypeArgumentType Description
    indexindexReal Which gamepad index "slot" to remove the mapping from.

     

    Returns:

    -

    +

    N/A

     

    Example:

    -

    if (remap == true)
    +

    if (remap == true)
    {
        gamepad_remove_mapping(global.PadIndex);
    }

    @@ -48,10 +50,10 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2021 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    surface_set_target_ext

    This function is for use with the Shader Functions and sets the MRT (0 - 3) for native level shaders (OpenGL ES, OpenGL, DX9, DX11).

    -

     MRT's are not supported on HTML5.

     

    Syntax:

    @@ -41,19 +40,19 @@

    Syntax:

    index - Real + Real The render target index to use (from 0 to 3). surface_id - Surface + Surface The surface to use.

     

    Returns:

    -

    Boolean Whether the render target was set successfully

    +

    Boolean Whether the render target was set successfully

     

    Example:

    surface_set_target_ext(0, surf);

    @@ -67,7 +66,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    sprite_index

    -

    This variable returns the index of the current sprite for the instance, or -1 if the instance has no sprite associated with it. You can change it to give the instance a different sprite by giving it the name of a sprite from the resource tree or by using a variable that has an externally loaded sprite indexed in it. Changing the sprite does not change the index of the currently visible frame, so if you change the sprite on frame number 3, the new sprite will be drawn with that frame visible (assuming it has the same number of frames).

    +

    This variable returns the current sprite set for the instance, or -1 if the instance has no sprite associated with it.

    +

    You can change it to give the instance a different sprite, by either giving it the reference of a sprite from The Asset Browser or by using a variable that has an externally loaded sprite indexed in it.

    +

    Changing the sprite does not change the index of the currently visible frame, given that there is a sub-image for the current frame in the new sprite. So if you change the sprite on frame number 3, the new sprite will be drawn with that frame visible. However, if the new sprite does not contain a sub-image for the current frame, image_index will reset to 0, displaying the first frame of the sprite instead.

     

    Syntax:

    sprite_index;

     

    Returns:

    -

    Sprite Asset

    +

    Sprite Asset

     

    Example:

    with (obj_Check)
    @@ -46,7 +48,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    Lighting

    When working with 3D scenes, what you draw with the GameMaker functions may look rather "flat" because there is no lighting to give them realism and life. This means that the colour of the primitive faces are equal all over, independent of their orientation or position, therefore, to create more realistic looking scenes you must enable lighting and place lights at the correct places within the 3D world. This section outlines the functions available to help you achieve that.

    +

     The lighting functions require a normal property in the vertex format of whatever's being drawn. This means this will not work with regular draw functions like draw_sprite, and vertex buffers that need to use lighting will need to use a vertex format with normals.

    Function Reference

    • draw_light_define_ambient
    • @@ -38,7 +39,7 @@

      Function Reference

      Next: Particles
      -
      © Copyright YoYo Games Ltd. 2023 All Rights Reserved
      +
      © Copyright YoYo Games Ltd. 2024 All Rights Reserved

      ds_map_add

      -

      This function should be used to add sets of key/value pairs into the specified DS map. You can check this function to see if it was successful or not (it will return true on success or false otherwise), as it may fail if there already exists the same key in the DS map or you specify a non-existent DS map as the ID of the map to add to. The keys and and values you supply can be made up of any combination of data types, so all of the following - and more - are acceptable (although, in practice, you would most commonly use a string for the key):

      +

      This function should be used to add sets of key/value pairs into the specified DS map.

      +

      You can check this function to see if it was successful or not (it will return true on success or false otherwise), as it may fail if there already exists the same key in the DS map or you specify a non-existent DS map as the ID of the map to add to.

      +

      The keys and and values you supply can be made up of any combination of data types, so all of the following - and more - are acceptable (although, in practice, you would most commonly use a string for the key):

      ds_map_add(map, 5, undefined);
      ds_map_add(map, "level", 1);
      ds_map_add(map, 89.6, "hello world");
      - ds_map_add(map, 5, buffer_get_address(buff));

      -

      You can also add to a map using the accessor "?", as shown below:

      + ds_map_add(map, 5, buffer_get_address(buff)); // This will return false and fail, as the key 5 already exists in the map

      +

      You can also add to a map using the accessor "?", as shown below, however this is a ds_map_set operation and will successfully update existing keys as well, unlike the add function.

      map[? 5] = undefined;
      map[? "level"] = 1;
      map[? 89.6] = "hello world";
      - map[? 5] = buffer_get_address(buff);

      + map[? 5] = buffer_get_address(buff); // This will succeed as it is a "set" and not an "add"

      Unlike other data structures in GameMaker this key will not go to the start (nor the end) of the DS map, but rather it will just go into the DS map somewhere.

       

      Syntax:

      @@ -38,24 +40,24 @@

      Syntax:

      id - DS Map ID + DS Map The id of the map to add to. key - String + String The key of the value to add. val - Any + Any The value to add to the map.

       

      Returns:

      -

      Boolean

      +

      Boolean

       

      Example:

      inventory = ds_map_create();
      @@ -72,7 +74,7 @@

      Example:

      -
      © Copyright YoYo Games Ltd. 2023 All Rights Reserved
      +
      © Copyright YoYo Games Ltd. 2024 All Rights Reserved

      ds_map_replace

      -

      With this function you can change the value for the given key within the a DS map . You supply the index to the map (as returned by the function ds_map_create()) - and then the key to replace - either a string or an integer - and the value to replace the key value with. If the given key does not exist then it will be created for you, and if it does then the current value will be replaced with the new - value. The function will return true if the key exists and the value is replaced, and false if the key does not exist and a new key was created with the value.

      +

      With this function you can change the value for the given key within the a DS map. You supply the index to the map (as returned by the function ds_map_create()) and then the key to replace - either a string or an integer - and the value to replace the key value with. If the given key does not exist then it will be created for you, and if it does then the current value will be replaced with the new value. The function will return true if the key exists and the value is replaced, and false if the key does not exist and a new key was created with the value.

       

      Syntax:

      ds_map_replace( id, key, val );

      - + + - + - + + - + - + + - + - + + - +
      ArgumentTypeArgumentType Description
      ididDS Map The id of the map to change.
      keykeyString The key with the value that should be replaced by the new one
      valvalAny The new value to replace the given value with

       

      Returns:

      -

      +

      Boolean

       

      Example:

      ds_map_replace(inventory, "torso", 55);

      @@ -58,7 +60,7 @@

      Example:

      -
      © Copyright YoYo Games Ltd. 2021 All Rights Reserved
      +
      © Copyright YoYo Games Ltd. 2024 All Rights Reserved

      ds_map_set

      This function sets the value of a key within a given DS map.

      -

      You supply the DS Map ID value (as returned by the function ds_map_create), then give the key you want to set and the value to set it to. If the given key does not exist then it will be created for you and set to the value.

      -

      Since the function doesn't return anything, you should use the function ds_map_replace to check if the key value has been replaced or a new key has been created.

      +

      You supply the DS Map value (as returned by the function ds_map_create), then give the key you want to set and the value to set it to. If the given key does not exist then it will be created for you and set to the value.

      +

      You can also set a value in a map using the accessor "?", as shown below:

      +

      map[? 5] = undefined;
      + map[? "level"] = 1;
      + map[? 89.6] = "hello world";
      + map[? 5] = buffer_get_address(buff);

      +

      Since the function doesn't return anything, you can use the function ds_map_replace to check if the key value has been replaced or a new key has been created.

       This function is the same as using the DS map accessor to set/create a map key/value pair.

       

      @@ -32,17 +37,17 @@

      Syntax:

      id - DS Map ID + DS Map The id of the map to use. key - Any + Any The key to set. value - Any + Any The value to set the key to. @@ -75,7 +80,7 @@

      Example:

      -
      © Copyright YoYo Games Ltd. 2023 All Rights Reserved
      +
      © Copyright YoYo Games Ltd. 2024 All Rights Reserved
      -

      Cameras And Viewports

      +

      Cameras And Viewports

      When creating rooms in GameMaker you need to set up different view ports and/or cameras to control what is displayed to the player. The view ports are, basically, little windows into your game world that enable you to show the player parts of a room, either scaled or 1:1, and as such they are essential when your game room is larger than the display size. The cameras are what define exactly what will be shown in each view port.

      GameMaker permits you 8 independent view ports (numbered from 0 - 7) and an unlimited number of cameras, of which only 8 can be active at any one time - one assigned to each of the available ports - although normally you'll only need one or two view ports. Cameras can show different parts of the same room and can be activated and deactivated as well as assigned to view ports at any time, meaning that you can use cameras to draw HUD elements or to have split screen effects, or to create cut-scenes for example. Essentially, you position a camera within a room and define the "view" (area) of the room that will be visible to it, and then this view is drawn to a view port - note that the view port can be a different size to the camera view and as such you can distort and scale the camera view if it is a size other than 1:1 with the view port.

       It's easy to get confused when talking about cameras, views and view ports, so to clarify: 

      @@ -22,9 +23,9 @@

      Cameras And Viewports

    • The View: What the camera sees, based on the position, projection and rotation of the camera
    • The View Port: The area of the screen where the camera view will be displayed
    -

    Camera illustrationIf you are adding cameras through The Room Editor then you can retrieve their camera ID value using the view_camera variable. You can then manipulate the view using the functions below and you can even destroy the default cameras if required, although you will need to assign a new camera to the view otherwise you will get some very unpredictable behaviour. Cameras added to a view port in the Room Editor are global in scope, meaning that they are created once when you start the game, and then as you enter each room they are set to the values set in the Room Editor, so if you destroy a default camera in any room, it will cease to exist for all rooms.

    +

    Camera illustrationIf you are adding cameras through The Room Editor then you can retrieve their camera ID value using the view_camera variable. You can then manipulate the view using the functions below and you can even destroy the default cameras if required, although you will need to assign a new camera to the view otherwise you will get some very unpredictable behaviour. Cameras added to a view port in the Room Editor are global in scope, meaning that they are created once when you start the game, and then as you enter each room they are set to the values set in the Room Editor, so if you destroy a default camera in any room, it will cease to exist for all rooms.

    Something to note about cameras and view ports is that the total area of the bounding box for all active view ports in the first room of the game is what defines the background canvas size (or window size for macOS, Ubuntu (Linux) and Windows), and any areas that are not covered by a view port will default to drawing using the window colour as illustrated by the image below:

    -

    View Port Canvas

    +

    View Port Canvas

     By default you need to select Clear Display Buffer in the Room Editor for the colour to be shown, and you can only set the colour using the function window_set_colour. If you don't use this function it will default to black.

    You should take care when using multiple cameras as the draw event for all instances is called once for each visible view, so if you have three camera views active in one room, the draw event will be run three times every step (basically doing three times the work) which can be a cause for slowdown if the game is large or complex. The view_current variable can be used to help limit these draw calls however by checking which view is being drawn and only drawing items that are specific to a given view port. Also be careful when creating your own cameras, as if you create one in a room and don't remove it using the camera_destroy function you can get a memory leak.

    You can find an overview of all the available functions from the different sections below, but it's worth noting that some of these functions require the setting up and use of different matrices, so you may want to look at the section of the manual for the Matrix Functions. Also note that there are a few room functions that can be used to get and set cameras and view port values in rooms other than the current one (see the section on Rooms).

    @@ -117,5 +118,5 @@
    © Copyright YoYo Games Ltd. 2023 All R - - \ No newline at end of file + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Cameras_And_Display/Cameras_And_Viewports/camera_get_view_border_x.htm b/Manual/contents/GameMaker_Language/GML_Reference/Cameras_And_Display/Cameras_And_Viewports/camera_get_view_border_x.htm index 0e828eacf..295be99de 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Cameras_And_Display/Cameras_And_Viewports/camera_get_view_border_x.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Cameras_And_Display/Cameras_And_Viewports/camera_get_view_border_x.htm @@ -16,7 +16,7 @@

    camera_get_view_border_x

    -

    This function can be used to retrieve the x (horizontal) border value set for the given camera. The return value will be in pixels.

    +

    This function can be used to retrieve the x (horizontal) border value set for the given camera, which can be set in the room properties (see Object Following) or via the function camera_set_view_border). The return value will be in pixels.

     

    Syntax:

    camera_get_view_border_x(camera_id)

    @@ -56,7 +56,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    camera_get_view_border_y

    -

    This function can be used to retrieve the y (vertical) border value set for the given camera. The return value will be in pixels.

    +

    This function can be used to retrieve the y (vertical) border value set for the given camera, which can be set in the room properties (see Object Following) or via the function camera_set_view_border). The return value will be in pixels.

     

    Syntax:

    camera_get_view_border_y(camera_id)

    @@ -56,7 +56,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    camera_get_view_speed_x

    -

    This function can be used to retrieve the movement speed of the given camera along the x axis (horizontal movement). The return value will be in pixels per game frame.

    +

    This function can be used to retrieve the movement speed of the given camera along the x axis (horizontal movement), which can be set in the room properties (see Object Following) or via the function camera_set_view_speed). The return value will be in pixels per game frame.

     

    Syntax:

    camera_get_view_speed_x(camera_id)

    - + + - + - + + - +
    ArgumentTypeArgumentType Description
    camera_idcamera_idCamera ID The unique camera ID value returned when you created the camera

     

    Returns:

    -

    +

    Real

     

    Example:

    var xs = camera_get_view_speed_x(view_camera[0]);
    @@ -54,7 +56,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2021 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    camera_get_view_speed_y

    -

    This function can be used to retrieve the movement speed of the given camera along the y axis (vertical movement). The return value will be in pixels per game frame.

    +

    This function can be used to retrieve the movement speed of the given camera along the y axis (vertical movement), which can be set in the room properties (see Object Following) or via the function camera_set_view_speed). The return value will be in pixels per game frame.

     

    Syntax:

    camera_get_view_speed_y(camera_id)

    - + + - + - + + - +
    ArgumentTypeArgumentType Description
    camera_idcamera_idCamera ID The unique camera ID value returned when you created the camera

     

    Returns:

    -

    +

    Real

     

    Example:

    var xs = camera_get_view_speed_x(view_camera[0]);
    @@ -54,7 +56,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2021 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    camera_get_view_target

    -

    This function can be used to retrieve the follow target of the given camera. The return value can be an object index, an instance ID or -1 if no follow target has been set.

    +

    This function can be used to retrieve the follow target of the given camera, which can be set in the room properties (see Object Following) or with camera_set_view_target. The return value can be an Object Asset, an Object Instance or -1 if no follow target has been set.

     

    Syntax:

    camera_get_view_target(camera_id)

    - + + - + - + + - +
    ArgumentTypeArgumentType Description
    camera_idcamera_idCamera ID The unique camera ID value returned when you created the camera

     

    Returns:

    -

    Object Asset, Instance ID or -1

    +

    Object Asset, Object Instance or -1

     

    Example:

    var target = camera_get_view_target(view_camera[0]);
    - if (target != obj_Player)
    + if (target != obj_Player)
    {
        camera_set_view_target(view_camera[0], obj_Player);
    }

    @@ -53,7 +55,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    camera_set_view_border

    -

    You can use this function to set the follow border of the view camera within the room. You give the unique camera ID value (as returned by the different camera_create functions) and then give the x border size and the y border size (horizontal - and vertical). These values will only be used when the view camera has been assigned an instance target to follow (either in the Room Editor or using the function camera_set_view_target()) and relate - to how far from the border of the view the instance needs to be before the view will update its position to follow.

    +

    You can use this function to set the border size of the camera within the room.

    +

    These values will only be used when the view camera has been assigned an instance target to follow (either in the Room Editor - see Object Following - or using the function camera_set_view_target()) and relate to how far from the border of the view the instance needs to be before the view will update its position to follow.

    +

    The exact point that is checked against this buffer zone is the point at the x and y position for that instance, and it does not make use of its mask.

    +

    You give the unique camera ID value (as returned by the different camera_create functions) and then give the x border size and the y border size (horizontal and vertical).

     

    Syntax:

    camera_set_view_border(camera_id, x_border, y_border)

    - + + - + - + + - + - + + - + - + + - +
    ArgumentTypeArgumentType Description
    camera_idcamera_idCamera ID The unique camera ID value returned when you created the camera.
    x_borderx_borderReal The border (in pixels) for the view camera along the horizontal axis
    y_bordery_borderReal The border (in pixels) for the view camera along the vertical axis

     

    Returns:

    -

    +

    N/A

     

    Example:

    camera_set_view_border(view_camera[0], 64, 64);

    @@ -59,7 +64,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2021 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    camera_set_view_speed

    -

    You can use this function to update the speed of the view camera within the room. You give the unique camera ID value (as returned by the different camera_create() functions) and then give the x and y (horizontal - and vertical) speed that it should move when set to follow a given instance. The speed is calculated as pixels per step and can be set to "-1" to make the camera move instantly, but if the camera is not set to follow any instance then the - values set here will have no visible effect.

    +

    You can use this function to update the speed of the camera within the room when following a target object. This is the speed the camera moves at when the target instance is outside of the buffer zone. See: Object Following

    +

    You give the unique camera ID value (as returned by the different camera_create() functions) and then give the x and y (horizontal and vertical) speed that it should move when set to follow a given instance.

    +

    The speed is calculated as pixels per step and can be set to "-1" to make the camera move instantly, but if the camera is not set to follow any instance then the values set here will have no visible effect.

     

    Syntax:

    -

    camera_set_view_speed(camera_id, xspeed, yspeed)

    +

    camera_set_view_speed(camera, x_speed, y_speed)

    - + + - + - + + - + - - - + + + + - - - + + + +
    ArgumentTypeArgumentType Description
    camera_idcameraCamera ID The unique camera ID value returned when you created the camera.
    xspeedThe speed (number of pixels per game frame) that the view should move on the horizontal (x) axis
    x_speedRealThe speed (number of pixels per game frame) that the view should move on the horizontal (x) axis to catch up to the target
    yspeedThe speed (number of pixels per game frame) that the view should move on the vertical (y) axis
    y_speedRealThe speed (number of pixels per game frame) that the view should move on the vertical (y) axis to catch up to the target

     

    Returns:

    -

    +

    N/A

     

    Example:

    camera_set_view_speed(view_camera[0], 5, 5);

    @@ -58,7 +62,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2021 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    camera_set_view_target

    -

    You can use this function to set the follow target of the view camera within the room. You give the unique camera ID value (as returned by the different camera_create() functions) and then give the target instance or object ID that you wish to set the camera view to. Note that if you choose an object ID and there is more than one instance of that object in the room, there is no way for GameMaker to know which instance you wish to follow and so it could be any of them.

    +

    You can use this function to set the follow target of the camera within the room. See: Object Following

    +

    You give the unique camera ID value (as returned by the different camera_create() functions) and then give the Object Instance or Object Asset that you wish to set the camera view to follow.

    +

    Note that if you supply an object and there is more than one instance of that object in the room, there is no way for GameMaker to know which instance you wish to follow and so it could be any of them.

     

    Syntax:

    -

    camera_set_view_target(camera_id, instance_id/object_id)

    +

    camera_set_view_target(camera_id, id)

    @@ -28,12 +30,12 @@

    Syntax:

    - + - - + + @@ -55,7 +57,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    Code Snippets

    A very handy tool you have at your disposal when editing your code is the use of Code Snippets. When using the script editor, you can press F4 to open the code snippet pop-up, which permits you to select one of the commonly used code methods from a list:

    -

    Code Snippets WindowFrom this window you can select with the mouse the snippet to use, or you can press the associated hotkey listed on the right. This will add the snippet to your code for editing.

    +

    Code Snippets WindowFrom this window you can select with the mouse the snippet to use, or you can press the associated hotkey listed on the right. This will add the snippet to your code for editing. The hotkey can be modified in the Redefine Keys Preferences under the "Text Editor" section.

    You can also define your own code snippets if you want to. Before doing this, you'll need to create a file called "snippets.txt" in one of the following directories:

    • Windows: %ProgramData%\GameMakerStudio2\User\
    • @@ -28,11 +28,14 @@

      Code Snippets

      Once the file is created in the User directory, you can edit it with any text editor following these rules:

      • Each snippet has to be on a separate line (there should be no blank lines)
      • -
      • Each snippet must start with the hotkey to be used followed by "-" and then the name of the snippet (which is what is shown in the menu) followed by a colon ":", eg:
      • +
      • Each snippet must start with the name of the snippet (which is what is shown in the menu) followed by a colon ":", e.g.:
      -

      I - Instance Create:

      +

      Instance Create:

      After the colon you add the snippet of code

      -

      I - Instance Create:instance_create_layer(x, y, |layer|, object);

      +

      Instance Create:instance_create_layer(x, y, |layer|, object);

      +
        +
      • Hotkeys for your snippets can be assigned in the Redefine Keys Preferences under the "Text Editor" section. They will be created as unbound by default.
      • +

      The code that you add must also follow a specific format where:

      • All code is on a single line
      • @@ -49,7 +52,7 @@

        Code Snippets

      • macOS: /Applications/GameMaker.app/Contents/MonoBundle/TextEditor/snippets.txt
      • Ubuntu: /opt/GameMaker/x86_64/TextEditor/snippets.txt
      -

      Code Snippets Example

      +

      Code Snippets Example

       

       

       

      @@ -60,7 +63,7 @@

      Code Snippets

      -
      © Copyright YoYo Games Ltd. 2023 All Rights Reserved
      +
      © Copyright YoYo Games Ltd. 2024 All Rights Reserved
      -

      physics_fixture_bind_ext

      +

      physics_fixture_bind_ext

      Once we have defined our fixture it has to be bound to an instance. This means that its properties are transferred to the selected instance, not the actual fixture itself, so that one fixture can be bound to multiple instances if all are to have the same properties. You can specify an object index for the target and all instances present in the room at the time will receive that fixtures properties (but not any new instances of the object created later), or you can use the special keywords other and all. You can even specify a parent object and all children instances with that parent will also receive the fixture. Once the fixture has been bound to all the instances that you need, it can be deleted if no longer necessary and the instances with that fixtures properties will not be affected and maintain those properties.

      -

      Normally, the fixture will be bound to the instance with the center of mass being positioned at the origin of the instance, however this is not always what you require and so this function also permits you to offset the x and y position where the fixture is bound by a given amount (if you do not require this then use physics_fixture_bind instead). It is important to note that a fixture can only support a single offset, as adding multiple offsets to a single fixture is not supported by Box2D.

      +

      Normally, the fixture will be bound to the instance with the center of mass being positioned at the origin of the instance, however this is not always what you require and so this function also permits you to offset the x and y position where the fixture is bound by a given amount (if you do not require this then use physics_fixture_bind instead).

      +

       A fixture can only support a single offset, as adding multiple offsets to a single fixture is not supported by Box2D.

      Extended physics fixture binding exampleThe function will also return a unique "id" value for the bound fixture (not the fixture itself) which can then be used to remove ("un-bind") the physics properties from the instance using the function physics_remove_fixture. This permits you to add and remove physical properties from an instance without destroying and re-creating objects.

       Fixtures should be deleted when no longer needed as failure to do so may cause a memory leak which will slow down and eventually crash your game.

       

      Syntax:

      -

      physics_fixture_bind_ext(fixture, target, xoffset, yoffset)

      +

      physics_fixture_bind_ext(fixture, target, xoffset, yoffset)

    camera_idCamera IDCamera ID The unique camera ID value returned when you created the camera
    instance_id/object_idObject Asset or Instance IDidObject Asset or Object Instance Instance or object to have the camera target for following
    @@ -31,29 +32,29 @@

    Syntax:

    - + - + - + - +
    fixturePhysics Fixture IDPhysics Fixture ID The fixture that is to be bound
    targetInstance ID or Object AssetObject Instance or Object Asset The target instance that is to receive the fixture (can be an instance id, an object id, other, or all)
    xoffsetRealReal The offset along the x-axis
    yoffsetRealReal The offset along the y-axis

     

    Returns:

    -

    Real

    +

    Real

     

    Example:

    var fix, inst;
    @@ -74,7 +75,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    -

    physics_remove_fixture

    -

    This function removes (or "un-binds") a fixture from an instance or instances. It requires the unique "id" of the bound fixture (as returned by the function physics_fixture_bind and it will remove all the currently defined physics properties for the instance, permitting you to redefine a new fixture and bind that to the instance. In this way you can change the instances physical properties without having to destroy and re-create it.

    +

    physics_remove_fixture

    +

    This function removes (or "un-binds") a fixture from an instance or instances.

    +

    It requires the unique "id" of the bound fixture (as returned by the function physics_fixture_bind and it will remove all the currently defined physics properties for the instance, permitting you to redefine a new fixture and bind that to the instance. In this way you can change the instances physical properties without having to destroy and re-create it.

     

    Syntax:

    -

    physics_remove_fixture(id, fixture)

    +

    physics_remove_fixture(id, fixture);

    @@ -28,12 +29,12 @@

    Syntax:

    - + - + @@ -55,7 +56,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    -

    Physics

    +

    Physics

    The integration of a dedicated physics library to GameMaker means that you can now take control over all aspects of the physical behaviour of objects within your game world, particularly collisions and object interaction. The "traditional" collision system (which GameMaker defaults to) is a "reactive" system, where you check for a collision and then react to that collision with code that you place in individual objects. This is fine for simple games, but when you have a large number of objects and have to code how they all react to different situations in the game world, it quickly becomes obvious that this system is just not enough. That's when you have to turn to the GameMaker physics system.

    The physics system works in a very different way to normal collisions. It is more of a "passive" system where you define a series of properties for your objects in the game world, as well as the properties of the game world itself, before any collisions or interactions occur. These coded "rules" will then govern the way everything in your game world interacts. In this way, with a few simple code and the correct room setup, you can create very complex interactions between objects and the world which will occur and resolve without you having to code for every single possible outcome.

    There are a few things that you should note when working with the GameMaker physics world:

    @@ -23,37 +23,37 @@

    Physics

  • The physics system replaces many of the normal instance functions... for example, rather than set a speed and a direction for an instance, if it has been declared as being a fully simulated physical body, you would use a force or impulse to get it to move around in the game world, or if it is not physics enabled you will need to set the x an y positions yourself. This takes a bit of getting used to, so experiment with the physics functions and get to know how everything works before trying to integrate them into your project.
  • You should limit the number of instances that are created, as well as the number of collisions and collision groups that the physics world has to deal with. You cannot have thousands of instances, all with physical properties and collisions and expect everything to work fine due to the fact that physics requires some pretty intensive calculations, so limit yourself and optimise where possible.
  • When setting up collisions, use parents as much as possible since the collision system has a limited number of collision bits available to assign to instances for Box2D to detect collisions. For example, if you have five different wall objects, don't check for five collisions, rather, create a parent object and assign it to the five walls then have ONE collision check with the parent. The physical properties of the objects are not inherited only the collisions. In this way you can keep your game optimised and error free.
  • -
  • Try not to move instances from one point of the room to another in any way other than using the physics functions (ie: do not set the x/y coordinates manual). Although this can be done and in some circumstances it may be necessary, this is generally to be avoided due to the unpredictable results that it may have on the physics engine, especially when trying to resolve collisions.
  • +
  • Try not to move instances from one point of the room to another in any way other than using the physics functions (i.e.: do not set the x/y coordinates manually). Although this can be done and in some circumstances it may be necessary, this is generally to be avoided due to the unpredictable results that it may have on the physics engine, especially when trying to resolve collisions.
  • Care should be taken when binding fixtures, as they can be bound to objects and instances independently. This means that if you bind a fixture to (for example) "o_Wall", all instances of that object will get the fixture. If you only want to bind a fixture to one instance, then use that instance's id in the appropriate function.
  • Please be aware that due to differences in floating point precision you may find that versions of your game for different target platforms may exhibit subtly different behaviour to the standard Windows version, though each version will be self-consistent across subsequent executions.
  • To prevent instabilities in the physical simulation Box2D constrains to upper limits the amount a body may rotate and translate within a single update. The apparent limitations will vary according to the accuracy of the physical simulation in accordance with the number of updates and update speed of the physics world, and also in accordance with the physics world scaling. This means that (for example) if you have a world update speed of 60, the maximum movement speed would be 20.
  • Information on the physics functions can be found on the following pages:

     

    -

    Finally, there are a couple of special physics functions which may be useful for more advanced physics simulations. The first is for testing for possible collisions at a specific point in the room, and the second is for generating custom mass and inertia properties within an instance:

    +

    Finally, there are a couple of special physics functions which may be useful for more advanced physics simulations. The first is for performing a ray cast, the second is for testing for possible collisions at a specific point in the room and the last is for generating custom mass and inertia properties within an instance:

     

     

    -

     

    -

    phy_active

    -

    This variable controls whether or not the instance is currently "active". Setting it to false will prevent the instance from participating in the physics world, and setting it to true will have it participating again. Please note that this is not the same as deactivating the instance, as the instance is still visible on the screen and can still be changed through code, rather this function just prevents it from participating in the physics simulation

    +

    phy_active

    +

    This variable controls whether or not the instance is currently "active".

    +

    Setting it to false will prevent the instance from participating in the physics world, and setting it to true will have it participating again. Please note that this is not the same as deactivating the instance, as the instance is still visible on the screen and can still be changed through code, rather this function just prevents it from participating in the physics simulation.

     

    Syntax:

    -

    phy_active;

    +

    phy_active

     

    Returns:

    -

    (or undefined if the instance is not physics enabled)

    +

    Boolean (or undefined if the instance is not physics enabled)

     

    Example:

    -

    if (keyboard_check_pressed(ord"P"))
    +

    if (keyboard_check_pressed(ord"P"))
    {
    -     global.Pause = !global.Pause
    +     global.Pause = !global.Pause;
        with (obj_Parent)
        {
            phy_active = !global.Pause;
    @@ -43,7 +44,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    Soft Body Particles

    -

    GameMaker uses the Box2D rigid body physics library, and as such does not permit soft body physics. However the Liquid Fun extension adds particles to the physics system, which permit the creation of simulated soft-bodies using rigid body physics. Basically, you can create a shape of particles that maintain cohesion and so simulate a full body, which, due to the interaction of the particles, gives the impression of a soft body. You can also use the physics particles to simulate liquids and other particle based physics systems.

    +

    GameMaker uses the Box2D rigid body physics library, and as such does not permit soft body physics. However the Liquid Fun extension adds particles to the physics system, which permit the creation of simulated soft-bodies using rigid body physics. Basically, you can create a shape of particles that maintain cohesion and so simulate a full body, which, due to the interaction of the particles, gives the impression of a soft body. You can also use the physics particles to simulate liquids and other particle-based physics systems.

    Before you start to create your physics particles you will need to set the basic physics properties for them, as you would a fixture in the regular physics. Note though that setting these properties will affect all particles created previously as well as any new particles that you create, so you would normally only use these functions at the start of the game or level. However there are specific functions available to set the particle flags for individual particles (and groups of particles) which will change their properties like "bounciness" or "viscosity", enabling you to create different types of particle within the ranges of these global settings.

    The following functions are available for setting and getting global particle system data:

      @@ -91,7 +91,7 @@

      Soft Body Particles

      -
      © Copyright YoYo Games Ltd. 2022 All Rights Reserved
      +
      © Copyright YoYo Games Ltd. 2024 All Rights Reserved
      -

      The Physics World

      -

      Before any physical reactions can occur in GameMaker you must first define the physics world in which they are going to happen. If you do not do this, GameMaker will default to the basic collision functions, and all other physics related code or settings will be ignored. You can set up the physics world from the Room Editor, but you can also set the same properties using code with the following functions:

      +

      The Physics World

      +

      Before any physical reactions can occur in GameMaker you must first define the physics world in which they are going to happen. If you do not do this, GameMaker will default to the basic collision functions, and all other physics related code or settings will be ignored. You can set up the physics world from The Room Editor, but you can also set the same properties using code with the following functions:

      • physics_world_create
      • physics_world_gravity
      • @@ -31,11 +31,11 @@

        The Physics World

        + + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Physics/physics_test_overlap.htm b/Manual/contents/GameMaker_Language/GML_Reference/Physics/physics_test_overlap.htm index 707389218..d92a0250f 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Physics/physics_test_overlap.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Physics/physics_test_overlap.htm @@ -4,7 +4,7 @@ physics_test_overlap - + @@ -16,7 +16,8 @@

        physics_test_overlap

        -

        This function can be used to check and see if a physical body (i.e. the fixture of an instance) overlaps, or will overlap, when rotated and placed at a given position in the room. the "angle" argument is the angle of rotation that the calling instance has (or will have) at the position to be checked, and the "obj" argument can be either a single instance id, and object index or the keywords all or other.

        +

        This function can be used to check and see if the physical body of the calling instance (i.e. any of its fixtures) overlaps, or will overlap, when rotated and placed at a given position in the room.

        +

        The angle argument is the angle of rotation that the calling instance has (or will have) at the position to be checked, and the obj argument can be either a single instance ID, an object index or the keywords all or other.

         

        Syntax:

        physics_test_overlap(xpos, ypos, angle, obj);

        @@ -29,29 +30,29 @@

        Syntax:

    - + - + - + - +
    idInstance IDObject Instance The ID of the instance to remove the fixture from
    fixturePhysics Fixture IDPhysics Fixture ID The ID of the fixture that is to be removed from the instance
    xposRealReal The x position in the room to check
    yposRealReal The y position in the room to check
    angleRealReal The angle to check (of the calling instance)
    objObject Asset or Instance IDObject Asset or Object Instance The object to check for

     

    Returns:

    -

    Boolean

    +

    Boolean

     

    Example:

    if physics_test_overlap(x+20, y-35, 0, obj_Bomb)
    @@ -66,10 +67,10 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    place_empty

    You can use this function to check and see if the calling instance would collide with any other instance of an object or all instances in your game. For this to collision to resolve correctly, the instance running the code must have a valid collision mask (either for the sprite itself, or through the mask_index) and it will only register collisions with those instances that also have a valid mask.

    -

    The function is testing if there are no collisions should the calling instance be placed at a specific position, and you can supply an optional argument to refine the check to only check if a position is free of collisions with instances of the given type. Note that if no optional object ID is supplied, the check will be done against all instances within the room. The collision checking will be either precise or based on the bounding box of the instance, depending on what kind of collision mask has been selected, but for precise collisions to work correctly, all instances in the check should have precise collision masks.

    +

    The function is testing if there are no collisions should the calling instance be placed at a specific position, and you can supply an optional argument to refine the check to only check if a position is free of collisions with instances of the given type. Note that if no optional object ID is supplied, the check will be done against all instances within the room.

    +

    The collision checking will be either precise or based on the bounding box of the instance, depending on what kind of collision mask has been selected, but for precise collisions to work correctly, all instances in the check should have precise collision masks.

    -

    Note that the given x/y coordinates will be floored to the nearest integer before the check is performed.

     

    Syntax:

    place_empty(x, y, [object_id]);

    @@ -32,27 +32,27 @@

    Syntax:

    x - Real + Real The x position to check. y - Real + Real The y position to check. [object_id] - Object Asset or Object Instance or Tile Map Element ID or Array + Object Asset or Object Instance or Tile Map Element ID or Array OPTIONAL An object, instance, tile map ID, keywords all/other, or array containing these items

     

    Returns:

    -

    Boolean

    +

    Boolean

     

    Example:

    -

    if (place_empty(mouse_x, mouse_y, obj_Enemy))
    +

    if (place_empty(mouse_x, mouse_y, obj_Enemy))
    {
        x = mouse_x;
        y = mouse_y;
    @@ -68,7 +68,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    place_meeting

    -

    With this function you can check a position for a collision with another instance or all instances of an object using the collision mask of the instance that runs the code for the check. When you use this you are effectively asking GameMaker to move the instance to the new position, check for a collision, move back and tell you if a collision was found or not.

    +

    With this function you can check a position for a collision with another instance, or all instances of an object, using the collision mask of the instance that runs the code. When you use this you are effectively asking GameMaker to move the instance to the new position, check for a collision, move back and tell you if a collision was found or not.

    This will work for precise collisions, but only if both the instance and the object being checked for have precise collision masks selected. Otherwise, only bounding box collisions are applied.

    If you need to get the unique instance id of the object being collided with, you should use instance_place().

    -

    Place meeting exampleNote that the given x/y coordinates will be floored to the nearest integer before the check is performed.

    -

    See: Collisions

    +

    Place meeting exampleSee: Collisions

     

    Syntax:

    place_meeting(x, y, obj);

    @@ -34,29 +33,29 @@

    Syntax:

    x - Real + Real The x position to check. y - Real + Real The y position to check. obj - Object Asset or Object Instance or Tile Map Element ID or Array + Object Asset or Object Instance or Tile Map Element ID or Array An object, instance, tile map ID, keywords all/other, or array containing these items

     

    Returns:

    -

    Boolean

    +

    Boolean

     

    Example 1:

    -

    if (keyboard_check(vk_left))
    +

    if (keyboard_check(vk_left))
    {
    -     if (!place_meeting(x - 5, y, obj_wall))
    +     if (!place_meeting(x - 5, y, obj_wall))
        {
            x -= 5;
        }
    @@ -65,7 +64,7 @@

    Example 1:

    Example 2:

    var _tilemap = layer_tilemap_get_id("Tiles_1");

    - if (keyboard_check(vk_left))
    + if (keyboard_check(vk_left))
    {
        if !place_meeting(x - 5, y, [obj_wall, obj_bush, _tilemap])
        {
    @@ -84,7 +83,7 @@

    Example 2:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    clipboard_get_text

    -

    This function will return a string of the text contained on the clipboard. if no text is stored it will return an empty string "".

    +

    This function will return a string of the text contained on the clipboard. If no text is stored it will return an empty string "".

     

    Syntax:

    clipboard_get_text();

     

    Returns:

    -

    String

    +

    String

     

    Example:

    -

    if (clipboard_has_text())
    +

    if (clipboard_has_text())
    {
        str = clipboard_get_text();
        clipboard_set_text("");
    @@ -42,7 +42,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2022 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    + + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Variable_Functions/struct_remove_from_hash.htm b/Manual/contents/GameMaker_Language/GML_Reference/Variable_Functions/struct_remove_from_hash.htm new file mode 100644 index 000000000..89c9b97fb --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Variable_Functions/struct_remove_from_hash.htm @@ -0,0 +1,103 @@ + + + + + + struct_remove_from_hash + + + + + + + + + + +

    struct_remove_from_hash

    +

    This function removes the variable, referred to by the given hash, from the struct.

    +

    You can retrieve the hash of a variable using variable_get_hash.

    +

     

    +

    Syntax:

    +

    struct_remove_from_hash(struct, hash);

    + + + + + + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    structStructThe struct to remove the variable from
    hashRealThe hash value referring to the variable (as returned by variable_get_hash)
    +

     

    +

    Returns:

    +

    N/A

    +

     

    +

    Example 1: Basic Use

    +

    var _hash = variable_get_hash("my_first_var");
    + var _struct = 
    + {
    +     my_first_var: 398043,
    +     my_second_var: "Hello!"
    + };
    + struct_remove_from_hash(_struct, _hash);
    +
    + var _arr_names = variable_struct_get_names(_struct);
    + array_foreach(_arr_names, show_debug_message); +

    +

    The above code shows how to remove a variable from a struct using struct_remove_from_hash. First, the hash of the variable name is retrieved with a call to variable_get_hash and stored in a temporary variable _hash. Next, a struct is created that holds a variable with that name and another variable. struct_remove_from_hash is then called with the hash, which removes my_first_var from the struct. Finally, to check if the variable was removed, the struct's variable names are retrieved with a call to struct_get_names and each name is output in a debug message (using show_debug_message with array_foreach).

    +

     

    +

    Example 2: Optimised Removal of the Same Variable in Many Items

    +

    randomise();
    +
    + arr_party_stats = 
    + [
    +     {hp: 100, mp: 100},
    +     {hp: 100, mp: 100},
    +     {hp: 89, mp: 70}
    + ];
    + var _to_remove = choose("hp", "mp");
    + var _hash = variable_get_hash(_to_remove);
    +
    + var i = 0, _num = array_length(arr_party_stats);
    + repeat(_num)
    + {
    +     struct_remove_from_hash(arr_party_stats[i++], _hash);
    + } +

    +

    The above code shows how to use variable_get_hash and struct_remove_from_hash in a situation where the compiler cannot optimise automatically by calculating the hash at compile time.

    +

    First, an array of structs arr_party_stats is initialised. Each struct contains two variables: hp and mp. Then, the variable name to remove is chosen randomly at runtime with a call to choose. The compiler cannot replace the variable name with its corresponding hash value here, as it cannot know at compile time what the output of the choose function is going to be. This situation can still be optimised if you get the hash yourself at runtime with a call to variable_get_hash. The result of this function call is stored in a temporary variable _hash. Finally, the variable is removed from every struct in the array by calling struct_remove_from_hash in a repeat loop. The same hash value can be used with every call to the function, since the variable name is the same every time.

    +

     

    +

     

    + + + + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Variable_Functions/struct_set_from_hash.htm b/Manual/contents/GameMaker_Language/GML_Reference/Variable_Functions/struct_set_from_hash.htm index 104393500..9fd9ac1da 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Variable_Functions/struct_set_from_hash.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Variable_Functions/struct_set_from_hash.htm @@ -34,17 +34,17 @@

    Syntax:

    struct - Struct + Struct The struct reference to set hash - Real + Real The hash of the variable to set (as returned by variable_get_hash) val - Any + Any The value to assign to the struct variable @@ -67,10 +67,10 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    gpu_set_texrepeat_ext

    -

    This function can be used to set whether a single sampler "slot" repeats the given texture when using Shaders in GameMaker . Setting it to true will repeat the texture if the uv coordinates are out with the 0-1 range, while a setting of false will mean no repeating. The likely use case for these functions is for repeating a texture in 3D but in order for it to work and not pull images from the rest of the texture page, the sprite used will need to be marked as being on a "Separate Texture Page" in the Sprite Editor.

    -

    NOTE This setting will be over-ridden by the value set when calling the function gpu_set_texrepeat().

    +

    This function can be used to set whether a single sampler "slot" repeats the given texture when using Shaders in GameMaker. Setting it to true will repeat the texture if the uv coordinates are out with the 0-1 range, while a setting of false will mean no repeating. The likely use case for these functions is for repeating a texture in 3D but in order for it to work and not pull images from the rest of the texture page, the sprite used will need to be marked as being on a "Separate Texture Page" in the Sprite Editor.

    +

    NOTE This setting will be overridden by the value set when calling the function gpu_set_texrepeat().

     

    Syntax:

    gpu_set_texrepeat_ext(sampler_id, enable);

    - + + - + - + + - + - + + - +
    ArgumentTypeArgumentType Description
    sampler_idsampler_idShader Sampler Handle The sampler id from the shader.
    enableenableBoolean Enable or disable texture filtering (true / false)

     

    Returns:

    -

    +

    N/A

     

    Example:

    var s_tex = shader_get_sampler_index(shader_glass, "s_NoiseSampler");
    - if (gpu_get_texfilter_ext(s_tex))
    + if (gpu_get_texrepeat_ext(s_tex))
    {
    -     gpu_set_texfilter_ext(s_tex, false);
    +     gpu_set_texrepeat_ext(s_tex, false);
    }
    else
    {
    -     gpu_set_texfilter_ext(s_tex, true);
    +     gpu_set_texrepeat_ext(s_tex, true);
    }

    -

    The above code checks to see if texture filtering is on or off for a specific sampler ID (stored in a local variable) and switches it accordingly.

    +

    The above code checks to see if texture repeating is on or off for a specific sampler ID (stored in a local variable) and switches it accordingly.

     

     

     

    @@ -61,7 +64,7 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2021 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    Cameras And Display

    -

    The window is where GameMaker displays your game, and, depending on the target device, there are different things that can be done with it, like set it to fullscreen or not, for example. Cameras (and view ports), however, govern what you see within that window, and so have another series of functions dedicated to them. The following two sections deal with these two aspects of displaying your game:

    +

    The window is where GameMaker displays your game, and, depending on the target device, there are different things that can be done with it, like set it to fullscreen or not, for example. Cameras (and viewports), however, govern what you see within that window, and so have another series of functions dedicated to them. The following two sections deal with these two aspects of displaying your game:

     

    -

    However, sometimes it's not enough to get information about the game window and views only, and you really need to know things about the display itself (essentially the screen that the game window is being displayed on). The following function all give you details about the size and orientation of the display, details about the GUI layer, and information on the mouse:

    +

    Display

    +

    However, sometimes it's not enough to get information about the game window and views only, and you really need to know things about the display itself (essentially the screen that the game window is being displayed on). The following functions all give you details about the size and orientation of the display, details about the GUI layer, and information on the mouse:

    -

     

    -

    There are also a few special functions that can be used to save the display, or part of it, to an image file, either as *.png or *.gif:

    +

    Screen Saves

    +

    There are also a few special functions that can be used to save the display, or part of it, to an image file, either as *.png or *.gif

     

     

    -

     

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    -

    Cameras And Viewports

    -

    When creating rooms in GameMaker you need to set up different view ports and/or cameras to control what is displayed to the player. The view ports are, basically, little windows into your game world that enable you to show the player parts of a room, either scaled or 1:1, and as such they are essential when your game room is larger than the display size. The cameras are what define exactly what will be shown in each view port.

    -

    GameMaker permits you 8 independent view ports (numbered from 0 - 7) and an unlimited number of cameras, of which only 8 can be active at any one time - one assigned to each of the available ports - although normally you'll only need one or two view ports. Cameras can show different parts of the same room and can be activated and deactivated as well as assigned to view ports at any time, meaning that you can use cameras to draw HUD elements or to have split screen effects, or to create cut-scenes for example. Essentially, you position a camera within a room and define the "view" (area) of the room that will be visible to it, and then this view is drawn to a view port - note that the view port can be a different size to the camera view and as such you can distort and scale the camera view if it is a size other than 1:1 with the view port.

    -

     It's easy to get confused when talking about cameras, views and view ports, so to clarify: 

    +

    Cameras And Viewports

    +

    When creating rooms in GameMaker you need to set up different cameras and viewports to control what is displayed to the player.

    +

    The viewports are, basically, little windows into your game world that enable you to show the player parts of a room, either scaled or 1:1, and as such they are essential when your game room is larger than the display size. The cameras are what define exactly what will be shown in each viewport.

    +

    GameMaker permits you 8 independent viewports (numbered from 0 - 7) and an unlimited number of cameras, of which only 8 can be active at any one time - one assigned to each of the available ports - although normally you'll only need one or two viewports. Cameras can show different parts of the same room and can be activated and deactivated as well as assigned to viewports at any time, meaning that you can use cameras to draw HUD elements or to have split screen effects, or to create cutscenes for example. Essentially, you position a camera within a room and define the "view" (area) of the room that will be visible to it, and then this view is drawn to a viewport - note that the viewport can be a different size to the camera view and as such you can distort and scale the camera view if it is a size other than 1:1 with the viewport.

    +

     It's easy to get confused when talking about cameras, views and viewports, so to clarify: 

      -
    • The Camera: A point within the room that will be used to set how the room is displayed - typically with position, orientation, field of view and aspect ratio
    • +
    • The Camera: Placed at a point within the room and used to set how the room is displayed - typically with position, orientation, field of view and aspect ratio
    • The View: What the camera sees, based on the position, projection and rotation of the camera
    • -
    • The View Port: The area of the screen where the camera view will be displayed
    • +
    • The Viewport: The area of the screen where the camera view will be displayed
    -

    Camera illustrationIf you are adding cameras through The Room Editor then you can retrieve their camera ID value using the view_camera variable. You can then manipulate the view using the functions below and you can even destroy the default cameras if required, although you will need to assign a new camera to the view otherwise you will get some very unpredictable behaviour. Cameras added to a view port in the Room Editor are global in scope, meaning that they are created once when you start the game, and then as you enter each room they are set to the values set in the Room Editor, so if you destroy a default camera in any room, it will cease to exist for all rooms.

    -

    Something to note about cameras and view ports is that the total area of the bounding box for all active view ports in the first room of the game is what defines the background canvas size (or window size for macOS, Ubuntu (Linux) and Windows), and any areas that are not covered by a view port will default to drawing using the window colour as illustrated by the image below:

    -

    View Port Canvas

    -

     By default you need to select Clear Display Buffer in the Room Editor for the colour to be shown, and you can only set the colour using the function window_set_colour. If you don't use this function it will default to black.

    -

    You should take care when using multiple cameras as the draw event for all instances is called once for each visible view, so if you have three camera views active in one room, the draw event will be run three times every step (basically doing three times the work) which can be a cause for slowdown if the game is large or complex. The view_current variable can be used to help limit these draw calls however by checking which view is being drawn and only drawing items that are specific to a given view port. Also be careful when creating your own cameras, as if you create one in a room and don't remove it using the camera_destroy function you can get a memory leak.

    -

    You can find an overview of all the available functions from the different sections below, but it's worth noting that some of these functions require the setting up and use of different matrices, so you may want to look at the section of the manual for the Matrix Functions. Also note that there are a few room functions that can be used to get and set cameras and view port values in rooms other than the current one (see the section on Rooms).

    +

    Camera illustrationIf you are adding cameras through The Room Editor then you can retrieve their camera ID value using the view_camera variable. You can then manipulate the view using the functions below and you can even destroy the default cameras if required, although you will need to assign a new camera to the view otherwise you will get some very unpredictable behaviour. Cameras added to a viewport in the Room Editor are global in scope, meaning that they are created once when you start the game, and then as you enter each room they are set to the values set in the Room Editor, so if you destroy a default camera in any room, it will cease to exist for all rooms.

    +

    Something to note about cameras and viewports is that the total area of the bounding box for all active viewports in the first room of the game is what defines the background canvas size (or window size for macOS, Ubuntu (Linux) and Windows), and any areas that are not covered by a viewport will default to drawing using the window colour as illustrated by the image below:

    +

    View Port Canvas

    +

     By default you need to select Clear Display Buffer in the Room Editor for the colour to be shown, and you can only set the colour using the function window_set_colour. The application surface also cannot be drawn, so either the application surface itself or automatic drawing needs to be disabled. If you don't use window_set_colour the colour will default to black.

    +

    You should take care when using multiple cameras as the Draw event for all instances is called once for each visible view, so if you have three camera views active in one room, the Draw event will be run three times every step (basically doing three times the work) which can be a cause for slowdown if the game is large or complex. The view_current variable can be used to help limit these draw calls, however, by checking which view is being drawn and only drawing items that are specific to a given viewport. Also be careful when creating your own cameras, as if you create one in a room and don't remove it using the camera_destroy function you can get a memory leak.

    +

    You can find an overview of all the available functions from the different sections below, but it's worth noting that some of these functions require the setting up and use of different matrices, so you may want to look at the section of the manual for the Matrix Functions. Also note that there are a few room functions that can be used to get and set cameras and viewport values in rooms other than the current one (see the section on Rooms).

    Function Reference

    Create & Destroy

      @@ -39,66 +41,71 @@

      Create & Destroy

    Camera Information

    Views

    -

    When working with cameras, you have to assign them to a viewport for them to be "active" and display anything. These view ports are numbered from 0 to 7 and can be changed and positioned using different variable arrays and functions, and you can also check to see which one is currently drawing or which camera is currently attached to it.

    +

    When working with cameras, you have to assign them to a viewport for them to be "active" and display anything. These viewports are numbered from 0 to 7 and can be changed and positioned using different variable arrays and functions, and you can also check to see which one is currently drawing or which camera is currently attached to it.

    The following global scope built-in variables are available:

    The following functions are available: 

    +

    Frustum Culling

    +

     

     

    @@ -109,7 +116,7 @@

    Views

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    - - \ No newline at end of file + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/GPU_Control.htm b/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/GPU_Control.htm index 5dad8226b..9ee1cbee9 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/GPU_Control.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/GPU_Control.htm @@ -73,13 +73,18 @@

    GPU Stack

  • gpu_get_state
  • gpu_set_state
  • +

    Frustum Culling

    +

     

     

    + + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/gpu_set_state.htm b/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/gpu_set_state.htm index 2eeb78e7f..2dd9a7ca0 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/gpu_set_state.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Drawing/GPU_Control/gpu_set_state.htm @@ -4,7 +4,7 @@ gpu_set_state - + @@ -22,18 +22,20 @@

    Syntax:

    - + + - + - + + - +
    ArgumentTypeArgumentType Description
    ds_mapds_mapDS Map The GPU state to set as a DS Map.

     

    Returns:

    -

    +

    N/A

     

    Example:

    gpu_set_state(gpu_map);

    @@ -45,10 +47,10 @@

    Example:

    -
    © Copyright YoYo Games Ltd. 2021 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    Compiling

    -

    Compiling your game can mean one of two things: compiling it for testing, or compiling it to create a final executable package for a specific target platform. This page aims to explain both of those options in detail.

    +

    Compiling your game can mean one of two things: compiling it for testing, or compiling it to create a final executable package for a specific target platform. This page aims to explain both of those options in detail and also explains compiler optimisations.

    +
    +

    Mini TOC (placeholder)

    +
      +
    1. Heading
    2. +
    +

    Compiling for Testing

    Compiling your game for testing can be done by simply pressing the Play button Play Icon at the top of the IDE, which will launch the game for testing using the specified target. You can also run the game in Debug Mode by testing using the Debug button Debug Icon. This will run the game, but also open up the Debug Window, where you can monitor how your game performs and see any issues (see the section on Debugging for more information).

    Target Settings

    -

    By default GameMaker will run and debug using the built-in Virtual Machine (VM), which is more or less the same as running on the desktop OS being used. However, GameMaker is a cross-platform engine and you can test, debug and compile executable packages of your projects on a number of different target platforms (the exact platforms available will depend on the details of your licence). To change the current target platform you can click Icon LMB on the Targets button Target Manager Icon to open the Targets Window, which will look something like this (exact details will vary based on your licence type):

    +

    By default GameMaker will run and debug using the built-in Virtual Machine (VM), which is more or less the same as running on the desktop OS being used. However, GameMaker is a cross-platform engine and you can test, debug and compile executable packages of your projects on a number of different target platforms (the exact platforms available will depend on the details of your licence). To change the current target platform you can click  on the Targets button Target Manager Icon to open the Targets Window, which will look something like this (exact details will vary based on your licence type):

    Target ListAt the top, beside the Targets button, you have the current settings which tells you the platform and the specific settings actually being used, and then the rest of the window is taken up with the details and options for all the available targets which you can select to use instead. Each section of this window is explained below: 

      @@ -28,7 +34,7 @@

      Target Settings

      Platform

      This section lists all the available target platforms, which depends on the licence you have.

      -

      To select a target, simply click Icon LMB on it; this will then update the rest of the options windows to show different details depending on the platform selected. If you don't have the required module installed in the current runtime then GameMaker will ask you to download and install it when you click Icon LMB the target: 

      +

      To select a target, simply click  on it; this will then update the rest of the options windows to show different details depending on the platform selected. If you don't have the required module installed in the current runtime then GameMaker will ask you to download and install it when you click  the target: 

      If you select "No" here then the target will be reset to the previous target you had selected.

      If you select "Yes" then the modules for the target will be downloaded and installed.

      @@ -49,7 +55,7 @@

      Target Settings

      Device

      -

      Certain platforms (like iOS or Android) permit you to associate one or more devices with GameMaker so that games can selectively compile to them. Initially, the device list will be empty and you need to click Icon LMB on the Pencil icon Pencil Icon  to open the Device Editor:

      +

      Certain platforms (like iOS or Android) permit you to associate one or more devices with GameMaker so that games can selectively compile to them. Initially, the device list will be empty and you need to click  on the Pencil icon Pencil Icon  to open the Device Editor:

      The Device EditorHere you can add new devices as well as have GameMaker test for a connection to any device(s) that may be connected. The exact contents of this window will depend on the platform specifics (see the section on the Device Manager for exact details for any given platform). Once a device has been found or added, it will then be shown in this window, like in this example image for Android:

      Add An Android DeviceThe exact procedure and requirements for setting up devices and troubleshooting issues can be found in the appropriate section of the GameMaker Knowledge Base.

      @@ -73,9 +79,8 @@

      You Should Know

    • The maximum size of the final game package is 4GB (not including streamed soundsdynamic textures and Included Files). See tips for reducing the final game size.
    • Before doing a final build of your project for release, you should always clear the Asset Compiler Cache (using the "broom" icon Clean Cache Icon at the top of the IDE). GameMaker will cache many of your game files to keep compilation speed to a minimum and these can sometimes get corrupted, so it is safer to clear that cache before doing a release build.
    -

    Compiler Optimisations

    -

    You can optimise how the compiler compiles (parts of) your game's code by providing it optimisations with the "optimise" (or "optimize") pragma. These may apply to multiple targets or be specific to some build targets. Using them in the right places in your code can lead to great performance improvements in your game.

    -

    See gml_pragma for the full list of optimisations you can use and how to use them.

    +

    Compiler Optimisations

    +

    The compiler performs optimisations on your game's code. See Compiler Optimisations.

    How Different Targets Build

    Each target option saves to a platform specific format, listed below:

      @@ -117,7 +122,7 @@

      Distributing your Game

      Next: Debugging
    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    Layer Types And Properties

    -

    Everything that goes into the room you create in The Room Editor is placed on a layer. Layers can be added, removed, and sorted from the Layer Editor, and come in a variety of different types, each with their own set of options and way of working. You aren't limited to the number of each type of layer, and can have multiple tile layers, or path layers, or instance layers, etc. Each type of layer has its own properties window where you can set different things depending on the layer type. You can also toggle the layer's visibility, with invisible layers not being processed at runtime (but you can make them visible again at any time using the function layer_set_visible).

    -

    Room LayersThe image above shows the Layer Editor, with the current layers listed at the top, and the different buttons for creating layers at the bottom. You can rename any layer from this editor by doing a slow double click on the name (note that you cannot use anything except letters numbers and the underbar _ character for names) and you can also switch its visibility on or off by clicking the eye icon Eye Icon. If the room has inherited layers from a parent room, you can toggle the inheritance from the button at the bottom, but note that this will affect all layers (see Room Inheritance for more information on inheritance). You can also use Shift Icon or Control Icon / CMD Icon and left click LMB Icon on multiple layers to select them for duplication or deletion (these options are also available from the right mouse RMB Icon menu).

    +

    Everything that goes into the room you create in The Room Editor is placed on a layer. Layers can be added, removed, and sorted from the Layer Editor, and come in a variety of different types, each with their own set of options and way of working.

    +

    You aren't limited to the number of each type of layer, and can have multiple tile layers, or path layers, or instance layers, etc. Each type of layer has its own properties where you can set different things depending on the layer type.

    +

    You can also toggle the layer's visibility, with invisible layers not being processed at runtime (but you can make them visible again at any time using the function layer_set_visible).

    +

    Room LayersThe image above shows the Layer Editor, with the current layers listed at the top, and the different buttons for creating layers at the bottom.

    +

    You can rename any layer from this editor by doing a slow double click on the name (note that you cannot use anything except letters numbers and the underbar _ character for names) and you can also switch its visibility on or off by clicking the eye icon Eye Icon. If the room has inherited layers from a parent room, you can toggle the inheritance from the button at the bottom, but note that this will affect all layers (see Room Inheritance for more information on inheritance). You can also use Shift Icon or Control Icon / CMD Icon and left click LMB Icon on multiple layers to select them for duplication or deletion (these options are also available from the right mouse RMB Icon menu).

    To help with ordering your layers and keeping them tidy, you can create groups of layers in a layer folder by clicking the folder icon Folder Icon. You can also delete one or more selected layers by clicking the delete button Delete Layer Icon. All layers will have a depth value, which defines where in the draw order that layer will be placed when its contents are rendered in the room. Layers are drawn from the highest depth to the lowest, so a layer at a depth of -100 will be drawn over a layer with a depth of 200.

    If you right-click RMB Icon on any layer you get the layer menu:

    Room Layer MenuHere you can open the layer properties window for the selected layer, delete the layer, rename the layer, or add a sub layer. If you choose to add a sub layer, the new layer will be created under it, tabbed to the right. You can then choose to have the sub layer inherit its properties from the parent layer, and also set whether it should inherit the visibility from the parent layer.

    Note that you can drag layers up or down in the window to re-order them, and you can select and move multiple layers too using either Shift Icon + LMB Icon to select from one layer to another (including all those in between) or Control Icon / CMD Icon + LMB Icon to select layers one at a time. If you place the layers on top of a layer folder, they will be moved and set as sub-layers of the folder you dropped them on to. You can also lock layers so that they cannot be edited by mistake using the lock button Padlock Icon.

    -

     In the actual editor window where you place the different assets on their layers, you can hold down "P" + click anywhere to instantly select an asset and skip to the layer that it has been placed on.

    +

     In the room canvas where you place the different assets on their layers, you can hold down "P" + click anywhere to instantly select an asset and skip to the layer that it has been placed on.

    Below you can find an overview of each of the available layer types as well as the editable properties for that layer:

    Background Layer IconBackgrounds

    @@ -124,10 +127,16 @@

    Layer Types And PropertiesAsset Layer IconAssets

    You can add a new asset layer by clicking on the Asset Layer Icon button. This will add the new layer, and then open up the asset layer properties window:

    -

    Room Layer Asset propertiesAn asset layer contains graphical assets (sprites, sequences and particle systems) that are placed into the room independently of instances, and you can place them by either dragging them in from The Asset Browser or by selecting the one you want in the Asset Browser and then using Alt Icon + LMB Icon to "paint" them. Sprite assets are similar to tiles, only they can be fully animated - if the sprite used has sub-images they will be shown - without the restrictions that are in place for tiles, ie: they aren't forced to a grid and animations can be any length and speed. Sequences are "collections" of sprites, sounds and instances that will play when the room is entered. Particle systems contain emitters that "emit" particles according to predefined formulas which results in an animation.

    +

    Room Layer Asset propertiesAn asset layer contains graphical assets (sprites, sequences, text and particle systems) that are placed into the room independently of instances, and you can place them by either dragging them in from The Asset Browser or by selecting the one you want in the Asset Browser and then using Alt Icon + LMB Icon to "paint" them.

    +

    Sprite assets are similar to tiles, only they can be fully animated - if the sprite used has sub-images they will be shown - without the restrictions that are in place for tiles, ie: they aren't forced to a grid and animations can be any length and speed.

    +

    You can drag Sequences into an asset layer, which are animated "collections" of sprites, sounds and instances that will play when the room is entered. You can also drag Particle Systems, which contain emitters that "emit" particles according to predefined formulas which results in an animation. You can place text by dragging a Font asset into the room, or pressing the  icon in the Layer Toolbox at the top and then clicking in the room where you want to place the text.

    While placing assets on the asset layer they will snap to the grid snap values set at the top of the Room Editor for the grid, but if you want to place them freehand, simply switch off the grid or use the keys Control Icon / CMD Icon and the left mouse button LMB Icon. While those keys are held down, you will be free to place the asset anywhere, without it snapping to the grid resolution.

    Once you place an asset in the room, you have a certain amount of control over how it looks by double clicking LMB Icon on it to open the asset properties window:

    -

    Room Asset propertiesFrom here you can give the asset a unique name, set whether it is to inherit from the parent room, or change the sprite, sequence or particle system that you want it to display. For sequences, you can set the animation speed and the initial playhead frame, as well as the colour to blend with it (white by default) and the position in the room. You can change the characteristics of sprite assets too, setting a colour to blend it with (white by default), or rotating and flipping it. You can also scale sprites along either or both the axis, and set their position within the room. If the sprite has sub-images, you can choose the animation speed as well as set the initial frame to be shown. Finally, for particle systems, you can also set the blend colour and the rotation of the entire particle system.

    +

    Room Asset propertiesThese properties will also appear in The Inspector window, placed on the left by default.

    +

    From here you can give the placed asset ("element") a unique name, set whether it is to inherit from the parent room, or change the sprite, sequence or particle system that you want it to display.

    +

    For sequences, you can set the animation speed and the initial playhead frame, as well as the colour to blend with it (white by default) and the position in the room. You can change the characteristics of sprite assets too, setting a colour to blend it with (white by default), or rotating and flipping it. You can also scale sprites along either or both the axis, and set their position within the room. If the sprite has sub-images, you can choose the animation speed as well as set the initial frame to be shown.

    +

    For text, you can change the multi-line string that appears, its colour, rotation, scale, and position, same as a sequence or sprite graphic. Text-specific options can also be edited, such as the origin (which acts as an offset), frame size (only used when wrapping is enabled), wrapping, alignment, character spacing and line spacing. This text functionality is similar to Text in Sequences, refer to that page for more information on each parameter.

    +

    Finally, for particle systems, you can also set the blend colour and the rotation of the entire particle system.

    It is worth noting that each asset on the layer is automatically flagged for exporting when the game is made. However, especially when working with inheritance, it may be that you don't want specific assets to be added to the room in the final game. If that is the case, then simply un-checking the "Export" checkbox to the left of the asset in the layer properties list will prevent it from being exported as part of the executable. It is important to note, however, that if you have any code that references that asset, then the game will not run correctly, so use this feature with care.

    Filter/Effect

    @@ -152,7 +161,7 @@

    Filter/Effects

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved

    The Room Editor

    -

    The Room Editor is where you create your game rooms. Every game requires at least one room to run, and in the room you can place instances, sprites, tiles, paths, backgrounds, sequences and particle systems. Each of these different assets can be placed on their own unique layer which can then be ordered however you wish in the Layer Editor. Due to the complexity of the Room Editor, we'll give you first a brief overview of the most important features, and then you can find more in-depth details from the section links listed below.

    +

    The Room Editor is where you create your game rooms. Every game requires at least one room to run, and in the room you can place instances, sprites, tiles, paths, backgrounds, sequences, text and particle systems. Each of these different assets can be placed on their own unique layer which can then be ordered however you wish in the Layer Editor. Due to the complexity of the Room Editor, we'll give you first a brief overview of the most important features, and then you can find more in-depth details from the section links listed below.

    When you create a room asset, you can right click RMB Icon on it in The Asset Browser to open the context menu, which will permit you to create child rooms (see the page on Room Inheritance for more information), open up the room for editing, add a new asset group to better organise the rooms, rename the room or delete it. Note that to change the room order and/or inheritance you need to use The Room Manager, which you can open using the menu in the top right of the Asset Browser.

    The Room Editor is itself a workspace and as such you can click LMB Icon on the tab and drag it off of the main window into a new window of its own - perhaps in another display, for example. You can also place it back into the main window by dragging the tab to the top of the IDE and releasing the mouse button.

    The user interface for the Room Editor is simple to navigate and split in various discrete sections. Those parts of the editor that are docked - The Inspector that shows the room or layer properties and the Layer Editor - can also be removed from the dock by simply dragging them out into the workspace, and they can be added back into the docks again by dragging them to the sides or the bottom of the workspace.

    @@ -52,7 +52,7 @@

    The Room Editor

    Asset Layer Icon Assets - This layer is for visual assets to be added to the room, like spritessequences and particles. + This layer is for visual assets to be added to the room, like spritessequences, text and particles. @@ -84,7 +84,7 @@

    The Room Editor

    Layer Toolbox

    -

    Certain layer types will have additional tools added to the top of the IDE in the Layer Toolbox (for example, tile layers or path layers). The exact tools will change based on the layer type currently being edited, and so are explained on the Layer Types And Properties page.

    +

    Certain layer types will have additional tools added to the top of the IDE in the Layer Toolbox (for example, tile layers, asset layers or path layers). The exact tools will change based on the layer type currently being edited, and so are explained on the Layer Types And Properties page.

     

    Room Toolbox

    @@ -154,7 +154,7 @@

    Room Menu

    -
    © Copyright YoYo Games Ltd. 2023 All Rights Reserved
    +
    © Copyright YoYo Games Ltd. 2024 All Rights Reserved
    +

    Text Elements

    +

    This page lists functions provided for creating and modifying text elements in room layers. In The Room Editor, these are placed in an Asset Layer.

    +

    Text Element Functions

    + +

     

    +

    Text Element Property Setters

    +

     

    +

     

    +

    Text Element Property Getters

    +

     

    +

     

    +

     

    +

     

    + + + + + \ No newline at end of file diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_create.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_create.htm new file mode 100644 index 000000000..7ea37c42b --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_create.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_create + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_destroy.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_destroy.htm new file mode 100644 index 000000000..6257bed82 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_destroy.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_destroy + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_exists.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_exists.htm new file mode 100644 index 000000000..b1ff1e854 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_exists.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_exists + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_id.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_id.htm new file mode 100644 index 000000000..af9fbf2e8 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_id.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_get_id + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/assets/scripts/gml.js b/Manual/contents/assets/scripts/gml.js index 403e5dbb1..894bc593c 100644 --- a/Manual/contents/assets/scripts/gml.js +++ b/Manual/contents/assets/scripts/gml.js @@ -202,6 +202,10 @@ export default function(hljs) { "dbg_section_exists", "gamepad_enumerate", "physics_raycast", + "layer_text_get_id", + "layer_text_create", + "layer_text_destroy", + "layer_text_exists", "abs", "achievement_available", "achievement_event", From 6d2aa18d57714538d2062ae631081589317873bc Mon Sep 17 00:00:00 2001 From: gurpreetsinghmatharoo Date: Sat, 18 May 2024 21:27:24 +0530 Subject: [PATCH 040/134] docs(feature): Created placeholder pages for text element setters --- .../Rooms/Text_Functions/Text_Elements.htm | 25 ++++++- .../Rooms/Text_Functions/layer_text_alpha.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_angle.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_blend.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_charspacing.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_font.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_frameh.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_framew.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_halign.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_linespacing.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_text.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_valign.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_wrap.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_x.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_xorigin.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_xscale.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_y.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_yorigin.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_yscale.htm | 69 +++++++++++++++++++ Manual/contents/assets/scripts/gml.js | 18 +++++ 20 files changed, 1283 insertions(+), 2 deletions(-) create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_alpha.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_angle.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_blend.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_charspacing.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_font.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_frameh.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_framew.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_halign.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_linespacing.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_text.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_valign.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_wrap.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_x.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xorigin.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xscale.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_y.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yorigin.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yscale.htm diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm index 0800652c1..46ea84022 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm @@ -25,10 +25,31 @@

    Text Element Functions

     

    Text Element Property Setters

    -

     

    +

     

    Text Element Property Getters

    -

     

    +
      +
    •  
    • +

     

     

     

    diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_alpha.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_alpha.htm new file mode 100644 index 000000000..06162aaec --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_alpha.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_alpha + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_angle.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_angle.htm new file mode 100644 index 000000000..59426e5b8 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_angle.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_angle + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_blend.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_blend.htm new file mode 100644 index 000000000..d5a31b380 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_blend.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_blend + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_charspacing.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_charspacing.htm new file mode 100644 index 000000000..e259cbbb8 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_charspacing.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_charspacing + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_font.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_font.htm new file mode 100644 index 000000000..50779d359 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_font.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_font + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_frameh.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_frameh.htm new file mode 100644 index 000000000..ce975a6a7 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_frameh.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_frameh + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_framew.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_framew.htm new file mode 100644 index 000000000..88f29fe0f --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_framew.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_framew + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_halign.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_halign.htm new file mode 100644 index 000000000..0d1c4ba63 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_halign.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_halign + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_linespacing.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_linespacing.htm new file mode 100644 index 000000000..02ddbfdd6 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_linespacing.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_linespacing + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_text.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_text.htm new file mode 100644 index 000000000..31bf3011e --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_text.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_text + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_valign.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_valign.htm new file mode 100644 index 000000000..f57bddf76 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_valign.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_valign + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_wrap.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_wrap.htm new file mode 100644 index 000000000..89a776ca4 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_wrap.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_wrap + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_x.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_x.htm new file mode 100644 index 000000000..ced130260 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_x.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_x + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xorigin.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xorigin.htm new file mode 100644 index 000000000..8ded0d961 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xorigin.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_xorigin + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xscale.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xscale.htm new file mode 100644 index 000000000..2724160dd --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_xscale.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_xscale + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_y.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_y.htm new file mode 100644 index 000000000..1df610954 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_y.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_y + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yorigin.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yorigin.htm new file mode 100644 index 000000000..602dfb9c2 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yorigin.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_yorigin + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yscale.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yscale.htm new file mode 100644 index 000000000..1dfc20a45 --- /dev/null +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_yscale.htm @@ -0,0 +1,69 @@ + + + + + + layer_text_yscale + + + + + + + + + + +

    INSERT_TITLE

    +

    Keyword Description Goes Here.

    +

    Additional Information Goes Here.

    +

     

    +

    Syntax:

    +

    keyword_name(arguments);

    + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    argument_name<Type_ Variable>Argument Description Goes Here
    +

     

    +

    Returns:

    +

    <Type_ Variable> (Optional explanation)

    +

     

    +

    Example:

    +

    code_example () {
    +     
    + }

    +

    Explain The Code Example Here

    +

     

    +

     

    + + + + + diff --git a/Manual/contents/assets/scripts/gml.js b/Manual/contents/assets/scripts/gml.js index 894bc593c..5426d1253 100644 --- a/Manual/contents/assets/scripts/gml.js +++ b/Manual/contents/assets/scripts/gml.js @@ -206,6 +206,24 @@ export default function(hljs) { "layer_text_create", "layer_text_destroy", "layer_text_exists", + "layer_text_x", + "layer_text_y", + "layer_text_angle", + "layer_text_xscale", + "layer_text_yscale", + "layer_text_blend", + "layer_text_alpha", + "layer_text_font", + "layer_text_xorigin", + "layer_text_yorigin", + "layer_text_text", + "layer_text_halign", + "layer_text_valign", + "layer_text_charspacing", + "layer_text_linespacing", + "layer_text_framew", + "layer_text_frameh", + "layer_text_wrap", "abs", "achievement_available", "achievement_event", From 90eac7b03c8e8f3c989414da22b840a3ed376256 Mon Sep 17 00:00:00 2001 From: gurpreetsinghmatharoo Date: Sat, 18 May 2024 21:44:29 +0530 Subject: [PATCH 041/134] docs(feature): Created placeholder pages for text element getter functions --- .../Rooms/Text_Functions/Text_Elements.htm | 20 +++++- .../Text_Functions/layer_text_get_alpha.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_angle.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_blend.htm | 69 +++++++++++++++++++ .../layer_text_get_charspacing.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_font.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_frameh.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_framew.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_halign.htm | 69 +++++++++++++++++++ .../layer_text_get_linespacing.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_text.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_valign.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_wrap.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_get_x.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_xorigin.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_xscale.htm | 69 +++++++++++++++++++ .../Rooms/Text_Functions/layer_text_get_y.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_yorigin.htm | 69 +++++++++++++++++++ .../Text_Functions/layer_text_get_yscale.htm | 69 +++++++++++++++++++ Manual/contents/assets/scripts/gml.js | 18 +++++ 20 files changed, 1278 insertions(+), 2 deletions(-) create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_alpha.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_angle.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_blend.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_charspacing.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_font.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_frameh.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_framew.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_halign.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_linespacing.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_text.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_valign.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_wrap.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_x.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_xorigin.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_xscale.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_y.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_yorigin.htm create mode 100644 Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/layer_text_get_yscale.htm diff --git a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm index 46ea84022..4b46acc8f 100644 --- a/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm +++ b/Manual/contents/GameMaker_Language/GML_Reference/Asset_Management/Rooms/Text_Functions/Text_Elements.htm @@ -48,11 +48,27 @@

    Text Element Property Setters

     

    Text Element Property Getters

     

     

    -

     

    -

    Sequence Layers

    +

    Sequence Elements

    In this section we have the functions that are used for adding, removing and editing how Sequences behave in a game room in relation to the layer they are on. It should be noted that sequences are similar to objects, in that when one is created on a layer in a room, it is considered an instance of the main sequence object from the Asset Browser. So, when you add a sequence to a layer in a room, you are creating an instance of the base sequence object, and this sequence instance is added as an element within a room layer. The sequence instance is what controls things like playback speed and direction, and will itself contain another sequence data struct which is what contains the actual sequence track data. This is important, as the functions listed below will reference the sequence element ID (the ID of the sequence on the layer) as well as the sequence instance ID (the actual ID of the sequence that is being referenced by the element) and the sequence data struct (which contains all the sequence data).

    Below is a list of all the functions that can be used for creating new sequence instances or editing existing ones: