Gustavo6046

Members
  • Content count

    937
  • Joined

  • Last visited

4 Followers

About Gustavo6046

  • Rank
    Forum Regular
  1. You gave me an excellent idea! I'm sure the same puzzle can be achieved with a chaingun if you have a small hole in a wall with a larger chamber behind, you must shoot with a gun through it, and in this chamber there is a laterally displaced switch. +------------------------------------------------+ | |SWITCH.| | | +-------+ | | | | | | | | | | ^ | | | | | | | | | | | | | +------------------+----------+------------------+ | | | | | | | | | | | | | | | +-------------------+----------+-------------------+ | | + +--------------------------------------------------+ EDIT: Have you ever thought of some switch which requires downward spread from the SSG? ._.
  2. I have made a new wiki platform using my web server.

    1. Gustavo6046

      Gustavo6046

      Once the link dies, you can still resort to screenshots:

       

      04wdHzB.png

      NzC7XdU.png

    2. bzzrak

      bzzrak

      Good job, looks cute! Why did the link live for only  a few hours though? also do you have any further ambitions or plans for this thing?

  3. Random wall textures are my specialization. RandWal Co. at your services!
  4. I did a quick pathfinder in ACS.

     

    #include "zcommon.acs"
    
    #define MAX_NODES 256
    #define MAX_LINKS 32
    
    int nodes[MAX_NODES];
    int numNodes = 0;
    int nodeLinks[MAX_NODES * MAX_LINKS];
    int numLinks[MAX_NODES];
    
    int currentPath[MAX_NODES];
    int pathLength = 0;
    int dCosts[MAX_NODES];
    int queue[MAX_NODES];
    int qCosts[MAX_NODES];
    int queueLength = 0;
    
    int nextNodes[MAX_NODES];
    int cameFrom[MAX_NODES * 2];
    
    function void recalculateLinks(void)
    {
    	for ( int i = 0; i < MAX_NODES; i++ )
    		numLinks[i] = 0;
    		
    	for ( int j = 0; j < MAX_NODES * MAX_LINKS; j++ )
    		nodeLinks[j] = 0;
    
    	for ( i = 0; i < numNodes - 1; i++ )
    		for ( j = 0; j < numNodes - 1; j++ )
    			if ( CheckSight(i, j, CSF_NOFAKEFLOORS) )
    			{
    				numLinks[i]++;
    				numLinks[j]++;
    				
    				nodeLinks[i * MAX_LINKS + numLinks[i]] = j;
    				nodeLinks[j * MAX_LINKS + numLinks[j]] = i;
    			}
    }
    
    function int addNode(int tid)
    {
    	nodes[numNodes] = tid;
    	numNodes++;
    	
    	recalculateLinks();
    			
    	return numNodes - 1;
    }
    
    function int distanceBetween(int source, int dest)
    {
    	int diffX = GetActorX(source) - GetActorX(dest);
    	int diffY = GetActorY(source) - GetActorY(dest);
    	
    	int sqDiff = FixedMul(diffX, diffX) + FixedMul(diffY, diffY);
    	
    	if ( sqDiff < 0 )
    		sqDiff = -sqDiff;
    
    	return FixedSqrt(sqDiff) >> 16;
    }
    
    function bool canTraverse(int old, int tid)
    {
    	for ( int i = 0; i < numNodes; i++ )
    		if ( cameFrom[i * 2] == tid )
    			return false;
    
    	return GetActorX(tid) - GetActorX(old) <= 24;
    }
    
    function int getCostFor(int old, int tid)
    {
    	dCosts[tid] = dCosts[old] + 1;
    
    	int distance = distanceBetween(old, tid);
    	int cost = GetActorPitch(tid) * distance + dCosts[tid];
    	
    	Log(i:distance, s:" -> ", i:cost);
    	
    	return cost;
    }
    
    function void visibleNodes(int tid)
    {
    	for ( int i = 0; i < MAX_NODES; i++ )
    		nextNodes[i] = 0;
    		
    	for ( i = tid * MAX_LINKS; i < tid * MAX_LINKS + numLinks[i]; i++ )
    		nextNodes[i - tid * MAX_LINKS] = nodeLinks[i];
    }
    
    function int nextFromQueue(void)
    {
    	if ( queueLength < 1 )
    		return 0;
    
    	int res = queue[--queueLength];
    	
    	for ( int i = 1; i < queueLength; i++ )
    		queue[i] = queue[i - 1];
    		
    	queue[i] = 0;
    	return res;
    }
    
    function int indexOfNode(int tid)
    {
    	for ( int i = 0; i < numNodes; i++ )
    		if ( nodes[i] == tid )
    			return i;
    			
    	return -1;
    }
    
    function void insertToQueue(int index, int node, int cost)
    {
    	for ( int i = queueLength - 1; i >= index; i++ )
    	{
    		queue[i + 1] = queue[i];
    		qCosts[i + 1] = qCosts[i];
    	}
    	
    	queue[index] = node;
    	qCosts[index] = cost;
    	
    	queueLength++;
    }
    
    function int getCameFrom(int tid)
    {
    	for ( int i = 0; i < numNodes * 2; i += 2 )
    		if ( cameFrom[i] == tid )
    			return cameFrom[i + 1];
    			
    	return -1;
    }
    
    function bool pathBetween(int sourceNode, int destNode)
    {
    	for ( int i = 0; i < MAX_NODES; i++ )
    	{
    		dCosts[i] = 0;
    		currentPath[i] = 0;
    	}
    		
    	int current = sourceNode;
    	int cfIndex = 0;
    		
    	while ( current != 0 && current != destNode )
    	{
    		visibleNodes(current);
    		
    		for ( i = 0; nextNodes[i] > 0; i++ )
    		{
    			if ( !canTraverse(current, nextNodes[i]) )
    		
    			int j = 0;
    			int cost = getCostFor(nodes[current], nextNodes[i]);
    			
    			while ( j < queueLength && qCosts[j] < cost )
    				j++;
    		
    			insertToQueue(j, nextNodes[i], cost);			
    			cameFrom[cfIndex * 2] = nextNodes[i];
    			cameFrom[cfIndex * 2 + 1] = current;
    		}
    		
    		current = nextFromQueue();
    	}
    
    	if ( current == 0 )
    		return false;
    		
    	pathLength = 0;
    	queueLength = 0;
    
    	for ( current = destNode; current != -1; current = getCameFrom(current) )
    	{
    		currentPath[pathLength] = current;
    		pathLength++;
    	}
    		
    	return true;
    }
    
    script 710 (void)
    {
    	int ntid = UniqueTID();
    	Thing_ChangeTID(0, ntid);
    	
    	addNode(ntid);
    }

    Still wondering how to use that.

  5. I'm planning a node-based pathfinder in ZDoom that uses a DECORATE abstraction (ZDCode).

  6. I did a (crappy) E1M1 'clone' in my JavaScript pathfinder!

     

    MLvmM5O.png

    Check it out!

     

    1. Gustavo6046

      Gustavo6046

      The link is dead because ngrok tunnel URLs are unfortunately dynamic.

  7. You're welcome! I'm always open to critics. Also, all you need to do to use my music is to add my name in the credits, or anywhere, really. That's all! :)
  8. I guess I got some inspiration. W/ liteamps: W/O liteamps:
  9. Wish I had some idea of what I could do to put on this thread, preferably a map...
  10. You waited. And waited more. The wait is delayed And nothing would happen, other than the bore[dom]... Then you waited... a little more. And something happened. What was that? Gustavo was back, and everyone imagined... "Wow! What did he bring other than his hat?" I say hi-hat! ... I mean, Gustavo's MIDI pack is back! Sorry, I can't resist doing some poetry sometimes. Get the ZIP now! Inside parens are projects that the song are part of; bolds are remixes of others' projects and italics are merely inspired. Songs Included: 9 Wheelburn (MaxPrix) Vindication Steel Sharp (Steelbox) Prairy Run (Unreal Tournament) Majestic Breath Flanking Death Brown Alley (Unreal - ISV-Kran) Alien Amazon This time, for convenience of both sides I won't provide individual downloads. Have fun, and audite in gaudium!
  11. Fourteen, to feel the success and pride of this place earlier.
  12. I have been drawing some Unreal-esque textures now, with superexposition in some places, and bloom in the lights. Feel free to right click -> "Save Image As..." any texture here!
  13. I'm using Evolve to host my free legit games online, so people can play them. Too lazy to port forward at the moment (not like I could mess with router settings if I weren't, anyway). Still trying to find out how to connect an existing game server with their interface.

     

     

  14. Exactly. You guys' debate is hot and all, but I guess you are missing the point of the thread. @AbsorbedHatch I don't think there is one; as Graf Zahl said, Apple does not allow a very wide gamma of software in their phones, which is why we don't have iDoom, for example. However, nowadays has never been really free days, so if you don't own a PC, your influence in software is limited.