GDR Forum Index
Podcast Podcast
Dev Dev Logs
Search Search
RSS RSS
Register Register
Log in Log in
Reply to topic GDR Forum Index -> Game Developer's Refuge -> Development Log - Acronia Page Previous  1, 2, 3, 4  Next
View previous topic :: View next topic  
Author Message
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Mon Jan 26, 2015 5:06 am    Post subject: Reply with quote

I keep two TODO lists, both private on my Google Drive. One is just your normal todo stuff: fix this, add that, optimize those. When I finish something, it gets struck out, and when a suffifient number of items are struck out, they get moved to a second list, "TODO (done)."

Additionally, if -- for one reason or another -- I decide that an item is not worth the time or effort to do, I color it in red.

Two things I've noticed as I get further into development:
- The done list is now *way* longer than the to-do list. Done: 12 pages. To-do: 3. This is awesome.
- As I look back over the last few pages of the done list, there are more and more red items as time moves closer to the present. This isn't so awesome, of course. But if it means I actually friggin' ship this year, then I'm fine with that.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Tue Jan 27, 2015 8:22 pm    Post subject: Reply with quote

Took a bunch of screenshots of the game's editor tonight.

It's fully integrated into the engine. Ctrl-Shift-E at any point during the game launches it.

Album:
http://imgur.com/a/nGYL4
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Wed Jan 28, 2015 6:15 am    Post subject: Reply with quote

Teleporter ambushes are now a thing. Create a room off the edge of the map, fill it with baddies, have the player walk over an invisible action tag that turns the floor of the monster closet into a conveyor. The monsters are pushed into a teleporter that takes them near the player's location. Additionally, the monsters can be alerted to the player's presence upon arrival, even if they can't immediately see her.

Tonight after Day Job, I'm going to add an option to the map format that allows it to set its own arbitrary camera bounds. That will allow me to hide things (like monster closets) beyond the edges of the map without the camera moving too far and alerting the player to the fact that, yes, there is something hidden under the floor, or in the ceiling, or behind the walls.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
mikedoty
Developer

Joined: 18 Mar 2006
Posts: 1788

PostPosted: Wed Jan 28, 2015 10:16 am    Post subject: Reply with quote

AdmiralTofu wrote:
Album:
http://imgur.com/a/nGYL4


That looks like a lot of work! Are all of those dialogs fully functional already?
_________________
The end of the game, yes, is pretty much getting the weapon and killing off the population.
mashup games . com | Finally! - A Lode Runner Story
View user's profile Send private message Visit poster's website AIM Address
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Wed Jan 28, 2015 10:31 am    Post subject: Reply with quote

mikedoty wrote:
AdmiralTofu wrote:
Album:
http://imgur.com/a/nGYL4


That looks like a lot of work! Are all of those dialogs fully functional already?


Yep! All of it. The editor was developed alongside the engine as I went. In fact, the GUI system, which was pretty much in place and feature-locked by the time I really started getting my hands dirty on the engine, was the major testbed for me learning C++ during the first year of the project.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
Sirocco
Moderator

Joined: 19 Aug 2005
Posts: 9453
Location: Not Finland
PostPosted: Wed Jan 28, 2015 4:33 pm    Post subject: Reply with quote

Oh cool. You are splitting your sprites into composites.
_________________
NoOP / Reyn Time -- The $ is screwing everyone these days. (0xDB)
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jan 29, 2015 7:30 am    Post subject: Reply with quote

Yeah, that was one of my very earliest design decisions, even way back when I was coding the thing in FreeBASIC. I knew that with all the different actions I wanted the player to be able to do, and the variety of weapons I wanted to provide, having an entirely new sprite for each action, pose, and weapon combination would quickly get out of hand. I remember playing Abuse for research during the few weeks between when I suspended AiR and when I started Acronia (then named Threshold... fun fact). The "a-ha" moment when I figured out that the sprites were split into components was a big game-changer.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
0xDB
Developer

Joined: 26 Dec 2005
Posts: 1666
Location: Your consciousness.
PostPosted: Thu Jan 29, 2015 7:31 am    Post subject: Reply with quote

AdmiralTofu wrote:
In fact, the GUI system, which was pretty much in place and feature-locked by the time I really started getting my hands dirty on the engine, was the major testbed for me learning C++ during the first year of the project.
Having a strong GUI system really helps. I still want to write my own someday... I am certainly not going to hard-code GUI stuff again like in previous projects. :)
_________________
0xDB
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jan 29, 2015 7:36 am    Post subject: Reply with quote

Dennis wrote:
Having a strong GUI system really helps. I still want to write my own someday... I am certainly not going to hard-code GUI stuff again like in previous projects. :)


What's really "fun" is when you have the GUI system complete, but no GUI editor yet. So you have to hard-code the GUI for your GUI editor so that you can visually edit your GUI in your editor. Yo dawg.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
0xDB
Developer

Joined: 26 Dec 2005
Posts: 1666
Location: Your consciousness.
PostPosted: Thu Jan 29, 2015 7:52 am    Post subject: Reply with quote

AdmiralTofu wrote:
Dennis wrote:
Having a strong GUI system really helps. I still want to write my own someday... I am certainly not going to hard-code GUI stuff again like in previous projects. :)


What's really "fun" is when you have the GUI system complete, but no GUI editor yet. So you have to hard-code the GUI for your GUI editor so that you can visually edit your GUI in your editor. Yo dawg.
Hehe, I was thinking to make mine in a way where I can write some really minimal text files which contain definitions for the GUI bits and pieces in a custom format and then write a simple parser/interpreter which will generate the real code(or run-time GUI objects) from those simple definition files which I expect to be easier and faster to write than clicking and dragging stuff around with the mouse. That will not give me a WYSIWYG editor but when I get around to doing that, I could make the editor write those text-files for me and reuse the parser to create the GUI objects from the generated text files. I could even have a side-by-side editor in a first version where I have the definition file on one side and the generated GUI object visualized on the other. That might even be sufficient for my needs and easier to develop than a full featured mouse driven editor.
_________________
0xDB
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jan 29, 2015 8:02 am    Post subject: Reply with quote

Whoa. That would have been a lot easier than the way I went about it. I like your idea about the side-by-side editor. I take it to mean that the generated GUI object would update as you typed the definition? Or at the very least, there'd be a refresh button so you could see the changes right away?

If my GUI editor weren't so entrenched in its current mouse-driven design (and I'm done with all the major GUI forms I need for the editor, anyway), I'd do something like that myself. It actually does sound easier than the mouse-driven approach.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
0xDB
Developer

Joined: 26 Dec 2005
Posts: 1666
Location: Your consciousness.
PostPosted: Thu Jan 29, 2015 8:11 am    Post subject: Reply with quote

AdmiralTofu wrote:
Whoa. That would have been a lot easier than the way I went about it. I like your idea about the side-by-side editor. I take it to mean that the generated GUI object would update as you typed the definition? Or at the very least, there'd be a refresh button so you could see the changes right away?
Yes like that. It would update the generated object (unless of course it can not make sense/parse the current text in any meaningful way) either automatically or on a refresh command. I think that would be an efficient editor... in general... for all kinds of stuff, not limited to GUI objects.

The most important thing would be to keep the definition format really simple and free of clutter (XML comes to mind as a horrible example for how NOT to keep it simple and easy to type and read).
_________________
0xDB
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jan 29, 2015 8:15 am    Post subject: Reply with quote

Code:
[SPINNER]
Pos=24,32
Width=48
MinVal=-12
MaxVal=128
Increment=0.5
Tooltip="Set gravity value for this sector of the map"

[DROPDOWN]
Pos=...
...

_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
0xDB
Developer

Joined: 26 Dec 2005
Posts: 1666
Location: Your consciousness.
PostPosted: Thu Jan 29, 2015 8:32 am    Post subject: Reply with quote

I would simplify that further, relying on the fact that variable names typically do not contain whitespace and make whitespace syntactically meaningful.

Code:
SPINNER
  Pos 24 32
  Width 48
  MinVal -12
  MaxVal 128
  Increment 0.5
  Tooltip Set gravity value for this sector of the map


The parser would know by the indentation that the property is supposed to belong to the last, less indented, parsed "thing". The parser would know the value(s) start after the whitespace that comes after the first non-whitespace chunk in each line, because variable names do not typically contain whitespace.

The less special characters to type/read, the easier it is on the hands and eyes (imo).

This might be an unusual way to think about it but I have reached the opinion that computers should be trained to deal with stuff in human-friendly formats instead of humans being trained to write computer-friendly formats.
_________________
0xDB
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jan 29, 2015 8:39 am    Post subject: Reply with quote

Nooice.

Yeah, definitely easier to read. And parse, too. If it's not a space, it's a token of some kind. I like it.

(EDIT: Excepting tooltip, of course. But then, the parser would know that what follows is a string value, and read it as such.)
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
Gil
Developer

Joined: 14 Nov 2005
Posts: 2341
Location: Belgium
PostPosted: Thu Jan 29, 2015 8:46 am    Post subject: Reply with quote

AdmiralTofu wrote:
Whoa. That would have been a lot easier than the way I went about it. I like your idea about the side-by-side editor.
Isn't that how every commercial IDE in the world works already?

I actually don't like visual editors, I prefer the simple text format alternative. In fact, in recent times, I've done my GUIs in XML/CSS, because that's a format I like to work in. In my most recent experiments, I'm writing my GUI stuff in markdown/SASS, but I find SASS/LESS/etc not to be the elegant solution yet that markdown is versus html.
_________________
PoV: I had to wear pants today. Fo shame!
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jan 29, 2015 8:57 am    Post subject: Reply with quote

I honestly have no clue :) I've never worked on any GUI applications before. So, when it came time to do the GUI system for Acronia, the thought of doing anything other than a visual editor never even entered my pea brain.

One thing I did realize after I was deep enough into it that it was too late to go back: writing a high-quality visual editor is hard. For example, mine doesn't support selecting multiple widgets because I didn't feel at the time it would be necessary. Now, I run into cases all the time where it'd be awesome to be able to move around multiple widgets at once and I simply can't. Period. Full stop. So adding a new widget somewhere in the center of an already-existing form becomes a pain-in-the-ass task of nudging around one widget at a time until I've made a hole big enough to fit the new one.

With a text-based editor, I could have just edited the position values for all the widgets right there in the form description.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
0xDB
Developer

Joined: 26 Dec 2005
Posts: 1666
Location: Your consciousness.
PostPosted: Thu Jan 29, 2015 10:27 am    Post subject: Reply with quote

AdmiralTofu wrote:
So adding a new widget somewhere in the center of an already-existing form becomes a pain-in-the-ass task of nudging around one widget at a time until I've made a hole big enough to fit the new one.

With a text-based editor, I could have just edited the position values for all the widgets right there in the form description.
Or have mechanisms (e.g. special layout widgets) which automatically calculate and arrange all the widget positions and sizes in a container. Then adding a widget would be as easy as inserting it into some list structure and the layout mechanism could take care of the rest.

The Windows Presentation Foundation and also Java for example have layout features like that.

edit: or also, think how HTML viewers automatically arrange stuff on a webpage if positions are not hardcoded
_________________
0xDB
View user's profile Send private message Visit poster's website
Gil
Developer

Joined: 14 Nov 2005
Posts: 2341
Location: Belgium
PostPosted: Thu Jan 29, 2015 11:31 am    Post subject: Reply with quote

In any case, I'm thoroughly impressed with your GUI integration. So much, that I'll probably so something similar with my next project.

PoV posted this a while back that takes it even further:


_________________
PoV: I had to wear pants today. Fo shame!
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jan 29, 2015 8:47 pm    Post subject: Reply with quote

I only got about 20 minutes into that video (I was watching/listening to it at Day Job, and sneaking peeks at the screen whenever I could), but holy crap that looked awesome. Definitely intend to check out the rest of it.

----

CppCheck is hogging my IDE since I ran it as a Code::Blocks plugin, so I literally can't do any work until I ultimately decide that it's not worth it and just hit End Process. So I've got a few minutes. Let's spend my 100th forum post talking about tags. :)

Given that the game world is a static tilemap, there wasn't much available in the way of player interactivity with the environment, aside from killing baddies and maybe destroying decorations (which are implemented as world entities -- called "Things" -- rather than as tiles). That wasn't going to do. So I took a page from Doom and implemented action tags.

If you're unfamiliar with level building in Doom, a level is made up of sectors, which are defined by lines, (sometimes called linedefs). Sectors can be "tagged" with an integer. Linedefs can also be tagged in this manner and have actions assigned to them which, when activated, perform that action on any sectors that share a tag. So if I have a line tagged 3, and it's marked "open door, wait, close," and I throw the switch, any sector marked 3 will rise up into the ceiling (like a door), and close again after a brief period. Super simple stuff.

I implemented a slightly more complex system for manipulating the tilemap in Acronia. A given tile, if tagged, can have two tag numbers: its own tag ID number, and a "target" tag ID. The tag ID is used to identify that tile as ready to have operations performed upon it. The target tag is only required if the tile itself performs actions of its own. It tells the tile what tagged tiles (and Things, which we'll see later) to perform its specific action on.

A tag definition has several fields for further customizing its behavior: two floats; two bools; an RGB color; a string; whether or not a keycard is required to activate it; and sounds to play when activating/deactivating the tile. The first six args each have specialized meanings depending on what the specified action is.

Screenshots of tags in the map editor:
http://imgur.com/L3um6sW
http://imgur.com/Rk3cMeJ
http://imgur.com/tKFBPbs
http://imgur.com/O1EnCfW
http://imgur.com/XzEQelA

I won't run through the entire list of tag types, but here are a few examples:

- Open door, stay open
- Close door, stay closed
- Open door, wait, close
- Close door, wait, reopen

Exactly what it says on the tin. When activated, any tiles tagged with the target tag ID will open or close, if those tiles' spritesets include door animations. A collision exception will be added to the map to allow the player through. In the case of the "wait" types, argFloat1 tells the engine how many seconds the door will stay open or closed.

- Reset environment lighting
- Change environment lighting

The lighting for tiles marked with the target tag ID can be changed to a specified color, or reset back to their original color as specified by the map.

- Play environment sound
- Stop environment sound

A sound (referenced by name with argStr) will play, looped, at the position of any tiles marked with the target tag ID, or any sounds at those positions can be stopped.

- Alter environment
Target tagged tiles can be changed to include wind, or have the floors turned to conveyors. The speed of the wind and conveyors are specified by argFloat1 and argFloat2. argBool1 specifies whether the tile becomes fluid (triggering swim mode for any actors who travel there).

- Spawn Thing
Spawn a copy of a Thing named [argStr] at position xy(argFloat1, argFloat2). If no Thing named [argStr] exists in any currently-loaded data files, no Thing is spawned. argBool1 controls whether the Thing is spawned facing left (= false) or right (= true). Spawn baddies or powerups out of thin air -- cool!

- Activate Thing
Things can also have tag numbers, just like tiles. This tile action will activate any inactive Things marked with the proper tag ID. So, you could have a moving platform that's stationary at the map start, but that begins to move once the player crosses a certain tile. Or maybe you have a dark hallway, and the lights suddenly come on when you enter.

- Alert activator
Any AI actor crossing this tile will be "alerted", immediately seeking the player out whether it can see the player or not. This and alter environment are integral to creating teleporter ambushes.

- Activate tag
This tag will search the map for any other action tags marked with the proper target tag ID, and activate those. Since any given tag can only specify a single action, this is great for situations where you want a player action to trigger several effects at once. You can create several tags all hidden in a wall somewhere, that do things like change the lighting, activate Things, or open a door, tag them all the with the same number, and have them all go off at once since they all share a tag ID.

- Activate tag on monster death
My new favorite. :-D I just finished implementing this today. It works just like Activate tag except that it triggers when the last monster tagged [int(argFloat1)] dies. Great for trapping a player in a room and only letting her out when she kills the last of the baddies teleporting in.

There are other tag types, but I've prattled on long enough. So here's a diagram showing how a typical (albeit simple) sequence might be constructed:



Tags can trigger themselves. So, say I wanted that door to be opened not by a switch, but by the player touching the door itself and pressing the "use" key. I'd have the door tiles' tag ID and target ID both = 1, and give them the type "open door, wait, close", and the appropriate arguments. When activated, they would trigger themselves.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
mikedoty
Developer

Joined: 18 Mar 2006
Posts: 1788

PostPosted: Fri Jan 30, 2015 5:01 pm    Post subject: Reply with quote

I like these types of scripting things. You have a lot of interesting options to play with. I'm looking forward to the door that has a "close door" trigger when you walk through it and the player gets crushed. :)
_________________
The end of the game, yes, is pretty much getting the weapon and killing off the population.
mashup games . com | Finally! - A Lode Runner Story
View user's profile Send private message Visit poster's website AIM Address
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Sat Jan 31, 2015 7:33 pm    Post subject: Reply with quote

Note to self: don't touch physics code two years after it's been already proven to work. It doesn't end well.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Tue Feb 03, 2015 6:26 am    Post subject: Reply with quote

I need to start documenting the editor. *I'm* starting to forget some of its hidden features; how can I expect a user to figure it all out?
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Wed Sep 30, 2015 5:24 am    Post subject: Reply with quote

Development has ground to a halt. I started college this semester. Thirty-four years old and I never had the ambition to go to school until now. Probably why I'm still day-jobbing it as a combination graphic designer/receptionist.

I'm going to school full-time, on top of my full-time job. I'm doing this partly because I'm a masochistic idiot, but also because I'm in a big hurry. I've wasted enough time getting started. I don't want to finally be getting my degree when I'm, like, 45 or something.

The downside of this, of course (aside from the fact that I'll probably age 20 years in the next four, from stress alone), is that I have very little time to work on the game. I've written maybe 100 lines of code in the past month. Even when I do have free time, I'm exhausted and can't bring myself to code -- especially since the stuff I'm working on right now happens to be boring, under-the-hood type stuff like loading savegames.

Another, more selfish, consideration, is that I'd like to get back to my RPG. Acronia was supposed to be a simple "bridge" project, meant to teach me how to be a better coder so I could realize my vision for the RPG. Five years later, I'm still wondering what went wrong.

(Actually, I know what went wrong. I got too ambitious and decided to make a side-scrolling Doom. But I've also learned a ton in the meantime, so it's not a total loss, except for time.)

So, I'm thinking I'd actually like to start experimenting with Adventure in Rulon again. All-new codebase. Whole new set of fresh ideas. Something I can actually motivate myself to work on during the one or two free hours I have per week now.

It'll mean yet another five years have passed without me releasing a project. And the thought of that kills me. But it's not like Acronia was going to see the light of day any time soon. Not unless I can figure out how to go without sleep for the next year.

-----

Sirocco wrote:
(in the FB Cry Havoc thread)
but if that means release, or ports, or just handing out the (admittedly shitty) source, I can't say. It's still on my mind, though.


Releasing Acronia's shitty source code is also something I've considered. But it would essentially mean the end of Acronia as a potential future IP before it even got started, unless I spend a lot of time culling out any game-specific (as opposed to pure engine-related) code before releasing it.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
Sirocco
Moderator

Joined: 19 Aug 2005
Posts: 9453
Location: Not Finland
PostPosted: Sat Oct 03, 2015 7:04 am    Post subject: Reply with quote

Quote:

(Actually, I know what went wrong. I got too ambitious and decided to make a side-scrolling Doom. But I've also learned a ton in the meantime, so it's not a total loss, except for time.)


That's the upshot of programming and game design. Almost nothing is ever a total waste of time. If nothing else, you learn what not to do :)
_________________
NoOP / Reyn Time -- The $ is screwing everyone these days. (0xDB)
View user's profile Send private message Visit poster's website
Reply to topic GDR Forum Index -> Game Developer's Refuge -> Development Log - Acronia Page Previous  1, 2, 3, 4  Next

Use this link to get a Sign-On Bonus when you get started!

All trademarks and copyrights on this page are owned by their respective owners. All comments owned by their respective posters.
phpBB code © 2001, 2005 phpBB Group. Other message board code © Kevin Reems.