Advertisement
If you have a new account but are having problems posting or verifying your account, please email us on hello@boards.ie for help. Thanks :)
Hello all! Please ensure that you are posting a new thread or question in the appropriate forum. The Feedback forum is overwhelmed with questions that are having to be moved elsewhere. If you need help to verify your account contact hello@boards.ie

Complete noob...whats involved?

Options
  • 29-04-2013 4:37pm
    #1
    Closed Accounts Posts: 33,733 ✭✭✭✭


    Hi folks,

    Can anyone give me an idea of the process of making a basic platformer type game? I'm completely & totally new to all of this, & have literally no idea what the steps might be to do it. I realise there's prob few different options, but in general where should I begin the journey? I've no coding experience, so I suppose getting proficient at one would be a good start? If so, whats the advice for the best one for beginners etc?

    Games like Mario & Sonic etc would be close to my heart, so a Summer project of making an 8bit-esque platformer would be nice

    Any & advice is appreciated :o


«13

Comments

  • Moderators, Society & Culture Moderators Posts: 12,521 Mod ✭✭✭✭Amirani


    I'll be joining you in starting a game after my exams are finished. I've a bit of programming experience though so it'll give you a couple of weeks to catch up :p


  • Closed Accounts Posts: 33,733 ✭✭✭✭Myrddin


    I'll be joining you in starting a game after my exams are finished. I've a bit of programming experience though so it'll give you a couple of weeks to catch up :p

    Ah I'll be a long time catching up, when I say noob I mean noob!


  • Registered Users Posts: 8,408 ✭✭✭RedXIV


    If you have NEVER coded at all and have no idea of the principles involved. I would recommend taking the time to learn the very simple basics of programming. Assigning Variables to store game values, loops, if-else blocks and try to get your head around how games you know use these. You don't have to get it bang on exactly but things like "If arrowLeft = pressed, move left. Else don't move".

    ^Thats very very basic but the these are the fundamentals to making a game.

    I'm mentoring at a coderdojo in Dun Laoghaire and while its very much geared towards teaching kids, most of the more established ones take in everyone. They are using a program called Scratch which is like programming with Lego, and a very good place to get your head around some of the problems. I'd highly recommend it to someone messing around and trying to learn before getting a bit more in depth with other tools.

    There was rumblings of a boards made game a few years ago, maybe now with the new forum, we could start those rumblings again, and start small so as to upskill people interested?


  • Closed Accounts Posts: 33,733 ✭✭✭✭Myrddin


    Cheers man :)

    What language would you advise for learning the very basics you mentioned? Will take a look at Scratch too


  • Registered Users Posts: 8,408 ✭✭✭RedXIV


    EnterNow wrote: »
    Cheers man :)

    What language would you advise for learning the very basics you mentioned? Will take a look at Scratch too

    The very basics aren't really language specific, you'll find them in all languages, maybe with slightly different variations on syntax and phrasing.

    For example, this is a simple "while" loop in python (a scripting language)
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    

    and this is one in C++ a very powerful but not intuitive one
    // Local variable declaration:
       int a = 10;
    
       // while loop execution
       while( a < 20 )
       {
           cout << "value of a: " << a << endl;
           a++;
       }
     
       return 0;
    

    I would recommend a scripting language to get used to the basics as the read more like conventional sentences, but you'll find most games when modding or building more powerful games tend to end up like C++.

    If you're near a coderdojo, I'd def get involved, just see if you can even get access to their notes (I'll try and dig up some on my side too) as they break everything down to baby steps but these really are the things you need to know inside out.


  • Advertisement
  • Closed Accounts Posts: 33,733 ✭✭✭✭Myrddin


    RedXIV wrote: »
    For example, this is a simple "while" loop in python (a scripting language)
    while (count < 9):
       print 'The count is:', count
       count = count + 1
    
    print "Good bye!"
    

    As I said..total newb, therefore; What the heck is a "while" loop? :o

    But yeah, I get what your saying in that the basics apply to most languages, its the syntax that changes between them though.

    Jeez, this could die a death already :(


  • Registered Users Posts: 7,814 ✭✭✭TPD


    Before ever learning a programming language, I was using gamemaker to make simple 2d platform games. In my opinion, it gave me a good understanding of object oriented programming methods and ideas. For the first year or so, until things got complex, my programming lecturer in college assumed I'd done programming before.

    Based solely on my own experience, I'd give gamemaker a go as your first attempt. It's quick and easy to get something playable, and it does teach some of the broader ideas that'll be needed to write a game in code. Also there are a lot of tutorials / editable files, so you can see how other games are made.

    Edit: I think that's a bonus, as seeing lines of code and having no idea what's working (and why) and what's not working (and why not) would be very off putting.


  • Registered Users Posts: 8,408 ✭✭✭RedXIV


    EnterNow wrote: »
    As I said..total newb, therefore; What the heck is a "while" loop? :o

    Sorry, :o a "while" loop is a piece of code that continues to repeat itself while its condition is true.

    so
    while (count < 9 )
    
    is like saying "While the variable "count" is less than 9, keep doing this"
    and then within your loop you'll have something changing the variable count presumably so it can break out of that loop eventually and do something else.

    A common example of this would be
    While (player is Alive)
    
    as your main game loop and then when something causes him to die, he ends this loop and moves on to the game over screen etc.
    EnterNow wrote: »
    But yeah, I get what your saying in that the basics apply to most languages, its the syntax that changes between them though.

    Jeez, this could die a death already :(

    Don't let it get to you, everyone is like this when they start :) I'll throw up a generic set of fundamentals later tonight and hopefully something like GameMaker above can help you keep interested without the code part :)


  • Closed Accounts Posts: 33,733 ✭✭✭✭Myrddin


    TPD wrote: »
    Before ever learning a programming language, I was using gamemaker to make simple 2d platform games.

    Cheers, will have a look at that also :)
    RedXIV wrote: »
    I'll throw up a generic set of fundamentals later tonight and hopefully something like GameMaker above can help you keep interested without the code part :)

    That'd be fantastic, thanks again!


  • Registered Users Posts: 22 Carpo II


    What language you choose should be largely driven by what your expectations are.

    If you want to see results on screen quickly and are approaching from a fairly casual point of view maybe something like UnrealScript and the Unreal Editor would suit? You should be able to get up and running very quickly with something like this, but its quite high level and you wont get too much into what goes on 'under the hood'.

    If, on the other hand, you do want to get into the nitty gritty, learning C might be a good place to start. C is smaller and tighter than C++, will still give you a good understanding of what is going on at the lowest level and a good spring board into learning C++ (and its massively cross-platform). The downside is that it will take a fair while to see anything more than text in a console, and this kind of language can be a bit unforgiving to a new comer (though I'm sure you would get plenty of help here).

    So maybe you could say a bit more about what you want or expect in terms of time/effort, future plans, platform etc


  • Advertisement
  • Moderators, Category Moderators, Computer Games Moderators Posts: 50,865 CMod ✭✭✭✭Retr0gamer


    You are best to learn some fundamentals of coding first. I'd recommend learning it through Java, it's a far easier language than something like C++ and also far better than learning a scripting language like Python, you are best to go on to them once you have the basics down. If you want to try an even easier one you can try scratch from MIT and then move on to Java. Just learn about variables, loops and if else statments and how they work.

    If you really want to get started quickly then I'd suggest Gamemaker. You don't really need coding for it and you will learn it along the way but I'd recommend you get some fundamentals down.

    The first and hardest step of getting your game to work is getting your character to move and behave right. Getting your character to anaimate properly and behave in the correct way with the right animations and hit boxes will take a lot of your time, creating levels is much easier.

    You should learn how to make a character out of 2 sprites (you could go with more but keep it simple). It's a simple case of updating variables with the position of one sprite and moving the other to that location but it's a good start and will help when you wan tto move hitboxes with your character.

    Another good lesson is to get your animation right. You'll need to use if statements controlled by booleans so that you character won't come out of an animation if another action was pressed.

    They are just the two things I found most useful.

    If you need any help at all then ask me any questions you have. I've been through it all already since I made that demo in stencyl which is a much bigger pain in the ass to use than gamemaker and I had to make it from scratch because the tutorial code was awful.


  • Registered Users Posts: 8,408 ✭✭✭RedXIV


    Ok, I'm by no means a guru and some of this may seem obvious or be too over the top but this will hopefully get you to the stage where you can see the logical "bricks" used in all games and will help you plan your code before you actually start writing it.

    I'm going to try and break it down as much as possible so don't be offended if I get to a point which is obvious, I'm just making sure you have rock solid foundations. :)

    Ok first off, before you start learning this stuff, its important to define what it is. What I'm showing you is the most common logical processes used in practically all major programming languages. Things like outputting text to the screen and handling files changes from language to language, that's the actual functionality of each language. What we will be looking at is the concepts that remain consistent throughout all of them.

    Variables

    Variables are chunks of memory that either you or your code will assign a value to. This could be a:
    • Boolean - True or False values
    • Integer - a numeric value eg. 4, -19, 23,234
    • String - a list of characters e.g. "Hello World!"
    • Custom - a jpeg, an mp3 track, anything you can think of, you can build.

    So where you might see this in a game to make it more familiar might be
    numberOfLives = 3
    playerName = "EnterNow"
    when you start the game. Variables are ridiculously important. You'll use them to track things like score, player location, number of enemies, graphics, visuals, everything. Some languages are very flexible with variables and all you need to do is declare them when you need them. These are usually scripting languages. Others require a bit more care. In C/C++ if you don't give your variable a value after setting it up, it will take a random value, which can do some strange things to your code. As standard, its good practice to make sure all your variables have a value you know.

    Loops

    Loops are repetitive pieces of code, contained by a condition. Loops tend to come in two varieties, While loops and For loops. The difference between the two would be best thought of as while loops are used when you will have varying lengths for the loop to run and For loops are when you know exactly how many times you want. In gaming terms think of the timer in sonic or mario.
    While (player == alive && levelComplete ==false)
    {
         time= time-1
    }
    

    Ok so whats happening here is that when the computer runs this piece of code, it will check first is the player alive (== being "is equal to"). Then it will check if the level is complete. The "&&" signifies AND in C/C++. What this means for our loop is that the code will only loop if the player is alive AND the level is not completed. If these are both true, the variale time will be assigned the value of itself minus 1. Or simply decrease its own value by one. The main game loop for most games is a while loop.

    A For loop on the other hand is for specific cases. Lets look at this piece of code for example:
    for (count == 0; count >10; count=count +1){
    createEnemy
    }
    

    In this example, the for loop has 3 parts to it. the first part is the controlling variable. When this loop is read by the computer first, it assigns the variable count a value of 0. The second part is the end condition. In this case, the loop will end if the variable count goes over the value of 10. The last part is what changes when the loop hits the bottom of its code. In this example, the value of count will have 1 added to it. So if the count variable is set at 0, it goes up 1 after each loop and will ends when it goes over 10, how many times will the code create an enemy?
    12 times. This is because you've started at 0 and for the end condition to hit, you need to have count = 11. Thats 12 iterations of the loop so 10 enemies created

    IF - ELSE

    If-else blocks are basically the forks in the road, where the decisions are made in the code. These will be used to help determine how the game should proceed. An If piece of code does not necessarily have to be followed by an else, but they are often found together. an example of an isolated IF statement would be
    if (buttonA == true)
    {
    make player jump
    }
    

    This is pretty simple, if the A button is pressed (this will register as true normally) then the player will jump. When we change it to an if-else block, we can get something a bit more versatile
    //sonic has hit spikes
    if (playerHasRings == true)
    Play ouchAnimation
    numberOfRings = 0
    else
    player dies
    

    Arrays

    Arrays are ways of storing multiple sources of data linked together. An array might be best thought of to start with as a list of variables. Remember a variable looks like this:
    String PlayerName = "EnterNow"
    
    but an array would look more like this:
    String PlayerNames [] = {"EnterNow", "RedXIV", "Sonic", "Mario"}
    

    the [] after playerNames indicates that you are about to create an array. As with everything in programming they start with 0 so even though we have 4 names, they are:
    0=EnterNow
    1=RedXIV
    2=Sonic
    3=Mario
    and you would reference Sonic by calling
    set currentPlayerName = playNames[2]
    

    You can probably work around these for the first while but its good to know they exist.

    Functions

    These go by many names, functions, methods, subroutines, but they all mean the same thing. A piece of code that does a specific thing that you call on a regular basis. This is the sort of thing you use if you spend a lot of time working on something that you would use on a regular basis. For example, loading an image, resizing it to fit your expectation and assigning it to your player is something you might do on a regular basis in a multiplayer game, where the only thing that might change is the player it should go to and the location of the image. so instead of writing the same 50,100 or 1000 lines regularly, you save that set of lines as a function. and call it as similar:
    //new player joined, name is "EnterNow" image in "EnterNow_location"
    setPlayerPicture("EnterNow", "EnterNow_location)
    .
    .
    .
    //where your function is saved:
    setPlayerPicture (String playerName, String locationOfImage)
    //do function stuff
    
    

    So that's some of the foundation blocks to programming, there are ton's of places to help you get to grips with these and probably explain them better too.

    Again, this will help you understand the logic that games take and most of the programs like GameMaker and Scratch use this logic just in a more friendly GUI than code :)

    If you have any questions or want more info, just let me know and I'll throw up more. :) That should be plenty to sink your teeth into though


  • Registered Users Posts: 1,886 ✭✭✭megaten


    Gamemaker or Construct2 is probably your best bet if you want to do something as a hobby. If you fancy coding then good options are stuff like Lua and Love2D or Actionscript 3 and a game framework like Flixel or Flashpunk. I believe Flixel in particular is made with platforming type games in mind.


  • Registered Users Posts: 225 ✭✭Merger


    Awesome Thread! Looking to get into game dev myself!


  • Closed Accounts Posts: 33,733 ✭✭✭✭Myrddin


    Carpo II wrote: »
    So maybe you could say a bit more about what you want or expect in terms of time/effort, future plans, platform etc

    Its just something I'm approaching from a hobbyist perspective, not looking to release anything etc. The main influences for what I'd like to achieve would be the well known platformers, Super Mario World & Sonic The Hedgehog 1 & 2. Classic platformers, fun level design etv. Though I realise now that games like these although simple looking, are likely far more complex than I initially envisaged. So to tone it back a bit, an 8bit platformer like Mario/Kirby would be where I'd look to.
    Retr0gamer wrote: »
    If you need any help at all then ask me any questions you have. I've been through it all already since I made that demo in stencyl which is a much bigger pain in the ass to use than gamemaker and I had to make it from scratch because the tutorial code was awful.
    RedXIV wrote: »
    hugely helpful post

    Thanks both of you, very much appreciated!


  • Registered Users Posts: 1,886 ✭✭✭megaten


    If your just doing it from a hobbyist perspective I'd definitely use a game maker like tool unless coding and programming specifically appeals to you.


  • Closed Accounts Posts: 33,733 ✭✭✭✭Myrddin


    megaten wrote: »
    If your just doing it from a hobbyist perspective I'd definitely use a game maker like tool unless coding and programming specifically appeals to you.

    So far I'm thinking to start on one of these tools, get to grips with how it works etc. But would I be right in thinking your always going to be sandboxed in with these tools, ie they can only do what they can do? With coding, I presume a lot of the constraints of a tool are removed {& replaced by your programming competency or lack of in my case :o}

    So maybe begin with a game-maker tool, & after a while maybe start looking at something like Java as Retr0 suggested?


  • Registered Users Posts: 1,886 ✭✭✭megaten


    You limited in terms of export options mostly. GameMaker has it's own scripting language called GML and the normal edition only exports to windows. Construct lets you write plugins in javascript and has a bunch of export options but they're all html5 wrappers. If platformers are you main interest I wouldn't worry about limitations too much


  • Registered Users Posts: 225 ✭✭Merger


    Quick Question regarding GameMaker, Should I go for the Free edition to begin with or should I fork out for the $50 Edition?

    What's the general consensus ?


  • Registered Users Posts: 7,814 ✭✭✭TPD


    Merger wrote: »
    Quick Question regarding GameMaker, Should I go for the Free edition to begin with or should I fork out for the $50 Edition?

    What's the general consensus ?

    Go for the free edition until you run up against a constraint you can't work around. Any games you start in the free version can be continued in the paid for version.


  • Advertisement
  • Registered Users Posts: 8,408 ✭✭✭RedXIV


    TPD wrote: »
    Go for the free edition until you run up against a constraint you can't work around. Any games you start in the free version can be continued in the paid for version.

    Definitely do this. You might decide game maker isn't the tool for you after 10 mins, and that would suck


  • Registered Users Posts: 363 ✭✭Rockn


    I recommend downloading the free version of Construct 2 and following the beginner's tutorial here. You'll have the beginnings of a game built in under an hour and you'll have a much better idea of what's possible. Using Construct 2 also teaches you some programming ideas like variables, for/while loops and functions. (Try Gamemaker as well, personally I prefer C2).

    Then I'd say have a look at Codecademy and try out the Javascript or Python tracks. That'll give you a good idea of what coding is like and whether or not you'll enjoy it.


    I'm doing a Python course on Coursera at the moment. It teaches Python by building a series of games from a text-based rock-paper-scissors-lizard-spock in week 1 up to an asteroids game in week 8. It's aimed at people new to programming and teaches all the basics with video lectures, interactive quizzes and weekly mini projects. We're in week 2 now but you can still join in.


  • Registered Users Posts: 416 ✭✭gouche


    Rockn wrote: »
    I recommend downloading the free version of Construct 2 and following the beginner's tutorial here. You'll have the beginnings of a game built in under an hour and you'll have a much better idea of what's possible. Using Construct 2 also teaches you some programming ideas like variables, for/while loops and functions. (Try Gamemaker as well, personally I prefer C2).

    Then I'd say have a look at Codecademy and try out the Javascript or Python tracks. That'll give you a good idea of what coding is like and whether or not you'll enjoy it.


    I'm doing a Python course on Coursera at the moment. It teaches Python by building a series of games from a text-based rock-paper-scissors-lizard-spock in week 1 up to an asteroids game in week 8. It's aimed at people new to programming and teaches all the basics with video lectures, interactive quizzes and weekly mini projects. We're in week 2 now but you can still join in.


    Currently doing the Coursera course myself and can say that it is pretty good going.
    I think Python is a pretty good choice - easy to get your head around and pretty powerful.
    I know a lot of people on here will say not to bother with a scripting language but for learning the basics it's great. Easy to understand and has plenty of features of more powerful languages such as OOP.
    There's also PyGame which is a set of modules specifically for making games.
    See here for a load of projects to give you an idea of what's possible.


  • Registered Users Posts: 3,831 ✭✭✭Torakx


    Construct2 is a more organic newb friendly program.
    Gamemaker looked to be more flexible.Cant remember in what way, might have been to do with coding or export plugins.
    I did a comparison of 3-4 programs, for deciding which to start for 2d side scrollers, when I make one in the future and Gamemaker came up tops overall for me.Plugins and cost for exporting was one of the main factors in my decision IIRC.
    But anyway, 20 mins on google searches, will tell you which you prefer and maybe save you alot of time stopping one and switching.
    I got both and tried them aswell though :)


  • Moderators, Business & Finance Moderators, Computer Games Moderators Posts: 10,462 Mod ✭✭✭✭Axwell


    If you arent too concerned what platform you are building for you could look at Corona SDK - its for tablet and mobile development. It runs on a simulator on your pc/mac initially while you are developing the game and then you can publish it to your device for testing and later publish to the app store/android market if you wish. It uses a scripting language called Lua and their website has loads of tutorials and resources and examples that you could go through. Some of those might be good to look through even just to try get your head around the coding principles and syntax.

    http://www.coronalabs.com/ - main site

    http://www.coronalabs.com/resources/tutorials/ - Resources


  • Closed Accounts Posts: 3,922 ✭✭✭hooradiation


    EnterNow wrote: »
    So maybe begin with a game-maker tool, & after a while maybe start looking at something like Java as Retr0 suggested?

    If you're actually serious about it, don't waste your time with Java.

    Understanding memory allocation and dealocation, the stack and heap, pointers and references are all very important things and Java hides that from you. Which is fine if you're writing a Java app for some dull business shenanigans where performance isn't an issue, but you're not.

    If you're serious, you'll eventually have to use a proper language like C++ and you'll be largely ignorant of the above. Which means you'll try and use the paradigms you learned for Java and wonder why your code dies on it's arse.

    Even if you end up using a managed language like, say, c# having a good understanding of what actually happens when you create a new objects is never a bad idea. Especially when you have to deal with memory leaks which are far harder to find and solve in managed languages.
    And understanding why processes consume the amount of memory they do is the first step in knowing if and how you can reduce it.


  • Moderators, Category Moderators, Computer Games Moderators Posts: 50,865 CMod ✭✭✭✭Retr0gamer


    Axwell wrote: »
    If you arent too concerned what platform you are building for you could look at Corona SDK - its for tablet and mobile development. It runs on a simulator on your pc/mac initially while you are developing the game and then you can publish it to your device for testing and later publish to the app store/android market if you wish. It uses a scripting language called Lua and their website has loads of tutorials and resources and examples that you could go through. Some of those might be good to look through even just to try get your head around the coding principles and syntax.

    http://www.coronalabs.com/ - main site

    http://www.coronalabs.com/resources/tutorials/ - Resources

    Currently doing corona myself in my course and wouldn't recommend it at all to a novice. The lua it uses is quite different from a programming language. I feel you'd be better off with other options mentioned since it would give you a much better understanding of how to code. If you are interested in seeing how scripting languages work then give corona a go. There's still quite a bit you can learn from learning Corona.


  • Moderators, Business & Finance Moderators, Computer Games Moderators Posts: 10,462 Mod ✭✭✭✭Axwell


    If only approaching it from a hobby perspective then there are for and against for all the different options listed. With Corona there is a huge amount of resources and with the simulator you can see instant results so its pretty good and gratifying in that way.

    If you want to learn the basics of coding and really start at the beginning then look at coding academy as someone mentioned earlier and then maybe download a few different options mentioned in other posts and see what one you lean towards. Personally I hated Gamemaker when I used it, that was about 2 years ago, I think its changed a little since but I found it just frustrating. Everyone is going to have their preferences and recommendations but the best thing to do is just get stuck in and messing around with stuff, you are just doing it as a hobby for now so you have nothing to lose giving them all a go at some point after you get the fundamentals and see if you have the interest in learning more.


  • Closed Accounts Posts: 33,733 ✭✭✭✭Myrddin


    If you're actually serious about it, don't waste your time with Java.

    Understanding memory allocation and dealocation, the stack and heap, pointers and references are all very important things and Java hides that from you. Which is fine if you're writing a Java app for some dull business shenanigans where performance isn't an issue, but you're not.

    If you're serious, you'll eventually have to use a proper language like C++ and you'll be largely ignorant of the above. Which means you'll try and use the paradigms you learned for Java and wonder why your code dies on it's arse.

    Even if you end up using a managed language like, say, c# having a good understanding of what actually happens when you create a new objects is never a bad idea. Especially when you have to deal with memory leaks which are far harder to find and solve in managed languages.
    And understanding why processes consume the amount of memory they do is the first step in knowing if and how you can reduce it.

    I'm serious about it in the sense that I'd like to make a basic game & enjoy the journey. I'm not looking to be the next Gabe Newell or anything {though I do like hamburgers}.

    The problem for me is, I see a finished game in one hand {say Sonic 1}, & I see coding/programming in the other hand. I have absolutely no idea how they combine to make one package. For example, when playing Sonic, I see the backgrounds, I hear the music, I control the character, I get a sense of the games physics...how all that is achieved through lines of text & numbers, I have absolutely no idea. So where the heck do I begin!


  • Advertisement
  • Registered Users Posts: 8,408 ✭✭✭RedXIV


    EnterNow wrote: »
    I'm serious about it in the sense that I'd like to make a basic game & enjoy the journey. I'm not looking to be the next Gabe Newell or anything {though I do like hamburgers}.

    The problem for me is, I see a finished game in one hand {say Sonic 1}, & I see coding/programming in the other hand. I have absolutely no idea how they combine to make one package. For example, when playing Sonic, I see the backgrounds, I hear the music, I control the character, I get a sense of the games physics...how all that is achieved through lines of text & numbers, I have absolutely no idea. So where the heck do I begin!

    This is why the likes of gameMaker and Construct2 are so useful to start with. Rather than, for example, worrying about importing textures to use as the background, worrying about it being behind the player (further on the Z axis), ensuring it doesn't overflow etc which are all things to look at with code. In GameMaker, it might be a simple "Open file to set background" and it will look after all this stuff. OK its not hardcore coding but its a step in the right direction. If you make a game in one of these tools, you will be in a better position to then make a game with code, the logical steps that you used just need more detail is all.

    So I'd suggest letting one of these tools hold your hand for the first attempt anyway, get something up and running, even if its a square responding to key presses, that's an achievement.


Advertisement