Menu

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.

Show posts Menu

Messages - suicidal pencil

#121
New version released.

The next release will be 1.0, and it will be the final .exe release before I start using patches.
#122
I've just finished the 0.97 version, and it is now available through the patch.

Thanks for the feedback, Gord. I did muck about with the "play" button on the main menu, and changed it so that it doesn't display the instructions every time. Plus, the game now never really restarts, so that the game keeps vital information, instead of it getting reset to defaults.
#123
Name: Platform Horde
Current Version: 0.98
Last Update: November 12, 2009 @ 18:45 EST
0.98 Release: http://www.mediafire.com/?thqgee2m0rg
0.98 Source: http://www.mediafire.com/?uijnthyoamz

0.92 to 0.97 changes

  • Changed options GUI
  • Changed enemy spawning system from random number generation (Spawn enemy when variable x is a number between y and z) to a cycled one (every x game cycles, spawn enemy)
  • Changed what happens when player dies
  • fixed minor bugs
  • Running tally of frags now kept
0.97 to 0.98 changes

  • Fixed minor errors
  • Added two more weapons
  • Added a simple cash system, and a shop
  • Added enemy death and hurt sounds
Game Info
Latest Dev. News (November 12, 2009 @ 18:45 EST):
Feedback on these ideas are more than welcome. In fact, they're wanted.

  • Probably going to switch systems for dealing with the bullets
  • I'm thinking about reducing the total amount of enemies allowed on screen from 39 to 35, so I can use the extra 4 room objects as bullets. There's only one object allowed to be the bullet, and there can be a noticeable slow-down in the player's firing when there are many enemies, and the player is leaning on the fire button.
  • I think adding a leveling system and a shop with different weapons would really make the game better, in that it would add more depth to the game.
  • Someone suggested adding a 'duck' feature for the player and the enemies. It would definitely make the game harder.
  • More enemy classes and types?

    Pop open the champagne , I've finally completed my first game...after about a full year using AGS. There is no story to worry about, for this is an arcade style game, meant to be played for high score, not story. I'm going to be making constant updates to the game, in the style of patches, to make it easier to get newer versions out to you fine, fabulous people  :P I kinda wish that AGS had internet capability, because I could do so much more, but this is not the forum or post to bring it up.



    As you can see, I still have a wee bit of work on finishing up the character sprites. There are 4 backgrounds (which one you see is randomly decided), which are my screen shots from Unreal Tournament, and Doom II. The enemies and player were created by me (it shows, I'm a horrible graphic artist).

    I am handing out the source code so that people can critique the code, design, and everything else about it. Plus, you can add your own music into the game, just by putting the file in the folder, renaming it, and compiling. The game automatically detects and adds it to the playlist. It supports only MIDI music at the moment, so avoid using .mp3 files or anything else.



    The game also allows you to change the difficulty by adjusting the properties of enemies. So far only three properties are changeable: Health, Spawn rate, and the number of frags required before they change automatically.

    To Do List:

    • 2 player
    • More weapons
    • Increased customization of enemies
    • Crouching
    • Power-ups?
    • Wave system?
    • More sounds!
    • More music!
#124
Hey, maybe someone could put some internet connectivity into AGS, so that players could submit scores to a database, or in some games, play with others. That, and it could also be used so that AGS will check for updates and bug fixes itself.
#125
Working on this game on and off. You can probably tell by the frequency of which I update it, but I'm still working on it!
#126
Quote from: wonkyth on Wed 09/09/2009 11:47:00
...Unless you wanted slower moving bullets, like if you wanted the player to have to time their shooting of the gun, and to allow dodging and the like.

How so? I don't see how an object moves any slower than a character, or why you would want to time shooting the gun.

I'm pretty sure that I'm misunderstanding you; could you be clearer?
#127
Quote from: Khris on Tue 08/09/2009 22:40:30
Do you want to create a module that needs a GUI?

In the middle of creating it. Currently, the workaround is just having the GUI created, along with the buttons. I'd rather not want someone using it to have to create the GUI, and would rather keep it down to one function call to build the GUI
#128
Advanced Technical Forum / Gui from a script
Tue 08/09/2009 21:38:00
is there any way for me to create a GUI and it's buttons purely from a script, without having to create it in the AGS editor first?
#129
Quote from: Vince Twelve on Tue 08/09/2009 21:17:49

Only if the gun can only be fired in one room.  Otherwise, you'll have to create the bullet objects in every playable room.  Apart from this being slightly more work, you may want or need that object for something else in the room. 

scripted correctly, and with the correct assumptions in game play, you could do the same thing with characters that you could do with Objects. I'm not sure, but you could probably have a set of global functions to deal with all the objects in all the rooms, with the only extra work being setting aside an object for use.

My game that I put up as example demonstrates the point, with room objects 0-38 used for enemies, and 39 for the bullet. I took distinct advantage of the time between bullet fires to move the bullet, making it so that only one object is needed.

#130
Quote from: Scorpiorus on Sat 05/09/2009 03:28:20
I'd go with using characters to simulate bullets so not to complicate things too much for a start.

Room objects are much better choices

That said, http://www.adventuregamestudio.co.uk/yabb/index.php?topic=38590.0

This is what I think you are trying to achieve. Feel free to rip my code.

Basically, the logic you are looking for is thus: When the space bar is pressed, create a bullet at the specific player location. Every frame, move the bullet and check for collisions. If the collisions end up true, do function x.

The problems of creating the bullet were solved by making an existing object within the room a bullet, and moving it across the room, checking for collisions. When a collision is detected, it releases the object, so it can be used as a bullet again.

Here's the function that created the bullet, and the function that moves it. On their own, they will not work, because there are references to global variables, and other functions.

Code: ags

function GunFire()
{
  if(player.Loop != 1)
  {
    if(player.Loop != 2)
    {
      if(direction == true)
      {
        //firing RIGHT!!!
        //I made sure that object 39 is not used as an enemy, so it can be used as a bullet. 
        //I also need to make sure that the player is ACTUALLY FIRING HIS GUN
        bulletlock = true;
        if(object[39].Graphic == 0)
        {
          object[39].X = player.x;
          object[39].Y = player.y - 75;
          object[39].Graphic = 130;  
        }
        else return 0;
      }
      else
      {
        //firing LEFT!
        bulletlock = true;
        if(object[39].Graphic == 0)
        {
          object[39].X = player.x - player.BlockingWidth;
          object[39].Y = player.y - 75;
          object[39].Graphic = 130;
        } 
        else return 0;
      }
    }
  }
}

.
.
.

//This will move all of the objects on screen
function ObjectMove()
{
  //this moves and controls all of the enemies
  int enemy_number = 0;
  while(enemy_number < 39)
  {
    if(object[enemy_number].Graphic != 0)
    {
      if(object[enemy_number].X < player.x) object[enemy_number].X++;
      else object[enemy_number].X--;
    }
    enemy_number++;
  }
  //this controls the bullet
  if(object[39].Graphic != 0)
  {
    if(direction == true)
    {
      //The player is facing right
      object[39].X += 100; //move the bullet
      if(object[39].X <= 800)
      {
        int object_check = 0;
        while(object_check <= 38)
        {
          if(object[39].IsCollidingWithObject(object[object_check]))
          {
            DoDamage(object_check);
            return 0;
          }
          else object_check++;
        }
        return 0;
      }
      else 
      {
        object[39].Graphic = 0;
        bulletlock = false;
      }
    }
    else
    {
      //The player is facing left
      object[39].X -= 100; //move the bullet
      if(object[39].X >= 0)
      {
        int object_check = 0;
        while(object_check <= 38)
        {
          if(object[39].IsCollidingWithObject(object[object_check]))
          {
            DoDamage(object_check);
            return 0;
          }
          else object_check++;
        }
        return 0;
      }
      else 
      {
        object[39].Graphic = 0;
        bulletlock = false;
      }
    }
  }
}

#131
Quote from: Nightblade on Tue 08/09/2009 18:26:15
@Suicidal Pencil

Thanks for sharing the source code.   ;D

This will be very useful to me as part of my game will be a platformer.

If you can understand the methods to my madness, then rip stuff out as you please.
#132
AGS could possibly be 3D, in the same sense that the original Doom and Castle Wolfenstein are 3D. It's a pseudo-3D, but I'm not sure that AGS has that capability built in.

To do it, you'd have to recreate the painter's algorithm or figure out how to do z-buffering. You'd be recreating the 1d Tech 1 engine to do it, I think.

It'd be interesting to see if it can be done, because then the engine could be expanded to creating FPS games.
#133
http://www.adventuregamestudio.co.uk/yabb/index.php?topic=38590.0

It's an example of a platformer that I'm creating. Khris is right. It's a major pain to do. Subtracting the time to make the sprites, and making the music player, it still took quite a bit of time. This isn't even scrolling, so this isn't even a complicated platformer.

The source code is in their, in case you get curious :P
#134
Quote from: ddq on Wed 19/08/2009 03:08:47
...If I could throw in a little feature request, it might be nice to have the ability for either the player or both player and enemies to duck.

interesting. Will definitely consider it, since it would add a new layer of depth to the game, with the enemies ducking your bullets from time to time.

Quote from: Darth Mandarb on Wed 19/08/2009 03:43:26
Please provide two in-game screenshots as the Forum Rules require or I will have to lock this...

Thanks

sorry bout that. Only one room, and not much to actually see. Yet.
#135
Genre: Platform, Arcade
Current Version: 0.81-Alpha
Last Update: October 18, 2009 @ 24:05 EST
latest release: 0.81-alpha
next release: 0.85-alpha
0.81 Release: http://www.mediafire.com/download.php?mwnzamztmdh
0.81 Source: http://www.mediafire.com/download.php?im2inmgxnzz

Game Info and Development

I'm making this just to twist the arms of the AGS engine. I'm an awful graphic artist, but my main focus is on the programming. This is going to be a future project, which will be a collection of AGS arcade games. Anyone who'd like to help are welcome, but no sweat  ;). I put up the source so that people can critique.

Controls: No mouse other than to control the music gui, but you use the left and right arrow keys to move, and the space bar to shoot

To Do List:

  • Create and Script Enemies 100%
  • Finish main character (cleaning up sprites)
  • Finish the music player 110%
  • Find more music (4 songs so far)
  • Optimize code (on-going)
  • Write Documentation 0%
  • Create and Script Enemy deaths and kills 100%
  • Create and Script power-ups 0%
  • Create background 0%
Development Notes

  • August 14, 12:33 EST, update: 14:00:
    Quote from: suicidalpencil]It looks like in order to have an animated enemy, I need to have a character defined for every one. Doing so will make the game too big, so I'm splitting the enemies into two classes: weak and strong. The strong enemies are the ones that will animate, but because there will never be more than 4 strong enemies on screen at a time, I can reduce the amount of characters needed! The weak enemies are going to be dynamic sprites, but that gives me the problems associated with memory management. There's a potential memory leak, if I do not release the memory of the sprites that get 'killed'. This is because dynamic sprites are not handled by the default AGS sprite cache.
    Quote from: AGS 3.1.2 Documentation[create(dynamic sprite)] loads an extra sprite into memory which is not controlled by the normal AGS sprite cache and will not be automatically disposed of. Therefore, when you are finished with the image you MUST call Delete on it to free its memory.
    Found another way to do what I need. Characters are not the only things that can animate. Objects can, too, which I completely forgot about. That makes it so much easier, but it means that I'm going to have about 30 objects in a room -suicidal pencil
  • August 17, 12:42 EST: I finished the enemies. They work like a charm. Now, the player needs to be able to kill them. I'm about 3/4s the way there with it. I'm using object 39 (the 40th object, but the array starts at 0) as a "bullet", where it will move across the screen. Using a short collision detection function, when the bullet collides with an object, it will know the object number of the object, and reduce it's "health", which is just an array, with each element corresponding to an object. So far, it's got bugs up the wahoo, but I'm slowly getting to work right - suicidal pencil
  • August 18, 20:49 EST: Hey, I finally finished scripting the enemies, and the collision! It was a pain; I kept finding new exploits and bugs and different situations where the game would crash. They were mostly me forgetting about the small, insignificant details. A few actually required a few more conditionals ('if', 'else if', 'else' statements). An example being that, when the player taps either of the movement arrows, they could hold the fire button, and kill enemies almost instantly while not using any ammo. (Don't try it, I fixed it). I'd appreciate people telling me of bugs, hangs, exploits, and crashes that occur. - suicidal pencil
  • September 8, 02:34 EST: After a brief hiatus in development, I'm back to working on this. I finished one of the many enemy death sequences and attack sequences, all that remains is to script them in. After the coding is done, adding more sequences will take about ten minutes (just creating the images and putting them in views), and not the hour or so I expect to take scripting the code to run the animation without stopping pausing the game. Having said that, there is not that much more code to write, and I eventually plan to turn my music player into a module for AGS. - suicidal pencil
  • September 30, 15:41 EST: I've finally finished scripting the enemy death sequences. Drawing and animating was not the hard part: Coding it to work properly was. There was a situation where the player could increase the # of frags by holding the space bar and shoot a dieing enemy. Fixed it, but now I have to finish the final player function (death). - suicidal pencil
  • October 15, 21:42 EST: Finally fixed a problem with the right-side enemies stopping walking when they should keep going, and I finally made it so that the player can finally die! Next comes the background, fixing the sprites, and creating the power-ups. - suicidal pencil
  • October 18, 2009 @ 24:05 EST: Released 0.81. Created and fixed some bugs, increased the frequency that the enemies spawned from, and added an instruction display. - suicidal pencil
Here's a quick image of the main character



A screenshot of the latest release (0.71)



as you can probably see, I still have lots of work to do. The obvious ones are the background and player sprites. (I just noticed this, but if you look closely, you can see how I figured out how to "kill" the enemies"
parts of the code

the fully complete music player. You can now add your own music. To add your own music, just copy a song into the music folder, rename it as "Musicx", where x is the next number in the series (so the first song you add would be "4", the second "5", and so on). It is important to make sure that there are no breaks in the series, or the algorithm to find all the music will not work. Then, just compile it in AGS, and run!
Code: ags

enum Music_Gui
{
  Play, 
  Pause, 
  Back, 
  Skip, 
  Next
};

.
.
.

int music_number = 1 + random(music_amount());
int MPOS = 0;
int max_music_number;

.
.
.

function music_amount()
{
  int music_counter = 1;
  while(1)
  {
    PlayMusic(music_counter);
    if(!IsMusicPlaying()) 
    {
      max_music_number = music_counter;
      return music_counter;
    }
    StopMusic();
    music_counter++;
  }
}

.
.
.

function MUSIC (Music_Gui button)
{
  if(button == Next)
  {
    //when the music runs out, this function is called
    if(music_number == max_music_number)
    {
      music_number = 1;
      PlayMusic(music_number);
    }
    else
    {
      music_number++;
      PlayMusic(music_number);
    }
  }
  else if(button == Back)
  {
    //Back
    StopMusic();
    if(music_number == 1)
    {
      music_number = max_music_number;
      PlayMusic(music_number);
    }
    else
    {
      music_number--;
      PlayMusic(music_number);
    }
  }
  else if(button == Play)
  {
    //Play
    if(!IsMusicPlaying())
    {
      PlayMusic(music_number);
      SeekMIDIPosition(MPOS);
      temp_lock1 = false;
    }
  }
  else if(button == Pause)
  {
    //Pause
    if(IsMusicPlaying())
    {
      MPOS = GetMIDIPosition();
      StopMusic();
      temp_lock1 = true;
    }
  }
  else if(button == Skip)
  {
    //Next
    if(music_number == max_music_number)
    {
      music_number = 1;
      PlayMusic(music_number);
    }
    else
    {
      music_number++;
      PlayMusic(music_number);
    }
  }
  else
  {
    Display("Incorrect or improper parameter passed to function (MUSIC)");
    Wait(5000);
    QuitGame(0);
  }
}


The spawning system for the game's enemies

Code: ags

function SpawnEnemies()
{
  bool enemy_direction = false;
  int randbool = Random(1);
  if(randbool == 1) enemy_direction = true;
  //Basically, I'm doing what I took what I did to the player character (use a boolean variable to determain
  //whether the player is facing left or right), and applied it here to see what side of the screen the 
  //enemies spawn from. This just seem the easiest (and fastest) way to do it.
  int loopcheck = 1;
  while(1)
  {
    if(object[object_number].Graphic == 0)
    {
      if(enemy_direction) object[object_number].X = 0;
      else object[object_number].X = 800;
      object[object_number].Y = 400;
      if(object[object_number].X < player.x)
      {
        object[object_number].SetView(3, 2, 1);
        object[object_number].Animate(2, 3, eRepeat, eNoBlock, eForwards);
      }
      else
      {
        object[object_number].SetView(3, 1, 1);
        object[object_number].Animate(1, 3, eRepeat, eNoBlock, eForwards);
      }
      object_number += 1;
      return 0;
    }
    else if(object[object_number].Graphic == 38) return 0; //If the player is still living when there are 40 enemies, I'll be impressed. But just incase, this stops the game from (possibly, I haven't tested) crashing
  }
}
#136
to my knowledge, the only things that are allowed to animate are Characters and Objects.
#137
scripting

I do and have done more than my fair share of scripting (programming is my specialty). I'll do any job, big or small for you

site: http://spencilslab.forumup.ca/
#138
a) Yes. When you are writing the dialog, and you want to change a variable, you can hit tab, and write code
eg:
Code: ags

.
.
.
@2
JOSH: Thanks for saving my dog! Here's the $10 I owe you
  Cash += 10; // hit tab, then write your code
EGO: No problem!
return
.
.
.


b) Same thing.

Code: ags

.
.
.
@2
JOSH: Ok, I'll trade my gum for your chocolate
  player.AddInventory(Gum);
  player.RemoveInventory(Chocolate);
return
.
.
.


c) You can, but I specifically don't know how
#139
Actually, you just gave me an idea for one of the missions!

thanks!

edit: I set it in Canada because...well, how many games, movie, and books are set in Canada that don't involve snow in any way shape or form? Not much...
#140
ETA For first mission (and full demo): April 15, 2009

mission one progress
Rooms: 1/14 (7.1 %)
Characters: 20/20 (100%)
Sprites: 128/180 (71%)
Coding: 15% (anticipating from 3975 to 2250  lines of code (125-50 per room, 250-350 for 6 rep.execs, 125-50 for special actions )
*all above are estimations*


DEMO
Press 'ctrl-q' to quit at any time.
'M' brings up the menu
right click switches mouse modes (normally it would anyways, but I messed with the code to better suit what I needed)

http://www.mediafire.com/download.php?i3uxmnjw0om

Story so far...
You are Agent X4a61636f62J, a contract killer trained by the Ontario Guild of Assassins. Taking out targets around the world, you are one of the best. But after a routine mission sours and you are betrayed, you become the very thing you hunted. With the ultimatum they issued being a catch-22, your going to be lucky to survive another day.

The full game will be broken into three parts: Beginnings, Betrayal, and Climax. Currently, I'm working on 'Beginnings'. Instead of the side view of most adventure games, I decided to do a 'Birds Eye View' style game.


A few Screen shots with descriptions


The main title screen for the game. The cyan thing is the cursor


This is the home of agent X4a61636f62J in Toronto


The hospital where the first mission is located. See that small blue transparent thing just below the counter? those represent locations where the player can do stuff that help/hinder the mission (blue for talking sequence, green for action sequence, red for assassination sequence). Currently under development


The load out screen, where the player buys and chooses what they will take on the mission, which can have a huge impact on the mission itself. White represents an upgrade or weapon that hasn't been bought. Red is a weapon or upgrade that is not in use. Green is a weapon or upgrade currently in use. Currently under development

To Do:
-Add more options to the load out screen:
--9mm extended clip (9mm upgrade/Ammo)
--9mm firing mechanism upgrade (9mm upgrade, makes weapon fully automatic)
--.357 Magnum extended barrel (.357 upgrade, increases bullet velocity)
--.357 Magnum bullet holder (.357 upgrade, decrease reload time)
--Desert Eagle (handgun)
---Plastic Design (upgrade, undetectable to metal detectors)
---Silencer (upgrade)
---Armour Piercing rounds (upgrade/Ammo)
--Switchblade (Melee)
--Combat Knife (Melee)
--Garrot Wire (Melee)
--MP5 (Assault weapon)
--Lock picks (misc)
--Poison (misc)
--Sedative (misc)
--Concentrated Acid (misc)

-Work on Mission 1 Entrance
-- Speak-scene1
--Action scene1
--Rep.Exec function


Progress: About 10% done

Sounds and Music: I'm mostly ripping sounds from Counter-Strike and Half-life (1 and 2) (and yes, I own these games...), but I'm making the music myself. Progress: about 75%

Samples: http://www.mediafire.com/download.php?uiztzmmimmn
Password: FalconForty

Graphics: Mostly using GIMP 2.6.4 for the graphics. Progress: about 15%

Coding: I've noticed that I'm spending about 90% of my time actually coding the game, rather than making the graphics. Which is just as well, since I enjoy it immensely. Progress: 5%

Example code:
Code: ags

// room script file

import function Mission_load();

//The next function will take two objects, fade them in to view, and move them
//slowly to the opposite sides of the screen.  
function room_FirstLoad()
{
  Room4Mission1.Transparency = 100;
  Room4Deathbed.Transparency = 100;
  Shop.Visible = false;
  int Trans1 = 100;
  int Trans2 = 100;
  PlaySound(9);
  while(Trans1 < 101)//Just so that the loop doesn't exit prematurely
  {
    if(Trans1 != 0)
    {
      Trans1--;
      Room4Mission1.Transparency = Trans1;
      Room4Mission1.X--;
    }
    if(Trans1 <= 25)
    {
      if(Trans2 != 0)
      {
        Trans2--;
        Room4Deathbed.Transparency = Trans2;
        Room4Deathbed.X++;
      }
    }
    if(Trans1 == 0)
    {
      if(Room4Mission1.X != 0)
      {
        Room4Mission1.X--;
      }
    }
    if(Trans2 == 0)
    {
      if(Room4Deathbed.X != 230)
      {
        Room4Deathbed.X++;
      }
      else
      {
        Trans1 = 101; //Breaks the while loop
      }
    }
    Wait(1);
  }
  Trans1 = 0;
  Trans2 = 0;
  Room4Loading.Visible = true;
  while(Trans1 < 100)
  {
    Trans1++;
    Trans2++;
    Room4Mission1.Transparency = Trans1;
    Room4Deathbed.Transparency = Trans2;
    Wait(1);
  }
  Mission_load();
  Room4Loading.Visible = false;
  Protagonist.ChangeRoom(5, 402, 548);
}


I'm probably going to tighten up this section of the code later, but for now, I don't need to.

Story: I'm approaching the story from a different angle: Instead of making a story, and then shaping the game around it, I'm creating the game, and shaping the story around it. To me, this is a much better way of making a game. Progress: about 30%

Updates

March 20, 2009
- Finished Dialog between player and Secretary in Mission1
- about 80% done the coding for the rep.exec function
March 24, 2009
- Finished all possible player and guard animations
- Finished room 1 of mission 1
- starting on room 2 of 14 for mission 1

Comments and constructive criticism welcome
SMF spam blocked by CleanTalk