"or if you've never learned linear algebra, think back to after you watched this section". That sentence alone was worth watching this video for. Great video!
"I don't wana include a 3d model for every letter, number, and symbol. That would be ridiculous" Later... "I'll need to add a 3d model for each letter number and symbol"
But those are different, that's just because the game needs those models, but a different game made in this engine obviously won't need a 3D texture for every letter because they probably won't use flying letters as projectiles.
So you're telling me that an American Company had a project called the Manhattan Project aimed to destroy the Japanese hold on the gaming market? Hmmm...
I'm really surprised with how you can just jump around doing different types of things involving programming games. Like, coding nes games in 6502 assembly, coding gbc games with 6502 assembly as well I believe, coding an mmo game using angular, and now coding a 3d game from scratch with DirectX!
8 BIT Minecraft. Like how a widow looks into the sea. Knowing that her beloved has been taken by it, but still waiting, for his return. I too look into this channel, hopelessly awaiting 8BM's return. Although I know it's fate, I still await it's return, feeding myself lies with every breath i take.
Well, rendering hundreds of cubes bellow you as one giant floor is kind of a bad idea What you could do instead is make a single quad which's UV coords go higher than 1, and make sure its texture is set to repeating
I've always been curious and interested about how all of this works on a lower-level software speaking. It is kinda interesting that software engineers do not have to worry about things like this anymore and can just use frameworks but for some reason it doesn't sit right with me.
Underneath, they are clearly very complicated tools, but it's the same as you or I 'building' a computer... you don't need to know anything about electronics. It's like putting together Lego tricks. Writers and artists don't need to understand how paper, ink and paint are made, they just use them. Bricklayers building houses don't have to understand the chemistry of bricks or the physics of adhesion. Car drivers don't need to understand rubber compounds, the physics of steering or the chemistry of petroleum or diesel in order to drive a car. 😉
@@another3997 Consumer is the end user. That how things are. There are so much complex stuff we aren't supposed to worry! For all of this comes out of human cooperation and good labor. Components for tools, tools to assemble creations or products to please a need. And now tools combine. We combine vehicles with radio and speakers, now we add computers and cameras, illumination and even sturdier crafted glass materials. To make things better and to evolve.
@@another3997 Abstracting away all the complicated engine work has allowed so many individuals to create their dream game they never would have otherwise but devs nowadays tend to take it for granted combined with how powerful computers are so long gone are the days of clever optimizations and now we have the standard 500gb aaa game
@@lukeskywalker2 They can and likely want to make it smaller, but they don't have the time or money for that. Why? Because the stupid shareholders demand more, more, more profits.
2:49 "and several DirectX boxes later..." Opportunity to throw a picture of the Dreamcast in that lineage, missed. I don't know why people always forget it was the first DirectX box.
Many people pointed out the floor, so I'll say this instead: Instead of sending an image for each color for the enemies, you can send a single, grayscale image and tint it by multiplying by a color based on their health. Sending data to the GPU is usually the biggest bottleneck, so this should speed things up a bit.
right now i am working on writing my own like, not game engine, but kinda the graphics side of a game engine, mainly for very fancy uis for my use case. i have not gotten to the stage of it being able to draw anything, except drawing pain into my mind. i am certain that it will need significant revisions for it to be useful for someone that isnt me lmao
This is so calming but also explaining really hard things easly without cutting anything out or saying something that changes like ho many buffers direct x has!11!1!
Yo to help with the floor rendering, add a UV multiplier into your base shader and you can gain back a lot of the performance from just using a single plane like you did previously, and scaling the floor UV texture.
9:30 No. A CPU does do SIMD. They have registers of sizes up to 512 bits now (with MTX extensions coming that'll have 1024 or 2048 in the future), and instructions that operate on them as though they were packs of 64/32/16/8 bit registers, in a way it is similar to what GPUs do, but on a far fewer number of, but far larger and more pipelined, and completely out of order, predictive, highly optimized cores. Instead, GPUs use SIMT, Single Instruction Multiple Threads. A GPU is made up of (in nvidia's terms, every vendor calls them something else) many GPC's (General Processing Cluster) that contain many SMs (Streaming multiproccesors) that contain Thread Blocks made up of two Thread Warps, which are basically a pack of 32 execution units that can do memory, floating point or integer related instructions, but no decisions, those are made by the SM controller, and all do waves of the same instruction (or they need to stall if not all of the threads are meant to take the same execution path).
i really hate to say this type of stuff, but where 8bit Minecraft update i don't want to put pressure i just really like this concept and i admire the effort you put into it and id hate to see it all go to waste
@@InkboxSoftware yippie 👍 I also want to add that I don't really mind the time it takes. In the sense that If gave devs take time for their mental health it will end up into better and more fun results. so take your time, no pressure
This was so great, and you really did a fantastic job explaining the CS concepts in the video. I’m going to say the next thing purely because I want to see this channel continue to grow, but you might want to consider getting a slightly better mic or teaching yourself to speak with more inflections and pauses. It would really help with some of the humor in the video and would enhance the learning experience.
I just realized that you have been able to make a lot of games with different programming languages, and I remembered today that when it comes to programming you need to focus more on being a great problem solver rather than remembering syntax, and I believe that will help you be able to learn any programming language. I learn't about this from Fireship's video, how to learn to code - 8 hard truths. Do you ever have any difficulties with making new games with different programming languages? And if not, do you think there's a reason?
All high level languages are basically the same, so it really comes down to what platform do you want to write a program for. Windows, c#, c++. Web, javascript. Linux, c, c++. Just want it to work and don't care how: python. But of course the most fun: assembly.
You'll probably never see this but thank you this was a very fun watch, I've always wanted to do this process myself but I'm extraordinarily lazy and probably never will.
The intro is clearly axed on giving viewers a basic knowledge that most don't have for the rest of the vid,is this some sort of new trend where people do their best to discard intros and context in the videos because of their ever shortening attention span
i would have been surprised if they _had_ used vulkan. the amount of boilerplate you need to write to get basic rendering is significantly much more than that of D3D11 or OpenGL.
@@chromosoze open gl is old and bad 🥱, vulkan is open source and not more compatible but definitely an alternate, it interacts with the computer system way better, open gl is limited becuase it’s old and needs to keep its compatibility
0:09 I have never plugged a monitor into any Raspberry Pi I've owned, if it would make it cheaper (no HDMI licencing fees) I'd like them without any graphical capabilities
@@cool-person1161 Well, I own 17, the 16 that are in a cluster don't need any display out, I may as well keep display out on the 17th (I may actually use it one day, if making a game I can check on the worst case scenario hardware-wise)
Very cool video! Now do a triangle rasterizer yourself and do a complete software renderer ;) (Also you don't need to create many objects for the ground, you can just repeat the texture on a single ground plane, by providing sufficiently large UV values and setting the texture clamping value) (Also you don't need to have non-static geometry for text, you could just as well use uniforms in your shader to get texture coordinates for your letters)
If you re-compile the video in parts and change it a bit, you can explain the 101 of reverse-engineering 3d game files 😉 all these files contain is vertex and index buffers ❤️
When creating the sphere guys, whyd yolu give them a texture? Wouldnt it be much more efficient to have vertex colored them? Or even just create a 4×4 texture with all the colors you need in the different pixels, then scale the uvs for the faces down to 0 and position them on the pixel that you want instead of creating a diffuse map for the whole thing
The way unity handles UI is to rendering it on a plane and stick it too the camera and use orthogonal view on it, rather than another ortho gfx pipeline... it renders faster UI being the worst fps hog to begin with. it also transfers CPU to GPU for some calculations.. also UI libs just need a renderer.. and you can get away with only windows buttons and text fields and editboxes with nothing else
Clearly a fan of Duke Nukem. I'd love to see this engine fully fleshed out and open sourced, if only to add to the competition for game engines. Although, I do wonder why DirectX instead of OpenGL or Vulkan, since those are far more cross platform.
For a beginner project that's a recipe for a bad time. DX12 and Vulkan are far more hands off than DX11 or OpenGL, with many more opportunities to screw things up if you don't know exactly what you're doing. For hobby projects I would just stick with the older APIs, they aren't going anywhere.
I never done any DirectX stuff but I don't think you need any matrix (orthographic or perspective) to render 2D stuff. You can just use a different shader with only 2 values for position, and hardcode z coord in there. At least that's what I do in OpenGL/Vulkan
For the HUD elements can't you just ignore the projection and modelview matrices? Doesn't that put it directly in front of the screen? sorry if thats idiotic
Yes. Not sure why he thought he had to “undo” the movement. Your hud coordinates are just screen space coordinates. Or if you want to be fancy and screen size invariant your hud coordinates are from 0-1 as a percentage of screen size then you only need to multiply by 2 and subtract 1 to put it into NDC in the vertex shader.
"or if you've never learned linear algebra, think back to after you watched this section". That sentence alone was worth watching this video for. Great video!
"I don't wana include a 3d model for every letter, number, and symbol. That would be ridiculous"
Later...
"I'll need to add a 3d model for each letter number and symbol"
But those are different, that's just because the game needs those models, but a different game made in this engine obviously won't need a 3D texture for every letter because they probably won't use flying letters as projectiles.
I made my own 3D game engine as part of my education. The feeling of making something from nothing is truly unique!
It's a great feeling for sure
So you're telling me that an American Company had a project called the Manhattan Project aimed to destroy the Japanese hold on the gaming market? Hmmm...
Hmmm...
Hmmm...
is that what known as illuminati lol
@@Neelesh144 The la li lu le lo!
@@MS-LOL ra ri ru re ro*
I don't know a damn thing about programming. I didn't understand a damn thing he said. I did have a great time.
Glad I’m not the only one..had no clue about what he was on about but the knowledge is impressive!!!
I know programming. I didn't understand a damn thing he said. I did have a great time. :D
my 10 year old sister can understand this.
@@juanmacias5922 real
Then you would likely become a great programmer. Get after it homie. It's fun!
I'm really surprised with how you can just jump around doing different types of things involving programming games. Like, coding nes games in 6502 assembly, coding gbc games with 6502 assembly as well I believe, coding an mmo game using angular, and now coding a 3d game from scratch with DirectX!
GBC is incompatible with 6502 assembly. you're thinking of SM83.
He is too smart.
thats what recreational programming is all about tbh
just messing around in whatever you want
Gameboy is z80
@@instantlymeatified Gameboy is SM83, as someone above you already said
My brain is melting trying to understand the math, but it's still really cool!
Just... calculus of points and data make funny shapes on screen yee!
8 BIT Minecraft.
Like how a widow looks into the sea. Knowing that her beloved has been taken by it, but still waiting, for his return.
I too look into this channel, hopelessly awaiting 8BM's return. Although I know it's fate, I still await it's return, feeding myself lies with every breath i take.
2 weeks....
Still waiting after 10 months and still no 8bm. I wonder if Inbox decided the game was done
@@j-w-8 he said 8BM was just on hiatus in another comment.
Man, the project is cool and all but your presentation is A++, incredible work dude.
Well, rendering hundreds of cubes bellow you as one giant floor is kind of a bad idea
What you could do instead is make a single quad which's UV coords go higher than 1, and make sure its texture is set to repeating
Good idea, I'm sure I could write a shader for that
@@InkboxSoftware you don't need any shader for that, you just need to configure the sampler differently...
@@aspectreishauntingeurope wouldn't you need to edit the code in the shader to do that then?
@@soryabuscompany no, samplers are created on the cpu.
@@soryabuscompany Nah, theres some "Hints" or w/e its called that you could have repeating texture, clamp texture or just a single texture.
I've always been curious and interested about how all of this works on a lower-level software speaking. It is kinda interesting that software engineers do not have to worry about things like this anymore and can just use frameworks but for some reason it doesn't sit right with me.
Underneath, they are clearly very complicated tools, but it's the same as you or I 'building' a computer... you don't need to know anything about electronics. It's like putting together Lego tricks. Writers and artists don't need to understand how paper, ink and paint are made, they just use them. Bricklayers building houses don't have to understand the chemistry of bricks or the physics of adhesion. Car drivers don't need to understand rubber compounds, the physics of steering or the chemistry of petroleum or diesel in order to drive a car. 😉
@@another3997 That does make sense, should be left to computer engineers to worry about 😅
@@another3997
Consumer is the end user. That how things are. There are so much complex stuff we aren't supposed to worry! For all of this comes out of human cooperation and good labor. Components for tools, tools to assemble creations or products to please a need. And now tools combine. We combine vehicles with radio and speakers, now we add computers and cameras, illumination and even sturdier crafted glass materials. To make things better and to evolve.
@@another3997 Abstracting away all the complicated engine work has allowed so many individuals to create their dream game they never would have otherwise but devs nowadays tend to take it for granted combined with how powerful computers are so long gone are the days of clever optimizations and now we have the standard 500gb aaa game
@@lukeskywalker2 They can and likely want to make it smaller, but they don't have the time or money for that.
Why? Because the stupid shareholders demand more, more, more profits.
2:49 "and several DirectX boxes later..."
Opportunity to throw a picture of the Dreamcast in that lineage, missed. I don't know why people always forget it was the first DirectX box.
Many people pointed out the floor, so I'll say this instead:
Instead of sending an image for each color for the enemies, you can send a single, grayscale image and tint it by multiplying by a color based on their health.
Sending data to the GPU is usually the biggest bottleneck, so this should speed things up a bit.
This is an absolutely amazing breakdown of the graphics pipeline
right now i am working on writing my own like, not game engine, but kinda the graphics side of a game engine, mainly for very fancy uis for my use case. i have not gotten to the stage of it being able to draw anything, except drawing pain into my mind. i am certain that it will need significant revisions for it to be useful for someone that isnt me lmao
Instead of using a bunch of cubes for the floor, just make one large cube and set the UV map to > 1 so the texture will repeat
This is so calming but also explaining really hard things easly without cutting anything out or saying something that changes like ho many buffers direct x has!11!1!
Yo to help with the floor rendering, add a UV multiplier into your base shader and you can gain back a lot of the performance from just using a single plane like you did previously, and scaling the floor UV texture.
Thank you for consistently proving us with subtitles even though I may not understand everything you talk about. :)
I gotta be honest, that 3d UI thing you did seems cursed.
it is indeed incredibly cursed and stupid lol
the more you dig into the workings of a computer, the more horrific things you find.
@@lazerpie101 nah not really tho the grease sits atop
wait till you find out about the full screen quad and its even more cursed cousin the full screen tri
@@RADkate that doesn't sound that bad as long as it's just one polygon. Still weird though
Wow, that game was really realistic
9:30 No. A CPU does do SIMD. They have registers of sizes up to 512 bits now (with MTX extensions coming that'll have 1024 or 2048 in the future), and instructions that operate on them as though they were packs of 64/32/16/8 bit registers, in a way it is similar to what GPUs do, but on a far fewer number of, but far larger and more pipelined, and completely out of order, predictive, highly optimized cores. Instead, GPUs use SIMT, Single Instruction Multiple Threads. A GPU is made up of (in nvidia's terms, every vendor calls them something else) many GPC's (General Processing Cluster) that contain many SMs (Streaming multiproccesors) that contain Thread Blocks made up of two Thread Warps, which are basically a pack of 32 execution units that can do memory, floating point or integer related instructions, but no decisions, those are made by the SM controller, and all do waves of the same instruction (or they need to stall if not all of the threads are meant to take the same execution path).
I have no clue what i read but it seems smart so have a like lol
this you? 🤓
i really hate to say this type of stuff, but where 8bit Minecraft update
i don't want to put pressure i just really like this concept and i admire the effort you put into it and id hate to see it all go to waste
2 more weeks
@@InkboxSoftware yippie 👍
I also want to add that I don't really mind the time it takes. In the sense that If gave devs take time for their mental health it will end up into better and more fun results. so take your time, no pressure
This was so great, and you really did a fantastic job explaining the CS concepts in the video.
I’m going to say the next thing purely because I want to see this channel continue to grow, but you might want to consider getting a slightly better mic or teaching yourself to speak with more inflections and pauses. It would really help with some of the humor in the video and would enhance the learning experience.
I just realized that you have been able to make a lot of games with different programming languages, and I remembered today that when it comes to programming you need to focus more on being a great problem solver rather than remembering syntax, and I believe that will help you be able to learn any programming language. I learn't about this from Fireship's video, how to learn to code - 8 hard truths.
Do you ever have any difficulties with making new games with different programming languages? And if not, do you think there's a reason?
All high level languages are basically the same, so it really comes down to what platform do you want to write a program for. Windows, c#, c++. Web, javascript. Linux, c, c++. Just want it to work and don't care how: python. But of course the most fun: assembly.
20:34 okay that was smoother than my brain, totally subscribed, maybe i'll get smarter!
You'll probably never see this but thank you this was a very fun watch, I've always wanted to do this process myself but I'm extraordinarily lazy and probably never will.
Just started the video, I’ll predict that it’s sponsored by Brilliant
🤯🤯🤯
Yes
Oh my god that outro music brought back memories....
That's a really good choice for an outro track
7 minutes in and my mind is blown. Depth buffer is the smartest thing I've heard in a while.
I absolutely love your mic, it reminds me of a video from 2015, please keep it 😭🙏
This is absolutely stunning!
I definitely need to keep revisiting this video, you are doing great work just creating educational videos like these! Very informative.
Instead of a different texture for each colour, you could have used vertex colours.
6:28 oops typo. Should be “fragments”
Great video! This is so fun! You've done great! Would be cool to see more of this!
Well done! ❤ Next steps: animation and shadows.
Video starts at 4:50
How so
The intro is clearly axed on giving viewers a basic knowledge that most don't have for the rest of the vid,is this some sort of new trend where people do their best to discard intros and context in the videos because of their ever shortening attention span
Thank you lil bro 🙏
@@Sunrymoonprobably to skip the sponsor segment
It actually starts at 0:00, like every video. Hope this helps! 🥰
At this time, it is impossible to have watched the entire video, because it was released 3 minutes ago.
watched it at 9x speed nerrrrd
Wrooooooooooong!@@xronium
An LLM could!
nuh uh just watch it at 2x speed
youtube counts a view after a mere 30s.
Love the cheese icon in 19:20
I’m surprised you didn’t use vulkan
i would have been surprised if they _had_ used vulkan. the amount of boilerplate you need to write to get basic rendering is significantly much more than that of D3D11 or OpenGL.
@@chromosoze open gl is old and bad 🥱, vulkan is open source and not more compatible but definitely an alternate, it interacts with the computer system way better, open gl is limited becuase it’s old and needs to keep its compatibility
I feel like he foreshadowed this by asking us to not ask whether the OLED watch could play Doom before. Unlikely, but still. 🤔
Please never quit youtube
I can't wait for Inkbox to discover SDF for 2d Text rendering^^
Unreal is nothing against this! Call of Duty needs to be done with that realistic game engine.
0:09 I have never plugged a monitor into any Raspberry Pi I've owned, if it would make it cheaper (no HDMI licencing fees) I'd like them without any graphical capabilities
Better to have it and not need it, than need it and not have it
@@cool-person1161 Well, I own 17, the 16 that are in a cluster don't need any display out, I may as well keep display out on the 17th (I may actually use it one day, if making a game I can check on the worst case scenario hardware-wise)
i ❤ tty over usb
Arduino?
@@SSukram_ I need something more powerful than that and cheaper
I misread “from Scratch” as in the programming language “Scratch”
That would still be absolutely fucking epic
these games are getting really realistic!
I learned so much in this short time wow
Pure genius!
Wow that sponsor transition was smooth
At this time, it is completely possible to have watched the entire video, because it was posted 3 weeks ago.
Very cool video! Now do a triangle rasterizer yourself and do a complete software renderer ;)
(Also you don't need to create many objects for the ground, you can just repeat the texture on a single ground plane, by providing sufficiently large UV values and setting the texture clamping value)
(Also you don't need to have non-static geometry for text, you could just as well use uniforms in your shader to get texture coordinates for your letters)
you made 90's bowling alley animations into a game
Since you programmed in gameboy and now 3d maybe it's time for 3d software renderer on gba? 😅
Great video!
There are bunch of those! Look up the Super Mario 64 GBA version some guy is making, it's incredible. Oh and the Tomb Raider one
crazy that 3D rendering is just... how it works.
I did not understand much but you're underrated
WOOOOOOO NEW INKBOX VIDEO FUCK YEAHH LETS GOOOOOOOO
A masterpiece of a video game
This is insane. I don't understand much of it, but who cares? I still enjoy it
People who do care, care
it's really not that insane
@@bosballl I guess I'm just stupid
@@DerKlemm-Crafter No
Inkbox please make this a tutorial step by step so that we can make our own 3d directx engine PLEASE!
If you re-compile the video in parts and change it a bit, you can explain the 101 of reverse-engineering 3d game files 😉 all these files contain is vertex and index buffers ❤️
“Bill Gates, you never cease to amaze the rock” sounds like a quote from a wattpad fanfic
super mario land's ending song as an outro? 10/10
To quote Ryan George: Wow wow wow... wow
This was awesome!
i feel so smart watching these 🔥🔥
Hell yeah! I'm making my own game engine with wgpu, I love custom-made engines!
briliant is taking over
now make your own rendering engine
Why Windows, Inkbox? I would never go back, despite the nostalgia
I understand none of this but am still watching it.
Serene ! this is a serene and cubical 3-D Game Engine
고요하고 입체적인 3-D 게임 엔진입니다
21:50 Wasn't that exactly what you tried to avoid by putting written characters on a texture instead of 3D-modeling them?
When I saw the thumbnail it was 2 views 34 seconds ago, never been that early for a long time
this guy made a 3d engine FROM SCRATCH
17:15 Me who understands zero percent of computer science: Ahh, rookie mistake.
"But I don't want to add every 3D render of every single letter and symbol into the game"
*does it anyway
Bill Gates in DOOM with a leather trenchcoat and shotgun is CRAZYYYY
I'm a big fan of graphics
When creating the sphere guys, whyd yolu give them a texture? Wouldnt it be much more efficient to have vertex colored them? Or even just create a 4×4 texture with all the colors you need in the different pixels, then scale the uvs for the faces down to 0 and position them on the pixel that you want instead of creating a diffuse map for the whole thing
thats probably why i like programming. U can literally create everything from nothing.
it's not exactly nothing, there's the IDE, OS, libraries and limitations include performance and size considerstions
El Doby 🔥
Protecting the cheese from aliens?
Wallace & Gromit FPS shooter
cheddar video dude!
The way unity handles UI is to rendering it on a plane and stick it too the camera and use orthogonal view on it, rather than another ortho gfx pipeline... it renders faster UI being the worst fps hog to begin with. it also transfers CPU to GPU for some calculations.. also UI libs just need a renderer.. and you can get away with only windows buttons and text fields and editboxes with nothing else
0:09 what are you doing 🗣️🗣️
Clearly a fan of Duke Nukem. I'd love to see this engine fully fleshed out and open sourced, if only to add to the competition for game engines. Although, I do wonder why DirectX instead of OpenGL or Vulkan, since those are far more cross platform.
nice man
I would have just used vulkan tbh, not a fan of windows :/
For a beginner project that's a recipe for a bad time. DX12 and Vulkan are far more hands off than DX11 or OpenGL, with many more opportunities to screw things up if you don't know exactly what you're doing. For hobby projects I would just stick with the older APIs, they aren't going anywhere.
@@MrMoon-hy6pn I've had a smoother experience with vulkan than OpenGL
@@Hellscaped I’m quite surprised at that. What about OpenGL did you find less smooth? Is it all the legacy cruft, the state management, etc?
@@MrMoon-hy6pn legacy bs
I never done any DirectX stuff but I don't think you need any matrix (orthographic or perspective) to render 2D stuff. You can just use a different shader with only 2 values for position, and hardcode z coord in there. At least that's what I do in OpenGL/Vulkan
20:39 i feel like i've seen this font in a certain viral video
What's the chiptune music at the start of the video called?
5:23 Deivc
lol
For the HUD elements can't you just ignore the projection and modelview matrices? Doesn't that put it directly in front of the screen? sorry if thats idiotic
Yes. Not sure why he thought he had to “undo” the movement. Your hud coordinates are just screen space coordinates. Or if you want to be fancy and screen size invariant your hud coordinates are from 0-1 as a percentage of screen size then you only need to multiply by 2 and subtract 1 to put it into NDC in the vertex shader.
why use the proprietary directX, especially for hobbyist purposes, when there is OpenGL / Vulkan?
Had to start somewhere, and if you have Windows, you have DirectX
@@InkboxSoftware just as you have opengl ;-)
why don't you install Gentoo?
@@InkboxSoftware but vulkan works anywhere (techinaclly directx does too but thats only because the directx to vulkan layer works anywhere)
I think it's because directX is the most popular set of APIs for rendering.
Thumbnail has looks interesting
0:02 HOLY CRAP IS THAT AN UNDERTALE REFERENCE (joke)
Wow. Looks like Unity 😮
Frustrum, not Frustum. Same root as frustrated. Sorry for sounding pedantic, just a tic of mine.