GSoC Chopper Particle Engine

From The Battle for Wesnoth Wiki


This page is related to Summer of Code 2012
See the list of Summer of Code 2012 Ideas



This is a Summer of Code 2012 student page



Contents

Description

Alexandru Busila - Particle Engine

Abstract: I will be improving on the current animation and terrain engine (though I don't see why they are separate) by adding an extension to it. This extension will be in the form of an interface that contains all the rendering info for each frame (for the particle object) and will use SDL to do its rendering internally. This class will have programmable parameters that will be used through Lua.

IRC

Chopper

SoC Application

Submitted to google

Questionnaire

1) Basics

1.1) Write a small introduction to yourself.

Hello, my name is Alexandru Busila. I am 5”10’, am male, have green eyes, am a video games, bikes and scotch lover and am 20 years old. Although in this questionnaire I might be sidetracking sometimes for fun times, it is because I know you guys take your time to read us fully. I shall then try to take my time writing this well, giving as much detail about me and make your time worth it while you are reading :). And also it’s a good way for you guys to remember me and know me better :).

1.2) State your preferred email address.

It will be included in the official form through google application.

1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?

"Chopper" since Alexandru was already taken :(

1.4) Why do you want to participate in summer of code?

This summer I wanted to start doing a small minimalistic (I know, thats like nano) interface, something like a game library encapsulating basic usability, using Lightweight Java Game Library. For the readers that don’t know what it is, in few words it’s a Java link to binaries of OpenGL, OpenAL and OpenCL plus some basic game library features. I wanted to do with that library a small turn based strategy free movement trading card game? Yeah lots of influences. Mojang even wants to release their own similar game named Scrolls, though I must say I had this idea before their announcement. But that is what it is: a small project without any major influence on my future career (maybe). Seeing an opportunity such as GSOC and working on a open source game, which by the way has some interesting common features with the game I would like to do, just blew me up. It is also a perfect occasion to learn more on game development than from just reading books; I am actually there on the “frontlines”.

1.5) What are you studying, subject, level and school?

I’m currently studying in Software Engineering at McGill University in Montreal, Canada, finishing the first year of my 3 year bachelor. Courses taken until now (to give you a rough idea) are Calculus, Probability, Algebra, Algorithm Design (all of the non-grad ones), Software Systems (the intro ones, no courses on operating systems yet) and Programming Paradigms.

1.6) What country are you from, at what time are you most likely to be able to join IRC?

As stated above I currently live in Montreal, Canada. My time zone is Eastern or -05:00UTC, which will make me available on IRC pretty much in the 15:00-04:00UTC interval. I was originally born in Romania.

1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.

I will be having a small part-time job (last summer it was less than 15h per week give or take). Some weekends will be taken off maybe for some family time.


2) Experience

2.1) What programs/software have you worked on before?

Eclipse, NetBeans, JDeveloper, Visual Studio (2008 and 2010), Code::Blocks (been a really long time since though, now that i have Visual Studio), VMware (mostly to not bloat my current OS with software and for linux on windows and academic purposes), Photoshop, Macromedia Director (I seriously prefer Shockwave more than Flash for as how the management of resources and sprite engine was done, although HTML5 canvas feature renders both of them quite obsolete now), a (tiny) bit of Dreamweaver (I found a plain editor with colours did almost the same job i.e. NotePad++) I also have used the most critical development software ever: vi (editor)

2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)

Apart from university small projects in teams, unfortunately not. This is one thing I would like to remedy this summer hopefully with your help :).

2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?

No. This is my first participation in such an event.

2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.

No. I was/am afraid to jump into such full scale organized big project without a small hand reaching there for me and helping me out :D.

2.5) Gaming experience - Are you a gamer?

My definition is gamer. Games are the particular reason why I decided to choose programming for my career.

2.5.1) What type of gamer are you?

I am pretty open minded. I love plain fun games like arcade or mindless violence as it makes me relax as illogical as it sounds, as much as the challenging ones which require second thinking and/or practice.

2.5.2) What type of games?

Very happy you asked. I will be moderate and not make a full 1000 words sentence putting all of the games I prefer followed by a comma, as it might (... will) make the reader rather uncomfortable reading me and I want to avoid leaving any accidental negative aspect of myself :D. I will put only the most notable ones i remember on the spot.

  • Currently playing (starting with the most occurrent): Dota 2 (beta), Starcraft 2, EvE Online, Tribes Ascend (beta), Sins of a Solar Empire (with friends in lans sometimes replaced by some classical Warcraft 3)
  • Lifetime Favorites (no order whatsoever): Mass Effect Series (the ending in the third was a bit a letdown :\), Dragon Age : Origins (not the second one), Oblivion and Skyrim of the Elder Scroll Series, Bastion, Deus Ex: Human Revolution, Resident Evil 4, Unreal Tournament series (instagib mode oh yeah!), Total War series (I played pretty much every one I think), The Binding of Isaac, The Witcher (haven’t played the second yet); I will stop here I guess :(.
  • Future releases: Diablo 3, Borderlands 2, STALKER 2
2.5.3) What type of opponents do you prefer?

Human mostly. The same game is never predictable no matter how long you play. Playing vs AI for too long makes you learn his decision tree and eventually no matter what hacks he might use, a human can surpass him. Though if we reinterpret the AI as a zombie, mashing a swarm into my face would make indeed the game more challenging.

2.5.4) Are you more interested in story or gameplay?

Both play a major role. Some games don’t require one or another, but a good combination of both (BioWare does a great job at this although Dragon Age 2 and Mass Effect 3 derailed on some aspects) makes a game that for me is very enjoyable, speaking of the single player. Multiplayer ones don’t have to go to high extents in their single player story. I must say though that bad gameplay can actually make me feel uncomfortable playing a game (more than story unless it’s mega corny). If a game is unbalanced, my geek math side comes into action and rages :). For example Wargame : European Escalation (Sins of a Solar Empire is also a good example); players have actually made a sure win strategy by massing certain cheap units and rushing to the enemy base, blowing them off whatever the other player used as tactic except the same tactic of course. It just needs a bit more balancing, though this might prove itself difficult on the spot since that game sure has lots of different units.

2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.

I have seen this game online since a long time ago. But with all these AAA games I am ashamed to say that I never gave it a try. A while ago I looked at some footage on youtube since I was aching for some classic grid game, something in the line with Dungeons & Dragons Minis on tabletop not requiring the big tabletop. Unfortunately, Wesnoth didn’t seem to be what I was looking for at the moment. I wanted a more tactical hard counter rock paper scissors or magic utilities grid game, so I ended up playing Fire Emblem (which is awesome!). I installed Wesnoth as soon as I saw that you guys are on GSOC and I’m currently digging through the campaign. The gameplay is quite easy to grasp.

2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our S­­V­­N (during the evaluation period or earlier) please state so.

No, I have not contributed any patches until now. I am currently working through my last weeks of this semester at my university and my free time is very limited.


3) Communication skills

3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.

Since entering McGill (english university), my English level reached a new level. I can say both speaking and writing wise I am fluent enough to not have any major issues. Although this is my second best language at the moment, it will not stay this way for long, as it will soon become my primary I think.

3.2) What spoken languages are you fluent in?

My most fluent language is French, since I am living in a French province of Canada. All my highschool and college was done in this language. English is my second best language and currently I am using it the most I would say. Romanian is my native language, but it is also the one I am the least good in, since I’m not using it very often.

3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.

Apart from some casual l33t and n00b chat talk, I am usually very player/opponent friendly. I mean, when I am playing a multiplayer game I am playing it for the challenge and fun, not for the fame. Although, I must say that in Dota 2 I am quite l33t :).

3.4) Do you give constructive advice?

For the next two questions I will assume it is about project advice and not personal advice too much, as the latter would mean I did something very wrong :\. If I have a valid point, yes. I mean, this will not be really happening, I think. Although if I have an idea, I will be trying to push it forward. You will be seeing me mostly giving “advice” on game design, and by this I don’t mean the current one is bad, I mean future ideas, new game mechanics for special scenarios etc. since creating the puzzle is always more fun than just playing it in my perspective and game design is always something fun to do as much as being an architect or code monkey (whatever works best) while doing the coding. I am the guy who likes to reinvent the wheel, though unfortunately I learned the hard way that without ressources it’s not always the best path to take.

3.5) Do you receive advice well?

I am a reasonable man. Just explain it to me what I did wrong or what I should do better and I will seriously take it into consideration. I also usually try not to take things too personal especially if we are on a chat, which doesn’t convey the exact emotions of people who type; also it is fully understandable some of you work and may have a bad day, just like everyone else. We are here to make a game and learn things right?

3.6) Are you good at sorting useful criticisms from useless ones?

I will literally (figuratively if you prefer) eat anything you say to me if it’s in the purpose of ameliorating myself. I guess the answer is no, for as long as I am still learning the ropes. If it is about me, I guess since I am new, I won’t have anything to say much at the beginning. I will be learning how you guys work before giving any critics.

3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to "see how it turn out", taking the risk of having it thrown away if it doesn't match what the project want.

Empiricism vs. Rationalism? If it’s possible, I prefer discussing the ideas beforehand, for preparation and clues as to what to investigate in order to make it good from the start. But making it good from the start, is never actually happening, and until now at least for me, the best way of learning how to construct good code is by actually trying it and testing it. If I have to throw it, then so it shall be since it is always a learning process. That is the part where the initial time investment before the actual coding actually pays off, since we throw less code in the long run. I am autonomous for as long as my friend Google is besides me :D, or should I say internet.


4) Project

4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?

I chose the Particle Engine project from your original project list. I want to go deep into the code which is used for rendering the tiles for each level to implement either dynamicness or .gif rendering for every sprite available. In order words from what I understood, I will be trying to do a general piece of middleware which every level needs to access and use in order to render the playable aspect of the game. While working on this part, and if time allows, maybe go into the between the scenarios project code as well, since it uses the same underlying structure (SDL). The only thing I am afraid is to actually have chosen something which is a bit out of my league for just the time allocated. This project pretty much requires me to have a good understanding of how the current code works and replacing it with a better approach. The major hurdle will be getting dirty into the code of Wesnoth and learn it. I only hope the part I am taking care of is a separate cell, meaning any functionality of it is not used in anything else than the rendering system.

4.2) If you have invented your own project, please describe the project and the scope.

I have done a Minesweeper in Java using Swing libraries for the window rendering and mouse caption. Very basic game. I also have done a failed attempt to a 3D engine, which made me learn C++, compiler intrinsics, new x64 assembly standards compared to the x86 ones and a bit of the DX10 library. I only managed to make a revolving cube with all of this :). It had a texture though :D. The scope of all my projects was small, mostly curiosity and education purposes.

4.3) Why did you choose this project?

I am very interested in 2D rendering at the moment after realizing 3D games are quite some pushovers without some 3ds max or Maya or Lighwave skills. Want to delve deep into the implementation and usage of SDL itself to check how things work underground. I am also a middleware and low level guy, not scared to go as low as assembly for some extra control or functionality or just bragging rights. Although I know from experience that getting too low is sometimes just a time eater and not an actual big benefit unless critically required.

4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like "I booked holidays between A and B" and "I got an exam at ABC and won't be doing much then".

This will be a very rough sketch of how I see the project going on. Every step requires the last one to be taken care of first. Major hurdle will be going deep into Wesnoth code and learning it. No outstanding holidays until now.

  • March/April :

Reading more about SDL (documentation, examples, etc.), going into the actual piece of code taking care of the current map rendering, starting some ideas on irc or forums (which I prefer). Doing some small bits of Lua (more like examples of implementations used by you guys) and learning how it is currently used in the actual code.

  • May:

Getting feedback from you guys about SDL and trying to code a small standalone implementation. Studying the Wesnoth code to get a more general idea as to how the integration should be done.

  • June:

Going with the project full time. Should finish the integration of the basic functionality.

  • July:

Add some assets as to test it and try to make it bug free.

  • August:

Unknown yet.

4.5) Include as much technical detail about your implementation as you can.

I will be changing the source files (C++) taking care of the level rendering in order to add new functionality (like animated grids).

4.6) What do you expect to gain from this project?

Now sorry for me wording it this way and being corny but it is true. I expect to gain the most useful item that I need for the final dungeon level, where I am destined to meet the final boss (employer) and use it to win against him : experience.

4.7) What would make you stay in the Wesnoth community after the conclusion of GSoC?

It all depends on how it goes this summer. As I said, I never actually have been part of a open source group, so I don’t know how things will go.


5) Practical considerations

5.1) Are you familiar with any of the following tools or languages?
  • Sub­­version - No, I only had an introductory view to revision control systems in general.
  • C++ - Yes. Not yet seen at my university, but I went down and dirty by myself with macros, compiler options, intrinsics (since x64 compiler in Visual Studio doesn’t allow inline assembly like the good ol’ x86 does), still need to check new C++ 11 standard.
  • STL - I used a good part of the library.
  • Boost - No experience, though I read some small things on it a while ago, and I know there’s a dedicated site.
  • SDL - No experience whatsoever.
  • Python - Have done some small python scripts at school; being a scripting language as it is, it’s pretty easy improve on my level
  • build environments (cmake) - Had an introductory view and some exercices. Nothing more. Shouldn’t take much time to get used to it.
  • WML - No experience whatsoever, though as a markup language shouldn’t take long to learn.
  • Lua - No experience, though I read a bit on the subject as I was curious about it since it is quite well spread as a script language for games.
5.2) Which tools do you normally use for development? Why do you use them?

I use Eclipse and vi mostly. A major part of my school assignments for school are done in Java (Eclipe) and SML/NJ (vi) or other languages (vi) which need to be compiled on school servers (linux) in order to be accepted for the hand ins. For my personal hobby of watching the Unreal Engine 3 source code or the idTech 3 one, or compiling a 3D cube which revolves around himself, I am using Visual Studio (really love the interface).

5.3) What programming languages are you fluent in?

I can afford to say I am quite good in Java and C++ if it’s about lexical comprehension. The only thing left is to expand my vocabulary. I also know Python, HTML (just enough to get around), SML/NJ, Bash (not something I like) and Brainfuck (although lets be serious, I never really have done something with it :), oh and some assembly though it is not a language in itself : MIPS and x86/x64 Intel with MASM (though the Intel assembly has been quite a while ago).

5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of "there is no way to contact you" does arise!

Of course. The number will be provided on my official form.

This page was last edited on 21 March 2013, at 03:06.