|
|
| Who Needs Direction? |
|
Mark Oates
Member #1,146
March 2001
|
Quote: we should record the details in a single place so we can look these things up easily as time goes on. The best and most concise references right now are 23's posts (the long ones). I reviewed them last night before I went to bed and found some things I had missed. I recommend that other people do that as well. -- |
|
Matt Smith
Member #783
November 2000
|
Trezker, did you use Dia for that UML? Can we have the file to play with please? Quote: I don't see any value in having a Play Game sub-menu. This was to provide an opportunity to put more games (or expansions) in the same exe . The first main menu would be the framework's, and could have [PLAY GAME1], [PLAY GAME2] [WEB UPDATES(clickthrough;D)] buttons. It would have its own style (flames for Flamework (earlier typo) is what I'm thinking, done in a slick, corporate style, so if you a) don't read it b) don't press a key and c) only have 1 game in the exe, then after a few seconds it would jump straight to the game's main menu, and you would think you'd just seen a publisher's logo. It's like lilo in a launcher The Game's main menu would be the individual game's main title screen, with its own graphics etc. |
|
bamccaig
Member #7,536
July 2006
|
Hmmm, as some of you know I've recently become interested in Unicode programming. And it just occurred to me that it might be a nice thing if we use Unicode internally. Assuming the story will be told 100% through text, we could even conceivably store said text in locale-specific XML files, which would allow for easily translating the game to other languages. And with Unicode, it would conceivably enable the game to be translated to any language. Obviously, the font we chose would have to support it as well. We'd need to make sure the "speech bubbles" and any other text controls were dynamic too. They'd need to be able to calculate the required horizontal and vertical space and split the text appropriately across lines and screens... There might be issues with incorrectly formatting some languages, though members fluent in those languages could advise us on those quirks... It would probably add a considerable about of work so it should be put on the list of extra features or whatever. -- acc.js | al4anim - Allegro 4 Animation library | Allegro 5 VS/NuGet Guide | Allegro.cc Mockup | Allegro.cc <code> Tag | Allegro 4 Timer Example (w/ Semaphores) | Allegro 5 "Winpkg" (MSVC readme) | Bambot | Blog | C++ STL Container Flowchart | Castopulence Software | Check Return Values | Derail? | Is This A Discussion? Flow Chart | Filesystem Hierarchy Standard | Clean Code Talks - Global State and Singletons | How To Use Header Files | GNU/Linux (Debian, Fedora, Gentoo) | rot (rot13, rot47, rotN) | Streaming |
|
Matt Smith
Member #783
November 2000
|
Allegro has full support for UTF-8 built in. Fonts are the only concern. I made a full Unicode Allegro font from a free one but it's rather plain. I think we should suck it up and let the user select the best font on their system, rather than try and supply a good, complete one with a compatible licence (which would be a huge file anyway) This removes stylistic control from the design team, unfortunately. On the subject of internationalisation, I've got an evil plan for the Japanese version. Let's do to them what they did to us with Zero Wing. Nobody with any degree of fluency shall be allowed to assist. Otakus + Google Translate = Mirthful Joy Feeling \:)/ Quote: We're going for a subtle mystery plot here Scooby Dooby Doo! |
|
alethiophile
Member #9,349
December 2007
|
I think that internationalization/translations should wait until we maybe have a working game. -- |
|
Thomas Fjellstrom
Member #476
June 2000
|
Quote: I find it much easier to set the SVN_EDITOR environment variable It'll actually use the EDITOR variable on linux/unix which is normally set to vi or something similar, though mine is set to "nano", and I just prefer to pass short messages in, instead of messing with the editor when it launches. Basically I only use it when I have long messages to apply. -- |
|
Trezker
Member #1,739
December 2001
|
I used Umbrello to make that UML. |
|
Matt Smith
Member #783
November 2000
|
Quote: I think that internationalization/translations should wait until we maybe have a working game. Yeah, but it's worth considering before hand-drawing a custom multi-coloured font. |
|
Thomas Harte
Member #33
April 2000
|
Do you guys have any consolidated design documents, including role allocations, for those of us that are dipping in and out of the conversation to use to keep up? It might increase your probability of getting further volunteers. Did you pick a lead programmer? EDIT: as ever, I can throw my code for drawing TrueType fonts with OpenGL geometry at anyone who is interested. Though I suspect you're all heading for a CPUy, pixely game? [My site] [Tetrominoes] |
|
GullRaDriel
Member #3,861
September 2003
|
There are still no code ? Still on your UML thing ? Move in team ! Go for the Objectives ! EDIT: Thomas said: Did you pick a lead programmer? Trezker is IIRC. "Code is like shit - it only smells if it is not yours" |
|
23yrold3yrold
Member #1,134
March 2001
|
The most ambitious thing we should be worrying about, text-wise right now, is word wrap. If we're following good coding principles, upgrading the engine to handle more will be simple. If anyone is coding anything, it should be a general framework. Whoever is on that should just start writing a simple engine that handles the main menu, player movement, and changing maps. Once the world is more or less established we can add NPC interaction to it, quest points, simple GUIs for player inventory, enemies, items, scene scripts/triggers, and the like. So if the coding team is looking for "step one", there you go. Write a basic framework that we can plug all the other crap into later. Simple main menu, the player can move around simple tilemaps and switch maps by stepping on "doors", and just have lots of comments what should go where later. Keep the design open enough that we can add in everything else easily. For now the player can be {int x, int y, BITMAP* sprite}. Tilemap can be {int w, int h, int[][] map} and each number in map can be for drawing a rectangle of a solid color. Simple like that. In the making of the framework we'll have figured out how to handle everything. Will you keep separate arrays of each object? Use polymorphism and STL to keep every game object in one big vector<>? Figure it out now! -- |
|
Trezker
Member #1,739
December 2001
|
I've made a second stab at UML. This time I made a god class which is preached against by OOP gurus... But it's simple, and we can split it later. http://www.allegro.cc/files/attachment/596355 |
|
Thomas Fjellstrom
Member #476
June 2000
|
is Game a global base class? So all those objects are all in a "isa" relationship with it? Or does Game just "havea" (contain) bunch of other objects? -- |
|
Trezker
Member #1,739
December 2001
|
Game has a lot of stuff. It's the manager of everything. I figure Monster, Player and NPC will share a lot of functionality so I made a Unit base class for them. I don't know why I bunched in trigger with them though... |
|
alethiophile
Member #9,349
December 2007
|
On the subject of word wrap: I have some code from my TINS entry that wouldn't be too terribly difficult to put in. -- |
|
bamccaig
Member #7,536
July 2006
|
alethiophile said: I think that internationalization/translations should wait until we maybe have a working game. Sure, but some thinking ahead might make it a lot easier in the long run. It would be nice to be able to just drop a new translation file, pick an option from a dynamic control, and have the game 100% translated. Again, optional, but I think it's worth consideration before starting. 23yrold3rdold said: If anyone is coding anything, it should be a general framework. Whoever is on that should just start writing a simple engine that handles the main menu, player movement, and changing maps. Once the world is more or less established we can add NPC interaction to it, quest points, simple GUIs for player inventory, enemies, items, scene scripts/triggers, and the like. So if the coding team is looking for "step one", there you go. Write a basic framework that we can plug all the other crap into later. Simple main menu, the player can move around simple tilemaps and switch maps by stepping on "doors", and just have lots of comments what should go where later. Keep the design open enough that we can add in everything else easily. For now the player can be {int x, int y, BITMAP* sprite}. Tilemap can be {int w, int h, int[][] map} and each number in map can be for drawing a rectangle of a solid color. Simple like that. In the making of the framework we'll have figured out how to handle everything. Will you keep separate arrays of each object? Use polymorphism and STL to keep every game object in one big vector<>? Figure it out now! Notice how when KQ was suggested, people started looking into the code, immediately saw that it was overwhelming and ugly (by their standards) and decided they hated it? The same thing can happen to the code written by others if it's not governed by the project. The framework is going to be the foundation of the project and if people don't like it or find it difficult to understand, they probably won't be too excited about the project. I think we would benefit from coding standards and a thorough design. It might even be a good idea to use an automatic source formatter on the code before going into the repository (i.e. GNU indent). I personally have a compulsion to reformat code that I find difficult to read. This would allow me to hopefully do that without actually changing anything (in theory, GNU indent could put it right back again). It could be used on the client, instead, but then the repository itself would likely end up storing a lot of white-space differences (I think Subversion can ignore white-space, but that just seems like it would grow increasingly messy). It just seems like some members would rather dig this project an early grave than take it's time and succeed.
-- acc.js | al4anim - Allegro 4 Animation library | Allegro 5 VS/NuGet Guide | Allegro.cc Mockup | Allegro.cc <code> Tag | Allegro 4 Timer Example (w/ Semaphores) | Allegro 5 "Winpkg" (MSVC readme) | Bambot | Blog | C++ STL Container Flowchart | Castopulence Software | Check Return Values | Derail? | Is This A Discussion? Flow Chart | Filesystem Hierarchy Standard | Clean Code Talks - Global State and Singletons | How To Use Header Files | GNU/Linux (Debian, Fedora, Gentoo) | rot (rot13, rot47, rotN) | Streaming |
|
alethiophile
Member #9,349
December 2007
|
The thing is, if we don't get anything done, then it's just a lot of talk and no code. I think we need to do something. -- |
|
bamccaig
Member #7,536
July 2006
|
alethiophile said: The thing is, if we don't get anything done, then it's just a lot of talk and no code. I think we need to do something.
I agree. Something like defining coding standards and modelling the application. Doing it right takes time. If you disagree with me then you'll be every manager's dream, every maintainer's nightmare, and every user's enemy. -- acc.js | al4anim - Allegro 4 Animation library | Allegro 5 VS/NuGet Guide | Allegro.cc Mockup | Allegro.cc <code> Tag | Allegro 4 Timer Example (w/ Semaphores) | Allegro 5 "Winpkg" (MSVC readme) | Bambot | Blog | C++ STL Container Flowchart | Castopulence Software | Check Return Values | Derail? | Is This A Discussion? Flow Chart | Filesystem Hierarchy Standard | Clean Code Talks - Global State and Singletons | How To Use Header Files | GNU/Linux (Debian, Fedora, Gentoo) | rot (rot13, rot47, rotN) | Streaming |
|
Trezker
Member #1,739
December 2001
|
I AM modeling, not getting much of a discussion going though. |
|
23yrold3yrold
Member #1,134
March 2001
|
Quote: Sure, but some thinking ahead might make it a lot easier in the long run.
The basic idea is we're trying to keep this from being a "long run". It looks like there's still some discussion on how the classes will be organized, and that's fine since it's actually important. But don't sweat too hard over it; agree on a design that works and start implementing it. Quote: I AM modeling, not getting much of a discussion going though.
Yup, and it's appreciated. My only input is that all the managed objects should derive from a base class but you've got that anyway. -- |
|
alethiophile
Member #9,349
December 2007
|
Since people are talking about classes, it seems that we'll be using C++. I don't know too much about that, but there's got to be some code we can write that is independent of how we decide to organize the classes. -- |
|
bamccaig
Member #7,536
July 2006
|
Trezker said: I AM modeling, not getting much of a discussion going though.
I've never written a game like this so personally I don't know too much about the overall design/structure. The model appears to be missing items/weapons. Are we still planning to have upgrades that the player can find? And what about NPC's and Monsters. Are either of them going to be able to have/use items and weapons? It think it's awkward that the ScriptGlue and Script are not related at all... I think it makes better sense to have Game -> ScriptGlue -> Script and the game itself will still manage everything, but scripts are then able to communicate with the game (i.e. to control Units, for example). My only experience with a game engine and scripting was with Torque during a short 3-day "class" (?) at the local university. I don't remember the how, but C++ classes in the actual engine were bound to scripting classes in that if you called a method on an object in script it would be called in the actual engine, resulting in the desired behavior. That's how I see this going... Anybody done this before? Is this what we're planning? Does anyone see value in a SpeechBubble class for managing the text, etc.? This way an actual Unit could just say() something and it's SpeechBubble would take care of the actual drawing. We'll likely need some way to tell it to switch pages though (i.e. say_more()) when given user input.
http://www.allegro.cc/files/attachment/596374 Essentially, CGame represents the actual game (:P). So far the game contains a configuration manager (CConfigManager), save game manager (CSaveGameManager), script manager (CScriptManager), tile maps (CTileMap; though perhaps we also want a tile map manager), and units (CUnit). CGameObject is a base class that everything derives from, directly or indirectly. Obviously all of these classes will need to be wrapped in a namespace. There is a lot still missing... Critique/revise! For those of you familiar with the kinds of work that will need to be done (collision detection, path determination, etc.), it might be a good idea to start thinking of how to wrap these things into a framework that can later be used... ** EDIT ** Hacked menu system back into it (Umbrello crashed and I forgot the menu system the next time around). I'm not sure why I went with "System"... I guess for the sake of the model, "Manager" and "System" are synonymous. So we can pick whichever we prefer. UML would be so much more attractive if the software was intelligent enough to automatically arrange entities and relationships so they were readable and didn't overlap... :-/ Trying to do this manually, as demonstrated in the above class diagram, is a bitch. :P -- acc.js | al4anim - Allegro 4 Animation library | Allegro 5 VS/NuGet Guide | Allegro.cc Mockup | Allegro.cc <code> Tag | Allegro 4 Timer Example (w/ Semaphores) | Allegro 5 "Winpkg" (MSVC readme) | Bambot | Blog | C++ STL Container Flowchart | Castopulence Software | Check Return Values | Derail? | Is This A Discussion? Flow Chart | Filesystem Hierarchy Standard | Clean Code Talks - Global State and Singletons | How To Use Header Files | GNU/Linux (Debian, Fedora, Gentoo) | rot (rot13, rot47, rotN) | Streaming |
|
Trezker
Member #1,739
December 2001
|
First, I don't see the point in putting a C in front of every class name. I find it very distracting. I see how a universal base class might be useful, especially for saving and loading games. We should discuss how saving should work. As for items and weapons. I don't think they will cause much trouble. Your model for that looks good. In my model Script wraps a script specific to the instance that uses it. A certain NPC for instance needs to be bound to its specific script. Scriptglue is there to make various functions available to all scripts. So the connection between Script and Scriptglue is made in Lua or whatever we use, not within the engine. |
|
bamccaig
Member #7,536
July 2006
|
Trezker said: First, I don't see the point in putting a C in front of every class name. I find it very distracting. Personal preference, I guess. I like it because it frees up ClassName as a module-scope identifier, which frees up class_name for limited-scope identifiers. For example...
Trezker said: Second, I prefer Speech_bubble over SpeechBubble. Which is exactly why we should nail down our coding standards. Odds are a lot of us will be disappointed that the project won't be using our standards, but it's a little bit easier to deal with when it's the "project's" standards as opposed to "his" or "her" standards. And as I said, formatting can hopefully be handled mostly with software (i.e. GNU indent). The naming conventions will need to be nailed down, but that's also why it makes sense to document the entire project model... It won't be individual programmers coming up with names for things. It will be them implementing an already detailed, named, project idea. Trezker said: In my model Script wraps a script specific to the instance that uses it. I think we're the same here... Trezker said: A certain NPC for instance needs to be bound to its specific script.
I haven't actually used scripting in a game engine before so I'm a little confused as to how it works exactly... -- acc.js | al4anim - Allegro 4 Animation library | Allegro 5 VS/NuGet Guide | Allegro.cc Mockup | Allegro.cc <code> Tag | Allegro 4 Timer Example (w/ Semaphores) | Allegro 5 "Winpkg" (MSVC readme) | Bambot | Blog | C++ STL Container Flowchart | Castopulence Software | Check Return Values | Derail? | Is This A Discussion? Flow Chart | Filesystem Hierarchy Standard | Clean Code Talks - Global State and Singletons | How To Use Header Files | GNU/Linux (Debian, Fedora, Gentoo) | rot (rot13, rot47, rotN) | Streaming |
|
Matt Smith
Member #783
November 2000
|
Quote: Since people are talking about classes, it seems that we'll be using C++. I don't know too much about that, but there's got to be some code we can write that is independent of how we decide to organize the classes. The low level stuff, although I can't think of what isn't in Allegro already, except the tile renderer, and that has to wait for the game spec. Quote:
I haven't actually used scripting in a game engine before so I'm a little confused as to how it works exactly... I think you can have a library of functions in one script, which can be called by name from the NPC_update() func in the binary. You might need a flag to distinguish scripted from hard-coded actions or at worst a vtable. Or, you could have scripted funcs that wrap the hard-coded ones, so all NPC actions are scripted. Are we agreed that LUA is the scripting language? The only alternatives I can think of are Python (making an interface API is verbose) or Ch which may have licence problems with the free version. I can't tell from reading it if it's allowed to distribute binaries with Ch embedded. |
|
|
|