From ebd4b282cf2294c3faa1cc9d71c3928704021d22 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 30 Sep 2025 17:50:49 +0200 Subject: [PATCH 1/8] feat: added door in the game (can't open right now) --- ressources/door.xpm | 235 +++++++++++++++++++++++++++++++++ ressources/good_maps/door.cub | 22 +++ src/cub3d_data.h | 3 +- src/hud/load_texture.c | 3 +- src/map/collision.c | 6 +- src/map/forbidden_characters.c | 8 +- src/raycast/walls.c | 4 +- 7 files changed, 272 insertions(+), 9 deletions(-) create mode 100644 ressources/door.xpm create mode 100644 ressources/good_maps/door.cub diff --git a/ressources/door.xpm b/ressources/door.xpm new file mode 100644 index 0000000..729055c --- /dev/null +++ b/ressources/door.xpm @@ -0,0 +1,235 @@ +/* XPM */ +static char *door[] = { +/* columns rows colors chars-per-pixel */ +"64 64 165 2 ", +" c #000001", +". c #0F0D0A", +"X c #100E0A", +"o c #100E0B", +"O c #110E0B", +"+ c #110F0B", +"@ c #120F0B", +"# c #100E0C", +"$ c #110E0C", +"% c #120F0C", +"& c #13100C", +"* c #14110C", +"= c #14100D", +"- c #14110D", +"; c #15120E", +": c #16120E", +"> c #17130E", +", c #18140F", +"< c #19140F", +"1 c #19150F", +"2 c #191510", +"3 c #1A1610", +"4 c #1B1610", +"5 c #1A1611", +"6 c #1B1611", +"7 c #1B1711", +"8 c #1D1812", +"9 c #1E1812", +"0 c #1F1913", +"q c #1F1A13", +"w c #201B14", +"e c #211B14", +"r c #211B15", +"t c #221C14", +"y c #231C15", +"u c #231D16", +"i c #241D16", +"p c #241E16", +"a c #251E16", +"s c #251E17", +"d c #251F17", +"f c #261F16", +"g c #261F17", +"h c #3C1313", +"j c #3C1413", +"k c #3C1414", +"l c #3D1414", +"z c #3D1514", +"x c #3C1615", +"c c #3D1715", +"v c #331C17", +"b c #381815", +"n c #3D1816", +"m c #3E1A17", +"M c #3E1C19", +"N c #3F1D19", +"B c #3D1E1A", +"V c #272017", +"C c #272018", +"Z c #282119", +"A c #292119", +"S c #292219", +"D c #29211A", +"F c #29221A", +"G c #2A221A", +"H c #2B231A", +"J c #2B231B", +"K c #2B241B", +"L c #2C241A", +"P c #2C241C", +"I c #2D251C", +"U c #2E251C", +"Y c #2F261C", +"T c #2F261D", +"R c #30271D", +"E c #3F211C", +"W c #31281E", +"Q c #32281E", +"! c #32291E", +"~ c #32291F", +"^ c #33291F", +"/ c #222222", +"( c #342B20", +") c #342B21", +"_ c #352B21", +"` c #352C21", +"' c #362C21", +"] c #362D22", +"[ c #372D22", +"{ c #382D22", +"} c #382E22", +"| c #382E23", +" . c #392F23", +".. c #392F24", +"X. c #3A2F24", +"o. c #3A3024", +"O. c #3B3025", +"+. c #3D3125", +"@. c #3D3226", +"#. c #3E3327", +"$. c #3F3327", +"%. c #3F3427", +"&. c #3E3328", +"*. c #3F3428", +"=. c #343434", +"-. c gray21", +";. c #401C19", +":. c #401F1A", +">. c #42211C", +",. c #40221C", +"<. c #40231D", +"1. c #43231D", +"2. c #42251E", +"3. c #42251F", +"4. c #432721", +"5. c #442720", +"6. c #472A22", +"7. c #442E24", +"8. c #492E24", +"9. c #413528", +"0. c #403529", +"q. c #413629", +"w. c #423629", +"e. c #40362A", +"r. c #4A3429", +"t. c #49342A", +"y. c #45392B", +"u. c #46392C", +"i. c #46392D", +"p. c #473A2C", +"a. c #473A2D", +"s. c #483B2D", +"d. c #483B2E", +"f. c #493C2D", +"g. c #493C2F", +"h. c #493D2F", +"j. c #4A3D2F", +"k. c #4B3E2F", +"l. c #533D2F", +"z. c #4B3E30", +"x. c #4C3E30", +"c. c #4D3F30", +"v. c #4E4031", +"b. c #4F4031", +"n. c #504132", +"m. c #514232", +"M. c #514233", +"N. c #524333", +"B. c #534434", +"V. c #544535", +"C. c #554636", +"Z. c #544637", +"A. c #564737", +"S. c #594A38", +"D. c #5B4B3A", +"F. c #5D4E3B", +"G. c #60503D", +"H. c #63523F", +"J. c #474646", +"K. c #484848", +"L. c gray31", +"P. c #848382", +"I. c #989796", +"U. c #DADADA", +"Y. c #DDDDDD", +/* pixels */ +" ", +" C.H.C.C.H.C.C.C.F k.C.C.H.H.C.C.C.H.F C.C.H.C.C.C.H.H.C.C.H.F C.C.C.H.H.C.C.C.H.C.C.F H.k.C.C.H.H.C.k.C.F H.k.C.C.H.H.C.C.H. ", +" C.k.k.C.H.k.C.C.F k.C.C.H.H.C.C.C.H.F C.C.k.C.k.C.H.H.C.C.H.F C.k.C.H.H.k.C.C.H.C.C.F H.k.C.C.H.H.C.k.C.F H.C.k.k.H.H.C.C.H. ", +" C.k.C.C.H.C.k.C.s { M.C.H.H.C.C.C.H.F C.k.H.C.k.C.H.H.C.C.H.F C.k.C.H.H.k.C.C.H.C.C.F H.k.C.C.H.H.C.k.k.F H.C.C.k.H.H.C.C.H. ", +" C.k.C.C.H.C.k.@.u s ^ @.D.H.C.C.C.H.F k.k.H.C.k.C.H.H.C.C.H.F k.C.C.H.H.k.C.C.H.k.C.F H.k.k.C.H.H.C.C.k.F H.C.C.C.k.H.C.C.H. ", +" C.H.C.C.H.s.F Y = s F p.v.v.C.C.C.k.F C.C.H.C.k.C.H.H.C.C.k.F C.C.2.H.H.k.C.C.H.k.C.F H.k.k.k.H.H.C.C.k.F H.k.k.C.H.k.C.C.H. ", +" C.H.C.C.C.Y ..r . + 7 [ k.k.C.k.k.H.F C.C.H.C.k.C.H.H.C.C.k.F C.C.C.m 6.C.C.C.H.k.C.F H.k.C.C.H.H.C.C.k.F H.k.C.C.H.H.C.C.H. ", +" C.H.C.v.c.{ = C . + 0 Y v.k.v.k.C.H.F C.C.H.C.k.C.H.H.C.k.k.F C.C.C.6.k.k.2.2.H.C.C.F H.H.C.C.H.H.C.C.k.F H.C.C.C.H.H.C.C.H. ", +" C.k.v.s.w.F 0 . . . = s { M.y.C.C.H.F C.C.H.C.k.k.H.H.C.k.H.F C.2.2.H.H.2.k m m 2.C.F H.H.C.C.H.H.C.k.k.F H.C.C.C.k.H.C.k.H. ", +" C.k.C.w.c.r . . . . + 0 ^ p.k.C.C.H.F C.k.H.C.C.k.H.H.C.C.H.F C.C.C.H.6.k k k k m C.F H.H.C.C.H.H.C.C.C.F H.C.C.k.H.H.C.C.C. ", +" C.k.C.v.c.) . . . . . + ^ w.k.C.C.H.F C.k.H.C.C.k.H.H.C.C.H.F C.C.m m m k m m k m C.F H.H.C.C.H.H.C.C.C.F H.C.C.C.H.H.C.C.C. ", +" C.k.C.C.c.u ^ . . . 1 { Y c.C.C.C.H.F C.k.k.C.C.C.H.H.C.C.H.F C.m 2.m m m 2.m m 2.C.F H.H.C.C.H.k.C.C.C.F H.C.C.C.H.H.C.C.C. ", +" C.k.C.C.D.F s F . + [ F k.H.C.C.C.H.F C.C.H.C.C.C.H.k.C.C.H.F C.C.k k 6.C.C.C.H.C.C.F H.k.k.C.H.H.k.C.C.F H.C.k.C.H.H.C.C.C. ", +" C.k.C.C.H.%.y...= & 0 ..D.H.C.C.C.H.F C.C.H.C.C.C.H.H.C.C.H.F C.2.C.k.H.2.C.2.6.2.C.F H.H.k.C.H.H.C.C.C.F H.k.C.C.H.H.k.C.C. ", +" C.H.C.C.H.C.w.v.% r @.C.H.H.C.C.C.H.F C.C.H.C.C.k.H.H.C.C.H.F C.C.Y.H.k.C.C.2.m C.C.F H.H.k.C.H.H.C.C.C.F H.k.C.C.H.H.k.k.H. ", +" C.H.C.C.H.k.C.C.0 ^ M.C.H.k.C.C.k.H.F C.k.H.C.C.k.H.H.C.C.H.F C.C.Y.k.k.C.m C.H.C.C.F H.Y.Y.Y.Y.Y.Y.Y.C.F H.C.C.C.H.H.k.C.H. ", +" C.H.C.C.H.k.C.C.u C.C.C.H.k.C.C.k.H.F C.k.H.C.C.k.H.H.C.C.H.F C.C.C.Y.H.C.C.C.H.C.C.F H.Y.C.C.H.H.k.Y.C.F H.k.C.C.H.H.k.C.H. ", +" C.H.C.k.H.k.C.C.F C.C.C.H.H.C.k.k.H.F C.k.H.C.C.C.H.H.C.C.H.F C.C.C.Y.H.C.C.C.H.C.C.F H.Y.C.C.H.H.C.k.Y.F H.k.C.C.H.H.k.C.H. ", +" C.H.k.k.H.k.C.C.F C.C.C.H.H.C.k.C.H.F C.C.k.C.C.C.H.H.Y.Y.Y.F C.C.k.Y.H.C.C.k.H.k.C.F H.Y.C.C.H.H.C.k.Y.F H.C.k.C.H.H.C.k.k. ", +" C.H.k.C.H.C.C.C.F C.C.C.Y.H.C.k.C.H.I.C.C.k.C.C.C.Y.Y.C.C.H.F C.k.k.Y.H.C.C.k.H.C.C.F H.Y.C.C.H.H.C.C.Y.I.H.C.k.C.H.H.C.k.k. ", +" C.k.C.C.H.C.C.C.F C.k.C.Y.H.C.k.C.H.I.Y.C.k.C.C.Y.H.H.k.C.H.F C.k.C.Y.H.C.C.C.k.C.C.F H.Y.C.C.H.H.Y.Y.k.F H.C.k.C.H.H.C.C.H. ", +" C.k.C.C.H.C.C.C.F C.k.C.Y.H.C.C.C.H.F Y.C.H.C.C.Y.H.H.k.C.H.F C.k.C.Y.H.C.C.C.k.C.C.F H.Y.Y.Y.Y.Y.C.C.k.F H.C.C.C.H.H.k.C.H. ", +" C.k.C.C.H.k.C.C.F C.k.C.Y.H.C.C.C.H.F Y.C.H.C.C.C.Y.H.C.k.H.F C.C.C.Y.H.C.C.C.k.C.C.F H.H.Y.C.H.H.C.C.k.F H.C.C.C.H.H.k.k.H. ", +" C.H.k.C.H.C.k.C.F r.C.C.Y.Y.C.C.C.H.F Y.C.H.C.C.C.Y.H.Y.Y.H.F C.C.C.Y.H.C.C.C.k.C.C.F H.H.Y.C.H.k.C.C.k.F H.C.C.C.H.H.C.k.k. ", +" C.H.k.C.H.C.k.C.F 2.2.C.H.Y.C.C.C.H.F C.Y.H.C.C.C.Y.Y.C.C.H.F C.C.C.Y.H.C.C.C.k.Y.Y.F H.H.Y.C.H.k.C.C.C.F H.C.C.k.H.H.C.C.H. ", +" C.H.k.C.H.C.k.C.F C.m ,.H.Y.C.C.C.U.I.Y.Y.H.C.C.C.Y.H.C.C.H.F C.C.C.Y.H.C.C.Y.Y.Y.C.F H.H.Y.C.H.k.C.C.C.F H.C.k.C.H.H.C.C.H. ", +" C.H.k.C.H.C.k.C.F C.m k k.Y.C.Y.Y.H.F C.Y.Y.C.k.C.Y.H.C.C.H.F C.k.C.H.Y.Y.Y.C.H.C.C.F H.k.Y.C.H.k.C.C.C.F H.C.k.C.H.H.k.C.H. ", +" C.-.-.-.K.-.-.C.F 2.m m 6.H.Y.C.C.H.F C.C.Y.C.k.C.H.Y.C.Y.Y.P.C.C.C.k.Y.C.C.C.H.C.C.F H.k.Y.C.H.H.C.C.C.F l.r.,.r.8.H.k.C.H. ", +" C.H.C.C.K.C.k.C.F C.m m 6.6.Y.C.C.H.F C.C.Y.C.C.C.H.Y.Y.k.H.F C.C.C.k.H.C.C.C.H.C.C.F H.k.Y.Y.H.H.C.k.C.F l.:.N k k 8.k.C.H. ", +" C.H.C.C.K.C.C.C.F 2.C.C.6.m Y.C.C.H.F C.C.Y.C.C.C.H.H.k.C.H.F C.C.C.k.H.C.C.C.k.C.C.F H.k.C.Y.H.H.C.k.C.F H.C.N k k l.k.C.H. ", +" C.H.k.C.K.C.C.C.F C.r.C.H.H.C.Y.C.H.F C.C.Y.C.C.C.H.H.k.C.H.F C.C.C.k.H.C.C.C.k.C.C.F H.k.C.Y.H.H.C.k.C.F H.C.r.k ,.H.C.C.H. ", +" C.H.k.C.H.C.C.C.F 7.r.C.H.l.C.Y.C.H.F C.C.H.C.C.C.H.H.k.C.H.F C.C.k.k.H.C.C.C.k.C.C.F H.k.C.C.Y.H.C.k.k.F l.C.:.k 8.H.C.C.H. ", +" C.J.J.J.J.J.J.C.F k.C.C.H.H.r.Y.Y.H.F C.C.H.k.C.C.H.H.k.C.H.F C.C.C.H.H.C.k.C.H.k.C.F H.k.C.C.H.H.C.C.k.F H.r.k m l.H.C.C.H. ", +" C.-.-.-.-.J.J.C.F C.C.C.H.H.C.C.C.H.F C.C.H.k.C.C.H.H.C.C.H.F C.C.C.H.H.C.k.C.H.k.C.F H.k.C.C.H.H.C.C.7.F H.:.m :.l.l.C.C.H. ", +" C.-./ -.-.J.J.k.F C.C.C.H.H.C.C.C.H.F C.C.H.k.C.C.H.H.C.C.H.F C.C.C.D.C.w.w.v.D.y.C.F H.k.k.C.H.H.C.C.k.F l.:.N r.H.7.k.C.H. ", +" C.-./ -.-.J.J.C.F C.C.C.H.k.C.C.C.H.F C.C.H.C.k.C.H.H.C.C.H.F C.C.y.o.) Y ^ Y C.y.C.F H.H.k.C.H.H.C.r.k.F l.m k.C.l.k.k.C.H. ", +" C.H.k.C.H.C.C.C.F C.C.C.H.H.k.C.C.H.F C.C.H.C.k.C.H.H.C.C.H.F v.v.k.D.R p.^ ^ *.C.k.F H.H.C.k.H.H.k.C.r.F :.C.k.C.H.H.C.k.H. ", +" [ C.k.k.H.C.C.C.F C.C.C.H.H.k.C.C.H.F C.C.H.C.k.C.H.H.k.C.H.F v.C.y.{ y.F 7 u r K k.F H.H.C.k.H.k.k.C.C.F 8.C.C.C.8.H.C.k.k. ", +" F M.s.k.H.C.C.k.F C.C.C.H.H.k.C.C.H.F C.C.H.C.k.C.H.H.k.C.H.F C.C.[ @.R = & + = 0 o.F H.H.C.C.H.H.C.C.C.F 8.C.C.C.H.H.k.C.k. ", +" r z.v.k.H.C.C.k.F C.k.C.H.H.C.C.C.H.F C.C.H.C.k.C.H.H.k.C.H.F C.v.s @.1 + + % = 7 ^ F H.H.C.C.H.H.C.C.C.F 8.r.C.C.H.H.C.C.H. ", +" 1 { { v.C.C.k.k.F C.k.C.H.H.C.C.C.H.F C.C.H.C.C.k.H.H.k.C.H.F C.v.Y K = = + + = 1 u F H.H.C.C.H.H.C.C.C.F H.C.C.C.H.H.C.C.H. ", +" 7 7 s &.F.k.k.C.F C.C.C.H.H.k.C.k.H.F C.C.H.C.C.k.H.H.C.C.H.F C.[ w.K F = = = & = ^ F H.H.C.k.H.H.k.C.C.F H.C.k.C.H.H.C.C.H. ", +" . & w.V F.s.k.C.F C.C.C.H.k.C.C.k.H.F C.C.H.C.C.C.H.H.C.C.H.F C.p.v.@.) 0 u = 1 7 p.F H.H.C.k.H.H.C.k.C.F H.C.C.C.H.H.C.C.H. ", +" . . F { H.p.w.C.F C.C.C.H.H.C.C.k.H.F C.C.k.C.C.C.H.H.C.C.H.F C.C.@.y.@.^ ^ u { ^ p.F H.H.C.k.H.H.C.k.C.F H.C.C.C.H.H.C.C.H. ", +" . . C { C.p.k.C.F C.C.C.H.H.C.k.k.H.F C.C.H.k.C.C.H.H.C.C.H.F C.k.@.@.c.p.w.[ *.C.C.F H.H.k.C.H.H.C.k.C.F H.C.C.C.H.H.k.C.H. ", +" & % k.F k.s.k.C.F C.C.C.H.H.C.k.C.H.F C.C.H.C.k.k.H.H.C.C.H.F C.k.C.H.H.p.p.o.y.p.C.F H.H.k.C.H.6.2.C.C.F H.C.C.C.H.H.k.C.H. ", +" = & { ^ C.s.k.C.F C.7.C.H.H.C.k.C.H.F C.C.H.C.C.k.k.H.C.C.H.F C.C.C.H.H.C.C.k.H.C.C.F H.H.C.C.6.h h C.C.F H.k.C.C.H.H.k.k.H. ", +" . V { w.C.s.k.C.F C.C.k.H.H.C.7.C.H.F C.C.H.C.C.C.k.k.C.C.H.F C.C.C.H.H.C.C.k.H.C.C.F H.H.k.2.m h h ,.C.F H.C.k.C.H.H.C.k.H. ", +" & 7 { { C.B.C.C.F C.C.,.6.6.C.k.C.H.F C.C.H.C.C.C.H.k.k.C.H.F C.C.C.k.k.C.C.C.k.C.C.F H.H.k.2.k j ,.k.C.F H.C.k.k.H.H.C.C.H. ", +" % V L s.C.C.C.C.F C.C.k.m k m k.C.H.F C.C.H.C.C.C.H.H.k.C.H.F C.C.C.H.H.k.C.C.k.k.C.F H.H.C.k.k m C.k.C.F H.C.C.C.H.H.C.C.H. ", +" = u ^ M.H.C.C.C.F r.r.k.,.m r.k.C.H.F C.C.H.C.C.C.H.H.C.C.H.F C.C.C.H.H.C.C.C.H.k.C.v H.6.2.k k m C.7.7.F H.C.C.C.H.H.C.C.H. ", +" 1 7 *.B.H.k.k.C.F C.:.7.k m 5.7.7.H.F C.C.H.k.C.C.H.H.C.C.H.F C.C.C.H.H.C.C.C.H.k.C.b l.H.k 2.6.m C.r.k.F H.C.C.C.H.H.C.C.H. ", +" 0 s M.C.H.k.k.k.F r.r.7.k k r.C.k.H.F C.C.H.k.C.C.H.H.C.C.H.F C.C.C.k.H.C.C.C.H.k.C.v H.6.k m H.6.2.2.,.F H.C.C.C.H.H.C.C.H. ", +" F 0 M.C.H.k.k.C.F 5.m ,.6.m N C.C.H.F C.C.H.k.C.C.H.k.C.C.H.F C.C.C.k.H.C.C.C.H.r.r.F H.m k x H.H.2.2.,.F H.k.k.C.H.H.C.k.H. ", +" 7 *.C.C.H.C.C.C.F r.C.m 6.6.2.C.C.H.F C.C.H.C.C.C.H.H.C.C.H.F C.C.C.k.H.C.C.k.H.C.C.F 6.6.x m l.l.2.C.C.F H.C.C.C.H.H.C.k.H. ", +" & C.C.C.H.C.C.C.F r.C.2.H.8.C.C.C.H.F C.C.H.C.C.C.H.H.C.k.H.F C.C.C.H.H.C.C.k.k.C.C.F 6.m 2.2.6.H.C.C.C.F H.C.C.C.H.H.k.k.H. ", +" r C.C.Z.C.C.B.B.B.B.B.Z.r.4.B.C.C.C.C.B.B.B.B.C.B.Z.Z.C.B.C.B.C.C.C.C.C.B.C.B.B.B.B.B.C.2.2.m 2.C.C.C.C.B.C.C.B.B.B.Z.C.C.C. ", +" { L.k.z.w.k.k.k.*.w.w.w.*.L.k.k.k.k.k.k.k.k.k.z.z.w.w.w.w.k.L.k.k.k.k.k.k.k.k.k.k.z.z.k.k x N w.L.k.k.k.k.*.*.*.k.z.z.k.L.w. ", +" C.w.w.w.Z.Z.Z.C.Z.C.C.B.B.*.*.w.w.C.C.B.B.*.*.w.B.Z.Z.C.B.w.w.w.w.C.C.C.B.w.*.w.w.*.4.m m 2.C.C.C.C.C.C.B.C.C.Z.w.w.w.C.C.C. ", +" k.k.k.z.z.z.k.z.w.w.w.k.k.k.k.k.k.k.k.k.k.k.k.k.z.z.z.k.k.k.k.L.k.k.k.k.k.k.k.z.z.z.E k.k.k.k.k.k.w.w.w.k.k.k.z.z.z.z.k.k.k. ", +" k.k.k.k.w.*.k.z.z.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.*.*.*.w.w.w.z.k.k.z.k.k.k.k.k.k.k.k.k.k.k.k.w.k.k.w.w.k.w.w.w.k. ", +" C.C.C.C.C.B.C.Z.Z.C.C.w.w.*.*.B.L.B.B.w.w.*.w.C.C.Z.B.Z.Z.B.L.w.B.C.C.B.w.*.*.w.C.B.B.B.Z.B.Z.*.w.*.B.Z.Z.B.C.C.C.C.B.Z.C.B. ", +" k.L.w.w.*.w.*.w.k.k.k.z.k.k.k.k.k.k.k.z.k.z.k.k.k.k.*.w.w.z.k.k.k.k.k.k.k.z.k.k.k.k.k.k.k.w.L.k.k.k.k.z.w.w.w.*.*.k.k.z.L.k. ", +" B.B.C.C.C.C.B.Z.B.B.B.C.w.w.B.B.B.B.B.Z.Z.Z.Z.B.B.B.B.Z.Z.Z.Z.L.B.B.B.Z.Z.Z.Z.C.B.B.B.Z.Z.Z.Z.B.B.B.B.Z.Z.Z.Z.B.B.*.*.Z.Z.Z. " +}; diff --git a/ressources/good_maps/door.cub b/ressources/good_maps/door.cub new file mode 100644 index 0000000..b169ef2 --- /dev/null +++ b/ressources/good_maps/door.cub @@ -0,0 +1,22 @@ +NO ressources/north.xpm +SO ressources/south.xpm +WE ressources/west.xpm +EA ressources/east.xpm + +F 220,100,0 +C 225,30,0 + + 1111111111111111111111111 + 1000000000110000000000001 + 1011000001110000z00000001 + 10D1000000000000000000001 +111111111011000001110M00000000001 +10000000001100000111011111d111111 +11110111111111011100000010001 +11110111111111011101010010001 +11000000110101011100000010001 +100000000000000011J0000010001 +10000000000000001101010010001 +11Q00001110101011111011110N0111 +11110111 1110101 101111010001 +11111111 1111111 111111111111 diff --git a/src/cub3d_data.h b/src/cub3d_data.h index 405b9b7..4e8553f 100644 --- a/src/cub3d_data.h +++ b/src/cub3d_data.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:59:37 by kcolin #+# #+# */ -/* Updated: 2025/09/22 17:17:23 by tchampio ### ########.fr */ +/* Updated: 2025/09/30 17:32:50 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,6 +36,7 @@ typedef struct s_cub3d_data t_img_data *perk_logos[3]; t_img_data *tally_marks[5]; t_img_data *round_figures[10]; + t_img_data *door_texture; t_mapdata *map; t_player player; t_keypresses keypresses; diff --git a/src/hud/load_texture.c b/src/hud/load_texture.c index 24397ea..1aca228 100644 --- a/src/hud/load_texture.c +++ b/src/hud/load_texture.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/09/03 17:02:08 by tchampio #+# #+# */ -/* Updated: 2025/09/22 17:17:34 by tchampio ### ########.fr */ +/* Updated: 2025/09/30 17:35:31 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -109,6 +109,7 @@ void load_textures(t_cub3d_data *data) "ressources/barricades_6.xpm"); data->barricades_texture[5] = load_single_texture(data, "ressources/barricades_7.xpm"); + data->door_texture = load_single_texture(data, "ressources/door.xpm"); load_points_textures(data); load_perk_logos(data); load_round_indicators(data); diff --git a/src/map/collision.c b/src/map/collision.c index 981b275..8add28c 100644 --- a/src/map/collision.c +++ b/src/map/collision.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/06 11:25:05 by kcolin #+# #+# */ -/* Updated: 2025/09/09 10:15:46 by tchampio ### ########.fr */ +/* Updated: 2025/09/30 17:43:36 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,14 +25,14 @@ static bool out_of_bounds(t_mapdata *data, int x, int y) bool blocks_movement(t_mapdata *data, int x, int y) { - if (out_of_bounds(data, x, y) || ft_strchr("12345678", data->map[y][x])) + if (out_of_bounds(data, x, y) || ft_strchr("12345678d", data->map[y][x])) return (true); return (false); } bool blocks_view(t_mapdata *data, int x, int y) { - if (out_of_bounds(data, x, y) || ft_strchr("12345678", data->map[y][x])) + if (out_of_bounds(data, x, y) || ft_strchr("12345678d", data->map[y][x])) return (true); return (false); } diff --git a/src/map/forbidden_characters.c b/src/map/forbidden_characters.c index 68d9662..0ff4054 100644 --- a/src/map/forbidden_characters.c +++ b/src/map/forbidden_characters.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:18:13 by kcolin #+# #+# */ -/* Updated: 2025/09/22 17:16:41 by tchampio ### ########.fr */ +/* Updated: 2025/09/30 17:23:06 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,11 +21,13 @@ * J - Juggernog perk * D - Double tap perk * 2345678 - barricade and it's levels starting from 2 (every planks) to 8 -* beware of zombies +* z - beware of zombies +* d - closed door +* i - open dooro */ bool has_forbidden_characters(char *line) { - static const char *allowedchars = " 10234567NSEWMQJDz\n"; + static const char *allowedchars = " 10234567NSEWMQJDzdi\n"; size_t strsize; int i; diff --git a/src/raycast/walls.c b/src/raycast/walls.c index 676239d..c653c77 100644 --- a/src/raycast/walls.c +++ b/src/raycast/walls.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 13:17:39 by kcolin #+# #+# */ -/* Updated: 2025/09/22 17:17:54 by tchampio ### ########.fr */ +/* Updated: 2025/09/30 17:41:52 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -66,6 +66,8 @@ static int get_color(t_cub3d_data *data, t_ray *ray, int tex_y) if (ft_strchr("234567", data->map->map[ray->map_y][ray->map_x])) return (my_mlx_pixel_get(get_right_barricade(data, data->map->map[ray->map_y][ray->map_x]), tex_x, tex_y)); + if (data->map->map[ray->map_y][ray->map_x] == 'd') + return (my_mlx_pixel_get(data->door_texture, tex_x, tex_y)); if (dir == NORTH) texture = data->no_texture; else if (dir == SOUTH) From b606159ac3b60847987cb65026f744b0b5f01d99 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 1 Oct 2025 00:30:08 +0200 Subject: [PATCH 2/8] wip: adding door interaction --- src/player/move.c | 2 +- src/player/player.h | 4 +++- src/raycast/ray.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/player/move.c b/src/player/move.c index b57c829..e59ba87 100644 --- a/src/player/move.c +++ b/src/player/move.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/05 12:53:06 by kcolin #+# #+# */ -/* Updated: 2025/08/12 12:16:51 by kcolin ### ########.fr */ +/* Updated: 2025/09/30 20:08:31 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/player/player.h b/src/player/player.h index 0ace102..4f82647 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 15:51:29 by kcolin #+# #+# */ -/* Updated: 2025/09/17 16:52:41 by tchampio ### ########.fr */ +/* Updated: 2025/09/30 20:31:08 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,6 +49,8 @@ typedef struct s_player t_vec2 movement; t_weapon *weapon; t_sprite *aimed_zombie; + int closest_door[2]; + bool can_open_door; } t_player; #endif // PLAYER_H diff --git a/src/raycast/ray.c b/src/raycast/ray.c index 4cc9220..d98e552 100644 --- a/src/raycast/ray.c +++ b/src/raycast/ray.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 11:55:41 by kcolin #+# #+# */ -/* Updated: 2025/09/15 14:08:27 by tchampio ### ########.fr */ +/* Updated: 2025/09/30 23:05:11 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,6 +21,7 @@ #include #include #include "../map/collision.h" +#include "../../libft/includes/libft.h" void init_ray(t_ray *ray, int pos_x, t_player *player) { @@ -57,6 +58,28 @@ void ray_calculate_step(t_ray *ray, t_player *player) } } +void handle_door_ray(t_ray *ray, t_cub3d_data *data) +{ + if (data->map->map[ray->map_y][ray->map_x] == 'd' && ray->wall_dist < 1.5) + { + ft_printf("map[%d][%d] = door reachable\n", ray->map_y, ray->map_x); + data->player.closest_door[0] = ray->map_x; + data->player.closest_door[1] = ray->map_y; + data->player.can_open_door = true; + if (data->keypresses.is_f_pressed) + { + data->keypresses.is_f_pressed = false; + data->map->map[ray->map_y][ray->map_x] = 'i'; + } + } + else + { + data->player.closest_door[0] = -1; + data->player.closest_door[1] = -1; + data->player.can_open_door = false; + } +} + void calculate_wall_dist(t_ray *ray, int x, t_cub3d_data *data) { while (true) @@ -76,7 +99,11 @@ void calculate_wall_dist(t_ray *ray, int x, t_cub3d_data *data) ray->side = SOUTH; } if (blocks_view(data->map, ray->map_x, ray->map_y)) + { + if (x == WIDTH / 2) + handle_door_ray(ray, data); break ; + } } if (ray->side == NORTH) ray->wall_dist = ray->side_dist_x - ray->delta_dist_x; From 47ffb17047d3deb6d33e521f31b7ed0543227210 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 1 Oct 2025 13:53:02 +0200 Subject: [PATCH 3/8] feat: Made doors opening and closing --- src/cub3d_data.h | 2 +- src/hud/load_texture.c | 2 +- src/map/collision.c | 2 +- src/raycast/ray.c | 11 ++++++++--- src/raycast/walls.c | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/cub3d_data.h b/src/cub3d_data.h index 4e8553f..43d1389 100644 --- a/src/cub3d_data.h +++ b/src/cub3d_data.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:59:37 by kcolin #+# #+# */ -/* Updated: 2025/09/30 17:32:50 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 13:50:59 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/hud/load_texture.c b/src/hud/load_texture.c index 1aca228..b8fbb02 100644 --- a/src/hud/load_texture.c +++ b/src/hud/load_texture.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/09/03 17:02:08 by tchampio #+# #+# */ -/* Updated: 2025/09/30 17:35:31 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 13:51:03 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/map/collision.c b/src/map/collision.c index 8add28c..a0259fa 100644 --- a/src/map/collision.c +++ b/src/map/collision.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/06 11:25:05 by kcolin #+# #+# */ -/* Updated: 2025/09/30 17:43:36 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 13:43:22 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/raycast/ray.c b/src/raycast/ray.c index d98e552..d4e33dd 100644 --- a/src/raycast/ray.c +++ b/src/raycast/ray.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 11:55:41 by kcolin #+# #+# */ -/* Updated: 2025/09/30 23:05:11 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 13:50:08 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -60,7 +60,7 @@ void ray_calculate_step(t_ray *ray, t_player *player) void handle_door_ray(t_ray *ray, t_cub3d_data *data) { - if (data->map->map[ray->map_y][ray->map_x] == 'd' && ray->wall_dist < 1.5) + if ((data->map->map[ray->map_y][ray->map_x] == 'd' || data->map->map[ray->map_y][ray->map_x] == 'i') && ray->wall_dist < 1.5) { ft_printf("map[%d][%d] = door reachable\n", ray->map_y, ray->map_x); data->player.closest_door[0] = ray->map_x; @@ -69,7 +69,10 @@ void handle_door_ray(t_ray *ray, t_cub3d_data *data) if (data->keypresses.is_f_pressed) { data->keypresses.is_f_pressed = false; - data->map->map[ray->map_y][ray->map_x] = 'i'; + if (data->map->map[ray->map_y][ray->map_x] == 'd') + data->map->map[ray->map_y][ray->map_x] = 'i'; + else if (data->map->map[ray->map_y][ray->map_x] == 'i') + data->map->map[ray->map_y][ray->map_x] = 'd'; } } else @@ -86,6 +89,8 @@ void calculate_wall_dist(t_ray *ray, int x, t_cub3d_data *data) { if (x == WIDTH / 2) check_for_zombies(ray, data); + if (!blocks_view(data->map, ray->map_x, ray->map_y) && data->map->map[ray->map_y][ray->map_x] == 'i') + handle_door_ray(ray, data); if (ray->side_dist_x < ray->side_dist_y) { ray->side_dist_x += ray->delta_dist_x; diff --git a/src/raycast/walls.c b/src/raycast/walls.c index c653c77..22c34d5 100644 --- a/src/raycast/walls.c +++ b/src/raycast/walls.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 13:17:39 by kcolin #+# #+# */ -/* Updated: 2025/09/30 17:41:52 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 13:36:58 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ From 13b1f7a88c14a125835d18762e9ab15d9a8d3d3e Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 1 Oct 2025 13:58:19 +0200 Subject: [PATCH 4/8] fix: Fixed memory leak for the door texture --- src/utils/destroy_utils.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/destroy_utils.c b/src/utils/destroy_utils.c index f2ae913..dc556b5 100644 --- a/src/utils/destroy_utils.c +++ b/src/utils/destroy_utils.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/18 13:05:31 by kcolin #+# #+# */ -/* Updated: 2025/09/22 17:18:55 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 13:57:48 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,6 +43,7 @@ void destroy_textures(t_cub3d_data *data) i = 0; while (i < 6) destroy_texture(data, data->barricades_texture[i++]); + destroy_texture(data, data->door_texture); } void destroy_sprites(t_cub3d_data *data) From 351e4bb679c79fb32e752c2f3406b661c3e6c9dc Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 1 Oct 2025 14:13:08 +0200 Subject: [PATCH 5/8] feat: Made payable doors --- Makefile | 1 + src/map/collision.c | 4 ++-- src/map/forbidden_characters.c | 5 +++-- src/player/pay.c | 33 +++++++++++++++++++++++++++++++++ src/player/pay.h | 21 +++++++++++++++++++++ src/raycast/ray.c | 7 +++++-- src/raycast/walls.c | 4 ++-- 7 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 src/player/pay.c create mode 100644 src/player/pay.h diff --git a/Makefile b/Makefile index 1e300ee..7e97e96 100644 --- a/Makefile +++ b/Makefile @@ -31,6 +31,7 @@ SOURCEFILES = \ src/player/move_step.c \ src/player/register_weapons.c \ src/player/weapons.c \ + src/player/pay.c \ src/raycast/barricades.c \ src/raycast/ray.c \ src/raycast/walls.c \ diff --git a/src/map/collision.c b/src/map/collision.c index a0259fa..fbc2335 100644 --- a/src/map/collision.c +++ b/src/map/collision.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/06 11:25:05 by kcolin #+# #+# */ -/* Updated: 2025/10/01 13:43:22 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 14:11:11 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,7 +32,7 @@ bool blocks_movement(t_mapdata *data, int x, int y) bool blocks_view(t_mapdata *data, int x, int y) { - if (out_of_bounds(data, x, y) || ft_strchr("12345678d", data->map[y][x])) + if (out_of_bounds(data, x, y) || ft_strchr("12345678dP", data->map[y][x])) return (true); return (false); } diff --git a/src/map/forbidden_characters.c b/src/map/forbidden_characters.c index 0ff4054..371f547 100644 --- a/src/map/forbidden_characters.c +++ b/src/map/forbidden_characters.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:18:13 by kcolin #+# #+# */ -/* Updated: 2025/09/30 17:23:06 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 14:08:45 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,10 +24,11 @@ * z - beware of zombies * d - closed door * i - open dooro +* P - payable door */ bool has_forbidden_characters(char *line) { - static const char *allowedchars = " 10234567NSEWMQJDzdi\n"; + static const char *allowedchars = " 10234567NSEWMQJDzdiP\n"; size_t strsize; int i; diff --git a/src/player/pay.c b/src/player/pay.c new file mode 100644 index 0000000..0d4f1a7 --- /dev/null +++ b/src/player/pay.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* door.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/01 13:59:11 by tchampio #+# #+# */ +/* Updated: 2025/10/01 14:05:57 by tchampio ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../cub3d_data.h" +#include "../../libft/includes/libft.h" + +int door_amount(void) +{ + static int amount = 500; + + amount += 250; + return (amount); +} + +bool pay(t_cub3d_data *data, int amount) +{ + if (data->player.points < amount) + { + ft_printf("Not enough points :(\n"); + return (false); + } + data->player.points -= amount; + return (true); +} diff --git a/src/player/pay.h b/src/player/pay.h new file mode 100644 index 0000000..f656239 --- /dev/null +++ b/src/player/pay.h @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* pay.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/01 14:05:08 by tchampio #+# #+# */ +/* Updated: 2025/10/01 14:06:19 by tchampio ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef PAY_H +# define PAY_H + +# include "../cub3d_data.h" + +int door_amount(void); +bool pay(t_cub3d_data *data, int amount); + +#endif // PAY_H diff --git a/src/raycast/ray.c b/src/raycast/ray.c index d4e33dd..04b42b6 100644 --- a/src/raycast/ray.c +++ b/src/raycast/ray.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 11:55:41 by kcolin #+# #+# */ -/* Updated: 2025/10/01 13:50:08 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 14:10:46 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,6 +21,7 @@ #include #include #include "../map/collision.h" +#include "../player/pay.h" #include "../../libft/includes/libft.h" void init_ray(t_ray *ray, int pos_x, t_player *player) @@ -60,7 +61,7 @@ void ray_calculate_step(t_ray *ray, t_player *player) void handle_door_ray(t_ray *ray, t_cub3d_data *data) { - if ((data->map->map[ray->map_y][ray->map_x] == 'd' || data->map->map[ray->map_y][ray->map_x] == 'i') && ray->wall_dist < 1.5) + if ((data->map->map[ray->map_y][ray->map_x] == 'd' || data->map->map[ray->map_y][ray->map_x] == 'i' || data->map->map[ray->map_y][ray->map_x] == 'P') && ray->wall_dist < 1.5) { ft_printf("map[%d][%d] = door reachable\n", ray->map_y, ray->map_x); data->player.closest_door[0] = ray->map_x; @@ -71,6 +72,8 @@ void handle_door_ray(t_ray *ray, t_cub3d_data *data) data->keypresses.is_f_pressed = false; if (data->map->map[ray->map_y][ray->map_x] == 'd') data->map->map[ray->map_y][ray->map_x] = 'i'; + else if (data->map->map[ray->map_y][ray->map_x] == 'P' && pay(data, door_amount())) + data->map->map[ray->map_y][ray->map_x] = '0'; else if (data->map->map[ray->map_y][ray->map_x] == 'i') data->map->map[ray->map_y][ray->map_x] = 'd'; } diff --git a/src/raycast/walls.c b/src/raycast/walls.c index 22c34d5..2b27a86 100644 --- a/src/raycast/walls.c +++ b/src/raycast/walls.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 13:17:39 by kcolin #+# #+# */ -/* Updated: 2025/10/01 13:36:58 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 14:12:44 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -66,7 +66,7 @@ static int get_color(t_cub3d_data *data, t_ray *ray, int tex_y) if (ft_strchr("234567", data->map->map[ray->map_y][ray->map_x])) return (my_mlx_pixel_get(get_right_barricade(data, data->map->map[ray->map_y][ray->map_x]), tex_x, tex_y)); - if (data->map->map[ray->map_y][ray->map_x] == 'd') + if (data->map->map[ray->map_y][ray->map_x] == 'd' || data->map->map[ray->map_y][ray->map_x] == 'P') return (my_mlx_pixel_get(data->door_texture, tex_x, tex_y)); if (dir == NORTH) texture = data->no_texture; From 5cc6988c9c2348f76a45bc791ede81c7b197aa4c Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 1 Oct 2025 17:39:50 +0200 Subject: [PATCH 6/8] chore: changed door for a payed door --- ressources/good_maps/door.cub | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ressources/good_maps/door.cub b/ressources/good_maps/door.cub index b169ef2..81b4f23 100644 --- a/ressources/good_maps/door.cub +++ b/ressources/good_maps/door.cub @@ -11,7 +11,7 @@ C 225,30,0 1011000001110000z00000001 10D1000000000000000000001 111111111011000001110M00000000001 -10000000001100000111011111d111111 +10000000001100000111011111P111111 11110111111111011100000010001 11110111111111011101010010001 11000000110101011100000010001 From 94fd8779e2fc9241132145e086c599c4ddd5571e Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 1 Oct 2025 17:40:07 +0200 Subject: [PATCH 7/8] feat: finished payed doors --- src/cub3d_data.h | 1 + src/map/collision.c | 2 +- src/player/pay.c | 12 +++--------- src/player/pay.h | 3 +-- src/raycast/ray.c | 4 ++-- src/utils/inits.c | 1 + 6 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/cub3d_data.h b/src/cub3d_data.h index 43d1389..5549f26 100644 --- a/src/cub3d_data.h +++ b/src/cub3d_data.h @@ -40,6 +40,7 @@ typedef struct s_cub3d_data t_mapdata *map; t_player player; t_keypresses keypresses; + int door_amount; int *screen_matrix; int last_since_shoot; // temp int delta; diff --git a/src/map/collision.c b/src/map/collision.c index fbc2335..5837574 100644 --- a/src/map/collision.c +++ b/src/map/collision.c @@ -25,7 +25,7 @@ static bool out_of_bounds(t_mapdata *data, int x, int y) bool blocks_movement(t_mapdata *data, int x, int y) { - if (out_of_bounds(data, x, y) || ft_strchr("12345678d", data->map[y][x])) + if (out_of_bounds(data, x, y) || ft_strchr("12345678dP", data->map[y][x])) return (true); return (false); } diff --git a/src/player/pay.c b/src/player/pay.c index 0d4f1a7..9436875 100644 --- a/src/player/pay.c +++ b/src/player/pay.c @@ -13,15 +13,7 @@ #include "../cub3d_data.h" #include "../../libft/includes/libft.h" -int door_amount(void) -{ - static int amount = 500; - - amount += 250; - return (amount); -} - -bool pay(t_cub3d_data *data, int amount) +bool pay(t_cub3d_data *data, int amount, bool isdoor) { if (data->player.points < amount) { @@ -29,5 +21,7 @@ bool pay(t_cub3d_data *data, int amount) return (false); } data->player.points -= amount; + if (isdoor) + data->door_amount += 250; return (true); } diff --git a/src/player/pay.h b/src/player/pay.h index f656239..20959e5 100644 --- a/src/player/pay.h +++ b/src/player/pay.h @@ -15,7 +15,6 @@ # include "../cub3d_data.h" -int door_amount(void); -bool pay(t_cub3d_data *data, int amount); +bool pay(t_cub3d_data *data, int amount, bool isdoor); #endif // PAY_H diff --git a/src/raycast/ray.c b/src/raycast/ray.c index 04b42b6..cbd4cd9 100644 --- a/src/raycast/ray.c +++ b/src/raycast/ray.c @@ -63,7 +63,7 @@ void handle_door_ray(t_ray *ray, t_cub3d_data *data) { if ((data->map->map[ray->map_y][ray->map_x] == 'd' || data->map->map[ray->map_y][ray->map_x] == 'i' || data->map->map[ray->map_y][ray->map_x] == 'P') && ray->wall_dist < 1.5) { - ft_printf("map[%d][%d] = door reachable\n", ray->map_y, ray->map_x); + //ft_printf("map[%d][%d] = door reachable\n", ray->map_y, ray->map_x); data->player.closest_door[0] = ray->map_x; data->player.closest_door[1] = ray->map_y; data->player.can_open_door = true; @@ -72,7 +72,7 @@ void handle_door_ray(t_ray *ray, t_cub3d_data *data) data->keypresses.is_f_pressed = false; if (data->map->map[ray->map_y][ray->map_x] == 'd') data->map->map[ray->map_y][ray->map_x] = 'i'; - else if (data->map->map[ray->map_y][ray->map_x] == 'P' && pay(data, door_amount())) + else if (data->map->map[ray->map_y][ray->map_x] == 'P' && pay(data, data->door_amount, true)) data->map->map[ray->map_y][ray->map_x] = '0'; else if (data->map->map[ray->map_y][ray->map_x] == 'i') data->map->map[ray->map_y][ray->map_x] = 'd'; diff --git a/src/utils/inits.c b/src/utils/inits.c index 865299c..fc7fa11 100644 --- a/src/utils/inits.c +++ b/src/utils/inits.c @@ -113,5 +113,6 @@ void init_cub3d_data(t_cub3d_data *data, char **argv) load_textures(data); data->sprite_list = ft_calloc(sizeof(t_sprite *), MAX_SPRITES); ft_memset(data->sprite_distances, -1, MAX_SPRITES); + data->door_amount = 750; place_base_sprites(data, data->map->map); } From f325eb3dbfa697bfd7481b91c9f16d2cde1bd499 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 2 Oct 2025 00:12:16 +0200 Subject: [PATCH 8/8] norme: fixed norme issues --- Makefile | 1 + src/raycast/ray.c | 48 +++--------------------------------- src/raycast/ray.h | 6 ++++- src/raycast/ray2.c | 60 +++++++++++++++++++++++++++++++++++++++++++++ src/raycast/walls.c | 4 +-- 5 files changed, 72 insertions(+), 47 deletions(-) create mode 100644 src/raycast/ray2.c diff --git a/Makefile b/Makefile index 7e97e96..3a40c04 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ SOURCEFILES = \ src/player/pay.c \ src/raycast/barricades.c \ src/raycast/ray.c \ + src/raycast/ray2.c \ src/raycast/walls.c \ src/raycast/zombie_checker.c \ src/renderer/render.c \ diff --git a/src/raycast/ray.c b/src/raycast/ray.c index cbd4cd9..5b77f06 100644 --- a/src/raycast/ray.c +++ b/src/raycast/ray.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 11:55:41 by kcolin #+# #+# */ -/* Updated: 2025/10/01 14:10:46 by tchampio ### ########.fr */ +/* Updated: 2025/10/02 00:10:20 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,10 +19,7 @@ #include "../cub3d_data.h" #include #include -#include #include "../map/collision.h" -#include "../player/pay.h" -#include "../../libft/includes/libft.h" void init_ray(t_ray *ray, int pos_x, t_player *player) { @@ -59,53 +56,16 @@ void ray_calculate_step(t_ray *ray, t_player *player) } } -void handle_door_ray(t_ray *ray, t_cub3d_data *data) -{ - if ((data->map->map[ray->map_y][ray->map_x] == 'd' || data->map->map[ray->map_y][ray->map_x] == 'i' || data->map->map[ray->map_y][ray->map_x] == 'P') && ray->wall_dist < 1.5) - { - //ft_printf("map[%d][%d] = door reachable\n", ray->map_y, ray->map_x); - data->player.closest_door[0] = ray->map_x; - data->player.closest_door[1] = ray->map_y; - data->player.can_open_door = true; - if (data->keypresses.is_f_pressed) - { - data->keypresses.is_f_pressed = false; - if (data->map->map[ray->map_y][ray->map_x] == 'd') - data->map->map[ray->map_y][ray->map_x] = 'i'; - else if (data->map->map[ray->map_y][ray->map_x] == 'P' && pay(data, data->door_amount, true)) - data->map->map[ray->map_y][ray->map_x] = '0'; - else if (data->map->map[ray->map_y][ray->map_x] == 'i') - data->map->map[ray->map_y][ray->map_x] = 'd'; - } - } - else - { - data->player.closest_door[0] = -1; - data->player.closest_door[1] = -1; - data->player.can_open_door = false; - } -} - void calculate_wall_dist(t_ray *ray, int x, t_cub3d_data *data) { while (true) { if (x == WIDTH / 2) check_for_zombies(ray, data); - if (!blocks_view(data->map, ray->map_x, ray->map_y) && data->map->map[ray->map_y][ray->map_x] == 'i') + if (!blocks_view(data->map, ray->map_x, ray->map_y) + && data->map->map[ray->map_y][ray->map_x] == 'i') handle_door_ray(ray, data); - if (ray->side_dist_x < ray->side_dist_y) - { - ray->side_dist_x += ray->delta_dist_x; - ray->map_x += ray->step_x; - ray->side = NORTH; - } - else - { - ray->side_dist_y += ray->delta_dist_y; - ray->map_y += ray->step_y; - ray->side = SOUTH; - } + step_ray(ray); if (blocks_view(data->map, ray->map_x, ray->map_y)) { if (x == WIDTH / 2) diff --git a/src/raycast/ray.h b/src/raycast/ray.h index 02f5180..ee993d4 100644 --- a/src/raycast/ray.h +++ b/src/raycast/ray.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/05 12:49:49 by kcolin #+# #+# */ -/* Updated: 2025/09/09 14:01:28 by tchampio ### ########.fr */ +/* Updated: 2025/10/02 00:11:01 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,7 @@ # include "../map/mapdata.h" # define BARRICADE_TICK 55000 +# include "../cub3d_data.h" /* * plane - plan de camera (vectoriel) @@ -53,4 +54,7 @@ typedef struct s_ray double wall_x; } t_ray; +void handle_door_ray(t_ray *ray, t_cub3d_data *data); +void step_ray(t_ray *ray); + #endif // RAY_H diff --git a/src/raycast/ray2.c b/src/raycast/ray2.c new file mode 100644 index 0000000..455325d --- /dev/null +++ b/src/raycast/ray2.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ray2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/02 00:09:16 by tchampio #+# #+# */ +/* Updated: 2025/10/02 00:11:51 by tchampio ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ray.h" +#include "../../libft/includes/libft.h" +#include "../player/pay.h" + +void handle_door_ray(t_ray *ray, t_cub3d_data *data) +{ + char current_tile; + + current_tile = data->map->map[ray->map_y][ray->map_x]; + if (ft_strchr("diP", current_tile) && ray->wall_dist < 1.5) + { + data->player.closest_door[0] = ray->map_x; + data->player.closest_door[1] = ray->map_y; + data->player.can_open_door = true; + if (data->keypresses.is_f_pressed) + { + data->keypresses.is_f_pressed = false; + if (current_tile == 'd') + data->map->map[ray->map_y][ray->map_x] = 'i'; + else if (current_tile == 'P' && pay(data, data->door_amount, true)) + data->map->map[ray->map_y][ray->map_x] = '0'; + else if (current_tile == 'i') + data->map->map[ray->map_y][ray->map_x] = 'd'; + } + } + else + { + data->player.closest_door[0] = -1; + data->player.closest_door[1] = -1; + data->player.can_open_door = false; + } +} + +void step_ray(t_ray *ray) +{ + if (ray->side_dist_x < ray->side_dist_y) + { + ray->side_dist_x += ray->delta_dist_x; + ray->map_x += ray->step_x; + ray->side = NORTH; + } + else + { + ray->side_dist_y += ray->delta_dist_y; + ray->map_y += ray->step_y; + ray->side = SOUTH; + } +} diff --git a/src/raycast/walls.c b/src/raycast/walls.c index 2b27a86..97e60f1 100644 --- a/src/raycast/walls.c +++ b/src/raycast/walls.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 13:17:39 by kcolin #+# #+# */ -/* Updated: 2025/10/01 14:12:44 by tchampio ### ########.fr */ +/* Updated: 2025/10/01 23:00:52 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -66,7 +66,7 @@ static int get_color(t_cub3d_data *data, t_ray *ray, int tex_y) if (ft_strchr("234567", data->map->map[ray->map_y][ray->map_x])) return (my_mlx_pixel_get(get_right_barricade(data, data->map->map[ray->map_y][ray->map_x]), tex_x, tex_y)); - if (data->map->map[ray->map_y][ray->map_x] == 'd' || data->map->map[ray->map_y][ray->map_x] == 'P') + if (ft_strchr("dP", data->map->map[ray->map_y][ray->map_x])) return (my_mlx_pixel_get(data->door_texture, tex_x, tex_y)); if (dir == NORTH) texture = data->no_texture;