Jump to content
Leoo

Today...

Recommended Posts

Government shut down meant I had no work today so played PUBG with my brother for something like 5 hours. Won twice. Felt nice to be able to just play games again for a bit.

  • Like 1

Quote

 

Quote

Anyone who likes tacos is incapable of logic.

Anyone who likes logic is incapable of tacos.

 

PSA: SaqPrets is an Estonian Dude

Steam: NippleBeardTM

Origin: Brand_New_iPwn

Share this post


Link to post
Share on other sites

Doot doot.

 

BAAEsyG.gif

 

Pretty cool!

 

PPrLVKl.gif

 

Spooky...

  • Like 1

ozXHe7P.png

Share this post


Link to post
Share on other sites

Today I played some League of Legends and lost -.-. Last night I did get a penta-kill though and went 19/1/13. You can see it here: https://www.twitch.tv/videos/156476136


melos2_zpsjnpxw8yx.jpg
"To do all that one is able to do, is to be a man; to do all that one would like to do, is to be a god." - Napoleon I

Share this post


Link to post
Share on other sites

I have a first class degree in Biochemistry

Congratulations!


2nv5bvl.png
99 Firemaking 30-5-2010 | 99 Fletching 13-7-2014
TET-AU member:6-10-2010 - 21-10-2011

Share this post


Link to post
Share on other sites

You made an item editor? Like completely from scratch? That's impressive as hell dude

Share this post


Link to post
Share on other sites

Song festival was on again last weekend.

 

I started a song with a friend of mine. In about 2 minutes, everybody on the stage, that is 14 000 people started singing along. On live broadcast, the interviewer and interviewee were completely dumbfounded and surprised. Everything is freely visible online on the homepage of our national broadcasting corporation webpage, PM me if anyone wants to see/hear it.

 

Once in a lifetime situation and deed.

 

Also, life takes some really [bleep]ing weird and awesome turns, but that is for the relationship thread.


t3aGt.png

 

So I've noticed this thread's regulars all follow similar trends.

 

RPG is constantly dealing with psycho exes.

Muggi reminds us of the joys of polygamy.

Saq is totally oblivious to how much chicks dig him.

I strike out every other week.

Kalphite wages a war against the friend zone.

Randox pretty much stays rational.

Etc, etc

 

Share this post


Link to post
Share on other sites

You made an item editor? Like completely from scratch? That's impressive as hell dude

I created an in-process OpenGL tracing module called ARDEN. It's composed of Touchstone, which generates the OpenGL trace; Jaques, which hooks the OpenGL functions; and Rosalind, which generates low-level rendering events relevant to RuneScape, like "draw_gui" or "draw_item_icon_model."

 

I then created a module called WALDEN to generate game state from the low-level Rosalind events. See, RuneScape's rendering is a bit odd at times. A single animated model (e.g., NPC, player, fire) may be split into a few draw calls. This isn't determininistic. There's other quirks I've encountered too. So I created Chomsky--thus far the only WALDEN component. It pieces together what events correspond to what game state. For example, it sorts skinned model draws by position to piece together individual animated models.

 

Luckily, GUI stuff is much simpler. At the end of a frame, the game world is transferred into the default back buffer, and then the GUI elements are drawn. Essentially, I compose a GUI element stream: a collection of quads with their associated texture hashes (more like fingerprints, since I apply some heuristics to generate most-certainly unique 16-byte value represents certain visual aspects of the texture).

 

I have to manually identify textures, but that's easy enough using my tool, Poltergeist. I created a texture dictionary resources, which assigns various metadata (a value, like a name; tags; and key-value data pairs) to a texture hash. Example:

 

xf7XHha.png

 

With a DSL I created (boringly named "GPD", for "GUI Parser Definitions"), I can apply a series of matches on the GUI element stream to construct a high-level representation of the GUI. For example, here's the chat panel GPD:

 

 

chat-panel-content[panel-content]: {
  .background: repeat image panel-background;
  .buttons[]: widget button[chat-button];
  .splitter: {
    .bottom: image chat-panel-border;
    .top: image chat-panel-border;
  };

  .display-name: text(shadowed: true) small-font;
  .quick-chat-button: widget button[chat-button];
  .prompt: text(shadowed: true) small-font;

  optional {
    .log[]: text(shadowed: true, break_on_newline: false) small-font;
  };

  .scroll-bar: widget button[vertical-scroll-bar];
};
The language is pretty simple.

 

Essentially, you have fundamental match statements: text, image, size, color, and widget. You can compose multiple statements together (using curly braces). The root groups are called widgets (like chat-panel-content above). Widgets can have fields (which can also have fields, see ".splitter" above). Generally, a match statement assigns the GUI element to the field or widget on success. Failed matches result in the parent node terminating.

 

You can also apply decorators to statements. Decorators modify the behavior of a match statement. For example, the "invert" decorators does what it says on the tin: inverts the result of a match statement. The "peek" statement doesn't change the position in the element stream; the "find" decorator attempts a match, and if that fails, increments the position in the stream and tries again; etc. You can chain decorators: "optional skip repeat image *[icon];" would consume all images with the 'icon' tag, for example.

 

The grammar is self-explanatory:

 

[hide]

# "GUI Pattern Definition", or GPD for short.

IDENTIFIER := [A-Za-z][A-Za-z0-9_-]*
NUMBER_LITERAL := [0-9]*
COLOR_LITERAL := '#' [0-9A-Fa-f]+
LEFT_PARENTHESIS := '('
RIGHT_PARENTHESIS := ')'
LEFT_CURLY := '{'
RIGHT_CURLY := '}'
LEFT_BRACKET := '['
RIGHT_BRACKET := ']'
FIELD_PREFIX := '.'
COMMA := ','
COLON := ':'
SEMICOLON := ';'
WILDCARD := '*'

parameter := IDENTIFIER COLON IDENTIFIER
parameter-list := LEFT_PARENTHESIS  parameter ( COMMA parameter )* RIGHT_PARENTHESIS
find-decorator := 'find'
repeat-decorator := 'repeat' parameter-list? expression
optional-decorator := 'optional' expression
skip-decorator := 'skip' expression
peek-decorator := 'peek' expression
invert-decorator := 'invert' expression
rewind-decorator := 'rewind' expression
expression := ( decorator | statement )
tag-collection := LEFT_BRACKET IDENTIFIER ( COMMA IDENTIFIER )* RIGHT_BRACKET
widget := IDENTIFIER tag-collection? COLON expression
field := FIELD_PREFIX IDENTIFIER ( LEFT_BRACKET RIGHT_BRACKET )? COLON expression
statement := ( group-statement | match-statement | print-statement ) SEMICOLON
group-qualifier := 'any' | 'all'
group-statement := LEFT_CURLY ( field | expression )+ RIGHT_CURLY group-qualifier?
print-statement := 'print'
color-match-statement := 'color' COLOR_LITERAL
image-match-statement := 'image' ( WILDCARD | IDENTIFIER ) tag-collection?
text-match-statement := 'text' parameter-list? ( WILDCARD | IDENTIFIER ) tag-collection?
size-match-statement := 'size' ( WILDCARD | NUMBER_LITERAL ) ( WILDCARD | NUMBER_LITERAL )
widget-match-statement := 'widget' ( WILDCARD | IDENTIFIER ) tag-collection?
match-statement := text-match-statement | image-match-statement | color-match-statement | size-match-statement
root := widget+
[/hide]

 

Anyway, the above GPD produces the following state:

 

wcV99Zc.png

 

(See the window labeled "GUI State").

 

Now, item icons are generated at run-time. This means I have to render the geometry myself.

 

Item icons are fully-fledged models. They are rendered into a small framebuffer, and then a bunch of post-processing effects are applied. The actual item render is essentially identical to rendering a model in the game world. For stacked items, the same GUI matching code is used to parse the quantity text. I just hard-code the text-matching parser:

 

auto quantity_text_node = new parser::MatchTextNode();
quantity_text_node->set_wildcard();
quantity_text_node->set_shadowed(true);
quantity_text_node->set_include_spaces(false);

auto quantity_field_node = new parser::FieldNode();
quantity_field_node->set_name("quantity");
quantity_field_node->add(quantity_text_node);

auto root_node = new parser::GroupNode();
root_node->add(quantity_field_node);

this->gui_parser.add_node(quantity_text_node);
this->gui_parser.add_node(quantity_field_node);
this->gui_parser.add_node(root_node);
this->gui_parser.set_root_node(root_node);
So I made an ItemIconManager that listens for 'draw_item_icon_model', 'draw_item_icon_gui', 'clear_item_icon', and 'transfer_item_icon', and 'copy_texture' events. It essentially emulates the RuneScape rendering, albeit without texturing and post-processing.

 

However, the cool thing is, since item icons are models, and I'm the one doing the rendering, I can render the item icons however I want! So I created an 3D item icon viewer (as pictured in those images). I can select any item icon rendered up to the current frame and view it in all its 3D glory:

 

S7FlXo4.png

 

And there you have it. What a wonderful waste of time and talent!


ozXHe7P.png

Share this post


Link to post
Share on other sites

I have a first class degree in Biochemistry

 

Congrats Maddy! Must make you feel much better finally knowing the results.

 

Song festival was on again last weekend.

 

I started a song with a friend of mine. In about 2 minutes, everybody on the stage, that is 14 000 people started singing along. On live broadcast, the interviewer and interviewee were completely dumbfounded and surprised. Everything is freely visible online on the homepage of our national broadcasting corporation webpage, PM me if anyone wants to see/hear it.

 

Once in a lifetime situation and deed.

That's awesome man, can't even imagine that. Let alone how annoyed the interviewee must have been to suddenly have all these people singing over him.

  • Like 1

Share this post


Link to post
Share on other sites

Actually, she was the head conductor of the whole song festival, so she started crying about how beautiful that spontaneity(?) is and how the song festival truly is a success.


t3aGt.png

 

So I've noticed this thread's regulars all follow similar trends.

 

RPG is constantly dealing with psycho exes.

Muggi reminds us of the joys of polygamy.

Saq is totally oblivious to how much chicks dig him.

I strike out every other week.

Kalphite wages a war against the friend zone.

Randox pretty much stays rational.

Etc, etc

 

Share this post


Link to post
Share on other sites

Shocked af - got 78% for my final year project on prostate cancer and loads of pretty awesome results in general.

 

I have a new job so relocating for that - I mean, considering my dad passed away and I got strangled and this year has been riddled with drug abuse  (which i'm pretty much all clean from) and mental health strain (which is alleviated significantly), 

 

I CAN'T BELIEVE I MADE IT - thanks guys for your well wishes and generally letting me vent here, 

graduation is in two weeks' time

  • Like 4

Share this post


Link to post
Share on other sites

My sister got back from Sri Lanka last night. Well kinda. Got a call from the police saying she got arrested on the airport because she had a gram of weed in her handbag. Apparently my sister is stupid enough to not check her handbag for shit like this before coming back home. So my dad had to go to the deportation department this morning where she's being held to see what he can do. One of the ladies there said everything is fine, she can go home since it's just a gram, but other people are saying she's getting deported either way. Honestly, she's my sister and all, but i couldn't care less what ends up happening. I know i'll miss her in a few weeks, but she's done nothing but cause stress and drama for the last couple of years with her disrespect and selfishness. Maybe going back to South Africa will bring her back down to earth. 

 

Funny thing is that my parents are acting like my sister is a victim in all of this. Sure, it's hella unlucky being caught and deported for just 1 gram. Guess it's good my parents don't know that she's been dealing out of our house for the past couple of months. 

Share this post


Link to post
Share on other sites

Having trouble with moving in the direction the camera is facing

 

29bad703a14a8908c98a9486f4094967.png

 

 

So in this example if the camera rotation is 0,0,0 and I want to move in the x direction I would expect the mesh to grow as the camera got nearer to it but instead it stays in place and if I rotate it will zoom away much faster since its further away from the camera.

 

I've done a lot of testing but I still haven't found the bug but I'll keep looking. Right now I have a lot of debug spam to see how its working.

 

The Matrix multiplication I am doing is in psuedocode

projectionMatrix = identity() * perspective(fov,aspectRatio,near,far)
ViewMatrix = identity * rotate(camera.rotation.x) * rotate(camera.rotation.y) * translate(-camera.position.x,-camera.position.y,-camera.position.z)
ModelMatrix = identity * translate(mesh.position.x,mesh.position.y,mesh.position.z) * rotateX(-mesh.rotation.x * 0.0174533) * rotateY(-mesh.rotation.y * 0.0174533) * rotateZ(-mesh.rotation.z * 0.0174533) * scale(mesh.scale)
ModelViewMatrix = viewMatrix * ModelMatrix
projectedPoint = projectionMatrix * ModelViewMatrix * mesh.triangle.vertice



//Render
updateProjectionMatrix()
updateViewMatrix(camera)
for each mesh
updateModelViewMatrix(mesh)
for each triangle
v1.projectedPoint
v2.projectedPoint
v3.projectedPoint

int minX, maxX, minY,maxY - calculate these from v1,v2,v3

for(int y=minY,maxY;y++){
    for(int x=minX;maxX;x++){
        //use https://en.wikipedia.org/wiki/Barycentric_coordinate_system to calculate if current x,y should be drawn
        //calculate z depth to decide which face should be drawn **** down the line update this to not render backfaces  ****
    }
}


Share this post


Link to post
Share on other sites

Do you divide projected_point.xyz by projected_point.w?


ozXHe7P.png

Share this post


Link to post
Share on other sites

w is just hardcoded to 1.0 so im converting it back down to a vector3

Share this post


Link to post
Share on other sites

But w won't be 1 after a perspective transformation. Here:

 

Let P be your point. Let P` be your point post-transformation. Let M be the combined model-view-projection transformation. Let S be the normalized device coordinates.

 

First, transform P:

 

P` = M * P
Then compute S:

 

Sx = P`x / P`w
Sy = P`y / P`w
Sz = P`z / P`w
See: https://www.khronos.org/opengl/wiki/GluProject_and_gluUnProject_code

 

Here's my projection method used in a MoonScript math library I made:

 

project: (point, view, projection, viewport) ->
	Promise.keep("point", Promise.IsClass(point, Vector))
	Promise.keep("view", Promise.IsClass(view, Matrix))
	Promise.keep("projection", Promise.IsClass(projection, Matrix))
	Promise.keep("viewport", Promise.IsTable(viewport))
	Promise.keep("viewport[1]", Promise.IsNumber(viewport[1]))
	Promise.keep("viewport[2]", Promise.IsNumber(viewport[2]))
	Promise.keep("viewport[3]", Promise.IsNumber(viewport[3]))
	Promise.keep("viewport[4]", Promise.IsNumber(viewport[4]))

	view_projection = projection * view
	transformed_point, w = view_projection\perspective_transform(point)
	transformed_point *= Vector(1 / w)

	return Vector(
		(transformed_point.x * 0.5 + 0.5) * viewport[3] + viewport[1],
		(transformed_point.y * 0.5 + 0.5) * viewport[4] + viewport[2],
		(1 + transformed_point.z) * 0.5)
Edited by Veiva
  • Like 1

ozXHe7P.png

Share this post


Link to post
Share on other sites

yoo, haven't really posted here in a minute but things have been going pretty well for me lately! I've been having a lot of visitors from home this month which has been super fun. Got to see some friends from college, then my parents, then this last weekend my best friend from Michigan came out here which was an absolute blast. Now this weekend I'm on my way back home for a music festival (fourth year going to blissfest woooo). Flying out tomorrow and I just cannot wait, my mind has been completely turned off at work in anticipation.

 

flying spirit for the first time tomorrow though, wish me luck ;_;

  • Like 2

Share this post


Link to post
Share on other sites

Today I watched the League of Legends Rift Rivals Finals with North America vs Europe. North America 3-0'd EU hard which made my day, considering NA has never really did well in international events.


melos2_zpsjnpxw8yx.jpg
"To do all that one is able to do, is to be a man; to do all that one would like to do, is to be a god." - Napoleon I

Share this post


Link to post
Share on other sites

Finished season 3 of iZombie. I wasn't sure I liked the direction the show was taking, but it really turned around for me at the end and got me good and hooked again, so now I get to wait for Season 4. Blah. Caught up on House of Cards too, but I'm starting to feel like the writers are winging it a bit. Still entertaining though.

 

Also starting to give some consideration to not having my computer in the loft where all the heat collects for the summer, but boy does it feel good when you come down. Could be 28C and it would still feel cool :D

Share this post


Link to post
Share on other sites

Was just on a 4-day trip through the best Norway has to offer.

 

[bleep]ing exhausted.


t3aGt.png

 

So I've noticed this thread's regulars all follow similar trends.

 

RPG is constantly dealing with psycho exes.

Muggi reminds us of the joys of polygamy.

Saq is totally oblivious to how much chicks dig him.

I strike out every other week.

Kalphite wages a war against the friend zone.

Randox pretty much stays rational.

Etc, etc

 

Share this post


Link to post
Share on other sites

Trying to buy more RAM but I honestly have no idea what I'm looking at


Quote

 

Quote

Anyone who likes tacos is incapable of logic.

Anyone who likes logic is incapable of tacos.

 

PSA: SaqPrets is an Estonian Dude

Steam: NippleBeardTM

Origin: Brand_New_iPwn

Share this post


Link to post
Share on other sites

C'mon, everyone knows you just download more ram. Google should provide you with the correct location to do it.

 

Otherwise, rant for the day is when you are trying to do something and her everything you need some on your end, but then are stuck waiting for another person/entity to do their stuff with no clear indication of what's going on.

Share this post


Link to post
Share on other sites

The thing is I bought my computer from my friend who claims he built it from scratch, but I'm not really sure what's in it. I've gathered as much as this:

Graphics: GeForce GTX 750 Ti
Processor: AMD A10-6700 APU with Radeon HD graphics, 3700Mhz, 2 Cores, 4 Logical Processors
Installed Memory: 8GB (7.79 usable)
MoBo: ASUSTeK M11BB, x64-based
 
It's my understanding that I only have one DDR3 8GB RAM thing installed and if I put another DDR3 8GB RAM thing in there it would increase the speed of my stuff. But I'm unsure if my Mother Board could handle it. Is there a way of checking?
 
I saw(from a 2014 post) that if I get a 1600Mz CL 9 DDR3 8GB RAM thing it should work? Does it have to be the same brand as the one I already have installed? Could I buy 4 and get 32GB of RAM total, or is that not how it works?

Quote

 

Quote

Anyone who likes tacos is incapable of logic.

Anyone who likes logic is incapable of tacos.

 

PSA: SaqPrets is an Estonian Dude

Steam: NippleBeardTM

Origin: Brand_New_iPwn

Share this post


Link to post
Share on other sites

 

MoBo: ASUSTeK M11BB, x64-based

 
It's my understanding that I only have one DDR3 8GB RAM thing installed and if I put another DDR3 8GB RAM thing in there it would increase the speed of my stuff. But I'm unsure if my Mother Board could handle it. Is there a way of checking?
 
I saw(from a 2014 post) that if I get a 1600Mz CL 9 DDR3 8GB RAM thing it should work? Does it have to be the same brand as the one I already have installed? Could I buy 4 and get 32GB of RAM total, or is that not how it works?

 

Not a giant computer guy, but a quick google brought me to here where it has this listed:

 

 

Memory

2 GB Up to 16 GB

Dual Channel, DDR3 at 1333MHz

4 x DIMM

So based on that your motherboard, which holds the RAM, has 4 slots for RAM. However, it can only physically use a max of 16GB of RAM at once. So buying anything more than another 8GB of RAM is a waste of money.

 

So far as what type of RAM and whether your sticks should match I have no idea.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.