Project Hospital
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Go down
igor.oxymoron
igor.oxymoron
developer
Posts : 347
Reputation : 25
Join date : 2018-03-23
Location : Czech republic

Modding tutorial - Database - Medical Database Empty Modding tutorial - Database - Medical Database

Mon Jul 15, 2019 1:59 pm
Hello everybody, let's have a look at how to add cotent to the medical side of the game database. This tutorial will cover how to add diagnoses, symptoms, main symptoms, examinations and treatments to Project Hospital and how the systems are working.

Basics to read first:
How to create new mods: https://projecthospital.forumotion.com/t1750-modding-tutorial-creating-new-mods

XML files belong to the Database folder under your mod's folder: \\Assets\StreamingAssets\Addons\ModName\Database\
To edit the xml files it's best to use a text editor with syntax highlighting like Notepad++.

TERMINOLOGY

Diagnosis = set of shared symptoms + only one unique main symptom
Shared symptoms - appear in many diagnoses - more shared symptoms in a diagnosis => higher diagnostics challenge
Main symptom - unique for each diagnosis
Examinations - uncover symptoms
Treatments - suppress symptoms


1. RESEARCH


If you want to add a specific diagnosis, do some research and try to create a set of symptoms that will define it - one main symptom that will confirm the diagnosis when uncovered, some new symptoms, some existing symptoms (compare your list to the in-game symptoms to prevent creating duplicates and save some future work using the existing symptoms, examinations and treatments).

The existing symptoms can be found in:
\\Assets\StreamingAssets\Database\Symptoms.xml
\\Assets\StreamingAssets\Database\Localization\StringTableEnSymptoms.xml

2. CREATING SYMPTOMS

Once we have compared our list to the existing symptoms, and we have one or more symptoms that are not present in actual database, we can start implementing them.

ID - SYM_... must be unique
<DescriptionLocID> - refers to description of current symptom
<DiscomfortLevel> - None/Low/Medium/High - how much is current symptom unpleasant for the character
<PatientComplains> - true/false - if set to "true" = it will be uncovered during interview
<Hazard> - connected with character's hospitalization

  • - Low - no need for hospitalization
  • - Medium - normal priority hospitalization (increase priority by reception triage)
  • - High - character is sent to HDU

<PatientMobility> - MOBILE/IMOBILE/INTUBATED - can walk/can't walk/ can't walk nor speak
<Examinations> - if PatientComplains = true, there needs to be EXM_INTERVIEW first and than another specific examination; examinations can be found here:
\Assets\StreamingAssets\Database\Procedures\Examinations.xml
<Treatments> - choose a treatment that will suppress this symptom; treatments can be found here:
\Assets\StreamingAssets\Database\Procedures\Treatments.xml
// some symptoms, that are not hazardous, lethal, etc are allowed to not have defined treatment - simply symptoms that are trivial could appear without any treatment
<IsMainSymptom> (can be only one per diagnosis)

  • - true - only for main symptom of the disease/diagnosis
  • - false - for all shared symptoms

<IconIndex> - choose an existing icon for current symptom, for custom icons take a look at https://projecthospital.forumotion.com/t2069-modding-tutorial-medical-database-custom-icons

Example:

Code:

<GameDBSymptom ID="SYM_ANEMIA">
        <DescriptionLocID>SYM_ANEMIA_DESCRIPTION</DescriptionLocID>
        <DiscomfortLevel>None</DiscomfortLevel>
        <PatientComplains>false</PatientComplains>
        <Hazard>Low</Hazard>
        <PatientMobility>MOBILE</PatientMobility>
        <Examinations>
            <ExaminationRef>EXM_BLOOD_TEST_TESTING</ExaminationRef>
        </Examinations>
        <Treatments>
            <TreatmentRef>TRT_VITAMIN_SUPPLEMENTATION</TreatmentRef>
        </Treatments>        
        <IsMainSymptom>false</IsMainSymptom>
        <IconIndex>1499</IconIndex>
</GameDBSymptom>

More specific parameters:

<Limping animation> - implement this parameter and character will be limp; speed modifier <0.1 - 1.0>
Code:

<WalkAnimSuffix>_limp</WalkAnimSuffix>
<WalkSpeedModifier>0.5</WalkSpeedModifier>

Deprecated, death is currently based on collapses, the patients have a higher and higher risk of dying after each critical collapse
Code:

 <RiskOfDeathStartHours>2</RiskOfDeathStartHours>
 <RiskOfDeathEndHours>4</RiskOfDeathEndHours>

Symptom cause collapse of the character, may lead to another symptom
Code:

<RiskOfCollapseStartHours>6</RiskOfCollapseStartHours>
<RiskOfCollapseEndHours>24</RiskOfCollapseEndHours>
<CollapseSymptomRef>SYM_SEPTIC_SHOCK</CollapseSymptomRef>


3 - CREATING EXAMINATIONS



A) General examinations overview


ID - EXM_... - must be unique
<AbbreviationLocID> - localization
<DiscomfortLevel> - None/Low/Medium/High

<RequiredDoctorQualificationList>
               <SkillRef> - doctor's skill needed to provide current examination; can be multiple; skills are localized here:
\Assets\StreamingAssets\Database\Skills.xml

<StaffSelectionRules> - where and who
REQUIRED_ROOM_OR_DEFAULT_ROOM - examinations provided by docs in clinics or hospitalization enviroment
REQUIRED_ROOM_IGNORE_DOCTOR - examinations provided by technicians, not docs
DEFAULT_ROOMS -  doctors from on-call room are selected

<RequiredEquipmentList> - contains all objects needed for execution of examination; tags can be found:
\Assets\StreamingAssets\Database\Objects\Objects.xml

In this example you can see that examination is performed on the examination table, doc visits equipment cabinet and after examination he will wash his hands
Code:

<RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>sit_exam</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>doc_equipment</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>clean_hands</Tag>
                </RequiredEquipment>
</RequiredEquipmentList>

<RequiredRoomTags> - the examination can be provided in any room with any of the tags. Make sure that required equipment in the rooms matches the list in the examination!
Room tags can be found in: \Assets\StreamingAssets\Database\RoomTypes.xml

Example - examination can be done in Doctor's office at Emergency, in Diagnostic units and offices at General Surgery and Internal Medicine department, in Observation and also in ICU:
Code:

<RequiredRoomTags>
                <Tag>emergency_doctors_office</Tag>
                <Tag>general_surgery_office</Tag>
                <Tag>internal_medicine_office</Tag>
                <Tag>observation</Tag>
                <Tag>icu</Tag>
</RequiredRoomTags>

<ProcedureScript> - specific examination script, there are a few different ones available in the game, usually supporting different types of equipment on the second place in the RequiredEquipment list

ProcedureScriptExaminationGeneral - script for simple examination, doc is using his hands

ProcedureScriptExaminationGeneralEquipment - script for simple examinations, where doc need to visit cabinet in order to choose some prop (cabinet has to be present in corresponding room)
ProcedureScriptExaminationSpecialEquipment - script for examination that are provided by some object/machine (object has to be present in corresponding room)
ProcedureScriptExaminationSmallEquipment - script for special examination, where both patient and doc are sitting near some machine (eg: EMG)

ProcedureScriptExaminationPhysicalChest - script for chest listening examination - doc is using stethoscope
ProcedureScriptExaminationUrineAnalysis - script for examinations like urine analysis or stool analysis, where patient is going to toilet to collect sample and than returns
ProcedureScriptExaminationVisualTest - script for visual test

ProcedureScriptExaminationRadiology - script for MRI and CT examminations
ProcedureScriptExaminationXray - script for X-ray examinations
ProcedureScriptExaminationAngiography - script for angiography examination

<AnimationSetupSitting> and <AnimationSetupLying> - in + idle + out animations; can be found:
\Assets\StreamingAssets\Database\AnimatedModelControllers.xml

<DressLevel> - patient's dress level during examination
FULL - no change
HALF - no pants
HALF_TOP - no shirt

<Biohazard> - true/false - if set to true, doc will use biohazard bin after examination

<Priority> - value that defines which examination is chosen by AI doc as first
0-20 - examinations like CT/MRI/USG - one room to prescribe. another room with machine to provide
20-30 - examination that partially are provided in office and partially in lab
30-40(50) - examination that are provided instantly in offices

<Cost> - deprecated, the player receives payments according to patient's diagnosis when they get released
<IconIndex> - choose icon for current examination - take a look at https://projecthospital.forumotion.com/t2069-modding-tutorial-medical-database-custom-icons
<DurationHours>- how much does it takes to provide (hours); 0=instantly provided

Example:

Code:
 
 <GameDBExamination ID="EXM_BLOOD_PRESSURE_AND_PULSE_MEASUREMENT">
        <AbbreviationLocID>EXM_BLOOD_PRESSURE_AND_PULSE_MEASUREMENT_DESCRIPTION</AbbreviationLocID>
        <DiscomfortLevel>None</DiscomfortLevel>
        <Procedure>
            <RequiredDoctorQualificationList>
                <SkillRef>SKILL_DOC_QUALIF_GENERAL_MEDICINE</SkillRef>
            </RequiredDoctorQualificationList>
            <StaffSelectionRules>REQUIRED_ROOM_OR_DEFAULT_ROOM</StaffSelectionRules>
            <RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>sit_exam</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>doc_equipment</Tag>
                </RequiredEquipment>
            </RequiredEquipmentList>
            <RequiredRoomTags>
                <Tag>examinations_basic_equipment</Tag>
            </RequiredRoomTags>
            <ProcedureScript>ProcedureScriptExaminationGeneralEquipment</ProcedureScript>
            <AnimationSetupSitting>
                <AnimationNameIn>stand_examination_in</AnimationNameIn>
                <AnimationNameIdle>stand_examination_idle</AnimationNameIdle>
                <AnimationNameOut>stand_examination_out</AnimationNameOut>
            </AnimationSetupSitting>
            <AnimationSetupLying>
                <AnimationNameIn>stand_examination_in</AnimationNameIn>
                <AnimationNameIdle>stand_examination_idle</AnimationNameIdle>
                <AnimationNameOut>stand_examination_out</AnimationNameOut>
            </AnimationSetupLying>
            <DressLevel>FULL</DressLevel>
            <Biohazard>false</Biohazard>
            <Priority>40</Priority>
        </Procedure>
        <ExaminationType>EXAMINATION</ExaminationType>
        <Cost>50</Cost>
        <IconIndex>1699</IconIndex>
        <DurationHours>0</DurationHours>
</GameDBExamination>


B) Laboratory examinations overview


Main difference is that Laboratory examination has 2 parts
SAMPLING - provided in the office by the doc at some department
TESTING - provided in corresponding laboratory by technician at Lab department

<LabTestingExaminationRef> - there must be corresponding testing part of the sampling

Sampling example:
Code:
   
<GameDBExamination ID="EXM_BACTERIA_CULTIVATION_SAMPLING">
        <AbbreviationLocID>EXM_BACTERIA_CULTIVATION_SAMPLING_DESCRIPTION_1_1</AbbreviationLocID>
        <DiscomfortLevel>Low</DiscomfortLevel>
        <Procedure>
            <StaffSelectionRules>REQUIRED_ROOM_OR_DEFAULT_ROOM</StaffSelectionRules>
            <RequiredDoctorQualificationList>
                <SkillRef>SKILL_DOC_QUALIF_GENERAL_MEDICINE</SkillRef>
            </RequiredDoctorQualificationList>
            <RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>sit_exam</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>doc_equipment</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>clean_hands</Tag>
                </RequiredEquipment>
            </RequiredEquipmentList>
            <RequiredRoomTags>
                <Tag>examinations_basic_equipment</Tag>
            </RequiredRoomTags>
            <ProcedureScript>ProcedureScriptExaminationGeneralEquipment</ProcedureScript>
            <AnimationSetupSitting>
                <AnimationNameIn>stand_bacteria_cultivation_sampling_in</AnimationNameIn>
                <AnimationNameIdle>stand_bacteria_cultivation_sampling_idle</AnimationNameIdle>
                <AnimationNameOut>stand_bacteria_cultivation_sampling_out</AnimationNameOut>
            </AnimationSetupSitting>
            <AnimationSetupLying>
                <AnimationNameIn>stand_examination_in</AnimationNameIn>
                <AnimationNameIdle>stand_examination_idle</AnimationNameIdle>
                <AnimationNameOut>stand_examination_out</AnimationNameOut>
            </AnimationSetupLying>
            <DressLevel>FULL</DressLevel>
            <Biohazard>true</Biohazard>
            <Priority>20</Priority>
        </Procedure>
        <ExaminationType>EXAMINATION</ExaminationType>
        <Cost>50</Cost>
        <IconIndex>1663</IconIndex>
        <DurationHours>0</DurationHours>
        <LabTestingExaminationRef>EXM_BACTERIA_CULTIVATION_TESTING</LabTestingExaminationRef>
</GameDBExamination>

Testing parameters:

<RequiredStatLabQualificationRef> - refers to certain skill/specialization of lab technician; skills can be found:
\Assets\StreamingAssets\Database\Skills.xml

RequiredEquipment parameters:
<DurationHours> - refers to time, that will lab technician spend using specific machine/object
<BlocksSpecialist>
- if set to "true" - lab technician is blocked by object, can't do anything else
- if set to "false" - lab technician is not blocked, after using some object he can make anything else, he will come back when the use duration of the object is over (this is used for example for cultivations, where the samples need to be left alone for a bit)

<FallbackLabDepartmentRef> - must be set to DPT_LAB

Testing example:
Code:

<GameDBExamination ID="EXM_BACTERIA_CULTIVATION_TESTING">
        <AbbreviationLocID>EXM_BACTERIA_CULTIVATION_TESTING_DESCRIPTION_1_1</AbbreviationLocID>
        <DiscomfortLevel>None</DiscomfortLevel>
        <Procedure>
            <StaffSelectionRules>REQUIRED_ROOM_IGNORE_DOCTOR</StaffSelectionRules>
            <RequiredSkillsToPrescribe>
                <SkillRef>SKILL_DOC_QUALIF_GENERAL_MEDICINE</SkillRef>
            </RequiredSkillsToPrescribe>
            <RequiredStatLabQualificationRef>SKILL_LAB_SPECIALIST_QUALIF_SCIENCE_EDUCATION</RequiredStatLabQualificationRef>
            <RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>stat_lab_exam</Tag>
                    <DurationHours>0.1</DurationHours>
                    <BlocksSpecialist>false</BlocksSpecialist>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>fume_hood</Tag>
                    <DurationHours>0.1</DurationHours>
                    <BlocksSpecialist>true</BlocksSpecialist>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>mic_incubator</Tag>
                    <DurationHours>0.1</DurationHours>
                    <BlocksSpecialist>false</BlocksSpecialist>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>microscope</Tag>
                    <DurationHours>0.1</DurationHours>
                    <BlocksSpecialist>false</BlocksSpecialist>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>biohazard_trash</Tag>
                    <DurationHours>0.1</DurationHours>
                    <BlocksSpecialist>true</BlocksSpecialist>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>clean_hands</Tag>
                    <DurationHours>0.1</DurationHours>
                    <BlocksSpecialist>true</BlocksSpecialist>
                </RequiredEquipment>
            </RequiredEquipmentList>
            <RequiredRoomTags>
                <Tag>deprecated_lab</Tag>
                <Tag>microbiology_lab</Tag>
            </RequiredRoomTags>
            <AnimationSetupSitting>
                <AnimationNameIn>move_start_upper_limb</AnimationNameIn>
                <AnimationNameOut>move_end_upper_limb</AnimationNameOut>
            </AnimationSetupSitting>
            <DressLevel>FULL</DressLevel>
            <Biohazard>true</Biohazard>
            <Priority>20</Priority>
            <FallbackLabDepartmentRef>DPT_LAB</FallbackLabDepartmentRef>
        </Procedure>
        <ExaminationType>EXAMINATION</ExaminationType>
        <Cost>50</Cost>
        <IconIndex>1663</IconIndex>
        <DurationHours>0</DurationHours>
</GameDBExamination>


C) Objects used in examinations

- includes examinations with some object involved
- examinations are prescribed by the doctor, but executed by lab technician
- objects that are used need to be present in the specified room/unit

Example:

Code:

 <GameDBExamination ID="EXM_USG">
        <AbbreviationLocID>EXM_USG_DESCRIPTION</AbbreviationLocID>
        <DiscomfortLevel>Low</DiscomfortLevel>
        <Procedure>
            <StaffSelectionRules>REQUIRED_ROOM_IGNORE_DOCTOR</StaffSelectionRules>
            <RequiredSkillsToPrescribe>
                <SkillRef>SKILL_DOC_QUALIF_GENERAL_MEDICINE</SkillRef>
            </RequiredSkillsToPrescribe>
            <RequiredStatLabQualificationRef>SKILL_LAB_SPECIALIST_SPEC_USG</RequiredStatLabQualificationRef>
            <RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>sit_exam</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>ultrasonograph</Tag>
                </RequiredEquipment>
            </RequiredEquipmentList>
            <RequiredRoomTags>
                <Tag>sonography_unit</Tag>
            </RequiredRoomTags>
            <ProcedureScript>ProcedureScriptExaminationGeneralEquipment</ProcedureScript>
            <AnimationSetupLying>
                <AnimationNameIn>stand_examination_in</AnimationNameIn>
                <AnimationNameIdle>stand_examination_idle</AnimationNameIdle>
                <AnimationNameOut>stand_examination_out</AnimationNameOut>
            </AnimationSetupLying>
            <AnimationSetupLying>
                <AnimationNameIn>stand_examination_in</AnimationNameIn>
                <AnimationNameIdle>stand_examination_idle</AnimationNameIdle>
                <AnimationNameOut>stand_examination_out</AnimationNameOut>
            </AnimationSetupLying>
            <DressLevel>HALF</DressLevel>
            <Biohazard>false</Biohazard>
            <Priority>25</Priority>
        </Procedure>
        <ExaminationType>EXAMINATION</ExaminationType>
        <Cost>50</Cost>
        <IconIndex>1693</IconIndex>
        <DurationHours>0</DurationHours>
    </GameDBExamination>

D) X - ray / Angiography / Radiology examinations

use special scripts (step 3/A)
<RequiredEquipmentList> must include all parts of the object
there are some corresponding special animations for animated objects
<DetachedDepartmentRef> must be se to DPT_RADIOLOGY

Example:

Code:

 <GameDBExamination ID="EXM_X_RAY_BACK">
        <AbbreviationLocID>EXM_X_RAY_BACK_DESCRIPTION</AbbreviationLocID>
        <DiscomfortLevel>Low</DiscomfortLevel>
        <Procedure>
            <StaffSelectionRules>REQUIRED_ROOM_IGNORE_DOCTOR</StaffSelectionRules>
            <RequiredSkillsToPrescribe>
                <SkillRef>SKILL_DOC_QUALIF_GENERAL_MEDICINE</SkillRef>
            </RequiredSkillsToPrescribe>
            <RequiredStatLabQualificationRef>SKILL_LAB_SPECIALIST_SPEC_RADIOLOGY</RequiredStatLabQualificationRef>
            <RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>x_ray_bed</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>x_ray_panel</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>x_ray_board</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>xray_viewer</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>x_ray_machine_anim</Tag>
                </RequiredEquipment>
            </RequiredEquipmentList>
            <RequiredRoomTags>
                <Tag>room_x_ray</Tag>
            </RequiredRoomTags>
            <ProcedureScript>ProcedureScriptExaminationXray</ProcedureScript>
            <ProcedureAnimationState>STANDING</ProcedureAnimationState>
            <AnimationSetupLying>
                <AnimationNameIn>move_start_torso</AnimationNameIn>
                <AnimationNameOut>move_end_torso</AnimationNameOut>
            </AnimationSetupLying>
            <AnimationSetupSitting>
                <AnimationNameIn>move_start_torso</AnimationNameIn>
                <AnimationNameOut>move_end_torso</AnimationNameOut>
            </AnimationSetupSitting>
            <DressLevel>HALF</DressLevel>
            <Priority>0</Priority>
            <AnimationFrame>4</AnimationFrame>
            <DetachedDepartmentRef>DPT_RADIOLOGY</DetachedDepartmentRef>
        </Procedure>
        <Cost>50</Cost>
        <IconIndex>1669</IconIndex>
        <DurationHours>0</DurationHours>
    </GameDBExamination>





4 - CREATING TREATMENTS



A) General treatments overview


ID - TRT_... must be unique ...
<AbbreviationLocID> - description
<DiscomfortLevel> - None/Low/Medium/High

<StaffSelectionRules> - like in examinations
REQUIRED_ROOM_OR_DEFAULT_ROOM - provided by doctors in clinics or hospitalization enviroment
DEFAULT_ROOMS - doctors from on-call room are selected

<RequiredSkillsToPrescribe> - contains all skills, that are needed for the prescription of the treatment
<RequiredDoctorQualificationList> - doctor's qualification or skill needed to prescribe and/or execute treatment
<RequiredRoomTypeList> contains all rooms, where can be treatment provided
<RequiredEquipmentList> contains all needed props- e.g.: receipt
<ProcedureScript> - specific treatment script

ProcedureScriptTreatmentPrescription - script for all prescription treatments - "advise patient and send home"
ProcedureScriptTreatmentReceipt - script for receipt treatments - "patient will obtain receipt or in some cases will be sent to some procedure and then will sent home" // read more
ProcedureScriptTreatmentProcedure - script for procedural treatments - "patient will enter some procedure"
ProcedureScriptTreatmentResuscitation - special script for resuscitation treatment procedures

<AnimationSetupSitting> - In + Idle + Out animation for specific treatment (not mandatory)

<DressLevel> - patient's dress level before treatment
<DressLevelAfter> - patient's dress level after treatment
FULL - no change
HALF - no pants
HALF_TOP - no shirt

<TreatmentType> - specific type of treatment
PRESCRIPTION - like the related script, patient will get some talk/advices
RECEIPT - patient will get receipt for some medicine or some
PROCEDURE - patient will get some procedure

In the case of "RECEIPT" treatment type - if not specified (or set to the default value PILLS), patient will get only a receipt to suppress a symptom; otherwise, it has to be specified by:

ReceiptType + HospitalizationTreatmentRef

<ReceiptType>IV_BAG</ReceiptType> - once the patient is hospitalized, they will get the medicine in an intravenous bag
<ReceiptType>BLOOD_BAG</ReceiptType> - once the patient is hospitalized, they will get a blood bag
<ReceiptType>OXYGEN_MASK</ReceiptType> - once the patient is hospitalized, they will get an oxygen mask

Does the treatment require the patient to be hospitalized first?
<HospitalizationTreatmentRef>TRT_HOSPITALIZATION_NORMAL</HospitalizationTreatmentRef> - normal hospitalization - valid for IV_BAG and also BLOOD_BAG
<HospitalizationTreatmentRef>TRT_HOSPITALIZATION_HIGH_PRIORITY</HospitalizationTreatmentRef> - HDU hospitalization - valid for all 3 types

// HospitalizationTreatmentRef can be defined also apart of ReceiptType, if you want specific treatment that can be done only on hospitalized patient

<AllowedWithAnyHospitalization> true/false - if you want to allow treatment on all types of hospitalization

<IconIndex> - choose icon for current treatment - for custom icons take a look at https://projecthospital.forumotion.com/t2069-modding-tutorial-medical-database-custom-icons

Example - Prescription:

Code:

<GameDBTreatment ID="TRT_HOME_TREATMENT">
        <AbbreviationLocID>TRT_HOME_TREATMENT_DESCRIPTION</AbbreviationLocID>
        <DiscomfortLevel>None</DiscomfortLevel>
        <Procedure>
            <RequiredDoctorQualificationList>
                <SkillRef>SKILL_DOC_QUALIF_GENERAL_MEDICINE</SkillRef>
            </RequiredDoctorQualificationList>
            <ProcedureScript>ProcedureScriptTreatmentPrescription</ProcedureScript>
            <AnimationSetupSitting>
                <AnimationNameIn>sit_doc_recommendation_in</AnimationNameIn>
                <AnimationNameIdle>sit_doc_recommendation_idle</AnimationNameIdle>
                <AnimationNameOut>sit_doc_recommendation_out</AnimationNameOut>
            </AnimationSetupSitting>
            <DressLevel>FULL</DressLevel>
            <DressLevelAfter>FULL</DressLevelAfter>
        </Procedure>
        <TreatmentType>PRESCRIPTION</TreatmentType>
        <Cost>100</Cost>
        <IconIndex>1913</IconIndex>
        <DurationHours>0</DurationHours>
    </GameDBTreatment>

Example - Receipt:

Code:

<GameDBTreatment ID="TRT_ANALGESICS">
        <AbbreviationLocID>TRT_ANALGESICS_DESCRIPTION</AbbreviationLocID>
        <DiscomfortLevel>Positive</DiscomfortLevel>
        <Procedure>
            <StaffSelectionRules>REQUIRED_ROOM_OR_DEFAULT_ROOM</StaffSelectionRules>

            <RequiredDoctorQualificationList>
                <SkillRef>SKILL_DOC_QUALIF_GENERAL_MEDICINE</SkillRef>
                <SkillRef>SKILL_DOC_SPEC_CRITICAL_CARE</SkillRef>
            </RequiredDoctorQualificationList>

            <RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>receipt</Tag>
                </RequiredEquipment>
            </RequiredEquipmentList>

            <RequiredRoomTags>
                <Tag>receipt</Tag>
            </RequiredRoomTags>

            <ProcedureScript>ProcedureScriptTreatmentReceipt</ProcedureScript>
        </Procedure>
        <TreatmentType>RECEIPT</TreatmentType>
        <Cost>100</Cost>
        <IconIndex>1861</IconIndex>
        <DurationHours>0</DurationHours>
    </GameDBTreatment>

Example - IV BAG:

Code:

 <GameDBTreatment ID="TRT_A1AT_REPLACEMENT">
        <AbbreviationLocID>TRT_A1AT_REPLACEMENT_DESCRIPTION</AbbreviationLocID>
        <DiscomfortLevel>Medium</DiscomfortLevel>
        <Procedure>
            <StaffSelectionRules>REQUIRED_ROOM_OR_DEFAULT_ROOM</StaffSelectionRules>

            <RequiredSkillsToPrescribe>
                <SkillRef>SKILL_DOC_SPEC_GENERAL_SURGERY</SkillRef>
                <SkillRef>SKILL_DOC_SPEC_INTERNAL_MEDICINE</SkillRef>
                <SkillRef>SKILL_DOC_SPEC_CRITICAL_CARE</SkillRef>
            </RequiredSkillsToPrescribe>

            <RequiredDoctorQualificationList>
                <SkillRef>SKILL_DOC_SPEC_GENERAL_SURGERY</SkillRef>
                <SkillRef>SKILL_DOC_SPEC_INTERNAL_MEDICINE</SkillRef>
                <SkillRef>SKILL_DOC_SPEC_CRITICAL_CARE</SkillRef>
            </RequiredDoctorQualificationList>

            <RequiredRoomTags>
                <Tag>general_surgery_office</Tag>
                <Tag>internal_medicine_office</Tag>
                <Tag>icu</Tag>
            </RequiredRoomTags>

            <ProcedureScript>ProcedureScriptTreatmentReceipt</ProcedureScript>
            <AnimationSetupSitting>
                <AnimationNameIn>stand_press_bandage_hand_in</AnimationNameIn>
                <AnimationNameIdle>stand_press_bandage_hand_idle</AnimationNameIdle>
                <AnimationNameOut>stand_press_bandage_hand_out</AnimationNameOut>
            </AnimationSetupSitting>
            <DressLevel>FULL</DressLevel>
            <DressLevelAfter>FULL</DressLevelAfter>
        </Procedure>
        <TreatmentType>RECEIPT</TreatmentType>
        <ReceiptType>IV_BAG</ReceiptType>
        <Cost>100</Cost>
        <IconIndex>1951</IconIndex>
        <DurationHours>0</DurationHours>
        <HospitalizationTreatmentRef>TRT_HOSPITALIZATION_NORMAL</HospitalizationTreatmentRef>
        <AllowedWithAnyHospitalization>true</AllowedWithAnyHospitalization>
    </GameDBTreatment>

Object involved procedure

<RequiredSkillsToPrescribe> - contains skill of doctor that prescribes the examination
<RequiredStatLabQualificationRef> - lab technician's skill to provide
<RequiredEquipmentList> - has to contain tags of all requiered equipment
<AnimationSetupLying> / <AnimationSetupSitting> - animations
<DetachedDepartmentRef> - there must be referrence to department; can be found here:
\Assets\StreamingAssets\Database\Departments.xml

<HospitalizationTreatmentRef> - hospitalization type needed; can be found here:
\Assets\StreamingAssets\Database\Procedures\TreatmentsHospitalization.xml

Code:

<GameDBTreatment ID="TRT_SHOCK_WAVE_LITHOTRIPSY">
        <AbbreviationLocID>TRT_SHOCK_WAVE_LITHOTRIPSY_DESCRIPTION</AbbreviationLocID>
        <DiscomfortLevel>Medium</DiscomfortLevel><!--TODO for test only-->
        <Procedure>
            <StaffSelectionRules>REQUIRED_ROOM_OR_DEFAULT_ROOM</StaffSelectionRules>

            <RequiredSkillsToPrescribe>
                <SkillRef>SKILL_DOC_SPEC_GENERAL_SURGERY</SkillRef>
            </RequiredSkillsToPrescribe>

            <RequiredStatLabQualificationRef>SKILL_LAB_SPECIALIST_SPEC_USG</RequiredStatLabQualificationRef>

            <RequiredEquipmentList>
                <RequiredEquipment>
                    <Tag>sit_exam</Tag>
                </RequiredEquipment>
                <RequiredEquipment>
                    <Tag>shockwave</Tag>
                </RequiredEquipment>
            </RequiredEquipmentList>

            <RequiredRoomTags>
                <Tag>gs_sonography_unit</Tag>
            </RequiredRoomTags>

            <ProcedureScript>ProcedureScriptTreatmentProcedure</ProcedureScript>

            <AnimationSetupLying>
                <AnimationNameIn>stand_treatment_in</AnimationNameIn> <!--TODO tempAnim-->
                <AnimationNameIdle>stand_treatment_idle</AnimationNameIdle>
                <AnimationNameOut>stand_treatment_out</AnimationNameOut>
            </AnimationSetupLying>
            <AnimationSetupLying>
                <AnimationNameIn>stand_treatment_in</AnimationNameIn> <!--TODO prop?-->
                <AnimationNameIdle>stand_treatment_idle</AnimationNameIdle>
                <AnimationNameOut>stand_treatment_out</AnimationNameOut>
            </AnimationSetupLying>

            <DressLevel>HALF</DressLevel>
            <DressLevelAfter>FULL</DressLevelAfter>
            <DetachedDepartmentRef>DPT_GENERAL_SURGERY_DEPARTMENT</DetachedDepartmentRef>
        </Procedure>
        <TreatmentType>PROCEDURE</TreatmentType>
        <Cost>50</Cost>
        <IconIndex>1953</IconIndex>
        <DurationHours>0</DurationHours>
        <HospitalizationTreatmentRef>TRT_HOSPITALIZATION_NORMAL</HospitalizationTreatmentRef>
        <AllowedWithAnyHospitalization>true</AllowedWithAnyHospitalization>
    </GameDBTreatment>


5. COMPLETING THE DIAGNOSIS


ID
    - use DIA_XYZ - when creatind some disease
    - use TRM_XYZ - when creating trauma
<AbbreviationLocID> - actually localization ID of the description

<Duration> - deprecated

<OccurrenceRef> - category of the occurence rate of the disease
OCCURRENCE_COMMON
OCCURRENCE_UNCOMMON
OCCURRENCE_RARE

Symptoms:
<DayOfFirstOccurence> - always set to 0, experiments with new symptoms appearing over time weren't exactly successful Smile
<ProbabilityPercent> - probability of presence of specific symptom in the set of symptoms that define diagnosis (10-100) - main symptom is always set to 100
<GameDBSymptomRef> - symptom's ID

<Examinations> - list of all examinations needed to discover every single symptom - list represents a recommended sequence of examinations for the AI doctor

<Treatments> - list of treatments that suppress mainly the main symptom and symptoms that are at High hazard
- it is necessary to put treatment for the main symptom at the first place of the sequence

<DepartmentRef> - set the department refference
// list of departments can be found at \Assets\StreamingAssets\Database\Departments.xml

Tags:
If patients with this diagnosis should spawn when the player only has clinic at this department:
Code:

<Tags>
     <Tag>disease</Tag>
     <Tag>clinic</Tag>
</Tags>

if diagnosis can be treated at hospitalization:
Code:

<Tags>
     <Tag>disease</Tag>
</Tags>

<InsurancePayment> - how much money will you get if patient will be treated

<IconIndex> - choose icon for current symptom - for custom icons take a look at https://projecthospital.forumotion.com/t2069-modding-tutorial-medical-database-custom-icons

Example - clinic disease:

Code:

<!-- Pork tapeworm (infection) -->
    <GameDBMedicalCondition ID="DIA_PTI">
        <AbbreviationLocID>DIA_PTI_DESCRIPTION</AbbreviationLocID>
        <Duration>2</Duration>
        <OccurrenceRef>OCCURRENCE_UNCOMMON</OccurrenceRef>
        <Symptoms>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>80</ProbabilityPercent>
                <GameDBSymptomRef>SYM_NAUSEA</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>80</ProbabilityPercent>
                <GameDBSymptomRef>SYM_ABDOMINAL_PAIN</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>80</ProbabilityPercent>
                <GameDBSymptomRef>SYM_FATIGUE</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>80</ProbabilityPercent>
                <GameDBSymptomRef>SYM_WEIGHT_LOSS</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>70</ProbabilityPercent>
                <GameDBSymptomRef>SYM_VITAMIN_DEFICIENCY</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>80</ProbabilityPercent>
                <GameDBSymptomRef>SYM_HUNGER</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>70</ProbabilityPercent>
                <GameDBSymptomRef>SYM_WEAKNESS</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <ProbabilityPercent>100</ProbabilityPercent>
                <GameDBSymptomRef>SYM_PORK_TAPEWORM_PRESENT</GameDBSymptomRef>
            </GameDBSymptomRules>
        </Symptoms>
        <Examinations>
            <ExaminationRef>EXM_INTERVIEW</ExaminationRef>
            <ExaminationRef>EXM_ABDOMINAL_PALPATION</ExaminationRef>
            <ExaminationRef>EXM_PHYSICAL_AND_VISUAL_EXAMINATION</ExaminationRef>
            <ExaminationRef>EXM_BLOOD_TEST_SAMPLING</ExaminationRef>
            <ExaminationRef>EXM_STOOL_ANALYSIS_SAMPLING</ExaminationRef>
            <ExaminationRef>EXM_DIFFERENTIAL_DIAGNOSIS</ExaminationRef>
        </Examinations>
        <Treatments>
            <TreatmentRef>TRT_ANTITAPEWORM_PILLS</TreatmentRef>
            <TreatmentRef>TRT_ANALGESICS</TreatmentRef> <!--ADDITIONAL-->
            <TreatmentRef>TRT_VITAMIN_SUPPLEMENTATION</TreatmentRef>
            <TreatmentRef>TRT_STOMACHICS</TreatmentRef>
            <TreatmentRef>TRT_HOME_TREATMENT</TreatmentRef>
        </Treatments>
        <IconIndex>1027</IconIndex>
        <DepartmentRef>DPT_EMERGENCY</DepartmentRef>
        <InsurancePayment>300</InsurancePayment>
        <Tags>
            <Tag>disease</Tag>
            <Tag>clinic</Tag>
        </Tags>

    </GameDBMedicalCondition>

Example - Hospitalization disease:

Code:

<!-- Classical cholera -->
    <GameDBMedicalCondition ID="DIA_CLC">
        <AbbreviationLocID>DIA_CLC_DESCRIPTION</AbbreviationLocID>
        <Duration>2</Duration>
        <OccurrenceRef>OCCURRENCE_RARE</OccurrenceRef>
        <Symptoms>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>80</ProbabilityPercent>
                <GameDBSymptomRef>SYM_DIARRHEA</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>70</ProbabilityPercent>
                <GameDBSymptomRef>SYM_VOMITING</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>80</ProbabilityPercent>
                <GameDBSymptomRef>SYM_DEHYDRATION</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>60</ProbabilityPercent>
                <GameDBSymptomRef>SYM_CRAMPS</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>50</ProbabilityPercent>
                <GameDBSymptomRef>SYM_IRRITABILITY</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>50</ProbabilityPercent>
                <GameDBSymptomRef>SYM_THIRST</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>50</ProbabilityPercent>
                <GameDBSymptomRef>SYM_OLIGURIA</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>70</ProbabilityPercent>
                <GameDBSymptomRef>SYM_HYPOTENSION</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <DayOfFirstOccurence>0</DayOfFirstOccurence>
                <ProbabilityPercent>30</ProbabilityPercent>
                <GameDBSymptomRef>SYM_IRREGULAR_HEARTBEAT</GameDBSymptomRef>
            </GameDBSymptomRules>
            <GameDBSymptomRules>
                <ProbabilityPercent>100</ProbabilityPercent>
                <GameDBSymptomRef>SYM_VIBRIO_CHOLERAE_DETECTED</GameDBSymptomRef>
            </GameDBSymptomRules>
        </Symptoms>
        <Examinations>
            <ExaminationRef>EXM_INTERVIEW</ExaminationRef>
            <!--ExaminationRef>EXM_OBSERVATION</ExaminationRef-->
            <ExaminationRef>EXM_PHYSICAL_AND_VISUAL_EXAMINATION</ExaminationRef>
            <ExaminationRef>EXM_BLOOD_PRESSURE_AND_PULSE_MEASUREMENT</ExaminationRef>
            <ExaminationRef>EXM_ECG</ExaminationRef>
            <ExaminationRef>EXM_HEART_MONITORING</ExaminationRef>
            <ExaminationRef>EXM_BACTERIA_CULTIVATION_SAMPLING</ExaminationRef>
         <ExaminationRef>EXM_DIFFERENTIAL_DIAGNOSIS</ExaminationRef>
        </Examinations>
        <Treatments>
            <TreatmentRef>TRT_HOSPITALIZATION_NORMAL</TreatmentRef>
            <TreatmentRef>TRT_INTRAVENOUS_ANTIBIOTICS</TreatmentRef>
            <TreatmentRef>TRT_BETA_BLOCKERS</TreatmentRef>
            <TreatmentRef>TRT_REHYDRATION</TreatmentRef>
            <TreatmentRef>TRT_REST</TreatmentRef>
        </Treatments>
        <IconIndex>1139</IconIndex>
        <DepartmentRef>DPT_INTERNAL_MEDICINE_DEPARTMENT</DepartmentRef>
        <InsurancePayment>1000</InsurancePayment>
        <Tags>
            <Tag>disease</Tag>
        </Tags>
    </GameDBMedicalCondition>


6.SURGERIES (OPTIONAL)


https://projecthospital.forumotion.com/t1970-modding-tutorial-database-surgeries
avatar
palepurplesky
intern
Posts : 4
Reputation : 0
Join date : 2019-08-27
Age : 26
Location : Canada

Modding tutorial - Database - Medical Database Empty No treatment

Tue Mar 03, 2020 12:28 pm
I'm quite new to modding, so forgive me if this question is a bit dumb/obvious. When creating a symptom that does not require treatment, would <TreatmentRef>NONE</TreatmentRef> be correct?
igor.oxymoron
igor.oxymoron
developer
Posts : 347
Reputation : 25
Join date : 2018-03-23
Location : Czech republic

Modding tutorial - Database - Medical Database Empty Re: Modding tutorial - Database - Medical Database

Tue Mar 03, 2020 12:31 pm
Message reputation : 100% (2 votes)
Hello!
If you are to create new symptom that does not requiere treatment, you just simply will not mention it.

Example from the game - symptom "Polyuria" does not have any treatment:
Code:

<GameDBSymptom ID="SYM_POLYURIA">
        <DescriptionLocID>SYM_POLYURIA_DESCRIPTION</DescriptionLocID>
        <DiscomfortLevel>Low</DiscomfortLevel>
        <PatientComplains>true</PatientComplains>
        <Hazard>Low</Hazard>
        <PatientMobility>MOBILE</PatientMobility>
        <Examinations>
            <ExaminationRef>EXM_INTERVIEW</ExaminationRef>
        </Examinations>
        <ShameLevel>0</ShameLevel>
        <IsMainSymptom>false</IsMainSymptom>
        <IconIndex>1589</IconIndex>
</GameDBSymptom>

Cheers!
Sponsored content

Modding tutorial - Database - Medical Database Empty Re: Modding tutorial - Database - Medical Database

Back to top
Permissions in this forum:
You cannot reply to topics in this forum