Do you want to create a Open Source project, but don't have any idea? Well here is one
PERSCOM is a paid web personnel management application, that is primarily used by different public organizations. However for this project I would like something to fit ArmA units specifically.
Oh yeah, ArmA is game series of realistic military sandboxes. There are groups (colloquially "Units") that play with more or less real military doctrine. Some of the most bougie units pay for PERSCOM, as a way to organize the players, and give them all their own pages with their awards and such (yes we are that geeky). However most units just use discord roles and perhaps excel. It would be neat if there were some purose built, FOSS alternative to PERSCOM.
Still reading? Great.
The big problem with this project is that every unit is different. Some units have mandatory attendence, some have mandatory certifications for certain roles, some have probation periods, etc. This application needs to be very customiseable for that.
This should be a heavily customisable application, since we don't know which features every units needs or doesnt need. By designing it in a way that every unit can modify it to fit their structure, it should have a wibe apeal. First of all, the customizable values.
I should come up with a better name for this. Basically, these are lists of strings, along with perhaps optional images.
For example, these values could be a list of weapons that every user can be assigned:
Or a list of ranks
Or even a ever expaning list of attended operation
Every user (i.e login) should reference these values, either as a single value (rank, weapon), or as a list (operation, certifications).
Every User should have a unique page accessable by all users, with all the values connected to the user. This page should be customizable somehow, though exactly how is up for you to decide.
The end goal is to have a interface that can contain these values
Private. John.J 1Plt. First Squad - Squad Leader M4 + M203
Operations
Certifications
Awwards
You'll also need some way to display the chain of command. Every user should be assigned a Group, which can be assigned as the leader of another group.
This can be displayed however you see fit.
Continuation of Random Game Concept
(As in how I would design the back end systems that handle the game mechanics)
(Also I will be talking in Java terms, dw about it)
An Enum of the different types of deals, such as giving/recieving money/resources, building roads, etc.
enum DEAL_TYPE{
BUILD_ROAD,
SEND_MONEY,
SEND_RESOURCE,
RECIEVE_MONEY,
RECIEVE_RESOURCE
}
An interface with these functions
//Evaluate the single parts (Like recieving money, dislike sending money)
int evaluateDealPart(DEAL_TYPE dealtype);
//Evaluate the entire deal (Risk takers prefer large deals, dislike small ones)
int evaluateEntireDeal(Deal deal);
//Evalue the entire agreement (Dislike working with rivals, Humble trait dislikes getting largest share)
int evaluateAgreement(Agreement agreement);
A interface with that can contain the specific parameters for each DEAL_TYPE
For example:
interface DealPart{
DEAL_TYPE getDealType();
}
class SendMoneyDealPart implements DealPart<DEAL_TYPE.SendMoney> {
public final int amount;
SendMoneyDealPart(int amount){
this.amount = amount;
}
DEAL_TYPE getDealType(){
return DEAL_TYPE.SendMoney;
}
}
A class that contains multiple DealParts
class Deal{
List<DealPart> dealParts;
}
A class that contains multiple Deals
Example traits:
class RiskTakerTrait implements Trait{
int evaluateDealPart(DEAL_TYPE dealtype){
return 0; //Risk taker doesnt really care about specific parts
}
int evaluateEntireDeal(Deal deal){
//Calculate sum of evaltuations
int dealMagnitude = 0;
foreach(DealPart part : deal.dealParts){
foreach(Trait trait : charachter.traits){
int value = trait.evaluateDealPart(part);
//Make the value absolute to always increase value
dealMagnitude += absolute(value);
}
}
if(dealMagnitude < 50){
return -20; //Dislike small deals
}
if(magnitude > 200){
return 30; //Like large (risky) deals
}
}
int evaluateAgreement(Agreement agreement){
return 0; //Risk taker doesnt really care about entire agreements either (or do they? up to you)
}
}
//Base trait
class MoneyEnjoyerTrait implements Trait{
int evaluateDealPart(DealPart dealPart){
if(dealPart.getDealType() == RECIEVE_MONEY){
RecieveMoneyDealPart recieveMoneyDealPart = (RecieveMoneyDealPart)dealPart;
return recieveMonyDealPart.amount * MONEY_VALUE_MULTIPLIER;
}
if(dealPart.getDealType() == SEND_MONEY){
SendMoneyDealPart sendMoneyDealPart = (SendMoneyDealPart)dealPart;
return -SendMoneyDealPart.amount * MONEY_VALUE_MULTIPLIER; //Note, return negative value
}
}
int evaluateEntireDeal(Deal deal){
return 0;
}
int evaluateAgreement(Agreement agreement){
return 0;
}
}
Here is an idea (more of vibe) I had, but that I don't have time to realize myself
You are the lord of some estate in some kingdom. You are presented with a bunch of "Focuses", (think projects, schemes, whatever), each with some costs that you most likely can't fulfill yourself. To be able to realize most of these focuses, you have to make deals with other nobels. Here comes the main gimmicks of this game.
All characters are highly driven based on their personality, traits and primarilly their goals. Each character should have somewhere between 1-5 goals, and should be influenced by their personality. For example an "Isolationist" shouldn't have the goal "Deepen trade with neighbouring estates", they should have "Improve self-sufficiency".
To be able to pull off some of the more interesting and lucrative focuses, you are going to need to chain multiple deals at once. Let's call these deal drafts "Agreements".
You are the recently appointed baliff of some abandoned run-down town, with an entourage of refugees as your inhabitants. Your subjects are getting by, but barely. You suggest clearing a road to the nearest town, as it will improve trade between your two estates.
However this is a very expensive endevour, and it's not like you are getting a lot of money in taxes at the moment. Here is where we need to plan an agreement with multiple parts.
First of all, you deal with the lord of the neighbouring town that he will pay half of the cost. He won't accept this as it is, he doesn't have a need for an expensive road to some barely scraping by backwater.
However, you know of a trader who specializes in raw materials who owes you a favour. You bring them into the agreement to start a caravan between these two estates. Normally they wouldn't accept, but the combo of the favour and there being a road between the towns (when the agreement is signed! Thats the important part.).
However, now we need to deal with the players half of the cost. You manage to secure a loan for this, only because this agreement does provide you better income, which makes your lenders more confident in your ability to pay this of.
With all parties happy, you sign and enact the agreement. You and the neighbouring lord finance a road, the trader starts buying raw resources from your town and sells it at the other (You can make the economy/market system as complicated as you want), your lender pays for your part of the road, with you being obliged to pay it back with the increased earnings thanks to this road.
You could implement this however you want, this could easily pass as a text based game, but nothing is stopping you from creating a 2d/3d world if you want.
I believe it would be easy to incrementally develop new focuses, personalities, traits, delibirations, etc.
Here's what aspects I believe are required for a MVP, which is what I think you should start with if you want to take a crack at this project.
Feel free to create your own milestones to get to a MVP. I think I'll create a "How I would implement this" blog post soon.
Here are some questions that I don't have the answer too, think through if you think they would make the game better or worse
First of all, how much would you communicate to the player about the balancing of deals? You could go with the totally transparent technique of paradox games where all considerations are showed to the player in positive or negative values, and the deal would be accepted if the result is above zero.
However, to make this less of a min-max slider em up, you could make it a lot more thoughtful and seemingly emergent by simply not doing that. If everything that is communicated to the player is in normal text, then the player would have to pay attentention and intuit deals more actively.
There are many creative ways to communicate things to the player without numbers. For an example, let's take the lord John, with the traits Gloryhound, Risk-taker and Pious. Instead of just displaying these traits, you could build a description generator that would create some text like this.
Lord John Born a nobleman, famous for his heroic actions while commanding at the battle of %RANDOM_PLACE%. He has built his power influence by taking risks, even though at times it has put him in trouble. He is in good standing with the church aswell, making considerable donations and following doctrine to the letter.
Instead of making a deal being an affair of simply tweaking stuff until the text goes green, you could have a "propose" system, where you would recieve a response in text, with perhaps a counter-offer. You could generate this by basing the text on the traits that offset the desire of the deal most. For example
CONSIDERATIONS:
Large deal (Risk-taker): +30
Militarily advantageous (Glory-hound): +5
Base value (Base trait): -10
Cost (Base trait): -50
RESULT: -25
Dear %PLAYER% I have recieved your offer of building a road. I must say that a large deal like this can be advantagous, fortune favors the brave. A road could also be militarily advantegous in a time of war. However I must say that the cost is what makes this untenable. I have attached a counter-offer, where you will finance half of this project. Those are acceptable terms for me.
COUNTER OFFER CONSIDERATIONS:
Large deal (Risk-taker): +30
Militarily advantageous (Glory-hound): +5
Counter offer buff(Base trait): +5
Base value (Base trait): -10
Cost (Base trait): -25
RESULT: 5