Merge branch 'monster-schema' (STILL WIP)

merge-requests/35/merge
James R Miller 2019-08-18 20:07:35 -05:00
commit 9d36e46265
10 changed files with 235 additions and 1 deletions

View File

@ -0,0 +1,16 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
BEGIN TRANSACTION;
INSERT INTO alignments VALUES(1,'Lawful Good','LG');
INSERT INTO alignments VALUES(2,'Neutral Good','NG');
INSERT INTO alignments VALUES(3,'Chaotic Good','CG');
INSERT INTO alignments VALUES(4,'Lawful Neutral','LN');
INSERT INTO alignments VALUES(5,'True Neutral','N'); -- per CRB they use 'True
-- Neutral' and 'N' only
INSERT INTO alignments VALUES(6,'Chaotic Neutral','CN');
INSERT INTO alignments VALUES(7,'Lawful Evil','LE');
INSERT INTO alignments VALUES(8,'Neutral Evil','NE');
INSERT INTO alignments VALUES(9,'Chaotic Evil','CE');
COMMIT;

16
data/movements.sql 100644
View File

@ -0,0 +1,16 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
-- TODO any other movements?
BEGIN TRANSACTION;
INSERT INTO movements VALUES(0, 'Land'); -- This is already incorporated into
-- monsters and ancestries but is
-- included here so we have the type of
-- speed
INSERT INTO movements VALUES(1, 'Burrow');
INSERT INTO movements VALUES(2, 'Climb');
INSERT INTO movements VALUES(3, 'Fly');
INSERT INTO movements VALUES(4, 'Swim');
COMMIT;

View File

@ -8,6 +8,8 @@ PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
/* TODO smoke vision is from young-red dragon */
INSERT INTO senses (senses_id,
sources_id,
sources_pages,
short_name,
description)
VALUES

25
data/skills.sql 100644
View File

@ -0,0 +1,25 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
-- TODO Need to enter descriptions
BEGIN TRANSACTION;
INSERT INTO skills VALUES(1, 1, '240', 'Acrobatics', 'TODO');
INSERT INTO skills VALUES(2, 1, '241', 'Arcana', 'TODO');
INSERT INTO skills VALUES(3, 1, '241', 'Athletics', 'TODO');
INSERT INTO skills VALUES(4, 1, '243', 'Crafting', 'TODO');
INSERT INTO skills VALUES(5, 1, '245', 'Deception', 'TODO');
INSERT INTO skills VALUES(6, 1, '246', 'Diplomacy', 'TODO');
INSERT INTO skills VALUES(7, 1, '247', 'Intimidation', 'TODO');
INSERT INTO skills VALUES(8, 1, '247', 'Lore', 'TODO'); -- TODO special case
INSERT INTO skills VALUES(9, 1, '248', 'Medicine', 'TODO');
INSERT INTO skills VALUES(10, 1, '249', 'Nature', 'TODO');
INSERT INTO skills VALUES(11, 1, '249', 'Occultism', 'TODO');
INSERT INTO skills VALUES(12, 1, '250', 'Performance', 'TODO');
INSERT INTO skills VALUES(13, 1, '250', 'Religion', 'TODO');
INSERT INTO skills VALUES(14, 1, '250', 'Society', 'TODO');
INSERT INTO skills VALUES(15, 1, '251', 'Stealth', 'TODO');
INSERT INTO skills VALUES(16, 1, '252', 'Survival', 'TODO');
INSERT INTO skills VALUES(17, 1, '253', 'Thievery', 'TODO');
COMMIT;

View File

@ -1,6 +1,10 @@
# UNCOMMENT FOR DEBUGGING #!/bin/sh -v
rm pf2.db
echo 'loading schema'
sqlite3 pf2.db < schema/sources.sql
sqlite3 pf2.db < schema/alignments.sql
sqlite3 pf2.db < schema/skills.sql
sqlite3 pf2.db < schema/movements.sql
sqlite3 pf2.db < schema/damagetypes.sql
sqlite3 pf2.db < schema/conditions.sql
sqlite3 pf2.db < schema/backgrounds.sql
@ -20,6 +24,9 @@ sqlite3 pf2.db < schema/weapons.sql
sqlite3 pf2.db < schema/ammunition.sql
echo 'loading data'
sqlite3 pf2.db < data/sources.sql
sqlite3 pf2.db < data/alignments.sql
sqlite3 pf2.db < data/skills.sql
sqlite3 pf2.db < data/movements.sql
sqlite3 pf2.db < data/damagetypes.sql
sqlite3 pf2.db < data/conditions.sql
sqlite3 pf2.db < data/backgrounds.sql

View File

@ -0,0 +1,9 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
CREATE TABLE alignments (
alignments_id INTEGER PRIMARY KEY,
"name" TEXT UNIQUE NOT NULL, -- 'Lawful Good'
abbr TEXT UNIQUE NOT NULL -- 'LG'
);

135
schema/monsters.sql 100644
View File

@ -0,0 +1,135 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
-- TODO needs data
-- CREATE TABLE monstercategories(
-- monstercategories_id INTEGER PRIMARY KEY,
-- is_comty_use BOOLEAN NOT NULL, -- false = no community use policy req
-- "name" TEXT NOT NULL UNIQUE
-- );
-- Rarity will be by trait
-- Monster 'type' will be by trait
-- Monster category is also by trait
-- So the bestiary breaks down trait versus category or family, but then sticks
-- them all in the trait position on the stat block, so I think we just do it
-- all with traits. Thoughts?
CREATE TABLE monsters (
monsters_id INTEGER PRIMARY KEY,
is_comty_use BOOLEAN NOT NULL, -- false = no community use policy req
sources_id INTEGER, -- old style source entries
sources_pages TEXT, -- old style source entries
sourceentries_id INTEGER, -- new style source entries
-- monstercategories_id INTEGER, -- Humanoid etc..
"name" TEXT NOT NULL UNIQUE,
"level" INTEGER,
alignment_id INTEGER, -- i.e. NG, LE etc..
perception INTEGER,
sizes_id INTEGER, -- i.e. large medium small etc..
ac INTEGER,
fortitude INTEGER,
reflex INTEGER,
will INTEGER,
hp INTEGER,
land_speed INTEGER, -- will have separate many-to-many table for other movements
str_mod INTEGER,
dex_mod INTEGER,
con_mod INTEGER,
int_mod INTEGER,
wis_mod INTEGER,
cha_mod INTEGER,
descr TEXT, -- The idea with this is for this to hold the entire stat block
-- text in it for those that want to do a simple query. I DO
-- intend to break out all the actions etc. into a separate table
-- and do many-to-many joins. Yes, this duplicates some data but
-- this is more for getting markdown formatting of the stat block
-- in one nice column.
FOREIGN KEY (alignments_id) REFERENCES alignments(alignments_id),
-- FOREIGN KEY (monstercategories_id) REFERENCES monstercategories(monstercategories_id),
FOREIGN KEY (sizes_id) REFERENCES sizes(sizes_id),
FOREIGN KEY (sources_id) REFERENCES sources(sources_id),
FOREIGN KEY (sourceentries_id) REFERENCES sourceentries(sourceentries_id)
);
CREATE TABLE monsterflavortexttypes (
monsterflavortexttypes_id INTEGER PRIMARY KEY,
"name" TEXT NOT NULL UNIQUE
-- page 7 Bestiary
-- 'Monster Category' -- i.e. "Bear"
-- 'Specific Monster' -- i.e. "Grizzly Bear"
-- 'Advice and Rules'
-- 'Related Creatures'
-- 'Additional Lore'
-- 'Treasure and Rewards'
-- 'Locations'
);
CREATE TABLE monsterflavortexts (
monsterflavortexts_id INTEGER PRIMARY KEY,
monsterflavortexttypes_id INTEGER,
heading TEXT NOT NULL,
mft_text TEXT NOT NULL,
FOREIGN KEY (monsterflavortexttypes_id) REFERENCES monsterflavortexttypes(monsterflavortexttype_id)
);
CREATE TABLE monsters_senses (
id INTEGER PRIMARY KEY,
monsters_id INTEGER NOT NULL,
immunities_id INTEGER NOT NULL,
FOREIGN KEY (monsters_id) REFERENCES monsters(monsters_id),
FOREIGN KEY (senses_id) REFERENCES senses(senses_id)
);
CREATE TABLE monsters_immunities (
id INTEGER PRIMARY KEY,
monsters_id INTEGER NOT NULL,
immunities_id INTEGER NOT NULL,
FOREIGN KEY (monsters_id) REFERENCES monsters(monsters_id),
FOREIGN KEY (immunities_id) REFERENCES immunities(immunities_id)
);
CREATE TABLE monsters_skills (
id INTEGER PRIMARY KEY,
monsters_id INTEGER NOT NULL,
skills_id INTEGER NOT NULL, -- will ID the specific skill
skill_mod INTEGER NOT NULL, -- will hold the modifier value
UNIQUE(monsters_id, skills_id), -- so we don't get duplicate rows for a specific monster
FOREIGN KEY (monsters_id) REFERENCES monsters(monsters_id),
FOREIGN KEY (skills_id) REFERENCES skills(skills_id)
);
CREATE TABLE monsters_traits (
id INTEGER PRIMARY KEY,
monsters_id INTEGER NOT NULL,
trait_id INTEGER NOT NULL,
FOREIGN KEY (monsters_id) REFERENCES monsters(monsters_id),
FOREIGN KEY (traits_id) REFERENCES traits(trait_id)
);
CREATE TABLE monster_movements (
id INTEGER PRIMARY KEY,
monsters_id INTEGER NOT NULL,
movements_id INTEGER NOT NULL,
movement_speed INTEGER NOT NULL, -- this is the actual monster speed
UNIQUE (monsters_id, movements_id), -- prevent duplicates
FOREIGN KEY (monsters_id) REFERENCES monsters(monsters_id),
FOREIGN KEY (movements_id) REFERENCES movements(movements_id)
);
-- TODO does this need to be separate table for monsters only or share the main
-- actions table
CREATE TABLE monsteractions (
monsteractions_id INTEGER PRIMARY KEY,
"name" TEXT,
-- TODO
);
CREATE TABLE monsters_actions (
id INTEGER PRIMARY KEY,
monsters_id INTEGER NOT NULL,
actions_id INTEGER NOT NULL, -- TODO actions table? or monsteractions table?
);

View File

@ -0,0 +1,12 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
-- TODO needs data
CREATE TABLE movements (
movements_id INTEGER PRIMARY KEY,
"name" TEXT UNIQUE NOT NULL
);

12
schema/skills.sql 100644
View File

@ -0,0 +1,12 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
CREATE TABLE skills (
skills_id INTEGER PRIMARY KEY,
sources_id INTEGER,
sources_pages TEXT,
"name" TEXT UNIQUE NOT NULL,
descr TEXT,
FOREIGN KEY (sources_id) REFERENCES sources(sources_id)
);

View File

@ -29,7 +29,7 @@ CREATE TABLE monsters_sourceentries (
monsters_id INTEGER NOT NULL,
sourceentries_id INTEGER NOT NULL,
FOREIGN KEY (monsters_id) REFERENCES monsters(monsters_id),
FOREIGN KEY (sourceentries_id_id) REFERENCES sourceentries_id(sourceentries_id_id)
FOREIGN KEY (sourceentries_id) REFERENCES sourceentries(sourceentries_id)
);
-- TODO add in new many-to-many tables for the various things we want to have sources be listed this way