- 22
- 138 675
AmrMakesGames
Приєднався 17 жов 2022
Hi, I'm Amr, an aspiring game developer. Join me as I learn, fail, and share my experience with you!
How to Optimize Collision in Unreal Engine
Watch Part 1 Here: ua-cam.com/video/o6woG99n248/v-deo.html
Resources
--------------------------------------------------------------------------------
- Async Queries Video:
ua-cam.com/video/V5T8w7LT_WE/v-deo.htmlsi=CN_4rgoIoAPSwWaG
- Async Queries Article:
medium.com/@bryan.corell/using-async-collision-traces-in-unreal-engine-4-2cc312c825f5
--------------------------------------------------------------------------------
Timestamps:
00:00 Intro
01:12 What Can Impact Collision Performance?
02:15 Scene Setup
03:30 Optimizing Collision Geometry
06:45 Protecting Against Complex Collision Geometry
07:55 Optimizing Collision Queries
11:22 Considering Async Queries
13:00 Recap
--------------------------------------------------------------------------------
#collision #physics #unrealengine #gamedev
Resources
--------------------------------------------------------------------------------
- Async Queries Video:
ua-cam.com/video/V5T8w7LT_WE/v-deo.htmlsi=CN_4rgoIoAPSwWaG
- Async Queries Article:
medium.com/@bryan.corell/using-async-collision-traces-in-unreal-engine-4-2cc312c825f5
--------------------------------------------------------------------------------
Timestamps:
00:00 Intro
01:12 What Can Impact Collision Performance?
02:15 Scene Setup
03:30 Optimizing Collision Geometry
06:45 Protecting Against Complex Collision Geometry
07:55 Optimizing Collision Queries
11:22 Considering Async Queries
13:00 Recap
--------------------------------------------------------------------------------
#collision #physics #unrealengine #gamedev
Переглядів: 1 290
Відео
How to Understand and Fix Collision in Unreal Engine
Переглядів 9462 місяці тому
Watch Part 2 Here: ua-cam.com/video/6KXUEbv1CIA/v-deo.html Resources - George's Talk: ua-cam.com/video/xIQI6nXFygA/v-deo.htmlsi=-xW0oVuP1-eZdmzG - Collision in Unreal: dev.epicgames.com/documentation/en-us/unreal-engine/collision-in-unreal-engine - Collision Filtering Tech Blog: www.unrealengine.com/en-US/blog/collision-filtering - Collision Queries in Unreal: dev.epicgames.com/documentation/en...
How to Understand New Codebases Efficiently
Переглядів 8484 місяці тому
How many times have you found yourself lost in a new large and unfamiliar codebase, and didn't know how to break into it? You are wondering if your way of navigating a new codebase and learning it is good enough? And if there are any better techniques you can use to understand this codebase and any legacy code efficiently? In this video, we'll go over some of the Best Practices we can apply whe...
How to Clean Up Your Unreal Blueprints (and Why?)
Переглядів 1 тис.5 місяців тому
How many times have you started working on a blueprint or got back to a blueprint you wrote a couple of weeks or months back in time, only to find it messy? Wouldn't it be easier if it was written in a clean and tidy way, so you could get back to extending or understanding it without wasting a lot of time? Today, we're going to take a spaghetti blueprint and pay its technical debt by turning th...
Component vs Interfaces vs Abstract Classes (When to Use What?)
Переглядів 1,9 тис.6 місяців тому
Component vs Interfaces vs Abstract Classes (When to Use What?)
Unreal Debugging Tools I Wish I knew earlier!
Переглядів 9 тис.7 місяців тому
Unreal Debugging Tools I Wish I knew earlier!
Mastering UI Panels and Pop-ups in Unreal Engine
Переглядів 4,6 тис.9 місяців тому
Mastering UI Panels and Pop-ups in Unreal Engine
Level Up Your UI Communication with Unreal ViewModels
Переглядів 7 тис.11 місяців тому
Level Up Your UI Communication with Unreal ViewModels
How to create Modular and Scalable UI systems in Unreal Engine
Переглядів 105 тис.Рік тому
How to create Modular and Scalable UI systems in Unreal Engine
One Year of Freelancing as a Game Developer | My Full Experience
Переглядів 2,5 тис.Рік тому
One Year of Freelancing as a Game Developer | My Full Experience
How I Learned Game Development (Mistakes & Lessons Learned)
Переглядів 1,8 тис.Рік тому
How I Learned Game Development (Mistakes & Lessons Learned)
hi, may I know what should i do if i wanted to change to other font, i have modified it on the graph but it doesn't give me the output, instead it gives me like a box of saying basic latin, circling the letter A (i couldn't attach picture here, so im describing) still a beginner, rly appreciate the guidance here thank youu :>
Would it be wrong to use a Canvas panel for the "layer" widget if i want to be able to display multiple widgets at the same time? it seems with your code no matter what is added to the screen it removes everything else. But what if the player interacts with a chest and now i need to show the inventory widget(game) and the chest widget inventory(game as well or modal?). Should that be handled as a modal then? Can your modal setup display multiple widgets or is it still locked to 1 widget at a time?
No, it wouldn't be wrong, I encourage you to experiment and extend it since not allowing multiple widgets in the same layer is a limitation of this simple system, or at least not how it was designed. This is something I'm planning to add, and a good starting point is to either look into overriding WBP_Layer's PushWidget function, or to look into the UI Extension plugin and how it's used in Lyra. But how I would go with your case is, as you said, keep the inventory widget a game menu and the chest widget a modal.
@AmrMakesGames ok if I could ask 1 more question since you seem pretty knowledgeable about UI and I am pretty entry level. How much of your functionality is already covered in commonUI? I setup your system to take in common user widgets and common activatable widgets because I want to use this layer system with that plugin and your system is much more manageable than going full Lyra setup.
The collision query is a complex topic to grasp in the first go. I wish if you could make this a tutorial series to cover the topics as beginner friendly, not sure if you already have something. This is a good refresher video.
Agreed, it is not simple to grasp in one go. I don't have something planned for it, but I feel queries deserve a video of their own. If you have any suggestions, please let me know!
This is great content, but please when showing blueprints show the whole blueprint code to the end, even for a few seconds. Saves some annoyance with having to download and run the project, if everything is already on screen.
I'm thankful for your feedback and sorry for the annoyance, I'm trying a couple of ways to improve my editing to show what matters only and avoid excessive transitions, especially at the wrong time. I would appreciate it if you can point me to sometime stamps so I can avoid it later :)
@@AmrMakesGames Only 1instance near the start at 3:50. There is a cut to the next function. The rest of the video is fine and very informative!
for me most challenging thing in UI was to make menu usable not only mouse but keyboard only and gamepad only. And let people rebind keys using only gamepad. had to turn off the standard windows focus system....
Tbh this is challenging for me as well, the way input routes throught slate and gets bubbled or not deserves a video on its own, and is something I don't have a full grasp of yet!
@@AmrMakesGames Why not just use Common UI, you get gamepad out of the box practically, keyboard is little more tricky to get.
@hubertkrzykalski definitely not against it, and I do use it for my own projects. But two things, you don't always work alone or on a project compatible with it, and the second and more important is to understand how it does what it does under the hood.
@@hubertkrzykalski in my case it is ugly not controllable.. and it is randomly losing focus and became unusable.
@@AmrMakesGames That makes a lot of sense!
Heads up btw the Lyra project uses gameplay tags to push UI content to certain layers which is way more modular. Unfortunately this only works with Common UI
Thank you for the heads up, but we actually use gameplay tags in this system, and it is independent from Common UI.
@ really I didn’t really know that. Also the project looks great 👍
Hell of a well made tutorial! Thanks! I'm coming from Unity and am pretty excited about this as a replacement for Scriptable Objects as a middle man.
I have NO IDEA, but could I use this to create high performance and rich (animated) UI for embedded Linux (in car infotainment device)? Most of the time I would need UI components like (text fields, buttons, date picker, and other UI components seen in advanced infotainment like Tesla”s)
I have NO IDEA :) Can you please give me more info on what you're trying to do?
Background music is a bit loud, but the information is invaluable! BTW, the music isn't "bad" just a bit loud for me.
Appreciate your feedback, will keep it in mind
Awesome content! thanks for sharing
Bro, can you create a modular interaction system capable of managing how to interact with objects? For instance, it could require being near the object, looking directly at it, or simply being in the same direction. Additionally, the interaction method could involve pressing a button once or holding it for a certain duration. I hope you can make a tutorial about it soon or share tips for building such modular systems.
Added to my content list, do you have any further requests or features for such a system so I keep it in mind?
Dynamic QTE system
Tip on Custom Icon fonts. There are Alt codes built into windows. such as • ♥ ♫ ☼ ♠ ♂ ♀ ▲ ▼ æ ± so a toggle button could be in all text as [ • Hold ] or a sound settings button could be [ ♫ ]. Google `alt code key characters`
Thanks for the nice tip, Cody!
Excelent video. I'm just stuck on a problem and I hope you may help me. My project is of a god sim/village survival game that requires many UI elements to be visible and interactible at all times (like Oxygen Not Included or Rimworld). I've implemented this system in it, the layers and UI elements are created normaly but the buttons become unselectable. If I simply throw the elements in the primary layout they work normaly, but when they are created by the layers system they can't be clicked. I've tried fixing it but know whats the cause or how to fix. Please help.
Happy to see the system implemented in your project and sorry for the late reply. I believe this is happening in "ShowTopWidget" function in WBP_Layer, because when we show the top widget we set its visibility to "Not Hit-testable" instead of "Visible", expecting that the top widget contains a Visible button within it and not a button itself. In short, setting this to Visible instead should fix it. Thanks for the heads up and this should be turned into a parameter in a more sophisticated implementation of such system.
@@AmrMakesGames thanks for the help. I didn't even think to look inside that function.
ua-cam.com/video/_0aNOo2JVSI/v-deo.html In bottom left corner, there are few variables that is private. What are they?
I believe you're referring to the Layer Widgets I added in the designer tap
Hi Amr, awesome video. I really had no concept of how to organize and implement a UI and your videos have helped me see how to implement a scalable UI system in my game. One question I do have, I can't seem to figure out where the debug screen logic is located. Specifically, the mapping between pressing 'U' and where the actual push function lives for that widget. Where does that happen? I don't see it in the character, game controller, or level blueprint.
sorry for the late reply and glad I could help! You'll find it in WBP_PrimaryLayout, mapped to a debug key, and that's why you probably didn't find it with the other input mappings.
i learnt so much in this 20 minute video, more than i have learnt in hours of other random youtube recommends.
I saved this to my watch later, I’m really looking forward to this, thanks for your efforts Amr
I'm happy to hear that, Yahia. It's a pleasure!
ولع الكلام great video very helpful
تسلملي يارب 🙏
يسطا جمدان والله محتوي ذهبي 🤩💛
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
👋 Hey there! If we haven’t met before... I’m Amr, a game programmer passionate about sharing what I learn through my game development Journey, especially the lessons learned from failures and bad practices. Whether you're a beginner or an experienced dev, I hope you’ll find something here to inspire or help you out in your game development journey. ✨ Where Else You Can Find Me: I share shorter tips more regularly on: X (Twitter): x.com/AmrMakesGames Instagram: instagram.com/amrmakesgames/ TikTok: www.tiktok.com/@amrmakesgames If quick ideas and bite-sized content are your thing, come say hi there! 💌 Want to Support My Work or Dive Deeper? Over on Patreon, I share: Exclusive project files from my videos Behind-the-scenes content Access to our private Discord community Join the Patreon Family: patreon.com/AmrMakesGames Let me know if there’s something you’d like to see more of in the comments below. Your support and feedback are highly appreciated!
How about abstract components then? Wouldn’t they fit all described scenarios ?
They will fill most scenarios, but not necessarily all. If I ever need pure logic with no data stored within a class, I'd prefer to go with an interface.
This was amazing. Thank you so much for all the effort, I will bookmark this video for future reference, definitively too much information to get stuck in my head in one watch haha
Your videos came as an angel for me after YEARS of struggling with UMG... I was always solving UI as fast as possible to continue with other areas more gameplay related... Thank you so much for sharing the files, you earned a sub and you will be the first person I do Patreon!
Hi Sebastian, your words mean a lot, and I'm happy I could help!
Hey, thank you for the video!! Since the docs about UMG Viewmodel explain the concepts (which are simple to understand), the implementation can be tricky. Your video gave me a lot of information but also a lot of questions (for example how to handle Data Assets widgets). Would you be so kind as to make a short video with a step-by-step tutorial on implementation? Thanks again✌
Hi, thanks for the feedback, It's on my list, and now I'll give it a higher priority to make a full UI system in detail, explaining view models and more concepts from the other videos.
what is the tool to take note at 11:46 ?
In this system would it be possible to make a thing such as an inventory system that has little item slots that could be dragged into other things?
Yes, you can do draggable widgets like you'd do in other systems. But this is not included in the system out of the box currently
at 17:25 there are some stats on the screen. How did you do that? I tried a few stat commands like stat UI, stat Slate, RHI, SceneRendering, GPU, but they don't look like that. I also tried googling, but couldn't find anything. Any help? Thanks!!
Sorry, I should've pointed that out. It's stat DrawCount
Very useful!
What a great tool
Hi, how does this system do the ordering of the layers? You mention a pop-up can hide the other layers from the viewport, how did that happen? I suppose you could take the Tops of the other layers and hide them.
hi there and good question, The primary layout widget handles that, it is simply an overlay and the layers are ordered inside it. And you're correct, that's one way to hide other layers, we can either hide the top of the layer, or hide the layer itself. The system in the video is simple, and needs more utility functions like hiding other layers, handling fading in and out, etc., but it's a good starting point to build upon.
@@AmrMakesGames Got it, okay thanks
Greetings from Egypt
يا مرحب بابن بلدي يا مرحب
Just as i discover your channel you post, this is a good day, I love your content and I'm looking forward to watch more of your high quality content <3
Welcome abroad, Sherif, and I'm glad you love my content!
جامد جدا وسلاسة الشرح جميلة جدا
طالما سلاسة الشرح جميلة يبقى انا اتعلمت من الفرجة على فيديوهاتك الجميلة يا زياد 🙏
@@AmrMakesGames يعم متقولش كدة دة احنا نتعلم منك يا استاذ عمرو
Is there a difference between a Viewmodel and a singleton? The reason why I ask is because the core idea of they can only have one sounds similar
Sorry for the confusion, a viewmodel can be created in multiple instances and doesn’t need to be one only. The example we discussed at 06:00 is just for consistency and performance because they all read the same source of data. On the other hand, a singleton would be something like the MVVM subsystem, which is a single global instance.
@@AmrMakesGames Do all instance still refer to the same variable?
In that example, yes
Amazing system! Managed to implement it in my projec. However, I can't figure out how to plug an item pickup widget with this system. The item pickup notification widget is a modal, but it gets added to the gamescreen widget, inside a vertical box, via a function that also passes the item data (name, quantity etc). How to use your system in that scenario?
One thing you could do since only one widget can be visible in a layer at a time, is to push the item pickup modal to the Modal layer, since it is a modal. Then, in your game screen where you have a vertical box of items or the inventory, your pick up modal will communicate with inventory widget to add an entry, and then you pop it from its Modal layer. please let me know if something is not clear
What was your intent to have both C++ VM_health and a VM_health blue print? Are they connected? Or are you just showing how to do both?
In general, I think there is a gap between the project and some understanding how this works. I might look up more viewmodel examples to help understand this.
Yes, mainly showing both ways, and looking into how MVVM works in general can help you understand it even better. But if you've any questions, please don't hesitate to ask.
thanks
This is top-notch quality stuff. Keep it up! 5:16 stack trace on warning. and break on exception right after 8:05 rename exec functions Something I've found useful is FAutoConsoleCommand. exec functions can't be called from any class, but cvar callbacks can. Here's two examples in an Actor Component that goes on a player controller: static FAutoConsoleCommandWithWorld DebugSandActorComp(TEXT("Sand.Debug.ActorComp"), TEXT("Debugs the clicked Actor's SandActorComp"), FConsoleCommandWithWorldDelegate::CreateStatic(&USand_PControllerComp::RunDebugSandActorComp)); static FAutoConsoleCommandWithWorld DebugSandJoinPlayerFaction(TEXT("Sand.Debug.JoinPlayerFaction"), TEXT("The clicked Pawn will join the Player's Faction"), FConsoleCommandWithWorldDelegate::CreateStatic(&USand_PControllerComp::RunDebugSandJoinPlayerFaction), ECVF_Cheat);
great talk , this should help me convert lyra to first person i dont know why epic made this very big deep sample but made it really hard to add first person
Yes, it is complex to a high degree, but if we compose down to its components and explore the different llugins and features it uses individually, you'll find how flexible it is. For first person, if you haven't figured it out already, simply understanding how camera modes work in Lyra should make it a little simple for you
@@AmrMakesGames yer its a complex system i have first person working now with arms and hidden TP mesh but think i might have to make my own weapon system as lyra has hard refs to all the weapons instead of soft refs and also every time you change weapon it destroys it and respawns it which is a really bad way to do it , it might be alright for single player but for multiplayer its not very good
I checked out your project and I see that the health amount is data binded to the viewmodel. Is it optimized because the view model won’t fire every frame but only when the view model is called?
Exaclty. It is similar to using event dispatchers, but with an extra advantage that UI won't be coupled to the source of the data, and only to the view model.
TYSM! The frontend in Unreal is really killing me!