Post new topic    
Liquid Metal Slime
Send private message
Old idea scrapped, what to do with SHiIDA? 
 PostWed Apr 21, 2010 10:48 am
Send private message Reply with quote
This is explicitly for people who follow my game projects.
I'd call you a "follower" if you've done one or more of the following:
-Seen some of the Viridian Journal on Castle Paradox
-Watched the Viridia demo trailer on Youtube or Hamsterspeak
-Played the SHiIDA demo

So anyway. If I'm going to fluctuate between these two games (I've certainly been doing so mentally, and it's exhausting), wouldn't it be convenient if I somehow managed to merge them?

So this thread is all about how I'd manage to pull off two relatively different ideas into one game.
The easiest way to start, I suppose, would be to find common ground between the games. And the most blatant source of commonality is this girl.

-She's an ordinary playable character (with quite a lot of gravity on the plot) in Viridia, and the only heroine in SHiIDA.
-She experiences at least one dream sequence in the plot of Viridia, and the entirety of SHiIDA takes place in her mind - possibly her dreamworld.
-Her outfit and magic skills are roughly the same between game

In addition, many characters she met in Viridia will appear as ghosts in SHiIDA, and a few monsters she fought in SHiIDA will appear as generic enemies in Viridia.

And I'm out of time, I'll share more ideas within 24 hours - or when I get a reply to this thread.
Slime Knight
Send private message
 
 PostThu Apr 22, 2010 2:57 am
Send private message Reply with quote
Well I'm excited. I really liked SHiIDA and anything that would expand on it while at the same time making the title pronounceable is all gravy. I'll be looking out.

But don't call me a "follower," man. I'm my own pimp.
Liquid Metal Slime
Send private message
 
 PostThu Apr 22, 2010 7:26 am
Send private message Reply with quote
Here's something that's been troubling me.
If I were to bring these two games together, I'd need to do two important technical things:

1) When switching games, I'd need to be able to swap heroes in and out while keeping their stats and levels the same.

2) When switching games, I'd need to completely clear out one inventory to make way for the next, making sure that no items are swapped between the two.

The second point is actually quite important, and it came up earlier in the development of Viridia; since hero groups change so often, I need a reliable way to "store" inventories. Does this make sense?
Anyway, I need advice on this matter.
Liquid Metal Slime
Send private message
 
 PostThu Apr 22, 2010 12:06 pm
Send private message Reply with quote
Make one a prequel/sequel instead?
Liquid Metal King Slime
Send private message
 
 PostThu Apr 22, 2010 3:21 pm
Send private message Reply with quote
Baconlabs wrote:

1) When switching games, I'd need to be able to swap heroes in and out while keeping their stats and levels the same.


This part isn't too hard. Using the hero by slot command and the swap by position command you can have precise control over how you swap your heroes in and out.

Baconlabs wrote:

2) When switching games, I'd need to completely clear out one inventory to make way for the next, making sure that no items are swapped between the two.


This is doable, but it would consume a lot of your global variables. Using the item in slot command and its relatives together with the read/write global commands you could copy your inventory in and out of a particular range of globals.

If you limit your max inventory size, I see this as being practical.

This will of course get much easier in future versions, after I finish the new SAV format and TMC finishes the array data type.
Liquid Metal Slime
Send private message
 
 PostMon Apr 26, 2010 9:04 am
Send private message Reply with quote
Yeesh, I'm not liking the looks of this.
Okay, scrap that idea. I think Viridia is just fine by itself.

SHiIDA, on the other hand...
Y'see, as I was trying to incorporate horror-ish elements into the game, I started coming up with a plan to have enemies as NPCs on the map, and to give each of them artificial intelligence and a battle plan.

For instance, let's look at the absolute most basic enemy in my plan: The Axe Mook.

Moves around randomly at a slow speed. When the player comes in a certain range of it, it'll raise its axe and run straight for the player at a quick speed.
Furthermore, there's an extra bit I was considering putting on many enemies - if it touches you from behind, a special animation commences and you die instantly.
EDIT: Oh, and everything would be done with Slices, of course.

Now, again, that's the absolute most basic enemy I've thought of, and I have no idea how to program that, much less the many many other enemies in the plan.

I see four possibilities for project SHiIDA:
1) I scrap the project
2) I scrap the fancy enemies and make a boring RPG
3) I enlist the help of an expert OHR programmer
4) I restart the project on a non-OHR engine

I like 3 the best, but of course I'd need a talented volunteer.
Liquid Metal King Slime
Send private message
 
 PostMon Apr 26, 2010 4:26 pm
Send private message Reply with quote
I have too many of my own projects going to be your volunteer, but I can tell you how I would program this.

So you have all these monsters running around on the map, right? Each of them should have an NPC component, even if you are going to be using slices.

The NPC holds the x,y position of the monster, and its direction.

When you load the map, you create a slice for each monster, and for each slice you store the NPC reference of the NPC that it belongs to in the slices' extra data.

You use "set parent" to attach the slices to the map same map layer the NPCs walk on.

Now you need a loop that looks like this:

Code:

script, monster update loop, begin
  variable(sl)
  sl := first child(lookup slice(sl:map layer 1))
  while(sl) do(
    update monster(sl)
    sl := next sibling(sl)
  )
  set timer(1, 0, 1, @monster update loop)
end


This script loops through all the slices that you have attached to map layer 1, and runs the update monster script on each one. Notice that it is looping using a 1-tick timer instead of a "wait" command. Other scripts will not be blocked waiting for this cript to finish, and it will not be blocked waiting for other scripts (yay for timers!)

Update monsters should look something like this:

Code:

script, update monsters, sl, begin
  variable(npc)
  # Get this slice's NPC reference.
  npc := get slice extra(sl, extra 0)
  # update the position of this slice to match the NPC
  set slice x(NPC pixel x(npc))
  set slice y(NPC pixel y(npc))
  switch(get NPC id(npc)) do(
    case(0) do(axe mook ai(sl, npc))
    case(1) do(giant mook ai(sl, npc))
    case(2) do(skeleblob ai(sl, npc))
    case(3) do(demon puppy ai(sl, npc))
    case(4) do(grim weedwhacker ai(sl, npc))
    case(5) do(baconthulhu ai(sl, npc))
  )
end


So each NPC type has its own AI script. For the actual AI scripts, I suggest a "finite state machine"

You can use the other two slice extra values for state. The NPC extra values are usable too, so you can have things like HP or Magic or counters, and stuff.

Code:

script, axe mook ai, sl, npc, begin
  variable(state)
  # Get this monster's state
  state := get slice extra(sl, extra 1)

  # handle each possible state for this monster
  switch(state) do(
    case(0) do( # wandering around
       monster wandering(sl, npc)
       if(within distance from player(npc, 5)) then(
         # start dashing
         set slice extra(sl, extra 1, 1)
       )
    )
    case(1) do( # start dashing
      monster faces player(sl, npc)
      # dash now
      set slice extra(sl, extra 1, 2)
    )
    case(2) do( # dash now
      if(not(within distance from player(npc, 6))) then(
        # dash is over, back to wandering
        set slice extra(sl, extra 1, 0)
      )else(
        monster dashing(sl, npc)
      )
    )
  )
end

script, monster wandering, sl, npc, begin
  # re-use this script for any monster that has a randomly wandering AI state
  if(NPC is walking(npc) == false) then(
    if(random(1, 10) <3>> NPC y(npc)) then(
    set NPC direction(npc, down)
  )
  if(hero y(me) <<NPC>> NPC x(npc)) then(
    set NPC direction(npc, right)
  )
  if(hero x(me) << NPC x(npc)) then(
    set NPC direction(npc, left)
  )
end

script, within distance from player, npc, dist, begin
  # return true if the NPC is within a certain number of tiles
  # from the hero
  variable(diff x, diff y)
  diff x := abs(hero x(me) -- NPC x(npc))
  diff y := abs(hery y(me) -- NPC y(npc))
  exit returning(diff x ^ 2 + diff y ^ 2 <= dist ^ 2)
end

# this script for absolute value will be a builtin in the future
# but it isn't yet, so we need it here now :P
script, abs, v, begin
  if(v << 0) then(exit returning(v * -1))
  exit returning(v)
end


Actually, that got pretty complicated pretty fast... but notice that a lot of that can be re-used for your other AI scripts.

Also, I left out all the stuff where you update the sprite slice to show the current frame of monster animation based on which way it is facing and what it is currently doing. You could spread that animation around, but I think it would be best to keep it all together at the very end of the AI script. Do all the AI first, then do all the animation updating last.

Also remember not to use any waits in the AI scripts. Each AI script is going to be re-run every tick. If you need the monster to do something for a while, you need another AI state for it. Like the laugh animation for example. That would need another AI state.
Liquid Metal Slime
Send private message
 
 PostThu May 06, 2010 11:04 pm
Send private message Reply with quote
Hey, brahs. I've given this idea some thought, and I just might make a big change here.

I'm heavily considering turning project SHiIDA into a Castlevania-like platformer, in Game Maker 8.

In just a week's worth of time, I've made a lot of progress in establishing a basic Castlevania jumping engine, in addition to adapting the story to better suit a platforming game.

I'm taking this new project slowly, though.
I usually work on games from their start to their end (or until I quit), and I won't even be able to work on the intro scenario until the end of this year.
Why? I want to make the cutscenes in the style of Rondo of Blood, with animated slides accompanied by cheesy Japanese voice acting. I'm looking forward to this winter of work tremendously.

EDIT: I'm going to remember that code you posted up there, James, I think it's going to come in handy for Viridia.
Display posts from previous: