# \[ANN\] Arceus.jl Efficient runtime trait library

**URL:** <https://discourse.julialang.org/t/ann-arceus-jl-efficient-runtime-trait-library/101650>\
**Category:** Package Announcements\
**Tags:** announcement\
**Created:** [July 15, 2023, 11:59am UTC](https://discourse.julialang.org/t/ann-arceus-jl-efficient-runtime-trait-library/101650 "2023-07-15T11:59:14Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tarny\_GG\_Channie](https://avatars.discourse-cdn.com/v4/letter/t/3bc359/32.png) [@Tarny\_GG\_Channie](https://discourse.julialang.org/u/Tarny_GG_Channie)\
**Post date:** [July 15, 2023, 11:59am UTC](https://discourse.julialang.org/t/ann-arceus-jl-efficient-runtime-trait-library/101650/1 "2023-07-15T11:59:14Z")

</div>

This is my first package. Wish me good luck. This package was awkwardly developed and is really cursed internally. Hopefully it’s still usable.

> **[GitHub - AliceRoselia/Arceus.jl: Arcane julia entity management system](https://github.com/AliceRoselia/Arceus.jl)**
>
> Arcane julia entity management system. Contribute to AliceRoselia/Arceus.jl development by creating an account on GitHub.

Please star it if you like it.

---

<div class="post-metadata">

**Author:** ![nsajko](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nsajko/32/221187_2.png) [@nsajko](https://discourse.julialang.org/u/nsajko)\
**Post date:** [July 15, 2023, 2:56pm UTC](https://discourse.julialang.org/t/ann-arceus-jl-efficient-runtime-trait-library/101650/2 "2023-07-15T14:56:54Z")

</div>

What does it do? What’s an arcane entity management system?

---

<div class="post-metadata">

**Author:** ![Tarny\_GG\_Channie](https://avatars.discourse-cdn.com/v4/letter/t/3bc359/32.png) [@Tarny\_GG\_Channie](https://discourse.julialang.org/u/Tarny_GG_Channie)\
**Post date:** [July 16, 2023, 3:51am UTC](https://discourse.julialang.org/t/ann-arceus-jl-efficient-runtime-trait-library/101650/3 "2023-07-16T03:51:57Z")

</div>

It stores up to 64 traits efficiently (Using a single Uint64), then, it efficiently evaluates statement

> effectiveness =1.0  
> if (electro)  
> effectiveness \*= 2.0  
> end  
> if (laser)  
> effectiveness \*= 2.0  
> end  
> #etc…

And turn it into a single lookup

> arr[((Value&mask)\*magic)\>\>shift]

Example use includes efficiently [Calculating job weight](https://stellaris.paradoxwikis.com/Jobs) and other attributes from species trait in Stellaris.

For example, the politician job weight modifier is as following.  
Modifiers

- [![Charismatic.png](https://global.discourse-cdn.com/julialang/original/3X/4/b/4b71ee94a4bc75936f45c9917c330b230e3e14e8.png)](https://stellaris.paradoxwikis.com/Charismatic) **×1.5** Charismatic
- [![Trait necrophage.png](https://global.discourse-cdn.com/julialang/original/3X/e/f/ef6be381d68ec2d83b606c8f2885e2466b7fd928.png)](https://stellaris.paradoxwikis.com/Necrophage_(trait)) **×1.5** Necrophage
- [![Trait void dweller positive.png](https://global.discourse-cdn.com/julialang/original/3X/b/8/b8ca47593c8e567170690ca31d5204189753bc89.png)](https://stellaris.paradoxwikis.com/Void_Dweller) **×1.5** Void Dweller
- [![Domestic protocols.png](https://global.discourse-cdn.com/julialang/original/3X/5/2/52221b5943a6d1af75661b1579e62fdc244c784c.png)](https://stellaris.paradoxwikis.com/Domestic_Protocols) **×1.5** Domestic Protocols
- [![Trait traditional.png](https://global.discourse-cdn.com/julialang/original/3X/8/8/8824181bed0db9c7246f8b3c6d98d00f22a1e7d3.png)](https://stellaris.paradoxwikis.com/Traditional) **×1.25** Traditional
- [![Propaganda machines.png](https://global.discourse-cdn.com/julialang/original/3X/6/3/6347700ed0e39a58d810dd3661761a43392c2e46.png)](https://stellaris.paradoxwikis.com/Propaganda_Machines) **×1.25** Propaganda Machines
- [![Trait brainslugged.png](https://global.discourse-cdn.com/julialang/original/3X/9/7/97f777242280b5351685b732c208618fde17fafe.png)](https://stellaris.paradoxwikis.com/Brain_Slug_Host) **×1.25** Brain Slug Host
- [![Trait primitive.png](https://global.discourse-cdn.com/julialang/original/3X/6/1/61b750721de009d07ea589f521fd1a3209f5f734.png)](https://stellaris.paradoxwikis.com/Natural_Intellectuals) **×1.13** Natural Intellectuals
- [![Robust.png](https://global.discourse-cdn.com/julialang/original/3X/7/2/7285eba85c012a20b8af40feea524026b06ddf35.png)](https://stellaris.paradoxwikis.com/Robust) **×1.13** Robust
- [![Trait quarrelsome.png](https://global.discourse-cdn.com/julialang/original/3X/4/5/45c7a834dc30caa0c393bd061ed76f64097c1015.png)](https://stellaris.paradoxwikis.com/Quarrelsome) **×0.75** Quarrelsome
- [![Repugnant.png](https://global.discourse-cdn.com/julialang/original/3X/0/1/012016709c780fa6dfaa4159f24cacc1e944ef74.png)](https://stellaris.paradoxwikis.com/Repugnant) **×0.5** Repugnant

We can turn this into a single mask, multiply, shift, lookup calculation.  
Another example is… imagine if Pokémon can have more than 2 types, we can calculate the attack’s effectiveness by this principle as well.

---

<div class="post-metadata">

**Author:** ![Tarny\_GG\_Channie](https://avatars.discourse-cdn.com/v4/letter/t/3bc359/32.png) [@Tarny\_GG\_Channie](https://discourse.julialang.org/u/Tarny_GG_Channie)\
**Post date:** [July 16, 2023, 11:51pm UTC](https://discourse.julialang.org/t/ann-arceus-jl-efficient-runtime-trait-library/101650/4 "2023-07-16T23:51:58Z")

</div>

Update: Fixed random dependency.
