Jump to content

  • Log In with Google      Sign In   
  • Create Account

Servant of the Lord

Member Since 24 Sep 2005
Offline Last Active Today, 12:07 PM

#5312674 MVC understanding

Posted by on 26 September 2016 - 09:40 AM

MVC should help to organize code, but for now it turned my code into complete mess.

 

When you get into design patterns in general (of which MVC is just one of many), then you need to quickly learn that design patterns aren't applicable everywhere, they don't have to be implemented exactly as described, and they aren't legos that you build with (they are shorthands you use to describe concepts).

 

What this means is:

A) Is this the appropriate place to use MVC?

B) What is the best way to implement it in this situation?

C) Are you using it just because you've heard about MVC, or are you using it because you have a genuine need for MVC?

 

Also, MVC is primarily about separation of concerns, not necessarily code organization.

 

Some people implement MVC as a View, with the Model also being the Controller. Sometimes the Model and the View are both controllers. There are other good implementations too. It's important to realize that different projects have different needs, and there's not "One True Implementation" that solves everything for every problem.

Often, you don't need to pass messages to the View, just give the View a pointer/reference to the Model, otherwise you'll be duplicating the same data in two different locations.

 

I would argue that, in this situation, making 'Game' have separate Model, View, and Controller is overkill. With Player is could be overkill, but might not be. With Board it's often a good idea.




#5312594 the dreaded "escort" quest

Posted by on 25 September 2016 - 08:43 PM

how about a "deliver message" (or whatever) type quest, and they give you a couple of warriors (temporary followers) as bodyguards, and you get quest encounters with double (or at least higher than usual) number appearing. would that be ok? that _would_ make it a quest - as opposed to a player initiated action.

 

That could work, if, for example, you have five people guarding you, and you suddenly get ambushed by 12 or so enemies trying to intercept the message, so you have to escape out of danger (with close to zero chance of defeating all the enemies), with your escort trying to buy you time to escape ("We'll hold them off - hurry and get out of here! Our tribe's survival depends on you delivering that to <allied tribe>!").

 

I don't think that can be pulled off more than once (or twice) in one game though.




#5312335 the dreaded "escort" quest

Posted by on 24 September 2016 - 12:20 PM

One of the most memorable COD missions is a reverse escort quest :D

 

That was fun. They pushed some of those missions a bit too much in later CODs though.

 

I think another nice twist on escort quests, would be quests where you are "escorting" specific NPCs from afar, by covering them with a sniper rifle or helicopter, or heck, a bow and arrow. I'm sure there are some examples of that, but I don't remember any off-hand. Usually the COD "overlord" missions were more shooting fish in a barrel type of fares, rather than focusing on covering specific individuals even if that was ostensibly what you were doing.




#5312334 the dreaded "escort" quest

Posted by on 24 September 2016 - 12:10 PM

 

you would have to rely on a more powerful character who is escorting you through an area full of extremely powerful enemies or environmental hazards

 
but what would be the reason for the player to enter such an area?

 


To get to the other side?

Imagine you are in Valley A, and you are trying to get to Valley B, which is also your level, but between the two is Really Dangerous Canyon of the Cockatrices, so you need an escort.

You are merely trying to get through a very difficult area.

Another reason is because you are trying to collect something in a cave, filled with noxious gases (or darkness), and you need to stay close to the mage who casts a barrier of good air (or light).
^ This becomes a collection quest, but with an added mechanic that makes it feel different.

 

Or maybe it's a "Kill <Specific Enemy>" quest, but the specific enemy is way above your level, so it turns that boss-fight into a "survive the boss for enough time for <Your Powerful Escort> to kill the boss", which is an interesting twist on regular boss-fights, AND acts as a power-benchmark for the player looking forward to the future when he's powerful enough to kill the same species of boss (i.e. a large dragon).
 

it would probably play out much like a regular escort quest. you stick to the NPC like glue, not so they won't die, but so you won't die.

But conceptually, and practically, it is different:

A) When you wander outside of the escort's purview, you have ZERO nagging feeling that the AI is going to get killed.
B) You feel awed at the dangerous creatures around you.
C) Because you are in a really dangerous area, you feel extra tension and concern for yourself.
D) You are more likely to like the NPC as a character, writing-wise, then if he was a nuisance to you. Psychologically, you might even feel gratitude or admiration.

It's a very significant twist - I wish I could upvote Demiurgic_Amon several more times for suggesting it.  :)




#5312179 Leveling up through mini-quests?

Posted by on 23 September 2016 - 05:20 PM

Because you're building your stats because on the quests you do. Rather than the number of enemies you've killed or number of times you've used a weapon, skill, or magic.

 

If you want to be a warrior, you'll do quests that will strengthen strength, attack, physical defense. If you want to be a thief, you'll do quests that will strengthen intelligence, agility, stealth.

 

In 'Fable' (one of the first two - I haven't played the others), you have four different experiences that act as currency:

- General experience can be spent on anything

- Three different attribute-specific experiences (I think they were Strength-based skills, Dexterity-based skills, and Magic-based skills).

 

When defeating an enemy, depending on what abilities you used to defeat it, you'd get that same kind of attribute-specific experience as well some general experience, providing a mix of freedom to develop your character how you want (using general experience), and also growth in the same area you are actively using (the other experience types).

 

 

 

Kill 10 slimes in a normal RPG would add EXP points and going to the next level will up all your stats. Move 10 rocks will increase your strength only. Kill 10 bears will increase only your strength and your stamina.

 

So to try to put it another way, the events (as I call them) only increase a particular stat (or two depending on the quest).

 

What if I take the "Kill a bear" quest, and I kill him by pushing rocks over a cliff edge onto his head? Your quest wouldn't recognize it, because it sounds like you are designing your quests to force the player to approach them a specific way. 

 

Suppose I kill the bear via dousing it in gasoline and lighting it on fire? Or kill it with arrows from 100ft away? How is strength involved?

Suppose I kill the bear by running away from it, and luring it to try to cross a rope bridge, and then it falls to its death when I cut the rope?

 

Obviously not all these mechanics will be implemented in your game - my only point is underlining that your are forcing players into "one true way" of solving the quest, or at least rewarding them as if there is only one true way. i.e. your quests aren't a challenge of choices and thought, but a challenge purely of action, with the solution pre-prescribed.

 

When I "Kill a bear", regardless of how I accomplish it, the game pretends I really did "Kill a bear with a sword in close-combat while within 20 ft of its starting location."

 

 

Your design could certainly be made to work for a game or two, but as a general improvement over existing experience systems, I feel like there are too many cons and not enough pros.




#5311540 Slavery, Include Or Not?

Posted by on 19 September 2016 - 10:06 PM

 

it looks more like 'slave' is just another line item in a list


It's only the historical accuracy and the fact it imitates life that makes it more offensive to people.

Imagine a game concept where you're an alien civilisation and you trade human slaves, regardless of race, colour or creed.

You can almost guarantee nobody would bat an eyelid because it's not something so close to real life...

 

Or bat an eyelid trading slaves in ancient Rome, Egypt, or any other ancient civilization, where slavery wasn't based on (as visible an extreme of) skin-color.

 

I think it's the combination of: it was only 150 years ago, and the effects were still significantly felt as recently as 50 years ago, and there's still some discrimination ongoing, and the people-group who was enslaved are still mostly in poverty.

 

If blacks were now mostly very well off and prosperous, I think it'd be much less offensive, even if it had happened only twenty years ago. But it's a combination of "yeah, life still sucks for us" (relative to the USA average) and the nearness in time that makes it particularly odious.




#5310385 Mines here and there

Posted by on 11 September 2016 - 07:03 PM

If an enemy gets killed by a mine on Road X, have enemies avoid that road and use alternative routes.

 

Here's some ideas: (I'm just making up behavior and probabilities)

70% of the time: use   the best  road to get to the objective
15% of the time: use second-best road to get to the objective
15% of the time: use   a random  road to get to the objective

//elsewhere:
IF an enemy was destroyed by a mine AND the mine was on a road...
    A) All enemies wanting to use that road need to:
    70% of immediately diverting to other roads.
    20% chance of waiting where they are for N amount of time, before proceeding (giving time for a minesweeper to come)
    10% of going down road anyway.
    
    And then: B) 
    60% chance of sending a minesweeper and two additional units down that road.
    40% chance of remove the road as a viable enemy AI route (marking it as "dangerous") for N amount of time (instead of sending a minesweeper)
    (no more than two roads should be marked as dangerous at a time)
ENDIF



#5310384 OpenGL, oh my god

Posted by on 11 September 2016 - 06:48 PM

Use SFML?  :P

 

OpenGL is a bit confusing, precisely because it has both changed dramatically over the past ~20 years, but also has tried to remain backwards compatible, with the end result being OpenGL is pretty bloated - similar to Win32, except OpenGL is also literally designed-by-committee.

 

Addressing your last two points:

3) Even for just rendering a texture, you want a shader. The shader can be stupidly simple, but by saying "Why do I need a shader for just drawing a texture!" you yourself are walking into the same problem you were complaining about: Why should there be more than one way of doing things? Why should there be "Here's how you drawn if you want a your draw call to just involve a single texture, and here's an entirely different way to draw if you want your draw calls to involve more than just a single texture!

4) There are plenty of modern OpenGL tutorials also. I found this tutorial helpful.




#5310027 Could you recommend a lightweight database?

Posted by on 08 September 2016 - 03:34 PM

 

1) You do not want to use a database server as a game server. Packing all the services on a single machine is okay for development and testing environments, but any proper deployment needs to factor database services into different hosts from game services.

2) You do not want to use a database as your main IPC or state distribution mechanism. It should not be used to communicate player movement updates, or player chat, or anything like that. Databases are used when you absolutely need transactional integrity and durability. What are you doing 3 times a second to 4,000 users that needs durability and transactional integrity?

Well I'm using the database for everything which I need present after restarting the server. That includes player specific data(level, experience, current hp. etc.), item specific data(socket history, durability, etc.) and other similar topics. There're certain items which are used upon using a skill and I update item stacks on database as soon as they're used in-game so that's where the 3 queries per second idea came from. I update things like current exp, hp, position, quickbelt, etc. on certain intervals or when the player disconnects. 
 
As I said I was using Oracle previously but was only using very simple features of it. Was hoping to find a more lightweight solution with similar performance/scalability. Will try the struct approach(could build a separate server for this to solve the #1 issue hplus presented but I'm not sure if it's needed in my case). Thanks for the answers.

 

I get that you need to save, load, and backup data, and that you need to quickly access player data while the server is running.
But why do you need a *database* as opposed to just saving, loading, and backing up data in the regular way?

Why can't you just do the plain and simple way:

struct MyData
{
   //--------------------------------------
   //Static data that doesn't change (apart from a developer creating new monsters/items/areas/etc...).
   //--------------------------------------

   std::vector<MonsterTemplates> monsterTemplates;
   std::vector<ItemTemplates> itemTemplates;
   std::vector<DungeonTemplate> dungeonTemplates;

   std::vector<NPC> npcs;

   //--------------------------------------
   //Dynamic data that needs preservation and changes while the server is running.
   //--------------------------------------
   std::vector<PlayerInfo> playerInfo;
   std::vector<PlayerStats> playerStats;
   std::vector<PlayerInventoryData> playerInventories;

   std::vector<ItemInstance> ownedItems;
   
   //--------------------------------------
   //Temporary data that can be discarded when the server shuts down.
   //--------------------------------------

   std::vector<ItemInstance> itemsInWorld;
   std::vector<MonsterInstance> spawnedMonsters;
   std::vector<DungeonInstance> dungeonInstances;
};

As Hodgman pointed out, you're talking about a few MBs of data - i.e. the equivalent of saving and loading a few large images.

 

For things you want instantly written to file, you can basically push changes (byteOffset, sizeInBytes) to a second thread that can save instantly to (a copy of) the file, or even use some appending scheme to append (byteOffset, sizeInBytes, data) to the end of a separate file, and only rewrite the file as a whole once every minute or so.

 

Or I guess what I'm asking is, what additional/separate benefits are you wanting to gain from a database that you don't already have when you save and load "the regular way"?




#5309322 Faster Sin and Cos

Posted by on 03 September 2016 - 12:22 PM

One question, why put all those muls/adds in that last branch if they (seem) to be the same for both paths? (except for the "- x *" and "x *" parts). Or I am missing something here?

 
If that's true, you could probably remove the branch entirely:
fX2 * {....};

float sign = ((float(i32I & 1) * -2.0f) + 1.0f);
return (sign * fX2)
 
One int-to-float cast, an add and two multiplies.
 
Or, uhm:
int sign = 1 - ((i32I & 1) << 1);
return (sign * fX2)
One (implicit) int-to-float cast, a leftshift, a subtraction, and one multiply.
 
It'd have to actually be profiled to see if saving the branch is worth it, ofcourse.


#5309315 Nintendo shuts down hundreds of fan games

Posted by on 03 September 2016 - 11:34 AM

Be like Carmack and Romero - build a knock-off that uses all the same mechanics, but original art and story.

 

Absolutely! And set your goal to not just clone the game with a different skin, but to take the genre farther and make it better.

 

Ideally, it wouldn't even be recognizable as a knock-off, but if it is recognizable, you want your players to tell their friends, "It's like X, but even better!"




#5309250 Nintendo shuts down hundreds of fan games

Posted by on 02 September 2016 - 07:28 PM

While it'll inevitably be an unpopular move to consumers, and the media will spin it badly against Nintendo, consumers don't understand how copyright (and Nintendo's actions) actually has value for them long-term.

 

I definitely support creative commons, public domain, increased consumer rights, and shorter copyright spans, and copyright law definitely needs to be overhauled, because it's gone too overboard in corporate benefit; but copyright as a concept actually is a balanced benefit for both consumers and creators, and all the ire that'll be thrown Nintendo's way is quite the ball of wax; pretty much whatever Nintendo did - including doing nothing - would've harmed them in some way.

 

It reminds me of the YouTube Let's Play kerfuffle awhile back, where Google asked Nintendo if they wanted free money for doing nothing, Nintendo said yes, and the internet mobs came to stone Nintendo because the money was a partial cut of the advertising money Let's Players made from playing Nintendo games. In an ideal copyright system, that kind of thing would already be covered so fans would have that freedom already, but still, the thoughtless rage of the masses (spurred on by the understandable but obviously biased anger of the people who'd be making less money) was amusing to watch. Nintendo's bad PR team didn't do them any favor.

 

Similar situation with Steam paid-mods and Bethesda.

 

Steam: "Do you want money?"

Bethesda: "Sure do!"

Steam: "How big of a cut would you like?"

Bethesda: "As big as possible! How big can we have!?"

Internet: "Let's kill them and eat their livers."

 

The messaging on these kinds of situations need to be carefully handled, because, on average, most consumers only see the short-term loss.




#5308758 the dreaded "escort" quest

Posted by on 30 August 2016 - 06:42 PM

Escorting an NPC through an area where you can choose multiple paths (i.e. a canyon splits in two directions) might add more interest.

 

Least favorite escort quest: Spyro 2: Alchemist Escort

  • Reason: The NPC walks straight into the enemies. That's the key mechanic there: the person being escorted literally is on a fixed path walking from enemy to enemy in the most circuitous route possible (instead of just taking the first left and reaching the destination, where no walls are blocking).
  • Suggestion: Make whoever you are escorting be competent. Either A) competent at fighting, to help defend himself, and even aggressively fight alongside you. Or B) competant at withdrawing from danger until you have dealt with the threat.
    Imagine how great it would be (in a fantasy world with magic) to be escorting someone in tattered robes, and you get ambushed by alot of enemies, the guy in tattered robes suddenly whips out a sword and doing impressive anime-esqe backflipping sword attacks, or else starts drawing magic runic circles around himself and blasting away enemies.

Favorite escort quest: Caldera escort quest - Morrowind

  • Reason: The NPC being escorted has some really good unique boots, and the only way to ever get them is to kill the NPC and steal them. So you escort the NPC until you come to an area where no guards are watching, and then you "escort" them into the afterlife.  :P
  • Suggestion: Think about giving NPCs items that you can only get from killing them. Think about giving other NPCs items, by giving them items that you can only get by safely escorting them. Think about NPCs that hire you to kill the person you are escorting. Think about bandits ambushing you, and offering to pay you to let them kill your VIP.
    And then think of the consequences when the relatives of that person find out what occurred.

 

Another idea: You are escorting someone, following them, and they lead you into a deserted area and turn around and attack you with a couple of their buddies hiding in the underbrush. You are the target the bandits want to rob.




#5308755 Should i use "caveman-speak" for dialogs?

Posted by on 30 August 2016 - 06:07 PM

Perhaps you can have both clear writing and the "feeling" of a lack of sophistication, by having regular writing with a special font and perhaps all lowercase sentences.

 

Fonts and use of uppercase/lowercase can convey character. One example is Death from the Discworld series of books, who had a special font and all-caps writing for his speach.




#5308585 Tactics RPGs with an actual "game" (world exploration, etc)?

Posted by on 29 August 2016 - 09:13 PM

If you are between the wall and the enemy, stay away from the walls - the closer you are to a wall, the more likely bullet ricochets, explosions, and shrapnel will hit you.

 

On the other hand, if the wall is between you and the enemy, hugging the wall gives you protection.

 

If you want to play with that mechanic, I think it'd need to be explained clearly, and also need to be visually noticeable (visible bullet trails and "Wall ricochet!" floating text when a ricochet hits you), especially with the explosions - if a rocket hits someone, it might spread out somewhat in the open space around him, but if it hits a wall, the explosion would not only be channeled along the wall, but shrapnel (especially wall-debris) and the heat/force would bounce back from the wall outward.

 

b42cc30c92.png

(Note: the above is me speculating - I have no knowledge of the actual physics in explosions)

 

I'd do it in a generic way that makes playing with explosions (from grenades and mines and etc...) in enclosed areas (like inside buildings or courtyards) an enjoyable almost bomberman-like experience. I haven't seen that done in a turn-based tactic game before. And I'd make shrapnel and ricochets be a big deal as well.






PARTNERS