void ImplItem::bind(NameSema& sema) const { sema.push_scope(); bind_ast_type_params(sema); if (trait()) trait()->bind(sema); ast_type()->bind(sema); for (auto&& fn : methods()) fn->bind(sema); sema.lambda_depth_ -= num_ast_type_params(); sema.pop_scope(); }
int GameCritterObject::statBonus(unsigned int num) { if (num >= _statsBonus.size()) throw Exception("GameCritterObject::statBonus(num) - num out of range:" + std::to_string(num)); int bonus = 0; if (trait(TRAITS_GIFTED)) bonus += 1; switch (num) { case STATS_STRENGTH: if (trait(TRAITS_BRUISER)) bonus += 2; break; case STATS_AGILITY: if (trait(TRAITS_SMALL_FRAME)) bonus += 1; break; } return _statsBonus.at(num) + bonus; }
bool PlayerCreateState::_traitToggle(unsigned int num) { auto player = Game::getInstance()->player(); if (player->trait(num)) { player->setTrait(num, 0); return true; } else { unsigned int selectedTraits = 0; for (unsigned int i = 0; i != 16; ++i) if (player->trait(i)) selectedTraits++; if (selectedTraits < 2) { player->setTrait(num, 1); return true; } } return false; }
void NewGameState::_changeCharacter() { auto dude = _characters.at(_selectedCharacter); std::stringstream ss; auto msg = ResourceManager::msgFileType("text/english/game/stat.msg"); ss << msg->message(100)->text() << " " << (dude->stat(0) < 10 ? "0" : "") << dude->stat(0) << "\n" << msg->message(101)->text() << " " << (dude->stat(1) < 10 ? "0" : "") << dude->stat(1) << "\n" << msg->message(102)->text() << " " << (dude->stat(2) < 10 ? "0" : "") << dude->stat(2) << "\n" << msg->message(103)->text() << " " << (dude->stat(3) < 10 ? "0" : "") << dude->stat(3) << "\n" << msg->message(104)->text() << " " << (dude->stat(4) < 10 ? "0" : "") << dude->stat(4) << "\n" << msg->message(105)->text() << " " << (dude->stat(5) < 10 ? "0" : "") << dude->stat(5) << "\n" << msg->message(106)->text() << " " << (dude->stat(6) < 10 ? "0" : "") << dude->stat(6) << "\n"; getTextArea("stats_1")->setText(ss.str()); ss.str(""); ss << _statToString(dude->stat(0)) << "\n" << _statToString(dude->stat(1)) << "\n" << _statToString(dude->stat(2)) << "\n" << _statToString(dude->stat(3)) << "\n" << _statToString(dude->stat(4)) << "\n" << _statToString(dude->stat(5)) << "\n" << _statToString(dude->stat(6)) << "\n"; getTextArea("stats_2")->setText(ss.str()); getTextArea("bio")->setText(dude->biography()); getTextArea("name")->setText(dude->name()); getImageList("images")->setCurrentImage(_selectedCharacter); auto msgMisc = ResourceManager::msgFileType("text/english/game/misc.msg"); std::string stats3 = msgMisc->message(16)->text() + "\n" // Hit Points + msg->message(109)->text() + "\n" // Armor Class + msgMisc->message(15)->text() + "\n" // Action Points + msg->message(111)->text() + "\n"; // Melee Damage std::string stats3_values = std::to_string(dude->hitPointsMax()) + "/" + std::to_string(dude->hitPointsMax()) + "\n" + std::to_string(dude->armorClass()) + "\n" + std::to_string(dude->actionPoints()) + "\n" + std::to_string(dude->meleeDamage()) + "\n"; for (unsigned int i=0; i != 17; ++i) if (dude->skill(i)) { stats3 += "\n" + ResourceManager::msgFileType("text/english/game/skill.msg")->message(100 + i)->text(); stats3_values += "\n" + std::to_string(dude->skillValue(i)) + "%"; } for (unsigned int i=0; i != 16; ++i) if (dude->trait(i)) { stats3 += "\n" + ResourceManager::msgFileType("text/english/game/trait.msg")->message(100 + i)->text(); } getTextArea("stats_3")->setText(stats3); getTextArea("stats3_values")->setText(stats3_values); }
int ExportSolarPhenotype (individual *indlist) { individual *ind; char mkrname[NAMESIZE], tempstr[NAMESIZE]; int i; double currentpos, value; currentpos = 0; // Makes the marker file cfopen ("solar.phe", "w"); // Prints the trait names fprintf(F,"id"); for (i = 1; i<=numberoftraits(); i++) { // Remove white spaces in marker name RemoveWhiteSpace(tempstr, GetName(traitnames, i)); strncpy(mkrname, tempstr, 18); fprintf(F, ",%s", mkrname); } fprintf(F,"\n"); for (ind = indlist; ind; ind = ind->next) { fprintf(F, "%s", ind->id); for (i = 1; i<=numberoftraits(); i++) { fprintf(F, ","); if (!traitmiss(ind, i)) { value = trait(ind, i); // Print only integer part if it is an integer if ( (int) value == value) { fprintf(F, "%d", (int) value); } else { fprintf(F, "%f", value); } } } fprintf(F,"\n"); } fclose(F); puts("Made Solar phenotype file"); return 0; }
void Noun::onTransferZones( NodeZone * pNewZone, NodeZone * pOldZone ) { // notify our traits for(int i=0;i<traitCount();++i) trait(i)->onTransferZones( pNewZone, pOldZone ); }
int GameCritterObject::skillValue(unsigned int num) { if (num >= _skills.size()) throw Exception("GameCritterObject::skillValue(num) - num out of range:" + std::to_string(num)); int value = 0; switch(num) { case SKILLS_SMALL_GUNS: value += 5 + 4 * statTotal(STATS_AGILITY); if (trait(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_BIG_GUNS: value += 2*statTotal(STATS_AGILITY); if (trait(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_ENERGY_WEAPONS: value += 2*statTotal(STATS_AGILITY); if (trait(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_UNARMED: value += 30 + 2*(statTotal(STATS_AGILITY) + statTotal(STATS_STRENGTH)); if (trait(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_MELEE_WEAPONS: value += 20 + 2*(statTotal(STATS_AGILITY) + statTotal(STATS_STRENGTH)); if (trait(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_THROWING: value += 4*statTotal(STATS_AGILITY); if (trait(TRAITS_GOOD_NATURED)) value -= 10; break; case SKILLS_FIRST_AID: value += 2*(statTotal(STATS_PERCEPTION) + statTotal(STATS_INTELLIGENCE)); if (trait(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_DOCTOR: value += 5 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_INTELLIGENCE)); if (trait(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_SNEAK: value += 5 + 3*statTotal(STATS_AGILITY); break; case SKILLS_LOCKPICK: value += 10 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_AGILITY)); break; case SKILLS_STEAL: value += 3*statTotal(STATS_AGILITY); break; case SKILLS_TRAPS: value += 10 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_AGILITY)); break; case SKILLS_SCIENCE: value += 4*statTotal(STATS_INTELLIGENCE); break; case SKILLS_REPAIR: value += 3*statTotal(STATS_INTELLIGENCE); break; case SKILLS_SPEECH: value += 5*statTotal(STATS_CHARISMA); if (trait(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_BARTER: value += 4*statTotal(STATS_CHARISMA); if (trait(TRAITS_GOOD_NATURED)) value += 15; break; case SKILLS_GAMBLING: value += 5*statTotal(STATS_LUCK); break; case SKILLS_OUTDOORSMAN: value += 2 * (statTotal(STATS_ENDURANCE) + statTotal(STATS_INTELLIGENCE)); break; } if (trait(TRAITS_GIFTED)) { value -= 10; } if (skill(num)) { value += 20; } return value; }
void PlayerCreateState::think() { State::think(); auto player = Game::getInstance()->player(); auto msgEditor = ResourceManager::msgFileType("text/english/game/editor.msg"); _labels.at("name")->setText(player->name()); _labels.at("age")->setText(msgEditor->message(104))->appendText(" ")->appendText(std::to_string(player->age())); _labels.at("gender")->setText(msgEditor->message(player->gender() == 0 ? 107 : 108)); // 0 - male 1 - female _counters.at("statsPoints")->setNumber(player->statsPoints()); _counters.at("skillsPoints")->setNumber(player->skillsPoints()); _labels.at("health_1")->setText(msgEditor->message(300))->appendText(" ")->appendText(std::to_string(player->hitPointsMax()))->appendText("/")->appendText(std::to_string(player->hitPointsMax())); _labels.at("params_1_value")->setText(player->armorClass()); _labels.at("params_2_value")->setText(player->actionPoints()); _labels.at("params_3_value")->setText(player->carryWeightMax()); _labels.at("params_4_value")->setText(player->meleeDamage()); _labels.at("params_5_value")->setText(player->damageResistance())->appendText("%"); _labels.at("params_6_value")->setText(player->poisonResistance())->appendText("%"); _labels.at("params_7_value")->setText(player->radiationResistance())->appendText("%"); _labels.at("params_8_value")->setText(player->sequence()); _labels.at("params_9_value")->setText(player->healingRate()); _labels.at("params_10_value")->setText(player->criticalChance())->appendText("%"); // Stats counters and labels for (unsigned int i = 0; i < 7; i++) { std::stringstream ss; ss << "stats_" << (i+1); unsigned int val = player->statTotal(i); _counters.at(ss.str())->setNumber(val); _counters.at(ss.str())->setColor(BigCounter::COLOR_WHITE); if (val > 10) { val = 10; _counters.at(ss.str())->setColor(BigCounter::COLOR_RED); } _labels.at(ss.str())->setText(msgEditor->message(199 + (val < 1 ? 1 : val))); } // Skills values for (unsigned int i = 0; i != 18; ++i) { std::stringstream ss; ss << "skills_" << (i + 1) << "_value"; _labels.at(ss.str())->setText(player->skillValue(i))->appendText("%"); } // Default labels colors for(auto it = _labels.begin(); it != _labels.end(); ++it) { std::string name = it->first; auto font1_3ff800ff = ResourceManager::font("font1.aaf", 0x3ff800ff); auto font1_a0a0a0ff = ResourceManager::font("font1.aaf", 0xa0a0a0ff); auto font1_183018ff = ResourceManager::font("font1.aaf", 0x183018ff); if (name.find("stats_") == 0 || name.find("params_") == 0) { it->second->setFont(font1_3ff800ff); } if (name.find("traits_") == 0) { unsigned int number = atoi(name.substr(7).c_str()); it->second->setFont(player->trait(number - 1) ? font1_a0a0a0ff : font1_3ff800ff); } if (name.find("skills_") == 0) { unsigned int number = atoi(name.substr(7).c_str()); it->second->setFont(player->skill(number - 1) ? font1_a0a0a0ff : font1_3ff800ff); } if (name.find("health_") == 0) { it->second->setFont(name.compare("health_1") == 0 ? font1_3ff800ff : font1_183018ff); } } // Selected labels colors for(auto it = _labels.begin(); it != _labels.end(); ++it) { if (_selectedLabel != it->second) continue; std::string name = it->first; _title->setText(_titles.at(name)); _description->setText(_descriptions.at(name)); _selectedImage->setTexture(_images.at(name)->texture()); auto font1_ffff7fff = ResourceManager::font("font1.aaf", 0xffff7fff); auto font1_ffffffff = ResourceManager::font("font1.aaf", 0xffffffff); auto font1_707820ff = ResourceManager::font("font1.aaf", 0x707820ff); if (name.find("stats_") == 0) { it->second->setFont(font1_ffff7fff); } if (name.find("params_") == 0) { it->second->setFont(font1_ffff7fff); _labels.at(name+"_value")->setFont(font1_ffff7fff); } if (name.find("traits_") == 0) { unsigned int number = atoi(name.substr(7).c_str()); it->second->setFont(player->trait(number - 1) ? font1_ffffffff : font1_ffff7fff); } if (name.find("skills_") == 0) { unsigned int number = atoi(name.substr(7).c_str()); it->second->setFont(player->skill(number - 1) ? font1_ffffffff : font1_ffff7fff); _labels.at(name+"_value")->setFont(player->skill(number - 1) ? font1_ffffffff : font1_ffff7fff); } if (name.find("health_") == 0) { it->second->setFont(name.compare("health_1") == 0 ? font1_ffff7fff : font1_707820ff); } } }
void ExportMendelPedigree (individual *indlist) { int i; namelist *pedigree, *pedlist; markerlist *marker; individual *ind; pedlist = MakePedigreeList(indlist); cfopen ("mendel.ped", "w"); fprintf(F, "(I4,A15,A8)\n"); fprintf(F, "(3A11,3A2"); // Add marker info if (numberofmarkers()>0) fprintf(F, ",%d(1X,A7)", numberofmarkers()); if (numberoftraits()>0) fprintf(F, ",%d(1X,A8)", numberoftraits()); fprintf(F, ")\n"); for (pedigree = pedlist; pedigree; pedigree = pedigree ->next) { fprintf(F, "%-4d%-15s\n",FamilySize(indlist, pedigree->name), pedigree->name); for (ind = indlist; ind; ind = ind->next) { if (!strcmpl(pedigree->name, ind->pedigree)) { if (founder(ind)) { fprintf(F, "%-11s%-11s%-11s", ind->id, "",""); } else { fprintf(F, "%-11s%-11s%-11s", ind->id, ind->father->id, ind->mother->id); } // Spaces here for non-existing disease status and monozygotic twin status? fprintf(F, "%2s ", ind->sex==S_MALE ? "M" : "F"); // Now write the marker information for (i=1; i<=numberofmarkers(); i++) { marker = markernumber(ind, order[i]); if (marker->allele1 == 0 || marker->allele2 == 0) { fprintf(F, " %7s", ""); } else { // fprintf(F, " %3d/%-3d", marker->allele1, marker->allele2); fprintf(F, " %3c/%-3c", 64+marker->allele1, 64+marker->allele2); } } // Then write the trait information for (i=1; i<=numberoftraits(); i++) { if (!traitmiss(ind, i)) fprintf(F, " %8f", trait(ind, i)); else fprintf(F, " %8s", ""); } fprintf(F, "\n"); } } } freelist(pedlist); fclose(F); }