I’ve been a programmer for 14 years now, so I can’t help but feel like the scripting is incredibly limiting. So I’m going to give some of my thoughts.
First of all, it would be really nice to be able to make prefab nodes, lay out a node graph, specify inputs and outputs as well as variables, then you can use that node in your scripts. This would save a lot of effort for repetitive tasks.
We can’t control the timer on the interactive buttons. It would be nice to be able to remove the timer, or make it longer. Maybe even being able to change the UI would be nice (so it could either be the radial progress bar or a countdown).
It would also be convenient if you could make it so that buttons are only accessible while standing in front of the button. I wanted to create a door that opens automatically to walk in, but then I wanted to make it so when you are on the other side, you can turn around and lock the door. But the problem is that the switch is accessible from both sides. It would be nice if we could make it so that the switch is only accessible when you are looking at a specific spot, or direction.
There is currently no way to get input from players. Being able to check if a player is pressing a button or registering events for buttons would make it possible to do all kinds of things that currently aren’t possible.
On that note, it would also be nice to have custom cameras that we could use to create custom spectator modes. We’d be able to move them around using the input from the players, or have positions throughout the map that you could teleport the player camera to.
It is incredibly frustrating that we can’t change the scaling of dynamic objects. There are certain door sizes that I would like that just aren’t possible. It seems like an arbitrary limitation, and it seems weird that it was a design decision. I can understand if it’s some weird limitation of the engine, but I it’s annoying all the same.
Now I want to talk about the interface and controls.
It’s really frustrating wanting to place an object in a specific place, but having the object spawn in front of you, but very far away from where you’re trying to place it. It would be really nice to be able to lock an object’s position relative to the camera so that you can move objects around by moving the camera (kinda like how we moved objects in Halo 3). It’s annoying trying to mess around with the gizmo all the time. I like the gizmo, but I want to have alternative move modes. Halo 3 movement and Halo: Reach movement are the two movements types that Forge is lacking. Speaking of movement and gizmos, the gizmos are whack. When you are selecting an axis to move, that axis should be highlighted in some way that is more noticeable so that you can ensure that you aren’t selecting more than one axis. Additionally, it can be frustrating having the arrows pointing away from the camera, which means that you need to reposition the camera to the other side of the object. It would be nice if there were a mode that made it so the arrows are always pointing towards you so they are easier to grab.
I like being able to press F to focus on an object, what would make it even nicer is if when you hold F down, that locks you onto the object, and rotating the camera rotates the camera around the object rather than rotating it around its origin.
When you have snapping set for movement, it gets really annoying having objects spawn at positions that aren’t in alignment with the snap. If the move mode is World, then it would be nice if the object is positioned along the snap grid. If the move mode is Object and an object is already selected, then I think that the spawned object should spawn on the snap grid of the selected object. So if your snap was 2, and the object was at (0, 1.5, 0), the new object that you spawn would aligned with the selected object’s “snap grid”, which perhaps could also include that object’s rotation (but preferably that would be optional, preferably all of this behavior can be controlled in a menu).
When an object has a size that is not in alignment with the snap, I find that it can’t decide how to snap to the grid. So if you line it up perfectly then move it over and then move it back, you’ll find that you’re now in a different position and you have to go into the menu to line it up perfectly again. I don’t see any reason why this should be happening, I don’t see any reason why anyone would want that. The way I see it, when you are in Object move mode, the snap grid should be relative to the objects position so when you start moving, the object snaps relative to the starting position, then when you stop moving the object’s snap position is set to the new origin.
Back in Halo: Reach, we could grab a forge object from any position on the object and drag it around. It would be really nice to be able to do the same thing in Infinite. It would also be nice to be able to change where the gizmo is drawn so that you aren’t forced to look at the center of a large object while moving it. Being able to position the gizmo by clicking somewhere on the object (while making it reversible) would be nice.
There’s probably more that can be said here.
The undo/redo system seems like it’s missing quite a lot of recording. There are some actions that you can’t undo/redo, which is quite annoying. It’s also annoying that you can’t undo/redo variable changes on objects (so if I changed an object position in the menu by typing in a number for the X, then I should be able to undo that by pressing Ctrl+Z.
Now I want to talk about scripting again.
I was unable to find a way to spawn object. It would be nice to be able to spawn objects (including prefabs) and modify their settings. Like, maybe I could spawn soccer balls and give them some velocity to shoot them at players or something like that.
Like I said before, there’s no way to check for player input. Having some nodes for doing that would be really nice. Since players can be using either a controller or KBM, it would make more sense for the input to be action based rather than button/key based. So here are some node ideas:
There needs to be a node that you give it a player, and an action (such as Crouch), and that node will output true when the button for Crouch is held down.
Ideally we would be able to select controls based on various control types (spartan, driving, monitor mode, spectator, etc).
For getting input related to movement (WASD or Joystick), we should have two options: a Vector2 that gives the Joystick position (and a representation of that position for WASD).
We should also have a node that gives you a boolean value for forward/backward/left/right. Ideally this node would have four output pins for each cardinal direction so that we don’t need to clutter the graph when we want to check more than one direction at the same time.
There is no functionality to get objects that the player is looking at. It would be nice to be able to get a list of all objects along a player’s look direction, and then iterating through this list would yield the closest object first and the furthest object last, and otherwise perhaps it could be possible to reverse the direction.
It would be nice to be able to tag objects and have nodes for adding/removing/checking tags.
It would be nice if we had a custom weapon type that doesn’t shoot anything and just raycasts the scene for objects, then we could have a node for receiving that raycast event. So every time you press the Fire button, the node for the raycast event would be triggered, and it would give you the player that triggered it as a reference as well as the list of objects captured by the raycast. Remember what I said about tagging? It would be nice to be able to filter this raycast with a list of tags. Not just “does this object have this tag?” but also “does this object not have this tag?” So we could create a filter where it requires one tag but excludes objects with another tag.
I’m pretty sure I already mentioned that we should have nodes for spawning objects and prefabs, but I also think we should have some nodes for deleting objects and prefabs.
Like I mentioned about object tags, it would be nice to have a node for enumerating objects by a tag filter. (maybe a tag filter can also be a variable type?)
It would be nice if we also had integer variables/nodes/values rather than all decimals. Then we could have bitwise operation nodes to manipulate bits (we could then have get_bit and set_bit nodes).
It would be really nice if we could actually use our own text to print to the screen. Ideally we would be able to print text with some sort of format. So maybe we could have the text “Player {name} at {position} is crouching: {crouching}” and then the text node would automatically create input pins for each of the identifiers within the curly braces, and it would automatically format the text with whatever object is passed to it.
It would also be nice to be able to change what interactive buttons say. So for example, I could make it say “Open Door” or “Lock Door”. Preferably we could change the text at runtime with some node in case we want the button to have multiple purposes.
Speaking of buttons, I didn’t find any way to disable or hide them via a script.
We also can’t move buttons with scripts, which can be annoying. I hope that we can one day make dynamic prefabs so we can make more complicated moving objects like elevators.
We don’t have nodes for creating GUIs that can be interacted with.
Having a way to present a GUI to a player would be very useful. Giving them buttons that can trigger events, combo boxes to choose settings, sliders, text boxes (maybe), integral input, boolean input, numeric input, vectors, player selectors, etc.
Now, here is the really really big one. I doubt you guys would ever implement this, but it would be a real game changer. It would be nice if we had an actual scripting language that we could use. I don’t think it matters how complex the scripting language is. I think people would be perfectly happy with something like Lua or something similar to Bash. Ideally we could design our own nodes with this scripting language. The scripting language would give a lot more control than the node graph, and it would also be less cluttered. I think the node graph is great for hammering out some basic logic, but we need something more capable. The limitations of the node graph are too numerous. The scripting language would make it really easy to make GUIs.
Anyway, those are just some of my thoughts. I’m certain I could think of more if given the chance.