Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics


A member registered Jan 01, 2017 · View creator page →

Creator of

Recent community posts

Gotcha. Well it looks cool, Ill try to keep an eye on the game

I see you have the source downloadable too. Why that, but no demo download? Haha

I want to try :(

The zip you downloaded contained a ReadMe.txt. You have to do two things. 1)port forward 25565, and 2) right click the exe that launches the game and make a shortcut. Modify the windows parameters by adding "-server" to the end.

I knew i wasn't crazy... hehe

(1 edit)

If anyone wants additional players in their game or needs someone to play with comment here. I'll join :D

I assume the entrance would be on the back wall? I looked at all the back walls first then tried left and right but didnt see anything.

I already alt f4d :( I walked around everywhere but there was no boss. Pink enemies kept on spawning when I would go back to areas Ive already cleared

So, thanks for that.

(1 edit)

OMG! You've made my day! No one has ever done a game play video of something I've made! Thank you so much! I hope you're happy to know I'm already in the works of giving the game a 2 player co-op capability. The good kind of co-op: Online functionality! (NAT Punchthrough and LAN) port forward capable))

Adding between round objectives is a great idea, thanks! The only objective at the moment is available at round 25, sort of an easter egg. It goes get repetitive and I should add more content to fix that. Thanks for the ideas :)

Well nice work, Ive opened stuff in dotPeek, etc. I could never get it into a writable format, though. I always had it in a form where its showing machine operations. But thank you for the reply, I just think its so cool that you went back and added something the devs said they wouldn't add because its too much for a small team.

How did you modify this to add multiplayer? Like, how did you even reverse engineer the project to a format that you could add networking? I'm super interested in specifics, I think its really neat! Plz reply, demon :)

I think when you're at 190/192 is when you really start to appreciate the scenery. Loved the Windows 95 easter egg. Nice play!

Amazing. I got stuck at the room with an insane amount of enemies though. I killed them all and couldn't figure out where to go.... both of the doors were red. Anyway, incredible game! I loved it, cant wait for more!

Apart from the ear rape I experienced at the first 2 block deep hole, great project! The 45 degree camera angle makes arrow key movement feel a bit off. If you were to rotate the camera like 15 degrees counter-clockwise, I think it would make moving feel a bit better.

(2 edits)

This documentation is also located in the download.

METHODS (that you should utilize):

void StartServerLAN(int port)
To start a LAN server. If you are port forwarding, people on other networks can join. Port is the port that it will open on.

void StartServerInternet(string password)
To start an internet game off of unity's servers. Password is the password needed to join the server.

void JoinServerLAN(string ip, int port)
To join a LAN server (port forwarded, or local). IP is the IP address, port is the port.

void ListInternetMatches()
This gets a list of internet servers. The list of servers can be accessed with the matchList variable. Note that this variables will rapidly and frequently change when

void JoinServerInternet(NetworkID networkId, string password)
This will join an internet server. Use the variable matchList for getting a NetworkId. Password is the password of the server.

void Disconnect()
Closes all connections, wheather server or client.

static bool IsServer()
Will return true if this game instance is a server.

static bool IsClient()
Will return true if this game instance is a client.

void RPC(string rpcIdString, int identityId, bool selfCall, params object[] parameters)
For server or client use. The server will send the message to all clients. The client will send the message to the server only. RpcIdString is the ID of the RPC, which
is the string name of the method intended to run. IdentityId is the id of the object on the receiving end of the RPC that will be searched for the same type of component
that the RPC is meant to run on. SelfCall will call the method not only on receiving partners, but will also be invoked on the local game instance. Parameters are specific
ro each RPC.

void RPCToMultiple(string rpcIdString, int identityId, List<int> recipients, bool selfCall, params object[] parameters)
Similar to RPC, but for the server only. Recipients is a lit of connectionIds that the message will be sent to.

void RPCToSingle(string rpcIdString, int identityId, int recipient, bool selfCall, params object[] parameters)
Similar to RPC, but for the server only. Recipient isa single connectionId the message is sent to.

void RPCToAll(string rpcIdString, int identityId, bool selfCall, params object[] parameters)
Similar to RPC, but for server only. This works the same as RPC on the server. It sends the message to all clients.

void BufferedRPC(string rpcIdString, int identityId, bool selfCall, string bufferTypeString, params object[] parameters)
Similar to RPCToAll, but is buffered. Buffered simply means the message is saves on the server. The message is sent to all current cliens, but will also be sent to all
future connecting clients. BufferTypeString is the type of buffer it is, so you can locate it in the lsit and remove it later if need be. Buffer types can be added in
the inspector of the NetworkMain.

void ServerNetworkInstantiate(int ownerId, string resourcePath, bool destroyOnLeave, NetworkInstantiateSpecialDataType specialDataType, object[] specialParameters)
For server only. This will instantiate a gameobject on all clients and the server itself. Note that this is a buffered RPC, so all connecting clients will also get it.
However, if you use the NetworkDestroy method on it, the buffer will be removed and it will be removed on all clients. OwnerId is the connectionId that will own the
NNI on the spawned object (if it has a NNI component). ResourcePath is a string path to where the prefab is located at in the Resources folder. DestroyOnLeave will make
the object be destroyed on all clients (and server) if the owner leaves. If the owner is a client, and they leave, the ownership is granted to the server.
SpecialDataType is used to correctly use SpecialParameters if the instantiation requires special processing. SpecialParameters is an object array of all these parameters
containing special information for this instance. For instance, spawning a bullet requires special information. You add a NetworkInstantiateSpecialDataType type named
"BULLET", and you pass an array of object parameters through. Make sure these parameters match up on send and receive.

void ClientRequestNetworkInstantiate(int ownerId, string resourcePath, bool destroyOnLeave, NetworkInstantiateSpecialDataType specialDataType, object[] specialParameters)
The same as ServerNetworkInstantiate, but for client. This sends a request to the server to have your item spawned. If it accepts, an RPC will be sent to all clients to
have the item spawned.

void ServerTransferOwnership(int identityId, int newOwnerId)
For server only. This changes ownership of the NNI with an identity of identityId. The ownership is set to newOwnerId. This is a buffered RPC.

void ClientRequestTransferOwnership(int identityId, int newOwnerId)
Same as ServerTransferOwnership, but for client. This sends a request.

void ServerDestroyNetworkedObject(int identityId)
For server only. Destroys the gameObject of the NNI with an ID of identityId. This removes the old instantiation buffer from the server, if the item was spawned during
runtime. If the gameObject was in the scene befroe runtime, the server will create a buffered RPC to remove the scene item when they connect.

void ClientRequestDestroyNetworkedObject(int identityId)
Same as ServerDestroyNetworkedObject, but for the client. They send a request to the server.

GameObject GetGameObjectWithIdentityId(int id)
This will return the gameobject with an NNI with the ID of ID. Note, this is a static method.

NoobieNetworkIdentity GetIdentityComponentWithIdentityId(int id)
This will return the NNI with the ID of ID. Note, this is a static method.

bool DoesThisConnectionIdOwnThisIdentity(int connId, int identityId)
This will return true if the NNI with the identityId of identityId has an owner value of connId. Note, this is a static method.

void BanIp(string address)
This will kick the player from the game (if present), and add them to the ban list to auto kick on join.

void BanIpFromConnectionId(int connectionId)
This will kick the player from the game, and add them to the ban list to auto kick on join.

VARIABLES (that you should utilize):

static NoobieNetworkMain nm
This is a static locator to the NetworkMain in the game. Any script can access the main by using NoobieNetworkMain.nm.<what you need>.

static List<NoobieNetworkIdentity> identities
This is a static list of all identities in the scene. There are built in methods to find identities with a certain ID, refer to those.

public bool superLog
If true, you will recieve logs from incomingand outgoing RPCs. This can be changed in the inspector.

public int maxConnections
This sets the max number of connections the server can hold. Only matters on the server. This can be changed in the inspector.

bool autoStartServer
If true, this game instance will become a LAN server with port 'autoStartServerPort' on Start() of NNM.

int autoStartServerPort
The port of an auto started server.

List<string> bufferTypes
This is a list of all bufferedRPC types. They can be changed in the inspector.

NetworkType networkType
This is current state of the game client { UNDEFINED, SERVER, CLIENT }.

List<MatchDesc> matchList
When a client searches for internet games, this will house all the findings.

int recentlyUsedConnectionId
This is the connectionId of the most recently received RPC. Only useful on the server. When an RPC is called, you can figure out which client sent it if you access
this variable WITHIN THAT RPC METHOD. This variable can canged multiple times per second if multiple RPCs are receivied, so it is crucial you access it as soon as
possible if it is needed.

List<int> activeConnectionIds
The server keeps a list of all conectionIDs currentl connected.

List<RPCBuffer> buffers
This is the list of buffers the server will send to all incoming clients. You can remove things from it directly, or you can have logic that dynamicly removes old
information as new information is recieved. Refer to the logicmethod at the bottom of the script.

int connectionId
This is only used on the client. It is the ID that the server sees them as.

Please submit feedback, ideas, and bugs in here.