Activity

BlueCheckmate

Shipped this project!

I have no more work to do with this, and I just want those 20 minutes counted, because I might as well.

BlueCheckmate

So the shipwright found a really niche bug, so I was experimenting with ways to fix it and it turned out to be a very simple fix, just adding an and to an if statement. The bug was that if you go all in on your last sectional bet, and you still had a numerical bet, it would transfer you into the numerical bet, and you don’t have the option to not bet. Therefore, as the shipwright put it, the game was in a soft lock. I was wondering why this didnt work, and then realized that despite reassigning action to 6, it would overwrite that to 5 if the sectionalbettypecounter equaled the sectionalbettype. So then I added a comparison that if the action has been rewritten to 6, it can;t overwrite to 5, and that was in the same line, so we still finish at 3000 lines. Nice perfect

Attachment
0
BlueCheckmate

Shipped this project!

Hours: 11.69
Cookies: 🍪 37
Multiplier: 3.14 cookies/hr

And another project done, thank you spring break. Did this all in one week. You know, I’m more proud of this project than my last one, the code is more structured and easy to understand, especially the variable names. Some things I could improve upon is the repetitiveness of code, since most of it’s the same lines over and over again with the only thing changing is variable names. There’s probably a few line solution that works, but that’s ok, I’ll learn it in some other project. However, I finished on a very nice number in terms of lines of code. 3000 on the dot. perfect chefskiss. Anyways, I hope you enjoy playing this, and as always, happy gambling. agahappi

BlueCheckmate

And with that, ladies and gentlemen, we conclude our project yahoo-wahoo yay partyowl agahappi. I was going through some tedious work again, when I realized I could do it in a simpler fashion, so I reverted to the last commit, then started again. However, I had some issues with my PC, and it gave up on me and stopped showing me the buttons for committing and pushing. So that took a while to work out. Then we got it all together, and submitted this, and now it is ready for shipping. 3000 whole lines of code, to the dot. chefskiss perfect I think this code makes more sense than my last one, and is overall more organized.

Attachment
Attachment
0
BlueCheckmate

Added a remaining balance so the user can see how much they have left to bet. The last thing to do is make sure the user can’t bet 0 or under, and if they bet all their balance, it automatically directs them to the spin.

Attachment
0
BlueCheckmate

Wahoo badparrot . We finished with all the veryifying bets, and then saving the balance, and writing the new balance. All thats left is making sure the balance is positive.

Attachment
Attachment
0
BlueCheckmate

So we continue with adding payouts. I completed all of the sectional bets, whether your bet was correct or not, and we are left with doing the same thing for numbers, which should take longer.

Attachment
0
BlueCheckmate

So now we get into the payouts, It’s going to be tedious as well of . We started with rows, and will go through everything else. Pretty simple, just checks if your bet verifier is correct, which then will give you payout, and if it isn’t, then you lose.

Attachment
Attachment
0
BlueCheckmate

Holy tediousness tired . I just added that if the spin is this, then these bets are correct. Since the output has not changed, I’ll show you my code, and examples. Note the line this section starts and ends on.

Attachment
Attachment
3

Comments

evanssidhu
evanssidhu 10 days ago

If you want to get rid of tediousness here, it would help to store things like this in an array. I couldn’t help looking through your code and seeing that you did things like this a lot. It must have been really painful to code like this so for your own sanity i’d recommend looking into data structures such as arrays and also into looping structures like for loops as well.

BlueCheckmate
BlueCheckmate 10 days ago

Thank you for the feedback, it was slightly painful, but copy and paste was my friend here. As I get into more coding projects, I will look into data structures and arrays, and loops, etc.

evanssidhu
evanssidhu 10 days ago

No problem. It’s a good rule of thumb that if you find yourself repeating code a lot then there is almost always a way to do the same thing without any repetitions at all. Also as a side note the Toronto Blue Jays field model you made was really cool.

BlueCheckmate

Added the spin function, which will get us the random number. Had a bug though that it would report both numbers as red and black, so I put a in function, so now its going to tell you only one colour.

Attachment
0
BlueCheckmate

Added 6 way bets now, and we are now done with betting! yay . Now we need to move onto the spin, and then what each possible number means which bet is possible, which is also going to be very tedious pf

Attachment
0
BlueCheckmate

Now with the 4 way bets. This is taking quite a bit of time, but at least there are no bugs that I’ve found, which has saved me some time. yay

Attachment
0
BlueCheckmate

Continuing with horizontal 2 way bets, after this only 4 bet corners remain and 6 way 2 rows

Attachment
0
BlueCheckmate

Continuing the same thing with 2 way bets, and only the vertical ones. My eyes are gonna bulge out from the repetitiveness. At least there aren’t any bugs.

Attachment
0
BlueCheckmate

Holy tediousness. Sucks that I’m a beginner coder, what I just did there was probably a much more simpler way, but at least this code is more neat than my last code and the structure makes more sense. Gotta learn step by step, it’s a process guys. Anyways, I added single number betting, almost no bugs though. I’ll show you a sneek peak of my code just to see how much it was. Obviously, I’m not dumb enough to write the same thing 37 times, I copy pasted the format, and filled it in accordingly with the number, but just look at how much code.

Attachment
Attachment
Attachment
0
BlueCheckmate

So before I even got the chance to start the number type bets, I encountered a bug that it wouldn’t switch from sectional to number, I think I had some logic errors of when I would subtract the counter, so I erased all counters and only added when they made a valid bet.

And I also encountered another bug sad2. Even if I inputted a correct answer and made a bet, there would still be a line saying my answer isnt properly written, but I changed everything to if elif….. else, and now it works fine yay2

Attachment
0
BlueCheckmate

I finished with the sectional bet types blobcheers . Added the High/Low option, and made sure that it re-prompts you if you make a mistake in what kind of sectional bet you want to make. I will need to go back and make sure you can’t overbet, or bet 0, and I should probably add a contingency that if you bet all your remaning balance, it skips to the spin part.

But now we get to fun part depression I need to do the same thing for the number section, and that’s going to be majorly repetitive.

Attachment
0
BlueCheckmate

Got the odd/even and red/black working as well with no bugs on the first try yay . I also figured out how to commit and push directly from pycharm, which is an advancement for me. glados-potato. Got the one from yesterday, and the one from today on there.

Attachment
Attachment
0
BlueCheckmate

Continuing with the thirds. No bugs this time yay. I’m getting better agahappi Looks a little too much time spent, but had some trouble with hackatime and wakatime after the new update, and my antivirus protection decided to block the wakatime exe, so I was troubleshooting that, got it to work, and it added a few minutes.

Attachment
0
BlueCheckmate

Onto the columns now for sectional bets, along with a little debugging for both columns and rows. Something new from my previous project that I’m trying to implement here is that if you screw up an answer, it will still allow you to play, unlike my last project. So now with the rows and columns, if you answer incorrectly, the bet counter would think you made a bet, but you actually haven’t, so I fixed that quickly by removing a tally. It might be inefficient but it works. I’d also get an incorrect response even if I put a correct response because I used or instead of and in determining what a wrong answer is.

Attachment
Attachment
0
BlueCheckmate

Moving onto bets for the sectional type, I started with rows. This was very repetitive, as I had do the same lines for all 13 rows, which I just copy pasted the same format. I also created the function for making sure you can only make 6 types of sectional bets, and making sure that it records when you add a bet. I’ll show you a picture of how repetitive my code became. We will need to go back into it and make sure that you cant bet 0 or overbet.

Attachment
Attachment
0
BlueCheckmate

Created the opening question of if you want to play, and what types of bet you want to make. I currently only have sectional and number specific bets, but will branch off into each individually. I didn’t get much done cus I was testing what I currently have to make sure everything’s ok before I move into the next part, and encountered a bug where if I didnt input 1 or 2 for types of bet, it would continuously loop the saying that it needed to be a 1 or 2. Fixed this after figuring out that the question was a couple lines early, and something went wrong, so I moved the question down a couple lines, and it started to work fine.

Attachment
0
BlueCheckmate

Time to start a fresh project. We will be creating a text-based roulette game. Right now, I just started the intro, with the balance writing and saving functions, as well as the intro and rules text.

Attachment
Attachment
0
BlueCheckmate

Shipped this project!

Hours: 9.83
Cookies: 🍪 25
Multiplier: 4.85 cookies/hr

Lowkey, this a pretty mid project if I do say so myself. The code isn’t written well, and it’s text based. I’m pretty new to coding, and suck at writing code. I probably have very shallow knowledge of python, and that’s the only language I know. However, I got this to work, and we leave it at that. I started this project very early in Flavourtown as something to do before I started my major project, which I shipped yesterday. Just thought I’d come back and finish what I started, get a few more cookies cus it couldn’t hurt. Hopefully you enjoy playing a few rounds of blackjack, and remember, the fact that it works is more important than how the code is written.

BlueCheckmate

It’s lowkey been a while since I’ve even glanced at this, but that’s because I was so focused with my other project that I shipped yesterday, and got a nice payout for. I decided to go back into my old project and finish what I started, side bets. After taking a few minutes to see what I was coding, I got back to work, and implemented the payouts for side bets, while making sure regular bets stay intact. I did this eventually, and I can’t even explain it in terms advanced people know because the way I structured this is terrible. But basically the function (a) that controls what exactly is happening right now had to be diverted to side bets before saving the new balance. After that, I spent a lot, and I mean A LOT of time debugging, because my coding sucks pf. After time, I got it to work at a 100% success rate for me at least, so I called it a day, and shipping this. Honestly, this project is quite mid so I aint expecting anything much out of this.

Attachment
0
BlueCheckmate

Shipped this project!

Hours: 32.19
Cookies: 🍪 890
Multiplier: 27.66 cookies/hr

Finally I have finished this project partygfm. It has taken me a lot of work, and I’m super proud of it, despite the fact that there are some flaws. I know that this won’t get very high usability points, but I think the effort that I’ve put in to this, the idea itself, and my storytelling will get higher marks and offset the low marks of usability. Hopefully you enjoy the video I made, and I also hope you like how it looks as well.

BlueCheckmate

So, I filed away more outfield pieces so they could fit. I also filed away infield pieces and hammered them in so it could fit. Slight problem arose, The field should house 43 outfield pieces or something like that but instead it can only house 41, so there are some gaps but it’s ok. I also filed away connectors for the walls. That is what I did for this amount of time logged.

Now heres where I need to go into a little bit of a rant. The lapse video I made does showcase this amount of time logged, but because of school restrictions, somehow I had the same video twice in one video, giving me what I though was a 2x multiplier for this. Therefore, I thought that I would be recording 3h of work on this devlog. This is not the case. That means that I did and extra hour and a half of work that I didnt record because I thought this would devlog 3h. Oh well.

On the bright side, I did finish the project blobcheers partygfm. However, I didn’t record the 1-2h I spent finishing it up.

What I did do off camera was to whittle away some filament from the bottom of the walls so they can fit into the connectors, and make sticker for some logos that are present on the diamond.

While there are many things you can nitpick and make better, I’m super proud of what I’ve managed to create here. This took me a lot of time and effort, and it kept brining back memories of their post-season, the good and the bad. Obviously, things could’ve ended better here, (and in their run), but I deserve to be happy with what I’ve created.

The only thing left to do is make a website displaying this

Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

We continue with the painting on the already blue walls. While the colour matching was exquisite, it was still a little darker blue, so to correct that, we paint the blue walls as well. If I were to paint something else, it would be the sides of the bottom structure, so everything can be blue, but who knows.

P.S: In my opinion, I dont think the photos show the colour that well, since it is a generally dark shade.

Attachment
Attachment
0
BlueCheckmate

Since half the walls are black, and the others are blue, I need to change that. Today, I painted the black ones a spectacular blue colour (props to my design teacher, who also teaches art, for colour matching) owoclap In my opinion, it is a beautiful shade of dark blue, also it might not seem so from the photos. Tomorrow I will continue with the blue pieces just so everything looks the same colour.

Attachment
Attachment
0
BlueCheckmate

We continue with sanding and filing our pieces down. Right now I have the amazing problem of There are 39 pieces fitting in the space of 43 or something like that which is just amazing pf. However, I believe I have made 26 of those fit how they are supposed to happy-pep. I will continue to rigorously sand down those outfield pieces. The infield pieces are also a disaster sadge. I barely did anything on them today, will con tinue to do so tomorrow.

Attachment
0
BlueCheckmate

We are finally done printing everything. Now its assembling, painting, and filing. Right now I connected all of the 4 bottom structures, which included filing the connectors. I will need to paint the 4 bottom structures, but in the meantime, I started assembling the outfield, which took longer than I expected cus I had to guess which pieces went where, then I labelled the pieces so I can put them in a timely fashion next time. I will have to file a lot more, paint some more, and make some stickers. We got this.

Attachment
0
BlueCheckmate

After a few quiet days, I am back. Since I am slightly delayed on 3d printing fb-sad I decided to start making sticker to make the walls look as they should. Right now I created the logo sticker, not to scale. I only have the outline.

Attachment
0
BlueCheckmate

Created the last 3 print codes of which contain the walls, the bottom structures, and all the connectors I’ll need. Now we’ll go into the phase, which is assembling, and possibly painting, as well as making stickers for the walls that model the real stadium logo advertisements. I’m sure pain will also be awaiting me there pf

Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

I think my time modelling in Fusion in complete yay partygfm I tried to make the wall for heinz club 328, with a fence and also the rogers landing deck fence which genuinely looks terrible cryin but at this point I’m in too deep to change things so I’ll live with it (hopefully). I need to create a few more print codes, and then we go to the next phase.

Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

I’m almost done with the design portion! cantwait I finished making all of the wholes in which the connectors will be in. The last part is to model one last outfield wall.

Attachment
Attachment
0
BlueCheckmate

Created the holes that will connect to the bottom structure for the dugout walls, and created the print code for the walls, a second bottom structure, and a few connectors

Attachment
Attachment
Attachment
0
BlueCheckmate

Made the bottom 2 bottom structures ready for printing. Made some outfield walls ready for printing. Created some print codes for said items.

Attachment
0
BlueCheckmate

Started painting the dark grass stripes. Since the filament was quite dark, this is the first coat.

Attachment
0
BlueCheckmate

Added the place for the bottom structure to connect in all 4 places, then started making holes in the walls and bottom structure so the wall can connect. Created a print code for the backstop wall.

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

I created the base form for the structure that will encase all ground-level builds, like the infield/outfield. I need to start making holes so the 4 parts can connect as well as the walls

Attachment
Attachment
0
BlueCheckmate

Since I’m trying to make this as realistic as possible, I need to make that chain-link fence where the bullpen is. However, since I made the height more and not the length or width, I can’t make it proportional. So instead I scaled the wall down and winged it pf Looks semi ok, but at this point, I’ve majorly botched it so I’ll live with whatever comes out of this.

Attachment
Attachment
0
BlueCheckmate

So I realized just how incredibly tiny something will be when its scaled down 500x from 3ft. In light of realizing this, I made sure that the heights of the outfield wall are now 6x than what they would normally be, so it can be taller when scaled down.

Attachment
Attachment
Attachment
2

Comments

Ramerlin Castillo
Ramerlin Castillo about 2 months ago

good

BlueCheckmate
BlueCheckmate about 2 months ago

Thank you

BlueCheckmate

As I continuously work more on this, It pains me to see my royal screw up on the right side of the outfield walls. cryin Nonetheless, I carried on and added the slanted walls that connect the foul walls to the outfield walls, and where on the right side is Heinz Club 328.

Attachment
Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

I painted the light green grass stripes because the green that the filament was is not the correct shade, so I decided to make my own shade.

Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

So I decided to restart my wall extrusion because I realized at the current thickness they are at is going to be quite tiny. So wall thickness is now 1cm. On new things, I extruded the dugout walls, but that will take a serious amount of editing because they aren’t exactly just a solid wall, its kind of like a net design. I’ll have to do this for other walls as well. What fun work awaits me sadge

Attachment
Attachment
Attachment
0
BlueCheckmate

So I started extruding the outfield walls. pf I realize how poorly I modelled the outfield walls. fp We will deal with it, too far deep to change it but its ok. of

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

After many a tries, I finally managed to properly extrude the mound. blobcheers The solution was to just create a new sketch, make my circle, offset a plane, make the other body there, and use loft. I learnt that after watching a youtube tutorial on loft for like 10 seconds. It could’ve saved me so much time, but I guess I need to learn. yahoo-sigh
Now I need to extrude the walls.

Attachment
0
BlueCheckmate

I honestly didn’t achieve anything really. cryin I’m trying to extrude the mound, but it’s more of a pain than I thought. I only have the 10 inch box that is for sure going to be there. Now I need to somehow connect in a linear fashion that the radius of the circle meets the 10 inch box, and make sure theres no small margin at the beginning that goes straight up. I encountered that right now for the past hour and have got really frustrated. Time to learn how fusion work I guess.

Attachment
0
BlueCheckmate

Extruded the last easy thing, and then created print files for everything I have extruded. Onto the hard stuff, which will be the mound and the walls.

On another note, I 3d printed the infield, a warning track part and some dark grass stripes. The spaces in the infield for the bases and foul line is crazy small, barely noticable, so that is not the best news, but I can always paint that sliver white. Unfortunately, I don’t have any images of said 3d printed things.

Attachment
Attachment
0
BlueCheckmate

So the problem was that the 3d slicer reads every measurement in millimeters, even though I saved most of them in not millimeters. :mir-sigh: Therefore, I had to re-save most of my STL files and then put them in the slicer again to get the updated prints. On the bright side, I have 5 prints ready with multiple parts. :happy-pep:

Attachment
0
BlueCheckmate

Started creating 3d print files for everything that is white (Bases, home, foul lines, coach’s boxes, batter’s box, runner’s lane) and the dark green grass stripes. I tried to start the warning track, but I encountered a problem :depression: where it is way way too small than what it should it be. We will figure it out.

Attachment
1

Comments

BlueCheckmate
BlueCheckmate 2 months ago

So the reason it was too small was because the Slicer decides that every measurement inputted will always be in mm, even though I saved it in inches.

BlueCheckmate

I extruded the warning track. This part is too large to make it in 1 print, due to its large length and width. Therefore, I split it into 4 separate parts for printing. I believe all the easy stuff is done, and now I need to extrude the mound and the actual walls, which will be a pain.

Attachment
Attachment
Attachment
0
BlueCheckmate

I extruded all of the bases. Since it’s a 1:500 model, it’s going to be very small, I have to print this at high quality, 0.1mm print.

Attachment
Attachment
Attachment
0
BlueCheckmate

Extruded the grass stripes that will be lighter.
I tried to adjust the darker stripes, but that was a failed attempt.
I also extruded home plate.

Attachment
Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

Things are going much faster now. :agahappi:
I extruded the grass stipes that are darker.
I will now extrude the lighter parts.
I’m facing a problem where the scaled bodies are positioned very far from the center, and I want them to be closer to the center, but I suppose I’ll live with it.

Attachment
Attachment
Attachment
0
BlueCheckmate

I did this much faster, now that I got the hang of it. I extruded all the lines that are painted white. This includes the foul lines, batter’s box, catcher’s box, and coach’s box. Due to them being only 4 inches in real life, it’s going to be a very tiny print, but I’m hoping the .5cm of extrusion should be ok and give it some strength,

Attachment
Attachment
Attachment
Attachment
0
BlueCheckmate

So, after a very unnecessary amount of time. :icri: I finally extruded the infield. It took 1 hour because:

  1. I only wanted certain parts, so I copied my sketch into a new design, and after deleting the parts I didn’t want, the parts that were there were warped. This happened at least 3 times before I gave up.
  2. When I was trying to scale the sketch to the appropriate 1:500, some lines decided not to cooperate and warped as well. I tried twice before I quit that method.
  3. My next method was extruding what I needed first then scaling, lo and behold, Fusion decides the rest of the sketch needs to be deleted because it was not extruded. How wonderful. :ded: :cry_smile:
  4. After copying and pasting the rest of the sketch I needed, I extruded the height I wanted and scaled it 1:500. I forgot this includes the height, and I essentially had a pancake. Had to re-do it. :cryin:
    After all that I finally got what I needed :yay:
    It took way too much time for me to figure that out, but I got it eventually, and now all the other things I need to extrude should be easy.
Attachment
0
BlueCheckmate

Started adding the structure for side bets. Created a list of possible side bets, and the factor of whether or not you can make the bet.

I need to add the payout function

Attachment
Attachment
Attachment
0
BlueCheckmate

After a long hard battle between my sketch and references, I finally determined the width of the grass stripes. The correct width is 10ft, I had it as 9 yesterday
I also made a few infield adjustments
The base sketch is now complete, and we now need to extrude all the individual items

Attachment
0
BlueCheckmate

Adjusted a few infield dimensions

Created the batter’s box, running lane, the wall depth, and the outfield stripes. Any lines that are usually painted white got 4in thickness added to them.

While the outfield stripes look great, the problem is that it looks like I have too many compared to the references I’m using, so I may have been a foot off each stripe since I couldn’t actually find the dimensions for them, which may mean I have to redo that part.

Attachment
Attachment
Attachment
0
BlueCheckmate

I created the basic field structure non-extruded.
Created: The infield, the outfield, the walls, the mound, the rubber, home, bases, warning track. and coaches box

Need to create the batters box, running lane, adding depth to the walls, and the grass stripes

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
1

Comments

BlueCheckmate
BlueCheckmate 3 months ago

Note: All of the dimensions are currently the real dimensions. They will be scaled down once everything is done and ready, to save me the trouble of having to originally scale everything down.

BlueCheckmate

Recreated the design because my old one had a few too many flaws and precision points
3D Printed the new design, but does not fit the phone, will have to file away some of the edges to make it fit. Additionally, the case does not fit due to 3d print size, will file away edges there as well.

Attachment
0
BlueCheckmate

Created the structures to lock the top into place.

Attachment
Attachment
0
BlueCheckmate

I created the base and sides so that you slide in the sides, then lock it from underneath with a peg.
I need to create a locking mechanism that I can remove on the top.

Attachment
Attachment
Attachment
0
BlueCheckmate

Shipped this project!

Hours: 6.74
Cookies: 🍪 45
Multiplier: 6.62 cookies/hr

This is my first-ever project, and my first time actually coding. I created blackjack, because it was one of the first things that came into my head, and I thought it would be relatively easy to code, especially for a beginner like me. You can hit, stand, double down, and split, but only once. During this project, I learnt how to make a file, so the balance continuously updates. However, this code may not be the most stable thing ever, but it works (90% confident), and that’s what matters!

BlueCheckmate

Debugged splitting function:
-Made sure you can’t overspend on doubling down
-Correct payouts for split variations

Version 1 of Project is ready to be shipped

Attachment
Attachment
0
BlueCheckmate

Created the rules
Last thing before shipping: verify there are no bugs when splitting

Attachment
0
BlueCheckmate

Debugged the entire project:

  • The while statements only worked once, and were indented improperly, so they were all changed to if, and indented properly
    -Included a loop that lets the game run multiple times
    -Fixed numerous small bugs
    -Will check if splitting works properly
    -Will add rules, then ship it
    -Create side bets and reship
Attachment
0
BlueCheckmate

Created the comparison between dealers hand and both of your hands in split.
Will look at entire code, debug, then ship it.
After shipping, I will add side bets and re-ship it

Attachment
Attachment
Attachment
0
BlueCheckmate

Created the split function - only allows splitting on the original hand. Basically had to copy the same actions for a regular hand twice for each hand of split.
Still considering adding side bets, but will probably ship this when it’s ready and re-ship it when side bets are included.

Attachment
Attachment
Attachment
0
BlueCheckmate

Created the system that store balance and updates balance accordingly.
Still need to create a split option
Side bets will be added

Attachment
Attachment
0
BlueCheckmate

Created the dealer’s automatic hit or stand
Created the comparison between your hand and the dealer’s hand
Still need to add a split ability
Still need to work out how the balance will work.
Interested in adding side bets to make the game as realistic as possible.

Attachment
0
BlueCheckmate

Created the beginning variables, and the random number generator. Created the cycle for hitting, and created the end for when you bust.
Need to go back and add more variables, such as current balance and making sure you can’t bet more than you have, as well as adding a split option, but those are extras that will be added when the basic structure is done.

Attachment
Attachment
0