Show Posts

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

Topics - WetWookie

Pages: [1]
Game Design / Experimental Engine Change - Easy Mode
« on: September 29, 2017, 09:56:20 PM »
I've been toying with the idea of a sort of universal beginner mode that a maker could just slap into pretty much any game and have a functioning meaningful easy mode for players new to fangames.

There are two aspects to easy mode; ledge forgiveness and player killer forgiveness.

Ledge forgiveness allows the player to retain both jumps for a few frames after walking off a ledge. For example if the player has 7 frames of ledge forgiveness then they can walk off a block and if they jump in the next 7 frames it will count as jump #1 after which they can still double jump.

Player killer forgiveness means that the player will only die if they are in contact with a player killer for a few frames in a row. For example if the player has 3 frames for pk forgiveness then they will die if they touch a player killer for four frames in a row.

I have a demo for you all to play around with and give feedback on whether you think these are valuable features.


Learn how I did the thing.
Add the thing to a medley.
Cheat past a hard screen.
Have fun.

Game Design / Seamless blocks
« on: February 08, 2017, 01:41:30 PM »

Object Code

Create the above object, give it a sprite of the texture you want and stick it off screen on the room you want skinned. I use textures twice as big as the room and scale it at runtime so it looks nice in full screen. Play around with the scaling in the create event if you're going to use a different size texture. There's also code in the create event to skin your spikes. You can remove it if you want or if you decide to keep it in your sprite image should be a 4 frame animation in order Spike Up, Spike Right, Spike Down, Spike Left.

Notes and limitations...
As the object is coded now it creates the surface once and redraws it so if you have moving blocks you'll need to modify it to draw up the surface every time.
The object assumes that blocks will be placed on a 16 (or 32) pixel grid placing adjacent blocks offset by something else, like 8 pixels, will result in the outline being weird.
Also, gamemaker has rounding errors if you resize blocks more than once so if your outline sticks out into empty space it means the block has a resizing error and should be deleted and replaced or resized back down to 32x32 and then resized

Put this in the End Step Event of the object being shot
Code: [Select]
with objBullet
    if collision_line(x,y,xprevious,yprevious,,true,false)
       //x=xprevious; //Optional move bullet back
       with other

Game Design / Smart Oscillating Objects
« on: November 04, 2016, 11:28:41 AM »
As a thank you to TJ for hosting his Distances, Triangles, and Trig: For Game Makers class I've decided to release something a little special.

I present to you the Smart Oscillating Object (in this case packaged as an circular saw). To use the SOO you give it minimum and maximum x and y values, a speed for each axis and then place the object in the room anywhere between. The object will automatically calculate its speed, position and direction to continue its movement in each axis as an independent sine wave by calculating the inverse sine of the distance between the center of the two extremes and the location you placed the object in the room.

In the creation code of the object you'll set the following variables
MinX = The minimum x value
MaxX = The maximum x value
MinY = The minimum y value
MaxY = The maximum y value
TimeX = The number of room steps to travel from MinX to MaxX (ie TimeX = room_speed * 2; //Travel time of 2 seconds)
TimeY = The number of room steps to travel from MinY to MaxY (ie TimeY = room_speed * 2; //Travel time of 2 seconds)
XDir = The direction to start moving in the x axis (XDir = 1; will make the object move to the right to start. XDir = -1; will make the object move to the left to start.)
YDir = The direction to start moving in the x axis (YDir = 1; will make the object move down to start. XDir = -1; will make the object move up to start.)
MoveTypeX = The type of movement in the X direction. (Setting the value to Smooth makes the object move in a sine wave and Linear makes the object move at a constant speed);
MoveTypeY = The type of movement in the Y direction. (Setting the value to Smooth makes the object move in a sine wave and Linear makes the object move at a constant speed);

In this example the two saws have been stacked on top of each other at position (480, 256)
One saw has the following creation code
(click to show/hide)
The second saw's creation code is the same except that the XDir is set to 1 to make it start moving to the right. The movement in the X axis is being done at a constant speed while the movement in the Y axis is being done in a smooth sine wave automatically calculated based on the starting position's relationship to the min and max y values.

All four of these saws share the exact same creation code but because they were each placed in one of the four corners the sine waves for each were calculated based on their individual starting position.

(click to show/hide)

Game Design / Fangame Resource Library (Sprites, Tiles, Objects, etc)
« on: September 06, 2016, 10:58:58 AM »
  • (click to show/hide)
  • (click to show/hide)
  • (click to show/hide)

Game Design / Required reading for new developers
« on: March 23, 2016, 11:55:48 AM »
I keep seeing new developers run into the same issues over and over so here's a list of common issues and their fixes.

If your room seems to bounce when you press reset (or it does funny things with screen capture or streaming) it's because your rooms (or views) are a different size than your 'system' screens (rMenu, rInit, etc...). Make sure the rooms and views are all the same size (800 x 608 or 800 x 600 typically).

If you made a large room and put a camera object in to make the view follow the player and the room gets stretched out of shape it's because the room's view properties are not set properly. Your engine should have come with a template room. If you duplicate that to create your new room all of the settings for the view should be set properly. Otherwise you'll have to set the rooms view properties manually each time you create a new large room.

If you use a portal room as your menu screen where the player jumps into a new game portal or a load game portal it is best to label the portals clearly and put the new game portal farther away (or past) the load game portal to prevent players from accidentally starting a new game and overwriting their existing save file.

Some PCs will crash your game if you play three or more copies of the same sound at the same time. While the player can do some things to fix this issue on their end it's best to avoid playing multiple copies of a sound on top of each other.

If you have secret rooms you need to provide the player with a way of exiting the room without completing it with either a warp or by pressing escape. This prevents the player from getting stuck in an optional room that they cannot (or do not want to) complete.

Projectiles need to be seen easily. Don't use dark projectiles on a dark background (or light on light) and they should have a depth that places them on top of blocks.

Particle effects are nice but can cause issues if not managed properly. If you have an object in a room that uses the particle system you must destroy those particle systems, types and emitters when the object is destroyed to avoid having a memory leak. Additionally you MUST also destroy them in the objects Room End event (or call instance_destroy() in the Room End event). Studio for some reason does not run each object's destroy event when a room ends so you will need to take care of it for objects that use particles yourself.

When choosing aesthetics it is better to be subtle than flashy. Scrolling graphics, heavy particle usage and clashing colors will cause annoyance and eye strains.

Try to get all of your music near the same volume. You can use a free audio editing program like Audacity to adjust the sound levels.

Did I miss anything?

General Discussion / GamMaker Studio Pro in Humble Weekly Bundle for $6
« on: September 17, 2015, 06:53:47 PM »
or $12 to include the Android module


Go nuts people

Game Design / WetWookie's Avoidance Scripts
« on: June 23, 2015, 07:44:46 PM »
I did the thing so you don't have to

All of the draw scripts allow you to 'tag' the objects you create. You can then submit those tags to the manipulation scripts so they only affect the objects you tagged with the same value. For example you can draw a star of cherries with tag of 1 and a circle of cherries with a tag of 2 and then explode all cherries with a tag of 1 while leaving the cherries with a tag of 2 untouched. Also I recommend using objects with the sprite origin set to the center. If you don't things will look weird when you start changing your image_angle.

Drawing Shapes

Draws a line of objects

ex. draw_object_line(room_width/2-200, room_height/2, room_width/2+200, room_height/2, 10, 0, cherry,1);
(click to show/hide)

draw_object_circle(CenterX, Centery, Radius, AngleOffset, NumberOfObjects,ObjOrientation,ObjectType,tag);
Draws a circle of objects

ex. draw_object_circle(room_width/2, room_height/2,50,0,10,1,cherry,0);
(click to show/hide)

Draws a star of objects

ex. draw_object_star(room_width/2, room_height/2,75,5,70,0,7,0,cherry,1);
(click to show/hide)

draw_object_square(CenterX, CenterY ,SideLength,ObjectsPerSide,AngleOffset,ObjectOrientation,ObjectType,tag);
Draws a square

draw_object_square(room_width/2-150, room_height/2 ,250,10,0,0,cherry,0);
draw_object_square(room_width/2+150, room_height/2 ,200,10,0,0,cherry,1);
draw_object_square(room_width/2+150, room_height/2 ,200,10,45,0,cherry,1);
(click to show/hide)

Object Manipulation

explode_objects(CenterX, CenterY, ObjectSpeed, ObjectOrientation,ObjectType,tag);
Causes all matching objects to move away from CenterX,CenterY
ex. explode_objects(room_width/2,room_height/2,4,1,cherry,1);
(click to show/hide)

Causes all matching objects to move towards CenterX,CenterY
ex. implode_objects(room_width/2,room_height/2,4,1,cherry,1);
(click to show/hide)

group_move_objects(TargetX, TargetY, ObjectSpeed, ObjectOrient, ObjectType, tag)
Moves entire group of objects as one unit toward the target without breaking their shape
ex. group_move_objects(player.x,player.y,4,1,cherry,1);
(click to show/hide)

apply_gravity(GravValue, ImageOrient, ObjectType,tag)
Gives matching objects gravity
(click to show/hide)

Feel free to point out errors, request shapes and manipulations and submit your own scripts.

Unfinished / Incomplete / I Wanna Be The Rex - Early Alpha
« on: March 30, 2015, 10:00:07 AM »
This is a game I'm making for Bananasaurus Rex, a beloved twitch speedrunner.
This game is meant to be very difficult. The salt must flow!
This game is in early alpha and I'm looking for feedback on current difficulty, bugs, design, etc before I go much further.
This is my first fan game and I'm open to suggestions.
It will be helpful to me if you reply to this post with completion times and death counts for each room as well as letting me know what you like and dislike.

Update 5/9/15
Big update: The game is a lot longer now with 4 rooms (+1 secret) before the first boss followed by 4 more rooms and a 2nd boss. The secret room contains an item that changes the player skin and gives the player a bullet time ability and a butt slam (dodge) ability.

There are some development/testing tools left in this build if you choose to use them. The 1 key will move you to the previous room. The 2 key will move you to the next room. (exceptions to the 1 and 2 keys are the prologue, secret room and the room after the last boss) The G key will give you god mode. The H key will create a save at your current position. Right clicking your mouse will teleport you to your cursor. WARNING. Be careful using save anywhere and teleport. This game uses triggers to open and close up paths. Bypassing these triggers by teleporting past or saving and loading past these triggers will affect your game play experience.

Feedback welcome!

(click to show/hide)

Pages: [1]