From 04d6b948a3762d7e71306cc26ecc26d247a0b4ad Mon Sep 17 00:00:00 2001 From: Cong Date: Sun, 31 Dec 2023 21:36:02 +1100 Subject: [PATCH] Add health pickups that exceed max health #71 --- .../techdemo/cyberdogs.cdogscpn/campaign.json | 1 + .../cyberdogs.cdogscpn/characters.json | 9 + src/briefing_screens.c | 3 +- src/cdogs/actors.c | 15 +- src/cdogs/actors.h | 3 +- src/cdogs/campaigns.c | 14 ++ src/cdogs/campaigns.h | 2 + src/cdogs/character.c | 3 + src/cdogs/character.h | 2 + src/cdogs/files.c | 1 + src/cdogs/handle_game_events.c | 4 +- src/cdogs/hud/health_gauge.c | 4 +- src/cdogs/map_archive.c | 1 + src/cdogs/map_new.c | 1 + src/cdogs/net_server.c | 4 +- src/cdogs/net_util.c | 1 + src/cdogs/net_util.h | 4 +- src/cdogs/pickup.c | 7 +- src/cdogs/pickup_class.c | 7 +- src/cdogs/pickup_class.h | 7 +- src/cdogs/player.c | 7 +- src/cdogs/quick_play.c | 3 +- src/cdogsed/campaign_options.c | 10 +- src/cdogsed/char_editor.c | 3 + src/cdogsed/editor_ui_common.c | 2 +- src/cdogsed/nk_window.c | 2 +- src/proto/msg.pb.h | 22 ++- src/proto/msg.proto | 2 + src/proto/poetry.lock | 164 ++++++++++++++++++ src/proto/pyproject.toml | 16 ++ src/proto/readme | 4 + 31 files changed, 292 insertions(+), 36 deletions(-) create mode 100644 src/proto/poetry.lock create mode 100644 src/proto/pyproject.toml create mode 100644 src/proto/readme diff --git a/missions/custom/techdemo/cyberdogs.cdogscpn/campaign.json b/missions/custom/techdemo/cyberdogs.cdogscpn/campaign.json index a4c59d448..22fc5a023 100644 --- a/missions/custom/techdemo/cyberdogs.cdogscpn/campaign.json +++ b/missions/custom/techdemo/cyberdogs.cdogscpn/campaign.json @@ -12,5 +12,6 @@ "MaxLives": 4, "PlayerHP": 20, "PlayerMaxHP": 50, + "PlayerExcessHP": 70, "Missions": 10 } \ No newline at end of file diff --git a/missions/custom/techdemo/cyberdogs.cdogscpn/characters.json b/missions/custom/techdemo/cyberdogs.cdogscpn/characters.json index 7e2ab34ac..c3a094efc 100644 --- a/missions/custom/techdemo/cyberdogs.cdogscpn/characters.json +++ b/missions/custom/techdemo/cyberdogs.cdogscpn/characters.json @@ -15,6 +15,7 @@ "speed": 256, "Gun": "Machine gun", "maxHealth": 40, + "excessHealth": 80, "flags": 1024, "probabilityToMove": 50, "probabilityToTrack": 25, @@ -37,6 +38,7 @@ "speed": 256, "Gun": "Machine gun", "maxHealth": 40, + "excessHealth": 80, "flags": 1024, "probabilityToMove": 50, "probabilityToTrack": 25, @@ -59,6 +61,7 @@ "speed": 256, "Gun": "Machine gun", "maxHealth": 40, + "excessHealth": 80, "flags": 1024, "probabilityToMove": 50, "probabilityToTrack": 25, @@ -82,6 +85,7 @@ "Gun": "DumbGun", "Melee": "Fists", "maxHealth": 15, + "excessHealth": 30, "flags": 167773184, "probabilityToMove": 50, "probabilityToTrack": 50, @@ -104,6 +108,7 @@ "Gun": "Lazer", "Melee": "Fists", "maxHealth": 12, + "excessHealth": 24, "flags": 167773184, "probabilityToMove": 75, "probabilityToTrack": 75, @@ -126,6 +131,7 @@ "Gun": "Gun", "Melee": "Fists", "maxHealth": 60, + "excessHealth": 120, "flags": 167773184, "probabilityToMove": 75, "probabilityToTrack": 75, @@ -148,6 +154,7 @@ "Gun": "Lazer", "Melee": "Chainsaw", "maxHealth": 12, + "excessHealth": 24, "flags": 167773184, "probabilityToMove": 75, "probabilityToTrack": 75, @@ -171,6 +178,7 @@ "Gun": "DumbGun", "Melee": "Fists", "maxHealth": 15, + "excessHealth": 30, "flags": 167773184, "probabilityToMove": 75, "probabilityToTrack": 75, @@ -194,6 +202,7 @@ "Gun": "TurboLazer", "Melee": "2xChainsaw", "maxHealth": 60, + "excessHealth": 120, "flags": 167773184, "probabilityToMove": 50, "probabilityToTrack": 50, diff --git a/src/briefing_screens.c b/src/briefing_screens.c index 8264e36af..30e843c2e 100644 --- a/src/briefing_screens.c +++ b/src/briefing_screens.c @@ -696,7 +696,8 @@ static void ApplyBonuses(PlayerData *p, const int bonus) static int GetHealthBonus(const PlayerData *p) { const int maxHealth = p->Char.maxHealth; - return p->hp > maxHealth - 50 ? (p->hp + 50 - p->Char.maxHealth) * 10 : 0; + const int hp = MIN(p->hp, maxHealth); + return hp > maxHealth - 50 ? (hp + 50 - p->Char.maxHealth) * 10 : 0; } static int GetResurrectionFee(const PlayerData *p) { diff --git a/src/cdogs/actors.c b/src/cdogs/actors.c index 04151e50a..3f15c9e36 100644 --- a/src/cdogs/actors.c +++ b/src/cdogs/actors.c @@ -729,15 +729,16 @@ static void CheckRescue(const TActor *a) } } -void ActorHeal(TActor *actor, int health) +void ActorHeal(TActor *actor, const int amount, const bool exceedMax) { - actor->health += health; - actor->health = MIN(actor->health, ActorGetCharacter(actor)->maxHealth); + actor->health += amount; + const int maxHealth = ActorGetMaxHeal(actor, exceedMax); + actor->health = MIN(actor->health, maxHealth); AddParticle ap; memset(&ap, 0, sizeof ap); ap.Pos = actor->Pos; ap.Z = 10; - for (int i = 0; i < MAX(health / 20, 1); i++) + for (int i = 0; i < MAX(amount / 20, 1); i++) { ap.Vel = svec2(RAND_FLOAT(-0.2f, 0.2f), RAND_FLOAT(-0.2f, 0.2f)); EmitterStart(&actor->healEffect, &ap); @@ -2291,6 +2292,12 @@ static void ActorAddBloodSplatters( } } +int ActorGetMaxHeal(const TActor *a, const bool exceedMax) +{ + const Character *c = ActorGetCharacter(a); + return exceedMax ? c->excessHealth : c->maxHealth; +} + int ActorGetHealthPercent(const TActor *a) { const int maxHealth = ActorGetCharacter(a)->maxHealth; diff --git a/src/cdogs/actors.h b/src/cdogs/actors.h index c0722e03f..e68976470 100644 --- a/src/cdogs/actors.h +++ b/src/cdogs/actors.h @@ -198,7 +198,7 @@ void CommandActor(TActor *actor, int cmd, int ticks); void SlideActor(TActor *actor, int cmd); void UpdateAllActors(const int ticks); void ActorsPilotVehicles(void); -void ActorHeal(TActor *actor, int health); +void ActorHeal(TActor *actor, const int amount, const bool exceedMax); void InjureActor(TActor *actor, int injury); void ActorAddAmmo(TActor *actor, const int ammoId, const int amount); @@ -245,6 +245,7 @@ bool ActorIsInvulnerable( const TActor *a, const int flags, const int playerUID, const GameMode mode, const special_damage_e special); +int ActorGetMaxHeal(const TActor *a, const bool exceedMax); int ActorGetHealthPercent(const TActor *a); bool ActorIsLowHealth(const TActor *a); bool ActorIsGrimacing(const TActor *a); diff --git a/src/cdogs/campaigns.c b/src/cdogs/campaigns.c index 8726bb978..8d6ceca3b 100644 --- a/src/cdogs/campaigns.c +++ b/src/cdogs/campaigns.c @@ -147,6 +147,20 @@ int CampaignGetMaxHP(const Campaign *c) return 200 * ConfigGetInt(&gConfig, "Game.PlayerHP") / 100; } } +int CampaignGetExcessHP(const Campaign *c) +{ + switch (c->Entry.Mode) + { + case GAME_MODE_DOGFIGHT: + return CampaignGetHP(c) * 2; + default: + if (c->Setting.PlayerExcessHP > 0) + { + return c->Setting.PlayerExcessHP; + } + return CampaignGetHP(c) * 2; + } +} int CampaignGetHP(const Campaign *c) { switch (c->Entry.Mode) diff --git a/src/cdogs/campaigns.h b/src/cdogs/campaigns.h index 16d7fcd12..602ae648b 100644 --- a/src/cdogs/campaigns.h +++ b/src/cdogs/campaigns.h @@ -62,6 +62,7 @@ typedef struct int MaxLives; int PlayerHP; int PlayerMaxHP; + int PlayerExcessHP; CArray Missions; // of Mission CharacterStore characters; MusicChunk CustomSongs[MUSIC_COUNT]; @@ -94,6 +95,7 @@ void CampaignSettingTerminateAll(CampaignSetting *setting); int CampaignGetMaxLives(const Campaign *c); int CampaignGetLives(const Campaign *c); int CampaignGetMaxHP(const Campaign *c); +int CampaignGetExcessHP(const Campaign *c); int CampaignGetHP(const Campaign *c); bool CampaignListIsEmpty(const CampaignList *c); diff --git a/src/cdogs/character.c b/src/cdogs/character.c index cc71160f1..42fb9b644 100644 --- a/src/cdogs/character.c +++ b/src/cdogs/character.c @@ -217,6 +217,8 @@ void CharacterLoadJSON( CFREE(tmp); } LoadInt(&ch->maxHealth, child, "maxHealth"); + ch->excessHealth = ch->maxHealth * 2; + LoadInt(&ch->excessHealth, child, "excessHealth"); int flags; LoadInt(&flags, child, "flags"); ch->flags = flags; @@ -289,6 +291,7 @@ bool CharacterSave(CharacterStore *s, const char *path) json_insert_pair_into_object(node, "Melee", json_new_string(c->Melee->name)); } AddIntPair(node, "maxHealth", c->maxHealth); + AddIntPair(node, "excessHealth", c->excessHealth); AddIntPair(node, "flags", c->flags); if (c->Drop != NULL) { diff --git a/src/cdogs/character.h b/src/cdogs/character.h index c924feef5..31d7ab690 100644 --- a/src/cdogs/character.h +++ b/src/cdogs/character.h @@ -51,6 +51,8 @@ typedef struct const WeaponClass *Gun; const WeaponClass *Melee; int maxHealth; + // Max health for ExceedMax health pickups + int excessHealth; unsigned int flags; CharColors Colors; const PickupClass *Drop; diff --git a/src/cdogs/files.c b/src/cdogs/files.c index 8d71a13bd..f5b97f446 100644 --- a/src/cdogs/files.c +++ b/src/cdogs/files.c @@ -359,6 +359,7 @@ void ConvertCharacter(Character *c, TBadGuy *b) &c->Colors); ConvertHairColors(c, face); c->maxHealth = b->health; + c->excessHealth = c->maxHealth * 2; c->flags = b->flags; } static void ConvertObjective(Objective *dest, struct MissionObjectiveOld *src) diff --git a/src/cdogs/handle_game_events.c b/src/cdogs/handle_game_events.c index 84ed40e8c..03ab3defe 100644 --- a/src/cdogs/handle_game_events.c +++ b/src/cdogs/handle_game_events.c @@ -1,7 +1,7 @@ /* C-Dogs SDL A port of the legendary (and fun) action/arcade cdogs. - Copyright (c) 2014-2022 Cong Xu + Copyright (c) 2014-2023 Cong Xu All rights reserved. Redistribution and use in source and binary forms, with or without @@ -256,7 +256,7 @@ static void HandleGameEvent( TActor *a = ActorGetByUID(e.u.Heal.UID); if (!a->isInUse || a->dead) break; - ActorHeal(a, e.u.Heal.Amount); + ActorHeal(a, e.u.Heal.Amount, e.u.Heal.ExceedMax); // Tell the spawner that we took a health so we can // spawn more (but only if we're the server) if (e.u.Heal.IsRandomSpawned && !gCampaign.IsClient) diff --git a/src/cdogs/hud/health_gauge.c b/src/cdogs/hud/health_gauge.c index 5868c4f86..cbe0fdef7 100644 --- a/src/cdogs/hud/health_gauge.c +++ b/src/cdogs/hud/health_gauge.c @@ -79,8 +79,8 @@ void HealthGaugeDraw( } HSV hsv = {0.0, 1.0, 1.0}; - const int health = actor->health; const int maxHealth = ActorGetCharacter(actor)->maxHealth; + const int health = MIN(actor->health, maxHealth); if (actor->poisoned) { hsv.h = 120.0; @@ -112,7 +112,7 @@ void HealthGaugeDraw( // Draw health number label char s[50]; - sprintf(s, "%d", health); + sprintf(s, "%d", actor->health); FontOpts fOpts = opts; fOpts.Area = svec2i(width, 11); fOpts.Pad = svec2i(2, 1); diff --git a/src/cdogs/map_archive.c b/src/cdogs/map_archive.c index 95b1f4efe..3a558abae 100644 --- a/src/cdogs/map_archive.c +++ b/src/cdogs/map_archive.c @@ -311,6 +311,7 @@ int MapArchiveSave(const char *filename, CampaignSetting *c) AddIntPair(root, "MaxLives", c->MaxLives); AddIntPair(root, "PlayerHP", c->PlayerHP); AddIntPair(root, "PlayerMaxHP", c->PlayerMaxHP); + AddIntPair(root, "PlayerExcessHP", c->PlayerExcessHP); AddIntPair(root, "Missions", (int)c->Missions.size); char buf2[CDOGS_PATH_MAX]; sprintf(buf2, "%s/campaign.json", buf); diff --git a/src/cdogs/map_new.c b/src/cdogs/map_new.c index 44d32b21c..2ad8501cc 100644 --- a/src/cdogs/map_new.c +++ b/src/cdogs/map_new.c @@ -173,6 +173,7 @@ void MapNewLoadCampaignJSON(json_t *root, CampaignSetting *c) LoadInt(&c->MaxLives, root, "MaxLives"); LoadInt(&c->PlayerHP, root, "PlayerHP"); LoadInt(&c->PlayerMaxHP, root, "PlayerMaxHP"); + LoadInt(&c->PlayerExcessHP, root, "PlayerExcessHP"); } static void LoadMissionObjectives( diff --git a/src/cdogs/net_server.c b/src/cdogs/net_server.c index 88fa77db0..ba6fc46f5 100644 --- a/src/cdogs/net_server.c +++ b/src/cdogs/net_server.c @@ -419,8 +419,8 @@ void NetServerSendGameStartMessages(NetServer *n, const int peerId) CA_FOREACH(const PlayerData, pOther, gPlayerDatas) NPlayerData pd = NMakePlayerData(pOther); NetServerSendMsg(n, peerId, GAME_EVENT_PLAYER_DATA, &pd); - LOG(LM_NET, LL_DEBUG, "send player data uid(%d) maxHealth(%d) HP(%d)", - (int)pd.UID, (int)pd.MaxHealth, (int)pd.HP); + LOG(LM_NET, LL_DEBUG, "send player data uid(%d) maxHealth(%d) excessHealth(%d) HP(%d)", + (int)pd.UID, (int)pd.MaxHealth, (int)pd.ExcessHealth, (int)pd.HP); CA_FOREACH_END() // Send all game-specific config values diff --git a/src/cdogs/net_util.c b/src/cdogs/net_util.c index aea598a6b..ab578f448 100644 --- a/src/cdogs/net_util.c +++ b/src/cdogs/net_util.c @@ -89,6 +89,7 @@ NPlayerData NMakePlayerData(const PlayerData *p) d.Stats = p->Stats; d.Totals = p->Totals; d.MaxHealth = p->Char.maxHealth; + d.ExcessHealth = p->Char.excessHealth; d.HP = p->HP; d.LastMission = p->lastMission; d.UID = p->UID; diff --git a/src/cdogs/net_util.h b/src/cdogs/net_util.h index 10116e05c..2bda8cc16 100644 --- a/src/cdogs/net_util.h +++ b/src/cdogs/net_util.h @@ -2,7 +2,7 @@ C-Dogs SDL A port of the legendary (and fun) action/arcade cdogs. - Copyright (c) 2014-2017, 2019-2022 Cong Xu + Copyright (c) 2014-2017, 2019-2023 Cong Xu All rights reserved. Redistribution and use in source and binary forms, with or without @@ -40,7 +40,7 @@ #define NET_LISTEN_PORT 34219 -#define NET_PROTOCOL_VERSION 14 +#define NET_PROTOCOL_VERSION 15 // Messages diff --git a/src/cdogs/pickup.c b/src/cdogs/pickup.c index 384aef56d..448566401 100644 --- a/src/cdogs/pickup.c +++ b/src/cdogs/pickup.c @@ -1,7 +1,7 @@ /* C-Dogs SDL A port of the legendary (and fun) action/arcade cdogs. - Copyright (c) 2014-2015, 2017-2020, 2022 Cong Xu + Copyright (c) 2014-2015, 2017-2020, 2022-2023 Cong Xu All rights reserved. Redistribution and use in source and binary forms, with or without @@ -178,13 +178,14 @@ void PickupPickup(TActor *a, Pickup *p, const bool pickupAll) case PICKUP_HEALTH: // Don't pick up unless taken damage - if (a->health < ActorGetCharacter(a)->maxHealth) + if (a->health < ActorGetMaxHeal(a, pe->u.Heal.ExceedMax)) { canPickup = true; GameEvent e = GameEventNew(GAME_EVENT_ACTOR_HEAL); e.u.Heal.UID = a->uid; e.u.Heal.PlayerUID = a->PlayerUID; - e.u.Heal.Amount = pe->u.Health; + e.u.Heal.Amount = pe->u.Heal.Amount; + e.u.Heal.ExceedMax = pe->u.Heal.ExceedMax; e.u.Heal.IsRandomSpawned = p->IsRandomSpawned; GameEventsEnqueue(&gGameEvents, e); } diff --git a/src/cdogs/pickup_class.c b/src/cdogs/pickup_class.c index cb2a3209e..a76acfeb1 100644 --- a/src/cdogs/pickup_class.c +++ b/src/cdogs/pickup_class.c @@ -1,7 +1,7 @@ /* C-Dogs SDL A port of the legendary (and fun) action/arcade cdogs. - Copyright (c) 2015-2016, 2018, 2020-2022 Cong Xu + Copyright (c) 2015-2016, 2018, 2020-2023 Cong Xu All rights reserved. Redistribution and use in source and binary forms, with or without @@ -315,8 +315,9 @@ static void LoadPickupEffect(PickupClass *c, json_t *node, const int version) break; case PICKUP_HEALTH: // Set default heal amount - p.u.Health = HEALTH_PICKUP_HEAL_AMOUNT; - LoadInt(&p.u.Health, node, "Health"); + p.u.Heal.Amount = HEALTH_PICKUP_HEAL_AMOUNT; + LoadInt(&p.u.Heal.Amount, node, "Health"); + LoadBool(&p.u.Heal.ExceedMax, node, "ExceedMax"); break; case PICKUP_AMMO: { tmp = GetString(node, "Ammo"); diff --git a/src/cdogs/pickup_class.h b/src/cdogs/pickup_class.h index 4a6d9aee4..232c8892f 100644 --- a/src/cdogs/pickup_class.h +++ b/src/cdogs/pickup_class.h @@ -1,7 +1,7 @@ /* C-Dogs SDL A port of the legendary (and fun) action/arcade cdogs. - Copyright (c) 2015-2016, 2018, 2020-2022 Cong Xu + Copyright (c) 2015-2016, 2018, 2020-2023 Cong Xu All rights reserved. Redistribution and use in source and binary forms, with or without @@ -53,7 +53,10 @@ typedef struct PickupType Type; union { int Score; - int Health; + struct { + int Amount; + bool ExceedMax; + } Heal; NAmmo Ammo; int Keys; // Refer to flags in mission.h int GunId; diff --git a/src/cdogs/player.c b/src/cdogs/player.c index 420ed39b6..ebc00067b 100644 --- a/src/cdogs/player.c +++ b/src/cdogs/player.c @@ -104,14 +104,15 @@ void PlayerDataAddOrUpdate(const NPlayerData pd) p->Stats = pd.Stats; p->Totals = pd.Totals; p->Char.maxHealth = pd.MaxHealth; + p->Char.excessHealth = pd.ExcessHealth; p->HP = pd.HP; p->lastMission = pd.LastMission; // Ready players as well p->Ready = true; - LOG(LM_MAIN, LL_INFO, "update player UID(%d) maxHealth(%d) HP(%d)", p->UID, - p->Char.maxHealth, p->HP); + LOG(LM_MAIN, LL_INFO, "update player UID(%d) maxHealth(%d) excessHealth(%d) HP(%d)", p->UID, + p->Char.maxHealth, p->Char.excessHealth, p->HP); } static void PlayerTerminate(PlayerData *p); @@ -242,6 +243,7 @@ NPlayerData PlayerDataDefault(const int idx) pd.HP = CampaignGetHP(&gCampaign); pd.MaxHealth = CampaignGetMaxHP(&gCampaign); + pd.ExcessHealth = CampaignGetExcessHP(&gCampaign); pd.Lives = CampaignGetLives(&gCampaign); if (gCampaign.Setting.BuyAndSell) { @@ -266,6 +268,7 @@ NPlayerData PlayerDataMissionReset(const PlayerData *p) pd.LastMission = gCampaign.MissionIndex; pd.MaxHealth = CampaignGetMaxHP(&gCampaign); + pd.ExcessHealth = CampaignGetExcessHP(&gCampaign); return pd; } diff --git a/src/cdogs/quick_play.c b/src/cdogs/quick_play.c index f7f44c801..174b0beac 100644 --- a/src/cdogs/quick_play.c +++ b/src/cdogs/quick_play.c @@ -1,7 +1,7 @@ /* C-Dogs SDL A port of the legendary (and fun) action/arcade cdogs. - Copyright (c) 2013-2017, 2019-2021 Cong Xu + Copyright (c) 2013-2017, 2019-2021, 2023 Cong Xu All rights reserved. Redistribution and use in source and binary forms, with or without @@ -189,6 +189,7 @@ static void SetupQuickPlayEnemy(Character *enemy, const WeaponClass *wc, const b enemy->bot->actionDelay = rand() % (50 + 1); enemy->maxHealth = GenerateQuickPlayParam( ConfigGetEnum(&gConfig, "QuickPlay.EnemyHealth"), 10, 20, 40, 60); + enemy->excessHealth = enemy->maxHealth * 2; enemy->flags = 0; if (isBg) { diff --git a/src/cdogsed/campaign_options.c b/src/cdogsed/campaign_options.c index 44372888c..ce549d977 100644 --- a/src/cdogsed/campaign_options.c +++ b/src/cdogsed/campaign_options.c @@ -173,11 +173,19 @@ static bool Draw(SDL_Window *win, struct nk_context *ctx, void *data) { changed = true; } - // Clamp PlayerHP within PlayerMaxHP + if (DrawNumberSlider( + ctx, "Player excess HP", "Max HP for items that heal over max HP", 0, 1000, 5, + &cData->c->Setting.PlayerExcessHP)) + { + changed = true; + } + // Clamp PlayerHP, PlayerMaxHP and PlayerExcessHP if (changed && cData->c->Setting.PlayerMaxHP > 0) { cData->c->Setting.PlayerHP = MIN(cData->c->Setting.PlayerHP, cData->c->Setting.PlayerMaxHP); + cData->c->Setting.PlayerExcessHP = + MAX(cData->c->Setting.PlayerExcessHP, cData->c->Setting.PlayerMaxHP); } nk_end(ctx); } diff --git a/src/cdogsed/char_editor.c b/src/cdogsed/char_editor.c index f1047508d..8eccdf0e3 100644 --- a/src/cdogsed/char_editor.c +++ b/src/cdogsed/char_editor.c @@ -748,6 +748,8 @@ static bool Draw(SDL_Window *win, struct nk_context *ctx, void *data) nk_layout_row_dynamic(ctx, ROW_HEIGHT, 1); nk_property_int( ctx, "Max Health:", 10, &ec->Char->maxHealth, 2000, 10, 1); + nk_property_int( + ctx, "Excess Health:", ec->Char->maxHealth, &ec->Char->excessHealth, 2000, 10, 1); nk_layout_row_dynamic(ctx, ROW_HEIGHT, 2); DrawFlag(ctx, ec, "Asbestos", FLAGS_ASBESTOS, "Immune to fire"); @@ -868,6 +870,7 @@ static void AddCharacter(EditorContext *ec, const int cloneIdx) ec->Char->speed = 1; ec->Char->Gun = StrWeaponClass("Machine gun"); ec->Char->maxHealth = 40; + ec->Char->excessHealth = 80; ec->Char->flags = FLAGS_IMMUNITY; ec->Char->bot->probabilityToMove = 50; ec->Char->bot->probabilityToTrack = 25; diff --git a/src/cdogsed/editor_ui_common.c b/src/cdogsed/editor_ui_common.c index 3f6601d2d..0888639be 100644 --- a/src/cdogsed/editor_ui_common.c +++ b/src/cdogsed/editor_ui_common.c @@ -635,7 +635,7 @@ char *MakePickupTooltip(const PickupClass *pc) sprintf(peBuf, "\n- Score: %d", pe->u.Score); break; case PICKUP_HEALTH: - sprintf(peBuf, "\n- Health: %d", pe->u.Health); + sprintf(peBuf, "\n- Health: %d%s", pe->u.Heal.Amount, pe->u.Heal.ExceedMax ? " (exceed max)" : ""); break; case PICKUP_AMMO: { const Ammo *a = AmmoGetById(&gAmmo, pe->u.Ammo.Id); diff --git a/src/cdogsed/nk_window.c b/src/cdogsed/nk_window.c index 83a97af05..6eb8111ff 100644 --- a/src/cdogsed/nk_window.c +++ b/src/cdogsed/nk_window.c @@ -404,7 +404,7 @@ void PickupClassDrawPropsSidebar( nk_label(ctx, buf, NK_TEXT_LEFT); break; case PICKUP_HEALTH: - sprintf(buf, "Health: %d", pe->u.Health); + sprintf(buf, "Health: %d%s", pe->u.Heal.Amount, pe->u.Heal.ExceedMax ? " (exceed max)" : ""); nk_label(ctx, buf, NK_TEXT_LEFT); break; case PICKUP_AMMO: { diff --git a/src/proto/msg.pb.h b/src/proto/msg.pb.h index 1d9544cfb..50cce371a 100644 --- a/src/proto/msg.pb.h +++ b/src/proto/msg.pb.h @@ -195,6 +195,7 @@ typedef struct _NActorHeal { int32_t PlayerUID; int32_t Amount; bool IsRandomSpawned; + bool ExceedMax; } NActorHeal; typedef struct _NAmmo { @@ -224,6 +225,7 @@ typedef struct _NPlayerData { pb_size_t Ammo_count; NAmmo Ammo[128]; uint32_t HP; + uint32_t ExcessHealth; } NPlayerData; typedef struct _NActorAdd { @@ -413,7 +415,7 @@ extern "C" { #define NColor_init_default {0} #define NCharColors_init_default {false, NColor_init_default, false, NColor_init_default, false, NColor_init_default, false, NColor_init_default, false, NColor_init_default, false, NColor_init_default, false, NColor_init_default, false, NColor_init_default, false, NColor_init_default} #define NPlayerStats_init_default {0, 0, 0, 0, 0} -#define NPlayerData_init_default {"", "", "", "", "", "", false, NCharColors_init_default, 0, {"", "", "", ""}, 0, false, NPlayerStats_init_default, false, NPlayerStats_init_default, 0, 0, 0, 0, {NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default}, 0} +#define NPlayerData_init_default {"", "", "", "", "", "", false, NCharColors_init_default, 0, {"", "", "", ""}, 0, false, NPlayerStats_init_default, false, NPlayerStats_init_default, 0, 0, 0, 0, {NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default, NAmmo_init_default}, 0, 0} #define NPlayerRemove_init_default {0} #define NConfig_init_default {"", ""} #define NTileSet_init_default {false, NVec2i_init_default, "", "", "", 0} @@ -434,7 +436,7 @@ extern "C" { #define NActorSwitchGun_init_default {0, 0} #define NActorPickupAll_init_default {0, 0} #define NActorReplaceGun_init_default {0, 0, ""} -#define NActorHeal_init_default {0, 0, 0, 0} +#define NActorHeal_init_default {0, 0, 0, 0, 0} #define NAmmo_init_default {0, 0} #define NActorAddAmmo_init_default {0, 0, false, NAmmo_init_default, 0} #define NActorUseAmmo_init_default {0, 0, false, NAmmo_init_default} @@ -465,7 +467,7 @@ extern "C" { #define NColor_init_zero {0} #define NCharColors_init_zero {false, NColor_init_zero, false, NColor_init_zero, false, NColor_init_zero, false, NColor_init_zero, false, NColor_init_zero, false, NColor_init_zero, false, NColor_init_zero, false, NColor_init_zero, false, NColor_init_zero} #define NPlayerStats_init_zero {0, 0, 0, 0, 0} -#define NPlayerData_init_zero {"", "", "", "", "", "", false, NCharColors_init_zero, 0, {"", "", "", ""}, 0, false, NPlayerStats_init_zero, false, NPlayerStats_init_zero, 0, 0, 0, 0, {NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero}, 0} +#define NPlayerData_init_zero {"", "", "", "", "", "", false, NCharColors_init_zero, 0, {"", "", "", ""}, 0, false, NPlayerStats_init_zero, false, NPlayerStats_init_zero, 0, 0, 0, 0, {NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero, NAmmo_init_zero}, 0, 0} #define NPlayerRemove_init_zero {0} #define NConfig_init_zero {"", ""} #define NTileSet_init_zero {false, NVec2i_init_zero, "", "", "", 0} @@ -486,7 +488,7 @@ extern "C" { #define NActorSwitchGun_init_zero {0, 0} #define NActorPickupAll_init_zero {0, 0} #define NActorReplaceGun_init_zero {0, 0, ""} -#define NActorHeal_init_zero {0, 0, 0, 0} +#define NActorHeal_init_zero {0, 0, 0, 0, 0} #define NAmmo_init_zero {0, 0} #define NActorAddAmmo_init_zero {0, 0, false, NAmmo_init_zero, 0} #define NActorUseAmmo_init_zero {0, 0, false, NAmmo_init_zero} @@ -600,6 +602,7 @@ extern "C" { #define NActorHeal_PlayerUID_tag 2 #define NActorHeal_Amount_tag 3 #define NActorHeal_IsRandomSpawned_tag 4 +#define NActorHeal_ExceedMax_tag 5 #define NAmmo_Id_tag 1 #define NAmmo_Amount_tag 2 #define NPlayerData_Name_tag 1 @@ -618,6 +621,7 @@ extern "C" { #define NPlayerData_UID_tag 14 #define NPlayerData_Ammo_tag 15 #define NPlayerData_HP_tag 16 +#define NPlayerData_ExcessHealth_tag 17 #define NActorAdd_UID_tag 1 #define NActorAdd_PilotUID_tag 2 #define NActorAdd_VehicleUID_tag 3 @@ -782,7 +786,8 @@ X(a, STATIC, SINGULAR, UINT32, MaxHealth, 12) \ X(a, STATIC, SINGULAR, UINT32, LastMission, 13) \ X(a, STATIC, SINGULAR, UINT32, UID, 14) \ X(a, STATIC, REPEATED, MESSAGE, Ammo, 15) \ -X(a, STATIC, SINGULAR, UINT32, HP, 16) +X(a, STATIC, SINGULAR, UINT32, HP, 16) \ +X(a, STATIC, SINGULAR, UINT32, ExcessHealth, 17) #define NPlayerData_CALLBACK NULL #define NPlayerData_DEFAULT NULL #define NPlayerData_Colors_MSGTYPE NCharColors @@ -951,7 +956,8 @@ X(a, STATIC, SINGULAR, STRING, Gun, 3) X(a, STATIC, SINGULAR, UINT32, UID, 1) \ X(a, STATIC, SINGULAR, INT32, PlayerUID, 2) \ X(a, STATIC, SINGULAR, INT32, Amount, 3) \ -X(a, STATIC, SINGULAR, BOOL, IsRandomSpawned, 4) +X(a, STATIC, SINGULAR, BOOL, IsRandomSpawned, 4) \ +X(a, STATIC, SINGULAR, BOOL, ExceedMax, 5) #define NActorHeal_CALLBACK NULL #define NActorHeal_DEFAULT NULL @@ -1254,7 +1260,7 @@ extern const pb_msgdesc_t NMissionEnd_msg; #define NActorAdd_size 1877 #define NActorDie_size 11 #define NActorDir_size 17 -#define NActorHeal_size 30 +#define NActorHeal_size 32 #define NActorImpulse_size 30 #define NActorMelee_size 164 #define NActorMove_size 30 @@ -1288,7 +1294,7 @@ extern const pb_msgdesc_t NMissionEnd_msg; #define NMissionEnd_size 149 #define NObjectiveUpdate_size 17 #define NPlayerAddLives_size 17 -#define NPlayerData_size 3207 +#define NPlayerData_size 3214 #define NPlayerRemove_size 6 #define NPlayerStats_size 35 #define NRemoveBullet_size 6 diff --git a/src/proto/msg.proto b/src/proto/msg.proto index 351e19071..7ba8e6524 100644 --- a/src/proto/msg.proto +++ b/src/proto/msg.proto @@ -65,6 +65,7 @@ message NPlayerData { uint32 UID = 14; repeated NAmmo Ammo = 15; uint32 HP = 16; + uint32 ExcessHealth = 17; } message NPlayerRemove { @@ -198,6 +199,7 @@ message NActorHeal { int32 PlayerUID = 2; int32 Amount = 3; bool IsRandomSpawned = 4; + bool ExceedMax = 5; } message NAmmo { diff --git a/src/proto/poetry.lock b/src/proto/poetry.lock new file mode 100644 index 000000000..42372f864 --- /dev/null +++ b/src/proto/poetry.lock @@ -0,0 +1,164 @@ +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. + +[[package]] +name = "grpcio" +version = "1.54.2" +description = "HTTP/2-based RPC framework" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.54.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:40e1cbf69d6741b40f750f3cccc64326f927ac6145a9914d33879e586002350c"}, + {file = "grpcio-1.54.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2288d76e4d4aa7ef3fe7a73c1c470b66ea68e7969930e746a8cd8eca6ef2a2ea"}, + {file = "grpcio-1.54.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c0e3155fc5335ec7b3b70f15230234e529ca3607b20a562b6c75fb1b1218874c"}, + {file = "grpcio-1.54.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bf88004fe086c786dc56ef8dd6cb49c026833fdd6f42cb853008bce3f907148"}, + {file = "grpcio-1.54.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be88c081e33f20630ac3343d8ad9f1125f32987968e9c8c75c051c9800896e8"}, + {file = "grpcio-1.54.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:33d40954199bddbb6a78f8f6f2b2082660f381cd2583ec860a6c2fa7c8400c08"}, + {file = "grpcio-1.54.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b52d00d1793d290c81ad6a27058f5224a7d5f527867e5b580742e1bd211afeee"}, + {file = "grpcio-1.54.2-cp310-cp310-win32.whl", hash = "sha256:881d058c5ccbea7cc2c92085a11947b572498a27ef37d3eef4887f499054dca8"}, + {file = "grpcio-1.54.2-cp310-cp310-win_amd64.whl", hash = "sha256:0212e2f7fdf7592e4b9d365087da30cb4d71e16a6f213120c89b4f8fb35a3ab3"}, + {file = "grpcio-1.54.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:1e623e0cf99a0ac114f091b3083a1848dbc64b0b99e181473b5a4a68d4f6f821"}, + {file = "grpcio-1.54.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:66233ccd2a9371158d96e05d082043d47dadb18cbb294dc5accfdafc2e6b02a7"}, + {file = "grpcio-1.54.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:4cb283f630624ebb16c834e5ac3d7880831b07cbe76cb08ab7a271eeaeb8943e"}, + {file = "grpcio-1.54.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a1e601ee31ef30a9e2c601d0867e236ac54c922d32ed9f727b70dd5d82600d5"}, + {file = "grpcio-1.54.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8da84bbc61a4e92af54dc96344f328e5822d574f767e9b08e1602bb5ddc254a"}, + {file = "grpcio-1.54.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5008964885e8d23313c8e5ea0d44433be9bfd7e24482574e8cc43c02c02fc796"}, + {file = "grpcio-1.54.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a2f5a1f1080ccdc7cbaf1171b2cf384d852496fe81ddedeb882d42b85727f610"}, + {file = "grpcio-1.54.2-cp311-cp311-win32.whl", hash = "sha256:b74ae837368cfffeb3f6b498688a123e6b960951be4dec0e869de77e7fa0439e"}, + {file = "grpcio-1.54.2-cp311-cp311-win_amd64.whl", hash = "sha256:8cdbcbd687e576d48f7886157c95052825ca9948c0ed2afdc0134305067be88b"}, + {file = "grpcio-1.54.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:782f4f8662a2157c4190d0f99eaaebc602899e84fb1e562a944e5025929e351c"}, + {file = "grpcio-1.54.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:714242ad0afa63a2e6dabd522ae22e1d76e07060b5af2ddda5474ba4f14c2c94"}, + {file = "grpcio-1.54.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:f900ed4ad7a0f1f05d35f955e0943944d5a75f607a836958c6b8ab2a81730ef2"}, + {file = "grpcio-1.54.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96a41817d2c763b1d0b32675abeb9179aa2371c72aefdf74b2d2b99a1b92417b"}, + {file = "grpcio-1.54.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70fcac7b94f4c904152809a050164650ac81c08e62c27aa9f156ac518029ebbe"}, + {file = "grpcio-1.54.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fd6c6c29717724acf9fc1847c4515d57e4dc12762452457b9cb37461f30a81bb"}, + {file = "grpcio-1.54.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c2392f5b5d84b71d853918687d806c1aa4308109e5ca158a16e16a6be71041eb"}, + {file = "grpcio-1.54.2-cp37-cp37m-win_amd64.whl", hash = "sha256:51630c92591d6d3fe488a7c706bd30a61594d144bac7dee20c8e1ce78294f474"}, + {file = "grpcio-1.54.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:b04202453941a63b36876a7172b45366dc0cde10d5fd7855c0f4a4e673c0357a"}, + {file = "grpcio-1.54.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:89dde0ac72a858a44a2feb8e43dc68c0c66f7857a23f806e81e1b7cc7044c9cf"}, + {file = "grpcio-1.54.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:09d4bfd84686cd36fd11fd45a0732c7628308d094b14d28ea74a81db0bce2ed3"}, + {file = "grpcio-1.54.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fc2b4edb938c8faa4b3c3ea90ca0dd89b7565a049e8e4e11b77e60e4ed2cc05"}, + {file = "grpcio-1.54.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61f7203e2767800edee7a1e1040aaaf124a35ce0c7fe0883965c6b762defe598"}, + {file = "grpcio-1.54.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e416c8baf925b5a1aff31f7f5aecc0060b25d50cce3a5a7255dc5cf2f1d4e5eb"}, + {file = "grpcio-1.54.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dc80c9c6b608bf98066a038e0172013a49cfa9a08d53335aefefda2c64fc68f4"}, + {file = "grpcio-1.54.2-cp38-cp38-win32.whl", hash = "sha256:8d6192c37a30a115f4663592861f50e130caed33efc4eec24d92ec881c92d771"}, + {file = "grpcio-1.54.2-cp38-cp38-win_amd64.whl", hash = "sha256:46a057329938b08e5f0e12ea3d7aed3ecb20a0c34c4a324ef34e00cecdb88a12"}, + {file = "grpcio-1.54.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:2296356b5c9605b73ed6a52660b538787094dae13786ba53080595d52df13a98"}, + {file = "grpcio-1.54.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:c72956972e4b508dd39fdc7646637a791a9665b478e768ffa5f4fe42123d5de1"}, + {file = "grpcio-1.54.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:9bdbb7624d65dc0ed2ed8e954e79ab1724526f09b1efa88dcd9a1815bf28be5f"}, + {file = "grpcio-1.54.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c44e1a765b31e175c391f22e8fc73b2a2ece0e5e6ff042743d8109b5d2eff9f"}, + {file = "grpcio-1.54.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cc928cfe6c360c1df636cf7991ab96f059666ac7b40b75a769410cc6217df9c"}, + {file = "grpcio-1.54.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a08920fa1a97d4b8ee5db2f31195de4a9def1a91bc003544eb3c9e6b8977960a"}, + {file = "grpcio-1.54.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4864f99aac207e3e45c5e26c6cbb0ad82917869abc2f156283be86c05286485c"}, + {file = "grpcio-1.54.2-cp39-cp39-win32.whl", hash = "sha256:b38b3de8cff5bc70f8f9c615f51b48eff7313fc9aca354f09f81b73036e7ddfa"}, + {file = "grpcio-1.54.2-cp39-cp39-win_amd64.whl", hash = "sha256:be48496b0e00460717225e7680de57c38be1d8629dc09dadcd1b3389d70d942b"}, + {file = "grpcio-1.54.2.tar.gz", hash = "sha256:50a9f075eeda5097aa9a182bb3877fe1272875e45370368ac0ee16ab9e22d019"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.54.2)"] + +[[package]] +name = "grpcio-tools" +version = "1.54.2" +description = "Protobuf code generator for gRPC" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-tools-1.54.2.tar.gz", hash = "sha256:e11c2c2aee53f340992e8e4d6a59172cbbbd0193f1351de98c4f810a5041d5ca"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:2b96f5f17d3156058be247fd25b062b4768138665694c00b056659618b8fb418"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:11939c9a8a39bd4815c7e88cb2fee48e1948775b59dbb06de8fcae5991e84f9e"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:129de5579f95d6a55dde185f188b4cbe19d1e2f1471425431d9930c31d300d70"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4128c01cd6f5ea8f7c2db405dbfd8582cd967d36e6fa0952565436633b0e591"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5c7292dd899ad8fa09a2be96719648cee37b17909fe8c12007e3bff58ebee61"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5ef30c2dbc63c1e0a462423ca4f95001814d26ef4fe66208e53fcf220ea3b717"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4abfc1892380abe6cef381eab86f9350cbd703bfe5d834095aa66fd91c886b6d"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-win32.whl", hash = "sha256:9acf443dcf6f68fbea3b7fb519e1716e014db1a561939f5aecc4abda74e4015d"}, + {file = "grpcio_tools-1.54.2-cp310-cp310-win_amd64.whl", hash = "sha256:21b9d2dee80f3f77e4097252e7f0db89772335a7300b72ab3d2e5c280872b1db"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:7b24fbab9e7598518ce4549e066df00aab79c2bf9bedcdde23fb5ef6a3cf532f"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:7baa210c20f71a242d9ae0e02734628f6948e8bee3bf538647894af427d28800"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:e3d0e5188ff8dbaddac2ee44731d36f09c4eccd3eac7328e547862c44f75cacd"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27671c68c7e0e3c5ff9967f5500799f65a04e7b153b8ce10243c87c43199039d"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f39d8e8806b8857fb473ca6a9c7bd800b0673dfdb7283ff569af0345a222f32c"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8e4c5a48f7b2e8798ce381498ee7b9a83c65b87ae66ee5022387394e5eb51771"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f285f8ef3de422717a36bd372239ae778b8cc112ce780ca3c7fe266dadc49fb"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-win32.whl", hash = "sha256:0f952c8a5c47e9204fe8959f7e9add149e660f6579d67cf65024c32736d34caf"}, + {file = "grpcio_tools-1.54.2-cp311-cp311-win_amd64.whl", hash = "sha256:3237149beec39e897fd62cef4aa1e1cd9422d7a95661d24bd0a79200b167e730"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:0ab1b323905d449298523db5d34fa5bf5fffd645bd872b25598e2f8a01f0ea39"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:7d7e6e8d62967b3f037f952620cb7381cc39a4bd31790c75fcfba56cc975d70b"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:7f4624ef2e76a3a5313c4e61a81be38bcc16b59a68a85d30758b84cd2102b161"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e543f457935ba7b763b121f1bf893974393b4d30065042f947f85a8d81081b80"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0239b929eb8b3b30b2397eef3b9abb245087754d77c3721e3be43c44796de87d"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0de05c7698c655e9a240dc34ae91d6017b93143ac89e5b20046d7ca3bd09c27c"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a3ce0b98fb581c471424d2cda45120f57658ed97677c6fec4d6decf5d7c1b976"}, + {file = "grpcio_tools-1.54.2-cp37-cp37m-win_amd64.whl", hash = "sha256:37393ef90674964175923afe3859fc5a208e1ece565f642b4f76a8c0224a0993"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:8e4531267736d88fde1022b36dd42ed8163e3575bcbd12bfed96662872aa93fe"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:a0b7049814442f918b522d66b1d015286afbeb9e6d141af54bbfafe31710a3c8"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:b80585e06c4f0082327eb5c9ad96fbdb2b0e7c14971ea5099fe78c22f4608451"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39fd530cfdf58dc05125775cc233b05554d553d27478f14ae5fd8a6306f0cb28"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3bb9ec4aea0f2b3006fb002fa59e5c10f92b48fc374619fbffd14d2b0e388c3e"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d512de051342a576bb89777476d13c5266d9334cf4badb6468aed9dc8f5bdec1"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1b8ee3099c51ce987fa8a08e6b93fc342b10228415dd96b5c0caa0387f636a6f"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-win32.whl", hash = "sha256:6037f123905dc0141f7c8383ca616ef0195e79cd3b4d82faaee789d4045e891b"}, + {file = "grpcio_tools-1.54.2-cp38-cp38-win_amd64.whl", hash = "sha256:10dd41862f579d185c60f629b5ee89103e216f63b576079d258d974d980bad87"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:f6787d07fdab31a32c433c1ba34883dea6559d8a3fbe08fb93d834ca34136b71"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:21b1467e31e44429d2a78b50135c9cdbd4b8f6d3b5cd548bc98985d3bdc352d0"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:30a49b8b168aced2a4ff40959e6c4383ad6cfd7a20839a47a215e9837eb722dc"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8742122782953d2fd038f0a199f047a24e941cc9718b1aac90876dbdb7167739"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503ef1351c62fb1d6747eaf74932b609d8fdd4345b3591ef910adef8fa9969d0"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:72d15de4c4b6a764a76c4ae69d99c35f7a0751223688c3f7e62dfa95eb4f61be"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df079479fb1b9e488334312e35ebbf30cbf5ecad6c56599f1a961800b33ab7c1"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-win32.whl", hash = "sha256:49c2846dcc4803476e839d8bd4db8845e928f19130e0ea86121f2d1f43d2b452"}, + {file = "grpcio_tools-1.54.2-cp39-cp39-win_amd64.whl", hash = "sha256:b82ca472db9c914c44e39a41e9e8bd3ed724523dd7aff5ce37592b8d16920ed9"}, +] + +[package.dependencies] +grpcio = ">=1.54.2" +protobuf = ">=4.21.6,<5.0dev" +setuptools = "*" + +[[package]] +name = "protobuf" +version = "4.23.3" +description = "" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "protobuf-4.23.3-cp310-abi3-win32.whl", hash = "sha256:514b6bbd54a41ca50c86dd5ad6488afe9505901b3557c5e0f7823a0cf67106fb"}, + {file = "protobuf-4.23.3-cp310-abi3-win_amd64.whl", hash = "sha256:cc14358a8742c4e06b1bfe4be1afbdf5c9f6bd094dff3e14edb78a1513893ff5"}, + {file = "protobuf-4.23.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2991f5e7690dab569f8f81702e6700e7364cc3b5e572725098215d3da5ccc6ac"}, + {file = "protobuf-4.23.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:08fe19d267608d438aa37019236db02b306e33f6b9902c3163838b8e75970223"}, + {file = "protobuf-4.23.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3b01a5274ac920feb75d0b372d901524f7e3ad39c63b1a2d55043f3887afe0c1"}, + {file = "protobuf-4.23.3-cp37-cp37m-win32.whl", hash = "sha256:aca6e86a08c5c5962f55eac9b5bd6fce6ed98645d77e8bfc2b952ecd4a8e4f6a"}, + {file = "protobuf-4.23.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0149053336a466e3e0b040e54d0b615fc71de86da66791c592cc3c8d18150bf8"}, + {file = "protobuf-4.23.3-cp38-cp38-win32.whl", hash = "sha256:84ea0bd90c2fdd70ddd9f3d3fc0197cc24ecec1345856c2b5ba70e4d99815359"}, + {file = "protobuf-4.23.3-cp38-cp38-win_amd64.whl", hash = "sha256:3bcbeb2bf4bb61fe960dd6e005801a23a43578200ea8ceb726d1f6bd0e562ba1"}, + {file = "protobuf-4.23.3-cp39-cp39-win32.whl", hash = "sha256:5cb9e41188737f321f4fce9a4337bf40a5414b8d03227e1d9fbc59bc3a216e35"}, + {file = "protobuf-4.23.3-cp39-cp39-win_amd64.whl", hash = "sha256:29660574cd769f2324a57fb78127cda59327eb6664381ecfe1c69731b83e8288"}, + {file = "protobuf-4.23.3-py3-none-any.whl", hash = "sha256:447b9786ac8e50ae72cae7a2eec5c5df6a9dbf9aa6f908f1b8bda6032644ea62"}, + {file = "protobuf-4.23.3.tar.gz", hash = "sha256:7a92beb30600332a52cdadbedb40d33fd7c8a0d7f549c440347bc606fb3fe34b"}, +] + +[[package]] +name = "setuptools" +version = "67.8.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, + {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "0169ca5395eb55eed4110a0c059c67ec265bd6357f5c1f3800385ad8ab0590d1" diff --git a/src/proto/pyproject.toml b/src/proto/pyproject.toml new file mode 100644 index 000000000..40b69f677 --- /dev/null +++ b/src/proto/pyproject.toml @@ -0,0 +1,16 @@ +[tool.poetry] +name = "proto" +version = "0.1.0" +description = "" +authors = ["Your Name "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.8" +protobuf = "^4.23.3" +grpcio-tools = "^1.54.2" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/src/proto/readme b/src/proto/readme new file mode 100644 index 000000000..d39d5e96d --- /dev/null +++ b/src/proto/readme @@ -0,0 +1,4 @@ +Download nanopb https://github.com/nanopb/nanopb +and run in this folder: + +poetry run /generator/protoc --nanopb_out=. msg.proto \ No newline at end of file