Jump to content

Megadreams

Leaders
  • Content count

    36
  • Joined

  • Last visited

  • Days Won

    38

Everything posted by Megadreams

  1. The SCM Interpreter Filled with excitement I am here to announce a project that I have been working on together with @GTX named Sphene. In this development blog I will be talking about SCM, what Sphene has to do with it, our current development and what we plan for the future. A revelation video will accompany this development blog a few weeks from now. Before I tell you what Sphene is I first need to give you some background on what SCM is as this plays an important factor in this project. I will not keep you waiting so let's get starting! What is SCM? Many of you may have heard, seen or even tampered with a well known file "main.scm" in your GTA: San Andreas installation. This file (notice the '.scm' extension) contains all the mission scripts that are available in singleplayer. Essentially the whole story-line and its side-missions are stored in here. The reality for side-missions is a bit more complicated but for the sake of this explanation we'll keep that aside as to keep it simple. SCM is the name of the language this file has been written in by Rockstar Games. Since it was made by them and the file is compiled (converted into a format that can be easily read by the game but not easily by a human) we unfortunately do not know what the original code looked like. Modders all across the world use a tool named SannyBuilder to write SCM themselves but this is very unlikely to look anywhere near the original format created by Rockstar Games. But, this does not matter much to us as it still compiles into the same format readable by the game. Essentially a compiled SCM file contains a big variety of "instructions" which tell the game what to do. For example there is an instruction that makes the game spawn a car on specific coordinates, tell a ped to drive or that tells the game to jump to a different location in the script and execute the instructions on this new position. For those wanting more in-depth information I highly recommend to read the SCM section in the "GTA SA modding book" by fastman92 which can be found here. So, what does Sphene have to do with this? Sphene is a SCM Interpreter, as in, it can run files created in the SCM language and which are compiled, including the "main.scm" file from the singleplayer game. This means that we can recreate all of singleplayer within Multi Theft Auto and further extend it with a big variety of features and improvements. Sounds great, doesn't it? It sounds easier than it is in reality however. The reality is that, as explained in the SCM section, these scripts tell the game what steps to perform, but the game still has to perform them. What does this mean? Well, it means we have to implement each instruction ourselves and make sure we stick as close to the actual game while doing so. Some instructions are fairly easy and quick to implement while others are a lot more complicated. Why? Because on many instructions the game doesn't perform just a single action. Let us take the instruction (or as we commonly refer to an instruction: opcode) to make a car drive as an example: 0704: car $car_pointer drive_to 1250 -75.5 13.25 Taken from 'SASCM.ini' included in SannyBuilder 3. The identifier for this instruction is '0704', through this Sphene knows this is the car_drive_to instruction and how many parameters (information given together with this instruction, in this case what car we want to get driving and to which location) to expect. Seems easy enough, except that there is no simple MTA function to get a car driving to a specific location. No, instead we have to write our own logic to make this possible. This can become very complex very quickly, especially as the exact functionality of many instructions isn't even known. Reverse engineering Because of this complexity and the need to make Sphene work as close to the actual game as possible we have started to reverse engineer GTA SA. Reverse engineering means that we try to make sense of the compiled code of the actual game and try to turn it into human readable code. This is easier said than done though, it's a lot more complex than reverse engineering a SCM file is. Luckily the big modding community (including MTA devs/contributors) have managed to reverse engineer big chunks of the game already, we just have to fill in the gaps that hasn't been reverse engineered yet but that contains chunks of code we require to make Sphene as accurate as possible. Contributing to Multi Theft Auto Using this knowledge and to make development easier for us (and simultaneously contributing to the MTA community as a whole) we have started contributing to the Multi Theft Auto codebase. There already is a work in progress pull request (a request for code to be added to MTA) to make it possible for players to drive client-side vehicles, damage them and other improvements. This is not only useful for us but many other servers as well. Okay, what is the purpose then? Why don't we just play singleplayer? Good question. Sphene will introduce many new options to make the game behave differently. This can be a setting to have much smarter ped AI's (making the game more difficult) to other settings to enhance the gameplay or raise its difficulty. We're not just interpreting the SCM but can actively improve it. There surely must be more to it? Oh, you bet. Did you ever want to play the storyline together with a friend (or multiple friends)? We are introducing Co-Op which allows exactly this. Naturally this version of the game will contain small changes to accommodate for the existence of multiple players and will be a lot harder. Although extra settings can raise that difficulty even more (1 HP limit anyone?). (Click to enlarge) This is a concept design of the Co-Op lobby designed by @AnarchY. Anything else? Did I forget to mention that we are also planning support for GTA III and GTA Vice City (data files will have to be provided by yourself in order to load these in, to make sure you do own these games legitimately) into Sphene? I did? Well, I am happy to announce that we have already start adding basic support for these games and are hoping to make them available not long after we complete the support for GTA: San Andreas. The difficulty of implementing support for these games is of course greater as we have to import their full maps, recreate their controls, etc... That's nice, but how is the current development going? I am glad that you are asking. Sphene started out as a personal experiment but has quickly grown into a big and stable project. We started with implementing support for basic instructions and basic game logic that allowed us to fully get a tiny, custom, SCM file with a small mission working. This mission consisted of the following steps: Step in the nearly exploding car marked by the arrow. Drive the car to a checkpoint without further damaging it. Get out of the car and kill the NPC with the arrow above its head. Mission passed Very simple, but great for initially testing the interpreter. Screenshots were taken from an internal video at the time of said development. A small debug panel (improved in later stages) is seen on the right showing the instructions being executed by the interpreter. (Click to enlarge) This worked great, so now it was time to start implementing the instructions for the actual game. This proved to be challenging very quickly due to the high amount of instructions the game calls before even visually showing anything to you. But, eventually we did implement the instructions and proper text drawing support for the well known start of the game. That was a great start. Although it didn't go as well as planned as this text kept disappearing and re-appearing in a loop. Great. Now I had to figure out why this was the case. In order words, I had to start reverse engineering all the instructions Sphene was going through and manually going through the compiled SCM file instruction by instruction to make sure Sphene was interpreting everything correctly. Eventually I managed to find the issue and resolved it. A larger version of the debug panel was then being developed (for more in-depth information) and later on improved multiple times. It didn't take too long before everything was implemented to allow us to get to the famous "Grove Street -Home." sequence. Complete with audio! (Click to enlarge) We then proceeded to improve performance further and mostly do bug fixing. Currently the interpreter can handle instructions up to the sequence in the first mission where you need to get on a bike after a Ballas drive-by occurs. Although due to the amount and type of instructions implemented we did already make it possible for Sphene to run the Kickstart and Bloodring (partially) minigames as well. This truly shows that when we implement more and more instructions a lot more of the game will automatically start becoming available. (Click to enlarge) Future development We are of course still implementing a lot of instructions, improving our overall code (fixing bugs and improving performance), adding more game logic, etc. Not only that, we actually have attempted (and will continue working on it in the future) to implement cutscenes. This did not go well at first as it caused a lot of crashes, misaligned objects, etc. But we got it reasonably working, aside from the NPC's that are not animated whatsoever and float weirdly in the air. We hope to get cutscenes up and running soon. The lobby (for Co-Op) will also be implemented soon and similarly we will start develop on the Co-Op portion of Sphene. After we launch a first version (with GTA: San Andreas support) we will continue development on the GTA: Vice City and GTA III portions. We also plan (and slowly started) to develop a decompiler and compiler for SCM straight into Sphene and build our own language around it that compiles to SCM. This will allow for user created storyline's, missions, etc that also work in singleplayer if you so desire. The reason we'll be building our own language rather than using the SannyBuilder syntax is simply the fact that there is no standard SCM coding syntax out there and the SannyBuilder one is often too complex and not intuitive for most people. We want our implementation of it to be closer to what people expect from modern programming languages. (Click to enlarge) That's it for this development blog. Please leave any questions and/or remarks in the comments and we'll have a new development blog coming for you soon! Sincerely, Megadreams
  2. Megadreams

    It's time to start training!

    (... because we know our members have to train) (Server continues development and will improve heavily over a short period of time.) Hey there, I am thrilled to announce that Project Beast now has an up and running training server featuring various of different maps from: DM, DD, Shooter, Race, Fun and Hunter. While we are still heavily developing Zircon we will keep this server in active development which means that over time new functionality will be added and ultimately for the server to be integrated into Zircon itself. But for now let's talk about how this training server came into place, what it offers and what is planned for the future. First of all, why did we decide to create a training server? As you may know we actively play in tournaments and clanwars and wanted our members to have a place to properly train within our own community so that we can accommodate their needs as best as possible. Similarly we also want to offer a decent place to train for tournaments we host ourselves like the Unleash the Beasts tournament (which finally can start now). The training server has been built on top of an old multi-gamemode of GTX and myself that was named "Sapphire" (hence why it appears as Sapphire in the server list), it has been fully reworked into a stable training server. Throughout this time we also applied a lot of fixes and performance upgrades and will continue to do so. As you may imagine this wasn't an easy task. When entering the server you get presented with a map list (f2 brings it back up) with various of different tabs making it easy to filter maps by type or even special occasions like clanwars and the Unleash the Beast tournament. A search bar is also in place to quickly search for the exact map you want. Unfortunately we only have around 730 maps between the various of categories uploaded right now but will continue to upload more maps over time. As the web dashboard is still in development we unfortunately cannot yet offer a map uploader on our website but will do so through a Discord bot as soon as possible (which may even be more convenient for all of you). The server has a pretty decent but tiny UI right now but this will be heavily extended upon later on by including a NOS bar, health bar, time played, etc... but this was not a necessity yet for its public launch. We also offer some other basic functionality like a carhide/carfade (f3) and warps which can be saved by using "x" and loaded back in by pressing "n". We are however working on a rewind system and spawnpoint selection so stay in touch for that! Toptimes will also be added fairly soon to allow for some competitive training inside the server. Together with various of statistics (like kills - together with a UI - for shooter/dd/hunter) once we have established an account system. Currently we are also working on a new, customized scoreboard but until then we'll keep on using the default MTA scoreboard with some alterations which will work just fine for now. Enough reading for now, naturally all of you want to know how to get on this brand-new training server of ours and I am here to tell you exactly that. You can either simply search for "Project Beast" in MTA or connect through mtasa://51.15.13.233:22013. Have fun training! Sincerely, Project Beast administration and development teams
  3. Please report any issues to either @GTX or @Megadreams. The website has been transferred to a new server.

  4. Are you ready to unleash the beast inside of you? Hey there, I am very thrilled to announce Unleash the Beasts, The official shooter tournament by Project Beast. In this tournament teams of 5 players (3 player, 2 reserve) will be participating against each other on various shooter maps (mixed between jump enabled and no-jump maps). In the first stage, known as the qualification stage, 5 maps of each category (10 maps total) are played and pre-selected by the organization team which consists of @Megadreams (lead organizer), @VISHAL, @VarieN, @MunK7 and @Mazen. The next stages, known as the knockout stages, will have 4 rounds each (5 in case of a tie) and will be preceded by a vote between all the teams for the maps to be used. The finals will, just like the qualification round, consist out of the 10 rounds (5 maps per category) that are pre-selected by the organization team. The players of the winning team (including the reserves) will win a €15 Steam gift card each. Isn't that nice? So, are you up for the challenge and assembled a team? Then head to the registration topic here and register for the tournament now! Sincerely, The Project Beast team
  5. THIS WAS A 1 APRIL JOKE. READ MY FULL STATEMENT HERE. Hey there, As most of you know I joined Project Beast as one of the new developers a while ago to help its grow and further develop the server all of you have been waiting on for so long. So? What is this post for then? Well, let us say that I have noticed some things during my stay here and well... I am taking over. Yes. You are reading it correctly, I am taking Project Beast over from @VISHAL @Djdidier and @GTX. Not that they like it but it's in the best interest of this clan that I do, after all, that is why I am here. So, what are the things I noticed then? Let's start with how lazy GTX is, he doesn't do anything but sit on his butt all day long! He probably thinks staring at a piece of code counts as coding, but no GTX, it doesn't. Perhaps we should add this piece of code to the server just for you: function onJoin() if (getPlayerSerial(source) == serialGTX) then -- Serial stored elsewhere, don't want it to be public. kickPlayer(source, "Come back when you know how to WRITE code. Not just READ it.") end end addEventHandler("onPlayerJoin", getRootElement(), onJoin) Perhaps then you will understand it. But, enough about GTX, let us move on to Vishal, all you're really doing in this clan is causing trouble on clan-wars. We should change your title to "Troublemaker", it'll fit you much better. Then, Didier, I could just remove you and nobody would even notice, where are you? Haven't seen you in ages. This is not the best part however. Not only will the clan heavily improve from now on during my leadership (naturally) but we are also renaming the clan. Why? Because we want higher standards than there are right now. Project Beast just doesn't cut it, since we do need members we'll keep all of our current clan members in, for now. We'll do a lot of restructuring however. Anyhow, from now on we shall be known as: Ultimate AIR Gamers Sounds amazing, doesn't it? Well, you'll definitely love our new logo then: I am excited to bring this clan to a whole new level from now on and hope all of you are as well. Let's make an amazing future together as Ultimate AIR Gamers! Sincerely, Megadreams Your new leader, your new master.
  6. Megadreams

    [1 april joke] I am taking over + new name

    As many of you noticed (honestly, we didn't even try to make it seem all too real, that wasn't our plan anyhow) this was a 1 april joke. The name of the clan remains Project Beast and remains in the capable hands of @VISHAL @Djdidier and @GTX who are all doing an amazing job (even if it's not always visible to the whole community, I can assure you they do in the background, without them Project Beast would be nothing). Everything I wrote in the first post I naturally did not mean and the fight GTX and I had in the posts below was staged as well, some of the things he wrote I came up with. We are working very hard on developing the server for Project Beast which I know has been taking a long time. The reason for this is that we don't want to yet be another clan with yet another mgm server. We want to bring you a whole new experience and truly innovate, we want to leave a nice footprint in the history of MTA and create a base for the future of the racing (DD/DM/Shooter/Hunter whatever) community. And innovating we are, I can tell you that. (Also, personally I want to help the racing community unite again as it was in the past. MTA itself is growing heavily in player count but the racing community is rapidly losing players. One of these is a lack of innovating and another is the increased tension between clans. Part of why I am here at Project Beast, and therefore returned to MTA, is to help resolve this.) I hope you are as excited about the future as I am!
  7. Megadreams

    [1 april joke] I am taking over + new name

    Line count however does not tell much. It is about the quality of this code, you can easily write a lot of horrible code but does it really work in the end? Is it really that efficient? And the lines of code I wrote were on the hardest part of the whole project, the rooms, map loading (with heavy compression!) and the gamemodes.
  8. Megadreams

    [1 april joke] I am taking over + new name

    It wasn't laziness, there were many other factors. Don't forget I did write a lot of code during that time, you were even there to witness it! I took over.
  9. Megadreams

    [1 april joke] I am taking over + new name

    Under that logic Project Beast was in an unfortunate event with you which I am now resolving.
  10. Megadreams

    [1 april joke] I am taking over + new name

    UAG was due to unfortunate events, but even then development was going faster than it is with you.
  11. Megadreams

    [1 april joke] I am taking over + new name

    Now that I am in control of development instead of GTX it'll be here a lot sooner than it otherwise would.
  12. Megadreams

    [1 april joke] I am taking over + new name

    Oh really? The dashboard that had to be finished months ago? Haven't seen it in action yet. Then, Onyx, seems just like a bunch of code taken from the internet and combined into one, what about working on the server instead?
  13. Megadreams

    [1 april joke] I am taking over + new name

    UAG|iBoSs got to get the tag right.
  14. Megadreams

    Anti-Bounce 3, your opinion

    Dear MTA players and server owners, Thank you for participating in my survey in regards of Anti-Bounce 3. It has taught me a lot about why people like and don't like Anti-Bounce. This, together with the other important questions you answered will definitely be used to make Anti-Bounce 3 the best version yet. Anyhow, based on the results I will release a version 2.6.0 of Anti-Bounce already containing recording tools that allow you to record a bounce that happened but went undetected and glitches that you expect to be caused by Anti-Bounce. This will help me a lot in investigating the reason behind these and solving them for Anti-Bounce 3 and the versions afterwards. For server owners it is very clear that the customization possibilities are still heavily wanted and therefore they'll be kept in, this version will automatically convert your old 'config.xml' file into the new format and will have backwards compatibility for all exported functions and events (although some of them will be marked as deprecated, so update them eventually). Development of Anti-Bounce version 2.6.0 and Anti-Bounce 3 can be followed on Github. Sincerely, Megadreams
  15. Hey there everyone! Due to popular demand I am going to continue develop Anti-Bounce 3 but I want to make sure to make it as best a possible. For this reason I have assembled a Google Form with some questions I would like all of you to answer. By doing so I can make sure that Anti-Bounce 3 fulfills everyone's needs. Click here to fill in the form Sincerely, Megadreams
  16. Due to popular demand I'm announcing that I will start working on Anti-Bounce v3 again which will have a completely rewritten and much more accurate detection system.

  17. Megadreams

    How well are u known

    No idea who you are, sorry. 1/10
  18. Megadreams

    Devblog #1: Introducing Onyx

    One issue though, you never call that method again so it wouldn't go through the loop again. There are much better solutions out there anyhow.
  19. Megadreams

    Devblog #1: Introducing Onyx

    Well, you can disable the check which technically would allow it. Or you could simply use a coroutine or a timer.
  20. Megadreams

    How well are u known

    7/10 Seen and talked to quite some times.
  21. Megadreams

    How well are u known

    5000/10 Nuff said
  22. Megadreams

    How well are u known

    7/10 Finally someone I know! ^^
  23. Megadreams

    How well are u known

    1/10 Unfortunately I don't know you.
×