Maidens of the Kaleidoscope
May 21, 2008, 08:16:56 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News: TH 11 announced!
 
Pages: [1]
Print
Author Topic: Touhou SRPG [Proof of Concept]  (Read 722 times)
fawkes


"Live while awake. Live while dreaming."


View Profile
« on: May 16, 2008, 07:55:24 PM »

Hello there!

I've been working on a Touhou SRPG project.



So far it's in the proof of concept stage. Download the Proof of Concept-stage below. (Demo ends when one team is defeated. Game will automatically exit) The gameplay will roughly resemble the Fire Emblem or Final Fantasy Tactics series in terms of gameplay, but I'm striving for a strong "Touhou" flavor. I have an idea for a story also, namely involving a direct connection to the events of Perfect Cherry Blossom, Youmu, and that pesky demon tree Yuyuko keeps in her backyard.

Builds:
v0.0.2 [5-18-08]
http://www.4shared.com/file/48095096/e4304ed7/lostsky-v002-windows.html
v0.0.1 [5-16-08]
http://www.sendspace.com/file/seher4

It's built in Python as a programming language using Pygame. I do plan to have the source available.

To do list (Roughly in order of priority):

1. AI: I have some ideas of how to implement them, but hasn't been implemented at all yet. The demo has the player taking both sides.
2. Show the actual combat interactions. First with a text indicator of damage, and then with animation
3. Terrain: No self respecting SRPG takes place on a flat green map, so this will be something I'll work on.
4. Balance the combat system. It's horribly unbalanced at the moment. E.g.: Marisa killing Ran with one Master Spark.
5. Speech. So the characters can talk.
6. Music and sounds: Self explanatory. I don't have any right now
7. And many many more.

From README.txt:
//
Touhou SRPG Project
Story of a Lost Sky
*PROOF OF CONCEPT DEMO*
//

Under "lostsky" folder, run srpg.exe

Controls:
Arrow Keys = Move
Z = Select
X = Cancel

Stuff not yet implemented;
! Game will exit upon one side being defeated
Damage displays as combat is happening
Any of the "stats" screens
Balanced(!) combat system
An absurd amount of other stuff.

CREDITS:
Sprites from Patchucon by Tasogare Frontier
Profile images from Walfas.org's Create.swf by KirbyM
Touhou Project belongs to ZUN / Team Shanghai Alice

Utilizes: Python, Pygame, Gameobjects Library

I would welcome any person who would be interested in forming a game development group. I have no delusions about being a ZUN-like figure so I don't think I can do this alone. Specifically, help from artists (including sprite artists. I don't intend to keep Patchucon's images forever as much as I love them), programmers, musicians, or anyone who wants to contribute an opinion and advice.
« Last Edit: May 18, 2008, 04:58:12 PM by fawkes » Logged

Angry Fox


View Profile
« Reply #1 on: May 16, 2008, 09:16:25 PM »

Ambitious, impressive and quite admirable an undertaking!
This is exactly the kind of game I was hoping for ever since I heard of the Battle of Substitutive Peach!
I dont know what practical applications I can contribute to this as I am trying to learn to make games as well.

But design aspects, and some advice regarding this type of game I could give currently.
Personally I hope this gains ground and I support it!
Logged
Mirage Verius


Fufufu...I'll make this quick...


View Profile
« Reply #2 on: May 16, 2008, 09:26:54 PM »

A bit basic, but this is definitely a great start. It's always nice to see something like this. Do you plan on actually having the unit sprites eventually walk to their destinations?
Logged

Gpop



View Profile WWW
« Reply #3 on: May 16, 2008, 09:27:18 PM »

If I could, I would try to help in any way, but I'm not very skilled in any of them. I know only some programming, but not for that language.

I'm really looking forward to this. What kind of story are you aiming at? Comedy? Drama?
Logged



Come join us! Free DDR flash game and forums! 1.5 million members! Touhou is popular here!
fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #4 on: May 17, 2008, 11:26:42 AM »

Thanks for the comments!

Quote
Ambitious, impressive and quite admirable an undertaking!
This is exactly the kind of game I was hoping for ever since I heard of the Battle of Substitutive Peach!
I dont know what practical applications I can contribute to this as I am trying to learn to make games as well.

Wow, I didn't even know about that one.  It looks really good. How far along is it?

Quote
Do you plan on actually having the unit sprites eventually walk to their destinations?

Expected, yes. It should be a matter of code that moves the sprite from one location to another along with the proper animations. At the moment, I'd like to get the core gameplay elements put in. One of the problems that I haven't resolved is that my algorithm for generating "valid move" tiles is to basically take something like this where 1's represent valid moves, reflect it across the X and Y axes to generate the other quadrants.

Code:
For a unit with range of 2:
[ 1 0 0 ]                             [ 0 0 1 ]
[ 1 1 0 ]  -Flip Across X-axis        [ 0 1 1 ]
[ 1 1 1 ]                             [ 1 1 1 ]
And so on and so forth. Flip across Y and then across both X,Y to get all four quadrants.

To produce:
[ 0 0 1 0 0 ]
[ 0 1 1 1 0 ]
[ 1 1 1 1 1 ]
[ 0 1 1 1 0 ]
[ 0 0 1 0 0 ]

Then I strip out the locations where somebody is standing so you can't have units on top of each other leaving you with the places you are allowed to move.

Now, you'll notice that this allows you to jump right past enemies. I'd like to find whatever a way to generate path dependent valid moves.
where you need to take additional steps in order to walk past enemies. This is what most SRPG games like FE and FFT use. It's one of the glaring weaknesses of my algorithm, though it might not be a bad fit for the Touhou world if everyone can fly.

Quote
What kind of story are you aiming at? Comedy? Drama?

I haven't really developed the story much yet. I'd like for it to be a classical type adventure with a hero going on a quest to save the world and growing up internally in the process. Marisa and Reimu are seasoned veterans, and they'll be there as major characters, but I'd like to have Youmu be at least one of the lead roles. In standard Touhou fashion, a great crisis will arise (The tentative title is: Story of a Lost Sky), but it won't take itself too seriously.

Gpop and Angry Fox and Mirage, if you three are interested, what would be the best way to keep in contact and organize? There's a lot of room for helping. As for programming, Python was easy to pick up and I can recommend some resources. But any programming experience is really helpful, especially since my programming background is limited to stuff I've picked up on the internet, a guide book, and a semester of Computer Algorithms where we used MATLAB. Moreover, it might be helpful to have a different perspective on how to do things. Maybe there's an easier way to compute those movement positions. And I'm definitely going to need help with game design ideas. I'll provide the source code as soon as I sit down and comment through it so people looking at it can tell what its doing.
Logged

Mirage Verius


Fufufu...I'll make this quick...


View Profile
« Reply #5 on: May 17, 2008, 12:04:10 PM »

Oh, I'm sorry. I am interested for sure, but my plate's already full with handling the Kesshouka Project. Good luck with this though.
Logged

Gpop



View Profile WWW
« Reply #6 on: May 17, 2008, 01:36:04 PM »

I wish I could, but I'm too busy with my own personal stuff here with sports and stuff, and helping others with their stuff. Good luck with it anyways! Can't wait to see the finished product.
Logged



Come join us! Free DDR flash game and forums! 1.5 million members! Touhou is popular here!
solrack07



View Profile
« Reply #7 on: May 17, 2008, 01:44:31 PM »

the game look awesome and the creations of walfas XD
do you see the post of today in walfas ^^
i don't know languages but if i can help,i will do ^^
oh! one thing
i move marisa,master spark to ran,move sakuya,do ilusion world,move reimu and... the enemy turn??
Logged

( ゚∀゚)o彡゜えーりん!えーりん!
( ゚∀゚)o彡゜えーりん!えーりん!
( ゚∀゚)o彡゜えーりん!えーりん!
( ゚∀゚)o彡゜えーりん!えーりん!
fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #8 on: May 17, 2008, 03:23:48 PM »

I'm trying to reproduce your error Solrack. Is it jumping automatically to the player 2's turn after Reimu's move? It's not supposed to do that.

I need to add a "wait" command to each character's menu if they move and there's nobody in range to end that character's turn. Right now, if you have characters left over that have not used a spellcard, you need to hit "z" on an empty square to bring up the map level menu and hit "end turn." Sorry for the confusion I might have caused.

Wondering if you guys could give me some feedback on the stats system.

There are four stats:
STR - Strength - Directly impacts damage done by "physical" type spell cards. (Two in the game I believe are Youmu's and Chen's as well as the default Basic Shot everyone has.)
AGL - Agility - Ability to dodge. This is the basic "threshold" for hit/miss. High agility also adds a bonus to the hit% for physical attacks.
MAG - Magic Power - Directly impacts damage done by "physical" type spell cards. (Master Spark, Burn Everything, etc)
FAI - Faith - Resistance to magic attacks.

These as well as HP grow linearly with level and are determined by the character. I didn't want to have too many stats, but I also wanted to have some variety.
Logged

Mirage Verius


Fufufu...I'll make this quick...


View Profile
« Reply #9 on: May 17, 2008, 03:36:25 PM »

I'm trying to reproduce your error Solrack. Is it jumping automatically to the player 2's turn after Reimu's move? It's not supposed to do that.

I need to add a "wait" command to each character's menu if they move and there's nobody in range to end that character's turn. Right now, if you have characters left over that have not used a spellcard, you need to hit "z" on an empty square to bring up the map level menu and hit "end turn." Sorry for the confusion I might have caused.

Wondering if you guys could give me some feedback on the stats system.

There are four stats:
STR - Strength - Directly impacts damage done by "physical" type spell cards. (Two in the game I believe are Youmu's and Chen's as well as the default Basic Shot everyone has.)
AGL - Agility - Ability to dodge. This is the basic "threshold" for hit/miss. High agility also adds a bonus to the hit% for physical attacks.
MAG - Magic Power - Directly impacts damage done by "physical" type spell cards. (Master Spark, Burn Everything, etc)
FAI - Faith - Resistance to magic attacks.

These as well as HP grow linearly with level and are determined by the character. I didn't want to have too many stats, but I also wanted to have some variety.

Well it seems all right to me. Though I would recommend adding a physical defense stat. Other than that, the rest is all right.
Logged

fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #10 on: May 17, 2008, 09:50:04 PM »

Physical Defense stat sounds like a good idea. I'll try and revise my damage formulas.

# 5/17/08 - Updates
- Implemented a damage display to show how much damage you did when you attack
- Implemented a "wait" command on character level menu
- Implemented combat stats display

Some new screenshots, showing the addition of a Combat Stats display. Will likely build and export the new version at the end of this week.

http://img231.imageshack.us/img231/2396/combatstat1hp4.jpg
http://img293.imageshack.us/img293/3139/combatstat2rq4.jpg

[Edit second link is new]
« Last Edit: May 18, 2008, 06:24:43 PM by fawkes » Logged

solrack07



View Profile
« Reply #11 on: May 18, 2008, 01:47:43 AM »

awesome!
please put each X time a new version of the beta ^^(and if you can upload to other server[megaupload for exmaple because sendspace is too low... >.<]
and put that version! ^^

EDIT:Please no abandoned the project =__=
Logged

( ゚∀゚)o彡゜えーりん!えーりん!
( ゚∀゚)o彡゜えーりん!えーりん!
( ゚∀゚)o彡゜えーりん!えーりん!
( ゚∀゚)o彡゜えーりん!えーりん!
Psieye


Lore Hunter


View Profile WWW
« Reply #12 on: May 18, 2008, 02:20:09 PM »

fawkes, as someone who also thought up of a Touhou SRPG project (SRW based, and unlike you, we haven't actually gotten any coding done due to RL time issues) I am very interested in your work. I've given you (see PM) somewhere to upload your files so we can download them without relying on slow public file upload services.

I'll have a bunch of comments to make regarding stats and balance but I want to play test your demo first. I haven't had any luck with Sendspace so far, could you upload your current version up on my 4shared folder I've PM'd you? Oh and since this will probably have many versions, start from an arbitrary version number and increment them to indicate the changes.

Hmm... FE-style... while it would be long far away, does that mean you also have plans for relationship proximity bonuses and such? Wait, let's focus on the basics for now... certainly your movement algorithm will need some thinking since as soon as terrain comes into play, it'll be essential. Speaking of terrain, what scale are you thinking of here? If you were to draw say... Alice's house on the map, would it take up 1 tile or an entire 32x32 map?
Logged

My Touhou Essays - thoughts and speculations (a little outdated given new progress in Perfect Memento)
fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #13 on: May 18, 2008, 04:46:05 PM »

Hello.

@Solrack: Looks like I'm going to be proceeding at full steam ahead. I thankfully waited for summer to start this project otherwise I would have been swamped with crazy physics school stuff.

I'm uploading version 0.0.2 to Psieye's webspace which should be a lot more accessible than sendspace.

http://www.4shared.com/file/48095096/e4304ed7/lostsky-v002-windows.html

Usually I do a test run in the computers in the Materials Lab every morning but I've only tested this build on my laptop and a friend's computer.

Combat should be easier to balance once I get my source code out there. I'm planning to sit down tonight and go through and comment to make sure everything is clear.

Quote
Hmm... FE-style... while it would be long far away, does that mean you also have plans for relationship proximity bonuses and such?

That wouldn't be too hard to implement [ <= Lol something I should have learned by now never to say]  (check if a certain unit is in the appropriate proximity unit and apply the relevant bonuses), but is not on the table. I was talking with Laogeodritt (Feathered Melody Production's resident computer expert) last night as for the movement algorithm, but we couldn't really figure out a good straightforward way to generate the valid moves if there's an obstacle in the way. No idea really how FE and FFT do their movement generation. As for tilesize, I haven't figured it out yet, but I suppose we could go with what Fire Emblem does and allow it to be scalable where we can have battles in both large scale fields or within some place like Scarlet Devil Mansion.
« Last Edit: May 18, 2008, 04:49:48 PM by fawkes » Logged

Psieye


Lore Hunter


View Profile WWW
« Reply #14 on: May 18, 2008, 08:21:11 PM »

Ok so let's see... first, you'll need to let the cursor move continuously when the player holds down an arrow key. As maps get bigger, there's no way you can expect a player to tap the arrow key tens of times to scroll across the map. Both FE and SRW also have a button for fast scrolling to ease the wait time even more.

You show character level - you may as well also show EXP too (for player charas, how much EXP to next level, for enemy charas, how much EXP they are worth to an equal level player unit).

Currently it's possible to move units and then re-command them to attack another time (in the same turn of course) after moving other units. Unless you specifically intend to have this as a feature, it will need updating such that players need to make an attack with that unit as soon as they move it. Furthermore, there is no option to 'take back' a wrong move command - when you prompt the player to attack or wait after moving a unit, it is also a prompt of "are you sure this is where you want to move to?"

Grey out units which have had their move/action in this turn. Makes it clearer who still can act.

At the start of each team's turn, you auto-select a unit for them. Sure, centre the cursor on one of their units but don't select it for them.

Unit death. You cannot have a unit that has died stay on the map. Once terrain and such factor in, it's impossible to say a unit (or group of units) can clog up a narrow passageway with their unconscious bodies.

What else... have you ever played Battle Moon Wars? Before we have proper combat animation, a simple technique would be to have a combat sequence between the sprites. Ok, Tasofro's sprites don't have any emotes to them, so you'll have to make do with icons, speech bubbles or generic bullet animations (one size fits all - don't try to individualise the bullets for each attack or character at this point) for now.

I notice you're using FE's system of "you keep using the weapon you're equipped with for counter attacks". At least in FE, you could do item switching to re-equip a 'grunt killer' weapon on a unit after it used some expensive thing. There are 2 ways to approach this since item switching isn't applicable for your case:
1) designate an attack (chosen by the player on their turn) which is always used in counter attacks regardless of what the unit used to attack on its own action.
2) the SRW way of asking the player to choose an appropriate weapon (or to focus on defence/evasion) each time a unit is under attack.

Speaking of counter attacks, I notice they're not always possible. What are the conditions for counter attacking?

I'm thinking far ahead on this point, but how will spellcards work? Each character has far more spellcards than can fit on that 5 slot menu for attacks. Does this mean on the Intermissions, you pick which spellcards to equip and how many? Also on that note, will you allow a unit to use their strongest spellcard right from the start of the map (assuming they've unlocked it in the story)? I'm talking about the SRW Kiryoku (morale) system here (do tell me if SRW isn't familiar to you).

When displaying the combat preview on the bottom right, I notice you don't display predicted damage if the attack lands. FE's combat preview showed predicted damage, crit chance and any double/quad attacks. Of course, you may not want to show predicted damage, like how SRW does it.

As for stats... that's another long post for another time, but first question: are there going to be any attacks that rely on physical force as opposed to danmaku? After that I can advise on stats better.


AI... feel free to browse through this short page on our thoughts for AI. In fact, feel free to browse the rest of our project's pages on that wiki for any other ideas.



Oh and almost forgot: Congratulations for getting this off the ground and having planned out the free time to work on it!
« Last Edit: May 18, 2008, 08:23:39 PM by Psieye » Logged

My Touhou Essays - thoughts and speculations (a little outdated given new progress in Perfect Memento)
fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #15 on: May 18, 2008, 09:45:06 PM »

I'll address some points really quickly since I have to go to bed. (Need to be in the research lab tomorrow morning)

I'll look into reprogramming the cursor. Might have to change some things with how Pygame reads the inputs. So far I have it only registering a key press instead of keys being held down since I'm calling it from Pygame's event list which only registers "changes" in conditions. I'll look into documentation. There's got to be a way to do it.

Quote
Currently it's possible to move units and then re-command them to attack another time (in the same turn of course) after moving other units. Unless you specifically intend to have this as a feature, it will need updating such that players need to make an attack with that unit as soon as they move it. Furthermore, there is no option to 'take back' a wrong move command - when you prompt the player to attack or wait after moving a unit, it is also a prompt of "are you sure this is where you want to move to?"

[Will address this tomorrow.] Completely agreed on the need for a take-back command as well as a "are you sure you want to attack" prompt.

Quote
Grey out units which have had their move/action in this turn. Makes it clearer who still can act.

Agreed. I was looking to see if Pygame image functions could do some kind of "apply a shade to a sprite", but I haven't found a way. I guess I'll go ahead and make a second set of sprites that correspond to "turn end.

Quote
At the start of each team's turn, you auto-select a unit for them. Sure, centre the cursor on one of their units but don't select it for them.

I wasn't aware this was happening. >_< I have it set only to center on the target, though what might be happening is a Z-key press during the "Player 1's Turn" is being read immediately and the unit is selected. I'll look for a way to fix it.

Quote
Unit death. You cannot have a unit that has died stay on the map. Once terrain and such factor in, it's impossible to say a unit (or group of units) can clog up a narrow passageway with their unconscious bodies.

I can see the problem there. I'll look into adding a check at the map level to remove the dead units.

Quote
What else... have you ever played Battle Moon Wars? Before we have proper combat animation, a simple technique would be to have a combat sequence between the sprites. Ok, Tasofro's sprites don't have any emotes to them, so you'll have to make do with icons, speech bubbles or generic bullet animations (one size fits all - don't try to individualise the bullets for each attack or character at this point) for now.

Haven't played Battle Moon Wars, but I'll see if I can find some videos online. That sounds like a good idea.

Quote
I notice you're using FE's system of "you keep using the weapon you're equipped with for counter attacks". At least in FE, you could do item switching to re-equip a 'grunt killer' weapon on a unit after it used some expensive thing. There are 2 ways to approach this since item switching isn't applicable for your case:
1) designate an attack (chosen by the player on their turn) which is always used in counter attacks regardless of what the unit used to attack on its own action.
2) the SRW way of asking the player to choose an appropriate weapon (or to focus on defence/evasion) each time a unit is under attack.

Speaking of counter attacks, I notice they're not always possible. What are the conditions for counter attacking?

Conditions for countering are 1) Your equipped SC has enough range to hit the target. As in, Marisa's Master Spark has the longest range, so it's safe to use it against someone with a short range counter. 2) Each Spellcard has an attribute of Counterattack as "true" or "false" so only certain SC's are able to be used to counter. The logic being that some spells are very powerful, but leave you open to attack (Case in point being Master Spark).

Quote
I'm thinking far ahead on this point, but how will spellcards work? Each character has far more spellcards than can fit on that 5 slot menu for attacks. Does this mean on the Intermissions, you pick which spellcards to equip and how many? Also on that note, will you allow a unit to use their strongest spellcard right from the start of the map (assuming they've unlocked it in the story)? I'm talking about the SRW Kiryoku (morale) system here (do tell me if SRW isn't familiar to you).

I think you've got the general gist of it. The party has a "stock" of spellcards that come in three flavors: Generic (This corresponds to things that just about anyone can use. Energy orbs, kunai-danmaku, those V shaped things), class specific (Marisa and Patchy for example would be able to use magic-type SC's but not someone like Youmu), and character specific (Master Spark stays with Marisa). How one goes about acquiring the spell cards is a completely different matter since I don't think they're items one can just pick up at the local Kourindou.

SRW isn't familiar to me at all beyond the name. What is the Kiryoku system like?

Quote
When displaying the combat preview on the bottom right, I notice you don't display predicted damage if the attack lands. FE's combat preview showed predicted damage, crit chance and any double/quad attacks. Of course, you may not want to show predicted damage, like how SRW does it.

[Will address tomorrow in further detail tomorrow] Main problem is that damage is currently done with some number of dice being rolled. I guess I could report the mean likely damage. I really need to get the combat code out tomorrow.

Quote
As for stats... that's another long post for another time, but first question: are there going to be any attacks that rely on physical force as opposed to danmaku? After that I can advise on stats better.

I can imagine Youmu and Chen having some. (In the early iterations, I gave her a range 1 spellcard). I'm not really sure how I would treat it differently.

Quote
AI... feel free to browse through this short page on our thoughts for AI. In fact, feel free to browse the rest of our project's pages on that wiki for any other ideas.

Glanced through the ideas. Sounds like I would be able to learn from it. I'd also like to have some enemies that are set to "defensive" where they remain around a location until you get within a range and then they start moving.

Quote
Oh and almost forgot: Congratulations for getting this off the ground and having planned out the free time to work on it!

Thanks. Your advice is going to be very helpful.

Also are you on AIM often? That would probably be the best way to keep in touch with me.
« Last Edit: May 18, 2008, 09:47:06 PM by fawkes » Logged

Psieye


Lore Hunter


View Profile WWW
« Reply #16 on: May 19, 2008, 05:49:49 AM »

I'll look into reprogramming the cursor. Might have to change some things with how Pygame reads the inputs. So far I have it only registering a key press instead of keys being held down since I'm calling it from Pygame's event list which only registers "changes" in conditions. I'll look into documentation. There's got to be a way to do it.
Agreed there must be a way to do it. If in the very unlikely scenario it's not possible (if Pygame can do platform games or any other such game where you need to hold down the arrow keys, it can do it), the alternative is to have say... "Shift + Arrow Key" move 3 squares at a time instead of 1.

Quote
I wasn't aware this was happening. >_< I have it set only to center on the target, though what might be happening is a Z-key press during the "Player 1's Turn" is being read immediately and the unit is selected. I'll look for a way to fix it.
Hmm yes, I'm automatically pressing Z when the "Player X's Turn" message by instinct. I guess that message doesn't need to be up there for too long.

Quote
Haven't played Battle Moon Wars, but I'll see if I can find some videos online. That sounds like a good idea.
I highly doubt you'll find videos of the sprite fight because they'll all focus on the cool battle animations instead ^^;; Here, I've made some screenshots so you can see:
Akiha attacks, the hit lands, damage is displayed.

Black Saber attacks, it hits, damage displayed.

Quote
Conditions for countering are 1) Your equipped SC has enough range to hit the target. As in, Marisa's Master Spark has the longest range, so it's safe to use it against someone with a short range counter. 2) Each Spellcard has an attribute of Counterattack as "true" or "false" so only certain SC's are able to be used to counter. The logic being that some spells are very powerful, but leave you open to attack (Case in point being Master Spark).
Ah! Interesting... If that's the case then there's no need to implement my suggestions for choosing which attack to counter attack with. Since the expensive attacks can't be wasted in endless counter attacks, that's fine.

Quote
I think you've got the general gist of it. The party has a "stock" of spellcards that come in three flavors: Generic (This corresponds to things that just about anyone can use. Energy orbs, kunai-danmaku, those V shaped things), class specific (Marisa and Patchy for example would be able to use magic-type SC's but not someone like Youmu), and character specific (Master Spark stays with Marisa). How one goes about acquiring the spell cards is a completely different matter since I don't think they're items one can just pick up at the local Kourindou.
Ah... yes that would work well. Hmm... nomenclature technicality: only the character-specific attacks are Spellcards. The generic shots aren't spellcards. This is just a matter of renaming "Spellcard" as "Attack" or such.

Based on this system the next question is: how does reloading in between maps go? Will you implement a stingy "you start with all the ammo you'll ever have for this attack" system? Or auto-replenish all ammo at the start of a new map? Or maybe you need to 'buy' (doesn't have to be money, it can be points of some sort) extra ammo, with the points/currency being earned from plot and killing characters?

Quote
[Will address tomorrow in further detail tomorrow] Main problem is that damage is currently done with some number of dice being rolled. I guess I could report the mean likely damage. I really need to get the combat code out tomorrow.
Ah, there's dice involved in ordinary damage calculations. Yeah, as both FE and SRW have deterministic formulae (barring crits and other special ability procs) and I've no experience with FFT. Very well, if dice are being rolled for damage, hmm... you may as well show the raw numbers then so people know what to expect. A sort of "13+3d6" will suffice, or maybe a "12~23".

Quote
I can imagine Youmu and Chen having some. (In the early iterations, I gave her a range 1 spellcard). I'm not really sure how I would treat it differently.
Well, your existing stats already differentiate Physical vs Magic attacks: Physical att/def and Magical att/def. Having all attack and defence be the same stats regardless of attack type limits strategy somewhat. We'll discuss stats in detail in the near future I guess.

Speaking of which... have you thought about Healing? What of consumable and equipable items?

Quote
Glanced through the ideas. Sounds like I would be able to learn from it. I'd also like to have some enemies that are set to "defensive" where they remain around a location until you get within a range and then they start moving.
Yep, both in SRW and FE, there'd be some enemy units which are 'idle' until a certain condition (usually turn X passes, or if you get within range) is met.

Quote
Thanks. Your advice is going to be very helpful.
You're welcome.

Quote
Also are you on AIM often? That would probably be the best way to keep in touch with me.
See new PM.



Quote
SRW isn't familiar to me at all beyond the name. What is the Kiryoku system like?
Ok... the Kiryoku (morale) system... This is basically SRW's answer to the eternal question of "hey, why don't the good guys just use their OMG attack right from the start and finish the fight right then and there instead of dragging it out the whole ep while getting beaten up?"

Everyone starts at 100 Kiryoku. Specific combat-related events (e.g. getting hit) are the most common ways it changes, but there are other ways too (e.g. using a 'spell'-like command to insta-boost it). It primarily affects how much damage you do and take, or more technically, it's a "+X% to att/def power" where X is related to how far away from 100 Kiryoku you are. Can go up or down to 150 or 50.

However, certain characters have special abilities or attacks which have a pre-requisite Kiryoku level. The "OMG attack" which ends the episode may have say, 130 Kiryoku as a requirement so you need to fight with lesser attacks until you've 'warmed up' enough to dish it out. Or it might be that at 130 Kiryoku your supernatural afterimage speed kicks in and you get a free 50% chance to dodge an attack that would otherwise hit you (you also get your regular dodge roll).

To apply to Touhou, it would explain why characters usually start with their easier attacks and spellcards first - they need to build up Kiryoku to handle the burden/stress of the stronger spellcards.



Well... seems we need a nice long talk on your vision for the combat mechanics. Hmm... RL is busy this week though... we'll see how it rolls.
« Last Edit: May 19, 2008, 08:15:58 AM by Psieye » Logged

My Touhou Essays - thoughts and speculations (a little outdated given new progress in Perfect Memento)
fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #17 on: May 19, 2008, 12:51:56 PM »

With regard to being allowed to make an attack at a later time after the player makes a move, it's currently the way I have it constructed. Do you think you could explain the rationale behind forcing the player to make an action decision immediately after making a move?

Regarding damage displays, [I will post the combat code as soon as it's commented and ready which should be either tonight or tomorrow night], I think going with a deterministic damage rate might be an option. It would be much easier to balance as opposed to determining the likely consequences. It'll merit a revision of the current system.

Quote
Hmm yes, I'm automatically pressing Z when the "Player X's Turn" message by instinct. I guess that message doesn't need to be up there for too long.

I've got the message set to display for 2 seconds. I could turn it down to 1 second.

Quote
Akiha attacks, the hit lands, damage is displayed

This looks like a good starting point for developing a display of combat. I looked at some videos of the Battle Moon Wars games. What determines if you use the sprite based animation or the super fancy combat animations?

Quote
Based on this system the next question is: how does reloading in between maps go? Will you implement a stingy "you start with all the ammo you'll ever have for this attack" system? Or auto-replenish all ammo at the start of a new map? Or maybe you need to 'buy' (doesn't have to be money, it can be points of some sort) extra ammo, with the points/currency being earned from plot and killing characters?

I'm leaning towards the second option at the moment, but to have powerful spells like Master Spark (I pick on this spell too much in my examples) have very few uses per battle.

Quote
Well, your existing stats already differentiate Physical vs Magic attacks: Physical att/def and Magical att/def. Having all attack and defence be the same stats regardless of attack type limits strategy somewhat. We'll discuss stats in detail in the near future I guess.

The actual combat code I believe differentiates the two in the following way:

Physical - More accurate (You get an additional bonus from your agility stat. It would represent your ability to throw kunai for example.) but does less damage. Dice I use are d6's.
Magic - Less accurate (You don't get the additional agility stat bonus.), but does more damage, especially to an enemy with a low faith stat (don't have physical defense programmed in right now). Dice are d8's.

Quote
Everyone starts at 100 Kiryoku [...]

That is a really interesting system and it would be something I would like to incorporate. Thanks for telling me about it.

Logged

Psieye


Lore Hunter


View Profile WWW
« Reply #18 on: May 19, 2008, 02:28:15 PM »

With regard to being allowed to make an attack at a later time after the player makes a move, it's currently the way I have it constructed. Do you think you could explain the rationale behind forcing the player to make an action decision immediately after making a move?
It's not strictly necessary, but some points to consider would be:
1) You'd need to have another set of indicators to show units which have moved but can still attack.
2) Provided the player accepts the "are you sure you want to move here?" prompt, they shouldn't then be able to go back and re-adjust moves on the fly just because something somewhere else happened unexpectedly that turn (e.g. someone failed to kill a critical unit). As in, you can't "take back" a move on a unit you moved at the start of the turn just because another unit performed unexpectedly in the middle of your turn. This is especially relevant if you implement relationship proximity effects.

Further points should you choose to implement these advanced features from SRW:
3) Team Combo attacks and/or Support Attacks. Features where two units have to be adjacent to each other and can attack that turn to pull off.
4) "Move or Shoot" attacks, which are considered to take extra time to pull off, you cannot use them after moving.


As I said, it's not strictly necessary but it may be simpler on the player and on various feature balancing if you force an action as soon as you move. It also forms a natural "are you sure you want to move here?" prompt by asking for the action (or the Wait command) after a move.

Quote
Regarding damage displays, [I will post the combat code as soon as it's commented and ready which should be either tonight or tomorrow night], I think going with a deterministic damage rate might be an option. It would be much easier to balance as opposed to determining the likely consequences. It'll merit a revision of the current system.
Noted. FE shows the damage display whereas SRW doesn't (which just means the player would have to be very much more enthusiastic with formulae to work out damage beforehand). Your choice how to tackle it.


Quote
I've got the message set to display for 2 seconds. I could turn it down to 1 second.
I think FE displayed a quick animation which lasted less than a second, so yeah, 1 second should suffice.

Quote
This looks like a good starting point for developing a display of combat. I looked at some videos of the Battle Moon Wars games. What determines if you use the sprite based animation or the super fancy combat animations?
The player toggles a flag (by pressing a button when the "do you wish to attack?" prompt comes up) to choose which animation to use. Sometimes you want to savour the fancy combat, other times you just want to get on with the battle. FE has that feature too actually, though the flag was in the options menu as opposed to being part of the combat prompt.

Quote
I'm leaning towards the second option at the moment, but to have powerful spells like Master Spark (I pick on this spell too much in my examples) have very few uses per battle.
*nods* the SRW way, which is the most sensible to me, yes. Some attacks had as low as base ammo 1 (with various ways to expand it). Mind, SRW had some weapons be Energy consuming instead of ammo consuming, meaning some weapons shared an effective 'ammo' bar that slowly recharged.

Oh also, alongside the Healer type unit (which you haven't decided whether you'll have or not), will you have a Resupplier type unit? This unit may or may not be able to move, may or may not be able to fight. Its purpose is to use its action to reload ammo on an adjacent ally's weapons. The resupplied unit would suffer morale penalties in SRW. FE of course, had the very ammo limited Repair wand do this job. There are more ways of imposing a penalty for resupplying - maybe the unit needs to give up an entire movement and action phase to reload.

Quote
The actual combat code I believe differentiates the two in the following way:

Physical - More accurate (You get an additional bonus from your agility stat. It would represent your ability to throw kunai for example.) but does less damage. Dice I use are d6's.
Magic - Less accurate (You don't get the additional agility stat bonus.), but does more damage, especially to an enemy with a low faith stat (don't have physical defense programmed in right now). Dice are d8's.
Hmm, I see. We'll discuss this in more detail on AIM sometime. Before I can balance anything, I need to have a grasp of the overall picture - how upgrades, items, etc etc (if any) will be incorporated.

Quote
That is a really interesting system and it would be something I would like to incorporate. Thanks for telling me about it.
*nods* I'll give the full details in an AIM conversation sometime - we need to tailor it to your mechanics afterall.
« Last Edit: May 19, 2008, 02:31:29 PM by Psieye » Logged

My Touhou Essays - thoughts and speculations (a little outdated given new progress in Perfect Memento)
Drake


View Profile
« Reply #19 on: May 19, 2008, 03:29:17 PM »

Oh crap it's Fawkes.

I played your game, it looks really fun.
Logged
fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #20 on: May 19, 2008, 07:40:45 PM »

Eh... I found a way to do the hold down thing, but I don't think it's the best way. Basically to create a "noninteger" version of the cursor position and call a rounded off version whenever I need a position as in selecting a unit. The problem with directly adding a +/- 1 X  or  +/- 1 Y if you are holding down is that your cursor moves WAY too fast. There's got to be a better way to do it than how I did it. I'm thinking having some kind of counter and only check if your key is pressed down every X amount of frames (Game runs at 30FPS). [Edit:Yeah this way is muuuuch better.]

Here's the relevant parts of the combat code. Comments show how a battle event would progress.

Code:

class Spellcard(object):

    [...Initialization stuff was here...]

    ############################################
    # Function Name: attack
    # Purpose: Executes an attack
    # Inputs: attacker = person using this spellcard
    #         defender = target of attack
    ############################################   

    def attack(self,attacker,defender):

        # Gets the two thresholds
        # THRESHOLD = 2 + Unit's Agility + Unit's AGL Mod from equipped SC
        thresholda = 2+attacker.agl+self.aglmod
        thresholdd = 2+defender.agl+defender.spell_cards[defender.equipped].aglmod
        damage = 0

        print attacker.name, ' uses ', self.name, ' against ', defender.name

        # Damage calculation for physical type spellcards
        if self.attacktype == 'physical':

            # Roll for attack: 2d6 + attacker's AGL accuracy mod + Spell Acc mod
            attackroll = randint(1,6)+randint(1,6)+int(floor(thresholda/3))+self.accmod

            # If the attack roll is over the defender's threshold, it is considered a hit
            if attackroll >= thresholdd:
                print attacker.name,' hits', defender.name

                # Damage = (STR + STRmod)d6
                hitdice = (attacker.str + self.strmod)
                for _ in xrange(0,hitdice+1):
                    damage += randint(1,6)

                # If the attack roll is over 12, it is considered a critical hit and damage is multiplied 1.5
                if attackroll >= 12:
                    print "Critical hit!"
                    damage = int(damage*1.5)

                print attacker.name, ' does %4.0f damage!'%damage

        # Damage calculation for physical type spellcards
        if self.attacktype == 'magical':

            # Roll for attack: 2d6 + Spell Acc mod
            attackroll = randint(1,6) + randint(1,6) + self.accmod

            # If the attack roll is over the defender's threshold, it is considered a hit
            if attackroll >= thresholdd:
                print attacker.name,' hits', defender.name
               
                # Damage = (MAG + MAGmod - Target.FAI - Enemy's equipped SC Fai bonus)d8 with a minimum of 2d8
                hitdice = int(attacker.mag + self.magmod - defender.fai - defender.spell_cards[defender.equipped].faimod)
                if hitdice < 2:
                    hitdice = 2
                for _ in xrange(0,hitdice+1):
                    damage += randint(1,8)

                # If the attack roll is over 12, it is considered a critical hit and damage is multiplied 1.5
                if attackroll >= 12:
                    print "Critical hit!"
                    damage = int(damage*1.5)

                print attacker.name, ' does %4.0f damage!'%damage

        # Updates the defender's HP
        defender.HP -= damage
        # If the defender is dead, sets HP to 0 and sets their alive flag to False
        if defender.HP <= 0:
            defender.HP = 0
            defender.alive = False

        # If the damage done is 0, the attacker missed
        if damage == 0:
            print 'Miss!'
            damage = 'miss'

        # Calls the defender's method to display damage.
        defender.plot_damage(damage)

        # Lowers life by 1
        self.livesleft -= 1

        # Enemy counterattack stage
        #(only executes when they are still alive and the spell card is usable for a counterattack)
        if defender.alive == True and defender.spell_cards[defender.equipped].counterattack == True:
            delta_pos = attacker.location_tile - defender.location_tile

            # Checks if the attacker is in range of the defender
            if defender.spell_cards[defender.equipped].validattacks.has_key(tuple(delta_pos)):

                print defender.name, ' uses ', defender.spell_cards[defender.equipped].name, ' to counterattack ', attacker.name

               
                # Damage calculation for physical type spellcards
                if defender.spell_cards[defender.equipped].attacktype == 'physical':

                    # Roll for attack: 2d6 + defender's AGL accuracy mod + Spell Acc mod
                    attackroll2 = randint(1,6)+randint(1,6)+int(floor(thresholdd/3))+defender.spell_cards[defender.equipped].accmod

                    counterdamage = 0

                    # If the attack roll by the defender is over the attacker's threshold, it is considered a hit
                    if attackroll2 >= thresholda:
                        print defender.name,' hits', attacker.name

                        # Damage = (STR + STRmod)d6
                        hitdice2 = (defender.str + defender.spell_cards[defender.equipped].strmod)/2
                        for _ in xrange(0,hitdice2+1):
                            counterdamage += randint(1,6)

                        # If the attack roll is over 12, it is considered a critical hit and damage is multiplied 1.5
                        if attackroll >= 12:
                            print "Critical hit!"
                            counterdamage = int(damage*1.5)

                        print defender.name, ' does %4.0f damage!'%counterdamage

               
                # Damage calculation for magic type spellcards
                if defender.spell_cards[defender.equipped].attacktype == 'magical':

                    # Roll for attack: 2d6 + Spell Acc mod
                    attackroll2 = randint(1,6) + randint(1,6) + defender.spell_cards[defender.equipped].accmod

                    # If the attack roll by the defender is over the attacker's threshold, it is considered a hit
                    if attackroll2 >= thresholda:
                        print defender.name,' hits', defender.name
                       
                        # Damage = (MAG + MAGmod - Target.FAI)d8 with a minimum of 2d8
                        hitdice2 = int(defender.mag + defender.magmod - attacker.fai -self.faimod)
                        if hitdice < 2:
                            hitdice = 2
                        for _ in xrange(0,hitdice2+1):
                            counterdamage += randint(1,8)

                        # If the attack roll is over 12, it is considered a critical hit and damage is multiplied 1.5
                        if attackroll >= 12:
                            print "Critical hit!"
                            counterdamage = int(damage*1.5)

                        print defender.name, ' does %4.0f damage!'%damage

                   
                # Updates the attacker's HP
                attacker.HP -= counterdamage
                # If the attacker is dead, sets HP to 0 and sets their alive flag to 0
                if attacker.HP <= 0:
                    attacker.HP = 0
                    attacker.alive = False

                if counterdamage == 0:
                    print 'Miss!'
                    counterdamage = 'miss'

                # Lowers life of defender's equipped counter by 1
                defender.spell_cards[defender.equipped].livesleft -= 1

                # Plots counterattack damage
                attacker.plot_damage(counterdamage)


Oh crap it's Fawkes.

I played your game, it looks really fun.

Drake from TOSF?
« Last Edit: May 19, 2008, 07:59:06 PM by fawkes » Logged

Psieye


Lore Hunter


View Profile WWW
« Reply #21 on: May 20, 2008, 09:44:12 AM »

Ok, I've had a look at the combat code now. Well, we'll be discussing it in detail on AIM sometime (hopefully this week but not sure) but some quick comments now:


- Ummu, I guess I can see the problem with nomenclature. You've already extensively coded with "Spellcard" as a class for all attacks and the word "attack" is needed in other routines. The word "weapon" probably doesn't quite reflect it well... maybe "danmaku"? But that doesn't cover direct melee attacks... Ah well, so long as in the game's text you don't say "Spellcard" for every attack it's fine whatever names you use in the code but it could get confusing fast...
- Hmm, if this was stretched to endgame, you'd get some strange situations happening. Defender still gets Agi bonuses for dodging magic attacks, so this may end up with magic attacks never being able to hit anything as stats get high.
- The condition for a crit is comparing to a fixed threshold. This means in endgame, every hit must be a crit otherwise it is considered a miss (i.e. when thresholdd is >12)
- From a programming perspective, you're doing largely the same thing twice in this code. Modularise further to something like this:

Code:
class Spellcard
   fight(self, attacker, defender)
      attack(attacker, defender)
      if (B's spellcard.counter = true)
         attack(defender, attacker)

Logged

My Touhou Essays - thoughts and speculations (a little outdated given new progress in Perfect Memento)
fawkes


"Live while awake. Live while dreaming."


View Profile
« Reply #22 on: May 20, 2008, 07:55:00 PM »

I think I've decided to move to a "work on alternating days unless something pressing comes up" schedule. That way I won't get burned out from working on this constantly.

Tuesdays/Thursday = Work on unrelated writing project / stuff for Feathered Melody Productions days
Mon/Wed/Fri = Work on SRPG days

Tomorrow, I'm going to give some thought into how to rearrange the battle system and link it with the stats system to be simpler to understand (and subsequently balance). I have a 75% working (in that it uses different damage formulas) program that I can just plug into that runs 40ish encounters between two players of level 1-40 and all the possible level matchups. It outputs info like average damage and hit%.

Hold down key movement was fixed this morning. Not sure I want to touch the spellcard code until damage formulas get figured out.

We now have a wiki page. Reflects some of the discussions between Psieye and myself this afternoon.
http://dmf.shrinemaiden.org/Story_of_a_Lost_Sky
« Last Edit: May 20, 2008, 07:56:46 PM by fawkes » Logged

barasia


Loves to Moon gaze.


View Profile
« Reply #23 on: May 20, 2008, 09:19:18 PM »

Quote
I haven't really developed the story much yet. I'd like for it to be a classical type adventure with a hero going on a quest to save the world and growing up internally in the process. Marisa and Reimu are seasoned veterans, and they'll be there as major characters, but I'd like to have Youmu be at least one of the lead roles. In standard Touhou fashion, a great crisis will arise (The tentative title is: Story of a Lost Sky), but it won't take itself too seriously.

when i heard the title, and tried to equate it with your previous projects, somehow, epic imagery of battles in a floating 'city' came to mind. that's because i equated the title with the song "The Capital City of Flowers in the Sky".
(of course, this game might involve mass murder of faries, as 'all' Touhou games do.)
Logged

we start off with a void in us. we must end with it filled.
Thomas


View Profile
« Reply #24 on: Today at 01:04:00 AM »

So I was reading the stuff on the wiki, and it looks like you have 1-3 mostly worked out. So I'll give some suggestions on 4 and 5.

Most of its just brainstorming, but I think I came up with some decent ideas.

Damage formula:
Add a DEF stat for physical defense.
(Optional) add LUCK. Decides crits (instead of attack roll) and 5%-20% of luck is added on to all other stats.

Healing/Resupplying:
You could make a few different categories of attacks
- Spell card. Small amount of uses, character recharges it after X turns (Or at the end of the current chapter). Character starts with 1 (Or gets one very shortly after unlocking said character) but will probably not get another one.
- Danmaku. Large amount of uses, character never recharges it, buyable (with varying prices and effectivness, ofc)
- Artifacts. Moderate amount of uses, rechargeable by a healer/support character (Unless recharged in this way, the charges will never come back). Weaker artifacts are buyable.

Spell cards would be ohshi- buttons and effective ways of beating bosses, danmaku would be your basic grunt killers, artifacts have alternate effects (Like buffs and heals and such)

As for healing, my suggestion would be something like this: [attacker.MAG + (defender.LUCK/10) + defender.FAI] * attacker.item = Damage healed.

attacker.item being how good the staff/spell you're using to heal is. A wooden staff of healing would be 1, a spell card Eirin designed that CURES PEOPLE FROM THE BRINK OF DEATH would be a 2.5 or something.

EXP:

Do what FE did and pick a nice round number like 100. Or one with a lot of factors, like 96. Or both, like 9600! Hm. Or maybe not 9600.
Units should get EXP for:
-Dealing/Taking/Healing damage (Base it on the amount dealt/taken/healed imo)
-Being near an enemy as it dies (Miniscule if actually included)
-Advancing the plot in some way
-Killing something (Based on overkill%, whether it was a killsteal or not and the level of the enemy.)

Terrain bonuses/Penalties:

Well, in most tactical games (Though I haven't played that much of them tbh) you get some pretty generic stuff as far as terrain goes. If you could base some sort of mechanic other than "+def and +dodge" on terrain then that would be pretty awesome.

[Yeah, I've probly missed a game that already has a major terrain based mechanic, but I'm suggesting that on the off chance that I haven't]

Spell cards and the aquisition thereof:

Either make the characters stick with their original spellcard, or make aquiring new ones somewhat difficult; leave the whole item management part of the game to lesser spells. As for how they affect stat growth, I really have no opinion (or ideas) as of now.

Spell masteries:

The most basic way of doing this would probably be FE's system where each character starts with "grades" in all the things they can do, which gets better as the character uses that type of attack or ability. You could use this but add in other factors to spice it up, like someone far better at the spell being nearby and giving you commands (e.g. Marisa is attempting to heal someone. She's usually a D at healing but Eirin (Who is an A) is nearby, telling her how to do it. So she gets bumped up to a C)

Logged
Pages: [1]
Print
Jump to:  


Page created in 0.059 seconds with 17 queries.