add mutations rolls to character generator
This commit is contained in:
		
							parent
							
								
									796aac4d80
								
							
						
					
					
						commit
						4dc0bb94b4
					
				
							
								
								
									
										63
									
								
								app.py
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								app.py
									
									
									
									
									
								
							@ -2,6 +2,7 @@ from flask import Flask
 | 
				
			|||||||
from flask_restx import Api, Resource
 | 
					from flask_restx import Api, Resource
 | 
				
			||||||
from marshmallow import Schema, fields, validate
 | 
					from marshmallow import Schema, fields, validate
 | 
				
			||||||
from models import dice_model, ability_model, hp_model, character_model
 | 
					from models import dice_model, ability_model, hp_model, character_model
 | 
				
			||||||
 | 
					from mutations import Mutations
 | 
				
			||||||
import random
 | 
					import random
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app = Flask(__name__)
 | 
					app = Flask(__name__)
 | 
				
			||||||
@ -131,6 +132,12 @@ class GenerateCharacter(Resource):
 | 
				
			|||||||
        character_sheet['hp'] = roll_hp(chartype, assigned_abilities['constitution'])
 | 
					        character_sheet['hp'] = roll_hp(chartype, assigned_abilities['constitution'])
 | 
				
			||||||
        character_sheet['gold'] = roll_dices(4, 4, False).get('result')
 | 
					        character_sheet['gold'] = roll_dices(4, 4, False).get('result')
 | 
				
			||||||
        character_sheet['domar'] = roll_dices(2, 4, False).get('result')
 | 
					        character_sheet['domar'] = roll_dices(2, 4, False).get('result')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if chartype == 'mutant':
 | 
				
			||||||
 | 
					            character_sheet['mutations'] = (
 | 
				
			||||||
 | 
					                roll_mutations(assigned_abilities['constitution'], assigned_abilities['intelligence'])
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return character_sheet, 200
 | 
					        return character_sheet, 200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -205,6 +212,7 @@ def assign_ability_scores(scores, char_emphasis):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return ability_scores
 | 
					    return ability_scores
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def roll_hp(chartype, conscore):
 | 
					def roll_hp(chartype, conscore):
 | 
				
			||||||
    if chartype == 'human':
 | 
					    if chartype == 'human':
 | 
				
			||||||
        geometry = 8
 | 
					        geometry = 8
 | 
				
			||||||
@ -212,5 +220,60 @@ def roll_hp(chartype, conscore):
 | 
				
			|||||||
        geometry = 6
 | 
					        geometry = 6
 | 
				
			||||||
    return roll_dices(conscore, geometry, False).get('result')
 | 
					    return roll_dices(conscore, geometry, False).get('result')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def roll_mutations(conscore, intscore):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    :param conscore: modifier for physical mutation determination
 | 
				
			||||||
 | 
					    :param intscore: modifier for mental mutation determination
 | 
				
			||||||
 | 
					    :return: table of mutations (in json form)
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    mutations_table = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mental_mutations_cnt = roll_dices(1,4, False).get('result')
 | 
				
			||||||
 | 
					    physical_mutations_cnt = roll_dices(1, 4, False).get('result')
 | 
				
			||||||
 | 
					    mutations_table['count'] = {'mental': mental_mutations_cnt, 'physical': physical_mutations_cnt}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mental_mutations_scores = []
 | 
				
			||||||
 | 
					    physical_mutations_scores = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for _ in range(mental_mutations_cnt):
 | 
				
			||||||
 | 
					        mscore = roll_dices(1, 100, False).get('result') + intscore
 | 
				
			||||||
 | 
					        if mscore in mental_mutations_scores:
 | 
				
			||||||
 | 
					            mscore = mscore-3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if mscore > 100:
 | 
				
			||||||
 | 
					            mscore = 100
 | 
				
			||||||
 | 
					        mental_mutations_scores.append(mscore)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for _ in range(physical_mutations_cnt):
 | 
				
			||||||
 | 
					        pscore = roll_dices(1, 100, False).get('result') + conscore
 | 
				
			||||||
 | 
					        if pscore in physical_mutations_scores:
 | 
				
			||||||
 | 
					            pscore = pscore-3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if pscore > 100:
 | 
				
			||||||
 | 
					            pscore = 100
 | 
				
			||||||
 | 
					        physical_mutations_scores.append(pscore)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mut = Mutations()
 | 
				
			||||||
 | 
					    mmut = []
 | 
				
			||||||
 | 
					    pmut = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for score in mental_mutations_scores:
 | 
				
			||||||
 | 
					        mutation = mut.get_mental_mutation(score)
 | 
				
			||||||
 | 
					        mmut.append(mutation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mutations_table['mental'] = mmut
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for score in physical_mutations_scores:
 | 
				
			||||||
 | 
					        mutation = mut.get_physical_mutation(score)
 | 
				
			||||||
 | 
					        pmut.append(mutation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mutations_table['physical'] = pmut
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return mutations_table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    app.run()
 | 
					    app.run()
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										231
									
								
								mutations.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								mutations.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,231 @@
 | 
				
			|||||||
 | 
					import pandas as pd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Mutations(object):
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        self.raw_mutations_table = {
 | 
				
			||||||
 | 
					            'Score': list(range(1, 101)),
 | 
				
			||||||
 | 
					            'Physical': [
 | 
				
			||||||
 | 
					                'No Nerve Endings',
 | 
				
			||||||
 | 
					                'Poison Susceptibility',
 | 
				
			||||||
 | 
					                'Poison Susceptibility',
 | 
				
			||||||
 | 
					                'Dark Dependency',
 | 
				
			||||||
 | 
					                'Dark Dependency',
 | 
				
			||||||
 | 
					                'Arterial Weakness',
 | 
				
			||||||
 | 
					                'Arterial Weakness',
 | 
				
			||||||
 | 
					                'Diminished Sense',
 | 
				
			||||||
 | 
					                'Energy Sensitivity',
 | 
				
			||||||
 | 
					                'Doubled Pain',
 | 
				
			||||||
 | 
					                'Heat Reaction',
 | 
				
			||||||
 | 
					                'Insanity',
 | 
				
			||||||
 | 
					                'Insanity',
 | 
				
			||||||
 | 
					                'Insanity',
 | 
				
			||||||
 | 
					                'Attraction Odor',
 | 
				
			||||||
 | 
					                'Anti-Charisma',
 | 
				
			||||||
 | 
					                'Anti-Charisma',
 | 
				
			||||||
 | 
					                'Body Structure Change',
 | 
				
			||||||
 | 
					                'Body Structure Change',
 | 
				
			||||||
 | 
					                'Fat Cell Accumulation',
 | 
				
			||||||
 | 
					                'Increased Metabolism',
 | 
				
			||||||
 | 
					                'Inhibiting Field',
 | 
				
			||||||
 | 
					                'Water Dependency',
 | 
				
			||||||
 | 
					                'Weight Decrease',
 | 
				
			||||||
 | 
					                'Vision Defect',
 | 
				
			||||||
 | 
					                'Vision Defect',
 | 
				
			||||||
 | 
					                'Light Dependency',
 | 
				
			||||||
 | 
					                'Skin Structure Change',
 | 
				
			||||||
 | 
					                'Narcolepsy',
 | 
				
			||||||
 | 
					                'Bacterial Susceptibility',
 | 
				
			||||||
 | 
					                'Phobia',
 | 
				
			||||||
 | 
					                'Phobia',
 | 
				
			||||||
 | 
					                'Phobia',
 | 
				
			||||||
 | 
					                'Poor Duel Brain',
 | 
				
			||||||
 | 
					                'Poor Respiration',
 | 
				
			||||||
 | 
					                'Actual Metamorphosis',
 | 
				
			||||||
 | 
					                'Kinetic Absorption',
 | 
				
			||||||
 | 
					                'Kinetic Absorption',
 | 
				
			||||||
 | 
					                'Sound Imitation',
 | 
				
			||||||
 | 
					                'Bodily Control',
 | 
				
			||||||
 | 
					                'Horns or Antlers',
 | 
				
			||||||
 | 
					                'Heightened Physical Attribute',
 | 
				
			||||||
 | 
					                'Heightened Physical Attribute',
 | 
				
			||||||
 | 
					                'Heightened Physical Attribute',
 | 
				
			||||||
 | 
					                'Heightened Physical Attribute',
 | 
				
			||||||
 | 
					                'Heightened Sense',
 | 
				
			||||||
 | 
					                'Heightened Sense',
 | 
				
			||||||
 | 
					                'Heightened Precision',
 | 
				
			||||||
 | 
					                'Heightened Precision',
 | 
				
			||||||
 | 
					                'Heightened Precision',
 | 
				
			||||||
 | 
					                'Heightened Precision',
 | 
				
			||||||
 | 
					                'Heightened Precision',
 | 
				
			||||||
 | 
					                'Modified Body Parts',
 | 
				
			||||||
 | 
					                'Modified Body Parts',
 | 
				
			||||||
 | 
					                'Multiplied Body Parts',
 | 
				
			||||||
 | 
					                'Multiplied Body Parts',
 | 
				
			||||||
 | 
					                'Multiplied Body Parts',
 | 
				
			||||||
 | 
					                'Oversize Body Parts',
 | 
				
			||||||
 | 
					                'New Body Parts',
 | 
				
			||||||
 | 
					                'New Body Parts',
 | 
				
			||||||
 | 
					                'Regeneration',
 | 
				
			||||||
 | 
					                'Quills / Spines',
 | 
				
			||||||
 | 
					                'Radar / Sonar',
 | 
				
			||||||
 | 
					                'Ultra vision',
 | 
				
			||||||
 | 
					                'Shorter',
 | 
				
			||||||
 | 
					                'Electrical Generation',
 | 
				
			||||||
 | 
					                'Gills',
 | 
				
			||||||
 | 
					                'Taller',
 | 
				
			||||||
 | 
					                'Photosynthetic Skin',
 | 
				
			||||||
 | 
					                'Physical Reflection',
 | 
				
			||||||
 | 
					                'Mane & Bristles',
 | 
				
			||||||
 | 
					                'Skeletal Enhancement',
 | 
				
			||||||
 | 
					                'Density Control (self)',
 | 
				
			||||||
 | 
					                'Displacement',
 | 
				
			||||||
 | 
					                'Wings',
 | 
				
			||||||
 | 
					                'Gas Bags',
 | 
				
			||||||
 | 
					                'Speed Increase',
 | 
				
			||||||
 | 
					                'Carapace',
 | 
				
			||||||
 | 
					                'Radiation Eyes',
 | 
				
			||||||
 | 
					                'Chameleon Powers',
 | 
				
			||||||
 | 
					                'Chameleon Powers',
 | 
				
			||||||
 | 
					                'Light Generation',
 | 
				
			||||||
 | 
					                'Shape change',
 | 
				
			||||||
 | 
					                'Anti-Life Leach',
 | 
				
			||||||
 | 
					                'Infra vision',
 | 
				
			||||||
 | 
					                'Heightened Balance',
 | 
				
			||||||
 | 
					                'Energy Absorption',
 | 
				
			||||||
 | 
					                'Energy Metamorphosis',
 | 
				
			||||||
 | 
					                'Gas Generation',
 | 
				
			||||||
 | 
					                'Heat Generation',
 | 
				
			||||||
 | 
					                'Hands of Power',
 | 
				
			||||||
 | 
					                'Hands of Power',
 | 
				
			||||||
 | 
					                'Dual Brain',
 | 
				
			||||||
 | 
					                'Duality',
 | 
				
			||||||
 | 
					                'Sonic Blast',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU INVENT ONE',
 | 
				
			||||||
 | 
					                'YOU INVENT ONE'
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'Mental': [
 | 
				
			||||||
 | 
					                'Attack Reversal',
 | 
				
			||||||
 | 
					                'Mental Block',
 | 
				
			||||||
 | 
					                'Mental Block',
 | 
				
			||||||
 | 
					                'Seizures',
 | 
				
			||||||
 | 
					                'Seizures',
 | 
				
			||||||
 | 
					                'Fear Impulse',
 | 
				
			||||||
 | 
					                'Fear Impulse',
 | 
				
			||||||
 | 
					                'Hostility Field',
 | 
				
			||||||
 | 
					                'Mental Defenselessness',
 | 
				
			||||||
 | 
					                'Multiple Damage',
 | 
				
			||||||
 | 
					                'Energy Sensitivity',
 | 
				
			||||||
 | 
					                'Periodic Amnesia',
 | 
				
			||||||
 | 
					                'Periodic Amnesia',
 | 
				
			||||||
 | 
					                'Periodic Amnesia',
 | 
				
			||||||
 | 
					                'Unconscious Summoning',
 | 
				
			||||||
 | 
					                'Empathy',
 | 
				
			||||||
 | 
					                'Empathy',
 | 
				
			||||||
 | 
					                'Beguiling',
 | 
				
			||||||
 | 
					                'Beguiling',
 | 
				
			||||||
 | 
					                'Confusion',
 | 
				
			||||||
 | 
					                'Psychometry',
 | 
				
			||||||
 | 
					                'Directional Sense',
 | 
				
			||||||
 | 
					                'Intuition',
 | 
				
			||||||
 | 
					                'Precognition',
 | 
				
			||||||
 | 
					                'Summoning',
 | 
				
			||||||
 | 
					                'Summoning',
 | 
				
			||||||
 | 
					                'Absorption',
 | 
				
			||||||
 | 
					                'Time Suspension',
 | 
				
			||||||
 | 
					                'Reflection',
 | 
				
			||||||
 | 
					                'Devolution',
 | 
				
			||||||
 | 
					                'Genius Capability',
 | 
				
			||||||
 | 
					                'Genius Capability',
 | 
				
			||||||
 | 
					                'Genius Capability',
 | 
				
			||||||
 | 
					                'Repelling Force',
 | 
				
			||||||
 | 
					                'Mass Mind',
 | 
				
			||||||
 | 
					                'Magnetic Control',
 | 
				
			||||||
 | 
					                'Heightened Brain Talent',
 | 
				
			||||||
 | 
					                'Heightened Brain Talent',
 | 
				
			||||||
 | 
					                'Heightened Intelligence',
 | 
				
			||||||
 | 
					                'Density Control (Others)',
 | 
				
			||||||
 | 
					                'Light Manipulation',
 | 
				
			||||||
 | 
					                'Mental Blast',
 | 
				
			||||||
 | 
					                'Mental Blast',
 | 
				
			||||||
 | 
					                'Mental Blast',
 | 
				
			||||||
 | 
					                'Mental Blast',
 | 
				
			||||||
 | 
					                'Mental Shield',
 | 
				
			||||||
 | 
					                'Mental Shield',
 | 
				
			||||||
 | 
					                'Mental Control Of Body',
 | 
				
			||||||
 | 
					                'Mental Control Of Body',
 | 
				
			||||||
 | 
					                'Mental Control Of Body',
 | 
				
			||||||
 | 
					                'Mental Control Of Body',
 | 
				
			||||||
 | 
					                'Mental Control Of Body',
 | 
				
			||||||
 | 
					                'Mental Multiplier',
 | 
				
			||||||
 | 
					                'Mental Multiplier',
 | 
				
			||||||
 | 
					                'Mental Control',
 | 
				
			||||||
 | 
					                'Mental Control',
 | 
				
			||||||
 | 
					                'Mental Control',
 | 
				
			||||||
 | 
					                'Mental Paralysis',
 | 
				
			||||||
 | 
					                'Fear Generation',
 | 
				
			||||||
 | 
					                'Fear Generation',
 | 
				
			||||||
 | 
					                'Force Field Generation',
 | 
				
			||||||
 | 
					                'Illusion Generation',
 | 
				
			||||||
 | 
					                'Molecular Sense',
 | 
				
			||||||
 | 
					                'Molecular Disruption',
 | 
				
			||||||
 | 
					                'Repulsion Field',
 | 
				
			||||||
 | 
					                'Plant Control',
 | 
				
			||||||
 | 
					                'Stunning Force',
 | 
				
			||||||
 | 
					                'Telepathy',
 | 
				
			||||||
 | 
					                'Pyro/Cryokinesis',
 | 
				
			||||||
 | 
					                'Telekinesis',
 | 
				
			||||||
 | 
					                'Telekinetic Arm',
 | 
				
			||||||
 | 
					                'Telekinetic Flight',
 | 
				
			||||||
 | 
					                'Symbiotic Attachment',
 | 
				
			||||||
 | 
					                'Levitation',
 | 
				
			||||||
 | 
					                'Temporal Fugue',
 | 
				
			||||||
 | 
					                'Temporal Fugue',
 | 
				
			||||||
 | 
					                'Teleport Object',
 | 
				
			||||||
 | 
					                'Teleportation',
 | 
				
			||||||
 | 
					                'Thought Imitation',
 | 
				
			||||||
 | 
					                'The Gamma Eye',
 | 
				
			||||||
 | 
					                'The Gamma Eye',
 | 
				
			||||||
 | 
					                'Will Force',
 | 
				
			||||||
 | 
					                'Total Healing',
 | 
				
			||||||
 | 
					                'Time Manipulation',
 | 
				
			||||||
 | 
					                'Time Manipulation',
 | 
				
			||||||
 | 
					                'Weather Manipulation',
 | 
				
			||||||
 | 
					                'Weather Manipulation',
 | 
				
			||||||
 | 
					                'Time Distortion',
 | 
				
			||||||
 | 
					                'Death Field Generation',
 | 
				
			||||||
 | 
					                'Life Leach',
 | 
				
			||||||
 | 
					                'Planar Travel',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU PICK ONE',
 | 
				
			||||||
 | 
					                'YOU INVENT ONE',
 | 
				
			||||||
 | 
					                'YOU INVENT ONE'
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.mutations_table = pd.DataFrame(self.raw_mutations_table)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_physical_mutation(self, score):
 | 
				
			||||||
 | 
					        mutation = self.mutations_table.loc[self.mutations_table['Score'] == score, 'Physical']
 | 
				
			||||||
 | 
					        return mutation.iloc[0] if not mutation.empty else None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_mental_mutation(self, score):
 | 
				
			||||||
 | 
					        mutation = self.mutations_table.loc[self.mutations_table['Score'] == score, 'Mental']
 | 
				
			||||||
 | 
					        return mutation.iloc[0] if not mutation.empty else None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_table_shape(self):
 | 
				
			||||||
 | 
					        return self.mutations_table.shape
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_table_row_count(self):
 | 
				
			||||||
 | 
					        return self.mutations_table.shape[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_table_column_count(self):
 | 
				
			||||||
 | 
					        return self.mutations_table.shape[1]
 | 
				
			||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
Flask~=3.0.3
 | 
					Flask~=3.0.3
 | 
				
			||||||
flask-restx~=1.3.0
 | 
					flask-restx~=1.3.0
 | 
				
			||||||
marshmallow~=3.21.3
 | 
					marshmallow~=3.21.3
 | 
				
			||||||
 | 
					pandas~=2.2.2
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user