1. Archmage Rises
  2. News

Archmage Rises News

Dev Update Mar 14: The Feel of Events

Low tech update this week to let you know Michel and I are alive and well and working on Archmage. I was away last week travelling.

Usually dev blogs are an opportunity to say what is good about a game. Perhaps a small way to celebrate features or progress.

This week I’m going to talk about what’s wrong!

We’re in the final phase of shipping the Events feature. Except there is one problem.

It doesn’t feel good.

This is the harder part of game dev. Making features is relatively easy: you code up something and get it to work. But how it feels is more art than science. This dev blog about the 3 year history of Balatro talks about what I mean.

Admittedly, this is something I want to improve on. Why? Historically, I’ve put out features too soon, before they had time to ‘bake’.

I want to do better with Events. I want to refine it and make it as fun as I can.

Today I was playing around with it. What feels right:

1. Collecting resources feels nice. You walk over a hex, see some floaty text of what you got, move on. Much better than what we had.

2. Road events follow the road. Simple I know, but it feels right they don’t veer off.



Feels off:

1. Tracks are spawning way far away, like 7 hexes away. If a hex represents a mile, that just doesn’t make sense and it doesn’t feel good even if it did make sense.

2. Travelers along the road spawn far away too. I think I should only see those when I’m close to the road, when I want to interact with road traffic, not when I’m off in the woods.

3. There is no reason not to go for a resource event. But even if 1 in 4 times it results in combat, or HP loss, or something like that – it still wouldn’t feel right. All that would do is make me never want to do them. So this needs some serious refinement.

4. Our inspiration for the events was FTL events. Those are great! But today I realized that in FTL the events are mandatory, in Archmage they are optional. And that difference is a BIG difference. In FTL if I get a crappy event, well, I deal with it. It is a challenge to overcome. I have to keep moving sectors to get to the goal, so I take the cards I’m dealt. Slay the Spire is similar: deal with it.

But we have a big open map, plenty of room to walk around and avoid events. If the player is CHOOSING to OPT IN to an event, it is a much different context than FTL, and can’t follow their “make the best of a bad situation” vibe.

So, the technical work is done, but the design work continues. I think this is one of those situations where the only way out is through.

I think if we write more events, we’ll get a feel for what works and what doesn’t. That can then be codified into rules for writing events, so they always have the same right feel.

I have a list of “rules” for writing an event, based on what I think is working from the previous ones. I refine the rules after I finish each event.

So far the rules are:

1. Have multiple outcomes to each choice, so even if the event is a repeat it can still be fresh.
2. Have some sense of uncertainty to each choice
3. Is there a way to have Now vs Later rewards?
4. Interesting choices involve “which do I want more? A or B or C?”
5. Give the player a chance to roleplay in their choices
6. Events are a small chance to learn more about the world (lore)



Today I wrote a Tracks event that provides some cool world building about the origins of Skeletons. It gives a chance to roleplay and a small amount of lore. I wouldn’t originally have included those aspects without the reminding by the rules.

That’s it for this week, I’ll see y’all next week!

Finally! You can add custom content to Archmage Rises - Events!

Many a time I’ve been asked “Mod support?” or some variant of that - “Do you support UGC User Generated Content?”

And I would hum and haw and say it isn’t a goal, but I’ll try not to do anything that prevents in the future.

Well Michel and I are working on the Events system and I didn’t want to have to reload the game every time I changed an event for testing. He put in live loading.

I then asked, “How hard would it be to allow players to live load events? And if the GUID is the same, we take their version over the one that ships with the game?” And it wasn’t that hard.

So here is a demo of the live loading and how I add a new event to the game.

Oh, if it isn’t clear, once the event is “in the pool” it’ll show up in the game. But no one wants to wait for that, so we have a console command to make it show.

Instructions will come when we actually ship this update. Still don’t know when that will be.

[previewyoutube][/previewyoutube]

Dev Update Feb 22: Travelling Map Events

Hi, welcome back. It’s been 2 weeks because of travel and my kids got me sick. Fortunately, Michel has been trucking along and making things work. So now I get to brag about his work and take all the credit. Don’t worry, he’s used to it. ːsteammockingː

[h2]Getting Things Moving[/h2]

To make the world feel alive, things have to move around. A monster hunting party needs to chase you across the map until it loses interest or your scent. An NPC trader moving along the road from one town to another.

We already have monster patrols moving around on the map; now we need to expand it to handle any kind of event. There are some additional challenges.

[h3]1. Order of Operation?[/h3]

When do the events move?

After the player moves, of course! That’s every rogue-like ever.

But if every moving event moves after you, how do you notice what moved and what didn’t? We need to animate the NPC movement. And do we wait for the animation to finish before allowing you to move again? That slows down gameplay a lot; it starts to feel sluggish. So we’re going to keep the simultaneous movement for now… except when we shouldn’t!

What happens when you move onto a hex with a moving event, and it chooses to move to a different hex? Technically, you would miss each other, but that will feel unsatisfactory, so now we have to determine which events have their movement turn interrupted by the player.

[h3]2. Stacking?[/h3]

If events can move around, what happens if they both go into the same hex? Is that even allowed?

If you move into a hex with two events, which one is shown first?

We decided anything dangerous happens first: deal with the monsters THEN the resource or NPC conversation.

[h3]3. Where do Events Move to?[/h3]

Figuring out where the roads are, placing an event, and giving them a path to follow to the town are additional challenges.

A monster patrol will enter into a chase mode where you can use terrain and spells to hide from them, if that is what you want. I hope this makes going through dangerous monster territory more thrilling.

We’re getting close to the end of the tech work on this feature and will focus on the experience of it.

[previewyoutube][/previewyoutube]

Dev Update Feb 7: Making a Map Event

I recently read an article 42 Essential Game Dev Tips That are Immutably Correct... and the author said:

People want to hear about even the most mundane parts of your dev process


So let’s test that theory, shall we? We got Map Events working this week, so why not show how one is made?

This is a great spot to be in, now that we can make an event, we can turn our attention to making them actually fun. As of this writing, I’ve made a grand total of: 1 event. ːtongueː

For today’s example, I’ve taken what Oonai posted of what they think events should be like. So let’s see if we can do it.

[h2]Step 1: Code it up in JSON[/h2]

We’re both programmers here, so we’re writing the events directly into the text files. Here is what Oonai’s event looks like:



We can have as many branches and details in the event as we like. This is my version of what Oonai wrote.

Save that to a special folder, and it is sucked up into the game.

[h2]Step 2: Shows on Map[/h2]

Start walking around, and the event appears as Tracks because that is the only icon we got right now. And that is what was defined in the JSON `displayAs` field.

I walk into the event.


[h2]Step 3: Run the Event[/h2]

The UI pops up, and the parser runs the event.



(oops, word wrapping isn’t working!)

I pick the evil path because Oonai seems to like evil options. ːlaughing_yetiː



I probably should have written some ‘outcome’ context text—oops! But anyway, it shows an outcome, and the player can continue on their merry way.

We still have to hook up the various values that can be affected (gold, reputation, etc.).

Now that it is (mostly) working, we’ll start making events that are hopefully actually interesting!

Untitled

I'm playing Halls of Torment right now, because I like Vampire Survivor-likes.



If you've never played, I can explain it like this:

"Imagine Vampire Survivors gameplay and Diablo II art had a baby."

OK, maybe that wasn't terribly helpful.

It's an action game (or Bullet-hell) where your character is surrounded by swarms of baddies who try to kill you in seconds. You fight back through timed auto-shoot abilities (or controlled shot in Torment), collect xp, and level up.

If you were lucky enough to play arcade games in the 80's and 90's, it's like Smash TV and Gauntlet.

What I adore about Vampire Survivors (and likes) is how incredibly and fantastically simple and straightforward they are. They immediately get to the fun. Which is not easy to do and something I'm trying to improve in Archmage Rises.

The reason I'm writing about it is I had a bit of an "aha!" moment while playing HoT about Map Events.

The first time you spawn on the map, you don't really know what to do. But there are skeletons coming at you vying for your attention, so you should probably move and do something about it.

This is like the role Events will play on the Archmage map. Something clear, obvious, and immediately interesting to do.



But there is a second element to HoT. They have some treasure off in the distance represented by an edge icon. These provide a goal, something to attain, instead of just standing around fighting skeletons. I have to travel through the skeletons to get to the objective. It makes both more interesting: No objective? I just walk around in circles. No skeletons attacking me, it's a boring walk to the objective.

And this is the role Regions are to play in Archmage. A larger "Why?" to the game (game loop) of which the Events are an interesting encounter along the way. (I talked more about regions in this previous post)

We're not really working on the Regions stuff right now because we're focused on getting the map events in. BUT we have to figure it out a little bit so the Map Events that spawn make sense to the regional issue.

If the region is rich in Iron, Iron resource events will spawn.

If the region is infested with goblins, goblin patrols will spawn.

And spawning the events at the right place and cadence is what we're working on right now. Here is another short internal video never intended to see the light of day, that I'm showing anyway.

https://youtu.be/qySvfv3Ne0Q

It shows the event tech working, reading the JSON files* and running through some UI execution.

Now: to make it fun!

I appreciate Oonai posting some sample events so I'll quote their comments here:

Originally posted by Oonai

1- We are a MAGE, so it would be really good for the roleplaying aspect if our schools and level of magic could give solutions to some events. (example: The bridge over the river collapsed, so now if you want to cross you have to take time to find a way, use stamina/health to swim to the other side, that can go wrong, or you could make an ice bridge if you have enough water magic. you are not a common adventurer)

2- These events should also be opportunities. You find a caravan in the middle of the road without a wheel. You could help the owner for some money and provisions or you could kill the guards and take all you find useful.


Thanks Oonai, I'm going to try and build both these events with the system next week and see what happens!

Note on JSON Files:

Fairly often I'm asked about User Generated Content (UGC) for Archmage. Historically, the answer has always been a dissatisfying yet certain maybe. As we go, I'm making tech decisions in such a way as to not exclude the possibility. That's the best I can offer right now.