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 - Adventure in Rulon 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: Tue Apr 26, 2016 6:30 am    Post subject: Reply with quote

The more I think about extending the map editor, the less I feel like doing it. No matter how much work I put into it, it won't be as fully-featured as existing editors, such as Tiled -- plus the fact that all the time I spend developing tools is time spent not developing the game. We saw how that went with Acronia.

I think it might be worth spending a few days researching various map editors and seeing how easily they can be adapted to AiR's requirements.
_________________
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: 9459
Location: Not Finland
PostPosted: Tue Apr 26, 2016 9:01 am    Post subject: Reply with quote

I've had this problem forever.

I experimented with making a mini-rpg last year, and it had a few odd goals:

1. All world building and editing should be done via bitmaps and a few txt files for variables. Colored pixels and data stored in the alpha channel were used to map events.

2. Super-simple controls and menus. As few numbers and button presses as possible to get things done.

I like how it turned out, but just don't have any desire to finish it. I'd estimate the code is complete or reasonably close.
_________________
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: Tue Apr 26, 2016 10:27 am    Post subject: Reply with quote

The whole plain-text/human-readable thing is actually working out fabulously for me; I'm able to get things up and running way faster than I ever did with Acronia. It's definitely the direction I want to keep going in.

But maps are a different story. Even though all the map metadata (header, size, layer headers, even stuff like exit point information, entity lists, etc.) can be done in a human-accessible fashion, I don't see any way around having a dedicated, visual editor for the actual map data. Assigning a color to each tile and drawing it as a bitmap only works for maps below a certain level of complexity, such as the overworld. (And even the overworld becomes non-trivial once you have the base laid down and you want to start working on prettying it up with edge tiles.) Anything else would be impossible to visualize once I'm dealing with more than a handful of colored pixels in Photoshop.

Even working with something ready-made like Tiled, I'd have to spend time figuring out how to tailor its output to fit my engine and map format's requirements -- or at least write a utility that can take Tiled's output and convert it for me.

Just the word "editor" itself now immediately translates in my brain to "wasted person-hours."

It's a problem that causes me to think myself in circles.
_________________
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: 9459
Location: Not Finland
PostPosted: Tue Apr 26, 2016 11:37 am    Post subject: Reply with quote

Quote:

Assigning a color to each tile and drawing it as a bitmap only works for maps below a certain level of complexity, such as the overworld. (And even the overworld becomes non-trivial once you have the base laid down and you want to start working on prettying it up with edge tiles.) Anything else would be impossible to visualize once I'm dealing with more than a handful of colored pixels in Photoshop.


I got around that by letting the game apply edge tiles for me at run-time. It would examine the tiles and using a few sets of rules, would select an appropriate edge tile and overlay it. This took some time to get right and was arguably a time-sink, but it worked well for super-simple maps. I wouldn't recommend it for anything more visually taxing than a NES-era game.
_________________
NoOP / Reyn Time -- The $ is screwing everyone these days. (0xDB)
View user's profile Send private message Visit poster's website
arvidsson
Contributor

Joined: 13 Jun 2011
Posts: 109
Location: Sweden
PostPosted: Wed Apr 27, 2016 4:50 am    Post subject: Reply with quote

Yeah, I implemented a similar solution in my current project. Which let me define for example walls where I wanted but without having to set the correct tile id for rendering. This was calculated from analysing the type of tile neighbours and then having a dictionary that correlated flags to a certain tile id. By extending this I'd say you could use this technique for rather complex maps, and is a great solution if a lot of the game is meant to be procedurally generated or otherwise constructed from templates or something.
View user's profile Send private message
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Wed Apr 27, 2016 6:14 pm    Post subject: Reply with quote

I like to worldbuild.



Code:

255    128    192        "South Ocean"
100     50     75        "West Ocean"
 63     31     47        "North Ocean"
160     80    120        "East Ocean"
100    100      0        "Dahnlya"
160    160      0        "Ekima"
255    255      0        "Yokinotsu"
  0     40      0        "South Rulonia"
  0     63      0        "North Rulonia"
255      0    255        "Gulf of Indis"
160      0    160        "Rock Coast"
100      0    100        "Cape Point area"
 63      0     63        "Palamar area"
 40      0     40        "Maulen area"
128      0    255        "Marsh area"
 80      0    160        "Port Cartalima area"
 50    100    100        "Antillis Keys"
 31      0     63        "Gulf of Ayer"
 19      0     40        "Long Key"
  0      0    255        "Ayer area"
  0      0    160        "Castonia area"
  0      0    100        "Dawson area"
  0      0     63        "Tsumaru area"
  0    255    255        "Aeral falls area"
  0    160    160        "Hallowell Lake area"
  0    100    100        "Memphis Lake area"
  0     63     63        "Badari Cape"
  0     40     40        "Starlight Harbor/Kera Coba area"
  0    255      0        "Rosa Desert"
  0    160      0        "Oasis area"
  0    100      0        "Unity Lake area"
 40     19     29        "Crescent Island"
 63     63      0        "Temple Island area"
 40     40      0        "Damietta Islands"
255    128      0        "Damietta area"
160     80      0        "Lisbon Promontory"
100     50      0        "Lisbon area"
 63     31      0        "Brownie forest"
 40     19      0        "Cape May area"
255      0      0        "Dorannon Peninsula"
160      0      0        "Mt. Aeral area"
100      0      0        "Port Launa area"
 63      0      0        "Cape Lahun"
 40      0      0        "Dahnlyan Ice Shelf"
100    100    100        "Mt. Akramis area"
255    255    255        "Mt. Hymostar area"
  0      0     40        "Mt. Pyamos area"
160    160    160        "Mt. Torramat area"

_________________
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: Thu Apr 28, 2016 7:09 pm    Post subject: Reply with quote

Clickity.

_________________
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: Fri Apr 29, 2016 8:22 pm    Post subject: Reply with quote

New laptop. Trying out coding on it because I'd like to not be chained to my desktop in the bedroom every waking second.

Muscle memory's a powerful thing. The arrow keys and home key cluster aren't where my fingers expect them to be, and it's weird.
_________________
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: Mon May 02, 2016 6:45 am    Post subject: Reply with quote

Spent the weekend doing some under-the-hood stuff.

- Implemented the stuff in my "world map areas" post above. When you move into a new area in the world map, the area name will appear briefly in the lower-left corner, like the neighborhoods in GTA3. The current area will also be saved in the player's save-game file. (For non-world maps, the engine reports the "current area" as simply the name of the current map).

- Finished day-night transitions. Again taking a cue from GTA3 and its progeny, each in-game day is 24 real-world minutes. (I may adjust that slightly if I decide that planet Rulon should have a longer or shorter day than our Earth. But for now, 24 feels right.) I've got a pretty neat-looking color transition going on that I'll showcase in a video soon. (I'll set the day length to 30 seconds so we can see all the colors.) I'm not sure if I want to have time of day affect how the NPCs act; that might require more sophisticated AI than this game calls for. I may simply have a flag that tells the game which times of day a given NPC should appear. Same would go for shops; some might be open 24 hours a day, others might close at night, etc. I do know for certain that the time of day will affect what monsters you encounter in combat.

- With my new laptop, I was able to see how the game runs on lesser hardware. It runs okay, but not great, so... I added the ability to turn off render-to-texture for users with slower computers/GPUs. In this mode, the game uses transformations to automatically scale the graphical assets as they're drawn directly to the screen. To hide the seams between tiles (due to texture sampling), I simply don't clear the screen in between frames.

- Nixed a planned feature to have the world map render Mode 7 style. Couldn't quite figure out how to get Allegro to render a bitmap distorted to fit a trapezoid. That, and it would have been impossible to do with render-to-texture off (which, actually, doesn't bother me that much, to be honest). I may revisit this idea later on -- I loved the effect in FF6 and FF1-PSP -- but I was spending too much time trying to figure it out and wanted to move on.

- Went full-on const nazi on my entire codebase. (I was already halfway there -- I make all local variables const when possible, I pass complex types by const ref, and I have an almost fetishistic love for the ternary operator.) While I was at it, I noticed (confirmed after re-reading the blog that I linked) that C++ isn't picky about const when it comes to function parameters passed by value. If I go:

Code:

//  example.h
void someFunction (int val);

//  example.cpp
void someFunction (const int val)
{
    //  blah blah blah
}


or vice-versa, it doesn't give a crap. It'll still protest of course if I try to modify a const parameter inside the function, but it doesn't care if the declaration does or doesn't match the signature in the definition. It ultimately only cares about what the definition says, which I find weird.

- Changed my map format slightly. Previously, I was saving header and metadata (text-based) in the same file together with the (binary) layer data; my save and load code would simply change the existing file stream between ascii and binary on the fly. This actually worked out fine, but if I wanted to hand-edit the human-readable parts, it would ruin the binary data. (Natch. Text editors aren't hex editors.) That was something I should have thought about to begin with. So now, maps are saved in folders, with each component having its own file: map_header.txt, area_names.txt, layer_0_base.dat, layer_0_edge.dat, etc.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

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

Joined: 31 Aug 2005
Posts: 271
Location: London, England
PostPosted: Tue May 03, 2016 3:25 am    Post subject: Reply with quote

AdmiralTofu wrote:
While I was at it, I noticed (confirmed after re-reading the blog that I linked) that C++ isn't picky about const when it comes to function parameters passed by value. If I go <code> or vice-versa, it doesn't give a crap. It'll still protest of course if I try to modify a const parameter inside the function, but it doesn't care if the declaration does or doesn't match the signature in the definition. It ultimately only cares about what the definition says, which I find weird.


This make sense doesn't it? From the perspective of the calling function, it doesn't matter if the argument is const or not, since it's not the callers job to deal with that piece of memory - all it needs to do is copy a value on to the stack at a particular point, and then it's no longer involved either way. In fact the value is not really const and can never be const since it's on the stack, which is always mutable. It only matters during the compile step, so the parser can help you check the code. In fact, I bet if you put const next to the argument in your header file, the compiler would probably strip it out during precompile as unnecessary.

I reckon a programming greybeard reasoned this all through in the 80s and did what he considered the most logical thing :)
_________________
Avatar: Yu Suzuki (Virtual Fighter, Shenmue)
View user's profile Send private message Send e-mail Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Tue May 03, 2016 6:41 am    Post subject: Reply with quote

Interesting. I'll admit, it does make a lot of sense when explained like that. And it would make my header files cleaner to remove all those extra consts. It's just that idea of my header not matching my implementation, even if it's just superficially, makes me reel back for a second.
_________________
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 May 31, 2016 5:22 am    Post subject: Reply with quote

Forgive the huge stream-of-consciousness/wall of text. I just intended to write a quick "I'm still here; will update later", but wound up dumping my brain for 40 minutes.

--------

Not dead!

It's been an interesting three weeks: finals, a couple of minor depressive episodes, my birthday (I'm level 35 now), of course my day job, plus just a teeny bit of "holy shit I've accomplished a lot, where do I go next, my TODO list isn't much help right now." Usual stuff.

I've gotten quite a bit of development done, although not as much as I'd like to for a given three-week period. Some of the highlights:

--------

- Decided to do a map editor after all, including GUI. I figure, every other piece of data in the game is going to be human-readable, so it's not like I'll need a huge editing suite like I did with Acronia -- just the map editor. Instead of porting the GUI system over from Acronia, I'm coding it from scratch. That's actually saving me work, believe it or not. First of all, I'm not bothering to implement a whole bunch of different widget types (spinners, multi-line text boxes, etc.), just the basic stuff: radio buttons, check boxes, single-line text fields, labels, buttons, sliders. I'm doing them super-quick and dirty, and only as I need them. Acronia's GUI system was deeply integrated into that game's engine module system, and would have required a lot of duct tape and chicken wire to fit into AiR's much-simplified version of that same system. Plus, it just would have been a bunch of bloated, extra code for widgets I'll never use. The same do-it-as-you-need-it philosophy is what's driving editor development as well. Instead of trying to anticipate every feature I'll need, I just write them as I discover the need for them. Now, the task of writing the editor just feels like part of the game's development itself.

--------

- The field engine is nowhere near finished, but it's "done enough" that I feel comfortable setting it aside and starting to work on the battle system. (More on that later.) I made the world map MUCH bigger than it was before. Previously, it was 768x512, with 48x48px tiles. I blew it up to 2048x1366, and now I'm using 32x32px tiles. Click the following images to embiggen. (They're 1:1 pixels-to-tiles)

World map before: (768x512)


World map after: (2048x1366)


I redrew the entire map from scratch in Photoshop at 4096x2732, using the original world map as a base. I'll never need it that big, but I have it just in case. (Cloth-map feelies for the Kickstarter? Who knows.) I also made it so that time passes 16 times faster on the world map than in towns and dungeons. That, combined with the new bigger map (474% bigger), actually makes it feel like a world rather than a series of islands the size of Delaware. Modern technology's great.

- Dynamic lighting is in. Basically the same system as Acronia. Looks awesome.

- Engine can switch between maps now. It's pretty neat hitting the confirm button on a town and actually going into a town.

--------

- Started on the game's GUI. This is the traditional JRPG, menu-driven UI, separate from the desktop-app-style UI used for the editor. I'm taking a little more time and care with this than with the editor UI, since it's so central to the gameplay.

--------

I'm going to start experimenting with the battle engine next. My plan is for it to be turn-based, with a wargame type of feel. For melee fighters, what actions you can perform will depend on your proximity to your target. In that regard, I'm drawing inspiration from the early Ultima games, Arc the Lad: Twilight of the Spirits, so forth. There will also be terrain which can affect line-of-sight, impacting rangers and some magic users. The only problem with that is that it will be really hard to represent in 2D. Hard to play, too -- if you can't rotate the camera, you're gonna have a bad time.

So, I'm thinking of going with a simplified 3D for the battle scenes. For that retro feel, I might even do 2D sprites for the characters, like FFT, the field scenes in Wild Arms 2, or the battles in Beyond the Beyond. I figure sprites are better than models in this case, because I have no experience with 3D, and good 2D is better than bad 3D every time. The terrain can be low-poly because it's simple, and texturing will hide a lot of that. But there'd be no way getting around crappy-looking models.

The only problem with this plan is that... well... like I said, I have no experience with 3D. I wouldn't even know where to start, or how to integrate 3D into Allegro without going down to the metal with OpenGL. I've heard that, with a bit of work, Irrlicht plays nice with Allegro. I'll have to look into that.

For now, I'm just going to prototype the battle engine as a 2D, 100% top down view. That actually won't be too far off from how the full-3D version would work: it would just be 2D coordinates with height variation. In fact, the more I think about it, it's really more like 2.5D, like Doom.

--------

I have a few obligations coming up over the next two days, but I should be able to sit down and start coding again on Thursday.

--------

That's about it for now. I didn't expect this thing to turn into a stream-of-consciousness. XD I really just intended this to be a quick update. That's what I get for not posting for nearly a month.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft


Edited by AdmiralTofu on Tue May 31, 2016 9:26 am; edited 7 times
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 May 31, 2016 6:51 am    Post subject: Quick question Reply with quote

I have two functions, and I'm not sure what to call them.

Code:

float function1 (float value, float low, float high)
{
    if (low > high) { std::swap(low, high); }
    return (value - low) / (high - low);
}


float function2 (float low, float high, float amount)
{
    if (low > high) { std::swap(low, high); }
    return low + ((high - low) * amount);
}


function1 tells you where in a range a given input value is; e.g., if you give it a value of 5.25 and a range of [3, 8], it'll return 0.45. (5.25 is 45% of the way going from 3 to 8).

function2 does the opposite; you give it a range and a portion, and it will give you the value; e.g., 0.45 into [3, 8] returns 5.25.

Math isn't my strong suit, so these really simple functions probably already have names that just haven't occurred to me. (They're not actually called function1 and function2 in my code; I've renamed them here just in case the names I have been using are embarrassingly wrong.)

What should I call them?
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

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

Joined: 19 Nov 2015
Posts: 346
Location: :( :(
PostPosted: Tue May 31, 2016 7:36 am    Post subject: Reply with quote

Code:
float getDamnationPercentile(float damnationRating, float low, float high) {
  if (low >= high) {
    throw std::invalid_argument("Go to hell, sinner");
  }
  else if (damnationRating < low || damnationRating > high) {
    return INFINITY;
  }

  return (damnationRating - low) / (high - low);
}

diablo@diablo-p6710f:~$ getDamnationPercentile("sonrisu");
1.01
View user's profile Send private message Visit poster's website
0xDB
Developer

Joined: 26 Dec 2005
Posts: 1670
Location: Your consciousness.
PostPosted: Tue May 31, 2016 9:45 am    Post subject: Reply with quote

The answer is probably somewhere within the realm of Topology... of which I don't know much so I'm making this up as I write:

It looks like what you've got in function1 are two one-dimensional vectors(or more specifically line segments), one going from low->high and one going from low->value and the function1 return tells you the low->value vector expressed as a fraction/multiple of the low->high segment (which can be negative and also be bigger than 1.0 or smaller than -1.0). The result of function1 is a scalar, the arguments of it are two one dimensional line segments given as pairs of scalars defining their beginnings and ends in R^1 where the beginning of the first pair is implied (equivalent to low) and its' end being value (if you want to think about it this way).

Or in different words: It tells you the offset of value from low, expressed as "units of the length of the line segment: high-low". High-low is the unit. The return value is the number of units that in.value is away from in.low. The sign tells in which direction it is away from in.low.

Or in more different words expanding on the previous: It returns how much/often the segment "low to value" covers or mirrors(in case of negative results) the segment "low to high". The coverage or mirrorage is given as a fraction or multiple of the whole. second segment given.

So... I'd name it something that contains the word: offset or fraction or coverage... maybe
function1: get_segment_coverage (in: segment A, segment B, out: C the coverage/mirrorage of A on B)
function2: get_segment_offset (in: segment B and coverage C, out: an offset from 0 which may or may not be in segment B, depending on C)

Perhaps even define a segment datatype for clarity.
_________________
0xDB
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Tue May 31, 2016 3:56 pm    Post subject: Reply with quote

More math.

My formula for the amount of XP required for a given level is:

XP = 2.2679284(x-1)^3 + 5(x-1)

or, in code:

Code:
/*
========================================
Game::Player::xpRequiredForLevel()
========================================
*/

size_t Game::Player::xpRequiredForLevel (const size_t lvl)
{    
    static const double magicNumber = 2.2679284;
    const size_t        checkLvl    = lvl - 1;
    return (magicNumber * std::pow(checkLvl, 3)) + (5 * checkLvl);
}


Yes, that's an awfully arbitrary magic number. It has roots from about 16 or 17 years ago when I first came up with a formula for calculating XP. That particular formula has since been lost to time and space, but I always remembered 2135046 being the total required for level 99. (It's weird what sticks in your head versus what doesn't.)

So, last year, when I was first starting to think about abandoning Acronia and re-starting AiR, I reverse-engineered the formula with that target value in mind. I have no idea if the 98 other values match my old formula at all, but I don't care. I compared the new output to Cloud's XP progression in Final Fantasy VII, and after several tries I wound up with a curve that's very, very close. That's good enough for me; my old one was probably more of a straight line anyway.

Of course, 2135046 is ultimately irrelevant; I could have picked any other magic number, like 2.25, or 2.5, or 3, and the computer wouldn't have cared one way or the other. But I figure if that number stuck in my head for that many years, I might as well keep it.

No idea why I'm sharing this pointless piece of trivia other than it's really nice to have it finally expressed in code instead of in a design document on my Google Drive. It feels like some sort of milestone.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

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

Joined: 28 Nov 2013
Posts: 60
Location: California
PostPosted: Tue May 31, 2016 4:29 pm    Post subject: Reply with quote

They're interpolation functions. The second function can be modified into the classic u = x * (1 - t) + y * t lerp function, and the first is simply solved for t.
See https://www.youtube.com/watch?v=S2fz4BS2J3Y
_________________
Parents of young organic life forms are warned that towels can be harmful, if swallowed in large quantities.
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Tue May 31, 2016 4:37 pm    Post subject: Reply with quote

Oh, good. Then I wasn't completely off-base.

I've actually got function1 called lerp and function2 rlerp. Sounds like I should swap those names, no?
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft


Edited by AdmiralTofu on Tue Jun 14, 2016 7:37 am; edited 2 times
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
Will
Member

Joined: 28 Nov 2013
Posts: 60
Location: California
PostPosted: Tue May 31, 2016 6:01 pm    Post subject: Reply with quote

Probably. "get_lerp_distance" and "lerp" would probably be how I'd name them.
_________________
Parents of young organic life forms are warned that towels can be harmful, if swallowed in large quantities.
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Thu Jun 02, 2016 10:03 am    Post subject: Reply with quote

(Random brain dump)

I'm currently sitting on the fence as to how I'm going to implement magic spells and character skills. Do I go all the way and implement a scripting engine and script everything? (And risk going down the Acronia this-is-more-of-an-engine-than-a-game rabbit hole?)

Do I say "screw it" and hardcode everything?

Meet halfway and do something where I have generic "skill" objects with a name, description, and a pointer to a function which itself contains hardcoded behavior?

Aaaaghhhh, too much thinking, not enough code.
_________________
Dev log - Adventure in Rulon
Dev log - Acronia

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

Joined: 28 Nov 2013
Posts: 60
Location: California
PostPosted: Thu Jun 02, 2016 2:15 pm    Post subject: Reply with quote

Your "meet halfway" option is probably the best. Implementing/integrating a scripting language has its own share of problems, and hardcoding stuff without a consistent interface causes a ton of extra work. See this as an example of "fill a struct with function pointers" in a shipped game.
_________________
Parents of young organic life forms are warned that towels can be harmful, if swallowed in large quantities.
View user's profile Send private message Visit poster's website
AdmiralTofu
Contributor

Joined: 02 Nov 2009
Posts: 191
Location: Millville, NJ
PostPosted: Sat Jun 04, 2016 8:51 pm    Post subject: Reply with quote

Finally getting off my less-than-motivated ass and beginning to prototype the battle system!

Click to embiggen.

_________________
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: Sun Jun 05, 2016 6:23 pm    Post subject: Reply with quote

MOAR


_________________
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: Sat Jun 11, 2016 11:01 am    Post subject: Reply with quote

Poor little kobold is surrounded. Its allies are dead. It doesn't stand a chance.


_________________
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: Sun Jun 12, 2016 8:43 am    Post subject: Reply with quote

*cue game over theme*


_________________
Dev log - Adventure in Rulon
Dev log - Acronia

---
Twitter - @HadroSoft
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger
Reply to topic GDR Forum Index -> Game Developer's Refuge -> Development Log - Adventure in Rulon 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.