[QUOTE=0V3RR1D3;50395085]Where are you all from :v:[/QUOTE]
It's blocked in Germany too, but I guess that's more the norm than the exception :v:
[URL="http://unblockyoutube.us/"]Here's a proxy[/URL], though it must be available in a supported country.
[QUOTE=DrTaxi;50397009]Please don't remove 60% of features and 90% of subforums this time kthx
[editline]---[/editline]
Custom Forums 2006 - 2009 NEVER FORGET[/QUOTE]
No deal
[QUOTE=garry;50397212]No deal[/QUOTE]
Add back General Disruption.
It was totally fine before.
I've been hacking around with RuneScape OldSchool for the past few days, using Scala. First I wrote my own loader to host the game applet (not that much code), which only took a few hours. Then I started reverse engineering the game client in order to implement features such as XP and loot statistics in the future. The code uses many different ways of obfuscation, such as randomized (and sometimes conflicting) field names, dummy parameters and values such as HP and levels being multiplied by a constant. However, I made a breakthrough by using heap dumps and analyzing them in VisualVM, which makes reverse engineering class fields a bit easier. Currently my client's API can read chat messages, get nearby players and NPCs, and get/set data in the login screen. I also managed to do this:
[IMG]https://i.imgur.com/1NvHKpd.png[/IMG]
There's a ton to do, and it's a very tiring environment to program in. I also need to figure out a way to automate deobfuscation, if possible, since my code will break on every engine update. I'd also love to open source this, but I'm not sure if Jagex would approve, as you could easily reuse most of the code for a bot framework.
[QUOTE=garry;50396819]Making my own forum[/QUOTE]
There are so many ways I could see that going wrong. :v:
[QUOTE=zeaga;50397467]There are so many ways I could see that going wrong. :v:[/QUOTE]
It already did, have you seen that facepunch forum thing? Horrible!
I've been hacking around CSGO. Made this video:
[video=youtube;GoAq6eQXEt4]https://www.youtube.com/watch?v=GoAq6eQXEt4[/video]
btw the video is really low FPS because I didnt render it.
I pretty much hooked an SDK function called OverrideView doing this:
[code]
void __fastcall hkOverrideView(IClientMode* clientMode, DWORD edx, CViewSetup* viewSetup)
{
viewSetup->fov += 50;
}
[/code]
Then did this
[code]
pClientModeHook = new CVMTHookManager((PDWORD*)g_pClientMode);
pClientModeHook->dwHookMethod((DWORD)hkOverrideView, 18);
[/code]
I also made a HUD (healthbar)
[IMG]http://i.imgur.com/rO1E3oN.png[/IMG]
and I did that by doing this. Once again just hooking PaintTraverse (another CSGO sdk function)
[code]
typedef void(__thiscall *tPaintTraverse)(void* ecx, unsigned int, bool, bool);
[/code]
then
[code]
CVMTHookManager* pPanelHook = new CVMTHookManager((PDWORD*)g_pVGuiPanel);
tPaintTraverse oPaintTraverse = (tPaintTraverse)pPanelHook->dwHookMethod((DWORD)hkPaintTraverse, 41);
[/code]
then
[code]
void __fastcall hkPaintTraverse(void* ecx, void* edx, unsigned int vguiPanel, bool forceRepaint, bool allowForce)
{
oPaintTraverse(ecx, vguiPanel, forceRepaint, allowForce);
if (!strstr(g_pVGuiPanel->GetName(vguiPanel), "MatSystemTopPanel"))
return;
CBaseEntity* cLocalPlayer = (CBaseEntity*)entitylist->GetClientEntity(engine->GetLocalPlayer());
g_pVGuiSurface->DrawSetColor(Color(255, 0, 255, 255));
g_pVGuiSurface->DrawFilledRect(29, 29, cLocalPlayer->health(), 46);
}
[/code]
and then
[code]
pPanelHook = new CVMTHookManager((PDWORD*)g_pVGuiPanel);
oPaintTraverse = (tPaintTraverse)pPanelHook->dwHookMethod((DWORD)hkPaintTraverse, 41);
[/code]
THANK YOU FOR THE PROGRAMMING KING RATING GUYS :D ITS THE FIRST TIME I EVER GOT THAT ;D
Some more OoeyGUI work. Implemented ProgressBar, DoubleProgressBar, and improved the final buffer copy into the Console and the way rect invalidation works:
[img]https://zippy.gfycat.com/PeriodicWigglyGreendarnerdragonfly.gif[/img]
(It's a lot smoother IRL, I promise, GIFs can't do 60fps)
That's with:
[code]
_OoeyGui.Init();
var begin = new FormattedText("Progress: ");
var mid = new FormattedText(" (", reset:true);
var mid2 = new FormattedText(" of step ", reset: true);
var end = new FormattedText(" out of 10)", reset: true);
var perc="0%".Green();
var perc2="0%".Green();
var step="1".Green();
var lbl = new Label(35, 3, 40, 1, 0, "");
var prog = new ProgressBar(15, 5, 80, 1, 1);
var prog2 = new DoubleProgressBar(5,7,100,1,2);
lbl.Text = new FormattedString(begin, perc, mid, perc2, mid2, step, end);
_OoeyGui.AddChild(lbl);
_OoeyGui.AddChild(prog);
_OoeyGui.AddChild(prog2);
_OoeyGui.Repaint();
Console.ReadLine();
for (var i = 1; i <= 10; i++) {
prog2.Progress =
prog.Progress = i / 10.0;
step = $"{i}".Green();
perc = $"{i}%".Green();
for (double j = 0; j <= 100; j++) {
prog2.SubProgress = j / 100.0;
perc2 = $"{j,3}%".Green();
lbl.Text = new FormattedString(begin, perc, mid, perc2, mid2, step, end);
_OoeyGui.Repaint();
Thread.Sleep(1);
}
}
[/code]
[QUOTE=Sidneys1;50398531]Some more OoeyGUI work. Implemented ProgressBar, DoubleProgressBar, and improved the final buffer copy into the Console and the way rect invalidation works:
[img]https://zippy.gfycat.com/PeriodicWigglyGreendarnerdragonfly.gif[/img]
(It's a lot smoother IRL, I promise, GIFs can't do 60fps)
That's with:
[code]
_OoeyGui.Init();
var begin = new FormattedText("Progress: ");
var mid = new FormattedText(" (", reset:true);
var mid2 = new FormattedText(" of step ", reset: true);
var end = new FormattedText(" out of 10)", reset: true);
var perc="0%".Green();
var perc2="0%".Green();
var step="1".Green();
var lbl = new Label(35, 3, 40, 1, 0, "");
var prog = new ProgressBar(15, 5, 80, 1, 1);
var prog2 = new DoubleProgressBar(5,7,100,1,2);
lbl.Text = new FormattedString(begin, perc, mid, perc2, mid2, step, end);
_OoeyGui.AddChild(lbl);
_OoeyGui.AddChild(prog);
_OoeyGui.AddChild(prog2);
_OoeyGui.Repaint();
Console.ReadLine();
for (var i = 1; i <= 10; i++) {
prog2.Progress =
prog.Progress = i / 10.0;
step = $"{i}".Green();
perc = $"{i}%".Green();
for (double j = 0; j <= 100; j++) {
prog2.SubProgress = j / 100.0;
perc2 = $"{j,3}%".Green();
lbl.Text = new FormattedString(begin, perc, mid, perc2, mid2, step, end);
_OoeyGui.Repaint();
Thread.Sleep(1);
}
}
[/code][/QUOTE]
Cool shit man. Looks really pretty :D
I've been trying to convert my ECS from using Boost MPL (which is C++03) to using Boost Hana (which is C++14) and basically my approach so far has just been drop in replacing what I have.
To keep a list of all the entities with a tag, I created an array of sets, and each set used to hold Entity IDs. So basically, it would look something like this when fully evaluated: array<set<EntityID>, tagNum>. I would access the correct set by keeping the list of types in a tuple, and you could find the correct element by using get<type>. As you can see, there is a clear separation of the array that holds the data, an what each element in the array represents.
Now I was trying to replace the MPL set that created the tuple. You see, to get the actual tuple of types I converted a variadic type list into an MPL set, then converted that into a tuple. Lot's of work needing to be done (and since MPL is C++03, the manipulation of variadics is archaic and bloats compile time). Basically, I got as far as replacing the MPL set with a Hana set, but I couldn't find a way to convert finding a type in the set to getting an index. I mean, how else am I supposed to access my array? I was frantically looking at the documentation, and I just couldn't make sense of how to do it.
But then it struck me. Holy shit, Hana doesn't just work with types. I can just have a Hana map that maps a type to a set of Entity IDs. It just makes so much sense. Now I don't have 4 or 5 different steps littered with different types to get my end result. No, I just need to use a single freaking Hana map, which goes type -> set<EntityID>. C++14 boost libraries are basically magic.
[QUOTE=WTF Nuke;50398904]I've been trying to convert my ECS from using Boost MPL (which is C++03) to using Boost Hana (which is C++14) and basically my approach so far has just been drop in replacing what I have.
To keep a list of all the entities with a tag, I created an array of sets, and each set used to hold Entity IDs. So basically, it would look something like this when fully evaluated: array<set<EntityID>, tagNum>. I would access the correct set by keeping the list of types in a tuple, and you could find the correct element by using get<type>. As you can see, there is a clear separation of the array that holds the data, an what each element in the array represents.
Now I was trying to replace the MPL set that created the tuple. You see, to get the actual tuple of types I converted a variadic type list into an MPL set, then converted that into a tuple. Lot's of work needing to be done (and since MPL is C++03, the manipulation of variadics is archaic and bloats compile time). Basically, I got as far as replacing the MPL set with a Hana set, but I couldn't find a way to convert finding a type in the set to getting an index. I mean, how else am I supposed to access my array? I was frantically looking at the documentation, and I just couldn't make sense of how to do it.
But then it struck me. Holy shit, Hana doesn't just work with types. I can just have a Hana map that maps a type to a set of Entity IDs. It just makes so much sense. Now I don't have 4 or 5 different steps littered with different types to get my end result. No, I just need to use a single freaking Hana map, which goes type -> set<EntityID>. C++14 boost libraries are basically magic.[/QUOTE]
Why are you storing lists of entities that contain a tag in the first place?
Also, tuples sound completely fine for what you're doing.
First of all, we need to create a type that lets us differentiate between them based on their type parameter. Since std::set<EntityID> contains no type information (besides EntityID, but they all have that) we need to wrap it in some other structure that can let the tuple know
what kind of EntityIDs are stored in it:
[cpp]
// We need a wrapper to be able to do type lookup
// Otherwise our tuple will just be tuple<set,set,set>
template<typename tag>
struct typed_set : public std::set<EntityID> {};
[/cpp]
Now, we need some way of expanding a list of tags into a tuple<typed_set<Tags>...> structure:
[cpp]
// Expand tags into a tuple<tset<T1>, tset<T2>, tset<TN>, ...> type
template<typename ...Tags>
using tag_lookup_storage_impl = std::tuple<typed_set<Tags>...>;
[/cpp]
To define the final type with all the tags, we simply use the impl:
[cpp]
// Define a storage type that can hold all our sets
using tag_lookup_storage = tag_lookup_storage_impl<
tags::player,
tags::boss
>;
[/cpp]
Now all we have to do is instantiate an instance of the tag_lookup_storage and define a way to access it by type:
[cpp]
tag_lookup_storage tag_lookups;
template<typename Tag>
std::set<EntityID> &get_by_tag()
{
return std::get<typed_set<Tag>>(tag_lookups);
}
[/cpp]
This isn't an attack on Hana or anything, I just wanted to show how reasonably easy it is to do with the tools already available to you, without needing libraries like Hana.
Also you should check out SupahVee's presentation on his template-heavy ECS system:
[media]https://www.youtube.com/watch?v=NTWSeQtHZ9M[/media]
He does a lot of really neat things with it, like signature matching for component/entity systems at runtime, instead of having separate sets for each tag, meaning that tags are (almost) completely overhead-free, except for when you're looking for them.
My node shader thing got deployed now. So far it works flawlessly! (I'll take more pictures when it's dark)
[t]https://my.mixtape.moe/vwneuo.jpg[/t]
So where does LLVM lie between the CIL and assembly? How hard is it to target it with a custom compiler?
Been learning an esoteric programming language known as "Brainfuck".
Ah yes, the worlds funniest and absolutely loads of fun language to learn.
[code]
, ++ , ++ [ >> ++ << ] ++
[/code]
Got the input to work. Input letters or numbers and it will print back out
[QUOTE=Darwin226;50401197]So where does LLVM lie between the CIL and assembly? How hard is it to target it with a custom compiler?[/QUOTE]
From what I remember when I wrote a compiler with it a few years ago, it's quite a bit lower level. For example, there's no object oriented stuff built in, so I had to implement vtables / inheritance myself. I'd say it's closer to assembly than CIL. It was relatively easy to target though, the language documentation is pretty clear.
[QUOTE=Ziks;50401719]From what I remember when I wrote a compiler with it a few years ago, it's quite a bit lower level. For example, there's no object oriented stuff built in, so I had to implement vtables / inheritance myself. I'd say it's closer to assembly than CIL. It was relatively easy to target though, the language documentation is pretty clear.[/QUOTE]
I've never written a compiler personally but having to manually handle the function stack sounds pretty intimidating. Do you have to do that in LLVM (this might not even be necessary in assembly; I've only ever wrote some archaic flavor of it)?
[QUOTE=Darwin226;50401740]I've never wrote a compiler personally but having to manually handle the function stack sounds pretty intimidating. Do you have to do that in LLVM (this might not even be necessary in assembly; I've only ever wrote some archaic flavor of it)?[/QUOTE]
Nah, that's one thing LLVM does for you. It's like mid-way between C and assembly. You still have to break down expressions into individual operations, and control flow uses labels and branches, but you can define and call functions with LLVM's syntax.
-snip-
who lies on the Internet?
[QUOTE=chimitos;50402243]-snip-[/QUOTE]
How did you come to the conclusion Microsoft bought Ubuntu?
[editline]27th May 2016[/editline]
You link to a google search query, where some results are rumors, some are about partnering and 2nd link is an april fools article.
[QUOTE=cartman300;50402282]How did you come to the conclusion Microsoft bought Ubuntu?
[editline]27th May 2016[/editline]
You link to a google search query, where some results are rumors, some are about partnering and 2nd link is an april fools article.[/QUOTE]
Okay well my bad. I didn't see the date on the first link and the rest of the page had so many headlines from other sites that I assumed it was true.
[vid]https://my.mixtape.moe/acivwe.mp4[/vid]
Added help text, progress bar, folder loading, play/pause, VU meter and pwetty colors.
I'm pretty sure there is still something wrong with how the frequency spectrum gets displayed but I can't figure out what or why, it just looks kinda wrong sometimes.
Next up is smoothing out the animations a bit to make them less jerky, tho I have no idea how to do that yet.
[QUOTE][IMG]http://i.imgur.com/dEd2r2H.jpg[/IMG][/QUOTE]
Working on a C++ bone ESP for garrys mod. Took me like < 5 mins to make which is pretty funny tbh.
[code]
if (g_pEngine->IsInGame())
{
for (int i = 0; i < entitylist->GetHighestEntityIndex(); i++)
{
CBaseEntity* cBaseEntity = (CBaseEntity*)entitylist->GetClientEntity(i);
CBaseEntity* cLocalPlayer = (CBaseEntity*)entitylist->GetClientEntity(g_pEngine->GetLocalPlayer());
if (!cBaseEntity)
return;
cDrawing.DrawBones(cBaseEntity, 255, 0, 255, 255);
}
}
[/code]
once again just hooked paint traverse and drew on it.
First cehck if in game
then looped through players
then draw bones
[QUOTE=nutcake;50402782][vid]https://my.mixtape.moe/acivwe.mp4[/vid]
Added help text, progress bar, folder loading, play/pause, VU meter and pwetty colors.
I'm pretty sure there is still something wrong with how the frequency spectrum gets displayed but I can't figure out what or why, it just looks kinda wrong sometimes.
Next up is smoothing out the animations a bit to make them less jerky, tho I have no idea how to do that yet.[/QUOTE]
Bass has more power than higher frequencies, this is normal. Read on:
Human ear frequency response
[IMG]http://copyright.lenardaudio.com/laidesign/images/a10/a10_sensitivity.gif[/IMG]
Inverse of that is Equal-loudness contour,
[url]https://en.wikipedia.org/wiki/Equal-loudness_contour[/url]
[IMG]https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/Lindos1.svg/600px-Lindos1.svg.png[/IMG]
I know it's clusterfuck, those things aren't exact but were measured overtime with lots of testing.
TL;DR You need to multiply frequency amplitudes with equal-loudness contour
[QUOTE=Fourier;50402981]Bass has more power than higher frequencies, this is normal. Read on:
Human ear frequency response
*pic*
Inverse of that is Equal-loudness contour,
[url]https://en.wikipedia.org/wiki/Equal-loudness_contour[/url]
*pic*
I know it's clusterfuck, those things aren't exact but were measured overtime with lots of testing.
TL;DR You need to multiply frequency amplitudes with equal-loudness contour[/QUOTE]
Aw man, is there like a mathematical function or formula for that or am I gonna have to input all that data manually?
Thanks for the info btw, this is good to know.
I found approximation which might serve you well:
[url]https://en.wikipedia.org/wiki/A-weighting#Function_realisation_of_some_common_weightings[/url]
[QUOTE=Fourier;50403194]I found approximation which might serve you well:
[url]https://en.wikipedia.org/wiki/A-weighting#Function_realisation_of_some_common_weightings[/url][/QUOTE]
You're the best, thanks dude. :poot:
[QUOTE=nutcake;50403134]Aw man, is there like a mathematical function or formula for that or am I gonna have to input all that data manually?
Thanks for the info btw, this is good to know.[/QUOTE]
Because I like you so much, I wrote a script to run polynomial regression over the datasets from [URL="https://plot.ly/~mrlyule/16/equal-loudness-contours-iso-226-2003/#plot"]here[/URL]. Regression isn't perfect, but the error is pretty small, so these equations should be a pretty good approximation.
[CODE]
### 0 Phons
equation: y = -0.00000x^5 + 0.00000x^4 + -0.00000x^3 + 0.00002x^2 + -0.04883x^1 + 35.55947x^0
average error: 5.0826671717103595
### 10 Phons
equation: y = -0.00000x^5 + 0.00000x^4 + -0.00000x^3 + 0.00002x^2 + -0.05252x^1 + 50.17535x^0
average error: 5.020348291848846
### 20 Phons
equation: y = -0.00000x^5 + 0.00000x^4 + -0.00000x^3 + 0.00002x^2 + -0.05045x^1 + 59.21667x^0
average error: 4.741702409354128
### 40 Phons
equation: y = -0.00000x^5 + 0.00000x^4 + -0.00000x^3 + 0.00001x^2 + -0.04311x^1 + 73.70806x^0
average error: 4.088533039206287
### 60 Phons
equation: y = -0.00000x^5 + 0.00000x^4 + -0.00000x^3 + 0.00001x^2 + -0.03458x^1 + 86.79128x^0
average error: 3.411526246069505
### 80 Phons
equation: y = -0.00000x^5 + 0.00000x^4 + -0.00000x^3 + 0.00001x^2 + -0.02573x^1 + 99.49342x^0
average error: 2.735757909994363
### 100 Phons
equation: y = -0.00000x^5 + 0.00000x^4 + -0.00000x^3 + 0.00001x^2 + -0.01677x^1 + 112.07565x^0
average error: 2.0982206049060594
[/CODE]
[B]Edit:[/B]
[QUOTE=Fourier;50403194]I found approximation which might serve you well:
[url]https://en.wikipedia.org/wiki/A-weighting#Function_realisation_of_some_common_weightings[/url][/QUOTE]
You sneaky person you. D: