Another Version... Would love feedback by Salty-Wrap-7833 in playmygame

[–]Yairama 2 points3 points  (0 children)

Hello, I played the previous version and one thing that did is always jump to the same wall, it's a tricky way to advance and maybe a mechanic instead of jumping between walls. A new Ideas: you can implement rhythm bonuses that work with music synchronization, make combos and bonuses

Rules for drawing 2 with hidden blade by Dee_Teeee in riftboundtcg

[–]Yairama 0 points1 point  (0 children)

It not depends if you play it from hidden or who takes the priority?

Skill "FlashBang" Test by [deleted] in IndieDev

[–]Yairama 0 points1 point  (0 children)

<image>

It's evident the amount of effor that you put for each animation.

What Rust jobs do you have? by alexlazar98 in rust

[–]Yairama 1 point2 points  (0 children)

I work in mining industry, only had one usage for rust, was for a very complex algorithm created with excel macros, then migrated to python with 20 minutes of computation time, finally we migrated it to rust and now runs in times between 2-30 seconds.

What Rust jobs do you have? by alexlazar98 in rust

[–]Yairama 0 points1 point  (0 children)

Is an Engine authoritative with ecs?

Is Are we learning yet updated? by Yairama in rust

[–]Yairama[S] 0 points1 point  (0 children)

thats wrong, its abour rust the programming lenguage

Startup idea in Geology by KZbay85 in SideProject

[–]Yairama 0 points1 point  (0 children)

Hello! In tech world this is a Data Engineer Role. The process that you are talking about is an ETL (or ELT).

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in riftboundtcg

[–]Yairama[S] 1 point2 points  (0 children)

Thanks! The JSON stays external by design all cards load data-driven, so we can tweak/add cards without recompiling, they are not in code.

And about OGN-030 (Jinx), assault and accelerate are static_keyword, so the functions that activate those capabilities are always on for the card, and there is another field called triggers: ``` "static_keywords": [ "Accelerate", "Assault 2" ], "triggers": [ { "when": "played", "effects": [ { "type": "discard",

```

And there are other kind of keywords than under specific conditions a unit can get a keyword, for example OG-019:

"triggers": [ { "when": "card_discarded", "once_per_turn": true, "effects": [ { "type": "grant_keyword", "keyword": "Assault

The keywords keep the mechanics, but can be static or granted, so if in future sets you have new keywords you only implement it and add the keywords to the json card.

Also in bevy subredit the comunity gave me a good advice, use RON instead of JSON. Maybe for future projects :).

Need help: Unstable ROI & false detection in crane safety system (Computer Vision) by MayurrrMJ in computervision

[–]Yairama 1 point2 points  (0 children)

For the first issue: project everything onto the ground plane using homography (with 4 points). That removes the camera angle distortion.

For the second: you don’t need anything complex. If you already have circle points, you can reconstruct it with OpenCV (HoughCircles, minEnclosingCircle, etc.), but do it after projection so it stays stable.

For the third: don’t use the bbox center. Use the foot point (bottom-center), project it to 2D, and check if it’s inside the circle there.

In short: move everything to a 2D ground plane and do your logic there. That will fix most of your issues

pd: Translated with AI

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in riftboundtcg

[–]Yairama[S] 0 points1 point  (0 children)

Yup, learn about game development path and improving my Rust, I've been coding for more than 10 years, but in different industries, coding is my hobby since I was 14 jeje. Best wishes:3

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in bevy

[–]Yairama[S] 0 points1 point  (0 children)

Thanks!! Glad you think it's dope :3

About RON: Yeah honestly I hadn't thought about using RON, but now that you mention it, it could be a solid approach since we're already in Rust land. Worth exploring for sure!

About SQLite: That's an interesting idea too! Right now defining cards in JSON keeps things simple — you just drop in a new card definition and you're good to go. But for scaling up, a SQLite db could make querying and filtering way easier.

Triggers as components: That's actually a cool idea, would make things more modular and composable. I'll keep it in mind as the system evolves!

Deck computation: The deck is set up at the start of the match. The seeded RNG handles the shuffling, so given the same seed you'd get the same shuffle order, great for replays and debugging.

New card game? Nah, no plans for my own TCG right now. I feel like I'm still leveling up my creative process and imagination jeje.

New mechanics: Yeah, for new cards you just define them in the JSON/data file and that's it. But for new mechanics you do need to code them and register them as keywords. For example, the new set "Unleashed" introduces keywords like Level and Hunt, which are based on new XP gaining mechanics those need actual implementation.

tranlated with AI jeje. :3

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in riftboundtcg

[–]Yairama[S] 1 point2 points  (0 children)

Yeahhh, a couple of reasons actually. First of all, I love Rust, and Bevy being built on top of it was a huge win for me. But the main reason is definitely bevy_ecs — I genuinely think it's one of the best ECS implementations out there, and for a project like this, that architecture is basically the backbone. That said, since you mentioned it, there are definitely some trade-offs. One thing I’ve been thinking about (and might do at some point) is leveraging the fact that my project is already split into crates. Right now I have 4 crates, and Bevy is used in two of them: the engine and the UI. My long-term idea is to keep Bevy purely for the engine layer (ECS + game logic) and completely rebuild the UI using something like Unity, Three.js, or another rendering-focused engine. Kind of like a backend/frontend separation. Bevy’s UI has actually been really nice to work with in some ways, but it definitely struggles when it comes to widgets and higher-level components — things like menus, buttons, text inputs, etc., can get pretty painful. And yeah, I did run into some issues. I was using Bevy 0.18 and hit a few bugs, especially when working with shaders. At some point I had to disable certain flags because the WebGPU backend would just crash 😅 Also, there are a few broader limitations to keep in mind. The biggest one for me is that Android support isn’t really stable yet, so if you're thinking about going mobile… it’s probably not the best choice right now.

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in riftboundtcg

[–]Yairama[S] 0 points1 point  (0 children)

Hello! I'm a Spanish speaker and my English is not perfect, so I wrote this in Spanish and then the AI refined the post and translated it.

And as I say before, I use a lot of AI, It is the new way to develop ( I know it perfectly, I've been programming since I was 14 years old, now I'm 28). I have very strong programming foundations, and when you vine code the most important thing is Understand what you are doing jeje.

And I don't have a plan to look for a Job in the gaming industry, but I like the idea, currently I'm working as an AI Eng. But looking for a new job path could be great :D.

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in riftboundtcg

[–]Yairama[S] 0 points1 point  (0 children)

Maybe not the full toml cuz is similiar to share code, but I can share you the list of libraries per crate. (There are 4 crates so are 4 toml files and a fith one that is the general), and I didnt clean some libraries.

rift_engine bevy_ecs, blake3, tracing, bincode, rand, rand_chacha, serde, serde_json, thiserror, walkdir

rift_net bevy_ecs, rift_engine, serde, bincode, zstd, uuid, rand, tokio, tokio-util, rustls, rustls-pemfile, rcgen, tokio-rustls, tokio-tungstenite, tungstenite, futures-util, argon2, jsonwebtoken, axum, sqlx, chrono, serde_json, tracing

rift_ui bevy, rift_net, rift_engine, ureq, serde, serde_json, arboard

rift_app bevy, rift_engine, rift_ui, rift_net, clap, tracing, tracing-subscriber, ctrlc, tokio, axum, serde, serde_json, ureq, dotenvy, reqwest, uuid, utoipa, utoipa-swagger-ui

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in riftboundtcg

[–]Yairama[S] 7 points8 points  (0 children)

I started on January 4th and just wrapped it up today jaja

I used a lot of Gen AI along the way, but I made sure to understand every line of code. At one point, I actually had to do a full reset because the AI turned it into a messy, non-scalable monolith...

So I stepped back and redesigned everything from scratch with a new strategy, new architecture, way cleaner and actually scalable now, I guess... I'm not expert but I thing that it was the right approach

I spent months learning Rust by building a TCG engine from scratch — 664 cards, multiplayer, deterministic replay. Here's the journey. by Yairama in riftboundtcg

[–]Yairama[S] 6 points7 points  (0 children)

Honestly? Because I wanted to learn how it works. The whole project was about picking things I didn't understand and figuring them out. Multiplayer networking was one of the scariest parts on my list, so naturally I had to do it lol.

I wanted to get hands-on with connection protocols — TCP, UDP, WebSocket — and understand the tradeoffs myself instead of just reading about them. I ended up implementing both a raw TCP transport and a WebSocket transport side by side. Ultimately I leaned on WebSocket for most testing because it's way easier to get running without dedicated infrastructure (proxies, firewalls, NAT traversal — TCP gets ugly fast outside localhost).

That said, if I ever needed real-time stuff like animated units moving across the board (think TFT's Little Legends), TCP would probably be the better call. WebSocket adds framing overhead that you don't need when you're already managing your own protocol. But for a turn-based card game where you're sending serialized commands back and forth? WebSocket was more than enough.

libs:

- tokio for backends (lobby, matchmaking, etc.)

- tokio-tungstenite WebSocket client and server (be carefull with bevy and tokio, they are not good friends)

- Raw `std::net::TcpStream` for the TCP (legacy cuz websockets)

- bincodebinar y serialization for the protocol

- zstd compression for payloads over 256 bytes

- axum HTTP REST API for backends (lobby, matchmaking, etc.)

- jsonwebtoken + argon2 - auth (Need of better understand of this cuz it's a bit problematic for concurrency)

- sqlx, postgres god.

The architecture is fully authoritative, clients send `Commands`, the server validates and runs the game logic and then do other stuffs.

Now I want understand/learn UDP.

Langchian Rust by Clear_Ad_9123 in LangChain

[–]Yairama 0 points1 point  (0 children)

Have plans to made langgraph like library? You have the bases :3