davidjcobb / reachvarianteditor Goto Github PK
View Code? Open in Web Editor NEWA tool for editing Halo: Reach game variants.
A tool for editing Halo: Reach game variants.
hello im trying to help contribute to the project but whenever run debug i get error QtRunWork error
There's a new 'infinity' gametype icon that 343 just added in the previous update for their pre-game mode used in the Custom Games Browser. It's not saved as a local or recent gametype (at least in the usual locations) so I wasn't able to grab the .bin to determine the integer index.
Icon can be found here: ui\chud\bitmaps\variant_items\gametypes.bitmap
It might not be in the order though. Don't want to mix them up.
In some of my testing long ago this action seemed to output the object a player is looking at when their crosshair turns red. It seemed to only work for the host during my testing.
There are many fancy symbols that you can use in strings in a modded gametype. You might want to include these instructions in the documentation. This will allow script authors to take advantage of them.
Here are the steps to get all these symbols:
I'm pretty sure this is actually "high" priority - meaning if this weapon and a regular one are next to each other, holding the action button will pick up the one marked high priority. This is used for flags, oddballs, etc.
I made some unique modded game-types that you might want to test on your compiler.
The game-types are in the attached zip file along with important information on how to use them.
gametypes.zip
After reviewing your simple-opcodes.js file, I noticed some actions are named unknown. Kornman has updated the megalo db.xml file since the old ksoft release. It has new descriptions on some action arguments and names that were previously unknown. You might want to take a look at it so you don't have to do vigorous testing to figure out what some things do. https://github.com/KornnerStudios/KSoft.Blam/blob/master/KSoft.Blam/Games/HaloReach/Megalo/Proto/HaloReach_MegaloDb_Xbox.xml#L21
while playing with some absurd bits of code i came across a random exception
if you try and nest a player and their biped in an if
var reference it will compile that player to player[0]
eg. if global.object[1].player[3].biped == global.object[1].player[3].biped then
will compile to if global.object[1].player[0].biped == global.object[1].player[0].biped then
RVT is fully capable of decompiling the correct player[] though as i was able to manually save a gamemode with the first bit of code applied and RVT would read it correctly (git wouldn't let me upload the .bin so heres the link instead: https://cdn.discordapp.com/attachments/831007456749551628/855449418052665424/HR_Slayer_fix.bin)
theres also a couple of other interesting things i've run into and since im here why not share them?
RVT doesn't seem to have a character limit for team name strings, so saving a gamemode with an extra large team name string will cause the gamemode to become corrupt and screw up a fair amount of data, oh and also if you try and add another label past the limit in some modes it will cause RVT to crash. (happens with the mode i have linked)
not really an RVT bug theres one that will cause mcc to be unable to read a gamemode, i can't quite remember what it is but i think it may be related to having more than one of the exact same string
anyhow thats all. add me back on discord :)
Is it currently possible to set the physics of an item using megalo script? I am trying to spawn in hill markers, 4 each on either side of the player and I need the physics to be set to normal. The reason I am using hill markers is because they are invisible during gameplay. The idea is to prevent fly hacking by reading the speed of 4 items placed on all sides of the player (front, back, left, right) and if the speed of all 4 items is above a certain threshold, the player is airborne. It is 4 items because you can get a false positive if the player is standing on a ledge and the item falls off said ledge. If they are airborne for too long, they are flying and I can handle them (e.g. kill them, take their weapons etc). In order for it to be practical, I need the objects not to be visible. In writing this, I realize I can set the scale of an item so small it is not visible, but nonetheless it might be useful in the future in case I need to modify item physics at all.
Is it possible to get the angle the player is looking relative to another player? What I wish to accomplish with this is to detect and handle the use of aimbots. According to the wiki, the two function calls I saw for this that I thought I might use were get_orientation and get_crosshair_target. If I used get_crosshair_target then it would trigger the detection if they killed the player but their crosshair was not red, so I would rather it be based on the angle that the player is facing/looking. In reading get_orientation, I can see that it always indicates which "face" is facing upward, but if I called that function on a player biped, it would always return the same result (top is up) unless the player biped was dead and I was checking all bipeds in the game.
Is it possible to detect and react to awarded medals? I absolutely hate yoinkers and I would like to be able to subtract score from those players and add score to the person performing the assassination instead if they yoink an assassination and possibly do other things to them also. The tags I saw were assisted_kill_of (to detect the assist) and the ability to actually send the incident "yoink". The first function would detect ALL assists, which is not what I want and the second one simply is able to send the yoink medal.
Is there any other way to detect the death of a spartan biped other than using the on object death event? The idea is that I want to create an in game "menu" that spawns in spartans with various weapons and on their death, will change some aspect of the game (such as setting player scale or applying traits) based on the weapon they were wielding. It would be very useful to change some of the settings in game without having to return to the main menu and setup the game again. If it will be too complex, I will probably just end up spawning objects in forge with shapes that you can stand in to select various options.
Is it possible to detect a specific gamertag? The idea is to initially only allow me to do certain things from within the game variant, such as the menu thing until I can get things tweaked correctly. I will create another issue about the following, but basically if you type in the script "if current_player == "DutifulLake" then the entire program will crash if you attempt to compile the code. Detecting specific gamertags might be useful in a few other situations too, such as using the "menu" feature to apply traits to a specific player whose gamertag matches a specific value (to apply traits/do stuff to players who quit and rejoin).
Is it possible to detect who the host of a match is? Again, the "menu" feature should only allow the host of a match to change settings. It would be pure chaos if everyone in game could just change settings willy nilly. Detecting the host would be extremely useful in various applications such as this.
At the end of it all, I wish to be able to create a game variant that can handle speed hacks, fly hacks, and aimbots, handle afk players, and allows the host to change settings in game. Currently, I have a game variant that is able to detect speed hacks and kills the player biped if they go too fast, and will also detect afk players and set their scale and traits to make them invisible to other players. Flying is what I will be working on next, and if I can reduce false positives, I might possibly incorporate an assassination minigame of sorts where I teleport all players to a central location with the hacker in the middle for somebody to assassinate them until they rage quit.
I was setting up an "oddball count" option and created an "all" option with value 511. This seems to be the maximum possible game option value. But MCC did not load the script. 500 works, 501 does not.
From my understanding the compiler checks objects in the script to a predefined list to grab it's tag location.
Is there any way for users to add on to this list or place other types of items that are not already predefined such as street_cone or even ff_plat_2x1_flat?
If not I wouldn't getting a list together of some objects and their tags if I could provide those to be added.
So if this bool was enabled and you attached an object to an upside down object with z="10" it would attach correctly regardless of the rotation. If it was false the attached object would be above the warthog.
The current documentation only lists a portion of the sounds actually available in the list of sounds in the !snd tag. I have also been browsing the fsb, though not all of those sounds are likely accessible via Megalo. I was wondering if it were at all possible to access sounds, such as the "better_luck_next_time" and similar ones that are not listed in the current documentation. There are a few unused sounds that are included in the !snd tag of every .map file, many of which would be fun to use in a modified game type.
Just an idea, maybe not worth the effort. I don't use C++ so wouldn't be much help.
Currently, if I want to make a gametype open source, I must host the .bin
file as well as the .lua
script. It would be good if we could edit the gametype settings (e.g. traits, etc) in a serializable text format instead of the UI. Then, these could be hosted on and read on github.
Could anyone point to API reference for how to control specific forge pieces in a script? I.e. set position of a wall, etc, if possible.
As mentioned in my previous issue, when you try to match current_player or a similar variable to a piece of text in an if statement (e.g. if current_player == "DutifulLake") then the program will crash if you try to compile the code like that.
Not so much of an issue but something I figured would be worth noting in case anyone else tries it. It appears that if teams are enabled on the variant's general settings then you cannot force players to a different team.
ie:
for each player do
if current_player.team != team[4] then
current_player.team = team[4]
end
end
I ran across this limitation when I was adding in scripts to set up and balance a multi-team gamemode (since Reach's custom game browser on MCC does not have options for multiple teams at this time).
Enabling team changing also has no effect on this.
When using a custom icon with a round card title (ex: invasion shows spartan or elite icon) in a FFA variant, it seems to overlap with the normal blue round card. This will cause an undesirable weird round card appearance. If this is done in a team mode the blue card seems to not be there. I know its probably unlikely, but is there any way to stop this in FFA modes?
I am trying to do a game type that can generate a random map each time the game is loaded by using several "origin" points of reference. I would like to be able to pass a random number as an argument for the place_at_me() parameter for either x, y, or z. The formula I have for that that might work other than using rand(X) is "X = (a * X + c) % m" where a is the multiplier, c is the increment, and m is the modulus. Functionally speaking, I should be able to return a random number using that formula and show it as a message or something, but I would like to be able to pass it as an argument to a function. Using alias X *= a, alias X+= c, and alias X %= m gives an error saying I cannot assign to a constant variable, and global.number[0] *=a, global.number[0] += c, and global.number[0] %= m when a, b and c have been declared as aliases storing respective constant integer values succeeds, but global.number[0] cannot be passed as an argument to the function because it gives an error that it is of type Vector3. Is there any practical way to generate the random number to allow me to, for example, place an object in front of a vehicle with a random angle to create an ever changing game type where a race track always generates differently? Basically I want to place a 1x1 block in front of a mongoose and have the next block placed in front of that one, but at a slightly random angle and slope that could make the track go up, down, left, or right depending on the random number selected. Hopefully this all makes sense.
If you attempt to display a player name in a hud widget the player variable network state must be High Priority or non-hosts cannot see the player name. I believe this applies to player names in waypoints also but I have not tested that.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.