Activity

Cyteon

Shipped this project!

Hours: 64.64
Cookies: 🍪 1279
Multiplier: 28.64 cookies/hr

Made huge progress, was basically unusable before. But now you can craft and mine and stuff

Cyteon

Made it so you actually need the correct tool of the correct tier to break blocks, and made it so certain tools actually break blocks faster (client was stupid and didnt know this, so i have to tell it :c). But now its actualyl kinda playable? You can break trees and get wood, craft wooden tools then progress to stone. Though you cant go further than that cause we dont have furnaces so you cant get iron.

Changelog

Attachment
0
Cyteon

Implemented managing the inventory in survival (cause its diffrent than creative), rn we completly trust the clients new slot suggestions, but that will change in the future. Also implemented crafting in the 2x2 grid in inventory and in crafting tables.

Changelog

Attachment
0
Cyteon

Implemented major parts of player syncing and changed how entity syncing works:

  • Player tick now manages spawning/despawning entities for player
  • All players are added to the entities list
  • Players manage their entity’s pos and rot
  • Movement and rotation changes are sent to players in range, so players can see eachother now, but i still need to implement skins, along with implementing stuff like sneaking and hand animations

Changelog

Attachment
0
Cyteon

Shipped this project!

Hours: 26.01
Cookies: 🍪 774
Multiplier: 29.78 cookies/hr

Added a tour system instead of the old docs system, along with adding OOP and some more cool stuff

Cyteon

Implemented dropping items and item stacks.
And implemented taking blocks and items from the creative inventory and moving things around in your inventory (only creative, as survival uses a diffrent packet)

Changelog

Attachment
0
Cyteon

Implemented a entity system with incrementing entity ids (player gets a entity id now, and its sent to the client in the login (play) packet). Also added item drops if you mine blocks in survival, and they simulate gravity and measure distance to player, and if player is close enough the player will pick up the item.

Changelog

Attachment
0
Cyteon

Added way better world generation! There are bigger diffrences in areas, so there can be both deep oceans and high mountains. Also added trees, grass and flowers. There are also caves and ores generating below ground, with deepslate below y=0. There is also a minor issue where worldgen is pretty slow but ill fix that in the future.

Changelog

Attachment
0
Cyteon

Implemented basic worldgen:

  • Generates bedrock at y = -64
  • Generates stone between y = -63 and up until 4 blocks under the surface
  • Generates 4 dirt blocks then grass
  • Generates water if surface under y = 62, and generates sand instead of grass
  • Generates ores underground between -63 and 320
    In the image, ores above ground was due to testing, same with the chunks missmatching, i did that on purpose.

Changelog

Attachment
0
Cyteon

Added temp and food rations. If the temp is under 10c, sleeping will take 10hp and if its under 5c you will loose 3hp per block. If you are out of food you will loose 5hp per day. So in total u can loose up to 24hp per day

Attachment
0
Cyteon

Added messages to the terminal. You cannot send anything but you can recieve messages from hq. When you dismiss a message it goes to the archive where it can be viewed later.

Attachment
0
Cyteon

Implemented:

  • Extending classes with class <name> extends <name>, an extended class will have all the methods the parent class has, unless overwritten. But the class will be able to access all original functions using super (as shown in the screenshot, the class overwrites init but calls the original init with super.init)

Changelog

Attachment
0
Cyteon

Added a “new game” button to the main menu, which will wipe your save and start a new game (there is a warning popup to confirm or cancel). Also added a bed where you can sleep to progress to the next day. To make this better i also made can_interact return a string, which will be displayed under the crosshair instead of the generic “E to interact”. So now there are labels like “E to pick up”, “E to sleep”, etc.

Attachment
0
Cyteon

Created the computer/terminal system which will be used for system reports, comms, and more base managment stuff.
Currently it has a login page, main menu page, and systems reports page.

Attachment
0
Cyteon

I have been trying a lot to optimize the server and fix some critical bugs, but its just not working. I have improved some bad code but the server keeps crashing with random errors that dont make any sense. So its currently not working but ill try to downgrade to 1.21.10 or 1.21.9 and see if smth works

Changelog

Attachment
0
Cyteon

Modu v3.3.0

Adds:

  • Try/catch blocks to handle errors
  • Bit operations: AND, OR, XOR, NOT, bit shift left and bit shift right
  • Consts (cannot be reassigned)
  • Added short-circuiting to or to not need to run expensive functions if first condition is already true

Changelog

Attachment
0
Cyteon

Implemented a backup battery system: The battery will charge 3%/block while the generator is powered, and discharge 10%/block if not. When the backup battery is being used all lights turn red, and when its empty the lights turn off and doors take longer to open (and more stuff will be implemented later)

Attachment
0
Cyteon

Improved the interaction system and created fuel cans.
Fuel cans can be picked up, and can be used to refuel the generator.
Btw the “e to interact” text wont show when you look at the generator without a fuel can, cause that would otherwise be pretty confusing.

Attachment
0
Cyteon

Implemented a basic small room with lights, and a test object. You can interact with the test object, which is a test for the interactable system. Also gave the player a flashlight

Attachment
0
Cyteon

Created the structure of the game, along with working saving and loading.
Currently the world is just a simple ground but it will become more advanced soon!

Attachment
0
Cyteon

Site overhaul

I am working on overhauling and improving a lot of parts of the site! Currently i have:

  • Created a tour system (inspired by https://tour.gleam.run/).
  • Created my own syntax highlighter for codemirror instead of using the one for rust, so i can support stuff i have but rust dosent
  • Extracted the editor initalization from tour and web ide to a seperate file, to make the code cleaner and have them be consistent
  • Fixed a bug prevent errors from showing in the web ide
  • Written docs for basics, types, control flow and stdlib

Changelog

Attachment
Attachment
Attachment
0
Cyteon

Modu v3.1.0

  • Added simple OOP (with classes as depicted below)
  • Added error()
  • Added type()
  • Added exit()
  • Added os.args()
  • Added i32 and f32 to FFI
  • Added <array>.min(), <array>.max(), <array>.reverse() and <array>.sort()
  • Some bug fixes and polishing

Changelog

Attachment
0
Cyteon

Added back fancy errors to the runtime. They were inititally removed cause i wasnt sure how to implement them, but ended up adding a vec with spans where the index matches instructions. So i can fetch span X to get span for instruction X. Also fixed some minor bugs

Changelog

Attachment
0
Cyteon

Did some polishing for v3 and added a help cmd

Attachment
0
Cyteon

Shipped this project!

Hours: 24.18
Cookies: 🍪 707
Multiplier: 29.23 cookies/hr

Released modu v3!

Cyteon

Implemented:

  • Proper function support in repl via persistent chunks
  • Fixed wasm and updated web to use modu v3
  • Fixed complex assignment (like arr[0][0])

Changelog

Attachment
0
Cyteon

Implemented WAY better FFI. It now dosent require the library to have modu_ffi headers or libs or wtv, and can work with pure ffi libraries. The image demonstrates using raylib in modu via FFI

Changelog

Attachment
0
Cyteon

Implemented assigning on properties and indexes, rn this only supports basic targets, so array[0] will work but array[0][0] or obj.key.key2 wont work

Changelog

Attachment
0
Cyteon

Implemented:

  • New stdlib syntax import "std/<name>"
  • Arrays
  • Objects
  • Continue in loops
  • Time package
  • Math package
  • OS package
  • Crypto package
  • Encoding package
  • HTTP package
  • UUID package
  • FS package
  • in and not in comparators
  • Native functions on types (like .abs())
  • And more!
Attachment
0
Cyteon

Implemented:

  • Infinite loops
  • While loops
  • For loops
  • Break and continue
  • Added some of the built-in conversion functions
  • Fix repl, variable bug and internal function bug
    The image shows the bytecode dump for an infinite loop printing “hi” forever

Changelog

Attachment
0
Cyteon

Modu v3

Cause modu is pretty slow rn, im going to rewrite it to use a bytecode vm instead. Currently i have written a really really simple compiler and vm, that can do some basic stuff. Rn it can define variables and run internal functions.

Changelog

Attachment
0
Cyteon
  • Implemented automatic help messages for some errors, which tries to guess what you meant if you typo/etc
  • Delete “modu server” and remove deprecated syntax for for loops
  • Make modu wasm a npm package instead of putting it right in the website folder

Changelog

  • help messages in evaluator (470d597)
  • change some things (5b94889)
  • some better labels (45402b6)
  • Merge pull request #53 from cyteon/help-notes (2768e99)
  • clean up if statements (ee6e701)
  • remove deprecated part of for loops (16dc262)
  • delete modu server (180235a)
  • make modu wasm a npm package instead of putting it in repo (b8f7c1e)
  • oops (1a2cf93)
Attachment
1

Comments

Anass Zakar
Anass Zakar about 1 month ago

Cool!

Cyteon

Implemented assigning on objects and arrays with indexaccess and propertyaccess

Attachment
0
Cyteon

Shipped this project!

Hours: 66.0
Cookies: 🍪 1652
Multiplier: 28.91 cookies/hr

bunch of big updates

Cyteon

Modu v2.7.0

This is a huge update affecting most parts of the language :O

HTTP:

  • Add custom header support
  • Make body optional in post/put/patch

Strings:

  • String subslicing
  • .trim()
  • .to_lower()
  • .to_upper()
  • .starts_with(s)
  • .ends_with(s)
  • .chars()

OS:

  • .pid()
  • .uid()
  • .gid()
  • .getenv(k)
  • .setenv(k, v)
  • .unsetenv(k)

FS:

  • .exists(p)
  • .mkdir(p)
  • .rmdir(p)
  • .remove(p)

Misc:

  • Added k in v and k not in v comparators
  • Added direct json support so you can decleare vars with let a = { "b": 1 } for example
  • Made a proper AST validator
  • Renamed the file package to fs
  • Fixed input() on the web ide
  • Added sleep(ms)
  • Added better labeling to chumsky stuff, to make error messages more understandable
Attachment
Attachment
Attachment
1

Comments

Gizzy The Slack API Hater
Gizzy The Slack API Hater about 1 month ago

modu moment

Cyteon

Modu v2.6.0

Implemented:

  • Better variable assignment without let, so if a variable alr exists u can change it with var = 5, or +=, -=, *=, /=, %=
  • Implemented while loops
  • Implemented else if branches
Attachment
0
Cyteon

Modu v2.5.0

Primarily a math update, but i also rewrote the entire repl to have way better UX, and also implemented syntax highlighting in the repl.

Math additions:

  • *, /, %, and ** operators to the base language
  • added math.rand
  • added math.sqrt
  • added math.round, math.floor and math.ceil
  • added math.PI and math.E
Attachment
0
Cyteon

Modu v2.4.0

Added:

  • .split(""), .len() and .replace(a, b) functions on strings
  • a.max(b) and a.min(b) on floats and integers
  • .join("") on arrays to join into a string
  • Accessing chars in a string, example: "abc"[1] equals b

In addition, nightly rust is no longer required for installing modu via cargo or contributing to modu

Changelog

Attachment
0
Cyteon

I was originally trying to make modu a compiled language too, but it didnt end well. I tried to do it via embedding code with a simple runtime. it worked but was incredibly bloated.
In addition it would severly limit platforms modu could be built for, as i would have to go through the pain of compiling the runtime for each arch and os, along with modifying modu to include those runtimes.
I have decided to scrap this idea, but the code will remain on the “building” branch.

Changelog

Attachment
0
Cyteon

Added a title with file path and size and added a cursor that can associate bytes with ascii and is now used to move up/down:
If cursor is on top visible row and u move it up u will reduce the offset, and if its at bottom u will increase the offset, aka scroll in file

Attachment
0
Cyteon

Created a really basic hex viewer, no fancy features yet.
On left we have the offset, in middle the hex, and on right the asci that could be parsed

Attachment
0
Cyteon

Implemented:

  • Iterating on arrays in for loops
  • .keys() and .values() functions on objects
  • Properly printing functions
  • .close() on files

And:

  • Changed for loop syntax from n = x..y to n in x..y
  • Made error messages if u try to run an non-existent file
  • Fixed json parsing for arrays
Attachment
0
Cyteon

Added back file i/o and updated the docs to reflect it. Next to do is object and array improvements

Attachment
0
Cyteon

Move some stuff around on the package page

Attachment
1

Comments

aloyak
aloyak 2 months ago

damn packages too? thats cool

Cyteon

Finished redesigning the website, and did some minor bug fixes

Attachment
0
Cyteon

I have been working on a bunch of site improvements

  • I have fixed some issues in docs
  • I have rewrited a lot of the site design to be the new theme
  • I have ported almost the entirety of modu to web using webassembly so the web ide now runs fully in the browser and does not depend on any server. Eventually ill use this to make input() work in the browser, and maybe even the http package!

Changelog

Attachment
0
Cyteon

Changed the color scheme of the site from catppuccin to gruvbox, ill also do this on the main modu site. Next is adding more data to packages, and ability to view past version easier

Changelog

Attachment
0
Cyteon

Fixed a bunch of small bugs/inconsistencies in modu and it’s docs. And finally released modu v2.0.0

Changelog

  • fix a lot of minor example, docs and logic bugs (9bf5ec7)
  • some minor docs and bug fixes, and demostrate that modu is turning complete (9d34b5e)
  • some fixing, and flew being turing complete (5af8614)
  • install cmd and an link to all examples on site (6ef0723)
  • finishing polishes (f8a4c02)
  • done. (efe2ad0)
Attachment
0
Cyteon

Implemented FFI, still same imlementation as before but im looking into making it better. Also implemented the built in cryptography library, and fixed some bugs and examples. Have decided to ship modu 2.0 without file io, and some of the math package missing. But this will be added back in 2.1 or 2.2. As i have implemented everything back, all integration tests pass! HTTP tests dosent work cause httbin is down rn 😭

Changelog

Attachment
0
Cyteon

Implemented:

  • Arrays and accessing with variable[], works with both array[index] and object[“key”]
  • Fancy error messages if rust panics (should never happen though)
  • Importing installed modu packages, ensuring the packages can also import other files they came with
Attachment
1

Comments

aloyak
aloyak 2 months ago

dude i love your project, im also building a lang!

Cyteon

Implemented the http package again, along with the json package. You can already see advantages of the new parser, with the long chained expressions as seen in the bottom of the screenshot. Also implemented objects/json again, and made the functions a little better. Like instead of json.stringify(obj) its obj.to_string()

Attachment
0
Cyteon

Implemented:

  • File imports
  • Internal packages (uuid, time, os, encoding and partially math)
  • AST: modules, property accesses and improving calls, so you can do stuff like abc.abc() or abc()(), etc
Attachment
0
Cyteon

Implemented:

  • Infinite loops and for n = x..y loops, with break statements
  • If statements, now supporting an else branch
Attachment
0
Cyteon

Implemented blocks, functions and returns. And made return error if its outside an block. Blocks will also be used for loops and if-statements

Attachment
0
Cyteon

Reimplemented math with the new parser

Attachment
0
Cyteon

Implemented more types and an functions system. Also added one internal function for print

Attachment
0
Cyteon

Because the parser for modu is kinda shit, i have begun the rewrite. Currently it can parse “let x = 1;” or any other int or identifier. But i also added really fancy error messages.

Attachment
1

Comments

Gizzy The Slack API Hater

absolute modu

Cyteon

Shipped this project!

Hours: 9.79
Cookies: 🍪 65
Multiplier: 6.64 cookies/hr

This ship is for modu v1.1.0 - v1.3.0.
Contains a lot of improvements, bug fixes and some new packages

Cyteon

So i was originally just gonna implement some package improvements, but i found so much wrong in the language. I ended up:

  • Add examples for all math functions, and add all to docs
  • Add UUIDv7 to UUID package
  • Add some missing things to the vscode syntax highlighting
  • Properly implement arrays in the AST, instead of an cursed package someone made an PR for a while ago
  • Added MD5 to cryptography package
  • Deprecated time.now and added time.now_unix, time.now_utc, time.now_local, time.to_rfc_2822 and time.to_utc_date_time
  • Fixed context not being passed to basically every function in the math package, which was essentially bricking it
  • Removed the “line” property from a lot of AST elements that didnt need it
  • Made the lexer include string data, int data, float data and bool data, instead of me doing lexer.slice()… everywhere
  • Fixed an bug on the docs where the sidebar was scuffed
Attachment
0
Cyteon

Implemented encoding and cryptography,

Encoding:

  • Base64
  • Base16

Cryptography:

  • SHA2-256
  • SHA2-512
  • BLAKE3
  • Bcrypt
  • Argon2
  • Scrypt
Attachment
0
Cyteon

Implemented for loops, and infinite loops, along with break to stop infinite loops and to prematurely exit for loops.

Infinite loops are as easy as

loop {
    print("kaboom");
}

And for loops are as easy as

for n = 1...5 {
    print(n);
}
Attachment
0
Cyteon

Shipped this project!

Hours: 7.85
Cookies: 🍪 189
Multiplier: 24.04 cookies/hr

Updated to modu 1.0.0
Primarily added an http client, and way better ffi support.
Also did a bunch of bugfixing and standardizing some stuff

Cyteon

Just did a bunch of bug fixes and some QoL stuff (support numbers like 1_000_000, make syntax highlighting support \n \t etc, etc). Released Modu v1.0.0!!!

Attachment
1

Comments

Gizzy The Slack API Hater

yipeee

Cyteon

Overhauled FFI to be way better

  • Cleaner support in modu
  • Supports strings, integers, floats, ints and null arguments (only strings before)
  • Supports string, integers, floats, ints and null returns (only strings before)

Old:

import "ffi" as ffi;

ffi.call(path, "hello_world");
print(ffi.call(path, "one"));
print(ffi.call(path, "add", 5, 2));
print(ffi.call(path, "string"));
ffi.call(path, "print", "test");

New:

import "ffi" as ffi;
let lib = ffi.load(path);

lib.hello_world();
print(lib.one());
print(lib.add(2, 5));
print(lib.string());
lib.print("test");
Attachment
1

Comments

Gizzy The Slack API Hater

figma balls

Cyteon
  • Fixed some bugs in importing files
  • Fixed packages not being able to import files from the package itself
  • Made “modu run” work without an file argument, and will run main.modu if it exists
Attachment
0
Cyteon
  • Added post requests to http client, and wrote docs for it
  • Fixed some minor parsing bugs, breaking some function nesting stuff
  • Standardized all examples and docs to use semicolons
  • Added new and better testing
Attachment
0
Cyteon

Add an built-in basic http client, i will add more functions to it soon

Attachment
0
Cyteon

Did some cleanup on the website, and did some minor design changes

Attachment
0
Cyteon

Set up a new instance of modu packages, and fixed the cli to use the new api.
Also cleaned up a lot of my wack code.
Released version v0.6.2

Attachment
0
Cyteon

I have decided to revive this old ass project! Started by fixing a couple of bugs, updating packages, and releasing that as v0.6.1

Attachment
1

Comments

tathya is aweomse
tathya is aweomse 3 months ago

MODUUUUUUUUUUUUU YESS CYTEON I NEED THIS THANK YOUUUUUU

Cyteon

Shipped this project!

Hours: 11.22
Cookies: 🍪 224
Multiplier: 19.91 cookies/hr

Second ship! Implemented a lot of important stuff like sending chunks as you move, fixed chatting, updated to 1.21.11, and more!

Cyteon

Made an proper hompage, along with basic docs

Attachment
0
Cyteon

Implemented:

  • Sending chunk center and chunks to player as they move
  • Improve concurrency by separating the tcp writer and reader
  • Procedural generation of regions if get_region() cant find the region
  • Save and unload all regions from memory if all players leave, as they arent needed (i will add unloading regions as players move later on)

And:

  • Made further ram optimizations
  • Made the code a bit cleaner
Attachment
0
Cyteon
  • Updated registries and packets to 1.21.11
  • Implemented handling player movement and input (we have to calculate movement on server-side)
  • Implemented player rotation
  • Dont let players join if server is full
  • Show actual player count when pinging server instead of placeholder saying 0
Attachment
0
Cyteon

Added the ability to have multiple monitor types. And implemented (in addition to http(s) monitors): TCP, UDP and ping

Attachment
0
Cyteon

Make some small QoL fixes:

  • Fixed monitors getting unselected when saving due to a bug
  • Made heartbeats on monitors fill full width
  • On heartbeat container indicate which side is now
Attachment
0
Cyteon
  • Implemented sending player skins
  • Implemented player remove packet
  • Renamed the property player.name to player.username and all refrences
Attachment
0
Cyteon

Make a lot of stuff sync to reduce async overhead, cause my code had a lot of stuff that didnt need to be async. Also fixed registry order as that was unpredictable ending in chat getting messed up. Screenshot shows an example of change in one packet. Also includes some work on trying to optimize the server.

Attachment
0
Cyteon

Shipped this project!

Hours: 17.68
Cookies: 🍪 348
Multiplier: 19.66 cookies/hr

Made some basic stuff work. Tho its still kinda broken cause the mc api keeps changing things up?? So it works on dev and not prod. But its not anything breaking, tho your ping might mess up packet order its fine just reconnect again

Cyteon

Implemented chatting. It was a pain cause the docs are kinda lacking so i just had to try some random values for the chat type field until it worked loll.

Attachment
1

Comments

Hoshino Takanashi
Hoshino Takanashi 3 months ago

peak project

Cyteon

Implemented the packet for sending player info updates, only implemented adding player, and making a player listed in the tablist. But easy to expand with just adding to the enum.

Attachment
1

Comments

aneezakiran07
aneezakiran07 3 months ago

this project is so cool!!!

Cyteon

Made a log module that works as a drop-in replacement for all the old logging code, but also saves the logs to the logs/ folder. Also implemented breaking and placing blocks, but placing blocks is currently using stone as an placeholder. Breaking and placing blocks also modifies the chunks on the server and are saved, and will persist if you restart the server.

Attachment
Attachment
Attachment
Attachment
2

Comments

Cheetah
Cheetah 4 months ago

Awesome to see you make progress so quickly!

Cyteon
Cyteon 4 months ago

ty :D

Cyteon

Create a simple site as the demo with a video and instructions on how to connect.
Site is on the “site” branch

Attachment
0
Cyteon

For this devlog i did:

  • Add view and simulation distance to config
  • Generate more regions around 0,0, now making 4 regions
  • Only send chunks that are within the distance client accepts (view distance * 2 + 7), so it needs to send from 4 different regions if you are on 0,0
  • Load block data from an json file so i can access block ids with “BLOCKS.get(“minecraft:grass_block”).unwrap().default”
  • Fix sending blocks
Attachment
2

Comments

secret x
secret x 4 months ago

how did you done this it hard

Cyteon
Cyteon 4 months ago

it was a pain so it was mostly trial and error

Cyteon

So this is sadly a huge devlog, but i spent so long debugging the data packets :(

This devlog adds the following

  • Generating chunks, trying to match minecraft’s palette format (not very good at it but)
  • Saving and loading chunks (with zlib compression, an 32x32 chunk region with only air is 2.8KiB)
  • Sending chunk and light data to client (no light data for now, just sending zeroes)
    Making the chunk packets work was an absolute pain as the packet documentation is kinda lacking on that front, but i ended up figuring it out after a long time.

For the next devlog im going to make sending actual blocks and just not air, which shouldnt be too hard.

Attachment
2

Comments

Cheetah
Cheetah 4 months ago

Wow this is a really cool project !

Cyteon
Cyteon 4 months ago

Thanks :D

Cyteon

Added the initial setup for saving, along with implementing player saving
Also added some of the base for chunk/world stuff

Attachment
0
Cyteon

Upgrade packets to protocol 773 (1.21.10), and temporarily remove packet 0x44 (player_info_update).
Added sending server type to client, as shown in top right.
Also implemented sending the game event indicating client should start waiting to get chunk data

Attachment
1

Comments

Gizzy The Slack API Hater

absolute potatoima